Skip to content

Commit b85997a

Browse files
committed
Combine InMemoryAssetReader and InMemoryAssetWriter into InMemoryAssetReaderWriter.
Update tests so that reader and writer are backed by the same `InMemoryAssetReaderWriter`.
1 parent afa59c3 commit b85997a

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+583
-506
lines changed

_test_common/lib/common.dart

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,7 @@ export 'package:build_test/build_test.dart'
1414
export 'assets.dart';
1515
export 'builders.dart';
1616
export 'descriptors.dart';
17-
export 'in_memory_reader.dart';
18-
export 'in_memory_writer.dart';
17+
export 'in_memory_reader_writer.dart';
1918
export 'matchers.dart';
2019
export 'package_graphs.dart';
2120
export 'sdk.dart';

_test_common/lib/in_memory_reader.dart

Lines changed: 0 additions & 30 deletions
This file was deleted.

_test_common/lib/in_memory_writer.dart renamed to _test_common/lib/in_memory_reader_writer.dart

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file
22
// for details. All rights reserved. Use of this source code is governed by a
33
// BSD-style license that can be found in the LICENSE file.
4+
45
import 'dart:async';
56
import 'dart:convert';
67

@@ -10,10 +11,20 @@ import 'package:build_test/build_test.dart';
1011
import 'package:path/path.dart' as p;
1112
import 'package:watcher/watcher.dart';
1213

