blob: ab2c3e1624bb3611096c7f5744361cd2c067e231 [file] [log] [blame]
// 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();
});
}