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