matcher
matcher copied to clipboard
Difference between yield and yield* in emitsInOrder
When creating a Stream, emitsInOrder seems to works differently for yield and yield*.
The sample code for each is as follows.
Stream<String> get sampleStream async* {
print('sampleStream 0');
yield* Stream.value('sampleStream 0');
print('sampleStream 1');
yield* Stream.value('sampleStream 1');
print('sampleStream 2');
yield* Stream.value('sampleStream 2');
}
Stream<String> get sampleStream2 async* {
print('sampleStream 0');
yield 'sampleStream 0';
print('sampleStream 1');
yield 'sampleStream 1';
print('sampleStream 2');
yield 'sampleStream 2';
}
Case 1
expect(
sampleStream,
emitsInOrder([
'sampleStream 0',
]),
);
// sampleStream
sampleStream 0
// sampleStream2
sampleStream 0
sampleStream 1
sampleStream 2
Case 2. Add an expected value in emitsInOrder
expect(
sampleStream,
emitsInOrder([
'sampleStream 0',
'sampleStream 1',
]),
);
// sampleStream
sampleStream 0
sampleStream 1
// sampleStream2
sampleStream 0
sampleStream 1
sampleStream 2
Case 3. Add a emitsDone as StreamMatcher
expect(
sampleStream,
emitsInOrder([
'sampleStream 0',
emitsDone,
]),
);
// sampleStream
sampleStream 0
sampleStream 1
sampleStream 2
// sampleStream2
sampleStream 0
sampleStream 1
sampleStream 2
In any case, if emitsInOrder is called, all queues should be emitted.