Skip to content

Commit d942921

Browse files
authored
Add test for invalidation when there is a change to inputs. (#3991)
1 parent 5558265 commit d942921

File tree

1 file changed

+38
-0
lines changed

1 file changed

+38
-0
lines changed

build_runner_core/test/invalidation/asset_input_invalidation_test.dart

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,4 +189,42 @@ void main() {
189189
);
190190
});
191191
});
192+
193+
// Builder input set grows between builds.
194+
group('a.1 <== [a.2], b.3 <== b.4', () {
195+
late TestBuilderBuilder bBuilder;
196+
197+
setUp(() {
198+
tester.sources(['a.1', 'b.3']);
199+
tester.builder(from: '.1', to: '.2', isOptional: true)
200+
..reads('.1')
201+
..writes('.2');
202+
bBuilder =
203+
tester.builder(from: '.3', to: '.4')
204+
..reads('.3')
205+
..writes('.4');
206+
});
207+
208+
test('only b.4 is built', () async {
209+
expect(await tester.build(), Result(written: ['b.4']));
210+
});
211+
212+
test('changes to b.3+(a.2) <== b.4, a.2 is built', () async {
213+
expect(await tester.build(), Result(written: ['b.4']));
214+
215+
// Builder for 'b.4' reads additional input 'a.2' in the next build.
216+
//
217+
// Normally a builder's inputs can only change if the contents of its
218+
// inputs change to trigger additional reads. Simulate this by telling the
219+
// builder to read 'a.2' on the next run then changing its input so it
220+
// will rerun.
221+
bBuilder.readsOther('a.2');
222+
223+
// Now the optional 'a.2' is needed so it's built, and 'b.4' is rebuilt.
224+
expect(
225+
await tester.build(change: 'b.3'),
226+
Result(written: ['a.2', 'b.4']),
227+
);
228+
});
229+
});
192230
}

0 commit comments

Comments
 (0)