| Index: packages/watcher/test/path_set_test.dart
|
| diff --git a/packages/watcher/test/path_set_test.dart b/packages/watcher/test/path_set_test.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..13e797c20d93153e393d7bd9330d0c1bad36375e
|
| --- /dev/null
|
| +++ b/packages/watcher/test/path_set_test.dart
|
| @@ -0,0 +1,233 @@
|
| +// 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:test/test.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() {
|
| + 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([p.normalize("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"
|
| + ].map(p.normalize)));
|
| +
|
| + 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"
|
| + ].map(p.normalize)));
|
| +
|
| + 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([p.normalize("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([p.normalize("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",
|
| + ].map(p.normalize)));
|
| + });
|
| +
|
| + 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([p.normalize("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);
|
| + });
|
| + });
|
| +}
|
|
|