| // Copyright (c) 2013, 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. | |
| @Timeout.factor(2) | |
| library; | |
| import 'package:test/test.dart'; | |
| import 'package:watcher/watcher.dart'; | |
| import '../utils.dart'; | |
| import 'end_to_end_tests.dart'; | |
| import 'file_tests.dart'; | |
| import 'link_tests.dart'; | |
| void main() { | |
| // Use a short delay to make the tests run quickly. | |
| watcherFactory = (dir) => PollingDirectoryWatcher( | |
| dir, | |
| pollingDelay: const Duration(milliseconds: 10), | |
| ); | |
| /// See [enableSleepUntilNewModificationTime] for a note about the "polling" | |
| /// tests. | |
| setUp(enableSleepUntilNewModificationTime); | |
| fileTests(isNative: false); | |
| linkTests(isNative: false); | |
| endToEndTests(); | |
| // A poll does an async directory list that runs "stat" on each file. Check | |
| // handling of a file that is deleted between the two. | |
| test('deletes during poll', () async { | |
| await startWatcher(); | |
| for (var i = 0; i != 300; ++i) { | |
| writeFile('$i'); | |
| } | |
| // A series of deletes with delays in between for 300ms, which will | |
| // intersect with the 10ms polling multiple times. | |
| for (var i = 0; i != 300; ++i) { | |
| deleteFile('$i'); | |
| await Future<void>.delayed(const Duration(milliseconds: 1)); | |
| } | |
| final events = await takeEvents( | |
| duration: const Duration(milliseconds: 500), | |
| ); | |
| // Events should be adds and removes that pair up, with no modify events. | |
| final adds = <String>{}; | |
| final removes = <String>{}; | |
| for (var event in events) { | |
| if (event.type == ChangeType.ADD) { | |
| adds.add(event.path); | |
| } else if (event.type == ChangeType.REMOVE) { | |
| removes.add(event.path); | |
| } else { | |
| fail('Unexpected event: $event'); | |
| } | |
| } | |
| expect(adds, removes); | |
| }); | |
| } |