anchor.diff:          startWatch(phases, {'a|web/a.txt': 'a', 'a|web/b.txt': 'b',}, writer)
               .listen(results.add);
   
  -        await wait(200);
  -        expect(results.length, 1);
  +        var result = await nextResult(results);
           checkOutputs({'a|web/a.txt.copy': 'a', 'a|web/b.txt.copy': 'b',},
  -            results[0], writer.assets);
  +            result, writer.assets);
   
           await writer.delete(makeAssetId('a|web/a.txt'));
           FakeWatcher
               .notifyWatchers(new WatchEvent(ChangeType.REMOVE, 'a/web/a.txt'));
   
  -        await wait(200);
  -        expect(results.length, 2);
  -        checkOutputs({'a|web/b.txt.copy': 'b',}, results[1], writer.assets);
  +        result = await nextResult(results);
  +        checkOutputs({'a|web/b.txt.copy': 'b',}, result, writer.assets);
         });
       });
     });
  
positive.code: /// Tells the program to stop watching files and terminate.
  Future terminateWatch() {
    assert(_terminateWatchController != null);
    /// Can add any type of event.
    _terminateWatchController.add(null);
    return _terminateWatchController.close();
  
negative.code:         var results = [];
          startWatch(phases, {'a|web/a.txt': 'a'}, writer).listen(results.add);
  
          var result = await nextResult(results);
          checkOutputs({'a|web/a.txt.copy': 'a',}, result, writer.assets);
  
          await writer.writeAsString(makeAsset('a|web/a.txt', 'b'));
          FakeWatcher
              .notifyWatchers(new WatchEvent(ChangeType.MODIFY, 'a/web/a.txt'));
  
          result = await nextResult(results);
          checkOutputs({'a|web/a.txt.copy': 'b',}, result, writer.assets);
        });
  
        test('rebuilds on new files', () async {
  