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 /** | 5 /** |
6 * Test infrastructure for testing pub. Unlike typical unit tests, most pub | 6 * Test infrastructure for testing pub. Unlike typical unit tests, most pub |
7 * tests are integration tests that stage some stuff on the file system, run | 7 * tests are integration tests that stage some stuff on the file system, run |
8 * pub, and then validate the results. This library provides an API to build | 8 * pub, and then validate the results. This library provides an API to build |
9 * tests like that. | 9 * tests like that. |
10 */ | 10 */ |
(...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
285 * This directory is of the form found in the global package cache. | 285 * This directory is of the form found in the global package cache. |
286 */ | 286 */ |
287 DirectoryDescriptor packageCacheDir(String name, String version) { | 287 DirectoryDescriptor packageCacheDir(String name, String version) { |
288 return dir("$name-$version", [ | 288 return dir("$name-$version", [ |
289 file("$name.dart", 'main() => print("$name $version");') | 289 file("$name.dart", 'main() => print("$name $version");') |
290 ]); | 290 ]); |
291 } | 291 } |
292 | 292 |
293 /** | 293 /** |
294 * Describes a directory for a Git package. This directory is of the form found | 294 * Describes a directory for a Git package. This directory is of the form found |
295 * in the global package cache. | 295 * in the revision cache of the global package cache. |
296 */ | 296 */ |
297 DirectoryDescriptor gitPackageCacheDir(String name, [int modifier]) { | 297 DirectoryDescriptor gitPackageRevisionCacheDir(String name, [int modifier]) { |
298 var value = name; | 298 var value = name; |
299 if (modifier != null) value = "$name $modifier"; | 299 if (modifier != null) value = "$name $modifier"; |
300 return dir(new RegExp("$name${@'-[a-f0-9]+'}"), [ | 300 return dir(new RegExp("$name${@'-[a-f0-9]+'}"), [ |
301 file('$name.dart', 'main() => "$value";') | 301 file('$name.dart', 'main() => "$value";') |
302 ]); | 302 ]); |
303 } | 303 } |
304 | 304 |
305 /** | 305 /** |
| 306 * Describes a directory for a Git package. This directory is of the form found |
| 307 * in the repo cache of the global package cache. |
| 308 */ |
| 309 DirectoryDescriptor gitPackageRepoCacheDir(String name) { |
| 310 return dir(new RegExp("$name${@'-[a-f0-9]+'}"), [ |
| 311 dir('branches'), |
| 312 dir('hooks'), |
| 313 dir('info'), |
| 314 dir('objects'), |
| 315 dir('refs') |
| 316 ]); |
| 317 } |
| 318 |
| 319 /** |
306 * Describes the `packages/` directory containing all the given [packages], | 320 * Describes the `packages/` directory containing all the given [packages], |
307 * which should be name/version pairs. The packages will be validated against | 321 * which should be name/version pairs. The packages will be validated against |
308 * the format produced by the mock package server. | 322 * the format produced by the mock package server. |
309 * | 323 * |
310 * A package with a null version should not be installed. | 324 * A package with a null version should not be installed. |
311 */ | 325 */ |
312 DirectoryDescriptor packagesDir(Map<String, String> packages) { | 326 DirectoryDescriptor packagesDir(Map<String, String> packages) { |
313 var contents = <Descriptor>[]; | 327 var contents = <Descriptor>[]; |
314 packages.forEach((name, version) { | 328 packages.forEach((name, version) { |
315 if (version == null) { | 329 if (version == null) { |
(...skipping 492 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
808 * Describes a directory and its contents. These are used both for setting up | 822 * Describes a directory and its contents. These are used both for setting up |
809 * an expected directory tree before running a test, and for validating that | 823 * an expected directory tree before running a test, and for validating that |
810 * the file system matches some expectations after running it. | 824 * the file system matches some expectations after running it. |
811 */ | 825 */ |
812 class DirectoryDescriptor extends Descriptor { | 826 class DirectoryDescriptor extends Descriptor { |
813 /** | 827 /** |
814 * The files and directories contained in this directory. | 828 * The files and directories contained in this directory. |
815 */ | 829 */ |
816 final List<Descriptor> contents; | 830 final List<Descriptor> contents; |
817 | 831 |
818 DirectoryDescriptor(Pattern name, this.contents) : super(name); | 832 DirectoryDescriptor(Pattern name, List<Descriptor> contents) |
| 833 : this.contents = contents == null ? <Descriptor>[] : contents, |
| 834 super(name); |
819 | 835 |
820 /** | 836 /** |
821 * Creates the file within [dir]. Returns a [Future] that is completed after | 837 * Creates the file within [dir]. Returns a [Future] that is completed after |
822 * the creation is done. | 838 * the creation is done. |
823 */ | 839 */ |
824 Future<Directory> create(parentDir) { | 840 Future<Directory> create(parentDir) { |
825 // Create the directory. | 841 // Create the directory. |
826 return ensureDir(join(parentDir, _stringName)).chain((dir) { | 842 return ensureDir(join(parentDir, _stringName)).chain((dir) { |
827 if (contents == null) return new Future<Directory>.immediate(dir); | 843 if (contents == null) return new Future<Directory>.immediate(dir); |
828 | 844 |
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
951 return superCreate(parentDir).chain((rootDir) { | 967 return superCreate(parentDir).chain((rootDir) { |
952 return _runGit(['rev-parse', ref], rootDir); | 968 return _runGit(['rev-parse', ref], rootDir); |
953 }).transform((output) { | 969 }).transform((output) { |
954 completer.complete(output[0]); | 970 completer.complete(output[0]); |
955 return null; | 971 return null; |
956 }); | 972 }); |
957 }); | 973 }); |
958 return completer.future; | 974 return completer.future; |
959 } | 975 } |
960 | 976 |
| 977 /// Schedule a Git command to run in this repository. |
| 978 void scheduleGit(List<String> args) { |
| 979 _schedule((parentDir) { |
| 980 var gitDir = new Directory(join(parentDir, name)); |
| 981 return _runGit(args, gitDir); |
| 982 }); |
| 983 } |
| 984 |
961 Future<String> _runGit(List<String> args, Directory workingDir) { | 985 Future<String> _runGit(List<String> args, Directory workingDir) { |
962 return runProcess('git', args, workingDir: workingDir.path). | 986 return runProcess('git', args, workingDir: workingDir.path). |
963 transform((result) { | 987 transform((result) { |
964 if (!result.success) throw "Error running git: ${result.stderr}"; | 988 if (!result.success) throw "Error running git: ${result.stderr}"; |
965 return result.stdout; | 989 return result.stdout; |
966 }); | 990 }); |
967 } | 991 } |
968 } | 992 } |
969 | 993 |
970 /** | 994 /** |
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1091 } | 1115 } |
1092 | 1116 |
1093 /** | 1117 /** |
1094 * Schedules a callback to be called after Pub is run with [runPub], even if it | 1118 * Schedules a callback to be called after Pub is run with [runPub], even if it |
1095 * fails. | 1119 * fails. |
1096 */ | 1120 */ |
1097 void _scheduleCleanup(_ScheduledEvent event) { | 1121 void _scheduleCleanup(_ScheduledEvent event) { |
1098 if (_scheduledCleanup == null) _scheduledCleanup = []; | 1122 if (_scheduledCleanup == null) _scheduledCleanup = []; |
1099 _scheduledCleanup.add(event); | 1123 _scheduledCleanup.add(event); |
1100 } | 1124 } |
OLD | NEW |