Chromium Code Reviews| 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 uriTest; | 5 library uriTest; |
| 6 | 6 |
| 7 import "package:expect/expect.dart"; | 7 import "package:expect/expect.dart"; |
| 8 import 'dart:convert'; | 8 import 'dart:convert'; |
| 9 | 9 |
| 10 testUri(String uriText, bool isAbsolute) { | 10 testUri(String uriText, bool isAbsolute) { |
| (...skipping 480 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 491 | 491 |
| 492 void testInvalidUrls() { | 492 void testInvalidUrls() { |
| 493 void checkInvalid(uri) { | 493 void checkInvalid(uri) { |
| 494 try { | 494 try { |
| 495 var result = Uri.parse(uri); | 495 var result = Uri.parse(uri); |
| 496 Expect.fail("Invalid URI `$uri` parsed to $result\n" + dump(result)); | 496 Expect.fail("Invalid URI `$uri` parsed to $result\n" + dump(result)); |
| 497 } on FormatException { | 497 } on FormatException { |
| 498 // Success. | 498 // Success. |
| 499 } | 499 } |
| 500 } | 500 } |
| 501 checkInvalid("s%41://x.x/"); // No escapes in scheme, | 501 checkInvalid("s%41://x.x/"); // No escapes in scheme, |
| 502 // and no colon before slash in path. | 502 // and no colon before slash in path. |
|
sra1
2017/03/21 01:43:47
??
Jacob
2017/03/21 02:25:35
Done.
| |
| 503 checkInvalid("1a://x.x/"); // Scheme must start with letter, | 503 checkInvalid("1a://x.x/"); // Scheme must start with letter, |
| 504 // and no colon before slash in path. | 504 // and no colon before slash in path. |
| 505 checkInvalid(".a://x.x/"); // Scheme must start with letter, | 505 checkInvalid(".a://x.x/"); // Scheme must start with letter, |
| 506 // and no colon before slash in path. | 506 // and no colon before slash in path. |
| 507 checkInvalid("_:"); // Character not valid in scheme, | 507 checkInvalid("_:"); // Character not valid in scheme, |
| 508 // and no colon before slash in path. | 508 // and no colon before slash in path. |
| 509 checkInvalid(":"); // Scheme must start with letter, | 509 checkInvalid(":"); // Scheme must start with letter, |
| 510 // and no colon before slash in path. | 510 // and no colon before slash in path. |
| 511 | 511 |
| 512 void checkInvalidReplaced(uri, invalid, replacement) { | 512 void checkInvalidReplaced(uri, invalid, replacement) { |
| 513 var source = uri.replaceAll('{}', invalid); | 513 var source = uri.replaceAll('{}', invalid); |
| 514 var expected = uri.replaceAll('{}', replacement); | 514 var expected = uri.replaceAll('{}', replacement); |
| 515 var result = Uri.parse(source); | 515 var result = Uri.parse(source); |
| 516 Expect.equals(expected, "$result", "Source: $source\n${dump(result)}"); | 516 Expect.equals(expected, "$result", "Source: $source\n${dump(result)}"); |
| 517 } | 517 } |
| 518 | 518 |
| 519 // Regression test for http://dartbug.com/16081 | 519 // Regression test for http://dartbug.com/16081 |
| 520 checkInvalidReplaced("http://www.example.org/red%09ros{}#red)", | 520 checkInvalidReplaced("http://www.example.org/red%09ros{}#red)", |
| 521 "\u00e9", "%C3%A9"); | 521 "\u00e9", "%C3%A9"); |
| 522 checkInvalidReplaced("http://r{}sum\{}.example.org", "\u00E9", "%C3%A9"); | 522 checkInvalidReplaced("http://r{}sum\{}.example.org", "\u00E9", "%C3%A9"); |
| 523 | 523 |
| 524 // Invalid characters. The characters must be rejected, even if normalizing | 524 // Invalid characters. The characters must be rejected, even if normalizing |
| 525 // the input would cause them to be valid (normalization happens after | 525 // the input would cause them to be valid (normalization happens after |
| 526 // validation). | 526 // validation). |
| 527 var invalidCharsAndReplacements = [ | 527 var invalidCharsAndReplacements = [ |
| 528 "\xe7", "%C3%A7", // Arbitrary non-ASCII letter | 528 "\xe7", "%C3%A7", // Arbitrary non-ASCII letter |
| 529 " ", "%20", // Space, not allowed anywhere. | 529 " ", "%20", // Space, not allowed anywhere. |
| 530 '"', "%22", // Quote, not allowed anywhere | 530 '"', "%22", // Quote, not allowed anywhere |
| 531 "<>", "%3C%3E", // Less/greater-than, not allowed anywhere. | 531 "<>", "%3C%3E", // Less/greater-than, not allowed anywhere. |
| 532 "\x7f", "%7F", // DEL, not allowed anywhere | 532 "\x7f", "%7F", // DEL, not allowed anywhere |
| 533 "\xdf", "%C3%9F", // German lower-case scharf-S. | 533 "\xdf", "%C3%9F", // German lower-case scharf-S. |
| 534 // Becomes ASCII when upper-cased. | 534 // Becomes ASCII when upper-cased. |
| 535 "\u0130", "%C4%B0", // Latin capital dotted I, | 535 "\u0130", "%C4%B0", // Latin capital dotted I, |
| 536 // becomes ASCII lower-case in Turkish. | 536 // becomes ASCII lower-case in Turkish. |
| 537 "%\uFB03", "%25%EF%AC%83", // % + Ligature ffi, | 537 "%\uFB03", "%25%EF%AC%83", // % + Ligature ffi, |
| 538 // becomes ASCII when upper-cased, | 538 // becomes ASCII when upper-cased, |
| 539 // should not be read as "%FFI". | 539 // should not be read as "%FFI". |
| 540 "\u212a", "%E2%84%AA", // Kelvin sign. Becomes ASCII when lower-cased. | 540 "\u212a", "%E2%84%AA", // Kelvin sign. Becomes ASCII when lower-cased. |
| 541 "%1g", "%251g", // Invalid escape. | 541 "%1g", "%251g", // Invalid escape. |
| 542 "\u{10000}", "%F0%90%80%80", // Non-BMP character as surrogate pair. | 542 "\u{10000}", "%F0%90%80%80", // Non-BMP character as surrogate pair. |
| 543 ]; | 543 ]; |
| 544 for (int i = 0; i < invalidCharsAndReplacements.length; i += 2) { | 544 for (int i = 0; i < invalidCharsAndReplacements.length; i += 2) { |
| 545 var invalid = invalidCharsAndReplacements[i]; | 545 var invalid = invalidCharsAndReplacements[i]; |
| 546 var valid = invalidCharsAndReplacements[i + 1]; | 546 var valid = invalidCharsAndReplacements[i + 1]; |
| 547 checkInvalid("A{}b:///".replaceAll('{}', invalid)); | 547 checkInvalid("A{}b:///".replaceAll('{}', invalid)); |
| 548 checkInvalid("{}b:///".replaceAll('{}', invalid)); | 548 checkInvalid("{}b:///".replaceAll('{}', invalid)); |
| 549 checkInvalidReplaced("s://user{}info@x.x/", invalid, valid); | 549 checkInvalidReplaced("s://user{}info@x.x/", invalid, valid); |
| 550 checkInvalidReplaced("s://reg{}name/", invalid, valid); | 550 checkInvalidReplaced("s://reg{}name/", invalid, valid); |
| 551 checkInvalid("s://regname:12{}45/".replaceAll("{}", invalid)); | 551 checkInvalid("s://regname:12{}45/".replaceAll("{}", invalid)); |
| (...skipping 410 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 962 String dump(Uri uri) { | 962 String dump(Uri uri) { |
| 963 return "URI: $uri\n" | 963 return "URI: $uri\n" |
| 964 " Scheme: ${uri.scheme} #${uri.scheme.length}\n" | 964 " Scheme: ${uri.scheme} #${uri.scheme.length}\n" |
| 965 " User-info: ${uri.userInfo} #${uri.userInfo.length}\n" | 965 " User-info: ${uri.userInfo} #${uri.userInfo.length}\n" |
| 966 " Host: ${uri.host} #${uri.host.length}\n" | 966 " Host: ${uri.host} #${uri.host.length}\n" |
| 967 " Port: ${uri.port}\n" | 967 " Port: ${uri.port}\n" |
| 968 " Path: ${uri.path} #${uri.path.length}\n" | 968 " Path: ${uri.path} #${uri.path.length}\n" |
| 969 " Query: ${uri.query} #${uri.query.length}\n" | 969 " Query: ${uri.query} #${uri.query.length}\n" |
| 970 " Fragment: ${uri.fragment} #${uri.fragment.length}\n"; | 970 " Fragment: ${uri.fragment} #${uri.fragment.length}\n"; |
| 971 } | 971 } |
| OLD | NEW |