@@ -12,9 +12,9 @@ import "package:build/src/analyzer/resolver.dart";
12
12
import "package:build_resolvers/src/resolver.dart" ;
13
13
14
14
class _InMemoryAssetWriter implements AssetWriter {
15
- String output;
15
+ Map < AssetId , String > output;
16
16
17
- _InMemoryAssetWriter ();
17
+ _InMemoryAssetWriter () : output = Map < AssetId , String >() ;
18
18
19
19
@override
20
20
Future writeAsBytes (AssetId id, List <int > bytes) async {
@@ -23,23 +23,15 @@ class _InMemoryAssetWriter implements AssetWriter {
23
23
24
24
@override
25
25
Future writeAsString (AssetId id, String contents, {Encoding encoding = utf8}) async {
26
- if (output != null ) throw Exception ("output was set already" );
27
- output = contents;
26
+ if (output[id] != null ) throw Exception ("output was set already" );
27
+ output[id] = contents;
28
28
}
29
29
}
30
30
31
31
class _SingleFileAssetReader extends AssetReader {
32
- AssetId id;
33
-
34
- _SingleFileAssetReader (this .id) {
35
- if (id.package != "objectbox_generator" ) {
36
- throw Exception ("asset package needs to be 'objectbox_generator', but got '${id .package }'" );
37
- }
38
- }
39
-
40
32
Future <bool > canRead (AssetId id) async => true ; //this.id == id;
41
33
42
- Stream <AssetId > findAssets (Glob glob, {String package}) => Stream . fromIterable ([id] );
34
+ Stream <AssetId > findAssets (Glob glob, {String package}) => throw UnimplementedError ( );
43
35
44
36
@override
45
37
Future <List <int >> readAsBytes (AssetId id) async => utf8.encode (await readAsString (id));
@@ -59,24 +51,45 @@ class _SingleFileAssetReader extends AssetReader {
59
51
}
60
52
}
61
53
62
- Future <String > _buildGeneratorOutput (String caseName) async {
63
- AssetId assetId = AssetId ("objectbox_generator" , "test/cases/$caseName /$caseName .dart" );
54
+ Future <Map <AssetId , String >> _buildGeneratorOutput (String caseName) async {
55
+ final entities = List <AssetId >();
56
+ for (var entity in Glob ("test/cases/$caseName /*.dart_testcase" ).listSync ()) {
57
+ final path = entity.path.substring (0 , entity.path.length - "_testcase" .length);
58
+ entities.add (AssetId ("objectbox_generator" , path));
59
+ }
60
+
64
61
var writer = _InMemoryAssetWriter ();
65
- var reader = _SingleFileAssetReader (assetId );
62
+ var reader = _SingleFileAssetReader ();
66
63
Resolvers resolvers = AnalyzerResolvers ();
67
64
68
- await runBuilder (objectboxModelFactory (BuilderOptions .empty), [assetId] , reader, writer, resolvers);
65
+ await runBuilder (objectboxModelFactory (BuilderOptions .empty), entities , reader, writer, resolvers);
69
66
return writer.output;
70
67
}
71
68
72
- void testGeneratorOutput (String caseName) {
69
+ void checkExpectedContents (String path, String contents, bool updateExpected) async {
70
+ final expectedFile = File (path);
71
+ final expectedContents = await expectedFile.readAsString ();
72
+
73
+ if (updateExpected) {
74
+ if (expectedContents != contents) {
75
+ print ("Updating $path " );
76
+ }
77
+ await expectedFile.writeAsString (contents);
78
+ } else {
79
+ expect (contents, equals (expectedContents));
80
+ }
81
+ }
82
+
83
+ void testGeneratorOutput (String caseName, bool updateExpected) {
73
84
test (caseName, () async {
74
- String built = await _buildGeneratorOutput (caseName);
75
- String expected = await File ("test/cases/$caseName /$caseName .g.dart_expected" ).readAsString ();
76
- expect (built, equals (expected));
85
+ Map <AssetId , String > built = await _buildGeneratorOutput (caseName);
86
+
87
+ built.forEach ((assetId, generatedCode) async {
88
+ final expectedPath = assetId.path.replaceAll (".objectbox_model.g.part" , ".g.dart_expected" );
89
+ checkExpectedContents (expectedPath, generatedCode, updateExpected);
90
+ });
77
91
78
92
String jsonBuilt = await File ("objectbox-model.json" ).readAsString ();
79
- String jsonExpected = await File ("test/cases/$caseName /objectbox-model.json_expected" ).readAsString ();
80
- expect (jsonBuilt, equals (jsonExpected));
93
+ checkExpectedContents ("test/cases/$caseName /objectbox-model.json_expected" , jsonBuilt, updateExpected);
81
94
});
82
95
}
0 commit comments