// 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.

// VMOptions=--delayed-filewatch-callback --enable-isolate-groups --experimental-enable-isolate-groups-jit
// VMOptions=--delayed-filewatch-callback --no-enable-isolate-groups

// Verifies that cancelling subscription from inside of the event handler
// works as expected, does not result in crash or hang.

import "dart:async";
import "dart:io";

import "package:path/path.dart";

final completer = Completer<void>();
var subscription;

void handleWatchEvent(event) {
  if (event is FileSystemCreateEvent && event.path.endsWith('txt')) {
    subscription.cancel();
    completer.complete();
  }
}

void main() async {
  if (!FileSystemEntity.isWatchSupported) return;
  final dir = Directory.systemTemp.createTempSync('dart_file_system_watcher');
  final watcher = dir.watch();
  subscription = watcher.listen(handleWatchEvent);

  print('watching ${dir.path}');
  for (int i = 0; i < 1000; i++) {
    File(join(dir.path, 'file_$i.txt')).createSync();
  }
  await completer.future;
  try {
    dir.deleteSync(recursive: true);
  } catch (_) {}
}
