Chromium Code Reviews| 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..1578f6e130447c1cf3953c8e5313609555aad34f |
| --- /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 contains(String path) => predicate((set) => |
| + set is PathSet && set.contains(path), |
| + 'set contains "$path"'); |
|
Bob Nystrom
2013/11/09 00:42:57
I think this shadows an imported contains() functi
nweiz
2013/11/09 02:19:26
Done.
|
| + |
| +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, contains("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, contains("root/path")); |
| + expect(set, contains("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, contains("root/path/to/file")); |
|
Bob Nystrom
2013/11/09 00:42:57
Is the argument to contains() normalized too? Shou
nweiz
2013/11/09 02:19:26
Yes; that's tested in the "contains()" group below
|
| + }); |
| + |
| + test("that's absolute normalizes the path before storing it", () { |
| + set.add(p.absolute("root/path/to/file")); |
| + expect(set, contains("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(contains("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, contains("root/outside")); |
| + expect(set, isNot(contains("root/path/to/one"))); |
| + expect(set, isNot(contains("root/path/to/two"))); |
| + expect(set, isNot(contains("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(contains("root/path"))); |
| + expect(set, isNot(contains("root/path/to/one"))); |
| + expect(set, isNot(contains("root/path/to/two"))); |
| + expect(set, isNot(contains("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("contains()", () { |
| + test("returns false for a non-existent path", () { |
| + set.add("root/path/to/file"); |
| + expect(set, isNot(contains("root/path/to/nothing"))); |
| + }); |
| + |
| + test("returns false for a directory that wasn't added explicitly", () { |
| + set.add("root/path/to/file"); |
| + expect(set, isNot(contains("root/path"))); |
| + }); |
| + |
| + test("returns true for a directory that was added explicitly", () { |
| + set.add("root/path"); |
| + set.add("root/path/to/file"); |
| + expect(set, contains("root/path")); |
| + }); |
| + |
| + test("with a non-normalized path normalizes the path before looking it up", |
| + () { |
| + set.add("root/path/to/file"); |
| + expect(set, contains("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, contains(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); |
| + }); |
| + }); |
| +} |