2022-08-30 13:50:07 -07:00
|
|
|
import 'package:analyzer/dart/element/element.dart';
|
2022-08-20 13:54:46 -07:00
|
|
|
import 'package:build/build.dart';
|
|
|
|
import 'package:drift_dev/src/analysis/backend.dart';
|
2022-08-30 13:50:07 -07:00
|
|
|
import 'package:drift_dev/src/analysis/driver/driver.dart';
|
|
|
|
import 'package:drift_dev/src/analysis/driver/error.dart';
|
|
|
|
import 'package:drift_dev/src/analysis/driver/state.dart';
|
|
|
|
import 'package:drift_dev/src/analyzer/options.dart';
|
2022-08-20 13:54:46 -07:00
|
|
|
import 'package:logging/logging.dart';
|
2022-08-30 13:50:07 -07:00
|
|
|
import 'package:test/expect.dart';
|
2022-08-20 13:54:46 -07:00
|
|
|
import 'package:test/scaffolding.dart';
|
|
|
|
|
|
|
|
class TestBackend extends DriftBackend {
|
|
|
|
final Map<String, String> sourceContents;
|
|
|
|
|
2022-08-30 13:50:07 -07:00
|
|
|
late final DriftAnalysisDriver driver;
|
|
|
|
|
|
|
|
TestBackend(Map<String, String> sourceContents, DriftOptions options)
|
2022-08-20 13:54:46 -07:00
|
|
|
: sourceContents = {
|
|
|
|
for (final entry in sourceContents.entries)
|
|
|
|
AssetId.parse(entry.key).uri.toString(): entry.value,
|
2022-08-30 13:50:07 -07:00
|
|
|
} {
|
|
|
|
driver = DriftAnalysisDriver(this, options);
|
|
|
|
}
|
2022-08-20 13:54:46 -07:00
|
|
|
|
2022-08-30 13:50:07 -07:00
|
|
|
factory TestBackend.inTest(Map<String, String> sourceContents,
|
|
|
|
{DriftOptions options = const DriftOptions.defaults()}) {
|
|
|
|
final backend = TestBackend(sourceContents, options);
|
2022-08-20 13:54:46 -07:00
|
|
|
addTearDown(backend.dispose);
|
|
|
|
|
|
|
|
return backend;
|
|
|
|
}
|
|
|
|
|
|
|
|
@override
|
|
|
|
Logger get log => Logger.root;
|
|
|
|
|
2022-08-30 13:50:07 -07:00
|
|
|
@override
|
|
|
|
Uri resolveUri(Uri base, String uriString) {
|
|
|
|
return base.resolve(uriString);
|
|
|
|
}
|
|
|
|
|
2022-08-20 13:54:46 -07:00
|
|
|
@override
|
|
|
|
Future<String> readAsString(Uri uri) async {
|
|
|
|
return sourceContents[uri.toString()] ??
|
|
|
|
(throw StateError('No source for $uri'));
|
|
|
|
}
|
|
|
|
|
2022-08-30 13:50:07 -07:00
|
|
|
@override
|
|
|
|
Future<LibraryElement> readDart(Uri uri) {
|
|
|
|
// TODO: implement readDart
|
|
|
|
throw UnimplementedError();
|
|
|
|
}
|
|
|
|
|
2022-08-20 13:54:46 -07:00
|
|
|
Future<void> dispose() async {}
|
|
|
|
}
|
2022-08-30 13:50:07 -07:00
|
|
|
|
|
|
|
Matcher get hasNoErrors => isA<FileState>()
|
|
|
|
.having((e) => e.errorsDuringDiscovery, 'errorsDuringDiscovery', isEmpty)
|
|
|
|
.having((e) => e.errorsDuringAnalysis, 'errorsDuringAnalysis', isEmpty);
|
|
|
|
|
|
|
|
Matcher isDriftError(dynamic message) {
|
|
|
|
return isA<DriftAnalysisError>().having((e) => e.message, 'message', message);
|
|
|
|
}
|