| 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 */ |
| 11 #library('test_pub'); | 11 #library('test_pub'); |
| 12 | 12 |
| 13 #import('dart:io'); | 13 #import('dart:io'); |
| 14 #import('dart:isolate'); | 14 #import('dart:isolate'); |
| 15 #import('dart:json'); | 15 #import('dart:json'); |
| 16 #import('dart:math'); | 16 #import('dart:math'); |
| 17 #import('dart:uri'); | 17 #import('dart:uri'); |
| 18 | 18 |
| 19 #import('../../../pkg/unittest/unittest.dart'); | 19 #import('../../../pkg/unittest/unittest.dart'); |
| 20 #import('../../lib/file_system.dart', prefix: 'fs'); | 20 #import('../../lib/file_system.dart', prefix: 'fs'); |
| 21 #import('../../pub/git_source.dart'); | 21 #import('../../pub/git_source.dart'); |
| 22 #import('../../pub/hosted_source.dart'); |
| 22 #import('../../pub/io.dart'); | 23 #import('../../pub/io.dart'); |
| 23 #import('../../pub/repo_source.dart'); | |
| 24 #import('../../pub/sdk_source.dart'); | 24 #import('../../pub/sdk_source.dart'); |
| 25 #import('../../pub/utils.dart'); | 25 #import('../../pub/utils.dart'); |
| 26 #import('../../pub/yaml/yaml.dart'); | 26 #import('../../pub/yaml/yaml.dart'); |
| 27 | 27 |
| 28 /** | 28 /** |
| 29 * Creates a new [FileDescriptor] with [name] and [contents]. | 29 * Creates a new [FileDescriptor] with [name] and [contents]. |
| 30 */ | 30 */ |
| 31 FileDescriptor file(Pattern name, String contents) => | 31 FileDescriptor file(Pattern name, String contents) => |
| 32 new FileDescriptor(name, contents); | 32 new FileDescriptor(name, contents); |
| 33 | 33 |
| (...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 258 } | 258 } |
| 259 return package; | 259 return package; |
| 260 } | 260 } |
| 261 | 261 |
| 262 /** | 262 /** |
| 263 * Describes a map representing a dependency on a package in the package | 263 * Describes a map representing a dependency on a package in the package |
| 264 * repository. | 264 * repository. |
| 265 */ | 265 */ |
| 266 Map dependency(String name, [String versionConstraint]) { | 266 Map dependency(String name, [String versionConstraint]) { |
| 267 var url = port.transform((p) => "http://localhost:$p"); | 267 var url = port.transform((p) => "http://localhost:$p"); |
| 268 var dependency = {"repo": {"name": name, "url": url}}; | 268 var dependency = {"hosted": {"name": name, "url": url}}; |
| 269 if (versionConstraint != null) dependency["version"] = versionConstraint; | 269 if (versionConstraint != null) dependency["version"] = versionConstraint; |
| 270 return dependency; | 270 return dependency; |
| 271 } | 271 } |
| 272 | 272 |
| 273 /** | 273 /** |
| 274 * Describes a directory for a package installed from the mock package repo. | 274 * Describes a directory for a package installed from the mock package repo. |
| 275 * This directory is of the form found in the `packages/` directory. | 275 * This directory is of the form found in the `packages/` directory. |
| 276 */ | 276 */ |
| 277 DirectoryDescriptor packageDir(String name, String version) { | 277 DirectoryDescriptor packageDir(String name, String version) { |
| 278 return dir(name, [ | 278 return dir(name, [ |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 331 */ | 331 */ |
| 332 DirectoryDescriptor cacheDir(Map packages) { | 332 DirectoryDescriptor cacheDir(Map packages) { |
| 333 var contents = <Descriptor>[]; | 333 var contents = <Descriptor>[]; |
| 334 packages.forEach((name, versions) { | 334 packages.forEach((name, versions) { |
| 335 if (versions is! List) versions = [versions]; | 335 if (versions is! List) versions = [versions]; |
| 336 for (var version in versions) { | 336 for (var version in versions) { |
| 337 contents.add(packageCacheDir(name, version)); | 337 contents.add(packageCacheDir(name, version)); |
| 338 } | 338 } |
| 339 }); | 339 }); |
| 340 return dir(cachePath, [ | 340 return dir(cachePath, [ |
| 341 dir('repo', [ | 341 dir('hosted', [ |
| 342 async(port.transform((p) => dir('localhost%58$p', contents))) | 342 async(port.transform((p) => dir('localhost%58$p', contents))) |
| 343 ]) | 343 ]) |
| 344 ]); | 344 ]); |
| 345 } | 345 } |
| 346 | 346 |
| 347 /** | 347 /** |
| 348 * Describes the application directory, containing only a pubspec specifying the | 348 * Describes the application directory, containing only a pubspec specifying the |
| 349 * given [dependencies]. | 349 * given [dependencies]. |
| 350 */ | 350 */ |
| 351 DirectoryDescriptor appDir(List dependencies) => | 351 DirectoryDescriptor appDir(List dependencies) => |
| 352 dir(appPath, [appPubspec(dependencies)]); | 352 dir(appPath, [appPubspec(dependencies)]); |
| 353 | 353 |
| 354 /** | 354 /** |
| 355 * Converts a list of dependencies as passed to [package] into a hash as used in | 355 * Converts a list of dependencies as passed to [package] into a hash as used in |
| 356 * a pubspec. | 356 * a pubspec. |
| 357 */ | 357 */ |
| 358 Future<Map> _dependencyListToMap(List<Map> dependencies) { | 358 Future<Map> _dependencyListToMap(List<Map> dependencies) { |
| 359 return _awaitObject(dependencies).transform((resolvedDependencies) { | 359 return _awaitObject(dependencies).transform((resolvedDependencies) { |
| 360 var result = <String, Map>{}; | 360 var result = <String, Map>{}; |
| 361 for (var dependency in resolvedDependencies) { | 361 for (var dependency in resolvedDependencies) { |
| 362 var keys = dependency.getKeys().filter((key) => key != "version"); | 362 var keys = dependency.getKeys().filter((key) => key != "version"); |
| 363 var sourceName = only(keys); | 363 var sourceName = only(keys); |
| 364 var source; | 364 var source; |
| 365 switch (sourceName) { | 365 switch (sourceName) { |
| 366 case "git": | 366 case "git": |
| 367 source = new GitSource(); | 367 source = new GitSource(); |
| 368 break; | 368 break; |
| 369 case "repo": | 369 case "hosted": |
| 370 source = new RepoSource(); | 370 source = new HostedSource(); |
| 371 break; | 371 break; |
| 372 case "sdk": | 372 case "sdk": |
| 373 source = new SdkSource(''); | 373 source = new SdkSource(''); |
| 374 break; | 374 break; |
| 375 default: | 375 default: |
| 376 throw 'Unknown source "$sourceName"'; | 376 throw 'Unknown source "$sourceName"'; |
| 377 } | 377 } |
| 378 | 378 |
| 379 result[source.packageName(dependency[sourceName])] = dependency; | 379 result[source.packageName(dependency[sourceName])] = dependency; |
| 380 } | 380 } |
| 381 return result; | 381 return result; |
| 382 }); | 382 }); |
| 383 } | 383 } |
| 384 | 384 |
| 385 /** | 385 /** |
| 386 * The path of the package cache directory used for tests. Relative to the | 386 * The path of the package cache directory used for tests. Relative to the |
| 387 * sandbox directory. | 387 * sandbox directory. |
| 388 */ | 388 */ |
| 389 final String cachePath = "cache"; | 389 final String cachePath = "cache"; |
| 390 | 390 |
| 391 /** | 391 /** |
| 392 * The path of the mock SDK directory used for tests. Relative to the sandbox | 392 * The path of the mock SDK directory used for tests. Relative to the sandbox |
| (...skipping 698 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1091 } | 1091 } |
| 1092 | 1092 |
| 1093 /** | 1093 /** |
| 1094 * Schedules a callback to be called after Pub is run with [runPub], even if it | 1094 * Schedules a callback to be called after Pub is run with [runPub], even if it |
| 1095 * fails. | 1095 * fails. |
| 1096 */ | 1096 */ |
| 1097 void _scheduleCleanup(_ScheduledEvent event) { | 1097 void _scheduleCleanup(_ScheduledEvent event) { |
| 1098 if (_scheduledCleanup == null) _scheduledCleanup = []; | 1098 if (_scheduledCleanup == null) _scheduledCleanup = []; |
| 1099 _scheduledCleanup.add(event); | 1099 _scheduledCleanup.add(event); |
| 1100 } | 1100 } |
| OLD | NEW |