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

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

Issue 887483002: Don't crash 'pub get' if a dev dependency is broken. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Code review changes Created 5 years, 10 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) 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 library pubspec_test; 5 library pubspec_test;
6 6
7 import 'dart:async'; 7 import 'dart:async';
8 8
9 import 'package:pub_semver/pub_semver.dart'; 9 import 'package:pub_semver/pub_semver.dart';
10 import 'package:unittest/unittest.dart'; 10 import 'package:unittest/unittest.dart';
11 11
12 import '../lib/src/package.dart'; 12 import '../lib/src/package.dart';
13 import '../lib/src/pubspec.dart'; 13 import '../lib/src/pubspec.dart';
14 import '../lib/src/source.dart'; 14 import '../lib/src/source.dart';
15 import '../lib/src/source/path.dart';
15 import '../lib/src/source_registry.dart'; 16 import '../lib/src/source_registry.dart';
16 import 'test_pub.dart'; 17 import 'test_pub.dart';
17 18
18 class MockSource extends Source { 19 class MockSource extends Source {
19 final String name = "mock"; 20 final String name = "mock";
20 21
21 Future<Pubspec> doDescribe(PackageId id) => throw new UnsupportedError( 22 Future<Pubspec> doDescribe(PackageId id) => throw new UnsupportedError(
22 "Cannot describe mock packages."); 23 "Cannot describe mock packages.");
23 24
24 Future get(PackageId id, String symlink) => throw new UnsupportedError( 25 Future get(PackageId id, String symlink) => throw new UnsupportedError(
(...skipping 12 matching lines...) Expand all
37 description1 == description2; 38 description1 == description2;
38 39
39 String packageName(description) => 'foo'; 40 String packageName(description) => 'foo';
40 } 41 }
41 42
42 main() { 43 main() {
43 initConfig(); 44 initConfig();
44 group('parse()', () { 45 group('parse()', () {
45 var sources = new SourceRegistry(); 46 var sources = new SourceRegistry();
46 sources.register(new MockSource()); 47 sources.register(new MockSource());
48 sources.register(new PathSource());
47 49
48 var throwsPubspecException = 50 var throwsPubspecException =
49 throwsA(new isInstanceOf<PubspecException>('PubspecException')); 51 throwsA(new isInstanceOf<PubspecException>('PubspecException'));
50 52
51 expectPubspecException(String contents, fn(Pubspec pubspec), 53 expectPubspecException(String contents, fn(Pubspec pubspec),
52 [String expectedContains]) { 54 [String expectedContains]) {
53 var expectation = throwsPubspecException; 55 var expectation = throwsPubspecException;
54 if (expectedContains != null) { 56 if (expectedContains != null) {
55 expectation = throwsA(allOf( 57 expectation = throwsA(allOf(
56 new isInstanceOf<PubspecException>('PubspecException'), 58 new isInstanceOf<PubspecException>('PubspecException'),
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
153 foo: 155 foo:
154 unknown: blah 156 unknown: blah
155 ''', sources); 157 ''', sources);
156 158
157 var foo = pubspec.dependencies[0]; 159 var foo = pubspec.dependencies[0];
158 expect(foo.name, equals('foo')); 160 expect(foo.name, equals('foo'));
159 expect(foo.source, equals('unknown')); 161 expect(foo.source, equals('unknown'));
160 }); 162 });
161 163
162 test("throws if a package is in dependencies and dev_dependencies", () { 164 test("throws if a package is in dependencies and dev_dependencies", () {
163 var contents = ''' 165 expectPubspecException('''
164 dependencies: 166 dependencies:
165 foo: 167 foo:
166 mock: ok 168 mock: ok
167 dev_dependencies: 169 dev_dependencies:
168 foo: 170 foo:
169 mock: ok 171 mock: ok
170 '''; 172 ''', (pubspec) {
171 expectPubspecException(contents, (pubspec) => pubspec.dependencies); 173 // This check only triggers if both [dependencies] and [devDependencies]
172 expectPubspecException(contents, (pubspec) => pubspec.devDependencies); 174 // are accessed.
175 pubspec.dependencies;
176 pubspec.devDependencies;
177 });
173 }); 178 });
174 179
175 test("throws if it dependes on itself", () { 180 test("throws if it dependes on itself", () {
176 expectPubspecException(''' 181 expectPubspecException('''
177 name: myapp 182 name: myapp
178 dependencies: 183 dependencies:
179 myapp: 184 myapp:
180 mock: ok 185 mock: ok
181 ''', (pubspec) => pubspec.dependencies); 186 ''', (pubspec) => pubspec.dependencies);
182 }); 187 });
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after
383 var pubspec = new Pubspec.parse(''' 388 var pubspec = new Pubspec.parse('''
384 # No external dependencies yet 389 # No external dependencies yet
385 # Including for completeness 390 # Including for completeness
386 # ...and hoping the spec expands to include details about author, version, etc 391 # ...and hoping the spec expands to include details about author, version, etc
387 # See http://www.dartlang.org/docs/pub-package-manager/ for details 392 # See http://www.dartlang.org/docs/pub-package-manager/ for details
388 ''', sources); 393 ''', sources);
389 expect(pubspec.version, equals(Version.none)); 394 expect(pubspec.version, equals(Version.none));
390 expect(pubspec.dependencies, isEmpty); 395 expect(pubspec.dependencies, isEmpty);
391 }); 396 });
392 397
398 test("throws a useful error for unresolvable path dependencies", () {
399 expectPubspecException('''
400 name: pkg
401 dependencies:
402 from_path: {path: non_local_path}
403 ''', (pubspec) => pubspec.dependencies,
404 '"non_local_path" is a relative path, but this isn\'t a local '
405 'pubspec.');
406 });
407
393 group("environment", () { 408 group("environment", () {
394 test("defaults to any SDK constraint if environment is omitted", () { 409 test("defaults to any SDK constraint if environment is omitted", () {
395 var pubspec = new Pubspec.parse('', sources); 410 var pubspec = new Pubspec.parse('', sources);
396 expect(pubspec.environment.sdkVersion, equals(VersionConstraint.any)); 411 expect(pubspec.environment.sdkVersion, equals(VersionConstraint.any));
397 }); 412 });
398 413
399 test("allows an empty environment map", () { 414 test("allows an empty environment map", () {
400 var pubspec = new Pubspec.parse(''' 415 var pubspec = new Pubspec.parse('''
401 environment: 416 environment:
402 ''', sources); 417 ''', sources);
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
508 test("uses the key if the value is null", () { 523 test("uses the key if the value is null", () {
509 var pubspec = new Pubspec.parse(''' 524 var pubspec = new Pubspec.parse('''
510 executables: 525 executables:
511 command: 526 command:
512 ''', sources); 527 ''', sources);
513 expect(pubspec.executables['command'], equals('command')); 528 expect(pubspec.executables['command'], equals('command'));
514 }); 529 });
515 }); 530 });
516 }); 531 });
517 } 532 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698