| // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| |
| import 'dart:async'; |
| |
| import 'package:test/test.dart'; |
| |
| import '../utils.dart'; |
| |
| void sharedTests() { |
| test('ready does not complete until after subscription', () async { |
| var watcher = createWatcher(); |
| |
| var ready = false; |
| unawaited(watcher.ready.then((_) { |
| ready = true; |
| })); |
| await pumpEventQueue(); |
| |
| expect(ready, isFalse); |
| |
| // Subscribe to the events. |
| var subscription = watcher.events.listen((event) {}); |
| |
| await watcher.ready; |
| |
| // Should eventually be ready. |
| expect(watcher.isReady, isTrue); |
| |
| await subscription.cancel(); |
| }); |
| |
| test('ready completes immediately when already ready', () async { |
| var watcher = createWatcher(); |
| |
| // Subscribe to the events. |
| var subscription = watcher.events.listen((event) {}); |
| |
| // Allow watcher to become ready |
| await watcher.ready; |
| |
| // Ensure ready completes immediately |
| expect( |
| watcher.ready.timeout( |
| const Duration(milliseconds: 0), |
| onTimeout: () => throw StateError('Does not complete immediately'), |
| ), |
| completes, |
| ); |
| |
| await subscription.cancel(); |
| }); |
| |
| test('ready returns a future that does not complete after unsubscribing', |
| () async { |
| var watcher = createWatcher(); |
| |
| // Subscribe to the events. |
| var subscription = watcher.events.listen((event) {}); |
| |
| // Wait until ready. |
| await watcher.ready; |
| |
| // Now unsubscribe. |
| await subscription.cancel(); |
| |
| // Should be back to not ready. |
| expect(watcher.ready, doesNotComplete); |
| }); |
| |
| test('completes even if directory does not exist', () async { |
| var watcher = createWatcher(path: 'does/not/exist'); |
| |
| // Subscribe to the events (else ready will never fire). |
| var subscription = watcher.events.listen((event) {}, onError: (error) {}); |
| |
| // Expect ready still completes. |
| await watcher.ready; |
| |
| // Now unsubscribe. |
| await subscription.cancel(); |
| }); |
| } |