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

Side by Side Diff: sdk/lib/_internal/pub/test/test_pub.dart

Issue 586173002: Make binstubs run snapshots directly when possible. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Revise! Created 6 years, 2 months 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
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 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 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 /// Test infrastructure for testing pub. 5 /// Test infrastructure for testing pub.
6 /// 6 ///
7 /// Unlike typical unit tests, most pub tests are integration tests that stage 7 /// Unlike typical unit tests, most pub tests are integration tests that stage
8 /// some stuff on the file system, run pub, and then validate the results. This 8 /// some stuff on the file system, run pub, and then validate the results. This
9 /// library provides an API to build tests like that. 9 /// library provides an API to build tests like that.
10 library test_pub; 10 library test_pub;
(...skipping 458 matching lines...) Expand 10 before | Expand all | Expand 10 after
469 pub.stdout.expect(emitsLines( 469 pub.stdout.expect(emitsLines(
470 "|-- LICENSE\n" 470 "|-- LICENSE\n"
471 "|-- lib\n" 471 "|-- lib\n"
472 "| '-- test_pkg.dart\n" 472 "| '-- test_pkg.dart\n"
473 "'-- pubspec.yaml\n" 473 "'-- pubspec.yaml\n"
474 "\n" 474 "\n"
475 "Looks great! Are you ready to upload your package (y/n)?")); 475 "Looks great! Are you ready to upload your package (y/n)?"));
476 pub.writeLine("y"); 476 pub.writeLine("y");
477 } 477 }
478 478
479 /// Gets the absolute path to [relPath], which is a relative path in the test
480 /// sandbox.
481 String _pathInSandbox(String relPath) {
482 return p.join(p.absolute(sandboxDir), relPath);
483 }
484
485 /// Gets the environment variables used to run pub in a test context.
486 Map getPubTestEnvironment([Uri tokenEndpoint]) {
487 var environment = {};
488 environment['_PUB_TESTING'] = 'true';
489 environment['PUB_CACHE'] = _pathInSandbox(cachePath);
490
491 // Ensure a known SDK version is set for the tests that rely on that.
492 environment['_PUB_TEST_SDK_VERSION'] = "0.1.2+3";
493
494 if (tokenEndpoint != null) {
495 environment['_PUB_TEST_TOKEN_ENDPOINT'] =
496 tokenEndpoint.toString();
497 }
498
499 return environment;
500 }
501
479 /// Starts a Pub process and returns a [ScheduledProcess] that supports 502 /// Starts a Pub process and returns a [ScheduledProcess] that supports
480 /// interaction with that process. 503 /// interaction with that process.
481 /// 504 ///
482 /// Any futures in [args] will be resolved before the process is started. 505 /// Any futures in [args] will be resolved before the process is started.
483 ScheduledProcess startPub({List args, Future<Uri> tokenEndpoint}) { 506 ScheduledProcess startPub({List args, Future<Uri> tokenEndpoint}) {
484 String pathInSandbox(String relPath) { 507 ensureDir(_pathInSandbox(appPath));
485 return p.join(p.absolute(sandboxDir), relPath);
486 }
487
488 ensureDir(pathInSandbox(appPath));
489 508
490 // Find a Dart executable we can use to spawn. Use the same one that was 509 // Find a Dart executable we can use to spawn. Use the same one that was
491 // used to run this script itself. 510 // used to run this script itself.
492 var dartBin = Platform.executable; 511 var dartBin = Platform.executable;
493 512
494 // If the executable looks like a path, get its full path. That way we 513 // If the executable looks like a path, get its full path. That way we
495 // can still find it when we spawn it with a different working directory. 514 // can still find it when we spawn it with a different working directory.
496 if (dartBin.contains(Platform.pathSeparator)) { 515 if (dartBin.contains(Platform.pathSeparator)) {
497 dartBin = p.absolute(dartBin); 516 dartBin = p.absolute(dartBin);
498 } 517 }
499 518
500 // Always run pub from a snapshot. Since we require the SDK to be built, the 519 // Always run pub from a snapshot. Since we require the SDK to be built, the
501 // snapshot should be there. Note that this *does* mean that the snapshot has 520 // snapshot should be there. Note that this *does* mean that the snapshot has
502 // to be manually updated when changing code before running the tests. 521 // to be manually updated when changing code before running the tests.
503 // Otherwise, you will test against stale data. 522 // Otherwise, you will test against stale data.
504 // 523 //
505 // Using the snapshot makes running the tests much faster, which is why we 524 // Using the snapshot makes running the tests much faster, which is why we
506 // make this trade-off. 525 // make this trade-off.
507 var pubPath = p.join(p.dirname(dartBin), 'snapshots/pub.dart.snapshot'); 526 var pubPath = p.join(p.dirname(dartBin), 'snapshots/pub.dart.snapshot');
508 var dartArgs = [pubPath, '--verbose']; 527 var dartArgs = [pubPath, '--verbose'];
509 dartArgs.addAll(args); 528 dartArgs.addAll(args);
510 529
511 if (tokenEndpoint == null) tokenEndpoint = new Future.value(); 530 if (tokenEndpoint == null) tokenEndpoint = new Future.value();
512 var environmentFuture = tokenEndpoint.then((tokenEndpoint) { 531 var environmentFuture = tokenEndpoint.then((tokenEndpoint) {
513 var environment = {}; 532 var environment = getPubTestEnvironment(tokenEndpoint);
514 environment['_PUB_TESTING'] = 'true';
515 environment['PUB_CACHE'] = pathInSandbox(cachePath);
516
517 // Ensure a known SDK version is set for the tests that rely on that.
518 environment['_PUB_TEST_SDK_VERSION'] = "0.1.2+3";
519
520 if (tokenEndpoint != null) {
521 environment['_PUB_TEST_TOKEN_ENDPOINT'] =
522 tokenEndpoint.toString();
523 }
524 533
525 // If there is a server running, tell pub what its URL is so hosted 534 // If there is a server running, tell pub what its URL is so hosted
526 // dependencies will look there. 535 // dependencies will look there.
527 if (_hasServer) { 536 if (_hasServer) {
528 return port.then((p) { 537 return port.then((p) {
529 environment['PUB_HOSTED_URL'] = "http://localhost:$p"; 538 environment['PUB_HOSTED_URL'] = "http://localhost:$p";
530 return environment; 539 return environment;
531 }); 540 });
532 } 541 }
533 542
534 return environment; 543 return environment;
535 }); 544 });
536 545
537 return new PubProcess.start(dartBin, dartArgs, environment: environmentFuture, 546 return new PubProcess.start(dartBin, dartArgs, environment: environmentFuture,
538 workingDirectory: pathInSandbox(appPath), 547 workingDirectory: _pathInSandbox(appPath),
539 description: args.isEmpty ? 'pub' : 'pub ${args.first}'); 548 description: args.isEmpty ? 'pub' : 'pub ${args.first}');
540 } 549 }
541 550
542 /// A subclass of [ScheduledProcess] that parses pub's verbose logging output 551 /// A subclass of [ScheduledProcess] that parses pub's verbose logging output
543 /// and makes [stdout] and [stderr] work as though pub weren't running in 552 /// and makes [stdout] and [stderr] work as though pub weren't running in
544 /// verbose mode. 553 /// verbose mode.
545 class PubProcess extends ScheduledProcess { 554 class PubProcess extends ScheduledProcess {
546 Stream<Pair<log.Level, String>> _log; 555 Stream<Pair<log.Level, String>> _log;
547 Stream<String> _stdout; 556 Stream<String> _stdout;
548 Stream<String> _stderr; 557 Stream<String> _stderr;
(...skipping 410 matching lines...) Expand 10 before | Expand all | Expand 10 after
959 _lastMatcher.matches(item.last, matchState); 968 _lastMatcher.matches(item.last, matchState);
960 } 969 }
961 970
962 Description describe(Description description) { 971 Description describe(Description description) {
963 return description.addAll("(", ", ", ")", [_firstMatcher, _lastMatcher]); 972 return description.addAll("(", ", ", ")", [_firstMatcher, _lastMatcher]);
964 } 973 }
965 } 974 }
966 975
967 /// A [StreamMatcher] that matches multiple lines of output. 976 /// A [StreamMatcher] that matches multiple lines of output.
968 StreamMatcher emitsLines(String output) => inOrder(output.split("\n")); 977 StreamMatcher emitsLines(String output) => inOrder(output.split("\n"));
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698