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

Side by Side Diff: test/descriptor/packages.dart

Issue 1228093003: Fix several package spec bugs. (Closed) Base URL: git@github.com:dart-lang/pub.git@master
Patch Set: Code review changes Created 5 years, 5 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
« no previous file with comments | « lib/src/entrypoint.dart ('k') | test/packages_file_test.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 /// Pub-specific scheduled_test descriptors. 5 /// Pub-specific scheduled_test descriptors.
6 library descriptor.packages_file; 6 library descriptor.packages_file;
7 7
8 import "dart:io" show File; 8 import "dart:io" show File;
9 import "dart:async" show Future; 9 import "dart:async" show Future;
10 import "dart:convert" show UTF8; 10 import "dart:convert" show UTF8;
(...skipping 26 matching lines...) Expand all
37 if (parent == null) parent = defaultRoot; 37 if (parent == null) parent = defaultRoot;
38 var contents = const <int>[]; 38 var contents = const <int>[];
39 if (_dependencies != null) { 39 if (_dependencies != null) {
40 var mapping = {}; 40 var mapping = {};
41 _dependencies.forEach((package, version) { 41 _dependencies.forEach((package, version) {
42 var packagePath; 42 var packagePath;
43 if (_semverRE.hasMatch(version)) { 43 if (_semverRE.hasMatch(version)) {
44 // If it's a semver, it's a cache reference. 44 // If it's a semver, it's a cache reference.
45 packagePath = p.join(cachePath, "$package-$version"); 45 packagePath = p.join(cachePath, "$package-$version");
46 } else { 46 } else {
47 // Otherwise it's a path relative to the .pubspec file, 47 // Otherwise it's a path relative to the pubspec file,
48 // which is also the relative path wrt. the .packages file. 48 // which is also relative to the .packages file.
49 packagePath = p.fromUri(version); 49 packagePath = p.fromUri(version);
50 } 50 }
51 mapping[package] = p.toUri(p.join(packagePath, "lib", "")); 51 mapping[package] = p.toUri(p.join(packagePath, "lib", ""));
52 }); 52 });
53 var buffer = new StringBuffer(); 53 var buffer = new StringBuffer();
54 packages_file.write(buffer, mapping); 54 packages_file.write(buffer, mapping);
55 contents = UTF8.encode(buffer.toString()); 55 contents = UTF8.encode(buffer.toString());
56 } 56 }
57 return new File(p.join(parent, name)).writeAsBytes(contents); 57 return new File(p.join(parent, name)).writeAsBytes(contents);
58 }, "creating file '$name'"); 58 }, "creating file '$name'");
59 59
60 Future validate([String parent]) => 60 Future validate([String parent]) =>
61 schedule(() => validateNow(parent), "validating file '$name'"); 61 schedule(() => validateNow(parent), "validating file '$name'");
62 62
63 Future validateNow([String parent]) { 63 Future validateNow([String parent]) {
64 // Copied from FileDescriptor in scheduled_test. 64 // Copied from FileDescriptor in scheduled_test.
65 if (parent == null) parent = defaultRoot; 65 if (parent == null) parent = defaultRoot;
66 var fullPath = p.join(parent, name); 66 var fullPath = p.join(parent, name);
67 if (!new File(fullPath).existsSync()) { 67 if (!new File(fullPath).existsSync()) {
68 fail("File not found: '$fullPath'."); 68 fail("File not found: '$fullPath'.");
69 } 69 }
70 return new File(fullPath).readAsBytes() 70 return new File(fullPath).readAsBytes()
71 .then((bytes) => _validateNow(bytes, fullPath)); 71 .then((bytes) => _validateNow(bytes, fullPath));
72 } 72 }
73 73
74 /// A function that throws an error if [binaryContents] doesn't match the 74 /// A function that throws an error if [binaryContents] doesn't match the
75 /// expected contents of the descriptor. 75 /// expected contents of the descriptor.
76 void _validateNow(List<int> binaryContents, String fullPath) { 76 void _validateNow(List<int> binaryContents, String fullPath) {
77 var fileUri = p.toUri(fullPath); 77 // Resolve against a dummy URL so that we can test whether the URLs in
78 var map = packages_file.parse(binaryContents, fileUri); 78 // the package file are themselves relative. We can't resolve against just
79 // "." due to sdk#23809.
Lasse Reichstein Nielsen 2015/07/13 07:15:37 sdk#23809 could be http://dartbug.com/23809 ?
nweiz 2015/07/13 20:03:44 I'd rather use a more GitHub-like convention. This
Lasse Reichstein Nielsen 2015/07/16 14:51:58 But it also means that there is no direct way for
80 var base = "/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p";
81 var map = packages_file.parse(binaryContents, Uri.parse(base));
79 82
80 for (var package in _dependencies.keys) { 83 for (var package in _dependencies.keys) {
81 if (!map.containsKey(package)) { 84 if (!map.containsKey(package)) {
82 fail(".packages does not contain $package entry"); 85 fail(".packages does not contain $package entry");
83 } 86 }
84 87
85 var description = _dependencies[package]; 88 var description = _dependencies[package];
86 if (_semverRE.hasMatch(description)) { 89 if (_semverRE.hasMatch(description)) {
87 if (!map[package].path.contains(description)) { 90 if (!map[package].path.contains(description)) {
88 fail(".packages of $package has incorrect version. " 91 fail(".packages of $package has incorrect version. "
89 "Expected $description, found location: ${map[package]}."); 92 "Expected $description, found location: ${map[package]}.");
90 } 93 }
91 } else { 94 } else {
92 var expected = p.normalize(p.join( 95 var expected = p.normalize(p.join(p.fromUri(description), 'lib'));
93 p.dirname(fullPath), p.fromUri(description), 'lib')); 96 var actual = p.normalize(p.fromUri(
94 expected = new File(expected).resolveSymbolicLinksSync(); 97 p.url.relative(map[package].toString(), from: p.dirname(base))));
95 var actual = new File(p.normalize(p.absolute(p.fromUri(map[package]))))
96 .resolveSymbolicLinksSync();
97 98
98 if (expected != actual) { 99 if (expected != actual) {
99 fail("Relative path: Expected $description, found ${map[package]}"); 100 fail("Relative path: Expected $expected, found $actual");
100 } 101 }
101 } 102 }
102 } 103 }
103 104
104 if (map.length != _dependencies.length) { 105 if (map.length != _dependencies.length) {
105 for (var key in map.keys) { 106 for (var key in map.keys) {
106 if (!_dependencies.containsKey(key)) { 107 if (!_dependencies.containsKey(key)) {
107 fail(".packages file contains unexpected entry: $key"); 108 fail(".packages file contains unexpected entry: $key");
108 } 109 }
109 } 110 }
110 } 111 }
111 } 112 }
112 113
113 String describe() => name; 114 String describe() => name;
114 } 115 }
OLDNEW
« no previous file with comments | « lib/src/entrypoint.dart ('k') | test/packages_file_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698