Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1839)

Unified Diff: pkg/watcher/test/path_set_test.dart

Issue 66163002: Wrap Directory.watch on Mac OS for the watcher package. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: code review Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « pkg/watcher/test/no_subscription/mac_os_test.dart ('k') | pkg/watcher/test/ready/mac_os_test.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/watcher/test/path_set_test.dart
diff --git a/pkg/watcher/test/path_set_test.dart b/pkg/watcher/test/path_set_test.dart
new file mode 100644
index 0000000000000000000000000000000000000000..cc8932d78bfd2d9cf55f52650fb61a931d08afa1
--- /dev/null
+++ b/pkg/watcher/test/path_set_test.dart
@@ -0,0 +1,235 @@
+// 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.
+
+import 'package:path/path.dart' as p;
+import 'package:unittest/unittest.dart';
+import 'package:watcher/src/path_set.dart';
+
+import 'utils.dart';
+
+Matcher containsPath(String path) => predicate((set) =>
+ set is PathSet && set.contains(path),
+ 'set contains "$path"');
+
+Matcher containsDir(String path) => predicate((set) =>
+ set is PathSet && set.containsDir(path),
+ 'set contains directory "$path"');
+
+void main() {
+ initConfig();
+
+ var set;
+ setUp(() => set = new PathSet("root"));
+
+ group("adding a path", () {
+ test("stores the path in the set", () {
+ set.add("root/path/to/file");
+ expect(set, containsPath("root/path/to/file"));
+ });
+
+ test("that's a subdir of another path keeps both in the set", () {
+ set.add("root/path");
+ set.add("root/path/to/file");
+ expect(set, containsPath("root/path"));
+ expect(set, containsPath("root/path/to/file"));
+ });
+
+ test("that's not normalized normalizes the path before storing it", () {
+ set.add("root/../root/path/to/../to/././file");
+ expect(set, containsPath("root/path/to/file"));
+ });
+
+ test("that's absolute normalizes the path before storing it", () {
+ set.add(p.absolute("root/path/to/file"));
+ expect(set, containsPath("root/path/to/file"));
+ });
+
+ test("that's not beneath the root throws an error", () {
+ expect(() => set.add("path/to/file"), throwsArgumentError);
+ });
+ });
+
+ group("removing a path", () {
+ test("that's in the set removes and returns that path", () {
+ set.add("root/path/to/file");
+ expect(set.remove("root/path/to/file"),
+ unorderedEquals(["root/path/to/file"]));
+ expect(set, isNot(containsPath("root/path/to/file")));
+ });
+
+ test("that's not in the set returns an empty set", () {
+ set.add("root/path/to/file");
+ expect(set.remove("root/path/to/nothing"), isEmpty);
+ });
+
+ test("that's a directory removes and returns all files beneath it", () {
+ set.add("root/outside");
+ set.add("root/path/to/one");
+ set.add("root/path/to/two");
+ set.add("root/path/to/sub/three");
+
+ expect(set.remove("root/path"), unorderedEquals([
+ "root/path/to/one",
+ "root/path/to/two",
+ "root/path/to/sub/three"
+ ]));
+
+ expect(set, containsPath("root/outside"));
+ expect(set, isNot(containsPath("root/path/to/one")));
+ expect(set, isNot(containsPath("root/path/to/two")));
+ expect(set, isNot(containsPath("root/path/to/sub/three")));
+ });
+
+ test("that's a directory in the set removes and returns it and all files "
+ "beneath it", () {
+ set.add("root/path");
+ set.add("root/path/to/one");
+ set.add("root/path/to/two");
+ set.add("root/path/to/sub/three");
+
+ expect(set.remove("root/path"), unorderedEquals([
+ "root/path",
+ "root/path/to/one",
+ "root/path/to/two",
+ "root/path/to/sub/three"
+ ]));
+
+ expect(set, isNot(containsPath("root/path")));
+ expect(set, isNot(containsPath("root/path/to/one")));
+ expect(set, isNot(containsPath("root/path/to/two")));
+ expect(set, isNot(containsPath("root/path/to/sub/three")));
+ });
+
+ test("that's not normalized removes and returns the normalized path", () {
+ set.add("root/path/to/file");
+ expect(set.remove("root/../root/path/to/../to/./file"),
+ unorderedEquals(["root/path/to/file"]));
+ });
+
+ test("that's absolute removes and returns the normalized path", () {
+ set.add("root/path/to/file");
+ expect(set.remove(p.absolute("root/path/to/file")),
+ unorderedEquals(["root/path/to/file"]));
+ });
+
+ test("that's not beneath the root throws an error", () {
+ expect(() => set.remove("path/to/file"), throwsArgumentError);
+ });
+ });
+
+ group("containsPath()", () {
+ test("returns false for a non-existent path", () {
+ set.add("root/path/to/file");
+ expect(set, isNot(containsPath("root/path/to/nothing")));
+ });
+
+ test("returns false for a directory that wasn't added explicitly", () {
+ set.add("root/path/to/file");
+ expect(set, isNot(containsPath("root/path")));
+ });
+
+ test("returns true for a directory that was added explicitly", () {
+ set.add("root/path");
+ set.add("root/path/to/file");
+ expect(set, containsPath("root/path"));
+ });
+
+ test("with a non-normalized path normalizes the path before looking it up",
+ () {
+ set.add("root/path/to/file");
+ expect(set, containsPath("root/../root/path/to/../to/././file"));
+ });
+
+ test("with an absolute path normalizes the path before looking it up", () {
+ set.add("root/path/to/file");
+ expect(set, containsPath(p.absolute("root/path/to/file")));
+ });
+
+ test("with a path that's not beneath the root throws an error", () {
+ expect(() => set.contains("path/to/file"), throwsArgumentError);
+ });
+ });
+
+ group("containsDir()", () {
+ test("returns true for a directory that was added implicitly", () {
+ set.add("root/path/to/file");
+ expect(set, containsDir("root/path"));
+ expect(set, containsDir("root/path/to"));
+ });
+
+ test("returns true for a directory that was added explicitly", () {
+ set.add("root/path");
+ set.add("root/path/to/file");
+ expect(set, containsDir("root/path"));
+ });
+
+ test("returns false for a directory that wasn't added", () {
+ expect(set, isNot(containsDir("root/nothing")));
+ });
+
+ test("returns false for a non-directory path that was added", () {
+ set.add("root/path/to/file");
+ expect(set, isNot(containsDir("root/path/to/file")));
+ });
+
+ test("returns false for a directory that was added implicitly and then "
+ "removed implicitly", () {
+ set.add("root/path/to/file");
+ set.remove("root/path/to/file");
+ expect(set, isNot(containsDir("root/path")));
+ });
+
+ test("returns false for a directory that was added explicitly whose "
+ "children were then removed", () {
+ set.add("root/path");
+ set.add("root/path/to/file");
+ set.remove("root/path/to/file");
+ expect(set, isNot(containsDir("root/path")));
+ });
+
+ test("with a non-normalized path normalizes the path before looking it up",
+ () {
+ set.add("root/path/to/file");
+ expect(set, containsDir("root/../root/path/to/../to/."));
+ });
+
+ test("with an absolute path normalizes the path before looking it up", () {
+ set.add("root/path/to/file");
+ expect(set, containsDir(p.absolute("root/path")));
+ });
+ });
+
+ group("toSet", () {
+ test("returns paths added to the set", () {
+ set.add("root/path");
+ set.add("root/path/to/one");
+ set.add("root/path/to/two");
+
+ expect(set.toSet(), unorderedEquals([
+ "root/path",
+ "root/path/to/one",
+ "root/path/to/two",
+ ]));
+ });
+
+ test("doesn't return paths removed from the set", () {
+ set.add("root/path/to/one");
+ set.add("root/path/to/two");
+ set.remove("root/path/to/two");
+
+ expect(set.toSet(), unorderedEquals(["root/path/to/one"]));
+ });
+ });
+
+ group("clear", () {
+ test("removes all paths from the set", () {
+ set.add("root/path");
+ set.add("root/path/to/one");
+ set.add("root/path/to/two");
+
+ set.clear();
+ expect(set.toSet(), isEmpty);
+ });
+ });
+}
« no previous file with comments | « pkg/watcher/test/no_subscription/mac_os_test.dart ('k') | pkg/watcher/test/ready/mac_os_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698