drift/drift_dev/test/analysis/test_utils.dart

64 lines
1.9 KiB
Dart
Raw Normal View History

2022-08-30 13:50:07 -07:00
import 'package:analyzer/dart/element/element.dart';
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';
import 'package:logging/logging.dart';
2022-08-30 13:50:07 -07:00
import 'package:test/expect.dart';
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)
: 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-30 13:50:07 -07:00
factory TestBackend.inTest(Map<String, String> sourceContents,
{DriftOptions options = const DriftOptions.defaults()}) {
final backend = TestBackend(sourceContents, options);
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);
}
@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();
}
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.analysis.values.expand((e) => e.errorsDuringAnalysis),
'(errors in analyzed elements)', isEmpty);
2022-08-30 13:50:07 -07:00
Matcher isDriftError(dynamic message) {
return isA<DriftAnalysisError>().having((e) => e.message, 'message', message);
}