// 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('ready 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(); }); }