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

Side by Side Diff: tests/standalone/packages_file_test.dart

Issue 2051433002: Add tests for resolving missing packages, relative and absolute URIs. (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Created 4 years, 6 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 | « no previous file | 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) 2016, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2016, 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 import "dart:async"; 5 import "dart:async";
6 import "dart:io"; 6 import "dart:io";
7 import "dart:convert" show JSON; 7 import "dart:convert" show JSON;
8 import "package:path/path.dart" as p; 8 import "package:path/path.dart" as p;
9 import "package:async_helper/async_helper.dart"; 9 import "package:async_helper/async_helper.dart";
10 10
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after
213 // 213 //
214 // The combinations covers most configurations of implicit and explicit 214 // The combinations covers most configurations of implicit and explicit
215 // package configurations over both file: and http: file sources. 215 // package configurations over both file: and http: file sources.
216 // It also specifies the expected values of the following for a VM 216 // It also specifies the expected values of the following for a VM
217 // run in that configuration. 217 // run in that configuration.
218 // 218 //
219 // * `Process.packageRoot` 219 // * `Process.packageRoot`
220 // * `Process.packageConfig` 220 // * `Process.packageConfig`
221 // * `Isolate.packageRoot` 221 // * `Isolate.packageRoot`
222 // * `Isolate.packageRoot` 222 // * `Isolate.packageRoot`
223 // * `Isolate.resolvePacakgeUri` of various inputs. 223 // * `Isolate.resolvePackageUri` of various inputs.
224 // * A variable defined in a library loaded using a `package:` URI. 224 // * A variable defined in a library loaded using a `package:` URI.
225 // 225 //
226 // The configurations all have URIs as `root`, `config` and `mainFile` strings, 226 // The configurations all have URIs as `root`, `config` and `mainFile` strings,
227 // have empty argument lists and `mainFile` points to the the `main.dart` file. 227 // have empty argument lists and `mainFile` points to the the `main.dart` file.
228 void createConfigurations() { 228 void createConfigurations() {
229 add(String description, String mainDir, {String root, String config, 229 add(String description, String mainDir, {String root, String config,
230 Map file, Map http, Map expect}) { 230 Map file, Map http, Map expect}) {
231 var id = freshName("conf"); 231 var id = freshName("conf");
232 232
233 file ??= {}; 233 file ??= {};
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
285 fixPaths(file); 285 fixPaths(file);
286 fixPaths(http); 286 fixPaths(http);
287 // These expectations are default. If not overridden the value will be 287 // These expectations are default. If not overridden the value will be
288 // expected to be null. That is, you can't avoid testing the actual 288 // expected to be null. That is, you can't avoid testing the actual
289 // value of these, you can only change what value to expect. 289 // value of these, you can only change what value to expect.
290 // For values not included here (commented out), the result is not tested 290 // For values not included here (commented out), the result is not tested
291 // unless a value (maybe null) is provided. 291 // unless a value (maybe null) is provided.
292 fixPaths(expect); 292 fixPaths(expect);
293 293
294 expect = { 294 expect = {
295 "pconf": null, 295 "pconf": null,
296 "proot": null, 296 "proot": null,
297 "iconf": null, 297 "iconf": null,
298 "iroot": null, 298 "iroot": null,
299 // "foo": null, 299 // "foo": null,
300 "foo/": null, 300 "foo/": null,
301 "foo/bar": null, 301 "foo/bar": null,
302 "foo.x": "qux", 302 "foo.x": "qux",
303 "bar/bar": null,
304 "relative": "relative/path",
305 "nonpkg": "http://example.org/file"
303 }..addAll(expect ?? const {}); 306 }..addAll(expect ?? const {});
304 307
305 // Add http files to the http server. 308 // Add http files to the http server.
306 if (http.isNotEmpty) { 309 if (http.isNotEmpty) {
307 httpFiles[id] = http; 310 httpFiles[id] = http;
308 } 311 }
309 // Add file files to the file system. 312 // Add file files to the file system.
310 if (file.isNotEmpty) { 313 if (file.isNotEmpty) {
311 createFiles(fileRoot, id, file); 314 createFiles(fileRoot, id, file);
312 } 315 }
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
346 addScheme("no resolution", 349 addScheme("no resolution",
347 "%$scheme/", 350 "%$scheme/",
348 files: {}, 351 files: {},
349 expect: (scheme == "file") ? { 352 expect: (scheme == "file") ? {
350 "foo.x": null 353 "foo.x": null
351 } : { 354 } : {
352 "iroot": "%http/packages/", 355 "iroot": "%http/packages/",
353 "foo/": "%http/packages/foo/", 356 "foo/": "%http/packages/foo/",
354 "foo/bar": "%http/packages/foo/bar", 357 "foo/bar": "%http/packages/foo/bar",
355 "foo.x": null, 358 "foo.x": null,
359 "bar/bar": "%http/packages/bar/bar",
356 }); 360 });
357 } 361 }
358 362
359 { 363 {
360 // No parameters, no .packages files, 364 // No parameters, no .packages files,
361 // packages/ dir exists and is detected. 365 // packages/ dir exists and is detected.
362 var files = {"packages": fooPackage}; 366 var files = {"packages": fooPackage};
363 addScheme("implicit packages dir","%$scheme/", 367 addScheme("implicit packages dir","%$scheme/",
364 files: files, 368 files: files,
365 expect: { 369 expect: {
366 "iroot": "%$scheme/packages/", 370 "iroot": "%$scheme/packages/",
367 "foo/": "%$scheme/packages/foo/", 371 "foo/": "%$scheme/packages/foo/",
368 "foo/bar": "%$scheme/packages/foo/bar", 372 "foo/bar": "%$scheme/packages/foo/bar",
373 "bar/bar": "%$scheme/packages/bar/bar",
369 }); 374 });
370 } 375 }
371 376
372 { 377 {
373 // No parameters, no .packages files in current dir, but one in parent, 378 // No parameters, no .packages files in current dir, but one in parent,
374 // packages/ dir exists and is used. 379 // packages/ dir exists and is used.
375 // 380 //
376 // Should not detect the .packages file in parent directory. 381 // Should not detect the .packages file in parent directory.
377 // That file is empty, so if it is used, the system cannot resolve "foo". 382 // That file is empty, so if it is used, the system cannot resolve "foo".
378 var files = {"sub": {"packages": fooPackage}, 383 var files = {"sub": {"packages": fooPackage},
379 ".packages": ""}; 384 ".packages": ""};
380 addScheme("implicit packages dir overrides parent .packages", 385 addScheme("implicit packages dir overrides parent .packages",
381 "%$scheme/sub/", 386 "%$scheme/sub/",
382 files: files, 387 files: files,
383 expect: { 388 expect: {
384 "iroot": "%$scheme/sub/packages/", 389 "iroot": "%$scheme/sub/packages/",
385 "foo/": "%$scheme/sub/packages/foo/", 390 "foo/": "%$scheme/sub/packages/foo/",
386 "foo/bar": "%$scheme/sub/packages/foo/bar", 391 "foo/bar": "%$scheme/sub/packages/foo/bar",
387 // "foo.x": "qux", // Blocked by issue http://dartbug.com/26482 392 // "foo.x": "qux", // Blocked by issue http://dartbug.com/26482
393 "bar/bar": "%$scheme/sub/packages/bar/bar",
388 }); 394 });
389 } 395 }
390 396
391 { 397 {
392 // No parameters, a .packages file next to entry is found and used. 398 // No parameters, a .packages file next to entry is found and used.
393 // A packages/ directory is ignored. 399 // A packages/ directory is ignored.
394 var files = {".packages": "foo:pkgs/foo/", 400 var files = {".packages": "foo:pkgs/foo/",
395 "packages": {}, 401 "packages": {},
396 "pkgs": fooPackage}; 402 "pkgs": fooPackage};
397 addScheme("implicit .packages file", "%$scheme/", 403 addScheme("implicit .packages file", "%$scheme/",
(...skipping 16 matching lines...) Expand all
414 files: files, 420 files: files,
415 expect: (scheme == "file") ? { 421 expect: (scheme == "file") ? {
416 "iconf": "%file/.packages", 422 "iconf": "%file/.packages",
417 "foo/": "%file/pkgs/foo/", 423 "foo/": "%file/pkgs/foo/",
418 "foo/bar": "%file/pkgs/foo/bar", 424 "foo/bar": "%file/pkgs/foo/bar",
419 } : { 425 } : {
420 "iroot": "%http/sub/packages/", 426 "iroot": "%http/sub/packages/",
421 "foo/": "%http/sub/packages/foo/", 427 "foo/": "%http/sub/packages/foo/",
422 "foo/bar": "%http/sub/packages/foo/bar", 428 "foo/bar": "%http/sub/packages/foo/bar",
423 "foo.x": null, 429 "foo.x": null,
430 "bar/bar": "%http/sub/packages/bar/bar",
424 }); 431 });
425 } 432 }
426 433
427 { 434 {
428 // Specified package root that doesn't exist. 435 // Specified package root that doesn't exist.
429 // Ignores existing .packages file and packages/ dir. 436 // Ignores existing .packages file and packages/ dir.
430 addScheme("explicit root not there", 437 addScheme("explicit root not there",
431 "%$scheme/", 438 "%$scheme/",
432 files: {"packages": fooPackage, 439 files: {"packages": fooPackage,
433 ".packages": "foo:%$scheme/packages/"}, 440 ".packages": "foo:%$scheme/packages/"},
434 root: "%$scheme/notthere/", 441 root: "%$scheme/notthere/",
435 expect: { 442 expect: {
436 "proot": "%$scheme/notthere/", 443 "proot": "%$scheme/notthere/",
437 "iroot": "%$scheme/notthere/", 444 "iroot": "%$scheme/notthere/",
438 "foo/": "%$scheme/notthere/foo/", 445 "foo/": "%$scheme/notthere/foo/",
439 "foo/bar": "%$scheme/notthere/foo/bar", 446 "foo/bar": "%$scheme/notthere/foo/bar",
440 "foo.x": null, 447 "foo.x": null,
448 "bar/bar": "%$scheme/notthere/bar/bar",
441 }); 449 });
442 } 450 }
443 451
444 { 452 {
445 // Specified package config that doesn't exist. 453 // Specified package config that doesn't exist.
446 // Ignores existing .packages file and packages/ dir. 454 // Ignores existing .packages file and packages/ dir.
447 addScheme("explicit config not there", 455 addScheme("explicit config not there",
448 "%$scheme/", 456 "%$scheme/",
449 files: {".packages": "foo:packages/foo/", 457 files: {".packages": "foo:packages/foo/",
450 "packages": fooPackage}, 458 "packages": fooPackage},
(...skipping 14 matching lines...) Expand all
465 "packages": {}, 473 "packages": {},
466 "pkgs": fooPackage}; 474 "pkgs": fooPackage};
467 addScheme("explicit package root, no slash", "%$scheme/", 475 addScheme("explicit package root, no slash", "%$scheme/",
468 files: files, 476 files: files,
469 root: "%$scheme/pkgs", 477 root: "%$scheme/pkgs",
470 expect: { 478 expect: {
471 "proot": "%$scheme/pkgs/", 479 "proot": "%$scheme/pkgs/",
472 "iroot": "%$scheme/pkgs/", 480 "iroot": "%$scheme/pkgs/",
473 "foo/": "%$scheme/pkgs/foo/", 481 "foo/": "%$scheme/pkgs/foo/",
474 "foo/bar": "%$scheme/pkgs/foo/bar", 482 "foo/bar": "%$scheme/pkgs/foo/bar",
483 "bar/bar": "%$scheme/pkgs/bar/bar",
475 }); 484 });
476 } 485 }
477 486
478 { 487 {
479 // Specified package root with trailing slash. 488 // Specified package root with trailing slash.
480 var files = {".packages": "foo:packages/foo/", 489 var files = {".packages": "foo:packages/foo/",
481 "packages": {}, 490 "packages": {},
482 "pkgs": fooPackage}; 491 "pkgs": fooPackage};
483 addScheme("explicit package root, slash", "%$scheme/", 492 addScheme("explicit package root, slash", "%$scheme/",
484 files: files, 493 files: files,
485 root: "%$scheme/pkgs", 494 root: "%$scheme/pkgs",
486 expect: { 495 expect: {
487 "proot": "%$scheme/pkgs/", 496 "proot": "%$scheme/pkgs/",
488 "iroot": "%$scheme/pkgs/", 497 "iroot": "%$scheme/pkgs/",
489 "foo/": "%$scheme/pkgs/foo/", 498 "foo/": "%$scheme/pkgs/foo/",
490 "foo/bar": "%$scheme/pkgs/foo/bar", 499 "foo/bar": "%$scheme/pkgs/foo/bar",
500 "bar/bar": "%$scheme/pkgs/bar/bar",
491 }); 501 });
492 } 502 }
493 503
494 { 504 {
495 // Specified package config. 505 // Specified package config.
496 var files = {".packages": "foo:packages/foo/", 506 var files = {".packages": "foo:packages/foo/",
497 "packages": {}, 507 "packages": {},
498 ".pkgs": "foo:pkgs/foo/", 508 ".pkgs": "foo:pkgs/foo/",
499 "pkgs": fooPackage}; 509 "pkgs": fooPackage};
500 addScheme("explicit package config file", "%$scheme/", 510 addScheme("explicit package config file", "%$scheme/",
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
540 (entryScheme == "file" ? files : https)["main"] = testMain; 550 (entryScheme == "file" ? files : https)["main"] = testMain;
541 (pkgScheme == "file" ? files : https)["pkgs"] = fooPackage; 551 (pkgScheme == "file" ? files : https)["pkgs"] = fooPackage;
542 add("$pkgScheme pkg/$entryScheme main", "%$entryScheme/", 552 add("$pkgScheme pkg/$entryScheme main", "%$entryScheme/",
543 file: files, http: https, 553 file: files, http: https,
544 root: "%$pkgScheme/pkgs/", 554 root: "%$pkgScheme/pkgs/",
545 expect: { 555 expect: {
546 "proot": "%$pkgScheme/pkgs/", 556 "proot": "%$pkgScheme/pkgs/",
547 "iroot": "%$pkgScheme/pkgs/", 557 "iroot": "%$pkgScheme/pkgs/",
548 "foo/": "%$pkgScheme/pkgs/foo/", 558 "foo/": "%$pkgScheme/pkgs/foo/",
549 "foo/bar": "%$pkgScheme/pkgs/foo/bar", 559 "foo/bar": "%$pkgScheme/pkgs/foo/bar",
560 "bar/bar": "%$pkgScheme/pkgs/bar/bar",
550 "foo.x": "qux", 561 "foo.x": "qux",
551 }); 562 });
552 } 563 }
553 // Package config. The configuration file may also be on either source. 564 // Package config. The configuration file may also be on either source.
554 for (var configScheme in const ["file", "http"]) { 565 for (var configScheme in const ["file", "http"]) {
555 // Don't do the boring stuff! 566 // Don't do the boring stuff!
556 if (entryScheme == configScheme && entryScheme == pkgScheme) continue; 567 if (entryScheme == configScheme && entryScheme == pkgScheme) continue;
557 // Package config, packages and entry point not all on same scheme. 568 // Package config, packages and entry point not all on same scheme.
558 var files = {}; 569 var files = {};
559 var https = {}; 570 var https = {};
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
643 String platformRoot = await Platform.packageRoot; 654 String platformRoot = await Platform.packageRoot;
644 String platformConfig = await Platform.packageConfig; 655 String platformConfig = await Platform.packageConfig;
645 Directory cwd = Directory.current; 656 Directory cwd = Directory.current;
646 Uri script = Platform.script; 657 Uri script = Platform.script;
647 Uri isolateRoot = await Isolate.packageRoot; 658 Uri isolateRoot = await Isolate.packageRoot;
648 Uri isolateConfig = await Isolate.packageConfig; 659 Uri isolateConfig = await Isolate.packageConfig;
649 Uri base = Uri.base; 660 Uri base = Uri.base;
650 Uri res1 = await Isolate.resolvePackageUri(Uri.parse("package:foo")); 661 Uri res1 = await Isolate.resolvePackageUri(Uri.parse("package:foo"));
651 Uri res2 = await Isolate.resolvePackageUri(Uri.parse("package:foo/")); 662 Uri res2 = await Isolate.resolvePackageUri(Uri.parse("package:foo/"));
652 Uri res3 = await Isolate.resolvePackageUri(Uri.parse("package:foo/bar")); 663 Uri res3 = await Isolate.resolvePackageUri(Uri.parse("package:foo/bar"));
664 Uri res4 = await Isolate.resolvePackageUri(Uri.parse("package:bar/bar"));
665 Uri res5 = await Isolate.resolvePackageUri(Uri.parse("relative/path"));
666 Uri res6 = await Isolate.resolvePackageUri(
667 Uri.parse("http://example.org/file"));
653 String fooX = await foo 668 String fooX = await foo
654 .loadLibrary() 669 .loadLibrary()
655 .timeout(const Duration(seconds: 1)) 670 .timeout(const Duration(seconds: 1))
656 .then((_) => foo.x, onError: (_) => null); 671 .then((_) => foo.x, onError: (_) => null);
657 print(JSON.encode({ 672 print(JSON.encode({
658 "cwd": cwd.path, 673 "cwd": cwd.path,
659 "base": base?.toString(), 674 "base": base?.toString(),
660 "script": script?.toString(), 675 "script": script?.toString(),
661 "proot": platformRoot, 676 "proot": platformRoot,
662 "pconf": platformConfig, 677 "pconf": platformConfig,
663 "iroot" : isolateRoot?.toString(), 678 "iroot" : isolateRoot?.toString(),
664 "iconf" : isolateConfig?.toString(), 679 "iconf" : isolateConfig?.toString(),
665 "foo": res1?.toString(), 680 "foo": res1?.toString(),
666 "foo/": res2?.toString(), 681 "foo/": res2?.toString(),
667 "foo/bar": res3?.toString(), 682 "foo/bar": res3?.toString(),
668 "foo.x": fooX?.toString(), 683 "foo.x": fooX?.toString(),
684 "bar/bar": res4?.toString(),
685 "relative": res5?.toString(),
686 "nonpkg": res6?.toString(),
669 })); 687 }));
670 } 688 }
671 """; 689 """;
672 690
673 /// Script that spawns a new Isolate using Isolate.spawnUri. 691 /// Script that spawns a new Isolate using Isolate.spawnUri.
674 /// 692 ///
675 /// Takes URI of target isolate, package config, package root and 693 /// Takes URI of target isolate, package config, package root and
676 /// automatic package resolution-flag parameters as command line arguments. 694 /// automatic package resolution-flag parameters as command line arguments.
677 /// Any further arguments are forwarded to the spawned isolate. 695 /// Any further arguments are forwarded to the spawned isolate.
678 const String spawnUriMain = """ 696 const String spawnUriMain = """
(...skipping 287 matching lines...) Expand 10 before | Expand all | Expand 10 after
966 void insertFileAt(Map file, Map http, 984 void insertFileAt(Map file, Map http,
967 String path, String name, String content) { 985 String path, String name, String content) {
968 var parts = path.split('/').toList(); 986 var parts = path.split('/').toList();
969 var dir = (parts[0] == "%file") ? file : http; 987 var dir = (parts[0] == "%file") ? file : http;
970 for (var i = 1; i < parts.length - 1; i++) { 988 for (var i = 1; i < parts.length - 1; i++) {
971 var entry = parts[i]; 989 var entry = parts[i];
972 dir = dir[entry] ?? (dir[entry] = {}); 990 dir = dir[entry] ?? (dir[entry] = {});
973 } 991 }
974 dir[name] = content; 992 dir[name] = content;
975 } 993 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698