| OLD | NEW |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 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. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 library watcher.test.utils; | 5 library watcher.test.utils; |
| 6 | 6 |
| 7 import 'dart:async'; | 7 import 'dart:async'; |
| 8 import 'dart:collection'; | 8 import 'dart:collection'; |
| 9 import 'dart:io'; | 9 import 'dart:io'; |
| 10 | 10 |
| (...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 169 } finally { | 169 } finally { |
| 170 _unorderedEventFuture = oldFuture; | 170 _unorderedEventFuture = oldFuture; |
| 171 } | 171 } |
| 172 } | 172 } |
| 173 | 173 |
| 174 /// Expects that the next set of event will be a change of [type] on [path]. | 174 /// Expects that the next set of event will be a change of [type] on [path]. |
| 175 /// | 175 /// |
| 176 /// Multiple calls to [expectEvent] require that the events are received in that | 176 /// Multiple calls to [expectEvent] require that the events are received in that |
| 177 /// order unless they're called in an [inAnyOrder] block. | 177 /// order unless they're called in an [inAnyOrder] block. |
| 178 void expectEvent(ChangeType type, String path) { | 178 void expectEvent(ChangeType type, String path) { |
| 179 var matcher = predicate((e) { | |
| 180 return e is WatchEvent && e.type == type && | |
| 181 e.path == p.join(_sandboxDir, p.normalize(path)); | |
| 182 }, "is $type $path"); | |
| 183 | |
| 184 if (_unorderedEventFuture != null) { | 179 if (_unorderedEventFuture != null) { |
| 185 // Assign this to a local variable since it will be un-assigned by the time | 180 // Assign this to a local variable since it will be un-assigned by the time |
| 186 // the scheduled callback runs. | 181 // the scheduled callback runs. |
| 187 var future = _unorderedEventFuture; | 182 var future = _unorderedEventFuture; |
| 188 | 183 |
| 189 expect( | 184 expect( |
| 190 schedule(() => future, "should fire $type event on $path"), | 185 schedule(() => future, "should fire $type event on $path"), |
| 191 completion(contains(matcher))); | 186 completion(contains(isWatchEvent(type, path)))); |
| 192 } else { | 187 } else { |
| 193 var future = currentSchedule.wrapFuture( | 188 var future = currentSchedule.wrapFuture( |
| 194 _watcherEvents.elementAt(_nextEvent), | 189 _watcherEvents.elementAt(_nextEvent), |
| 195 "waiting for $type event on $path"); | 190 "waiting for $type event on $path"); |
| 196 | 191 |
| 197 expect( | 192 expect( |
| 198 schedule(() => future, "should fire $type event on $path"), | 193 schedule(() => future, "should fire $type event on $path"), |
| 199 completion(matcher)); | 194 completion(isWatchEvent(type, path))); |
| 200 } | 195 } |
| 201 _nextEvent++; | 196 _nextEvent++; |
| 202 } | 197 } |
| 203 | 198 |
| 199 /// Returns a matcher that matches a [WatchEvent] with the given [type] and |
| 200 /// [path]. |
| 201 Match isWatchEvent(ChangeType type, String path) { |
| 202 return predicate((e) { |
| 203 return e is WatchEvent && e.type == type && |
| 204 e.path == p.join(_sandboxDir, p.normalize(path)); |
| 205 }, "is $type $path"); |
| 206 } |
| 207 |
| 204 void expectAddEvent(String path) => expectEvent(ChangeType.ADD, path); | 208 void expectAddEvent(String path) => expectEvent(ChangeType.ADD, path); |
| 205 void expectModifyEvent(String path) => expectEvent(ChangeType.MODIFY, path); | 209 void expectModifyEvent(String path) => expectEvent(ChangeType.MODIFY, path); |
| 206 void expectRemoveEvent(String path) => expectEvent(ChangeType.REMOVE, path); | 210 void expectRemoveEvent(String path) => expectEvent(ChangeType.REMOVE, path); |
| 207 | 211 |
| 208 /// Schedules writing a file in the sandbox at [path] with [contents]. | 212 /// Schedules writing a file in the sandbox at [path] with [contents]. |
| 209 /// | 213 /// |
| 210 /// If [contents] is omitted, creates an empty file. If [updatedModified] is | 214 /// If [contents] is omitted, creates an empty file. If [updatedModified] is |
| 211 /// `false`, the mock file modification time is not changed. | 215 /// `false`, the mock file modification time is not changed. |
| 212 void writeFile(String path, {String contents, bool updateModified}) { | 216 void writeFile(String path, {String contents, bool updateModified}) { |
| 213 if (contents == null) contents = ""; | 217 if (contents == null) contents = ""; |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 287 void withPermutations(callback(int i, int j, int k), {int limit}) { | 291 void withPermutations(callback(int i, int j, int k), {int limit}) { |
| 288 if (limit == null) limit = 3; | 292 if (limit == null) limit = 3; |
| 289 for (var i = 0; i < limit; i++) { | 293 for (var i = 0; i < limit; i++) { |
| 290 for (var j = 0; j < limit; j++) { | 294 for (var j = 0; j < limit; j++) { |
| 291 for (var k = 0; k < limit; k++) { | 295 for (var k = 0; k < limit; k++) { |
| 292 callback(i, j, k); | 296 callback(i, j, k); |
| 293 } | 297 } |
| 294 } | 298 } |
| 295 } | 299 } |
| 296 } | 300 } |
| OLD | NEW |