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

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

Issue 291843011: Run pub tests against older versions of barback. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 7 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. Unlike typical unit tests, most pub 5 /// Test infrastructure for testing pub. Unlike typical unit tests, most pub
6 /// tests are integration tests that stage some stuff on the file system, run 6 /// tests are integration tests that stage some stuff on the file system, run
7 /// pub, and then validate the results. This library provides an API to build 7 /// pub, and then validate the results. This library provides an API to build
8 /// tests like that. 8 /// tests like that.
9 library test_pub; 9 library test_pub;
10 10
(...skipping 17 matching lines...) Expand all
28 import '../lib/src/exit_codes.dart' as exit_codes; 28 import '../lib/src/exit_codes.dart' as exit_codes;
29 // TODO(rnystrom): Using "gitlib" as the prefix here is ugly, but "git" collides 29 // TODO(rnystrom): Using "gitlib" as the prefix here is ugly, but "git" collides
30 // with the git descriptor method. Maybe we should try to clean up the top level 30 // with the git descriptor method. Maybe we should try to clean up the top level
31 // scope a bit? 31 // scope a bit?
32 import '../lib/src/git.dart' as gitlib; 32 import '../lib/src/git.dart' as gitlib;
33 import '../lib/src/http.dart'; 33 import '../lib/src/http.dart';
34 import '../lib/src/io.dart'; 34 import '../lib/src/io.dart';
35 import '../lib/src/lock_file.dart'; 35 import '../lib/src/lock_file.dart';
36 import '../lib/src/log.dart' as log; 36 import '../lib/src/log.dart' as log;
37 import '../lib/src/package.dart'; 37 import '../lib/src/package.dart';
38 import '../lib/src/pubspec.dart';
38 import '../lib/src/source/hosted.dart'; 39 import '../lib/src/source/hosted.dart';
39 import '../lib/src/source/path.dart'; 40 import '../lib/src/source/path.dart';
40 import '../lib/src/source_registry.dart'; 41 import '../lib/src/source_registry.dart';
41 import '../lib/src/system_cache.dart'; 42 import '../lib/src/system_cache.dart';
42 import '../lib/src/utils.dart'; 43 import '../lib/src/utils.dart';
43 import '../lib/src/validator.dart'; 44 import '../lib/src/validator.dart';
44 import '../lib/src/version.dart'; 45 import '../lib/src/version.dart';
45 import 'descriptor.dart' as d; 46 import 'descriptor.dart' as d;
46 47
47 /// This should be called at the top of a test file to set up an appropriate 48 /// This should be called at the top of a test file to set up an appropriate
(...skipping 17 matching lines...) Expand all
65 /// A [Matcher] that matches JavaScript generated by dart2js with minification 66 /// A [Matcher] that matches JavaScript generated by dart2js with minification
66 /// enabled. 67 /// enabled.
67 Matcher isMinifiedDart2JSOutput = 68 Matcher isMinifiedDart2JSOutput =
68 isNot(contains("// The code supports the following hooks")); 69 isNot(contains("// The code supports the following hooks"));
69 70
70 /// A [Matcher] that matches JavaScript generated by dart2js with minification 71 /// A [Matcher] that matches JavaScript generated by dart2js with minification
71 /// disabled. 72 /// disabled.
72 Matcher isUnminifiedDart2JSOutput = 73 Matcher isUnminifiedDart2JSOutput =
73 contains("// The code supports the following hooks"); 74 contains("// The code supports the following hooks");
74 75
76 /// The directory containing the version of barback that should be used for this
77 /// test.
78 String _barbackDir;
79
80 /// A map from barback versions to their locations in the repo.
Bob Nystrom 2014/05/27 17:49:47 "their locations in the repo" -> "paths of directo
nweiz 2014/05/27 20:40:47 Done.
81 ///
82 /// This includes the latest version of barback from pkg as well as all old
83 /// versions of barback in third_party.
84 final _barbackVersions = _computeBarbackVersions();
85
86 /// Populates [_barbackVersions].
87 Map<Version, String> _computeBarbackVersions() {
Bob Nystrom 2014/05/27 17:49:47 Nit: "compute" -> "find"?
nweiz 2014/05/27 20:40:47 Done.
88 var versions = {};
89 var currentBarback = path.join(repoRoot, 'pkg', 'barback');
90 versions[new Pubspec.load(currentBarback, new SourceRegistry()).version] =
91 currentBarback;
92
93 for (var dir in listDir(path.join(repoRoot, 'third_party', 'pkg'))) {
94 var basename = path.basename(dir);
95 if (!basename.startsWith('barback')) continue;
96 versions[new Version.parse(split1(basename, '-').last)] = dir;
97 }
98
99 return versions;
100 }
101
102 /// Runs the tests in [callback] against all versions of barback in the repo
103 /// that match [versionConstraint].
104 ///
105 /// This is used to test that pub doesn't accidentally break older versions of
106 /// barback that it's committed to supporting. Only versions `0.13.0` and later
107 /// will be tested.
108 void withBarbackVersions(String versionConstraint, void callback()) {
109 var constraint = new VersionConstraint.parse(versionConstraint);
110
111 var validVersions = _barbackVersions.keys.where(constraint.allows);
112 if (validVersions.isEmpty) {
113 throw new ArgumentError(
114 'No available barback version matches "$versionConstraint".');
115 }
116
117 for (var version in validVersions) {
118 group("with barback $version", () {
119 setUp(() {
120 _barbackDir = _barbackVersions[version];
121 });
122
123 callback();
124 });
125 }
126 }
127
75 /// The completer for [port]. 128 /// The completer for [port].
76 Completer<int> get _portCompleter { 129 Completer<int> get _portCompleter {
77 if (_portCompleterCache != null) return _portCompleterCache; 130 if (_portCompleterCache != null) return _portCompleterCache;
78 _portCompleterCache = new Completer<int>(); 131 _portCompleterCache = new Completer<int>();
79 currentSchedule.onComplete.schedule(() { 132 currentSchedule.onComplete.schedule(() {
80 _portCompleterCache = null; 133 _portCompleterCache = null;
81 }, 'clearing the port completer'); 134 }, 'clearing the port completer');
82 return _portCompleterCache; 135 return _portCompleterCache;
83 } 136 }
84 137
(...skipping 535 matching lines...) Expand 10 before | Expand all | Expand 10 after
620 } 673 }
621 } 674 }
622 675
623 if (pkg != null) { 676 if (pkg != null) {
624 var pkgDir = path.absolute(path.join( 677 var pkgDir = path.absolute(path.join(
625 path.dirname(Platform.executable), 678 path.dirname(Platform.executable),
626 '..', '..', '..', '..', 'pkg')); 679 '..', '..', '..', '..', 'pkg'));
627 680
628 _addPackage(String package) { 681 _addPackage(String package) {
629 if (dependencies.containsKey(package)) return; 682 if (dependencies.containsKey(package)) return;
630 var packagePath = path.join(pkgDir, package); 683
684 var packagePath;
685 if (package == 'barback') {
686 if (_barbackDir == null) {
687 throw new StateError("createLockFile() can only create a lock file "
688 "with a barback dependency within a withBarbackVersions() "
689 "block.");
690 }
691 packagePath = _barbackDir;
692 } else {
693 packagePath = path.join(pkgDir, package);
694 }
695
631 dependencies[package] = packagePath; 696 dependencies[package] = packagePath;
632 var pubspec = loadYaml( 697 var pubspec = loadYaml(
633 readTextFile(path.join(packagePath, 'pubspec.yaml'))); 698 readTextFile(path.join(packagePath, 'pubspec.yaml')));
634 var packageDeps = pubspec['dependencies']; 699 var packageDeps = pubspec['dependencies'];
635 if (packageDeps == null) return; 700 if (packageDeps == null) return;
636 packageDeps.keys.forEach(_addPackage); 701 packageDeps.keys.forEach(_addPackage);
637 } 702 }
638 703
639 pkg.forEach(_addPackage); 704 pkg.forEach(_addPackage);
640 } 705 }
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after
843 _lastMatcher.matches(item.last, matchState); 908 _lastMatcher.matches(item.last, matchState);
844 } 909 }
845 910
846 Description describe(Description description) { 911 Description describe(Description description) {
847 return description.addAll("(", ", ", ")", [_firstMatcher, _lastMatcher]); 912 return description.addAll("(", ", ", ")", [_firstMatcher, _lastMatcher]);
848 } 913 }
849 } 914 }
850 915
851 /// A [StreamMatcher] that matches multiple lines of output. 916 /// A [StreamMatcher] that matches multiple lines of output.
852 StreamMatcher emitsLines(String output) => inOrder(output.split("\n")); 917 StreamMatcher emitsLines(String output) => inOrder(output.split("\n"));
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698