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 library pubspec_test; | 5 library pubspec_test; |
6 | 6 |
7 import '../../../pkg/unittest/unittest.dart'; | 7 import '../../../pkg/unittest/unittest.dart'; |
8 import '../../pub/pubspec.dart'; | 8 import '../../pub/pubspec.dart'; |
9 import '../../pub/source.dart'; | 9 import '../../pub/source.dart'; |
10 import '../../pub/source_registry.dart'; | 10 import '../../pub/source_registry.dart'; |
11 import '../../pub/utils.dart'; | 11 import '../../pub/utils.dart'; |
12 import '../../pub/version.dart'; | 12 import '../../pub/version.dart'; |
13 | 13 |
14 class MockSource extends Source { | 14 class MockSource extends Source { |
15 final String name = "mock"; | 15 final String name = "mock"; |
16 final bool shouldCache = false; | 16 final bool shouldCache = false; |
17 void validateDescription(description, {bool fromLockFile: false}) { | 17 void validateDescription(description, {bool fromLockFile: false}) { |
18 if (description != 'ok') throw new FormatException('Bad'); | 18 if (description != 'ok') throw new FormatException('Bad'); |
19 } | 19 } |
20 String packageName(description) => 'foo'; | 20 String packageName(description) => 'foo'; |
21 } | 21 } |
22 | 22 |
23 main() { | 23 main() { |
24 group('Pubspec', () { | 24 group('Pubspec', () { |
25 group('parse()', () { | 25 group('parse()', () { |
| 26 var sources = new SourceRegistry(); |
| 27 sources.register(new MockSource()); |
| 28 |
26 test("allows a version constraint for dependencies", () { | 29 test("allows a version constraint for dependencies", () { |
27 var sources = new SourceRegistry(); | |
28 sources.register(new MockSource()); | |
29 | |
30 var pubspec = new Pubspec.parse(''' | 30 var pubspec = new Pubspec.parse(''' |
31 dependencies: | 31 dependencies: |
32 foo: | 32 foo: |
33 mock: ok | 33 mock: ok |
34 version: ">=1.2.3 <3.4.5" | 34 version: ">=1.2.3 <3.4.5" |
35 ''', sources); | 35 ''', sources); |
36 | 36 |
37 var foo = pubspec.dependencies[0]; | 37 var foo = pubspec.dependencies[0]; |
38 expect(foo.name, equals('foo')); | 38 expect(foo.name, equals('foo')); |
39 expect(foo.constraint.allows(new Version(1, 2, 3))); | 39 expect(foo.constraint.allows(new Version(1, 2, 3))); |
40 expect(foo.constraint.allows(new Version(1, 2, 5))); | 40 expect(foo.constraint.allows(new Version(1, 2, 5))); |
41 expect(!foo.constraint.allows(new Version(3, 4, 5))); | 41 expect(!foo.constraint.allows(new Version(3, 4, 5))); |
42 }); | 42 }); |
43 | 43 |
44 test("throws if the description isn't valid", () { | 44 test("throws if the description isn't valid", () { |
45 var sources = new SourceRegistry(); | |
46 sources.register(new MockSource()); | |
47 | |
48 expect(() { | 45 expect(() { |
49 new Pubspec.parse(''' | 46 new Pubspec.parse(''' |
50 dependencies: | 47 dependencies: |
51 foo: | 48 foo: |
52 mock: bad | 49 mock: bad |
53 ''', sources); | 50 ''', sources); |
54 }, throwsFormatException); | 51 }, throwsFormatException); |
55 }); | 52 }); |
56 | 53 |
| 54 test("throws if 'name' is not a string", () { |
| 55 expect(() => new Pubspec.parse('name: [not, a, string]', sources), |
| 56 throwsFormatException); |
| 57 }); |
| 58 |
| 59 test("throws if 'homepage' is not a string", () { |
| 60 expect(() => new Pubspec.parse('homepage: [not, a, string]', sources), |
| 61 throwsFormatException); |
| 62 }); |
| 63 |
| 64 test("throws if 'authors' is not a string or a list of strings", () { |
| 65 new Pubspec.parse('authors: ok fine', sources); |
| 66 new Pubspec.parse('authors: [also, ok, fine]', sources); |
| 67 |
| 68 expect(() => new Pubspec.parse('authors: 123', sources), |
| 69 throwsFormatException); |
| 70 |
| 71 expect(() => new Pubspec.parse('authors: {not: {a: string}}', sources), |
| 72 throwsFormatException); |
| 73 |
| 74 expect(() => new Pubspec.parse('authors: [ok, {not: ok}]', sources), |
| 75 throwsFormatException); |
| 76 }); |
| 77 |
| 78 test("throws if 'author' is not a string", () { |
| 79 new Pubspec.parse('author: ok fine', sources); |
| 80 |
| 81 expect(() => new Pubspec.parse('author: 123', sources), |
| 82 throwsFormatException); |
| 83 |
| 84 expect(() => new Pubspec.parse('author: {not: {a: string}}', sources), |
| 85 throwsFormatException); |
| 86 |
| 87 expect(() => new Pubspec.parse('author: [not, ok]', sources), |
| 88 throwsFormatException); |
| 89 }); |
| 90 |
| 91 test("throws if both 'author' and 'authors' are present", () { |
| 92 expect(() => new Pubspec.parse('{author: abe, authors: ted}', sources), |
| 93 throwsFormatException); |
| 94 }); |
| 95 |
57 test("allows comment-only files", () { | 96 test("allows comment-only files", () { |
58 var sources = new SourceRegistry(); | |
59 sources.register(new MockSource()); | |
60 | |
61 var pubspec = new Pubspec.parse(''' | 97 var pubspec = new Pubspec.parse(''' |
62 # No external dependencies yet | 98 # No external dependencies yet |
63 # Including for completeness | 99 # Including for completeness |
64 # ...and hoping the spec expands to include details about author, version, etc | 100 # ...and hoping the spec expands to include details about author, version, etc |
65 # See http://www.dartlang.org/docs/pub-package-manager/ for details | 101 # See http://www.dartlang.org/docs/pub-package-manager/ for details |
66 ''', sources); | 102 ''', sources); |
67 expect(pubspec.version, equals(Version.none)); | 103 expect(pubspec.version, equals(Version.none)); |
68 expect(pubspec.dependencies, isEmpty); | 104 expect(pubspec.dependencies, isEmpty); |
69 }); | 105 }); |
70 }); | 106 }); |
71 }); | 107 }); |
72 } | 108 } |
OLD | NEW |