13-
class InMemoryRunnerAssetWriter extends InMemoryAssetWriter
14-
implements RunnerAssetWriter {
14+
class InMemoryRunnerAssetReaderWriter extends InMemoryAssetReaderWriter
15+
implements RunnerAssetReader, RunnerAssetWriter {
16+
final _onCanReadController = StreamController<AssetId>.broadcast();
17+
Stream<AssetId> get onCanRead => _onCanReadController.stream;
1518
void Function(AssetId)? onDelete;
1619

20+
InMemoryRunnerAssetReaderWriter({super.sourceAssets, super.rootPackage});
21+
22+
@override
23+
Future<bool> canRead(AssetId id) {
24+
_onCanReadController.add(id);
25+
return super.canRead(id);
26+
}
27+
1728
@override
1829
Future writeAsBytes(AssetId id, List<int> bytes) async {
1930
var type = assets.containsKey(id) ? ChangeType.MODIFY : ChangeType.ADD;

_test_common/lib/test_environment.dart

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,29 +4,26 @@
44

55
import 'dart:async';
66

7-
// ignore: implementation_imports
8-
import 'package:build_runner_core/src/asset/reader.dart';
9-
// ignore: implementation_imports
10-
import 'package:build_runner_core/src/asset/writer.dart';
11-
// ignore: implementation_imports
12-
import 'package:build_runner_core/src/environment/build_environment.dart';
7+
import 'package:build_runner_core/build_runner_core.dart';
138
import 'package:logging/logging.dart';
149

1510
import 'common.dart';
11+
import 'in_memory_reader_writer.dart';
1612

1713
/// A [BuildEnvironment] for testing.
1814
///
19-
/// Defaults to using an [InMemoryRunnerAssetReader] and
20-
/// [InMemoryRunnerAssetWriter].
15+
/// Defaults to using an [InMemoryRunnerAssetReaderWriter].
2116
///
2217
/// To handle prompts you must first set `nextPromptResponse`. Alternatively
2318
/// you can set `throwOnPrompt` to `true` to emulate a
2419
/// [NonInteractiveBuildException].
2520
class TestBuildEnvironment extends BuildEnvironment {
21+
final InMemoryRunnerAssetReaderWriter _readerWriter;
22+
2623
@override
27-
final RunnerAssetReader reader;
24+
RunnerAssetReader get reader => _readerWriter;
2825
@override
29-
final RunnerAssetWriter writer;
26+
RunnerAssetWriter get writer => _readerWriter;
3027

3128
/// If true, this will throw a [NonInteractiveBuildException] for all calls to
3229
/// [prompt].
@@ -44,11 +41,9 @@ class TestBuildEnvironment extends BuildEnvironment {
4441
int? _nextPromptResponse;
4542

4643
TestBuildEnvironment(
47-
{RunnerAssetReader? reader,
48-
RunnerAssetWriter? writer,
44+
{InMemoryRunnerAssetReaderWriter? readerWriter,
4945
this.throwOnPrompt = false})
50-
: reader = reader ?? InMemoryRunnerAssetReader(),
51-
writer = writer ?? InMemoryRunnerAssetWriter();
46+
: _readerWriter = readerWriter ?? InMemoryRunnerAssetReaderWriter();
5247

5348
@override
5449
void onLog(LogRecord record) => logRecords.add(record);

_test_common/lib/test_phases.dart

Lines changed: 18 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,7 @@ import 'package:build_test/build_test.dart';
1111
import 'package:logging/logging.dart';
1212
import 'package:test/test.dart';
1313

14-
import 'in_memory_reader.dart';
15-
import 'in_memory_writer.dart';
14+
import 'in_memory_reader_writer.dart';
1615
import 'package_graphs.dart';
1716

1817
Future<void> wait(int milliseconds) =>
@@ -89,16 +88,13 @@ Future<BuildResult> testBuilders(
8988
void Function(AssetId id)? onDelete,
9089
}) async {
9190
packageGraph ??= buildPackageGraph({rootPackage('a'): []});
92-
final writer =
93-
resumeFrom == null ? InMemoryRunnerAssetWriter() : resumeFrom.writer;
94-
writer.onDelete = onDelete;
95-
final reader = resumeFrom == null
96-
? InMemoryRunnerAssetReader.shareAssetCache(writer.assets,
97-
rootPackage: packageGraph.root.name)
98-
: resumeFrom.reader;
91+
final readerWriter = resumeFrom == null
92+
? InMemoryRunnerAssetReaderWriter(rootPackage: packageGraph.root.name)
93+
: resumeFrom.readerWriter;
94+
readerWriter.onDelete = onDelete;
9995
var pkgConfigId =
10096
AssetId(packageGraph.root.name, '.dart_tool/package_config.json');
101-
if (!await reader.canRead(pkgConfigId)) {
97+
if (!await readerWriter.canRead(pkgConfigId)) {
10298
var packageConfig = {
10399
'configVersion': 2,
104100
'packages': [
@@ -111,21 +107,21 @@ Future<BuildResult> testBuilders(
111107
},
112108
],
113109
};
114-
await writer.writeAsString(pkgConfigId, jsonEncode(packageConfig));
110+
await readerWriter.writeAsString(pkgConfigId, jsonEncode(packageConfig));
115111
}
116112

117113
inputs.forEach((serializedId, contents) {
118114
var id = makeAssetId(serializedId);
119115
if (contents is String) {
120-
reader.cacheStringAsset(id, contents);
116+
readerWriter.cacheStringAsset(id, contents);
121117
} else if (contents is List<int>) {
122-
reader.cacheBytesAsset(id, contents);
118+
readerWriter.cacheBytesAsset(id, contents);
123119
}
124120
});
125121

126122
builderConfigOverrides ??= const {};
127123
var environment = OverrideableEnvironment(IOEnvironment(packageGraph),
128-
reader: reader, writer: writer, onLog: onLog);
124+
reader: readerWriter, writer: readerWriter, onLog: onLog);
129125
var logSubscription =
130126
LogSubscription(environment, verbose: verbose, logLevel: logLevel);
131127
var options = await BuildOptions.create(logSubscription,
@@ -152,14 +148,13 @@ Future<BuildResult> testBuilders(
152148
if (checkBuildStatus) {
153149
checkBuild(result,
154150
outputs: outputs,
155-
writer: writer,
151+
writer: readerWriter,
156152
status: status,
157153
rootPackage: packageGraph.root.name,
158154
expectedGeneratedDir: expectedGeneratedDir);
159155
}
160156

161-
result._attachReader(reader);
162-
result._attachWriter(writer);
157+
result._attachReaderWriter(readerWriter);
163158

164159
return result;
165160
}
@@ -199,21 +194,13 @@ void checkBuild(BuildResult result,
199194
}
200195

201196
extension BuildResultExtension on BuildResult {
202-
/// The reader used in this `testBuilders` build.
203-
InMemoryRunnerAssetReader get reader => _readerExpando[this]!;
197+
/// The reader/writer used in this `testBuilders` build.
198+
InMemoryRunnerAssetReaderWriter get readerWriter =>
199+
_readerWriterExpando[this]!;
204200

205-
/// The writer used in this `testBuilders` build.
206-
InMemoryRunnerAssetWriter get writer => _writerExpando[this]!;
207-
208-
void _attachReader(InMemoryRunnerAssetReader reader) {
209-
_readerExpando[this] = reader;
210-
}
211-
212-
void _attachWriter(InMemoryRunnerAssetWriter writer) {
213-
_writerExpando[this] = writer;
201+
void _attachReaderWriter(InMemoryRunnerAssetReaderWriter readerWriter) {
202+
_readerWriterExpando[this] = readerWriter;
214203
}
215204
}
216205

217-
final Expando<InMemoryRunnerAssetReader> _readerExpando = Expando();
218-
219-
final Expando<InMemoryRunnerAssetWriter> _writerExpando = Expando();
206+
final Expando<InMemoryRunnerAssetReaderWriter> _readerWriterExpando = Expando();

build/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
- Add `package:build/src/internal.dart` for use by `build_resolvers`,
44
`build_runner_core` and `build_test`.
5+
- Use `build_test` 3.0.0.
56

67
## 2.4.2
78

build/pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ dependencies:
2020

2121
dev_dependencies:
2222
build_resolvers: ^2.4.0
23-
build_test: ^2.0.0
23+
build_test: ^3.0.0-wip
2424
dart_flutter_team_lints: ^3.1.0
2525
test: ^1.16.0
2626

build/test/builder/build_step_impl_test.dart

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,7 @@ void main() {
7878
late InMemoryAssetReader reader;
7979

8080
setUp(() {
81-
writer = InMemoryAssetWriter();
82-
reader = InMemoryAssetReader.shareAssetCache(writer.assets);
81+
writer = reader = InMemoryAssetReaderWriter();
8382
});
8483

8584
test('tracks outputs created by a builder', () async {

build/test/generate/run_builder_test.dart

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,7 @@ void main() {
2929
});
3030
builder = TestBuilder(
3131
extraWork: (buildStep, __) => buildStep.fetchResource(resource));
32-
writer = InMemoryAssetWriter();
33-
reader = InMemoryAssetReader.shareAssetCache(writer.assets);
32+
writer = reader = InMemoryAssetReaderWriter();
3433
addAssets(inputs, writer);
3534
});
3635

build_modules/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## 5.0.12-wip
2+
3+
- Use `build_test` 3.0.0.
4+
15
## 5.0.11
26

37
- Support 3.8.0 pre-release sdks.

build_modules/pubspec.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
name: build_modules
2-
version: 5.0.11
2+
version: 5.0.12-wip
33
description: >-
44
Builders to analyze and split Dart code into individually compilable modules
55
based on imports.
@@ -32,7 +32,7 @@ dev_dependencies:
3232
path: test/fixtures/b
3333
# Used inside tests
3434
build_runner: ^2.0.0
35-
build_test: ^2.0.0
35+
build_test: ^3.0.0-wip
3636
json_serializable: ^6.0.0
3737
test: ^1.16.0
3838

build_modules/test/util.dart

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,13 @@ Future<void> testBuilderAndCollectAssets(
1717
void Function(LogRecord log)? onLog,
1818
void Function(AssetId, Iterable<AssetId>)?
1919
reportUnusedAssetsForInput}) async {
20-
var writer = InMemoryAssetWriter();
2120
onLog ??= (log) => printOnFailure('${log.level}: ${log.message}');
22-
await testBuilder(builder, assets,
21+
final result = await testBuilder(builder, assets,
2322
generateFor: generateFor,
2423
outputs: outputs,
2524
onLog: onLog,
26-
reportUnusedAssetsForInput: reportUnusedAssetsForInput,
27-
writer: writer);
28-
writer.assets.forEach((id, value) {
25+
reportUnusedAssetsForInput: reportUnusedAssetsForInput);
26+
result.readerWriter.assets.forEach((id, value) {
2927
assets['${id.package}|${id.path}'] = value;
3028
});
3129
}

build_resolvers/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
- Start using `package:build/src/internal.dart`.
44
- Switch `BuildAssetUriResolver` dependency crawl to an iterative
55
algorithm, preventing stack overflows.
6+
- Use `build_test` 3.0.0.
67

78
## 2.4.4
89

build_resolvers/pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ dependencies:
2424
yaml: ^3.0.0
2525

2626
dev_dependencies:
27-
build_test: ^2.0.0
27+
build_test: ^3.0.0-wip
2828
dart_flutter_team_lints: ^3.1.0
2929
test: ^1.16.0
3030

0 commit comments

Comments
 (0)