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

Side by Side 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: 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file.
4
5 import 'package:path/path.dart' as p;
6 import 'package:unittest/unittest.dart';
7 import 'package:watcher/src/path_set.dart';
8
9 import 'utils.dart';
10
11 Matcher contains(String path) => predicate((set) =>
12 set is PathSet && set.contains(path),
13 '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.
14
15 Matcher containsDir(String path) => predicate((set) =>
16 set is PathSet && set.containsDir(path),
17 'set contains directory "$path"');
18
19 void main() {
20 initConfig();
21
22 var set;
23 setUp(() => set = new PathSet("root"));
24
25 group("adding a path", () {
26 test("stores the path in the set", () {
27 set.add("root/path/to/file");
28 expect(set, contains("root/path/to/file"));
29 });
30
31 test("that's a subdir of another path keeps both in the set", () {
32 set.add("root/path");
33 set.add("root/path/to/file");
34 expect(set, contains("root/path"));
35 expect(set, contains("root/path/to/file"));
36 });
37
38 test("that's not normalized normalizes the path before storing it", () {
39 set.add("root/../root/path/to/../to/././file");
40 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
41 });
42
43 test("that's absolute normalizes the path before storing it", () {
44 set.add(p.absolute("root/path/to/file"));
45 expect(set, contains("root/path/to/file"));
46 });
47
48 test("that's not beneath the root throws an error", () {
49 expect(() => set.add("path/to/file"), throwsArgumentError);
50 });
51 });
52
53 group("removing a path", () {
54 test("that's in the set removes and returns that path", () {
55 set.add("root/path/to/file");
56 expect(set.remove("root/path/to/file"),
57 unorderedEquals(["root/path/to/file"]));
58 expect(set, isNot(contains("root/path/to/file")));
59 });
60
61 test("that's not in the set returns an empty set", () {
62 set.add("root/path/to/file");
63 expect(set.remove("root/path/to/nothing"), isEmpty);
64 });
65
66 test("that's a directory removes and returns all files beneath it", () {
67 set.add("root/outside");
68 set.add("root/path/to/one");
69 set.add("root/path/to/two");
70 set.add("root/path/to/sub/three");
71
72 expect(set.remove("root/path"), unorderedEquals([
73 "root/path/to/one",
74 "root/path/to/two",
75 "root/path/to/sub/three"
76 ]));
77
78 expect(set, contains("root/outside"));
79 expect(set, isNot(contains("root/path/to/one")));
80 expect(set, isNot(contains("root/path/to/two")));
81 expect(set, isNot(contains("root/path/to/sub/three")));
82 });
83
84 test("that's a directory in the set removes and returns it and all files "
85 "beneath it", () {
86 set.add("root/path");
87 set.add("root/path/to/one");
88 set.add("root/path/to/two");
89 set.add("root/path/to/sub/three");
90
91 expect(set.remove("root/path"), unorderedEquals([
92 "root/path",
93 "root/path/to/one",
94 "root/path/to/two",
95 "root/path/to/sub/three"
96 ]));
97
98 expect(set, isNot(contains("root/path")));
99 expect(set, isNot(contains("root/path/to/one")));
100 expect(set, isNot(contains("root/path/to/two")));
101 expect(set, isNot(contains("root/path/to/sub/three")));
102 });
103
104 test("that's not normalized removes and returns the normalized path", () {
105 set.add("root/path/to/file");
106 expect(set.remove("root/../root/path/to/../to/./file"),
107 unorderedEquals(["root/path/to/file"]));
108 });
109
110 test("that's absolute removes and returns the normalized path", () {
111 set.add("root/path/to/file");
112 expect(set.remove(p.absolute("root/path/to/file")),
113 unorderedEquals(["root/path/to/file"]));
114 });
115
116 test("that's not beneath the root throws an error", () {
117 expect(() => set.remove("path/to/file"), throwsArgumentError);
118 });
119 });
120
121 group("contains()", () {
122 test("returns false for a non-existent path", () {
123 set.add("root/path/to/file");
124 expect(set, isNot(contains("root/path/to/nothing")));
125 });
126
127 test("returns false for a directory that wasn't added explicitly", () {
128 set.add("root/path/to/file");
129 expect(set, isNot(contains("root/path")));
130 });
131
132 test("returns true for a directory that was added explicitly", () {
133 set.add("root/path");
134 set.add("root/path/to/file");
135 expect(set, contains("root/path"));
136 });
137
138 test("with a non-normalized path normalizes the path before looking it up",
139 () {
140 set.add("root/path/to/file");
141 expect(set, contains("root/../root/path/to/../to/././file"));
142 });
143
144 test("with an absolute path normalizes the path before looking it up", () {
145 set.add("root/path/to/file");
146 expect(set, contains(p.absolute("root/path/to/file")));
147 });
148
149 test("with a path that's not beneath the root throws an error", () {
150 expect(() => set.contains("path/to/file"), throwsArgumentError);
151 });
152 });
153
154 group("containsDir()", () {
155 test("returns true for a directory that was added implicitly", () {
156 set.add("root/path/to/file");
157 expect(set, containsDir("root/path"));
158 expect(set, containsDir("root/path/to"));
159 });
160
161 test("returns true for a directory that was added explicitly", () {
162 set.add("root/path");
163 set.add("root/path/to/file");
164 expect(set, containsDir("root/path"));
165 });
166
167 test("returns false for a directory that wasn't added", () {
168 expect(set, isNot(containsDir("root/nothing")));
169 });
170
171 test("returns false for a non-directory path that was added", () {
172 set.add("root/path/to/file");
173 expect(set, isNot(containsDir("root/path/to/file")));
174 });
175
176 test("returns false for a directory that was added implicitly and then "
177 "removed implicitly", () {
178 set.add("root/path/to/file");
179 set.remove("root/path/to/file");
180 expect(set, isNot(containsDir("root/path")));
181 });
182
183 test("returns false for a directory that was added explicitly whose "
184 "children were then removed", () {
185 set.add("root/path");
186 set.add("root/path/to/file");
187 set.remove("root/path/to/file");
188 expect(set, isNot(containsDir("root/path")));
189 });
190
191 test("with a non-normalized path normalizes the path before looking it up",
192 () {
193 set.add("root/path/to/file");
194 expect(set, containsDir("root/../root/path/to/../to/."));
195 });
196
197 test("with an absolute path normalizes the path before looking it up", () {
198 set.add("root/path/to/file");
199 expect(set, containsDir(p.absolute("root/path")));
200 });
201 });
202
203 group("toSet", () {
204 test("returns paths added to the set", () {
205 set.add("root/path");
206 set.add("root/path/to/one");
207 set.add("root/path/to/two");
208
209 expect(set.toSet(), unorderedEquals([
210 "root/path",
211 "root/path/to/one",
212 "root/path/to/two",
213 ]));
214 });
215
216 test("doesn't return paths removed from the set", () {
217 set.add("root/path/to/one");
218 set.add("root/path/to/two");
219 set.remove("root/path/to/two");
220
221 expect(set.toSet(), unorderedEquals(["root/path/to/one"]));
222 });
223 });
224
225 group("clear", () {
226 test("removes all paths from the set", () {
227 set.add("root/path");
228 set.add("root/path/to/one");
229 set.add("root/path/to/two");
230
231 set.clear();
232 expect(set.toSet(), isEmpty);
233 });
234 });
235 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698