OLD | NEW |
| (Empty) |
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 | |
3 // BSD-style license that can be found in the LICENSE file. | |
4 | |
5 library pubspec_test; | |
6 | |
7 import 'package:unittest/unittest.dart'; | |
8 | |
9 import '../../pub/pubspec.dart'; | |
10 import '../../pub/source.dart'; | |
11 import '../../pub/source_registry.dart'; | |
12 import '../../pub/utils.dart'; | |
13 import '../../pub/version.dart'; | |
14 import 'test_pub.dart'; | |
15 | |
16 class MockSource extends Source { | |
17 final String name = "mock"; | |
18 final bool shouldCache = false; | |
19 dynamic parseDescription(String filePath, description, | |
20 {bool fromLockFile: false}) { | |
21 if (description != 'ok') throw new FormatException('Bad'); | |
22 return description; | |
23 } | |
24 String packageName(description) => 'foo'; | |
25 } | |
26 | |
27 main() { | |
28 initConfig(); | |
29 group('parse()', () { | |
30 var sources = new SourceRegistry(); | |
31 sources.register(new MockSource()); | |
32 | |
33 expectFormatError(String pubspec) { | |
34 expect(() => new Pubspec.parse(null, pubspec, sources), | |
35 throwsFormatException); | |
36 } | |
37 | |
38 test("allows a version constraint for dependencies", () { | |
39 var pubspec = new Pubspec.parse(null, ''' | |
40 dependencies: | |
41 foo: | |
42 mock: ok | |
43 version: ">=1.2.3 <3.4.5" | |
44 ''', sources); | |
45 | |
46 var foo = pubspec.dependencies[0]; | |
47 expect(foo.name, equals('foo')); | |
48 expect(foo.constraint.allows(new Version(1, 2, 3)), isTrue); | |
49 expect(foo.constraint.allows(new Version(1, 2, 5)), isTrue); | |
50 expect(foo.constraint.allows(new Version(3, 4, 5)), isFalse); | |
51 }); | |
52 | |
53 test("allows an empty dependencies map", () { | |
54 var pubspec = new Pubspec.parse(null, ''' | |
55 dependencies: | |
56 ''', sources); | |
57 | |
58 expect(pubspec.dependencies, isEmpty); | |
59 }); | |
60 | |
61 test("allows a version constraint for dev dependencies", () { | |
62 var pubspec = new Pubspec.parse(null, ''' | |
63 dev_dependencies: | |
64 foo: | |
65 mock: ok | |
66 version: ">=1.2.3 <3.4.5" | |
67 ''', sources); | |
68 | |
69 var foo = pubspec.devDependencies[0]; | |
70 expect(foo.name, equals('foo')); | |
71 expect(foo.constraint.allows(new Version(1, 2, 3)), isTrue); | |
72 expect(foo.constraint.allows(new Version(1, 2, 5)), isTrue); | |
73 expect(foo.constraint.allows(new Version(3, 4, 5)), isFalse); | |
74 }); | |
75 | |
76 test("allows an empty dev dependencies map", () { | |
77 var pubspec = new Pubspec.parse(null, ''' | |
78 dev_dependencies: | |
79 ''', sources); | |
80 | |
81 expect(pubspec.devDependencies, isEmpty); | |
82 }); | |
83 | |
84 test("throws if a package is in dependencies and dev_dependencies", () { | |
85 expectFormatError(''' | |
86 dependencies: | |
87 foo: | |
88 mock: ok | |
89 dev_dependencies: | |
90 foo: | |
91 mock: ok | |
92 '''); | |
93 }); | |
94 | |
95 test("throws if the description isn't valid", () { | |
96 expectFormatError(''' | |
97 dependencies: | |
98 foo: | |
99 mock: bad | |
100 '''); | |
101 }); | |
102 | |
103 test("throws if 'name' is not a string", () { | |
104 expectFormatError('name: [not, a, string]'); | |
105 }); | |
106 | |
107 test("throws if 'homepage' is not a string", () { | |
108 expectFormatError('homepage:'); | |
109 expectFormatError('homepage: [not, a, string]'); | |
110 }); | |
111 | |
112 test("throws if 'homepage' doesn't have an HTTP scheme", () { | |
113 new Pubspec.parse(null, 'homepage: http://ok.com', sources); | |
114 new Pubspec.parse(null, 'homepage: https://also-ok.com', sources); | |
115 | |
116 expectFormatError('homepage: ftp://badscheme.com'); | |
117 expectFormatError('homepage: javascript:alert("!!!")'); | |
118 expectFormatError('homepage: data:image/png;base64,somedata'); | |
119 expectFormatError('homepage: no-scheme.com'); | |
120 }); | |
121 | |
122 test("throws if 'documentation' is not a string", () { | |
123 expectFormatError('documentation:'); | |
124 expectFormatError('documentation: [not, a, string]'); | |
125 }); | |
126 | |
127 test("throws if 'documentation' doesn't have an HTTP scheme", () { | |
128 new Pubspec.parse(null, 'documentation: http://ok.com', sources); | |
129 new Pubspec.parse(null, 'documentation: https://also-ok.com', sources); | |
130 | |
131 expectFormatError('documentation: ftp://badscheme.com'); | |
132 expectFormatError('documentation: javascript:alert("!!!")'); | |
133 expectFormatError('documentation: data:image/png;base64,somedata'); | |
134 expectFormatError('documentation: no-scheme.com'); | |
135 }); | |
136 | |
137 test("throws if 'authors' is not a string or a list of strings", () { | |
138 new Pubspec.parse(null, 'authors: ok fine', sources); | |
139 new Pubspec.parse(null, 'authors: [also, ok, fine]', sources); | |
140 | |
141 expectFormatError('authors: 123'); | |
142 expectFormatError('authors: {not: {a: string}}'); | |
143 expectFormatError('authors: [ok, {not: ok}]'); | |
144 }); | |
145 | |
146 test("throws if 'author' is not a string", () { | |
147 new Pubspec.parse(null, 'author: ok fine', sources); | |
148 | |
149 expectFormatError('author: 123'); | |
150 expectFormatError('author: {not: {a: string}}'); | |
151 expectFormatError('author: [not, ok]'); | |
152 }); | |
153 | |
154 test("throws if both 'author' and 'authors' are present", () { | |
155 expectFormatError('{author: abe, authors: ted}'); | |
156 }); | |
157 | |
158 test("allows comment-only files", () { | |
159 var pubspec = new Pubspec.parse(null, ''' | |
160 # No external dependencies yet | |
161 # Including for completeness | |
162 # ...and hoping the spec expands to include details about author, version, etc | |
163 # See http://www.dartlang.org/docs/pub-package-manager/ for details | |
164 ''', sources); | |
165 expect(pubspec.version, equals(Version.none)); | |
166 expect(pubspec.dependencies, isEmpty); | |
167 }); | |
168 | |
169 group("environment", () { | |
170 test("defaults to any SDK constraint if environment is omitted", () { | |
171 var pubspec = new Pubspec.parse(null, '', sources); | |
172 expect(pubspec.environment.sdkVersion, equals(VersionConstraint.any)); | |
173 }); | |
174 | |
175 test("allows an empty environment map", () { | |
176 var pubspec = new Pubspec.parse(null, ''' | |
177 environment: | |
178 ''', sources); | |
179 expect(pubspec.environment.sdkVersion, equals(VersionConstraint.any)); | |
180 }); | |
181 | |
182 test("throws if the environment value isn't a map", () { | |
183 expectFormatError(''' | |
184 environment: [] | |
185 '''); | |
186 }); | |
187 | |
188 test("allows a version constraint for the sdk", () { | |
189 var pubspec = new Pubspec.parse(null, ''' | |
190 environment: | |
191 sdk: ">=1.2.3 <2.3.4" | |
192 ''', sources); | |
193 expect(pubspec.environment.sdkVersion, | |
194 equals(new VersionConstraint.parse(">=1.2.3 <2.3.4"))); | |
195 }); | |
196 | |
197 test("throws if the sdk isn't a string", () { | |
198 expectFormatError(''' | |
199 environment: | |
200 sdk: [] | |
201 '''); | |
202 }); | |
203 | |
204 test("throws if the sdk isn't a valid version constraint", () { | |
205 expectFormatError(''' | |
206 environment: | |
207 sdk: "oopies" | |
208 '''); | |
209 }); | |
210 }); | |
211 }); | |
212 } | |
OLD | NEW |