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

Side by Side Diff: utils/tests/pub/validator_test.dart

Issue 12208138: Take Sam Elkhateeb's path for "path" dependencies and clean it up some. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Revise. Created 7 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
« no previous file with comments | « utils/tests/pub/test_pub.dart ('k') | no next file » | 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) 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 validator_test; 5 library validator_test;
6 6
7 import 'dart:async'; 7 import 'dart:async';
8 import 'dart:io'; 8 import 'dart:io';
9 import 'dart:json' as json; 9 import 'dart:json' as json;
10 import 'dart:math' as math; 10 import 'dart:math' as math;
11 11
12 import 'test_pub.dart'; 12 import 'test_pub.dart';
13 import '../../../pkg/unittest/lib/unittest.dart';
14 import '../../../pkg/http/lib/http.dart' as http; 13 import '../../../pkg/http/lib/http.dart' as http;
15 import '../../../pkg/http/lib/testing.dart'; 14 import '../../../pkg/http/lib/testing.dart';
15 import '../../../pkg/path/lib/path.dart' as path;
16 import '../../../pkg/unittest/lib/unittest.dart';
16 import '../../pub/entrypoint.dart'; 17 import '../../pub/entrypoint.dart';
17 import '../../pub/io.dart'; 18 import '../../pub/io.dart';
18 import '../../pub/validator.dart'; 19 import '../../pub/validator.dart';
19 import '../../pub/validator/compiled_dartdoc.dart'; 20 import '../../pub/validator/compiled_dartdoc.dart';
20 import '../../pub/validator/dependency.dart'; 21 import '../../pub/validator/dependency.dart';
21 import '../../pub/validator/directory.dart'; 22 import '../../pub/validator/directory.dart';
22 import '../../pub/validator/lib.dart'; 23 import '../../pub/validator/lib.dart';
23 import '../../pub/validator/license.dart'; 24 import '../../pub/validator/license.dart';
24 import '../../pub/validator/name.dart'; 25 import '../../pub/validator/name.dart';
25 import '../../pub/validator/pubspec_field.dart'; 26 import '../../pub/validator/pubspec_field.dart';
26 import '../../pub/validator/size.dart'; 27 import '../../pub/validator/size.dart';
27 import '../../pub/validator/utf8_readme.dart'; 28 import '../../pub/validator/utf8_readme.dart';
28 29
29 void expectNoValidationError(ValidatorCreator fn) { 30 void expectNoValidationError(ValidatorCreator fn) {
30 expectLater(schedulePackageValidation(fn), pairOf(isEmpty, isEmpty)); 31 expectLater(schedulePackageValidation(fn), pairOf(isEmpty, isEmpty));
31 } 32 }
32 33
33 void expectValidationError(ValidatorCreator fn) { 34 void expectValidationError(ValidatorCreator fn) {
34 expectLater(schedulePackageValidation(fn), pairOf(isNot(isEmpty), anything)); 35 expectLater(schedulePackageValidation(fn), pairOf(isNot(isEmpty), anything));
35 } 36 }
36 37
37 void expectValidationWarning(ValidatorCreator fn) { 38 void expectValidationWarning(ValidatorCreator fn) {
38 expectLater(schedulePackageValidation(fn), pairOf(isEmpty, isNot(isEmpty))); 39 expectLater(schedulePackageValidation(fn), pairOf(isEmpty, isNot(isEmpty)));
39 } 40 }
40 41
42 expectDependencyValidationError(String error) {
43 expectLater(schedulePackageValidation(dependency),
44 pairOf(someElement(contains(error)), isEmpty));
45 }
46
47 expectDependencyValidationWarning(String warning) {
48 expectLater(schedulePackageValidation(dependency),
49 pairOf(isEmpty, someElement(contains(warning))));
50 }
51
41 Validator compiledDartdoc(Entrypoint entrypoint) => 52 Validator compiledDartdoc(Entrypoint entrypoint) =>
42 new CompiledDartdocValidator(entrypoint); 53 new CompiledDartdocValidator(entrypoint);
43 54
44 Validator dependency(Entrypoint entrypoint) => 55 Validator dependency(Entrypoint entrypoint) =>
45 new DependencyValidator(entrypoint); 56 new DependencyValidator(entrypoint);
46 57
47 Validator directory(Entrypoint entrypoint) => 58 Validator directory(Entrypoint entrypoint) =>
48 new DirectoryValidator(entrypoint); 59 new DirectoryValidator(entrypoint);
49 60
50 Validator lib(Entrypoint entrypoint) => new LibValidator(entrypoint); 61 Validator lib(Entrypoint entrypoint) => new LibValidator(entrypoint);
51 62
52 Validator license(Entrypoint entrypoint) => new LicenseValidator(entrypoint); 63 Validator license(Entrypoint entrypoint) => new LicenseValidator(entrypoint);
53 64
54 Validator name(Entrypoint entrypoint) => new NameValidator(entrypoint); 65 Validator name(Entrypoint entrypoint) => new NameValidator(entrypoint);
55 66
56 Validator pubspecField(Entrypoint entrypoint) => 67 Validator pubspecField(Entrypoint entrypoint) =>
57 new PubspecFieldValidator(entrypoint); 68 new PubspecFieldValidator(entrypoint);
58 69
59 Function size(int size) { 70 Function size(int size) {
60 return (entrypoint) => 71 return (entrypoint) =>
61 new SizeValidator(entrypoint, new Future.immediate(size)); 72 new SizeValidator(entrypoint, new Future.immediate(size));
62 } 73 }
63 74
64 Validator utf8Readme(Entrypoint entrypoint) => 75 Validator utf8Readme(Entrypoint entrypoint) =>
65 new Utf8ReadmeValidator(entrypoint); 76 new Utf8ReadmeValidator(entrypoint);
66 77
67 void scheduleNormalPackage() => normalPackage.scheduleCreate(); 78 void scheduleNormalPackage() => normalPackage.scheduleCreate();
68 79
80 /// Sets up a test package with dependency [dep] and mocks a server with
81 /// [hostedVersions] of the package available.
82 setUpDependency(Map dep, {List<String> hostedVersions}) {
83 useMockClient(new MockClient((request) {
84 expect(request.method, equals("GET"));
85 expect(request.url.path, equals("/packages/foo.json"));
86
87 if (hostedVersions == null) {
88 return new Future.immediate(new http.Response("not found", 404));
89 } else {
90 return new Future.immediate(new http.Response(json.stringify({
91 "name": "foo",
92 "uploaders": ["nweiz@google.com"],
93 "versions": hostedVersions
94 }), 200));
95 }
96 }));
97
98 dir(appPath, [
99 libPubspec("test_pkg", "1.0.0", deps: [dep])
100 ]).scheduleCreate();
101 }
102
69 main() { 103 main() {
104 initConfig();
70 group('should consider a package valid if it', () { 105 group('should consider a package valid if it', () {
71 setUp(scheduleNormalPackage); 106 setUp(scheduleNormalPackage);
72 107
73 integration('looks normal', () { 108 integration('looks normal', () {
74 dir(appPath, [libPubspec("test_pkg", "1.0.0")]).scheduleCreate(); 109 dir(appPath, [libPubspec("test_pkg", "1.0.0")]).scheduleCreate();
75 expectNoValidationError(dependency); 110 expectNoValidationError(dependency);
76 expectNoValidationError(lib); 111 expectNoValidationError(lib);
77 expectNoValidationError(license); 112 expectNoValidationError(license);
78 expectNoValidationError(name); 113 expectNoValidationError(name);
79 expectNoValidationError(pubspecField); 114 expectNoValidationError(pubspecField);
(...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after
319 integration('has a lib directory containing only src', () { 354 integration('has a lib directory containing only src', () {
320 file(join(appPath, "lib", "test_pkg.dart"), '').scheduleDelete(); 355 file(join(appPath, "lib", "test_pkg.dart"), '').scheduleDelete();
321 dir(appPath, [ 356 dir(appPath, [
322 dir("lib", [ 357 dir("lib", [
323 dir("src", [file("test_pkg.dart", "int i = 0;")]) 358 dir("src", [file("test_pkg.dart", "int i = 0;")])
324 ]) 359 ])
325 ]).scheduleCreate(); 360 ]).scheduleCreate();
326 expectValidationError(lib); 361 expectValidationError(lib);
327 }); 362 });
328 363
329 group('has a dependency with a non-hosted source', () { 364 group('has a git dependency', () {
330 group('where a hosted version of that dependency exists', () { 365 group('where a hosted version exists', () {
331 integration("and should suggest the hosted package's primary " 366 integration("and should suggest the hosted primary version", () {
332 "version", () { 367 setUpDependency({'git': 'git://github.com/dart-lang/foo'},
333 useMockClient(new MockClient((request) { 368 hostedVersions: ["3.0.0-pre", "2.0.0", "1.0.0"]);
334 expect(request.method, equals("GET")); 369 expectDependencyValidationWarning(' foo: ">=2.0.0 <3.0.0"');
335 expect(request.url.path, equals("/packages/foo.json"));
336
337 return new Future.immediate(new http.Response(json.stringify({
338 "name": "foo",
339 "uploaders": ["nweiz@google.com"],
340 "versions": ["3.0.0-pre", "2.0.0", "1.0.0"]
341 }), 200));
342 }));
343
344 dir(appPath, [
345 libPubspec("test_pkg", "1.0.0", deps: [
346 {'git': 'git://github.com/dart-lang/foo'}
347 ])
348 ]).scheduleCreate();
349
350 expectLater(schedulePackageValidation(dependency),
351 pairOf(isEmpty, someElement(contains(
352 ' foo: ">=2.0.0 <3.0.0"'))));
353 }); 370 });
354 371
355 integration("and should suggest the hosted package's prerelease " 372 integration("and should suggest the hosted prerelease version if "
356 "version if it's the only version available", () { 373 "it's the only version available", () {
357 useMockClient(new MockClient((request) { 374 setUpDependency({'git': 'git://github.com/dart-lang/foo'},
358 expect(request.method, equals("GET")); 375 hostedVersions: ["3.0.0-pre", "2.0.0-pre"]);
359 expect(request.url.path, equals("/packages/foo.json")); 376 expectDependencyValidationWarning(' foo: ">=3.0.0-pre <4.0.0"');
360
361 return new Future.immediate(new http.Response(json.stringify({
362 "name": "foo",
363 "uploaders": ["nweiz@google.com"],
364 "versions": ["3.0.0-pre", "2.0.0-pre"]
365 }), 200));
366 }));
367
368 dir(appPath, [
369 libPubspec("test_pkg", "1.0.0", deps: [
370 {'git': 'git://github.com/dart-lang/foo'}
371 ])
372 ]).scheduleCreate();
373
374 expectLater(schedulePackageValidation(dependency),
375 pairOf(isEmpty, someElement(contains(
376 ' foo: ">=3.0.0-pre <4.0.0"'))));
377 }); 377 });
378 378
379 integration("and should suggest a tighter constraint if the primary " 379 integration("and should suggest a tighter constraint if primary is "
380 "version is pre-1.0.0", () { 380 "pre-1.0.0", () {
381 useMockClient(new MockClient((request) { 381 setUpDependency({'git': 'git://github.com/dart-lang/foo'},
382 expect(request.method, equals("GET")); 382 hostedVersions: ["0.0.1", "0.0.2"]);
383 expect(request.url.path, equals("/packages/foo.json")); 383 expectDependencyValidationWarning(' foo: ">=0.0.2 <0.0.3"');
384
385 return new Future.immediate(new http.Response(json.stringify({
386 "name": "foo",
387 "uploaders": ["nweiz@google.com"],
388 "versions": ["0.0.1", "0.0.2"]
389 }), 200));
390 }));
391
392 dir(appPath, [
393 libPubspec("test_pkg", "1.0.0", deps: [
394 {'git': 'git://github.com/dart-lang/foo'}
395 ])
396 ]).scheduleCreate();
397
398 expectLater(schedulePackageValidation(dependency),
399 pairOf(isEmpty, someElement(contains(
400 ' foo: ">=0.0.2 <0.0.3"'))));
401 }); 384 });
402 }); 385 });
403 386
404 group('where no hosted version of that dependency exists', () { 387 group('where no hosted version exists', () {
405 integration("and should use the other source's version", () { 388 integration("and should use the other source's version", () {
406 useMockClient(new MockClient((request) { 389 setUpDependency({
407 expect(request.method, equals("GET")); 390 'git': 'git://github.com/dart-lang/foo',
408 expect(request.url.path, equals("/packages/foo.json")); 391 'version': '>=1.0.0 <2.0.0'
409 392 });
410 return new Future.immediate(new http.Response("not found", 404)); 393 expectDependencyValidationWarning(' foo: ">=1.0.0 <2.0.0"');
411 }));
412
413 dir(appPath, [
414 libPubspec("test_pkg", "1.0.0", deps: [
415 {
416 'git': {'url': 'git://github.com/dart-lang/foo'},
417 'version': '>=1.0.0 <2.0.0'
418 }
419 ])
420 ]).scheduleCreate();
421
422 expectLater(schedulePackageValidation(dependency),
423 pairOf(isEmpty, someElement(contains(
424 ' foo: ">=1.0.0 <2.0.0"'))));
425 }); 394 });
426 395
427 integration("and should use the other source's unquoted version if " 396 integration("and should use the other source's unquoted version if "
428 "it's concrete", () { 397 "concrete", () {
429 useMockClient(new MockClient((request) { 398 setUpDependency({
430 expect(request.method, equals("GET")); 399 'git': 'git://github.com/dart-lang/foo',
431 expect(request.url.path, equals("/packages/foo.json")); 400 'version': '0.2.3'
432 401 });
433 return new Future.immediate(new http.Response("not found", 404)); 402 expectDependencyValidationWarning(' foo: 0.2.3');
434 }));
435
436 dir(appPath, [
437 libPubspec("test_pkg", "1.0.0", deps: [
438 {
439 'git': {'url': 'git://github.com/dart-lang/foo'},
440 'version': '0.2.3'
441 }
442 ])
443 ]).scheduleCreate();
444
445 expectLater(schedulePackageValidation(dependency),
446 pairOf(isEmpty, someElement(contains(' foo: 0.2.3'))));
447 }); 403 });
448 }); 404 });
449 }); 405 });
406
407 group('has a path dependency', () {
408 group('where a hosted version exists', () {
409 integration("and should suggest the hosted primary version", () {
410 setUpDependency({'path': path.join(sandboxDir, 'foo')},
411 hostedVersions: ["3.0.0-pre", "2.0.0", "1.0.0"]);
412 expectDependencyValidationError(' foo: ">=2.0.0 <3.0.0"');
413 });
414
415 integration("and should suggest the hosted prerelease version if "
416 "it's the only version available", () {
417 setUpDependency({'path': path.join(sandboxDir, 'foo')},
418 hostedVersions: ["3.0.0-pre", "2.0.0-pre"]);
419 expectDependencyValidationError(' foo: ">=3.0.0-pre <4.0.0"');
420 });
421
422 integration("and should suggest a tighter constraint if primary is "
423 "pre-1.0.0", () {
424 setUpDependency({'path': path.join(sandboxDir, 'foo')},
425 hostedVersions: ["0.0.1", "0.0.2"]);
426 expectDependencyValidationError(' foo: ">=0.0.2 <0.0.3"');
427 });
428 });
429
430 group('where no hosted version exists', () {
431 integration("and should use the other source's version", () {
432 setUpDependency({
433 'path': path.join(sandboxDir, 'foo'),
434 'version': '>=1.0.0 <2.0.0'
435 });
436 expectDependencyValidationError(' foo: ">=1.0.0 <2.0.0"');
437 });
438
439 integration("and should use the other source's unquoted version if "
440 "concrete", () {
441 setUpDependency({
442 'path': path.join(sandboxDir, 'foo'),
443 'version': '0.2.3'
444 });
445 expectDependencyValidationError(' foo: 0.2.3');
446 });
447 });
448 });
450 449
451 group('has an unconstrained dependency', () { 450 group('has an unconstrained dependency', () {
452 group('and it should not suggest a version', () { 451 group('and it should not suggest a version', () {
453 integration("if there's no lockfile", () { 452 integration("if there's no lockfile", () {
454 dir(appPath, [ 453 dir(appPath, [
455 libPubspec("test_pkg", "1.0.0", deps: [ 454 libPubspec("test_pkg", "1.0.0", deps: [
456 {'hosted': 'foo'} 455 {'hosted': 'foo'}
457 ]) 456 ])
458 ]).scheduleCreate(); 457 ]).scheduleCreate();
459 458
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
500 'source': 'hosted', 499 'source': 'hosted',
501 'description': { 500 'description': {
502 'name': 'foo', 501 'name': 'foo',
503 'url': 'http://pub.dartlang.org' 502 'url': 'http://pub.dartlang.org'
504 } 503 }
505 } 504 }
506 } 505 }
507 })) 506 }))
508 ]).scheduleCreate(); 507 ]).scheduleCreate();
509 508
510 expectLater(schedulePackageValidation(dependency), 509 expectDependencyValidationWarning(' foo: ">=1.2.3 <2.0.0"');
511 pairOf(isEmpty, someElement(contains(
512 ' foo: ">=1.2.3 <2.0.0"'))));
513 }); 510 });
514 511
515 integration('and it should suggest a concrete constraint if the locked ' 512 integration('and it should suggest a concrete constraint if the locked '
516 'version is pre-1.0.0', () { 513 'version is pre-1.0.0', () {
517 dir(appPath, [ 514 dir(appPath, [
518 libPubspec("test_pkg", "1.0.0", deps: [ 515 libPubspec("test_pkg", "1.0.0", deps: [
519 {'hosted': 'foo'} 516 {'hosted': 'foo'}
520 ]), 517 ]),
521 file("pubspec.lock", json.stringify({ 518 file("pubspec.lock", json.stringify({
522 'packages': { 519 'packages': {
523 'foo': { 520 'foo': {
524 'version': '0.1.2', 521 'version': '0.1.2',
525 'source': 'hosted', 522 'source': 'hosted',
526 'description': { 523 'description': {
527 'name': 'foo', 524 'name': 'foo',
528 'url': 'http://pub.dartlang.org' 525 'url': 'http://pub.dartlang.org'
529 } 526 }
530 } 527 }
531 } 528 }
532 })) 529 }))
533 ]).scheduleCreate(); 530 ]).scheduleCreate();
534 531
535 expectLater(schedulePackageValidation(dependency), 532 expectDependencyValidationWarning(' foo: ">=0.1.2 <0.1.3"');
536 pairOf(isEmpty, someElement(contains(
537 ' foo: ">=0.1.2 <0.1.3"'))));
538 }); 533 });
539 }); 534 });
540 }); 535 });
541 536
542 integration('has a hosted dependency on itself', () { 537 integration('has a hosted dependency on itself', () {
543 dir(appPath, [ 538 dir(appPath, [
544 libPubspec("test_pkg", "1.0.0", deps: [ 539 libPubspec("test_pkg", "1.0.0", deps: [
545 {'hosted': {'name': 'test_pkg', 'version': '>=1.0.0'}} 540 {'hosted': {'name': 'test_pkg', 'version': '>=1.0.0'}}
546 ]) 541 ])
547 ]).scheduleCreate(); 542 ]).scheduleCreate();
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
580 }); 575 });
581 576
582 test('has a README with invalid utf-8', () { 577 test('has a README with invalid utf-8', () {
583 dir(appPath, [ 578 dir(appPath, [
584 binaryFile("README", [192]) 579 binaryFile("README", [192])
585 ]).scheduleCreate(); 580 ]).scheduleCreate();
586 expectValidationWarning(utf8Readme); 581 expectValidationWarning(utf8Readme);
587 }); 582 });
588 }); 583 });
589 } 584 }
OLDNEW
« no previous file with comments | « utils/tests/pub/test_pub.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698