@@ -11,8 +11,7 @@ import 'package:build_test/build_test.dart';
11
11
import 'package:logging/logging.dart' ;
12
12
import 'package:test/test.dart' ;
13
13
14
- import 'in_memory_reader.dart' ;
15
- import 'in_memory_writer.dart' ;
14
+ import 'in_memory_reader_writer.dart' ;
16
15
import 'package_graphs.dart' ;
17
16
18
17
Future <void > wait (int milliseconds) =>
@@ -41,14 +40,13 @@ void _printOnFailure(LogRecord record) {
41
40
/// For example `$$myapp|lib/utils.copy.dart` will check that the generated
42
41
/// output was written to the build cache.
43
42
///
43
+ /// [resumeFrom] reuses the `readerWriter` from a previous [BuildResult] .
44
+ ///
44
45
/// [packageGraph] supplies the root package into which the outputs are to be
45
46
/// written.
46
47
///
47
48
/// [status] optionally indicates the desired outcome.
48
49
///
49
- /// [writer] can optionally be provided to capture assets written by the
50
- /// builders (e.g. when [outputs] is not sufficient).
51
- ///
52
50
/// [logLevel] sets the builder log level and [onLog] can optionally capture
53
51
/// build log messages.
54
52
///
@@ -67,15 +65,14 @@ void _printOnFailure(LogRecord record) {
67
65
/// });
68
66
/// }
69
67
///
70
- Future <BuildResult > testBuilders (
68
+ Future <TestBuildersResult > testBuilders (
71
69
List <BuilderApplication > builders,
72
70
Map <String , /*String|List<int>*/ Object > inputs, {
71
+ TestBuildersResult ? resumeFrom,
73
72
Map <String , /*String|List<int>*/ Object >? outputs,
74
73
PackageGraph ? packageGraph,
75
74
BuildStatus status = BuildStatus .success,
76
75
Map <String , BuildConfig >? overrideBuildConfig,
77
- InMemoryRunnerAssetReader ? reader,
78
- InMemoryRunnerAssetWriter ? writer,
79
76
Level ? logLevel,
80
77
// A better way to "silence" logging than setting logLevel to OFF.
81
78
void Function (LogRecord record) onLog = _printOnFailure,
@@ -88,14 +85,16 @@ Future<BuildResult> testBuilders(
88
85
Set <BuildFilter > buildFilters = const {},
89
86
String ? logPerformanceDir,
90
87
String expectedGeneratedDir = 'generated' ,
88
+ void Function (AssetId id)? onDelete,
91
89
}) async {
92
90
packageGraph ?? = buildPackageGraph ({rootPackage ('a' ): []});
93
- writer ?? = InMemoryRunnerAssetWriter ();
94
- reader ?? = InMemoryRunnerAssetReader .shareAssetCache (writer.assets,
95
- rootPackage: packageGraph.root.name);
91
+ final readerWriter = resumeFrom == null
92
+ ? InMemoryRunnerAssetReaderWriter (rootPackage: packageGraph.root.name)
93
+ : resumeFrom.readerWriter;
94
+ readerWriter.onDelete = onDelete;
96
95
var pkgConfigId =
97
96
AssetId (packageGraph.root.name, '.dart_tool/package_config.json' );
98
- if (! await reader .canRead (pkgConfigId)) {
97
+ if (! await readerWriter .canRead (pkgConfigId)) {
99
98
var packageConfig = {
100
99
'configVersion' : 2 ,
101
100
'packages' : [
@@ -108,21 +107,21 @@ Future<BuildResult> testBuilders(
108
107
},
109
108
],
110
109
};
111
- await writer .writeAsString (pkgConfigId, jsonEncode (packageConfig));
110
+ await readerWriter .writeAsString (pkgConfigId, jsonEncode (packageConfig));
112
111
}
113
112
114
113
inputs.forEach ((serializedId, contents) {
115
114
var id = makeAssetId (serializedId);
116
115
if (contents is String ) {
117
- reader ! .cacheStringAsset (id, contents);
116
+ readerWriter .cacheStringAsset (id, contents);
118
117
} else if (contents is List <int >) {
119
- reader ! .cacheBytesAsset (id, contents);
118
+ readerWriter .cacheBytesAsset (id, contents);
120
119
}
121
120
});
122
121
123
122
builderConfigOverrides ?? = const {};
124
123
var environment = OverrideableEnvironment (IOEnvironment (packageGraph),
125
- reader: reader , writer: writer , onLog: onLog);
124
+ reader: readerWriter , writer: readerWriter , onLog: onLog);
126
125
var logSubscription =
127
126
LogSubscription (environment, verbose: verbose, logLevel: logLevel);
128
127
var options = await BuildOptions .create (logSubscription,
@@ -149,12 +148,13 @@ Future<BuildResult> testBuilders(
149
148
if (checkBuildStatus) {
150
149
checkBuild (result,
151
150
outputs: outputs,
152
- writer: writer ,
151
+ writer: readerWriter ,
153
152
status: status,
154
153
rootPackage: packageGraph.root.name,
155
154
expectedGeneratedDir: expectedGeneratedDir);
156
155
}
157
- return result;
156
+
157
+ return TestBuildersResult (buildResult: result, readerWriter: readerWriter);
158
158
}
159
159
160
160
/// Translates expected outptus which start with `$$` to the build cache and
@@ -190,3 +190,10 @@ void checkBuild(BuildResult result,
190
190
mapAssetIds: (id) => mapHidden (id, expectedGeneratedDir));
191
191
}
192
192
}
193
+
194
+ class TestBuildersResult {
195
+ final BuildResult buildResult;
196
+ final InMemoryRunnerAssetReaderWriter readerWriter;
197
+
198
+ TestBuildersResult ({required this .buildResult, required this .readerWriter});
199
+ }
0 commit comments