mirror of https://github.com/AMT-Cheif/drift.git
Verify behavior of the type-extracting builder
This commit is contained in:
parent
8819245685
commit
261fbe6ba0
|
@ -0,0 +1,59 @@
|
||||||
|
import 'dart:convert';
|
||||||
|
|
||||||
|
import 'package:build/build.dart';
|
||||||
|
import 'package:build_test/build_test.dart';
|
||||||
|
import 'package:moor_generator/src/backends/build/preprocess_builder.dart';
|
||||||
|
import 'package:test/test.dart';
|
||||||
|
|
||||||
|
import '../../test_utils.dart';
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
test('writes types from expressions in moor files', () async {
|
||||||
|
final writer = InMemoryAssetWriter();
|
||||||
|
final reader = MultiAssetReader([
|
||||||
|
WrittenAssetsReader(writer),
|
||||||
|
await PackageAssetReader.currentIsolate(),
|
||||||
|
]);
|
||||||
|
|
||||||
|
await testBuilder(
|
||||||
|
PreprocessBuilder(),
|
||||||
|
{
|
||||||
|
'foo|main.moor': '''
|
||||||
|
import 'converter.dart';
|
||||||
|
--import 'package:moor_converters/converters.dart';
|
||||||
|
|
||||||
|
CREATE TABLE foo (
|
||||||
|
id INT NOT NULL MAPPED BY `const MyConverter()`
|
||||||
|
);
|
||||||
|
''',
|
||||||
|
'foo|converter.dart': '''
|
||||||
|
import 'package:moor/moor.dart';
|
||||||
|
|
||||||
|
class MyConverter extends TypeConverter<DateTime, int> {
|
||||||
|
const MyConverter();
|
||||||
|
|
||||||
|
int mapToSql(DateTime time) => time?.millisecondsSinceEpoch;
|
||||||
|
|
||||||
|
DateTime mapToDart(int fromSql) {
|
||||||
|
if (fromSql == null) return null;
|
||||||
|
return DateTime.fromMillisecondsSinceEpoch(fromSql);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
''',
|
||||||
|
},
|
||||||
|
writer: writer,
|
||||||
|
reader: reader,
|
||||||
|
);
|
||||||
|
|
||||||
|
final output =
|
||||||
|
await reader.readAsString(AssetId.parse('foo|main.dart_in_moor'));
|
||||||
|
final serialized = json.decode(output);
|
||||||
|
|
||||||
|
expect(serialized['const MyConverter()'], {
|
||||||
|
'type': 'interface',
|
||||||
|
'library': 'asset:foo/converter.dart',
|
||||||
|
'class_name': 'MyConverter',
|
||||||
|
'type_args': [],
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
|
@ -0,0 +1,40 @@
|
||||||
|
import 'dart:convert';
|
||||||
|
|
||||||
|
import 'package:build/build.dart';
|
||||||
|
import 'package:build_test/build_test.dart';
|
||||||
|
import 'package:glob/glob.dart';
|
||||||
|
|
||||||
|
/// A [MultiPackageAssetReader] able to read assets from a
|
||||||
|
/// [RecordingAssetWriter].
|
||||||
|
class WrittenAssetsReader extends MultiPackageAssetReader {
|
||||||
|
final RecordingAssetWriter source;
|
||||||
|
|
||||||
|
WrittenAssetsReader(this.source);
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<bool> canRead(AssetId id) {
|
||||||
|
return Future.value(source.assets.containsKey(id));
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Stream<AssetId> findAssets(Glob glob, {String package}) {
|
||||||
|
return Stream.fromIterable(source.assets.keys).where((id) {
|
||||||
|
final matchesPath = glob.matches(id.path);
|
||||||
|
if (package != null) {
|
||||||
|
return id.package == package && matchesPath;
|
||||||
|
}
|
||||||
|
return matchesPath;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<List<int>> readAsBytes(AssetId id) {
|
||||||
|
return Future.value(source.assets[id]);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<String> readAsString(AssetId id, {Encoding encoding}) {
|
||||||
|
final actualEncoding = encoding ?? utf8;
|
||||||
|
return Future.value(actualEncoding.decode(source.assets[id]));
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue