urltestdata.json (192970B)
1 [ 2 "This file is based on testing/web-platform/tests/url/resources/urltestdata.json (with failing tests removed)", 3 { 4 "input": "http://example\t.\norg", 5 "base": "http://example.org/foo/bar", 6 "href": "http://example.org/", 7 "origin": "http://example.org", 8 "protocol": "http:", 9 "username": "", 10 "password": "", 11 "host": "example.org", 12 "hostname": "example.org", 13 "port": "", 14 "pathname": "/", 15 "search": "", 16 "hash": "" 17 }, 18 { 19 "input": "http://user:pass@foo:21/bar;par?b#c", 20 "base": "http://example.org/foo/bar", 21 "href": "http://user:pass@foo:21/bar;par?b#c", 22 "origin": "http://foo:21", 23 "protocol": "http:", 24 "username": "user", 25 "password": "pass", 26 "host": "foo:21", 27 "hostname": "foo", 28 "port": "21", 29 "pathname": "/bar;par", 30 "search": "?b", 31 "hash": "#c" 32 }, 33 { 34 "input": "https://test:@test", 35 "base": null, 36 "href": "https://test@test/", 37 "origin": "https://test", 38 "protocol": "https:", 39 "username": "test", 40 "password": "", 41 "host": "test", 42 "hostname": "test", 43 "port": "", 44 "pathname": "/", 45 "search": "", 46 "hash": "" 47 }, 48 { 49 "input": "https://:@test", 50 "base": null, 51 "href": "https://test/", 52 "origin": "https://test", 53 "protocol": "https:", 54 "username": "", 55 "password": "", 56 "host": "test", 57 "hostname": "test", 58 "port": "", 59 "pathname": "/", 60 "search": "", 61 "hash": "" 62 }, 63 { 64 "input": "non-special://test:@test/x", 65 "base": null, 66 "href": "non-special://test@test/x", 67 "origin": "null", 68 "protocol": "non-special:", 69 "username": "test", 70 "password": "", 71 "host": "test", 72 "hostname": "test", 73 "port": "", 74 "pathname": "/x", 75 "search": "", 76 "hash": "" 77 }, 78 { 79 "input": "non-special://:@test/x", 80 "base": null, 81 "href": "non-special://test/x", 82 "origin": "null", 83 "protocol": "non-special:", 84 "username": "", 85 "password": "", 86 "host": "test", 87 "hostname": "test", 88 "port": "", 89 "pathname": "/x", 90 "search": "", 91 "hash": "" 92 }, 93 { 94 "input": "http:foo.com", 95 "base": "http://example.org/foo/bar", 96 "href": "http://example.org/foo/foo.com", 97 "origin": "http://example.org", 98 "protocol": "http:", 99 "username": "", 100 "password": "", 101 "host": "example.org", 102 "hostname": "example.org", 103 "port": "", 104 "pathname": "/foo/foo.com", 105 "search": "", 106 "hash": "" 107 }, 108 { 109 "input": "\t :foo.com \n", 110 "base": "http://example.org/foo/bar", 111 "href": "http://example.org/foo/:foo.com", 112 "origin": "http://example.org", 113 "protocol": "http:", 114 "username": "", 115 "password": "", 116 "host": "example.org", 117 "hostname": "example.org", 118 "port": "", 119 "pathname": "/foo/:foo.com", 120 "search": "", 121 "hash": "" 122 }, 123 { 124 "input": " foo.com ", 125 "base": "http://example.org/foo/bar", 126 "href": "http://example.org/foo/foo.com", 127 "origin": "http://example.org", 128 "protocol": "http:", 129 "username": "", 130 "password": "", 131 "host": "example.org", 132 "hostname": "example.org", 133 "port": "", 134 "pathname": "/foo/foo.com", 135 "search": "", 136 "hash": "" 137 }, 138 { 139 "input": "a:\t foo.com", 140 "base": "http://example.org/foo/bar", 141 "href": "a: foo.com", 142 "origin": "null", 143 "protocol": "a:", 144 "username": "", 145 "password": "", 146 "host": "", 147 "hostname": "", 148 "port": "", 149 "pathname": " foo.com", 150 "search": "", 151 "hash": "" 152 }, 153 { 154 "input": "http://f:21/ b ? d # e ", 155 "base": "http://example.org/foo/bar", 156 "href": "http://f:21/%20b%20?%20d%20#%20e", 157 "origin": "http://f:21", 158 "protocol": "http:", 159 "username": "", 160 "password": "", 161 "host": "f:21", 162 "hostname": "f", 163 "port": "21", 164 "pathname": "/%20b%20", 165 "search": "?%20d%20", 166 "hash": "#%20e" 167 }, 168 { 169 "input": "lolscheme:x x#x x", 170 "base": null, 171 "href": "lolscheme:x x#x%20x", 172 "protocol": "lolscheme:", 173 "username": "", 174 "password": "", 175 "host": "", 176 "hostname": "", 177 "port": "", 178 "pathname": "x x", 179 "search": "", 180 "hash": "#x%20x" 181 }, 182 { 183 "input": "http://f:/c", 184 "base": "http://example.org/foo/bar", 185 "href": "http://f/c", 186 "origin": "http://f", 187 "protocol": "http:", 188 "username": "", 189 "password": "", 190 "host": "f", 191 "hostname": "f", 192 "port": "", 193 "pathname": "/c", 194 "search": "", 195 "hash": "" 196 }, 197 { 198 "input": "http://f:0/c", 199 "base": "http://example.org/foo/bar", 200 "href": "http://f:0/c", 201 "origin": "http://f:0", 202 "protocol": "http:", 203 "username": "", 204 "password": "", 205 "host": "f:0", 206 "hostname": "f", 207 "port": "0", 208 "pathname": "/c", 209 "search": "", 210 "hash": "" 211 }, 212 { 213 "input": "http://f:00000000000000/c", 214 "base": "http://example.org/foo/bar", 215 "href": "http://f:0/c", 216 "origin": "http://f:0", 217 "protocol": "http:", 218 "username": "", 219 "password": "", 220 "host": "f:0", 221 "hostname": "f", 222 "port": "0", 223 "pathname": "/c", 224 "search": "", 225 "hash": "" 226 }, 227 { 228 "input": "http://f:00000000000000000000080/c", 229 "base": "http://example.org/foo/bar", 230 "href": "http://f/c", 231 "origin": "http://f", 232 "protocol": "http:", 233 "username": "", 234 "password": "", 235 "host": "f", 236 "hostname": "f", 237 "port": "", 238 "pathname": "/c", 239 "search": "", 240 "hash": "" 241 }, 242 { 243 "input": "http://f:b/c", 244 "base": "http://example.org/foo/bar", 245 "failure": true 246 }, 247 { 248 "input": "http://f: /c", 249 "base": "http://example.org/foo/bar", 250 "failure": true 251 }, 252 { 253 "input": "http://f:\n/c", 254 "base": "http://example.org/foo/bar", 255 "href": "http://f/c", 256 "origin": "http://f", 257 "protocol": "http:", 258 "username": "", 259 "password": "", 260 "host": "f", 261 "hostname": "f", 262 "port": "", 263 "pathname": "/c", 264 "search": "", 265 "hash": "" 266 }, 267 { 268 "input": "http://f:fifty-two/c", 269 "base": "http://example.org/foo/bar", 270 "failure": true 271 }, 272 { 273 "input": "http://f:999999/c", 274 "base": "http://example.org/foo/bar", 275 "failure": true 276 }, 277 { 278 "input": "non-special://f:999999/c", 279 "base": "http://example.org/foo/bar", 280 "failure": true 281 }, 282 { 283 "input": "http://f: 21 / b ? d # e ", 284 "base": "http://example.org/foo/bar", 285 "failure": true 286 }, 287 { 288 "input": "", 289 "base": "http://example.org/foo/bar", 290 "href": "http://example.org/foo/bar", 291 "origin": "http://example.org", 292 "protocol": "http:", 293 "username": "", 294 "password": "", 295 "host": "example.org", 296 "hostname": "example.org", 297 "port": "", 298 "pathname": "/foo/bar", 299 "search": "", 300 "hash": "" 301 }, 302 { 303 "input": " \t", 304 "base": "http://example.org/foo/bar", 305 "href": "http://example.org/foo/bar", 306 "origin": "http://example.org", 307 "protocol": "http:", 308 "username": "", 309 "password": "", 310 "host": "example.org", 311 "hostname": "example.org", 312 "port": "", 313 "pathname": "/foo/bar", 314 "search": "", 315 "hash": "" 316 }, 317 { 318 "input": ":foo.com/", 319 "base": "http://example.org/foo/bar", 320 "href": "http://example.org/foo/:foo.com/", 321 "origin": "http://example.org", 322 "protocol": "http:", 323 "username": "", 324 "password": "", 325 "host": "example.org", 326 "hostname": "example.org", 327 "port": "", 328 "pathname": "/foo/:foo.com/", 329 "search": "", 330 "hash": "" 331 }, 332 { 333 "input": ":foo.com\\", 334 "base": "http://example.org/foo/bar", 335 "href": "http://example.org/foo/:foo.com/", 336 "origin": "http://example.org", 337 "protocol": "http:", 338 "username": "", 339 "password": "", 340 "host": "example.org", 341 "hostname": "example.org", 342 "port": "", 343 "pathname": "/foo/:foo.com/", 344 "search": "", 345 "hash": "" 346 }, 347 { 348 "input": ":", 349 "base": "http://example.org/foo/bar", 350 "href": "http://example.org/foo/:", 351 "origin": "http://example.org", 352 "protocol": "http:", 353 "username": "", 354 "password": "", 355 "host": "example.org", 356 "hostname": "example.org", 357 "port": "", 358 "pathname": "/foo/:", 359 "search": "", 360 "hash": "" 361 }, 362 { 363 "input": ":a", 364 "base": "http://example.org/foo/bar", 365 "href": "http://example.org/foo/:a", 366 "origin": "http://example.org", 367 "protocol": "http:", 368 "username": "", 369 "password": "", 370 "host": "example.org", 371 "hostname": "example.org", 372 "port": "", 373 "pathname": "/foo/:a", 374 "search": "", 375 "hash": "" 376 }, 377 { 378 "input": ":/", 379 "base": "http://example.org/foo/bar", 380 "href": "http://example.org/foo/:/", 381 "origin": "http://example.org", 382 "protocol": "http:", 383 "username": "", 384 "password": "", 385 "host": "example.org", 386 "hostname": "example.org", 387 "port": "", 388 "pathname": "/foo/:/", 389 "search": "", 390 "hash": "" 391 }, 392 { 393 "input": ":\\", 394 "base": "http://example.org/foo/bar", 395 "href": "http://example.org/foo/:/", 396 "origin": "http://example.org", 397 "protocol": "http:", 398 "username": "", 399 "password": "", 400 "host": "example.org", 401 "hostname": "example.org", 402 "port": "", 403 "pathname": "/foo/:/", 404 "search": "", 405 "hash": "" 406 }, 407 { 408 "input": ":#", 409 "base": "http://example.org/foo/bar", 410 "href": "http://example.org/foo/:#", 411 "origin": "http://example.org", 412 "protocol": "http:", 413 "username": "", 414 "password": "", 415 "host": "example.org", 416 "hostname": "example.org", 417 "port": "", 418 "pathname": "/foo/:", 419 "search": "", 420 "hash": "" 421 }, 422 { 423 "input": "#", 424 "base": "http://example.org/foo/bar", 425 "href": "http://example.org/foo/bar#", 426 "origin": "http://example.org", 427 "protocol": "http:", 428 "username": "", 429 "password": "", 430 "host": "example.org", 431 "hostname": "example.org", 432 "port": "", 433 "pathname": "/foo/bar", 434 "search": "", 435 "hash": "" 436 }, 437 { 438 "input": "#/", 439 "base": "http://example.org/foo/bar", 440 "href": "http://example.org/foo/bar#/", 441 "origin": "http://example.org", 442 "protocol": "http:", 443 "username": "", 444 "password": "", 445 "host": "example.org", 446 "hostname": "example.org", 447 "port": "", 448 "pathname": "/foo/bar", 449 "search": "", 450 "hash": "#/" 451 }, 452 { 453 "input": "#\\", 454 "base": "http://example.org/foo/bar", 455 "href": "http://example.org/foo/bar#\\", 456 "origin": "http://example.org", 457 "protocol": "http:", 458 "username": "", 459 "password": "", 460 "host": "example.org", 461 "hostname": "example.org", 462 "port": "", 463 "pathname": "/foo/bar", 464 "search": "", 465 "hash": "#\\" 466 }, 467 { 468 "input": "#;?", 469 "base": "http://example.org/foo/bar", 470 "href": "http://example.org/foo/bar#;?", 471 "origin": "http://example.org", 472 "protocol": "http:", 473 "username": "", 474 "password": "", 475 "host": "example.org", 476 "hostname": "example.org", 477 "port": "", 478 "pathname": "/foo/bar", 479 "search": "", 480 "hash": "#;?" 481 }, 482 { 483 "input": "?", 484 "base": "http://example.org/foo/bar", 485 "href": "http://example.org/foo/bar?", 486 "origin": "http://example.org", 487 "protocol": "http:", 488 "username": "", 489 "password": "", 490 "host": "example.org", 491 "hostname": "example.org", 492 "port": "", 493 "pathname": "/foo/bar", 494 "search": "", 495 "hash": "" 496 }, 497 { 498 "input": "/", 499 "base": "http://example.org/foo/bar", 500 "href": "http://example.org/", 501 "origin": "http://example.org", 502 "protocol": "http:", 503 "username": "", 504 "password": "", 505 "host": "example.org", 506 "hostname": "example.org", 507 "port": "", 508 "pathname": "/", 509 "search": "", 510 "hash": "" 511 }, 512 { 513 "input": ":23", 514 "base": "http://example.org/foo/bar", 515 "href": "http://example.org/foo/:23", 516 "origin": "http://example.org", 517 "protocol": "http:", 518 "username": "", 519 "password": "", 520 "host": "example.org", 521 "hostname": "example.org", 522 "port": "", 523 "pathname": "/foo/:23", 524 "search": "", 525 "hash": "" 526 }, 527 { 528 "input": "/:23", 529 "base": "http://example.org/foo/bar", 530 "href": "http://example.org/:23", 531 "origin": "http://example.org", 532 "protocol": "http:", 533 "username": "", 534 "password": "", 535 "host": "example.org", 536 "hostname": "example.org", 537 "port": "", 538 "pathname": "/:23", 539 "search": "", 540 "hash": "" 541 }, 542 { 543 "input": "\\x", 544 "base": "http://example.org/foo/bar", 545 "href": "http://example.org/x", 546 "origin": "http://example.org", 547 "protocol": "http:", 548 "username": "", 549 "password": "", 550 "host": "example.org", 551 "hostname": "example.org", 552 "port": "", 553 "pathname": "/x", 554 "search": "", 555 "hash": "" 556 }, 557 { 558 "input": "\\\\x\\hello", 559 "base": "http://example.org/foo/bar", 560 "href": "http://x/hello", 561 "origin": "http://x", 562 "protocol": "http:", 563 "username": "", 564 "password": "", 565 "host": "x", 566 "hostname": "x", 567 "port": "", 568 "pathname": "/hello", 569 "search": "", 570 "hash": "" 571 }, 572 { 573 "input": "::", 574 "base": "http://example.org/foo/bar", 575 "href": "http://example.org/foo/::", 576 "origin": "http://example.org", 577 "protocol": "http:", 578 "username": "", 579 "password": "", 580 "host": "example.org", 581 "hostname": "example.org", 582 "port": "", 583 "pathname": "/foo/::", 584 "search": "", 585 "hash": "" 586 }, 587 { 588 "input": "::23", 589 "base": "http://example.org/foo/bar", 590 "href": "http://example.org/foo/::23", 591 "origin": "http://example.org", 592 "protocol": "http:", 593 "username": "", 594 "password": "", 595 "host": "example.org", 596 "hostname": "example.org", 597 "port": "", 598 "pathname": "/foo/::23", 599 "search": "", 600 "hash": "" 601 }, 602 { 603 "input": "foo://", 604 "base": "http://example.org/foo/bar", 605 "href": "foo://", 606 "origin": "null", 607 "protocol": "foo:", 608 "username": "", 609 "password": "", 610 "host": "", 611 "hostname": "", 612 "port": "", 613 "pathname": "", 614 "search": "", 615 "hash": "" 616 }, 617 { 618 "input": "http://a:b@c:29/d", 619 "base": "http://example.org/foo/bar", 620 "href": "http://a:b@c:29/d", 621 "origin": "http://c:29", 622 "protocol": "http:", 623 "username": "a", 624 "password": "b", 625 "host": "c:29", 626 "hostname": "c", 627 "port": "29", 628 "pathname": "/d", 629 "search": "", 630 "hash": "" 631 }, 632 { 633 "input": "http::@c:29", 634 "base": "http://example.org/foo/bar", 635 "href": "http://example.org/foo/:@c:29", 636 "origin": "http://example.org", 637 "protocol": "http:", 638 "username": "", 639 "password": "", 640 "host": "example.org", 641 "hostname": "example.org", 642 "port": "", 643 "pathname": "/foo/:@c:29", 644 "search": "", 645 "hash": "" 646 }, 647 { 648 "input": "http://&a:foo(b]c@d:2/", 649 "base": "http://example.org/foo/bar", 650 "href": "http://&a:foo(b%5Dc@d:2/", 651 "origin": "http://d:2", 652 "protocol": "http:", 653 "username": "&a", 654 "password": "foo(b%5Dc", 655 "host": "d:2", 656 "hostname": "d", 657 "port": "2", 658 "pathname": "/", 659 "search": "", 660 "hash": "" 661 }, 662 { 663 "input": "http://::@c@d:2", 664 "base": "http://example.org/foo/bar", 665 "href": "http://:%3A%40c@d:2/", 666 "origin": "http://d:2", 667 "protocol": "http:", 668 "username": "", 669 "password": "%3A%40c", 670 "host": "d:2", 671 "hostname": "d", 672 "port": "2", 673 "pathname": "/", 674 "search": "", 675 "hash": "" 676 }, 677 { 678 "input": "http://foo.com:b@d/", 679 "base": "http://example.org/foo/bar", 680 "href": "http://foo.com:b@d/", 681 "origin": "http://d", 682 "protocol": "http:", 683 "username": "foo.com", 684 "password": "b", 685 "host": "d", 686 "hostname": "d", 687 "port": "", 688 "pathname": "/", 689 "search": "", 690 "hash": "" 691 }, 692 { 693 "input": "http://foo.com/\\@", 694 "base": "http://example.org/foo/bar", 695 "href": "http://foo.com//@", 696 "origin": "http://foo.com", 697 "protocol": "http:", 698 "username": "", 699 "password": "", 700 "host": "foo.com", 701 "hostname": "foo.com", 702 "port": "", 703 "pathname": "//@", 704 "search": "", 705 "hash": "" 706 }, 707 { 708 "input": "http:\\\\foo.com\\", 709 "base": "http://example.org/foo/bar", 710 "href": "http://foo.com/", 711 "origin": "http://foo.com", 712 "protocol": "http:", 713 "username": "", 714 "password": "", 715 "host": "foo.com", 716 "hostname": "foo.com", 717 "port": "", 718 "pathname": "/", 719 "search": "", 720 "hash": "" 721 }, 722 { 723 "input": "http:\\\\a\\b:c\\d@foo.com\\", 724 "base": "http://example.org/foo/bar", 725 "href": "http://a/b:c/d@foo.com/", 726 "origin": "http://a", 727 "protocol": "http:", 728 "username": "", 729 "password": "", 730 "host": "a", 731 "hostname": "a", 732 "port": "", 733 "pathname": "/b:c/d@foo.com/", 734 "search": "", 735 "hash": "" 736 }, 737 { 738 "input": "foo:/", 739 "base": "http://example.org/foo/bar", 740 "href": "foo:/", 741 "origin": "null", 742 "protocol": "foo:", 743 "username": "", 744 "password": "", 745 "host": "", 746 "hostname": "", 747 "port": "", 748 "pathname": "/", 749 "search": "", 750 "hash": "" 751 }, 752 { 753 "input": "foo:/bar.com/", 754 "base": "http://example.org/foo/bar", 755 "href": "foo:/bar.com/", 756 "origin": "null", 757 "protocol": "foo:", 758 "username": "", 759 "password": "", 760 "host": "", 761 "hostname": "", 762 "port": "", 763 "pathname": "/bar.com/", 764 "search": "", 765 "hash": "" 766 }, 767 { 768 "input": "foo://///////", 769 "base": "http://example.org/foo/bar", 770 "href": "foo://///////", 771 "origin": "null", 772 "protocol": "foo:", 773 "username": "", 774 "password": "", 775 "host": "", 776 "hostname": "", 777 "port": "", 778 "pathname": "///////", 779 "search": "", 780 "hash": "" 781 }, 782 { 783 "input": "foo://///////bar.com/", 784 "base": "http://example.org/foo/bar", 785 "href": "foo://///////bar.com/", 786 "origin": "null", 787 "protocol": "foo:", 788 "username": "", 789 "password": "", 790 "host": "", 791 "hostname": "", 792 "port": "", 793 "pathname": "///////bar.com/", 794 "search": "", 795 "hash": "" 796 }, 797 { 798 "input": "foo:////://///", 799 "base": "http://example.org/foo/bar", 800 "href": "foo:////://///", 801 "origin": "null", 802 "protocol": "foo:", 803 "username": "", 804 "password": "", 805 "host": "", 806 "hostname": "", 807 "port": "", 808 "pathname": "//://///", 809 "search": "", 810 "hash": "" 811 }, 812 { 813 "input": "c:/foo", 814 "base": "http://example.org/foo/bar", 815 "href": "c:/foo", 816 "origin": "null", 817 "protocol": "c:", 818 "username": "", 819 "password": "", 820 "host": "", 821 "hostname": "", 822 "port": "", 823 "pathname": "/foo", 824 "search": "", 825 "hash": "" 826 }, 827 { 828 "input": "//foo/bar", 829 "base": "http://example.org/foo/bar", 830 "href": "http://foo/bar", 831 "origin": "http://foo", 832 "protocol": "http:", 833 "username": "", 834 "password": "", 835 "host": "foo", 836 "hostname": "foo", 837 "port": "", 838 "pathname": "/bar", 839 "search": "", 840 "hash": "" 841 }, 842 { 843 "input": "http://foo/path;a??e#f#g", 844 "base": "http://example.org/foo/bar", 845 "href": "http://foo/path;a??e#f#g", 846 "origin": "http://foo", 847 "protocol": "http:", 848 "username": "", 849 "password": "", 850 "host": "foo", 851 "hostname": "foo", 852 "port": "", 853 "pathname": "/path;a", 854 "search": "??e", 855 "hash": "#f#g" 856 }, 857 { 858 "input": "http://foo/abcd?efgh?ijkl", 859 "base": "http://example.org/foo/bar", 860 "href": "http://foo/abcd?efgh?ijkl", 861 "origin": "http://foo", 862 "protocol": "http:", 863 "username": "", 864 "password": "", 865 "host": "foo", 866 "hostname": "foo", 867 "port": "", 868 "pathname": "/abcd", 869 "search": "?efgh?ijkl", 870 "hash": "" 871 }, 872 { 873 "input": "http://foo/abcd#foo?bar", 874 "base": "http://example.org/foo/bar", 875 "href": "http://foo/abcd#foo?bar", 876 "origin": "http://foo", 877 "protocol": "http:", 878 "username": "", 879 "password": "", 880 "host": "foo", 881 "hostname": "foo", 882 "port": "", 883 "pathname": "/abcd", 884 "search": "", 885 "hash": "#foo?bar" 886 }, 887 { 888 "input": "[61:24:74]:98", 889 "base": "http://example.org/foo/bar", 890 "href": "http://example.org/foo/[61:24:74]:98", 891 "origin": "http://example.org", 892 "protocol": "http:", 893 "username": "", 894 "password": "", 895 "host": "example.org", 896 "hostname": "example.org", 897 "port": "", 898 "pathname": "/foo/[61:24:74]:98", 899 "search": "", 900 "hash": "" 901 }, 902 { 903 "input": "http:[61:27]/:foo", 904 "base": "http://example.org/foo/bar", 905 "href": "http://example.org/foo/[61:27]/:foo", 906 "origin": "http://example.org", 907 "protocol": "http:", 908 "username": "", 909 "password": "", 910 "host": "example.org", 911 "hostname": "example.org", 912 "port": "", 913 "pathname": "/foo/[61:27]/:foo", 914 "search": "", 915 "hash": "" 916 }, 917 { 918 "input": "http://[1::2]:3:4", 919 "base": "http://example.org/foo/bar", 920 "failure": true 921 }, 922 { 923 "input": "http://2001::1", 924 "base": "http://example.org/foo/bar", 925 "failure": true 926 }, 927 { 928 "input": "http://2001::1]", 929 "base": "http://example.org/foo/bar", 930 "failure": true 931 }, 932 { 933 "input": "http://2001::1]:80", 934 "base": "http://example.org/foo/bar", 935 "failure": true 936 }, 937 { 938 "input": "http://[2001::1]", 939 "base": "http://example.org/foo/bar", 940 "href": "http://[2001::1]/", 941 "origin": "http://[2001::1]", 942 "protocol": "http:", 943 "username": "", 944 "password": "", 945 "host": "[2001::1]", 946 "hostname": "[2001::1]", 947 "port": "", 948 "pathname": "/", 949 "search": "", 950 "hash": "" 951 }, 952 { 953 "input": "http://[::127.0.0.1]", 954 "base": "http://example.org/foo/bar", 955 "href": "http://[::7f00:1]/", 956 "origin": "http://[::7f00:1]", 957 "protocol": "http:", 958 "username": "", 959 "password": "", 960 "host": "[::7f00:1]", 961 "hostname": "[::7f00:1]", 962 "port": "", 963 "pathname": "/", 964 "search": "", 965 "hash": "" 966 }, 967 { 968 "input": "http://[::127.0.0.1.]", 969 "base": "http://example.org/foo/bar", 970 "failure": true 971 }, 972 { 973 "input": "http://[0:0:0:0:0:0:13.1.68.3]", 974 "base": "http://example.org/foo/bar", 975 "href": "http://[::d01:4403]/", 976 "origin": "http://[::d01:4403]", 977 "protocol": "http:", 978 "username": "", 979 "password": "", 980 "host": "[::d01:4403]", 981 "hostname": "[::d01:4403]", 982 "port": "", 983 "pathname": "/", 984 "search": "", 985 "hash": "" 986 }, 987 { 988 "input": "http://[2001::1]:80", 989 "base": "http://example.org/foo/bar", 990 "href": "http://[2001::1]/", 991 "origin": "http://[2001::1]", 992 "protocol": "http:", 993 "username": "", 994 "password": "", 995 "host": "[2001::1]", 996 "hostname": "[2001::1]", 997 "port": "", 998 "pathname": "/", 999 "search": "", 1000 "hash": "" 1001 }, 1002 { 1003 "input": "http:/example.com/", 1004 "base": "http://example.org/foo/bar", 1005 "href": "http://example.org/example.com/", 1006 "origin": "http://example.org", 1007 "protocol": "http:", 1008 "username": "", 1009 "password": "", 1010 "host": "example.org", 1011 "hostname": "example.org", 1012 "port": "", 1013 "pathname": "/example.com/", 1014 "search": "", 1015 "hash": "" 1016 }, 1017 { 1018 "input": "ftp:/example.com/", 1019 "base": "http://example.org/foo/bar", 1020 "href": "ftp://example.com/", 1021 "origin": "ftp://example.com", 1022 "protocol": "ftp:", 1023 "username": "", 1024 "password": "", 1025 "host": "example.com", 1026 "hostname": "example.com", 1027 "port": "", 1028 "pathname": "/", 1029 "search": "", 1030 "hash": "" 1031 }, 1032 { 1033 "input": "https:/example.com/", 1034 "base": "http://example.org/foo/bar", 1035 "href": "https://example.com/", 1036 "origin": "https://example.com", 1037 "protocol": "https:", 1038 "username": "", 1039 "password": "", 1040 "host": "example.com", 1041 "hostname": "example.com", 1042 "port": "", 1043 "pathname": "/", 1044 "search": "", 1045 "hash": "" 1046 }, 1047 { 1048 "input": "madeupscheme:/example.com/", 1049 "base": "http://example.org/foo/bar", 1050 "href": "madeupscheme:/example.com/", 1051 "origin": "null", 1052 "protocol": "madeupscheme:", 1053 "username": "", 1054 "password": "", 1055 "host": "", 1056 "hostname": "", 1057 "port": "", 1058 "pathname": "/example.com/", 1059 "search": "", 1060 "hash": "" 1061 }, 1062 { 1063 "input": "file:/example.com/", 1064 "base": "http://example.org/foo/bar", 1065 "href": "file:///example.com/", 1066 "protocol": "file:", 1067 "username": "", 1068 "password": "", 1069 "host": "", 1070 "hostname": "", 1071 "port": "", 1072 "pathname": "/example.com/", 1073 "search": "", 1074 "hash": "" 1075 }, 1076 { 1077 "input": "file://example:1/", 1078 "base": null, 1079 "failure": true 1080 }, 1081 { 1082 "input": "file://example:test/", 1083 "base": null, 1084 "failure": true 1085 }, 1086 { 1087 "input": "file://example%/", 1088 "base": null, 1089 "failure": true 1090 }, 1091 { 1092 "input": "file://[example]/", 1093 "base": null, 1094 "failure": true 1095 }, 1096 { 1097 "input": "ftps:/example.com/", 1098 "base": "http://example.org/foo/bar", 1099 "href": "ftps:/example.com/", 1100 "origin": "null", 1101 "protocol": "ftps:", 1102 "username": "", 1103 "password": "", 1104 "host": "", 1105 "hostname": "", 1106 "port": "", 1107 "pathname": "/example.com/", 1108 "search": "", 1109 "hash": "" 1110 }, 1111 { 1112 "input": "gopher:/example.com/", 1113 "base": "http://example.org/foo/bar", 1114 "href": "gopher:/example.com/", 1115 "origin": "null", 1116 "protocol": "gopher:", 1117 "username": "", 1118 "password": "", 1119 "host": "", 1120 "hostname": "", 1121 "port": "", 1122 "pathname": "/example.com/", 1123 "search": "", 1124 "hash": "" 1125 }, 1126 { 1127 "input": "ws:/example.com/", 1128 "base": "http://example.org/foo/bar", 1129 "href": "ws://example.com/", 1130 "origin": "ws://example.com", 1131 "protocol": "ws:", 1132 "username": "", 1133 "password": "", 1134 "host": "example.com", 1135 "hostname": "example.com", 1136 "port": "", 1137 "pathname": "/", 1138 "search": "", 1139 "hash": "" 1140 }, 1141 { 1142 "input": "wss:/example.com/", 1143 "base": "http://example.org/foo/bar", 1144 "href": "wss://example.com/", 1145 "origin": "wss://example.com", 1146 "protocol": "wss:", 1147 "username": "", 1148 "password": "", 1149 "host": "example.com", 1150 "hostname": "example.com", 1151 "port": "", 1152 "pathname": "/", 1153 "search": "", 1154 "hash": "" 1155 }, 1156 { 1157 "input": "data:/example.com/", 1158 "base": "http://example.org/foo/bar", 1159 "href": "data:/example.com/", 1160 "origin": "null", 1161 "protocol": "data:", 1162 "username": "", 1163 "password": "", 1164 "host": "", 1165 "hostname": "", 1166 "port": "", 1167 "pathname": "/example.com/", 1168 "search": "", 1169 "hash": "" 1170 }, 1171 { 1172 "input": "javascript:/example.com/", 1173 "base": "http://example.org/foo/bar", 1174 "href": "javascript:/example.com/", 1175 "origin": "null", 1176 "protocol": "javascript:", 1177 "username": "", 1178 "password": "", 1179 "host": "", 1180 "hostname": "", 1181 "port": "", 1182 "pathname": "/example.com/", 1183 "search": "", 1184 "hash": "" 1185 }, 1186 { 1187 "input": "mailto:/example.com/", 1188 "base": "http://example.org/foo/bar", 1189 "href": "mailto:/example.com/", 1190 "origin": "null", 1191 "protocol": "mailto:", 1192 "username": "", 1193 "password": "", 1194 "host": "", 1195 "hostname": "", 1196 "port": "", 1197 "pathname": "/example.com/", 1198 "search": "", 1199 "hash": "" 1200 }, 1201 { 1202 "input": "http:example.com/", 1203 "base": "http://example.org/foo/bar", 1204 "href": "http://example.org/foo/example.com/", 1205 "origin": "http://example.org", 1206 "protocol": "http:", 1207 "username": "", 1208 "password": "", 1209 "host": "example.org", 1210 "hostname": "example.org", 1211 "port": "", 1212 "pathname": "/foo/example.com/", 1213 "search": "", 1214 "hash": "" 1215 }, 1216 { 1217 "input": "ftp:example.com/", 1218 "base": "http://example.org/foo/bar", 1219 "href": "ftp://example.com/", 1220 "origin": "ftp://example.com", 1221 "protocol": "ftp:", 1222 "username": "", 1223 "password": "", 1224 "host": "example.com", 1225 "hostname": "example.com", 1226 "port": "", 1227 "pathname": "/", 1228 "search": "", 1229 "hash": "" 1230 }, 1231 { 1232 "input": "https:example.com/", 1233 "base": "http://example.org/foo/bar", 1234 "href": "https://example.com/", 1235 "origin": "https://example.com", 1236 "protocol": "https:", 1237 "username": "", 1238 "password": "", 1239 "host": "example.com", 1240 "hostname": "example.com", 1241 "port": "", 1242 "pathname": "/", 1243 "search": "", 1244 "hash": "" 1245 }, 1246 { 1247 "input": "madeupscheme:example.com/", 1248 "base": "http://example.org/foo/bar", 1249 "href": "madeupscheme:example.com/", 1250 "origin": "null", 1251 "protocol": "madeupscheme:", 1252 "username": "", 1253 "password": "", 1254 "host": "", 1255 "hostname": "", 1256 "port": "", 1257 "pathname": "example.com/", 1258 "search": "", 1259 "hash": "" 1260 }, 1261 { 1262 "input": "ftps:example.com/", 1263 "base": "http://example.org/foo/bar", 1264 "href": "ftps:example.com/", 1265 "origin": "null", 1266 "protocol": "ftps:", 1267 "username": "", 1268 "password": "", 1269 "host": "", 1270 "hostname": "", 1271 "port": "", 1272 "pathname": "example.com/", 1273 "search": "", 1274 "hash": "" 1275 }, 1276 { 1277 "input": "gopher:example.com/", 1278 "base": "http://example.org/foo/bar", 1279 "href": "gopher:example.com/", 1280 "origin": "null", 1281 "protocol": "gopher:", 1282 "username": "", 1283 "password": "", 1284 "host": "", 1285 "hostname": "", 1286 "port": "", 1287 "pathname": "example.com/", 1288 "search": "", 1289 "hash": "" 1290 }, 1291 { 1292 "input": "ws:example.com/", 1293 "base": "http://example.org/foo/bar", 1294 "href": "ws://example.com/", 1295 "origin": "ws://example.com", 1296 "protocol": "ws:", 1297 "username": "", 1298 "password": "", 1299 "host": "example.com", 1300 "hostname": "example.com", 1301 "port": "", 1302 "pathname": "/", 1303 "search": "", 1304 "hash": "" 1305 }, 1306 { 1307 "input": "wss:example.com/", 1308 "base": "http://example.org/foo/bar", 1309 "href": "wss://example.com/", 1310 "origin": "wss://example.com", 1311 "protocol": "wss:", 1312 "username": "", 1313 "password": "", 1314 "host": "example.com", 1315 "hostname": "example.com", 1316 "port": "", 1317 "pathname": "/", 1318 "search": "", 1319 "hash": "" 1320 }, 1321 { 1322 "input": "data:example.com/", 1323 "base": "http://example.org/foo/bar", 1324 "href": "data:example.com/", 1325 "origin": "null", 1326 "protocol": "data:", 1327 "username": "", 1328 "password": "", 1329 "host": "", 1330 "hostname": "", 1331 "port": "", 1332 "pathname": "example.com/", 1333 "search": "", 1334 "hash": "" 1335 }, 1336 { 1337 "input": "javascript:example.com/", 1338 "base": "http://example.org/foo/bar", 1339 "href": "javascript:example.com/", 1340 "origin": "null", 1341 "protocol": "javascript:", 1342 "username": "", 1343 "password": "", 1344 "host": "", 1345 "hostname": "", 1346 "port": "", 1347 "pathname": "example.com/", 1348 "search": "", 1349 "hash": "" 1350 }, 1351 { 1352 "input": "mailto:example.com/", 1353 "base": "http://example.org/foo/bar", 1354 "href": "mailto:example.com/", 1355 "origin": "null", 1356 "protocol": "mailto:", 1357 "username": "", 1358 "password": "", 1359 "host": "", 1360 "hostname": "", 1361 "port": "", 1362 "pathname": "example.com/", 1363 "search": "", 1364 "hash": "" 1365 }, 1366 { 1367 "input": "/a/b/c", 1368 "base": "http://example.org/foo/bar", 1369 "href": "http://example.org/a/b/c", 1370 "origin": "http://example.org", 1371 "protocol": "http:", 1372 "username": "", 1373 "password": "", 1374 "host": "example.org", 1375 "hostname": "example.org", 1376 "port": "", 1377 "pathname": "/a/b/c", 1378 "search": "", 1379 "hash": "" 1380 }, 1381 { 1382 "input": "/a/ /c", 1383 "base": "http://example.org/foo/bar", 1384 "href": "http://example.org/a/%20/c", 1385 "origin": "http://example.org", 1386 "protocol": "http:", 1387 "username": "", 1388 "password": "", 1389 "host": "example.org", 1390 "hostname": "example.org", 1391 "port": "", 1392 "pathname": "/a/%20/c", 1393 "search": "", 1394 "hash": "" 1395 }, 1396 { 1397 "input": "/a%2fc", 1398 "base": "http://example.org/foo/bar", 1399 "href": "http://example.org/a%2fc", 1400 "origin": "http://example.org", 1401 "protocol": "http:", 1402 "username": "", 1403 "password": "", 1404 "host": "example.org", 1405 "hostname": "example.org", 1406 "port": "", 1407 "pathname": "/a%2fc", 1408 "search": "", 1409 "hash": "" 1410 }, 1411 { 1412 "input": "/a/%2f/c", 1413 "base": "http://example.org/foo/bar", 1414 "href": "http://example.org/a/%2f/c", 1415 "origin": "http://example.org", 1416 "protocol": "http:", 1417 "username": "", 1418 "password": "", 1419 "host": "example.org", 1420 "hostname": "example.org", 1421 "port": "", 1422 "pathname": "/a/%2f/c", 1423 "search": "", 1424 "hash": "" 1425 }, 1426 { 1427 "input": "#β", 1428 "base": "http://example.org/foo/bar", 1429 "href": "http://example.org/foo/bar#%CE%B2", 1430 "origin": "http://example.org", 1431 "protocol": "http:", 1432 "username": "", 1433 "password": "", 1434 "host": "example.org", 1435 "hostname": "example.org", 1436 "port": "", 1437 "pathname": "/foo/bar", 1438 "search": "", 1439 "hash": "#%CE%B2" 1440 }, 1441 { 1442 "input": "data:text/html,test#test", 1443 "base": "http://example.org/foo/bar", 1444 "href": "data:text/html,test#test", 1445 "origin": "null", 1446 "protocol": "data:", 1447 "username": "", 1448 "password": "", 1449 "host": "", 1450 "hostname": "", 1451 "port": "", 1452 "pathname": "text/html,test", 1453 "search": "", 1454 "hash": "#test" 1455 }, 1456 { 1457 "input": "tel:1234567890", 1458 "base": "http://example.org/foo/bar", 1459 "href": "tel:1234567890", 1460 "origin": "null", 1461 "protocol": "tel:", 1462 "username": "", 1463 "password": "", 1464 "host": "", 1465 "hostname": "", 1466 "port": "", 1467 "pathname": "1234567890", 1468 "search": "", 1469 "hash": "" 1470 }, 1471 "# Based on http://trac.webkit.org/browser/trunk/LayoutTests/fast/url/file.html", 1472 { 1473 "input": "file:c:\\foo\\bar.html", 1474 "base": "file:///tmp/mock/path", 1475 "href": "file:///c:/foo/bar.html", 1476 "protocol": "file:", 1477 "username": "", 1478 "password": "", 1479 "host": "", 1480 "hostname": "", 1481 "port": "", 1482 "pathname": "/c:/foo/bar.html", 1483 "search": "", 1484 "hash": "" 1485 }, 1486 { 1487 "input": " File:c|////foo\\bar.html", 1488 "base": "file:///tmp/mock/path", 1489 "href": "file:///c:////foo/bar.html", 1490 "protocol": "file:", 1491 "username": "", 1492 "password": "", 1493 "host": "", 1494 "hostname": "", 1495 "port": "", 1496 "pathname": "/c:////foo/bar.html", 1497 "search": "", 1498 "hash": "" 1499 }, 1500 { 1501 "input": "C|/foo/bar", 1502 "base": "file:///tmp/mock/path", 1503 "href": "file:///C:/foo/bar", 1504 "protocol": "file:", 1505 "username": "", 1506 "password": "", 1507 "host": "", 1508 "hostname": "", 1509 "port": "", 1510 "pathname": "/C:/foo/bar", 1511 "search": "", 1512 "hash": "" 1513 }, 1514 { 1515 "input": "/C|\\foo\\bar", 1516 "base": "file:///tmp/mock/path", 1517 "href": "file:///C:/foo/bar", 1518 "protocol": "file:", 1519 "username": "", 1520 "password": "", 1521 "host": "", 1522 "hostname": "", 1523 "port": "", 1524 "pathname": "/C:/foo/bar", 1525 "search": "", 1526 "hash": "" 1527 }, 1528 { 1529 "input": "//C|/foo/bar", 1530 "base": "file:///tmp/mock/path", 1531 "href": "file:///C:/foo/bar", 1532 "protocol": "file:", 1533 "username": "", 1534 "password": "", 1535 "host": "", 1536 "hostname": "", 1537 "port": "", 1538 "pathname": "/C:/foo/bar", 1539 "search": "", 1540 "hash": "" 1541 }, 1542 { 1543 "input": "//server/file", 1544 "base": "file:///tmp/mock/path", 1545 "href": "file://server/file", 1546 "protocol": "file:", 1547 "username": "", 1548 "password": "", 1549 "host": "server", 1550 "hostname": "server", 1551 "port": "", 1552 "pathname": "/file", 1553 "search": "", 1554 "hash": "" 1555 }, 1556 { 1557 "input": "\\\\server\\file", 1558 "base": "file:///tmp/mock/path", 1559 "href": "file://server/file", 1560 "protocol": "file:", 1561 "username": "", 1562 "password": "", 1563 "host": "server", 1564 "hostname": "server", 1565 "port": "", 1566 "pathname": "/file", 1567 "search": "", 1568 "hash": "" 1569 }, 1570 { 1571 "input": "/\\server/file", 1572 "base": "file:///tmp/mock/path", 1573 "href": "file://server/file", 1574 "protocol": "file:", 1575 "username": "", 1576 "password": "", 1577 "host": "server", 1578 "hostname": "server", 1579 "port": "", 1580 "pathname": "/file", 1581 "search": "", 1582 "hash": "" 1583 }, 1584 { 1585 "input": "file:///foo/bar.txt", 1586 "base": "file:///tmp/mock/path", 1587 "href": "file:///foo/bar.txt", 1588 "protocol": "file:", 1589 "username": "", 1590 "password": "", 1591 "host": "", 1592 "hostname": "", 1593 "port": "", 1594 "pathname": "/foo/bar.txt", 1595 "search": "", 1596 "hash": "" 1597 }, 1598 { 1599 "input": "file:///home/me", 1600 "base": "file:///tmp/mock/path", 1601 "href": "file:///home/me", 1602 "protocol": "file:", 1603 "username": "", 1604 "password": "", 1605 "host": "", 1606 "hostname": "", 1607 "port": "", 1608 "pathname": "/home/me", 1609 "search": "", 1610 "hash": "" 1611 }, 1612 { 1613 "input": "//", 1614 "base": "file:///tmp/mock/path", 1615 "href": "file:///", 1616 "protocol": "file:", 1617 "username": "", 1618 "password": "", 1619 "host": "", 1620 "hostname": "", 1621 "port": "", 1622 "pathname": "/", 1623 "search": "", 1624 "hash": "" 1625 }, 1626 { 1627 "input": "///", 1628 "base": "file:///tmp/mock/path", 1629 "href": "file:///", 1630 "protocol": "file:", 1631 "username": "", 1632 "password": "", 1633 "host": "", 1634 "hostname": "", 1635 "port": "", 1636 "pathname": "/", 1637 "search": "", 1638 "hash": "" 1639 }, 1640 { 1641 "input": "///test", 1642 "base": "file:///tmp/mock/path", 1643 "href": "file:///test", 1644 "protocol": "file:", 1645 "username": "", 1646 "password": "", 1647 "host": "", 1648 "hostname": "", 1649 "port": "", 1650 "pathname": "/test", 1651 "search": "", 1652 "hash": "" 1653 }, 1654 { 1655 "input": "file://test", 1656 "base": "file:///tmp/mock/path", 1657 "href": "file://test/", 1658 "protocol": "file:", 1659 "username": "", 1660 "password": "", 1661 "host": "test", 1662 "hostname": "test", 1663 "port": "", 1664 "pathname": "/", 1665 "search": "", 1666 "hash": "" 1667 }, 1668 { 1669 "input": "file://localhost", 1670 "base": "file:///tmp/mock/path", 1671 "href": "file:///", 1672 "protocol": "file:", 1673 "username": "", 1674 "password": "", 1675 "host": "", 1676 "hostname": "", 1677 "port": "", 1678 "pathname": "/", 1679 "search": "", 1680 "hash": "" 1681 }, 1682 { 1683 "input": "file://localhost/", 1684 "base": "file:///tmp/mock/path", 1685 "href": "file:///", 1686 "protocol": "file:", 1687 "username": "", 1688 "password": "", 1689 "host": "", 1690 "hostname": "", 1691 "port": "", 1692 "pathname": "/", 1693 "search": "", 1694 "hash": "" 1695 }, 1696 { 1697 "input": "file://localhost/test", 1698 "base": "file:///tmp/mock/path", 1699 "href": "file:///test", 1700 "protocol": "file:", 1701 "username": "", 1702 "password": "", 1703 "host": "", 1704 "hostname": "", 1705 "port": "", 1706 "pathname": "/test", 1707 "search": "", 1708 "hash": "" 1709 }, 1710 { 1711 "input": "test", 1712 "base": "file:///tmp/mock/path", 1713 "href": "file:///tmp/mock/test", 1714 "protocol": "file:", 1715 "username": "", 1716 "password": "", 1717 "host": "", 1718 "hostname": "", 1719 "port": "", 1720 "pathname": "/tmp/mock/test", 1721 "search": "", 1722 "hash": "" 1723 }, 1724 { 1725 "input": "file:test", 1726 "base": "file:///tmp/mock/path", 1727 "href": "file:///tmp/mock/test", 1728 "protocol": "file:", 1729 "username": "", 1730 "password": "", 1731 "host": "", 1732 "hostname": "", 1733 "port": "", 1734 "pathname": "/tmp/mock/test", 1735 "search": "", 1736 "hash": "" 1737 }, 1738 "# Based on http://trac.webkit.org/browser/trunk/LayoutTests/fast/url/script-tests/path.js", 1739 { 1740 "input": "http://example.com/././foo", 1741 "base": null, 1742 "href": "http://example.com/foo", 1743 "origin": "http://example.com", 1744 "protocol": "http:", 1745 "username": "", 1746 "password": "", 1747 "host": "example.com", 1748 "hostname": "example.com", 1749 "port": "", 1750 "pathname": "/foo", 1751 "search": "", 1752 "hash": "" 1753 }, 1754 { 1755 "input": "http://example.com/./.foo", 1756 "base": null, 1757 "href": "http://example.com/.foo", 1758 "origin": "http://example.com", 1759 "protocol": "http:", 1760 "username": "", 1761 "password": "", 1762 "host": "example.com", 1763 "hostname": "example.com", 1764 "port": "", 1765 "pathname": "/.foo", 1766 "search": "", 1767 "hash": "" 1768 }, 1769 { 1770 "input": "http://example.com/foo/.", 1771 "base": null, 1772 "href": "http://example.com/foo/", 1773 "origin": "http://example.com", 1774 "protocol": "http:", 1775 "username": "", 1776 "password": "", 1777 "host": "example.com", 1778 "hostname": "example.com", 1779 "port": "", 1780 "pathname": "/foo/", 1781 "search": "", 1782 "hash": "" 1783 }, 1784 { 1785 "input": "http://example.com/foo/./", 1786 "base": null, 1787 "href": "http://example.com/foo/", 1788 "origin": "http://example.com", 1789 "protocol": "http:", 1790 "username": "", 1791 "password": "", 1792 "host": "example.com", 1793 "hostname": "example.com", 1794 "port": "", 1795 "pathname": "/foo/", 1796 "search": "", 1797 "hash": "" 1798 }, 1799 { 1800 "input": "http://example.com/foo/bar/..", 1801 "base": null, 1802 "href": "http://example.com/foo/", 1803 "origin": "http://example.com", 1804 "protocol": "http:", 1805 "username": "", 1806 "password": "", 1807 "host": "example.com", 1808 "hostname": "example.com", 1809 "port": "", 1810 "pathname": "/foo/", 1811 "search": "", 1812 "hash": "" 1813 }, 1814 { 1815 "input": "http://example.com/foo/bar/../", 1816 "base": null, 1817 "href": "http://example.com/foo/", 1818 "origin": "http://example.com", 1819 "protocol": "http:", 1820 "username": "", 1821 "password": "", 1822 "host": "example.com", 1823 "hostname": "example.com", 1824 "port": "", 1825 "pathname": "/foo/", 1826 "search": "", 1827 "hash": "" 1828 }, 1829 { 1830 "input": "http://example.com/foo/..bar", 1831 "base": null, 1832 "href": "http://example.com/foo/..bar", 1833 "origin": "http://example.com", 1834 "protocol": "http:", 1835 "username": "", 1836 "password": "", 1837 "host": "example.com", 1838 "hostname": "example.com", 1839 "port": "", 1840 "pathname": "/foo/..bar", 1841 "search": "", 1842 "hash": "" 1843 }, 1844 { 1845 "input": "http://example.com/foo/bar/../ton", 1846 "base": null, 1847 "href": "http://example.com/foo/ton", 1848 "origin": "http://example.com", 1849 "protocol": "http:", 1850 "username": "", 1851 "password": "", 1852 "host": "example.com", 1853 "hostname": "example.com", 1854 "port": "", 1855 "pathname": "/foo/ton", 1856 "search": "", 1857 "hash": "" 1858 }, 1859 { 1860 "input": "http://example.com/foo/bar/../ton/../../a", 1861 "base": null, 1862 "href": "http://example.com/a", 1863 "origin": "http://example.com", 1864 "protocol": "http:", 1865 "username": "", 1866 "password": "", 1867 "host": "example.com", 1868 "hostname": "example.com", 1869 "port": "", 1870 "pathname": "/a", 1871 "search": "", 1872 "hash": "" 1873 }, 1874 { 1875 "input": "http://example.com/foo/../../..", 1876 "base": null, 1877 "href": "http://example.com/", 1878 "origin": "http://example.com", 1879 "protocol": "http:", 1880 "username": "", 1881 "password": "", 1882 "host": "example.com", 1883 "hostname": "example.com", 1884 "port": "", 1885 "pathname": "/", 1886 "search": "", 1887 "hash": "" 1888 }, 1889 { 1890 "input": "http://example.com/foo/../../../ton", 1891 "base": null, 1892 "href": "http://example.com/ton", 1893 "origin": "http://example.com", 1894 "protocol": "http:", 1895 "username": "", 1896 "password": "", 1897 "host": "example.com", 1898 "hostname": "example.com", 1899 "port": "", 1900 "pathname": "/ton", 1901 "search": "", 1902 "hash": "" 1903 }, 1904 { 1905 "input": "http://example.com/foo/%2e", 1906 "base": null, 1907 "href": "http://example.com/foo/", 1908 "origin": "http://example.com", 1909 "protocol": "http:", 1910 "username": "", 1911 "password": "", 1912 "host": "example.com", 1913 "hostname": "example.com", 1914 "port": "", 1915 "pathname": "/foo/", 1916 "search": "", 1917 "hash": "" 1918 }, 1919 { 1920 "input": "http://example.com/foo/%2e%2", 1921 "base": null, 1922 "href": "http://example.com/foo/%2e%2", 1923 "origin": "http://example.com", 1924 "protocol": "http:", 1925 "username": "", 1926 "password": "", 1927 "host": "example.com", 1928 "hostname": "example.com", 1929 "port": "", 1930 "pathname": "/foo/%2e%2", 1931 "search": "", 1932 "hash": "" 1933 }, 1934 { 1935 "input": "http://example.com/foo/%2e./%2e%2e/.%2e/%2e.bar", 1936 "base": null, 1937 "href": "http://example.com/%2e.bar", 1938 "origin": "http://example.com", 1939 "protocol": "http:", 1940 "username": "", 1941 "password": "", 1942 "host": "example.com", 1943 "hostname": "example.com", 1944 "port": "", 1945 "pathname": "/%2e.bar", 1946 "search": "", 1947 "hash": "" 1948 }, 1949 { 1950 "input": "http://example.com////../..", 1951 "base": null, 1952 "href": "http://example.com//", 1953 "origin": "http://example.com", 1954 "protocol": "http:", 1955 "username": "", 1956 "password": "", 1957 "host": "example.com", 1958 "hostname": "example.com", 1959 "port": "", 1960 "pathname": "//", 1961 "search": "", 1962 "hash": "" 1963 }, 1964 { 1965 "input": "http://example.com/foo/bar//../..", 1966 "base": null, 1967 "href": "http://example.com/foo/", 1968 "origin": "http://example.com", 1969 "protocol": "http:", 1970 "username": "", 1971 "password": "", 1972 "host": "example.com", 1973 "hostname": "example.com", 1974 "port": "", 1975 "pathname": "/foo/", 1976 "search": "", 1977 "hash": "" 1978 }, 1979 { 1980 "input": "http://example.com/foo/bar//..", 1981 "base": null, 1982 "href": "http://example.com/foo/bar/", 1983 "origin": "http://example.com", 1984 "protocol": "http:", 1985 "username": "", 1986 "password": "", 1987 "host": "example.com", 1988 "hostname": "example.com", 1989 "port": "", 1990 "pathname": "/foo/bar/", 1991 "search": "", 1992 "hash": "" 1993 }, 1994 { 1995 "input": "http://example.com/foo", 1996 "base": null, 1997 "href": "http://example.com/foo", 1998 "origin": "http://example.com", 1999 "protocol": "http:", 2000 "username": "", 2001 "password": "", 2002 "host": "example.com", 2003 "hostname": "example.com", 2004 "port": "", 2005 "pathname": "/foo", 2006 "search": "", 2007 "hash": "" 2008 }, 2009 { 2010 "input": "http://example.com/%20foo", 2011 "base": null, 2012 "href": "http://example.com/%20foo", 2013 "origin": "http://example.com", 2014 "protocol": "http:", 2015 "username": "", 2016 "password": "", 2017 "host": "example.com", 2018 "hostname": "example.com", 2019 "port": "", 2020 "pathname": "/%20foo", 2021 "search": "", 2022 "hash": "" 2023 }, 2024 { 2025 "input": "http://example.com/foo%", 2026 "base": null, 2027 "href": "http://example.com/foo%", 2028 "origin": "http://example.com", 2029 "protocol": "http:", 2030 "username": "", 2031 "password": "", 2032 "host": "example.com", 2033 "hostname": "example.com", 2034 "port": "", 2035 "pathname": "/foo%", 2036 "search": "", 2037 "hash": "" 2038 }, 2039 { 2040 "input": "http://example.com/foo%2", 2041 "base": null, 2042 "href": "http://example.com/foo%2", 2043 "origin": "http://example.com", 2044 "protocol": "http:", 2045 "username": "", 2046 "password": "", 2047 "host": "example.com", 2048 "hostname": "example.com", 2049 "port": "", 2050 "pathname": "/foo%2", 2051 "search": "", 2052 "hash": "" 2053 }, 2054 { 2055 "input": "http://example.com/foo%2zbar", 2056 "base": null, 2057 "href": "http://example.com/foo%2zbar", 2058 "origin": "http://example.com", 2059 "protocol": "http:", 2060 "username": "", 2061 "password": "", 2062 "host": "example.com", 2063 "hostname": "example.com", 2064 "port": "", 2065 "pathname": "/foo%2zbar", 2066 "search": "", 2067 "hash": "" 2068 }, 2069 { 2070 "input": "http://example.com/foo%2©zbar", 2071 "base": null, 2072 "href": "http://example.com/foo%2%C3%82%C2%A9zbar", 2073 "origin": "http://example.com", 2074 "protocol": "http:", 2075 "username": "", 2076 "password": "", 2077 "host": "example.com", 2078 "hostname": "example.com", 2079 "port": "", 2080 "pathname": "/foo%2%C3%82%C2%A9zbar", 2081 "search": "", 2082 "hash": "" 2083 }, 2084 { 2085 "input": "http://example.com/foo%41%7a", 2086 "base": null, 2087 "href": "http://example.com/foo%41%7a", 2088 "origin": "http://example.com", 2089 "protocol": "http:", 2090 "username": "", 2091 "password": "", 2092 "host": "example.com", 2093 "hostname": "example.com", 2094 "port": "", 2095 "pathname": "/foo%41%7a", 2096 "search": "", 2097 "hash": "" 2098 }, 2099 { 2100 "input": "http://example.com/foo\t\u0091%91", 2101 "base": null, 2102 "href": "http://example.com/foo%C2%91%91", 2103 "origin": "http://example.com", 2104 "protocol": "http:", 2105 "username": "", 2106 "password": "", 2107 "host": "example.com", 2108 "hostname": "example.com", 2109 "port": "", 2110 "pathname": "/foo%C2%91%91", 2111 "search": "", 2112 "hash": "" 2113 }, 2114 { 2115 "input": "http://example.com/foo%00%51", 2116 "base": null, 2117 "href": "http://example.com/foo%00%51", 2118 "origin": "http://example.com", 2119 "protocol": "http:", 2120 "username": "", 2121 "password": "", 2122 "host": "example.com", 2123 "hostname": "example.com", 2124 "port": "", 2125 "pathname": "/foo%00%51", 2126 "search": "", 2127 "hash": "" 2128 }, 2129 { 2130 "input": "http://example.com/(%28:%3A%29)", 2131 "base": null, 2132 "href": "http://example.com/(%28:%3A%29)", 2133 "origin": "http://example.com", 2134 "protocol": "http:", 2135 "username": "", 2136 "password": "", 2137 "host": "example.com", 2138 "hostname": "example.com", 2139 "port": "", 2140 "pathname": "/(%28:%3A%29)", 2141 "search": "", 2142 "hash": "" 2143 }, 2144 { 2145 "input": "http://example.com/%3A%3a%3C%3c", 2146 "base": null, 2147 "href": "http://example.com/%3A%3a%3C%3c", 2148 "origin": "http://example.com", 2149 "protocol": "http:", 2150 "username": "", 2151 "password": "", 2152 "host": "example.com", 2153 "hostname": "example.com", 2154 "port": "", 2155 "pathname": "/%3A%3a%3C%3c", 2156 "search": "", 2157 "hash": "" 2158 }, 2159 { 2160 "input": "http://example.com/foo\tbar", 2161 "base": null, 2162 "href": "http://example.com/foobar", 2163 "origin": "http://example.com", 2164 "protocol": "http:", 2165 "username": "", 2166 "password": "", 2167 "host": "example.com", 2168 "hostname": "example.com", 2169 "port": "", 2170 "pathname": "/foobar", 2171 "search": "", 2172 "hash": "" 2173 }, 2174 { 2175 "input": "http://example.com\\\\foo\\\\bar", 2176 "base": null, 2177 "href": "http://example.com//foo//bar", 2178 "origin": "http://example.com", 2179 "protocol": "http:", 2180 "username": "", 2181 "password": "", 2182 "host": "example.com", 2183 "hostname": "example.com", 2184 "port": "", 2185 "pathname": "//foo//bar", 2186 "search": "", 2187 "hash": "" 2188 }, 2189 { 2190 "input": "http://example.com/%7Ffp3%3Eju%3Dduvgw%3Dd", 2191 "base": null, 2192 "href": "http://example.com/%7Ffp3%3Eju%3Dduvgw%3Dd", 2193 "origin": "http://example.com", 2194 "protocol": "http:", 2195 "username": "", 2196 "password": "", 2197 "host": "example.com", 2198 "hostname": "example.com", 2199 "port": "", 2200 "pathname": "/%7Ffp3%3Eju%3Dduvgw%3Dd", 2201 "search": "", 2202 "hash": "" 2203 }, 2204 { 2205 "input": "http://example.com/@asdf%40", 2206 "base": null, 2207 "href": "http://example.com/@asdf%40", 2208 "origin": "http://example.com", 2209 "protocol": "http:", 2210 "username": "", 2211 "password": "", 2212 "host": "example.com", 2213 "hostname": "example.com", 2214 "port": "", 2215 "pathname": "/@asdf%40", 2216 "search": "", 2217 "hash": "" 2218 }, 2219 { 2220 "input": "http://example.com/你好你好", 2221 "base": null, 2222 "href": "http://example.com/%E4%BD%A0%E5%A5%BD%E4%BD%A0%E5%A5%BD", 2223 "origin": "http://example.com", 2224 "protocol": "http:", 2225 "username": "", 2226 "password": "", 2227 "host": "example.com", 2228 "hostname": "example.com", 2229 "port": "", 2230 "pathname": "/%E4%BD%A0%E5%A5%BD%E4%BD%A0%E5%A5%BD", 2231 "search": "", 2232 "hash": "" 2233 }, 2234 { 2235 "input": "http://example.com/‥/foo", 2236 "base": null, 2237 "href": "http://example.com/%E2%80%A5/foo", 2238 "origin": "http://example.com", 2239 "protocol": "http:", 2240 "username": "", 2241 "password": "", 2242 "host": "example.com", 2243 "hostname": "example.com", 2244 "port": "", 2245 "pathname": "/%E2%80%A5/foo", 2246 "search": "", 2247 "hash": "" 2248 }, 2249 { 2250 "input": "http://example.com//foo", 2251 "base": null, 2252 "href": "http://example.com/%EF%BB%BF/foo", 2253 "origin": "http://example.com", 2254 "protocol": "http:", 2255 "username": "", 2256 "password": "", 2257 "host": "example.com", 2258 "hostname": "example.com", 2259 "port": "", 2260 "pathname": "/%EF%BB%BF/foo", 2261 "search": "", 2262 "hash": "" 2263 }, 2264 { 2265 "input": "http://example.com//foo//bar", 2266 "base": null, 2267 "href": "http://example.com/%E2%80%AE/foo/%E2%80%AD/bar", 2268 "origin": "http://example.com", 2269 "protocol": "http:", 2270 "username": "", 2271 "password": "", 2272 "host": "example.com", 2273 "hostname": "example.com", 2274 "port": "", 2275 "pathname": "/%E2%80%AE/foo/%E2%80%AD/bar", 2276 "search": "", 2277 "hash": "" 2278 }, 2279 "# Based on http://trac.webkit.org/browser/trunk/LayoutTests/fast/url/script-tests/relative.js", 2280 { 2281 "input": "http://www.google.com/foo?bar=baz#", 2282 "base": null, 2283 "href": "http://www.google.com/foo?bar=baz#", 2284 "origin": "http://www.google.com", 2285 "protocol": "http:", 2286 "username": "", 2287 "password": "", 2288 "host": "www.google.com", 2289 "hostname": "www.google.com", 2290 "port": "", 2291 "pathname": "/foo", 2292 "search": "?bar=baz", 2293 "hash": "" 2294 }, 2295 { 2296 "input": "http://www.google.com/foo?bar=baz# »", 2297 "base": null, 2298 "href": "http://www.google.com/foo?bar=baz#%20%C2%BB", 2299 "origin": "http://www.google.com", 2300 "protocol": "http:", 2301 "username": "", 2302 "password": "", 2303 "host": "www.google.com", 2304 "hostname": "www.google.com", 2305 "port": "", 2306 "pathname": "/foo", 2307 "search": "?bar=baz", 2308 "hash": "#%20%C2%BB" 2309 }, 2310 { 2311 "input": "data:test# »", 2312 "base": null, 2313 "href": "data:test#%20%C2%BB", 2314 "origin": "null", 2315 "protocol": "data:", 2316 "username": "", 2317 "password": "", 2318 "host": "", 2319 "hostname": "", 2320 "port": "", 2321 "pathname": "test", 2322 "search": "", 2323 "hash": "#%20%C2%BB" 2324 }, 2325 { 2326 "input": "http://www.google.com", 2327 "base": null, 2328 "href": "http://www.google.com/", 2329 "origin": "http://www.google.com", 2330 "protocol": "http:", 2331 "username": "", 2332 "password": "", 2333 "host": "www.google.com", 2334 "hostname": "www.google.com", 2335 "port": "", 2336 "pathname": "/", 2337 "search": "", 2338 "hash": "" 2339 }, 2340 { 2341 "input": "http://192.0x00A80001", 2342 "base": null, 2343 "href": "http://192.168.0.1/", 2344 "origin": "http://192.168.0.1", 2345 "protocol": "http:", 2346 "username": "", 2347 "password": "", 2348 "host": "192.168.0.1", 2349 "hostname": "192.168.0.1", 2350 "port": "", 2351 "pathname": "/", 2352 "search": "", 2353 "hash": "" 2354 }, 2355 { 2356 "input": "http://www/foo%2Ehtml", 2357 "base": null, 2358 "href": "http://www/foo%2Ehtml", 2359 "origin": "http://www", 2360 "protocol": "http:", 2361 "username": "", 2362 "password": "", 2363 "host": "www", 2364 "hostname": "www", 2365 "port": "", 2366 "pathname": "/foo%2Ehtml", 2367 "search": "", 2368 "hash": "" 2369 }, 2370 { 2371 "input": "http://www/foo/%2E/html", 2372 "base": null, 2373 "href": "http://www/foo/html", 2374 "origin": "http://www", 2375 "protocol": "http:", 2376 "username": "", 2377 "password": "", 2378 "host": "www", 2379 "hostname": "www", 2380 "port": "", 2381 "pathname": "/foo/html", 2382 "search": "", 2383 "hash": "" 2384 }, 2385 { 2386 "input": "http://user:pass@/", 2387 "base": null, 2388 "failure": true 2389 }, 2390 { 2391 "input": "http://%25DOMAIN:foobar@foodomain.com/", 2392 "base": null, 2393 "href": "http://%25DOMAIN:foobar@foodomain.com/", 2394 "origin": "http://foodomain.com", 2395 "protocol": "http:", 2396 "username": "%25DOMAIN", 2397 "password": "foobar", 2398 "host": "foodomain.com", 2399 "hostname": "foodomain.com", 2400 "port": "", 2401 "pathname": "/", 2402 "search": "", 2403 "hash": "" 2404 }, 2405 { 2406 "input": "http:\\\\www.google.com\\foo", 2407 "base": null, 2408 "href": "http://www.google.com/foo", 2409 "origin": "http://www.google.com", 2410 "protocol": "http:", 2411 "username": "", 2412 "password": "", 2413 "host": "www.google.com", 2414 "hostname": "www.google.com", 2415 "port": "", 2416 "pathname": "/foo", 2417 "search": "", 2418 "hash": "" 2419 }, 2420 { 2421 "input": "http://foo:80/", 2422 "base": null, 2423 "href": "http://foo/", 2424 "origin": "http://foo", 2425 "protocol": "http:", 2426 "username": "", 2427 "password": "", 2428 "host": "foo", 2429 "hostname": "foo", 2430 "port": "", 2431 "pathname": "/", 2432 "search": "", 2433 "hash": "" 2434 }, 2435 { 2436 "input": "http://foo:81/", 2437 "base": null, 2438 "href": "http://foo:81/", 2439 "origin": "http://foo:81", 2440 "protocol": "http:", 2441 "username": "", 2442 "password": "", 2443 "host": "foo:81", 2444 "hostname": "foo", 2445 "port": "81", 2446 "pathname": "/", 2447 "search": "", 2448 "hash": "" 2449 }, 2450 { 2451 "input": "httpa://foo:80/", 2452 "base": null, 2453 "href": "httpa://foo:80/", 2454 "origin": "null", 2455 "protocol": "httpa:", 2456 "username": "", 2457 "password": "", 2458 "host": "foo:80", 2459 "hostname": "foo", 2460 "port": "80", 2461 "pathname": "/", 2462 "search": "", 2463 "hash": "" 2464 }, 2465 { 2466 "input": "http://foo:-80/", 2467 "base": null, 2468 "failure": true 2469 }, 2470 { 2471 "input": "https://foo:443/", 2472 "base": null, 2473 "href": "https://foo/", 2474 "origin": "https://foo", 2475 "protocol": "https:", 2476 "username": "", 2477 "password": "", 2478 "host": "foo", 2479 "hostname": "foo", 2480 "port": "", 2481 "pathname": "/", 2482 "search": "", 2483 "hash": "" 2484 }, 2485 { 2486 "input": "https://foo:80/", 2487 "base": null, 2488 "href": "https://foo:80/", 2489 "origin": "https://foo:80", 2490 "protocol": "https:", 2491 "username": "", 2492 "password": "", 2493 "host": "foo:80", 2494 "hostname": "foo", 2495 "port": "80", 2496 "pathname": "/", 2497 "search": "", 2498 "hash": "" 2499 }, 2500 { 2501 "input": "ftp://foo:21/", 2502 "base": null, 2503 "href": "ftp://foo/", 2504 "origin": "ftp://foo", 2505 "protocol": "ftp:", 2506 "username": "", 2507 "password": "", 2508 "host": "foo", 2509 "hostname": "foo", 2510 "port": "", 2511 "pathname": "/", 2512 "search": "", 2513 "hash": "" 2514 }, 2515 { 2516 "input": "ftp://foo:80/", 2517 "base": null, 2518 "href": "ftp://foo:80/", 2519 "origin": "ftp://foo:80", 2520 "protocol": "ftp:", 2521 "username": "", 2522 "password": "", 2523 "host": "foo:80", 2524 "hostname": "foo", 2525 "port": "80", 2526 "pathname": "/", 2527 "search": "", 2528 "hash": "" 2529 }, 2530 { 2531 "input": "gopher://foo:70/", 2532 "base": null, 2533 "href": "gopher://foo:70/", 2534 "origin": "null", 2535 "protocol": "gopher:", 2536 "username": "", 2537 "password": "", 2538 "host": "foo:70", 2539 "hostname": "foo", 2540 "port": "70", 2541 "pathname": "/", 2542 "search": "", 2543 "hash": "" 2544 }, 2545 { 2546 "input": "gopher://foo:443/", 2547 "base": null, 2548 "href": "gopher://foo:443/", 2549 "origin": "null", 2550 "protocol": "gopher:", 2551 "username": "", 2552 "password": "", 2553 "host": "foo:443", 2554 "hostname": "foo", 2555 "port": "443", 2556 "pathname": "/", 2557 "search": "", 2558 "hash": "" 2559 }, 2560 { 2561 "input": "ws://foo:80/", 2562 "base": null, 2563 "href": "ws://foo/", 2564 "origin": "ws://foo", 2565 "protocol": "ws:", 2566 "username": "", 2567 "password": "", 2568 "host": "foo", 2569 "hostname": "foo", 2570 "port": "", 2571 "pathname": "/", 2572 "search": "", 2573 "hash": "" 2574 }, 2575 { 2576 "input": "ws://foo:81/", 2577 "base": null, 2578 "href": "ws://foo:81/", 2579 "origin": "ws://foo:81", 2580 "protocol": "ws:", 2581 "username": "", 2582 "password": "", 2583 "host": "foo:81", 2584 "hostname": "foo", 2585 "port": "81", 2586 "pathname": "/", 2587 "search": "", 2588 "hash": "" 2589 }, 2590 { 2591 "input": "ws://foo:443/", 2592 "base": null, 2593 "href": "ws://foo:443/", 2594 "origin": "ws://foo:443", 2595 "protocol": "ws:", 2596 "username": "", 2597 "password": "", 2598 "host": "foo:443", 2599 "hostname": "foo", 2600 "port": "443", 2601 "pathname": "/", 2602 "search": "", 2603 "hash": "" 2604 }, 2605 { 2606 "input": "ws://foo:815/", 2607 "base": null, 2608 "href": "ws://foo:815/", 2609 "origin": "ws://foo:815", 2610 "protocol": "ws:", 2611 "username": "", 2612 "password": "", 2613 "host": "foo:815", 2614 "hostname": "foo", 2615 "port": "815", 2616 "pathname": "/", 2617 "search": "", 2618 "hash": "" 2619 }, 2620 { 2621 "input": "wss://foo:80/", 2622 "base": null, 2623 "href": "wss://foo:80/", 2624 "origin": "wss://foo:80", 2625 "protocol": "wss:", 2626 "username": "", 2627 "password": "", 2628 "host": "foo:80", 2629 "hostname": "foo", 2630 "port": "80", 2631 "pathname": "/", 2632 "search": "", 2633 "hash": "" 2634 }, 2635 { 2636 "input": "wss://foo:81/", 2637 "base": null, 2638 "href": "wss://foo:81/", 2639 "origin": "wss://foo:81", 2640 "protocol": "wss:", 2641 "username": "", 2642 "password": "", 2643 "host": "foo:81", 2644 "hostname": "foo", 2645 "port": "81", 2646 "pathname": "/", 2647 "search": "", 2648 "hash": "" 2649 }, 2650 { 2651 "input": "wss://foo:443/", 2652 "base": null, 2653 "href": "wss://foo/", 2654 "origin": "wss://foo", 2655 "protocol": "wss:", 2656 "username": "", 2657 "password": "", 2658 "host": "foo", 2659 "hostname": "foo", 2660 "port": "", 2661 "pathname": "/", 2662 "search": "", 2663 "hash": "" 2664 }, 2665 { 2666 "input": "wss://foo:815/", 2667 "base": null, 2668 "href": "wss://foo:815/", 2669 "origin": "wss://foo:815", 2670 "protocol": "wss:", 2671 "username": "", 2672 "password": "", 2673 "host": "foo:815", 2674 "hostname": "foo", 2675 "port": "815", 2676 "pathname": "/", 2677 "search": "", 2678 "hash": "" 2679 }, 2680 { 2681 "input": "ftp:/example.com/", 2682 "base": null, 2683 "href": "ftp://example.com/", 2684 "origin": "ftp://example.com", 2685 "protocol": "ftp:", 2686 "username": "", 2687 "password": "", 2688 "host": "example.com", 2689 "hostname": "example.com", 2690 "port": "", 2691 "pathname": "/", 2692 "search": "", 2693 "hash": "" 2694 }, 2695 { 2696 "input": "https:/example.com/", 2697 "base": null, 2698 "href": "https://example.com/", 2699 "origin": "https://example.com", 2700 "protocol": "https:", 2701 "username": "", 2702 "password": "", 2703 "host": "example.com", 2704 "hostname": "example.com", 2705 "port": "", 2706 "pathname": "/", 2707 "search": "", 2708 "hash": "" 2709 }, 2710 { 2711 "input": "madeupscheme:/example.com/", 2712 "base": null, 2713 "href": "madeupscheme:/example.com/", 2714 "origin": "null", 2715 "protocol": "madeupscheme:", 2716 "username": "", 2717 "password": "", 2718 "host": "", 2719 "hostname": "", 2720 "port": "", 2721 "pathname": "/example.com/", 2722 "search": "", 2723 "hash": "" 2724 }, 2725 { 2726 "input": "file:/example.com/", 2727 "base": null, 2728 "href": "file:///example.com/", 2729 "protocol": "file:", 2730 "username": "", 2731 "password": "", 2732 "host": "", 2733 "hostname": "", 2734 "port": "", 2735 "pathname": "/example.com/", 2736 "search": "", 2737 "hash": "" 2738 }, 2739 { 2740 "input": "ftps:/example.com/", 2741 "base": null, 2742 "href": "ftps:/example.com/", 2743 "origin": "null", 2744 "protocol": "ftps:", 2745 "username": "", 2746 "password": "", 2747 "host": "", 2748 "hostname": "", 2749 "port": "", 2750 "pathname": "/example.com/", 2751 "search": "", 2752 "hash": "" 2753 }, 2754 { 2755 "input": "gopher:/example.com/", 2756 "base": null, 2757 "href": "gopher:/example.com/", 2758 "origin": "null", 2759 "protocol": "gopher:", 2760 "username": "", 2761 "password": "", 2762 "host": "", 2763 "hostname": "", 2764 "port": "", 2765 "pathname": "/example.com/", 2766 "search": "", 2767 "hash": "" 2768 }, 2769 { 2770 "input": "ws:/example.com/", 2771 "base": null, 2772 "href": "ws://example.com/", 2773 "origin": "ws://example.com", 2774 "protocol": "ws:", 2775 "username": "", 2776 "password": "", 2777 "host": "example.com", 2778 "hostname": "example.com", 2779 "port": "", 2780 "pathname": "/", 2781 "search": "", 2782 "hash": "" 2783 }, 2784 { 2785 "input": "wss:/example.com/", 2786 "base": null, 2787 "href": "wss://example.com/", 2788 "origin": "wss://example.com", 2789 "protocol": "wss:", 2790 "username": "", 2791 "password": "", 2792 "host": "example.com", 2793 "hostname": "example.com", 2794 "port": "", 2795 "pathname": "/", 2796 "search": "", 2797 "hash": "" 2798 }, 2799 { 2800 "input": "data:/example.com/", 2801 "base": null, 2802 "href": "data:/example.com/", 2803 "origin": "null", 2804 "protocol": "data:", 2805 "username": "", 2806 "password": "", 2807 "host": "", 2808 "hostname": "", 2809 "port": "", 2810 "pathname": "/example.com/", 2811 "search": "", 2812 "hash": "" 2813 }, 2814 { 2815 "input": "javascript:/example.com/", 2816 "base": null, 2817 "href": "javascript:/example.com/", 2818 "origin": "null", 2819 "protocol": "javascript:", 2820 "username": "", 2821 "password": "", 2822 "host": "", 2823 "hostname": "", 2824 "port": "", 2825 "pathname": "/example.com/", 2826 "search": "", 2827 "hash": "" 2828 }, 2829 { 2830 "input": "mailto:/example.com/", 2831 "base": null, 2832 "href": "mailto:/example.com/", 2833 "origin": "null", 2834 "protocol": "mailto:", 2835 "username": "", 2836 "password": "", 2837 "host": "", 2838 "hostname": "", 2839 "port": "", 2840 "pathname": "/example.com/", 2841 "search": "", 2842 "hash": "" 2843 }, 2844 { 2845 "input": "ftp:example.com/", 2846 "base": null, 2847 "href": "ftp://example.com/", 2848 "origin": "ftp://example.com", 2849 "protocol": "ftp:", 2850 "username": "", 2851 "password": "", 2852 "host": "example.com", 2853 "hostname": "example.com", 2854 "port": "", 2855 "pathname": "/", 2856 "search": "", 2857 "hash": "" 2858 }, 2859 { 2860 "input": "https:example.com/", 2861 "base": null, 2862 "href": "https://example.com/", 2863 "origin": "https://example.com", 2864 "protocol": "https:", 2865 "username": "", 2866 "password": "", 2867 "host": "example.com", 2868 "hostname": "example.com", 2869 "port": "", 2870 "pathname": "/", 2871 "search": "", 2872 "hash": "" 2873 }, 2874 { 2875 "input": "madeupscheme:example.com/", 2876 "base": null, 2877 "href": "madeupscheme:example.com/", 2878 "origin": "null", 2879 "protocol": "madeupscheme:", 2880 "username": "", 2881 "password": "", 2882 "host": "", 2883 "hostname": "", 2884 "port": "", 2885 "pathname": "example.com/", 2886 "search": "", 2887 "hash": "" 2888 }, 2889 { 2890 "input": "ftps:example.com/", 2891 "base": null, 2892 "href": "ftps:example.com/", 2893 "origin": "null", 2894 "protocol": "ftps:", 2895 "username": "", 2896 "password": "", 2897 "host": "", 2898 "hostname": "", 2899 "port": "", 2900 "pathname": "example.com/", 2901 "search": "", 2902 "hash": "" 2903 }, 2904 { 2905 "input": "gopher:example.com/", 2906 "base": null, 2907 "href": "gopher:example.com/", 2908 "origin": "null", 2909 "protocol": "gopher:", 2910 "username": "", 2911 "password": "", 2912 "host": "", 2913 "hostname": "", 2914 "port": "", 2915 "pathname": "example.com/", 2916 "search": "", 2917 "hash": "" 2918 }, 2919 { 2920 "input": "ws:example.com/", 2921 "base": null, 2922 "href": "ws://example.com/", 2923 "origin": "ws://example.com", 2924 "protocol": "ws:", 2925 "username": "", 2926 "password": "", 2927 "host": "example.com", 2928 "hostname": "example.com", 2929 "port": "", 2930 "pathname": "/", 2931 "search": "", 2932 "hash": "" 2933 }, 2934 { 2935 "input": "wss:example.com/", 2936 "base": null, 2937 "href": "wss://example.com/", 2938 "origin": "wss://example.com", 2939 "protocol": "wss:", 2940 "username": "", 2941 "password": "", 2942 "host": "example.com", 2943 "hostname": "example.com", 2944 "port": "", 2945 "pathname": "/", 2946 "search": "", 2947 "hash": "" 2948 }, 2949 { 2950 "input": "data:example.com/", 2951 "base": null, 2952 "href": "data:example.com/", 2953 "origin": "null", 2954 "protocol": "data:", 2955 "username": "", 2956 "password": "", 2957 "host": "", 2958 "hostname": "", 2959 "port": "", 2960 "pathname": "example.com/", 2961 "search": "", 2962 "hash": "" 2963 }, 2964 { 2965 "input": "javascript:example.com/", 2966 "base": null, 2967 "href": "javascript:example.com/", 2968 "origin": "null", 2969 "protocol": "javascript:", 2970 "username": "", 2971 "password": "", 2972 "host": "", 2973 "hostname": "", 2974 "port": "", 2975 "pathname": "example.com/", 2976 "search": "", 2977 "hash": "" 2978 }, 2979 { 2980 "input": "mailto:example.com/", 2981 "base": null, 2982 "href": "mailto:example.com/", 2983 "origin": "null", 2984 "protocol": "mailto:", 2985 "username": "", 2986 "password": "", 2987 "host": "", 2988 "hostname": "", 2989 "port": "", 2990 "pathname": "example.com/", 2991 "search": "", 2992 "hash": "" 2993 }, 2994 { 2995 "input": "http://@www.example.com", 2996 "base": null, 2997 "href": "http://www.example.com/", 2998 "origin": "http://www.example.com", 2999 "protocol": "http:", 3000 "username": "", 3001 "password": "", 3002 "host": "www.example.com", 3003 "hostname": "www.example.com", 3004 "port": "", 3005 "pathname": "/", 3006 "search": "", 3007 "hash": "" 3008 }, 3009 { 3010 "input": "http://a:b@www.example.com", 3011 "base": null, 3012 "href": "http://a:b@www.example.com/", 3013 "origin": "http://www.example.com", 3014 "protocol": "http:", 3015 "username": "a", 3016 "password": "b", 3017 "host": "www.example.com", 3018 "hostname": "www.example.com", 3019 "port": "", 3020 "pathname": "/", 3021 "search": "", 3022 "hash": "" 3023 }, 3024 { 3025 "input": "http://@pple.com", 3026 "base": null, 3027 "href": "http://pple.com/", 3028 "origin": "http://pple.com", 3029 "protocol": "http:", 3030 "username": "", 3031 "password": "", 3032 "host": "pple.com", 3033 "hostname": "pple.com", 3034 "port": "", 3035 "pathname": "/", 3036 "search": "", 3037 "hash": "" 3038 }, 3039 { 3040 "input": "http://:b@www.example.com", 3041 "base": null, 3042 "href": "http://:b@www.example.com/", 3043 "origin": "http://www.example.com", 3044 "protocol": "http:", 3045 "username": "", 3046 "password": "b", 3047 "host": "www.example.com", 3048 "hostname": "www.example.com", 3049 "port": "", 3050 "pathname": "/", 3051 "search": "", 3052 "hash": "" 3053 }, 3054 { 3055 "input": "http:/:@/www.example.com", 3056 "base": null, 3057 "failure": true, 3058 "relativeTo": "non-opaque-path-base" 3059 }, 3060 { 3061 "input": "http://user@/www.example.com", 3062 "base": null, 3063 "failure": true 3064 }, 3065 { 3066 "input": "http:@/www.example.com", 3067 "base": null, 3068 "failure": true, 3069 "relativeTo": "non-opaque-path-base" 3070 }, 3071 { 3072 "input": "http:/@/www.example.com", 3073 "base": null, 3074 "failure": true, 3075 "relativeTo": "non-opaque-path-base" 3076 }, 3077 { 3078 "input": "http://@/www.example.com", 3079 "base": null, 3080 "failure": true 3081 }, 3082 { 3083 "input": "https:@/www.example.com", 3084 "base": null, 3085 "failure": true, 3086 "relativeTo": "non-opaque-path-base" 3087 }, 3088 { 3089 "input": "http:a:b@/www.example.com", 3090 "base": null, 3091 "failure": true, 3092 "relativeTo": "non-opaque-path-base" 3093 }, 3094 { 3095 "input": "http:/a:b@/www.example.com", 3096 "base": null, 3097 "failure": true, 3098 "relativeTo": "non-opaque-path-base" 3099 }, 3100 { 3101 "input": "http://a:b@/www.example.com", 3102 "base": null, 3103 "failure": true 3104 }, 3105 { 3106 "input": "http::@/www.example.com", 3107 "base": null, 3108 "failure": true, 3109 "relativeTo": "non-opaque-path-base" 3110 }, 3111 { 3112 "input": "http://a:@www.example.com", 3113 "base": null, 3114 "href": "http://a@www.example.com/", 3115 "origin": "http://www.example.com", 3116 "protocol": "http:", 3117 "username": "a", 3118 "password": "", 3119 "host": "www.example.com", 3120 "hostname": "www.example.com", 3121 "port": "", 3122 "pathname": "/", 3123 "search": "", 3124 "hash": "" 3125 }, 3126 { 3127 "input": "http://www.@pple.com", 3128 "base": null, 3129 "href": "http://www.@pple.com/", 3130 "origin": "http://pple.com", 3131 "protocol": "http:", 3132 "username": "www.", 3133 "password": "", 3134 "host": "pple.com", 3135 "hostname": "pple.com", 3136 "port": "", 3137 "pathname": "/", 3138 "search": "", 3139 "hash": "" 3140 }, 3141 { 3142 "input": "http:@:www.example.com", 3143 "base": null, 3144 "failure": true, 3145 "relativeTo": "non-opaque-path-base" 3146 }, 3147 { 3148 "input": "http:/@:www.example.com", 3149 "base": null, 3150 "failure": true, 3151 "relativeTo": "non-opaque-path-base" 3152 }, 3153 { 3154 "input": "http://@:www.example.com", 3155 "base": null, 3156 "failure": true 3157 }, 3158 { 3159 "input": "http://:@www.example.com", 3160 "base": null, 3161 "href": "http://www.example.com/", 3162 "origin": "http://www.example.com", 3163 "protocol": "http:", 3164 "username": "", 3165 "password": "", 3166 "host": "www.example.com", 3167 "hostname": "www.example.com", 3168 "port": "", 3169 "pathname": "/", 3170 "search": "", 3171 "hash": "" 3172 }, 3173 "# Others", 3174 { 3175 "input": "/", 3176 "base": "http://www.example.com/test", 3177 "href": "http://www.example.com/", 3178 "origin": "http://www.example.com", 3179 "protocol": "http:", 3180 "username": "", 3181 "password": "", 3182 "host": "www.example.com", 3183 "hostname": "www.example.com", 3184 "port": "", 3185 "pathname": "/", 3186 "search": "", 3187 "hash": "" 3188 }, 3189 { 3190 "input": "/test.txt", 3191 "base": "http://www.example.com/test", 3192 "href": "http://www.example.com/test.txt", 3193 "origin": "http://www.example.com", 3194 "protocol": "http:", 3195 "username": "", 3196 "password": "", 3197 "host": "www.example.com", 3198 "hostname": "www.example.com", 3199 "port": "", 3200 "pathname": "/test.txt", 3201 "search": "", 3202 "hash": "" 3203 }, 3204 { 3205 "input": ".", 3206 "base": "http://www.example.com/test", 3207 "href": "http://www.example.com/", 3208 "origin": "http://www.example.com", 3209 "protocol": "http:", 3210 "username": "", 3211 "password": "", 3212 "host": "www.example.com", 3213 "hostname": "www.example.com", 3214 "port": "", 3215 "pathname": "/", 3216 "search": "", 3217 "hash": "" 3218 }, 3219 { 3220 "input": "..", 3221 "base": "http://www.example.com/test", 3222 "href": "http://www.example.com/", 3223 "origin": "http://www.example.com", 3224 "protocol": "http:", 3225 "username": "", 3226 "password": "", 3227 "host": "www.example.com", 3228 "hostname": "www.example.com", 3229 "port": "", 3230 "pathname": "/", 3231 "search": "", 3232 "hash": "" 3233 }, 3234 { 3235 "input": "test.txt", 3236 "base": "http://www.example.com/test", 3237 "href": "http://www.example.com/test.txt", 3238 "origin": "http://www.example.com", 3239 "protocol": "http:", 3240 "username": "", 3241 "password": "", 3242 "host": "www.example.com", 3243 "hostname": "www.example.com", 3244 "port": "", 3245 "pathname": "/test.txt", 3246 "search": "", 3247 "hash": "" 3248 }, 3249 { 3250 "input": "./test.txt", 3251 "base": "http://www.example.com/test", 3252 "href": "http://www.example.com/test.txt", 3253 "origin": "http://www.example.com", 3254 "protocol": "http:", 3255 "username": "", 3256 "password": "", 3257 "host": "www.example.com", 3258 "hostname": "www.example.com", 3259 "port": "", 3260 "pathname": "/test.txt", 3261 "search": "", 3262 "hash": "" 3263 }, 3264 { 3265 "input": "../test.txt", 3266 "base": "http://www.example.com/test", 3267 "href": "http://www.example.com/test.txt", 3268 "origin": "http://www.example.com", 3269 "protocol": "http:", 3270 "username": "", 3271 "password": "", 3272 "host": "www.example.com", 3273 "hostname": "www.example.com", 3274 "port": "", 3275 "pathname": "/test.txt", 3276 "search": "", 3277 "hash": "" 3278 }, 3279 { 3280 "input": "../aaa/test.txt", 3281 "base": "http://www.example.com/test", 3282 "href": "http://www.example.com/aaa/test.txt", 3283 "origin": "http://www.example.com", 3284 "protocol": "http:", 3285 "username": "", 3286 "password": "", 3287 "host": "www.example.com", 3288 "hostname": "www.example.com", 3289 "port": "", 3290 "pathname": "/aaa/test.txt", 3291 "search": "", 3292 "hash": "" 3293 }, 3294 { 3295 "input": "../../test.txt", 3296 "base": "http://www.example.com/test", 3297 "href": "http://www.example.com/test.txt", 3298 "origin": "http://www.example.com", 3299 "protocol": "http:", 3300 "username": "", 3301 "password": "", 3302 "host": "www.example.com", 3303 "hostname": "www.example.com", 3304 "port": "", 3305 "pathname": "/test.txt", 3306 "search": "", 3307 "hash": "" 3308 }, 3309 { 3310 "input": "中/test.txt", 3311 "base": "http://www.example.com/test", 3312 "href": "http://www.example.com/%E4%B8%AD/test.txt", 3313 "origin": "http://www.example.com", 3314 "protocol": "http:", 3315 "username": "", 3316 "password": "", 3317 "host": "www.example.com", 3318 "hostname": "www.example.com", 3319 "port": "", 3320 "pathname": "/%E4%B8%AD/test.txt", 3321 "search": "", 3322 "hash": "" 3323 }, 3324 { 3325 "input": "http://www.example2.com", 3326 "base": "http://www.example.com/test", 3327 "href": "http://www.example2.com/", 3328 "origin": "http://www.example2.com", 3329 "protocol": "http:", 3330 "username": "", 3331 "password": "", 3332 "host": "www.example2.com", 3333 "hostname": "www.example2.com", 3334 "port": "", 3335 "pathname": "/", 3336 "search": "", 3337 "hash": "" 3338 }, 3339 { 3340 "input": "//www.example2.com", 3341 "base": "http://www.example.com/test", 3342 "href": "http://www.example2.com/", 3343 "origin": "http://www.example2.com", 3344 "protocol": "http:", 3345 "username": "", 3346 "password": "", 3347 "host": "www.example2.com", 3348 "hostname": "www.example2.com", 3349 "port": "", 3350 "pathname": "/", 3351 "search": "", 3352 "hash": "" 3353 }, 3354 { 3355 "input": "file:...", 3356 "base": "http://www.example.com/test", 3357 "href": "file:///...", 3358 "protocol": "file:", 3359 "username": "", 3360 "password": "", 3361 "host": "", 3362 "hostname": "", 3363 "port": "", 3364 "pathname": "/...", 3365 "search": "", 3366 "hash": "" 3367 }, 3368 { 3369 "input": "file:..", 3370 "base": "http://www.example.com/test", 3371 "href": "file:///", 3372 "protocol": "file:", 3373 "username": "", 3374 "password": "", 3375 "host": "", 3376 "hostname": "", 3377 "port": "", 3378 "pathname": "/", 3379 "search": "", 3380 "hash": "" 3381 }, 3382 { 3383 "input": "file:a", 3384 "base": "http://www.example.com/test", 3385 "href": "file:///a", 3386 "protocol": "file:", 3387 "username": "", 3388 "password": "", 3389 "host": "", 3390 "hostname": "", 3391 "port": "", 3392 "pathname": "/a", 3393 "search": "", 3394 "hash": "" 3395 }, 3396 "# Based on http://trac.webkit.org/browser/trunk/LayoutTests/fast/url/host.html", 3397 "Basic canonicalization, uppercase should be converted to lowercase", 3398 { 3399 "input": "http://ExAmPlE.CoM", 3400 "base": "http://other.com/", 3401 "href": "http://example.com/", 3402 "origin": "http://example.com", 3403 "protocol": "http:", 3404 "username": "", 3405 "password": "", 3406 "host": "example.com", 3407 "hostname": "example.com", 3408 "port": "", 3409 "pathname": "/", 3410 "search": "", 3411 "hash": "" 3412 }, 3413 { 3414 "input": "http://example example.com", 3415 "base": "http://other.com/", 3416 "failure": true 3417 }, 3418 { 3419 "input": "http://Goo%20 goo%7C|.com", 3420 "base": "http://other.com/", 3421 "failure": true 3422 }, 3423 { 3424 "input": "http://[]", 3425 "base": "http://other.com/", 3426 "failure": true 3427 }, 3428 { 3429 "input": "http://[:]", 3430 "base": "http://other.com/", 3431 "failure": true 3432 }, 3433 "U+3000 is mapped to U+0020 (space) which is disallowed", 3434 { 3435 "input": "http://GOO\u00a0\u3000goo.com", 3436 "base": "http://other.com/", 3437 "failure": true 3438 }, 3439 "Other types of space (no-break, zero-width, zero-width-no-break) are name-prepped away to nothing. U+200B, U+2060, and U+FEFF, are ignored", 3440 { 3441 "input": "http://GOO\u200b\u2060\ufeffgoo.com", 3442 "base": "http://other.com/", 3443 "href": "http://googoo.com/", 3444 "origin": "http://googoo.com", 3445 "protocol": "http:", 3446 "username": "", 3447 "password": "", 3448 "host": "googoo.com", 3449 "hostname": "googoo.com", 3450 "port": "", 3451 "pathname": "/", 3452 "search": "", 3453 "hash": "" 3454 }, 3455 "Leading and trailing C0 control or space", 3456 { 3457 "input": "\u0000\u001b\u0004\u0012 http://example.com/\u001f \u000d ", 3458 "base": null, 3459 "href": "http://example.com/", 3460 "origin": "http://example.com", 3461 "protocol": "http:", 3462 "username": "", 3463 "password": "", 3464 "host": "example.com", 3465 "hostname": "example.com", 3466 "port": "", 3467 "pathname": "/", 3468 "search": "", 3469 "hash": "" 3470 }, 3471 "Ideographic full stop (full-width period for Chinese, etc.) should be treated as a dot. U+3002 is mapped to U+002E (dot)", 3472 { 3473 "input": "http://www.foo。bar.com", 3474 "base": "http://other.com/", 3475 "href": "http://www.foo.bar.com/", 3476 "origin": "http://www.foo.bar.com", 3477 "protocol": "http:", 3478 "username": "", 3479 "password": "", 3480 "host": "www.foo.bar.com", 3481 "hostname": "www.foo.bar.com", 3482 "port": "", 3483 "pathname": "/", 3484 "search": "", 3485 "hash": "" 3486 }, 3487 "Invalid unicode characters should fail... U+FDD0 is disallowed; %ef%b7%90 is U+FDD0", 3488 { 3489 "input": "http://\ufdd0zyx.com", 3490 "base": "http://other.com/", 3491 "failure": true 3492 }, 3493 "This is the same as previous but escaped", 3494 { 3495 "input": "http://%ef%b7%90zyx.com", 3496 "base": "http://other.com/", 3497 "failure": true 3498 }, 3499 "U+FFFD", 3500 { 3501 "input": "https://\ufffd", 3502 "base": null, 3503 "failure": true 3504 }, 3505 { 3506 "input": "https://%EF%BF%BD", 3507 "base": null, 3508 "failure": true 3509 }, 3510 { 3511 "input": "https://x/\ufffd?\ufffd#\ufffd", 3512 "base": null, 3513 "href": "https://x/%EF%BF%BD?%EF%BF%BD#%EF%BF%BD", 3514 "origin": "https://x", 3515 "protocol": "https:", 3516 "username": "", 3517 "password": "", 3518 "host": "x", 3519 "hostname": "x", 3520 "port": "", 3521 "pathname": "/%EF%BF%BD", 3522 "search": "?%EF%BF%BD", 3523 "hash": "#%EF%BF%BD" 3524 }, 3525 "Domain is ASCII, but a label is invalid IDNA", 3526 { 3527 "input": "http://a.b.c.xn--pokxncvks", 3528 "base": null, 3529 "failure": true 3530 }, 3531 { 3532 "input": "http://10.0.0.xn--pokxncvks", 3533 "base": null, 3534 "failure": true 3535 }, 3536 "IDNA labels should be matched case-insensitively", 3537 { 3538 "input": "http://a.b.c.XN--pokxncvks", 3539 "base": null, 3540 "failure": true 3541 }, 3542 { 3543 "input": "http://a.b.c.Xn--pokxncvks", 3544 "base": null, 3545 "failure": true 3546 }, 3547 { 3548 "input": "http://10.0.0.XN--pokxncvks", 3549 "base": null, 3550 "failure": true 3551 }, 3552 { 3553 "input": "http://10.0.0.xN--pokxncvks", 3554 "base": null, 3555 "failure": true 3556 }, 3557 "Test name prepping, fullwidth input should be converted to ASCII and NOT IDN-ized. This is 'Go' in fullwidth UTF-8/UTF-16.", 3558 { 3559 "input": "http://Go.com", 3560 "base": "http://other.com/", 3561 "href": "http://go.com/", 3562 "origin": "http://go.com", 3563 "protocol": "http:", 3564 "username": "", 3565 "password": "", 3566 "host": "go.com", 3567 "hostname": "go.com", 3568 "port": "", 3569 "pathname": "/", 3570 "search": "", 3571 "hash": "" 3572 }, 3573 "URL spec forbids the following. https://www.w3.org/Bugs/Public/show_bug.cgi?id=24257", 3574 { 3575 "input": "http://%41.com", 3576 "base": "http://other.com/", 3577 "failure": true 3578 }, 3579 { 3580 "input": "http://%ef%bc%85%ef%bc%94%ef%bc%91.com", 3581 "base": "http://other.com/", 3582 "failure": true 3583 }, 3584 "...%00 in fullwidth should fail (also as escaped UTF-8 input)", 3585 { 3586 "input": "http://%00.com", 3587 "base": "http://other.com/", 3588 "failure": true 3589 }, 3590 { 3591 "input": "http://%ef%bc%85%ef%bc%90%ef%bc%90.com", 3592 "base": "http://other.com/", 3593 "failure": true 3594 }, 3595 "Basic IDN support, UTF-8 and UTF-16 input should be converted to IDN", 3596 { 3597 "input": "http://你好你好", 3598 "base": "http://other.com/", 3599 "href": "http://xn--6qqa088eba/", 3600 "origin": "http://xn--6qqa088eba", 3601 "protocol": "http:", 3602 "username": "", 3603 "password": "", 3604 "host": "xn--6qqa088eba", 3605 "hostname": "xn--6qqa088eba", 3606 "port": "", 3607 "pathname": "/", 3608 "search": "", 3609 "hash": "" 3610 }, 3611 { 3612 "input": "https://faß.ExAmPlE/", 3613 "base": null, 3614 "href": "https://xn--fa-hia.example/", 3615 "origin": "https://xn--fa-hia.example", 3616 "protocol": "https:", 3617 "username": "", 3618 "password": "", 3619 "host": "xn--fa-hia.example", 3620 "hostname": "xn--fa-hia.example", 3621 "port": "", 3622 "pathname": "/", 3623 "search": "", 3624 "hash": "" 3625 }, 3626 { 3627 "input": "sc://faß.ExAmPlE/", 3628 "base": null, 3629 "href": "sc://fa%C3%9F.ExAmPlE/", 3630 "origin": "null", 3631 "protocol": "sc:", 3632 "username": "", 3633 "password": "", 3634 "host": "fa%C3%9F.ExAmPlE", 3635 "hostname": "fa%C3%9F.ExAmPlE", 3636 "port": "", 3637 "pathname": "/", 3638 "search": "", 3639 "hash": "" 3640 }, 3641 "Invalid escaped characters should fail and the percents should be escaped. https://www.w3.org/Bugs/Public/show_bug.cgi?id=24191", 3642 { 3643 "input": "http://%zz%66%a.com", 3644 "base": "http://other.com/", 3645 "failure": true 3646 }, 3647 "If we get an invalid character that has been escaped.", 3648 { 3649 "input": "http://%25", 3650 "base": "http://other.com/", 3651 "failure": true 3652 }, 3653 { 3654 "input": "http://hello%00", 3655 "base": "http://other.com/", 3656 "failure": true 3657 }, 3658 "Escaped numbers should be treated like IP addresses if they are.", 3659 { 3660 "input": "http://%30%78%63%30%2e%30%32%35%30.01", 3661 "base": "http://other.com/", 3662 "href": "http://192.168.0.1/", 3663 "origin": "http://192.168.0.1", 3664 "protocol": "http:", 3665 "username": "", 3666 "password": "", 3667 "host": "192.168.0.1", 3668 "hostname": "192.168.0.1", 3669 "port": "", 3670 "pathname": "/", 3671 "search": "", 3672 "hash": "" 3673 }, 3674 { 3675 "input": "http://%30%78%63%30%2e%30%32%35%30.01%2e", 3676 "base": "http://other.com/", 3677 "href": "http://192.168.0.1/", 3678 "origin": "http://192.168.0.1", 3679 "protocol": "http:", 3680 "username": "", 3681 "password": "", 3682 "host": "192.168.0.1", 3683 "hostname": "192.168.0.1", 3684 "port": "", 3685 "pathname": "/", 3686 "search": "", 3687 "hash": "" 3688 }, 3689 { 3690 "input": "http://192.168.0.257", 3691 "base": "http://other.com/", 3692 "failure": true 3693 }, 3694 "Invalid escaping in hosts causes failure", 3695 { 3696 "input": "http://%3g%78%63%30%2e%30%32%35%30%2E.01", 3697 "base": "http://other.com/", 3698 "failure": true 3699 }, 3700 "A space in a host causes failure", 3701 { 3702 "input": "http://192.168.0.1 hello", 3703 "base": "http://other.com/", 3704 "failure": true 3705 }, 3706 { 3707 "input": "https://x x:12", 3708 "base": null, 3709 "failure": true 3710 }, 3711 "Fullwidth and escaped UTF-8 fullwidth should still be treated as IP", 3712 { 3713 "input": "http://0Xc0.0250.01", 3714 "base": "http://other.com/", 3715 "href": "http://192.168.0.1/", 3716 "origin": "http://192.168.0.1", 3717 "protocol": "http:", 3718 "username": "", 3719 "password": "", 3720 "host": "192.168.0.1", 3721 "hostname": "192.168.0.1", 3722 "port": "", 3723 "pathname": "/", 3724 "search": "", 3725 "hash": "" 3726 }, 3727 "Domains with empty labels", 3728 { 3729 "input": "http://./", 3730 "base": null, 3731 "href": "http://./", 3732 "origin": "http://.", 3733 "protocol": "http:", 3734 "username": "", 3735 "password": "", 3736 "host": ".", 3737 "hostname": ".", 3738 "port": "", 3739 "pathname": "/", 3740 "search": "", 3741 "hash": "" 3742 }, 3743 { 3744 "input": "http://../", 3745 "base": null, 3746 "href": "http://../", 3747 "origin": "http://..", 3748 "protocol": "http:", 3749 "username": "", 3750 "password": "", 3751 "host": "..", 3752 "hostname": "..", 3753 "port": "", 3754 "pathname": "/", 3755 "search": "", 3756 "hash": "" 3757 }, 3758 "Non-special domains with empty labels", 3759 { 3760 "input": "h://.", 3761 "base": null, 3762 "href": "h://.", 3763 "origin": "null", 3764 "protocol": "h:", 3765 "username": "", 3766 "password": "", 3767 "host": ".", 3768 "hostname": ".", 3769 "port": "", 3770 "pathname": "", 3771 "search": "", 3772 "hash": "" 3773 }, 3774 "Broken IPv6", 3775 { 3776 "input": "http://[www.google.com]/", 3777 "base": null, 3778 "failure": true 3779 }, 3780 { 3781 "input": "http://[google.com]", 3782 "base": "http://other.com/", 3783 "failure": true 3784 }, 3785 { 3786 "input": "http://[::1.2.3.4x]", 3787 "base": "http://other.com/", 3788 "failure": true 3789 }, 3790 { 3791 "input": "http://[::1.2.3.]", 3792 "base": "http://other.com/", 3793 "failure": true 3794 }, 3795 { 3796 "input": "http://[::1.2.]", 3797 "base": "http://other.com/", 3798 "failure": true 3799 }, 3800 { 3801 "input": "http://[::.1.2]", 3802 "base": "http://other.com/", 3803 "failure": true 3804 }, 3805 { 3806 "input": "http://[::1.]", 3807 "base": "http://other.com/", 3808 "failure": true 3809 }, 3810 { 3811 "input": "http://[::.1]", 3812 "base": "http://other.com/", 3813 "failure": true 3814 }, 3815 { 3816 "input": "http://[::%31]", 3817 "base": "http://other.com/", 3818 "failure": true 3819 }, 3820 { 3821 "input": "http://%5B::1]", 3822 "base": "http://other.com/", 3823 "failure": true 3824 }, 3825 "Misc Unicode", 3826 { 3827 "input": "http://foo:💩@example.com/bar", 3828 "base": "http://other.com/", 3829 "href": "http://foo:%F0%9F%92%A9@example.com/bar", 3830 "origin": "http://example.com", 3831 "protocol": "http:", 3832 "username": "foo", 3833 "password": "%F0%9F%92%A9", 3834 "host": "example.com", 3835 "hostname": "example.com", 3836 "port": "", 3837 "pathname": "/bar", 3838 "search": "", 3839 "hash": "" 3840 }, 3841 "# resolving a fragment against any scheme succeeds", 3842 { 3843 "input": "#", 3844 "base": "test:test", 3845 "href": "test:test#", 3846 "origin": "null", 3847 "protocol": "test:", 3848 "username": "", 3849 "password": "", 3850 "host": "", 3851 "hostname": "", 3852 "port": "", 3853 "pathname": "test", 3854 "search": "", 3855 "hash": "" 3856 }, 3857 { 3858 "input": "#x", 3859 "base": "mailto:x@x.com", 3860 "href": "mailto:x@x.com#x", 3861 "origin": "null", 3862 "protocol": "mailto:", 3863 "username": "", 3864 "password": "", 3865 "host": "", 3866 "hostname": "", 3867 "port": "", 3868 "pathname": "x@x.com", 3869 "search": "", 3870 "hash": "#x" 3871 }, 3872 { 3873 "input": "#x", 3874 "base": "data:,", 3875 "href": "data:,#x", 3876 "origin": "null", 3877 "protocol": "data:", 3878 "username": "", 3879 "password": "", 3880 "host": "", 3881 "hostname": "", 3882 "port": "", 3883 "pathname": ",", 3884 "search": "", 3885 "hash": "#x" 3886 }, 3887 { 3888 "input": "#x", 3889 "base": "about:blank", 3890 "href": "about:blank#x", 3891 "origin": "null", 3892 "protocol": "about:", 3893 "username": "", 3894 "password": "", 3895 "host": "", 3896 "hostname": "", 3897 "port": "", 3898 "pathname": "blank", 3899 "search": "", 3900 "hash": "#x" 3901 }, 3902 { 3903 "input": "#x:y", 3904 "base": "about:blank", 3905 "href": "about:blank#x:y", 3906 "origin": "null", 3907 "protocol": "about:", 3908 "username": "", 3909 "password": "", 3910 "host": "", 3911 "hostname": "", 3912 "port": "", 3913 "pathname": "blank", 3914 "search": "", 3915 "hash": "#x:y" 3916 }, 3917 { 3918 "input": "#", 3919 "base": "test:test?test", 3920 "href": "test:test?test#", 3921 "origin": "null", 3922 "protocol": "test:", 3923 "username": "", 3924 "password": "", 3925 "host": "", 3926 "hostname": "", 3927 "port": "", 3928 "pathname": "test", 3929 "search": "?test", 3930 "hash": "" 3931 }, 3932 "# multiple @ in authority state", 3933 { 3934 "input": "https://@test@test@example:800/", 3935 "base": "http://doesnotmatter/", 3936 "href": "https://%40test%40test@example:800/", 3937 "origin": "https://example:800", 3938 "protocol": "https:", 3939 "username": "%40test%40test", 3940 "password": "", 3941 "host": "example:800", 3942 "hostname": "example", 3943 "port": "800", 3944 "pathname": "/", 3945 "search": "", 3946 "hash": "" 3947 }, 3948 { 3949 "input": "https://@@@example", 3950 "base": "http://doesnotmatter/", 3951 "href": "https://%40%40@example/", 3952 "origin": "https://example", 3953 "protocol": "https:", 3954 "username": "%40%40", 3955 "password": "", 3956 "host": "example", 3957 "hostname": "example", 3958 "port": "", 3959 "pathname": "/", 3960 "search": "", 3961 "hash": "" 3962 }, 3963 "non-az-09 characters", 3964 { 3965 "input": "http://`{}:`{}@h/`{}?`{}", 3966 "base": "http://doesnotmatter/", 3967 "href": "http://%60%7B%7D:%60%7B%7D@h/%60%7B%7D?`{}", 3968 "origin": "http://h", 3969 "protocol": "http:", 3970 "username": "%60%7B%7D", 3971 "password": "%60%7B%7D", 3972 "host": "h", 3973 "hostname": "h", 3974 "port": "", 3975 "pathname": "/%60%7B%7D", 3976 "search": "?`{}", 3977 "hash": "" 3978 }, 3979 "byte is ' and url is special", 3980 { 3981 "input": "http://host/?'", 3982 "base": null, 3983 "href": "http://host/?%27", 3984 "origin": "http://host", 3985 "protocol": "http:", 3986 "username": "", 3987 "password": "", 3988 "host": "host", 3989 "hostname": "host", 3990 "port": "", 3991 "pathname": "/", 3992 "search": "?%27", 3993 "hash": "" 3994 }, 3995 { 3996 "input": "notspecial://host/?'", 3997 "base": null, 3998 "href": "notspecial://host/?'", 3999 "origin": "null", 4000 "protocol": "notspecial:", 4001 "username": "", 4002 "password": "", 4003 "host": "host", 4004 "hostname": "host", 4005 "port": "", 4006 "pathname": "/", 4007 "search": "?'", 4008 "hash": "" 4009 }, 4010 "# Credentials in base", 4011 { 4012 "input": "/some/path", 4013 "base": "http://user@example.org/smth", 4014 "href": "http://user@example.org/some/path", 4015 "origin": "http://example.org", 4016 "protocol": "http:", 4017 "username": "user", 4018 "password": "", 4019 "host": "example.org", 4020 "hostname": "example.org", 4021 "port": "", 4022 "pathname": "/some/path", 4023 "search": "", 4024 "hash": "" 4025 }, 4026 { 4027 "input": "", 4028 "base": "http://user:pass@example.org:21/smth", 4029 "href": "http://user:pass@example.org:21/smth", 4030 "origin": "http://example.org:21", 4031 "protocol": "http:", 4032 "username": "user", 4033 "password": "pass", 4034 "host": "example.org:21", 4035 "hostname": "example.org", 4036 "port": "21", 4037 "pathname": "/smth", 4038 "search": "", 4039 "hash": "" 4040 }, 4041 { 4042 "input": "/some/path", 4043 "base": "http://user:pass@example.org:21/smth", 4044 "href": "http://user:pass@example.org:21/some/path", 4045 "origin": "http://example.org:21", 4046 "protocol": "http:", 4047 "username": "user", 4048 "password": "pass", 4049 "host": "example.org:21", 4050 "hostname": "example.org", 4051 "port": "21", 4052 "pathname": "/some/path", 4053 "search": "", 4054 "hash": "" 4055 }, 4056 "# a set of tests designed by zcorpan for relative URLs with unknown schemes", 4057 { 4058 "input": "i", 4059 "base": "sc:sd", 4060 "failure": true 4061 }, 4062 { 4063 "input": "i", 4064 "base": "sc:sd/sd", 4065 "failure": true 4066 }, 4067 { 4068 "input": "i", 4069 "base": "sc:/pa/pa", 4070 "href": "sc:/pa/i", 4071 "origin": "null", 4072 "protocol": "sc:", 4073 "username": "", 4074 "password": "", 4075 "host": "", 4076 "hostname": "", 4077 "port": "", 4078 "pathname": "/pa/i", 4079 "search": "", 4080 "hash": "" 4081 }, 4082 { 4083 "input": "i", 4084 "base": "sc://ho/pa", 4085 "href": "sc://ho/i", 4086 "origin": "null", 4087 "protocol": "sc:", 4088 "username": "", 4089 "password": "", 4090 "host": "ho", 4091 "hostname": "ho", 4092 "port": "", 4093 "pathname": "/i", 4094 "search": "", 4095 "hash": "" 4096 }, 4097 { 4098 "input": "i", 4099 "base": "sc:///pa/pa", 4100 "href": "sc:///pa/i", 4101 "origin": "null", 4102 "protocol": "sc:", 4103 "username": "", 4104 "password": "", 4105 "host": "", 4106 "hostname": "", 4107 "port": "", 4108 "pathname": "/pa/i", 4109 "search": "", 4110 "hash": "" 4111 }, 4112 { 4113 "input": "../i", 4114 "base": "sc:sd", 4115 "failure": true 4116 }, 4117 { 4118 "input": "../i", 4119 "base": "sc:sd/sd", 4120 "failure": true 4121 }, 4122 { 4123 "input": "../i", 4124 "base": "sc:/pa/pa", 4125 "href": "sc:/i", 4126 "origin": "null", 4127 "protocol": "sc:", 4128 "username": "", 4129 "password": "", 4130 "host": "", 4131 "hostname": "", 4132 "port": "", 4133 "pathname": "/i", 4134 "search": "", 4135 "hash": "" 4136 }, 4137 { 4138 "input": "../i", 4139 "base": "sc://ho/pa", 4140 "href": "sc://ho/i", 4141 "origin": "null", 4142 "protocol": "sc:", 4143 "username": "", 4144 "password": "", 4145 "host": "ho", 4146 "hostname": "ho", 4147 "port": "", 4148 "pathname": "/i", 4149 "search": "", 4150 "hash": "" 4151 }, 4152 { 4153 "input": "../i", 4154 "base": "sc:///pa/pa", 4155 "href": "sc:///i", 4156 "origin": "null", 4157 "protocol": "sc:", 4158 "username": "", 4159 "password": "", 4160 "host": "", 4161 "hostname": "", 4162 "port": "", 4163 "pathname": "/i", 4164 "search": "", 4165 "hash": "" 4166 }, 4167 { 4168 "input": "/i", 4169 "base": "sc:sd", 4170 "failure": true 4171 }, 4172 { 4173 "input": "/i", 4174 "base": "sc:sd/sd", 4175 "failure": true 4176 }, 4177 { 4178 "input": "/i", 4179 "base": "sc:/pa/pa", 4180 "href": "sc:/i", 4181 "origin": "null", 4182 "protocol": "sc:", 4183 "username": "", 4184 "password": "", 4185 "host": "", 4186 "hostname": "", 4187 "port": "", 4188 "pathname": "/i", 4189 "search": "", 4190 "hash": "" 4191 }, 4192 { 4193 "input": "/i", 4194 "base": "sc://ho/pa", 4195 "href": "sc://ho/i", 4196 "origin": "null", 4197 "protocol": "sc:", 4198 "username": "", 4199 "password": "", 4200 "host": "ho", 4201 "hostname": "ho", 4202 "port": "", 4203 "pathname": "/i", 4204 "search": "", 4205 "hash": "" 4206 }, 4207 { 4208 "input": "/i", 4209 "base": "sc:///pa/pa", 4210 "href": "sc:///i", 4211 "origin": "null", 4212 "protocol": "sc:", 4213 "username": "", 4214 "password": "", 4215 "host": "", 4216 "hostname": "", 4217 "port": "", 4218 "pathname": "/i", 4219 "search": "", 4220 "hash": "" 4221 }, 4222 { 4223 "input": "?i", 4224 "base": "sc:sd", 4225 "failure": true 4226 }, 4227 { 4228 "input": "?i", 4229 "base": "sc:sd/sd", 4230 "failure": true 4231 }, 4232 { 4233 "input": "?i", 4234 "base": "sc:/pa/pa", 4235 "href": "sc:/pa/pa?i", 4236 "origin": "null", 4237 "protocol": "sc:", 4238 "username": "", 4239 "password": "", 4240 "host": "", 4241 "hostname": "", 4242 "port": "", 4243 "pathname": "/pa/pa", 4244 "search": "?i", 4245 "hash": "" 4246 }, 4247 { 4248 "input": "?i", 4249 "base": "sc://ho/pa", 4250 "href": "sc://ho/pa?i", 4251 "origin": "null", 4252 "protocol": "sc:", 4253 "username": "", 4254 "password": "", 4255 "host": "ho", 4256 "hostname": "ho", 4257 "port": "", 4258 "pathname": "/pa", 4259 "search": "?i", 4260 "hash": "" 4261 }, 4262 { 4263 "input": "?i", 4264 "base": "sc:///pa/pa", 4265 "href": "sc:///pa/pa?i", 4266 "origin": "null", 4267 "protocol": "sc:", 4268 "username": "", 4269 "password": "", 4270 "host": "", 4271 "hostname": "", 4272 "port": "", 4273 "pathname": "/pa/pa", 4274 "search": "?i", 4275 "hash": "" 4276 }, 4277 { 4278 "input": "#i", 4279 "base": "sc:sd", 4280 "href": "sc:sd#i", 4281 "origin": "null", 4282 "protocol": "sc:", 4283 "username": "", 4284 "password": "", 4285 "host": "", 4286 "hostname": "", 4287 "port": "", 4288 "pathname": "sd", 4289 "search": "", 4290 "hash": "#i" 4291 }, 4292 { 4293 "input": "#i", 4294 "base": "sc:sd/sd", 4295 "href": "sc:sd/sd#i", 4296 "origin": "null", 4297 "protocol": "sc:", 4298 "username": "", 4299 "password": "", 4300 "host": "", 4301 "hostname": "", 4302 "port": "", 4303 "pathname": "sd/sd", 4304 "search": "", 4305 "hash": "#i" 4306 }, 4307 { 4308 "input": "#i", 4309 "base": "sc:/pa/pa", 4310 "href": "sc:/pa/pa#i", 4311 "origin": "null", 4312 "protocol": "sc:", 4313 "username": "", 4314 "password": "", 4315 "host": "", 4316 "hostname": "", 4317 "port": "", 4318 "pathname": "/pa/pa", 4319 "search": "", 4320 "hash": "#i" 4321 }, 4322 { 4323 "input": "#i", 4324 "base": "sc://ho/pa", 4325 "href": "sc://ho/pa#i", 4326 "origin": "null", 4327 "protocol": "sc:", 4328 "username": "", 4329 "password": "", 4330 "host": "ho", 4331 "hostname": "ho", 4332 "port": "", 4333 "pathname": "/pa", 4334 "search": "", 4335 "hash": "#i" 4336 }, 4337 { 4338 "input": "#i", 4339 "base": "sc:///pa/pa", 4340 "href": "sc:///pa/pa#i", 4341 "origin": "null", 4342 "protocol": "sc:", 4343 "username": "", 4344 "password": "", 4345 "host": "", 4346 "hostname": "", 4347 "port": "", 4348 "pathname": "/pa/pa", 4349 "search": "", 4350 "hash": "#i" 4351 }, 4352 "# make sure that relative URL logic works on known typically non-relative schemes too", 4353 { 4354 "input": "data:/../", 4355 "base": null, 4356 "href": "data:/", 4357 "origin": "null", 4358 "protocol": "data:", 4359 "username": "", 4360 "password": "", 4361 "host": "", 4362 "hostname": "", 4363 "port": "", 4364 "pathname": "/", 4365 "search": "", 4366 "hash": "" 4367 }, 4368 { 4369 "input": "javascript:/../", 4370 "base": null, 4371 "href": "javascript:/", 4372 "origin": "null", 4373 "protocol": "javascript:", 4374 "username": "", 4375 "password": "", 4376 "host": "", 4377 "hostname": "", 4378 "port": "", 4379 "pathname": "/", 4380 "search": "", 4381 "hash": "" 4382 }, 4383 { 4384 "input": "mailto:/../", 4385 "base": null, 4386 "href": "mailto:/", 4387 "origin": "null", 4388 "protocol": "mailto:", 4389 "username": "", 4390 "password": "", 4391 "host": "", 4392 "hostname": "", 4393 "port": "", 4394 "pathname": "/", 4395 "search": "", 4396 "hash": "" 4397 }, 4398 "# unknown schemes and their hosts", 4399 { 4400 "input": "sc://ñ.test/", 4401 "base": null, 4402 "href": "sc://%C3%B1.test/", 4403 "origin": "null", 4404 "protocol": "sc:", 4405 "username": "", 4406 "password": "", 4407 "host": "%C3%B1.test", 4408 "hostname": "%C3%B1.test", 4409 "port": "", 4410 "pathname": "/", 4411 "search": "", 4412 "hash": "" 4413 }, 4414 { 4415 "input": "sc://%/", 4416 "base": null, 4417 "href": "sc://%/", 4418 "protocol": "sc:", 4419 "username": "", 4420 "password": "", 4421 "host": "%", 4422 "hostname": "%", 4423 "port": "", 4424 "pathname": "/", 4425 "search": "", 4426 "hash": "" 4427 }, 4428 { 4429 "input": "sc://@/", 4430 "base": null, 4431 "failure": true 4432 }, 4433 { 4434 "input": "sc://te@s:t@/", 4435 "base": null, 4436 "failure": true 4437 }, 4438 { 4439 "input": "sc://:/", 4440 "base": null, 4441 "failure": true 4442 }, 4443 { 4444 "input": "sc://:12/", 4445 "base": null, 4446 "failure": true 4447 }, 4448 { 4449 "input": "x", 4450 "base": "sc://ñ", 4451 "href": "sc://%C3%B1/x", 4452 "origin": "null", 4453 "protocol": "sc:", 4454 "username": "", 4455 "password": "", 4456 "host": "%C3%B1", 4457 "hostname": "%C3%B1", 4458 "port": "", 4459 "pathname": "/x", 4460 "search": "", 4461 "hash": "" 4462 }, 4463 "# unknown schemes and backslashes", 4464 { 4465 "input": "sc:\\../", 4466 "base": null, 4467 "href": "sc:\\../", 4468 "origin": "null", 4469 "protocol": "sc:", 4470 "username": "", 4471 "password": "", 4472 "host": "", 4473 "hostname": "", 4474 "port": "", 4475 "pathname": "\\../", 4476 "search": "", 4477 "hash": "" 4478 }, 4479 "# unknown scheme with path looking like a password", 4480 { 4481 "input": "sc::a@example.net", 4482 "base": null, 4483 "href": "sc::a@example.net", 4484 "origin": "null", 4485 "protocol": "sc:", 4486 "username": "", 4487 "password": "", 4488 "host": "", 4489 "hostname": "", 4490 "port": "", 4491 "pathname": ":a@example.net", 4492 "search": "", 4493 "hash": "" 4494 }, 4495 "# unknown scheme with bogus percent-encoding", 4496 { 4497 "input": "wow:%NBD", 4498 "base": null, 4499 "href": "wow:%NBD", 4500 "origin": "null", 4501 "protocol": "wow:", 4502 "username": "", 4503 "password": "", 4504 "host": "", 4505 "hostname": "", 4506 "port": "", 4507 "pathname": "%NBD", 4508 "search": "", 4509 "hash": "" 4510 }, 4511 { 4512 "input": "wow:%1G", 4513 "base": null, 4514 "href": "wow:%1G", 4515 "origin": "null", 4516 "protocol": "wow:", 4517 "username": "", 4518 "password": "", 4519 "host": "", 4520 "hostname": "", 4521 "port": "", 4522 "pathname": "%1G", 4523 "search": "", 4524 "hash": "" 4525 }, 4526 "# unknown scheme with non-URL characters", 4527 { 4528 "input": "wow:\uFFFF", 4529 "base": null, 4530 "href": "wow:%EF%BF%BF", 4531 "origin": "null", 4532 "protocol": "wow:", 4533 "username": "", 4534 "password": "", 4535 "host": "", 4536 "hostname": "", 4537 "port": "", 4538 "pathname": "%EF%BF%BF", 4539 "search": "", 4540 "hash": "" 4541 }, 4542 "Forbidden host code points", 4543 { 4544 "input": "sc://a\u0000b/", 4545 "base": null, 4546 "failure": true 4547 }, 4548 { 4549 "input": "sc://a b/", 4550 "base": null, 4551 "failure": true 4552 }, 4553 { 4554 "input": "sc://a<b", 4555 "base": null, 4556 "failure": true 4557 }, 4558 { 4559 "input": "sc://a>b", 4560 "base": null, 4561 "failure": true 4562 }, 4563 { 4564 "input": "sc://a[b/", 4565 "base": null, 4566 "failure": true 4567 }, 4568 { 4569 "input": "sc://a\\b/", 4570 "base": null, 4571 "failure": true 4572 }, 4573 { 4574 "input": "sc://a]b/", 4575 "base": null, 4576 "failure": true 4577 }, 4578 { 4579 "input": "sc://a^b", 4580 "base": null, 4581 "failure": true 4582 }, 4583 { 4584 "input": "sc://a|b/", 4585 "base": null, 4586 "failure": true 4587 }, 4588 "Forbidden host codepoints: tabs and newlines are removed during preprocessing", 4589 { 4590 "input": "foo://ho\u0009st/", 4591 "base": null, 4592 "hash": "", 4593 "host": "host", 4594 "hostname": "host", 4595 "href": "foo://host/", 4596 "password": "", 4597 "pathname": "/", 4598 "port": "", 4599 "protocol": "foo:", 4600 "search": "", 4601 "username": "" 4602 }, 4603 { 4604 "input": "foo://ho\u000Ast/", 4605 "base": null, 4606 "hash": "", 4607 "host": "host", 4608 "hostname": "host", 4609 "href": "foo://host/", 4610 "password": "", 4611 "pathname": "/", 4612 "port": "", 4613 "protocol": "foo:", 4614 "search": "", 4615 "username": "" 4616 }, 4617 { 4618 "input": "foo://ho\u000Dst/", 4619 "base": null, 4620 "hash": "", 4621 "host": "host", 4622 "hostname": "host", 4623 "href": "foo://host/", 4624 "password": "", 4625 "pathname": "/", 4626 "port": "", 4627 "protocol": "foo:", 4628 "search": "", 4629 "username": "" 4630 }, 4631 "Forbidden domain code-points", 4632 { 4633 "input": "http://a\u0000b/", 4634 "base": null, 4635 "failure": true 4636 }, 4637 { 4638 "input": "http://a\u0001b/", 4639 "base": null, 4640 "failure": true 4641 }, 4642 { 4643 "input": "http://a\u0002b/", 4644 "base": null, 4645 "failure": true 4646 }, 4647 { 4648 "input": "http://a\u0003b/", 4649 "base": null, 4650 "failure": true 4651 }, 4652 { 4653 "input": "http://a\u0004b/", 4654 "base": null, 4655 "failure": true 4656 }, 4657 { 4658 "input": "http://a\u0005b/", 4659 "base": null, 4660 "failure": true 4661 }, 4662 { 4663 "input": "http://a\u0006b/", 4664 "base": null, 4665 "failure": true 4666 }, 4667 { 4668 "input": "http://a\u0007b/", 4669 "base": null, 4670 "failure": true 4671 }, 4672 { 4673 "input": "http://a\u0008b/", 4674 "base": null, 4675 "failure": true 4676 }, 4677 { 4678 "input": "http://a\u000Bb/", 4679 "base": null, 4680 "failure": true 4681 }, 4682 { 4683 "input": "http://a\u000Cb/", 4684 "base": null, 4685 "failure": true 4686 }, 4687 { 4688 "input": "http://a\u000Eb/", 4689 "base": null, 4690 "failure": true 4691 }, 4692 { 4693 "input": "http://a\u000Fb/", 4694 "base": null, 4695 "failure": true 4696 }, 4697 { 4698 "input": "http://a\u0010b/", 4699 "base": null, 4700 "failure": true 4701 }, 4702 { 4703 "input": "http://a\u0011b/", 4704 "base": null, 4705 "failure": true 4706 }, 4707 { 4708 "input": "http://a\u0012b/", 4709 "base": null, 4710 "failure": true 4711 }, 4712 { 4713 "input": "http://a\u0013b/", 4714 "base": null, 4715 "failure": true 4716 }, 4717 { 4718 "input": "http://a\u0014b/", 4719 "base": null, 4720 "failure": true 4721 }, 4722 { 4723 "input": "http://a\u0015b/", 4724 "base": null, 4725 "failure": true 4726 }, 4727 { 4728 "input": "http://a\u0016b/", 4729 "base": null, 4730 "failure": true 4731 }, 4732 { 4733 "input": "http://a\u0017b/", 4734 "base": null, 4735 "failure": true 4736 }, 4737 { 4738 "input": "http://a\u0018b/", 4739 "base": null, 4740 "failure": true 4741 }, 4742 { 4743 "input": "http://a\u0019b/", 4744 "base": null, 4745 "failure": true 4746 }, 4747 { 4748 "input": "http://a\u001Ab/", 4749 "base": null, 4750 "failure": true 4751 }, 4752 { 4753 "input": "http://a\u001Bb/", 4754 "base": null, 4755 "failure": true 4756 }, 4757 { 4758 "input": "http://a\u001Cb/", 4759 "base": null, 4760 "failure": true 4761 }, 4762 { 4763 "input": "http://a\u001Db/", 4764 "base": null, 4765 "failure": true 4766 }, 4767 { 4768 "input": "http://a\u001Eb/", 4769 "base": null, 4770 "failure": true 4771 }, 4772 { 4773 "input": "http://a\u001Fb/", 4774 "base": null, 4775 "failure": true 4776 }, 4777 { 4778 "input": "http://a b/", 4779 "base": null, 4780 "failure": true 4781 }, 4782 { 4783 "input": "http://a%b/", 4784 "base": null, 4785 "failure": true 4786 }, 4787 { 4788 "input": "http://a<b", 4789 "base": null, 4790 "failure": true 4791 }, 4792 { 4793 "input": "http://a>b", 4794 "base": null, 4795 "failure": true 4796 }, 4797 { 4798 "input": "http://a[b/", 4799 "base": null, 4800 "failure": true 4801 }, 4802 { 4803 "input": "http://a]b/", 4804 "base": null, 4805 "failure": true 4806 }, 4807 { 4808 "input": "http://a^b", 4809 "base": null, 4810 "failure": true 4811 }, 4812 { 4813 "input": "http://a|b/", 4814 "base": null, 4815 "failure": true 4816 }, 4817 { 4818 "input": "http://a\u007Fb/", 4819 "base": null, 4820 "failure": true 4821 }, 4822 "Forbidden domain codepoints: tabs and newlines are removed during preprocessing", 4823 { 4824 "input": "http://ho\u0009st/", 4825 "base": null, 4826 "hash": "", 4827 "host": "host", 4828 "hostname": "host", 4829 "href": "http://host/", 4830 "password": "", 4831 "pathname": "/", 4832 "port": "", 4833 "protocol": "http:", 4834 "search": "", 4835 "username": "" 4836 }, 4837 { 4838 "input": "http://ho\u000Ast/", 4839 "base": null, 4840 "hash": "", 4841 "host": "host", 4842 "hostname": "host", 4843 "href": "http://host/", 4844 "password": "", 4845 "pathname": "/", 4846 "port": "", 4847 "protocol": "http:", 4848 "search": "", 4849 "username": "" 4850 }, 4851 { 4852 "input": "http://ho\u000Dst/", 4853 "base": null, 4854 "hash": "", 4855 "host": "host", 4856 "hostname": "host", 4857 "href": "http://host/", 4858 "password": "", 4859 "pathname": "/", 4860 "port": "", 4861 "protocol": "http:", 4862 "search": "", 4863 "username": "" 4864 }, 4865 "Encoded forbidden domain codepoints in special URLs", 4866 { 4867 "input": "http://ho%00st/", 4868 "base": null, 4869 "failure": true 4870 }, 4871 { 4872 "input": "http://ho%01st/", 4873 "base": null, 4874 "failure": true 4875 }, 4876 { 4877 "input": "http://ho%02st/", 4878 "base": null, 4879 "failure": true 4880 }, 4881 { 4882 "input": "http://ho%03st/", 4883 "base": null, 4884 "failure": true 4885 }, 4886 { 4887 "input": "http://ho%04st/", 4888 "base": null, 4889 "failure": true 4890 }, 4891 { 4892 "input": "http://ho%05st/", 4893 "base": null, 4894 "failure": true 4895 }, 4896 { 4897 "input": "http://ho%06st/", 4898 "base": null, 4899 "failure": true 4900 }, 4901 { 4902 "input": "http://ho%07st/", 4903 "base": null, 4904 "failure": true 4905 }, 4906 { 4907 "input": "http://ho%08st/", 4908 "base": null, 4909 "failure": true 4910 }, 4911 { 4912 "input": "http://ho%09st/", 4913 "base": null, 4914 "failure": true 4915 }, 4916 { 4917 "input": "http://ho%0Ast/", 4918 "base": null, 4919 "failure": true 4920 }, 4921 { 4922 "input": "http://ho%0Bst/", 4923 "base": null, 4924 "failure": true 4925 }, 4926 { 4927 "input": "http://ho%0Cst/", 4928 "base": null, 4929 "failure": true 4930 }, 4931 { 4932 "input": "http://ho%0Dst/", 4933 "base": null, 4934 "failure": true 4935 }, 4936 { 4937 "input": "http://ho%0Est/", 4938 "base": null, 4939 "failure": true 4940 }, 4941 { 4942 "input": "http://ho%0Fst/", 4943 "base": null, 4944 "failure": true 4945 }, 4946 { 4947 "input": "http://ho%10st/", 4948 "base": null, 4949 "failure": true 4950 }, 4951 { 4952 "input": "http://ho%11st/", 4953 "base": null, 4954 "failure": true 4955 }, 4956 { 4957 "input": "http://ho%12st/", 4958 "base": null, 4959 "failure": true 4960 }, 4961 { 4962 "input": "http://ho%13st/", 4963 "base": null, 4964 "failure": true 4965 }, 4966 { 4967 "input": "http://ho%14st/", 4968 "base": null, 4969 "failure": true 4970 }, 4971 { 4972 "input": "http://ho%15st/", 4973 "base": null, 4974 "failure": true 4975 }, 4976 { 4977 "input": "http://ho%16st/", 4978 "base": null, 4979 "failure": true 4980 }, 4981 { 4982 "input": "http://ho%17st/", 4983 "base": null, 4984 "failure": true 4985 }, 4986 { 4987 "input": "http://ho%18st/", 4988 "base": null, 4989 "failure": true 4990 }, 4991 { 4992 "input": "http://ho%19st/", 4993 "base": null, 4994 "failure": true 4995 }, 4996 { 4997 "input": "http://ho%1Ast/", 4998 "base": null, 4999 "failure": true 5000 }, 5001 { 5002 "input": "http://ho%1Bst/", 5003 "base": null, 5004 "failure": true 5005 }, 5006 { 5007 "input": "http://ho%1Cst/", 5008 "base": null, 5009 "failure": true 5010 }, 5011 { 5012 "input": "http://ho%1Dst/", 5013 "base": null, 5014 "failure": true 5015 }, 5016 { 5017 "input": "http://ho%1Est/", 5018 "base": null, 5019 "failure": true 5020 }, 5021 { 5022 "input": "http://ho%1Fst/", 5023 "base": null, 5024 "failure": true 5025 }, 5026 { 5027 "input": "http://ho%20st/", 5028 "base": null, 5029 "failure": true 5030 }, 5031 { 5032 "input": "http://ho%23st/", 5033 "base": null, 5034 "failure": true 5035 }, 5036 { 5037 "input": "http://ho%25st/", 5038 "base": null, 5039 "failure": true 5040 }, 5041 { 5042 "input": "http://ho%2Fst/", 5043 "base": null, 5044 "failure": true 5045 }, 5046 { 5047 "input": "http://ho%3Ast/", 5048 "base": null, 5049 "failure": true 5050 }, 5051 { 5052 "input": "http://ho%3Cst/", 5053 "base": null, 5054 "failure": true 5055 }, 5056 { 5057 "input": "http://ho%3Est/", 5058 "base": null, 5059 "failure": true 5060 }, 5061 { 5062 "input": "http://ho%3Fst/", 5063 "base": null, 5064 "failure": true 5065 }, 5066 { 5067 "input": "http://ho%40st/", 5068 "base": null, 5069 "failure": true 5070 }, 5071 { 5072 "input": "http://ho%5Bst/", 5073 "base": null, 5074 "failure": true 5075 }, 5076 { 5077 "input": "http://ho%5Cst/", 5078 "base": null, 5079 "failure": true 5080 }, 5081 { 5082 "input": "http://ho%5Dst/", 5083 "base": null, 5084 "failure": true 5085 }, 5086 { 5087 "input": "http://ho%7Cst/", 5088 "base": null, 5089 "failure": true 5090 }, 5091 { 5092 "input": "http://ho%7Fst/", 5093 "base": null, 5094 "failure": true 5095 }, 5096 "Allowed host/domain code points", 5097 { 5098 "input": "sc://\u0001\u0002\u0003\u0004\u0005\u0006\u0007\u0008\u000B\u000C\u000E\u000F\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001A\u001B\u001C\u001D\u001E\u001F\u007F!\"$%&'()*+,-.;=_`{}~/", 5099 "base": null, 5100 "href": "sc://%01%02%03%04%05%06%07%08%0B%0C%0E%0F%10%11%12%13%14%15%16%17%18%19%1A%1B%1C%1D%1E%1F%7F!\"$%&'()*+,-.;=_`{}~/", 5101 "origin": "null", 5102 "protocol": "sc:", 5103 "username": "", 5104 "password": "", 5105 "host": "%01%02%03%04%05%06%07%08%0B%0C%0E%0F%10%11%12%13%14%15%16%17%18%19%1A%1B%1C%1D%1E%1F%7F!\"$%&'()*+,-.;=_`{}~", 5106 "hostname": "%01%02%03%04%05%06%07%08%0B%0C%0E%0F%10%11%12%13%14%15%16%17%18%19%1A%1B%1C%1D%1E%1F%7F!\"$%&'()*+,-.;=_`{}~", 5107 "port": "", 5108 "pathname": "/", 5109 "search": "", 5110 "hash": "" 5111 }, 5112 "# Hosts and percent-encoding", 5113 { 5114 "input": "ftp://example.com%80/", 5115 "base": null, 5116 "failure": true 5117 }, 5118 { 5119 "input": "ftp://example.com%A0/", 5120 "base": null, 5121 "failure": true 5122 }, 5123 { 5124 "input": "https://example.com%80/", 5125 "base": null, 5126 "failure": true 5127 }, 5128 { 5129 "input": "https://example.com%A0/", 5130 "base": null, 5131 "failure": true 5132 }, 5133 { 5134 "input": "ftp://%e2%98%83", 5135 "base": null, 5136 "href": "ftp://xn--n3h/", 5137 "origin": "ftp://xn--n3h", 5138 "protocol": "ftp:", 5139 "username": "", 5140 "password": "", 5141 "host": "xn--n3h", 5142 "hostname": "xn--n3h", 5143 "port": "", 5144 "pathname": "/", 5145 "search": "", 5146 "hash": "" 5147 }, 5148 { 5149 "input": "https://%e2%98%83", 5150 "base": null, 5151 "href": "https://xn--n3h/", 5152 "origin": "https://xn--n3h", 5153 "protocol": "https:", 5154 "username": "", 5155 "password": "", 5156 "host": "xn--n3h", 5157 "hostname": "xn--n3h", 5158 "port": "", 5159 "pathname": "/", 5160 "search": "", 5161 "hash": "" 5162 }, 5163 "# tests from jsdom/whatwg-url designed for code coverage", 5164 { 5165 "input": "http://127.0.0.1:10100/relative_import.html", 5166 "base": null, 5167 "href": "http://127.0.0.1:10100/relative_import.html", 5168 "origin": "http://127.0.0.1:10100", 5169 "protocol": "http:", 5170 "username": "", 5171 "password": "", 5172 "host": "127.0.0.1:10100", 5173 "hostname": "127.0.0.1", 5174 "port": "10100", 5175 "pathname": "/relative_import.html", 5176 "search": "", 5177 "hash": "" 5178 }, 5179 { 5180 "input": "http://facebook.com/?foo=%7B%22abc%22", 5181 "base": null, 5182 "href": "http://facebook.com/?foo=%7B%22abc%22", 5183 "origin": "http://facebook.com", 5184 "protocol": "http:", 5185 "username": "", 5186 "password": "", 5187 "host": "facebook.com", 5188 "hostname": "facebook.com", 5189 "port": "", 5190 "pathname": "/", 5191 "search": "?foo=%7B%22abc%22", 5192 "hash": "" 5193 }, 5194 { 5195 "input": "https://localhost:3000/jqueryui@1.2.3", 5196 "base": null, 5197 "href": "https://localhost:3000/jqueryui@1.2.3", 5198 "origin": "https://localhost:3000", 5199 "protocol": "https:", 5200 "username": "", 5201 "password": "", 5202 "host": "localhost:3000", 5203 "hostname": "localhost", 5204 "port": "3000", 5205 "pathname": "/jqueryui@1.2.3", 5206 "search": "", 5207 "hash": "" 5208 }, 5209 "# tab/LF/CR", 5210 { 5211 "input": "h\tt\nt\rp://h\to\ns\rt:9\t0\n0\r0/p\ta\nt\rh?q\tu\ne\rry#f\tr\na\rg", 5212 "base": null, 5213 "href": "http://host:9000/path?query#frag", 5214 "origin": "http://host:9000", 5215 "protocol": "http:", 5216 "username": "", 5217 "password": "", 5218 "host": "host:9000", 5219 "hostname": "host", 5220 "port": "9000", 5221 "pathname": "/path", 5222 "search": "?query", 5223 "hash": "#frag" 5224 }, 5225 "# Stringification of URL.searchParams", 5226 { 5227 "input": "?a=b&c=d", 5228 "base": "http://example.org/foo/bar", 5229 "href": "http://example.org/foo/bar?a=b&c=d", 5230 "origin": "http://example.org", 5231 "protocol": "http:", 5232 "username": "", 5233 "password": "", 5234 "host": "example.org", 5235 "hostname": "example.org", 5236 "port": "", 5237 "pathname": "/foo/bar", 5238 "search": "?a=b&c=d", 5239 "searchParams": "a=b&c=d", 5240 "hash": "" 5241 }, 5242 { 5243 "input": "??a=b&c=d", 5244 "base": "http://example.org/foo/bar", 5245 "href": "http://example.org/foo/bar??a=b&c=d", 5246 "origin": "http://example.org", 5247 "protocol": "http:", 5248 "username": "", 5249 "password": "", 5250 "host": "example.org", 5251 "hostname": "example.org", 5252 "port": "", 5253 "pathname": "/foo/bar", 5254 "search": "??a=b&c=d", 5255 "searchParams": "%3Fa=b&c=d", 5256 "hash": "" 5257 }, 5258 "# Scheme only", 5259 { 5260 "input": "http:", 5261 "base": "http://example.org/foo/bar", 5262 "href": "http://example.org/foo/bar", 5263 "origin": "http://example.org", 5264 "protocol": "http:", 5265 "username": "", 5266 "password": "", 5267 "host": "example.org", 5268 "hostname": "example.org", 5269 "port": "", 5270 "pathname": "/foo/bar", 5271 "search": "", 5272 "searchParams": "", 5273 "hash": "" 5274 }, 5275 { 5276 "input": "http:", 5277 "base": "https://example.org/foo/bar", 5278 "failure": true 5279 }, 5280 { 5281 "input": "sc:", 5282 "base": "https://example.org/foo/bar", 5283 "href": "sc:", 5284 "origin": "null", 5285 "protocol": "sc:", 5286 "username": "", 5287 "password": "", 5288 "host": "", 5289 "hostname": "", 5290 "port": "", 5291 "pathname": "", 5292 "search": "", 5293 "searchParams": "", 5294 "hash": "" 5295 }, 5296 "# Percent encoding of fragments", 5297 { 5298 "input": "http://foo.bar/baz?qux#foo\bbar", 5299 "base": null, 5300 "href": "http://foo.bar/baz?qux#foo%08bar", 5301 "origin": "http://foo.bar", 5302 "protocol": "http:", 5303 "username": "", 5304 "password": "", 5305 "host": "foo.bar", 5306 "hostname": "foo.bar", 5307 "port": "", 5308 "pathname": "/baz", 5309 "search": "?qux", 5310 "searchParams": "qux=", 5311 "hash": "#foo%08bar" 5312 }, 5313 { 5314 "input": "http://foo.bar/baz?qux#foo\"bar", 5315 "base": null, 5316 "href": "http://foo.bar/baz?qux#foo%22bar", 5317 "origin": "http://foo.bar", 5318 "protocol": "http:", 5319 "username": "", 5320 "password": "", 5321 "host": "foo.bar", 5322 "hostname": "foo.bar", 5323 "port": "", 5324 "pathname": "/baz", 5325 "search": "?qux", 5326 "searchParams": "qux=", 5327 "hash": "#foo%22bar" 5328 }, 5329 { 5330 "input": "http://foo.bar/baz?qux#foo<bar", 5331 "base": null, 5332 "href": "http://foo.bar/baz?qux#foo%3Cbar", 5333 "origin": "http://foo.bar", 5334 "protocol": "http:", 5335 "username": "", 5336 "password": "", 5337 "host": "foo.bar", 5338 "hostname": "foo.bar", 5339 "port": "", 5340 "pathname": "/baz", 5341 "search": "?qux", 5342 "searchParams": "qux=", 5343 "hash": "#foo%3Cbar" 5344 }, 5345 { 5346 "input": "http://foo.bar/baz?qux#foo>bar", 5347 "base": null, 5348 "href": "http://foo.bar/baz?qux#foo%3Ebar", 5349 "origin": "http://foo.bar", 5350 "protocol": "http:", 5351 "username": "", 5352 "password": "", 5353 "host": "foo.bar", 5354 "hostname": "foo.bar", 5355 "port": "", 5356 "pathname": "/baz", 5357 "search": "?qux", 5358 "searchParams": "qux=", 5359 "hash": "#foo%3Ebar" 5360 }, 5361 { 5362 "input": "http://foo.bar/baz?qux#foo`bar", 5363 "base": null, 5364 "href": "http://foo.bar/baz?qux#foo%60bar", 5365 "origin": "http://foo.bar", 5366 "protocol": "http:", 5367 "username": "", 5368 "password": "", 5369 "host": "foo.bar", 5370 "hostname": "foo.bar", 5371 "port": "", 5372 "pathname": "/baz", 5373 "search": "?qux", 5374 "searchParams": "qux=", 5375 "hash": "#foo%60bar" 5376 }, 5377 "# IPv4 parsing (via https://github.com/nodejs/node/pull/10317)", 5378 { 5379 "input": "http://1.2.3.4/", 5380 "base": "http://other.com/", 5381 "href": "http://1.2.3.4/", 5382 "origin": "http://1.2.3.4", 5383 "protocol": "http:", 5384 "username": "", 5385 "password": "", 5386 "host": "1.2.3.4", 5387 "hostname": "1.2.3.4", 5388 "port": "", 5389 "pathname": "/", 5390 "search": "", 5391 "hash": "" 5392 }, 5393 { 5394 "input": "http://1.2.3.4./", 5395 "base": "http://other.com/", 5396 "href": "http://1.2.3.4/", 5397 "origin": "http://1.2.3.4", 5398 "protocol": "http:", 5399 "username": "", 5400 "password": "", 5401 "host": "1.2.3.4", 5402 "hostname": "1.2.3.4", 5403 "port": "", 5404 "pathname": "/", 5405 "search": "", 5406 "hash": "" 5407 }, 5408 { 5409 "input": "http://192.168.257", 5410 "base": "http://other.com/", 5411 "href": "http://192.168.1.1/", 5412 "origin": "http://192.168.1.1", 5413 "protocol": "http:", 5414 "username": "", 5415 "password": "", 5416 "host": "192.168.1.1", 5417 "hostname": "192.168.1.1", 5418 "port": "", 5419 "pathname": "/", 5420 "search": "", 5421 "hash": "" 5422 }, 5423 { 5424 "input": "http://192.168.257.", 5425 "base": "http://other.com/", 5426 "href": "http://192.168.1.1/", 5427 "origin": "http://192.168.1.1", 5428 "protocol": "http:", 5429 "username": "", 5430 "password": "", 5431 "host": "192.168.1.1", 5432 "hostname": "192.168.1.1", 5433 "port": "", 5434 "pathname": "/", 5435 "search": "", 5436 "hash": "" 5437 }, 5438 { 5439 "input": "http://192.168.257.com", 5440 "base": "http://other.com/", 5441 "href": "http://192.168.257.com/", 5442 "origin": "http://192.168.257.com", 5443 "protocol": "http:", 5444 "username": "", 5445 "password": "", 5446 "host": "192.168.257.com", 5447 "hostname": "192.168.257.com", 5448 "port": "", 5449 "pathname": "/", 5450 "search": "", 5451 "hash": "" 5452 }, 5453 { 5454 "input": "http://256", 5455 "base": "http://other.com/", 5456 "href": "http://0.0.1.0/", 5457 "origin": "http://0.0.1.0", 5458 "protocol": "http:", 5459 "username": "", 5460 "password": "", 5461 "host": "0.0.1.0", 5462 "hostname": "0.0.1.0", 5463 "port": "", 5464 "pathname": "/", 5465 "search": "", 5466 "hash": "" 5467 }, 5468 { 5469 "input": "http://256.com", 5470 "base": "http://other.com/", 5471 "href": "http://256.com/", 5472 "origin": "http://256.com", 5473 "protocol": "http:", 5474 "username": "", 5475 "password": "", 5476 "host": "256.com", 5477 "hostname": "256.com", 5478 "port": "", 5479 "pathname": "/", 5480 "search": "", 5481 "hash": "" 5482 }, 5483 { 5484 "input": "http://999999999", 5485 "base": "http://other.com/", 5486 "href": "http://59.154.201.255/", 5487 "origin": "http://59.154.201.255", 5488 "protocol": "http:", 5489 "username": "", 5490 "password": "", 5491 "host": "59.154.201.255", 5492 "hostname": "59.154.201.255", 5493 "port": "", 5494 "pathname": "/", 5495 "search": "", 5496 "hash": "" 5497 }, 5498 { 5499 "input": "http://999999999.", 5500 "base": "http://other.com/", 5501 "href": "http://59.154.201.255/", 5502 "origin": "http://59.154.201.255", 5503 "protocol": "http:", 5504 "username": "", 5505 "password": "", 5506 "host": "59.154.201.255", 5507 "hostname": "59.154.201.255", 5508 "port": "", 5509 "pathname": "/", 5510 "search": "", 5511 "hash": "", 5512 "failure": true 5513 }, 5514 { 5515 "input": "http://999999999.com", 5516 "base": "http://other.com/", 5517 "href": "http://999999999.com/", 5518 "origin": "http://999999999.com", 5519 "protocol": "http:", 5520 "username": "", 5521 "password": "", 5522 "host": "999999999.com", 5523 "hostname": "999999999.com", 5524 "port": "", 5525 "pathname": "/", 5526 "search": "", 5527 "hash": "" 5528 }, 5529 { 5530 "input": "http://10000000000", 5531 "base": "http://other.com/", 5532 "failure": true 5533 }, 5534 { 5535 "input": "http://10000000000.com", 5536 "base": "http://other.com/", 5537 "href": "http://10000000000.com/", 5538 "origin": "http://10000000000.com", 5539 "protocol": "http:", 5540 "username": "", 5541 "password": "", 5542 "host": "10000000000.com", 5543 "hostname": "10000000000.com", 5544 "port": "", 5545 "pathname": "/", 5546 "search": "", 5547 "hash": "" 5548 }, 5549 { 5550 "input": "http://4294967295", 5551 "base": "http://other.com/", 5552 "href": "http://255.255.255.255/", 5553 "origin": "http://255.255.255.255", 5554 "protocol": "http:", 5555 "username": "", 5556 "password": "", 5557 "host": "255.255.255.255", 5558 "hostname": "255.255.255.255", 5559 "port": "", 5560 "pathname": "/", 5561 "search": "", 5562 "hash": "" 5563 }, 5564 { 5565 "input": "http://4294967296", 5566 "base": "http://other.com/", 5567 "failure": true 5568 }, 5569 { 5570 "input": "http://0xffffffff", 5571 "base": "http://other.com/", 5572 "href": "http://255.255.255.255/", 5573 "origin": "http://255.255.255.255", 5574 "protocol": "http:", 5575 "username": "", 5576 "password": "", 5577 "host": "255.255.255.255", 5578 "hostname": "255.255.255.255", 5579 "port": "", 5580 "pathname": "/", 5581 "search": "", 5582 "hash": "" 5583 }, 5584 { 5585 "input": "http://0xffffffff1", 5586 "base": "http://other.com/", 5587 "failure": true 5588 }, 5589 { 5590 "input": "http://256.256.256.256", 5591 "base": "http://other.com/", 5592 "failure": true 5593 }, 5594 "More IPv4 parsing (via https://github.com/jsdom/whatwg-url/issues/92)", 5595 { 5596 "input": "https://0x100000000/test", 5597 "base": null, 5598 "failure": true 5599 }, 5600 { 5601 "input": "https://256.0.0.1/test", 5602 "base": null, 5603 "failure": true 5604 }, 5605 "# file URLs containing percent-encoded Windows drive letters (shouldn't work)", 5606 { 5607 "input": "file:///C%3A/", 5608 "base": null, 5609 "href": "file:///C%3A/", 5610 "protocol": "file:", 5611 "username": "", 5612 "password": "", 5613 "host": "", 5614 "hostname": "", 5615 "port": "", 5616 "pathname": "/C%3A/", 5617 "search": "", 5618 "hash": "" 5619 }, 5620 { 5621 "input": "file:///C%7C/", 5622 "base": null, 5623 "href": "file:///C%7C/", 5624 "protocol": "file:", 5625 "username": "", 5626 "password": "", 5627 "host": "", 5628 "hostname": "", 5629 "port": "", 5630 "pathname": "/C%7C/", 5631 "search": "", 5632 "hash": "" 5633 }, 5634 { 5635 "input": "file://%43%3A", 5636 "base": null, 5637 "failure": true 5638 }, 5639 { 5640 "input": "file://%43%7C", 5641 "base": null, 5642 "failure": true 5643 }, 5644 { 5645 "input": "file://%43|", 5646 "base": null, 5647 "failure": true 5648 }, 5649 { 5650 "input": "file://C%7C", 5651 "base": null, 5652 "failure": true 5653 }, 5654 { 5655 "input": "file://%43%7C/", 5656 "base": null, 5657 "failure": true 5658 }, 5659 { 5660 "input": "https://%43%7C/", 5661 "base": null, 5662 "failure": true 5663 }, 5664 { 5665 "input": "asdf://%43|/", 5666 "base": null, 5667 "failure": true 5668 }, 5669 { 5670 "input": "asdf://%43%7C/", 5671 "base": null, 5672 "href": "asdf://%43%7C/", 5673 "origin": "null", 5674 "protocol": "asdf:", 5675 "username": "", 5676 "password": "", 5677 "host": "%43%7C", 5678 "hostname": "%43%7C", 5679 "port": "", 5680 "pathname": "/", 5681 "search": "", 5682 "hash": "" 5683 }, 5684 "# file URLs relative to other file URLs (via https://github.com/jsdom/whatwg-url/pull/60)", 5685 { 5686 "input": "pix/submit.gif", 5687 "base": "file:///C:/Users/Domenic/Dropbox/GitHub/tmpvar/jsdom/test/level2/html/files/anchor.html", 5688 "href": "file:///C:/Users/Domenic/Dropbox/GitHub/tmpvar/jsdom/test/level2/html/files/pix/submit.gif", 5689 "protocol": "file:", 5690 "username": "", 5691 "password": "", 5692 "host": "", 5693 "hostname": "", 5694 "port": "", 5695 "pathname": "/C:/Users/Domenic/Dropbox/GitHub/tmpvar/jsdom/test/level2/html/files/pix/submit.gif", 5696 "search": "", 5697 "hash": "" 5698 }, 5699 { 5700 "input": "..", 5701 "base": "file:///C:/", 5702 "href": "file:///C:/", 5703 "protocol": "file:", 5704 "username": "", 5705 "password": "", 5706 "host": "", 5707 "hostname": "", 5708 "port": "", 5709 "pathname": "/C:/", 5710 "search": "", 5711 "hash": "" 5712 }, 5713 { 5714 "input": "..", 5715 "base": "file:///", 5716 "href": "file:///", 5717 "protocol": "file:", 5718 "username": "", 5719 "password": "", 5720 "host": "", 5721 "hostname": "", 5722 "port": "", 5723 "pathname": "/", 5724 "search": "", 5725 "hash": "" 5726 }, 5727 "# More file URL tests by zcorpan and annevk", 5728 { 5729 "input": "/", 5730 "base": "file:///C:/a/b", 5731 "href": "file:///C:/", 5732 "protocol": "file:", 5733 "username": "", 5734 "password": "", 5735 "host": "", 5736 "hostname": "", 5737 "port": "", 5738 "pathname": "/C:/", 5739 "search": "", 5740 "hash": "" 5741 }, 5742 { 5743 "input": "/", 5744 "base": "file://h/C:/a/b", 5745 "href": "file://h/C:/", 5746 "protocol": "file:", 5747 "username": "", 5748 "password": "", 5749 "host": "h", 5750 "hostname": "h", 5751 "port": "", 5752 "pathname": "/C:/", 5753 "search": "", 5754 "hash": "" 5755 }, 5756 { 5757 "input": "/", 5758 "base": "file://h/a/b", 5759 "href": "file://h/", 5760 "protocol": "file:", 5761 "username": "", 5762 "password": "", 5763 "host": "h", 5764 "hostname": "h", 5765 "port": "", 5766 "pathname": "/", 5767 "search": "", 5768 "hash": "" 5769 }, 5770 { 5771 "input": "//d:", 5772 "base": "file:///C:/a/b", 5773 "href": "file:///d:", 5774 "protocol": "file:", 5775 "username": "", 5776 "password": "", 5777 "host": "", 5778 "hostname": "", 5779 "port": "", 5780 "pathname": "/d:", 5781 "search": "", 5782 "hash": "" 5783 }, 5784 { 5785 "input": "//d:/..", 5786 "base": "file:///C:/a/b", 5787 "href": "file:///d:/", 5788 "protocol": "file:", 5789 "username": "", 5790 "password": "", 5791 "host": "", 5792 "hostname": "", 5793 "port": "", 5794 "pathname": "/d:/", 5795 "search": "", 5796 "hash": "" 5797 }, 5798 { 5799 "input": "..", 5800 "base": "file:///ab:/", 5801 "href": "file:///", 5802 "protocol": "file:", 5803 "username": "", 5804 "password": "", 5805 "host": "", 5806 "hostname": "", 5807 "port": "", 5808 "pathname": "/", 5809 "search": "", 5810 "hash": "" 5811 }, 5812 { 5813 "input": "..", 5814 "base": "file:///1:/", 5815 "href": "file:///", 5816 "protocol": "file:", 5817 "username": "", 5818 "password": "", 5819 "host": "", 5820 "hostname": "", 5821 "port": "", 5822 "pathname": "/", 5823 "search": "", 5824 "hash": "" 5825 }, 5826 { 5827 "input": "", 5828 "base": "file:///test?test#test", 5829 "href": "file:///test?test", 5830 "protocol": "file:", 5831 "username": "", 5832 "password": "", 5833 "host": "", 5834 "hostname": "", 5835 "port": "", 5836 "pathname": "/test", 5837 "search": "?test", 5838 "hash": "" 5839 }, 5840 { 5841 "input": "file:", 5842 "base": "file:///test?test#test", 5843 "href": "file:///test?test", 5844 "protocol": "file:", 5845 "username": "", 5846 "password": "", 5847 "host": "", 5848 "hostname": "", 5849 "port": "", 5850 "pathname": "/test", 5851 "search": "?test", 5852 "hash": "" 5853 }, 5854 { 5855 "input": "?x", 5856 "base": "file:///test?test#test", 5857 "href": "file:///test?x", 5858 "protocol": "file:", 5859 "username": "", 5860 "password": "", 5861 "host": "", 5862 "hostname": "", 5863 "port": "", 5864 "pathname": "/test", 5865 "search": "?x", 5866 "hash": "" 5867 }, 5868 { 5869 "input": "file:?x", 5870 "base": "file:///test?test#test", 5871 "href": "file:///test?x", 5872 "protocol": "file:", 5873 "username": "", 5874 "password": "", 5875 "host": "", 5876 "hostname": "", 5877 "port": "", 5878 "pathname": "/test", 5879 "search": "?x", 5880 "hash": "" 5881 }, 5882 { 5883 "input": "#x", 5884 "base": "file:///test?test#test", 5885 "href": "file:///test?test#x", 5886 "protocol": "file:", 5887 "username": "", 5888 "password": "", 5889 "host": "", 5890 "hostname": "", 5891 "port": "", 5892 "pathname": "/test", 5893 "search": "?test", 5894 "hash": "#x" 5895 }, 5896 { 5897 "input": "file:#x", 5898 "base": "file:///test?test#test", 5899 "href": "file:///test?test#x", 5900 "protocol": "file:", 5901 "username": "", 5902 "password": "", 5903 "host": "", 5904 "hostname": "", 5905 "port": "", 5906 "pathname": "/test", 5907 "search": "?test", 5908 "hash": "#x" 5909 }, 5910 "# File URLs and many (back)slashes", 5911 { 5912 "input": "file:\\\\//", 5913 "base": null, 5914 "href": "file:////", 5915 "protocol": "file:", 5916 "username": "", 5917 "password": "", 5918 "host": "", 5919 "hostname": "", 5920 "port": "", 5921 "pathname": "//", 5922 "search": "", 5923 "hash": "" 5924 }, 5925 { 5926 "input": "file:\\\\\\\\", 5927 "base": null, 5928 "href": "file:////", 5929 "protocol": "file:", 5930 "username": "", 5931 "password": "", 5932 "host": "", 5933 "hostname": "", 5934 "port": "", 5935 "pathname": "//", 5936 "search": "", 5937 "hash": "" 5938 }, 5939 { 5940 "input": "file:\\\\\\\\?fox", 5941 "base": null, 5942 "href": "file:////?fox", 5943 "protocol": "file:", 5944 "username": "", 5945 "password": "", 5946 "host": "", 5947 "hostname": "", 5948 "port": "", 5949 "pathname": "//", 5950 "search": "?fox", 5951 "hash": "" 5952 }, 5953 { 5954 "input": "file:\\\\\\\\#guppy", 5955 "base": null, 5956 "href": "file:////#guppy", 5957 "protocol": "file:", 5958 "username": "", 5959 "password": "", 5960 "host": "", 5961 "hostname": "", 5962 "port": "", 5963 "pathname": "//", 5964 "search": "", 5965 "hash": "#guppy" 5966 }, 5967 { 5968 "input": "file://spider///", 5969 "base": null, 5970 "href": "file://spider///", 5971 "protocol": "file:", 5972 "username": "", 5973 "password": "", 5974 "host": "spider", 5975 "hostname": "spider", 5976 "port": "", 5977 "pathname": "///", 5978 "search": "", 5979 "hash": "" 5980 }, 5981 { 5982 "input": "file:\\\\localhost//", 5983 "base": null, 5984 "href": "file:////", 5985 "protocol": "file:", 5986 "username": "", 5987 "password": "", 5988 "host": "", 5989 "hostname": "", 5990 "port": "", 5991 "pathname": "//", 5992 "search": "", 5993 "hash": "" 5994 }, 5995 { 5996 "input": "file:///localhost//cat", 5997 "base": null, 5998 "href": "file:///localhost//cat", 5999 "protocol": "file:", 6000 "username": "", 6001 "password": "", 6002 "host": "", 6003 "hostname": "", 6004 "port": "", 6005 "pathname": "/localhost//cat", 6006 "search": "", 6007 "hash": "" 6008 }, 6009 { 6010 "input": "file://\\/localhost//cat", 6011 "base": null, 6012 "href": "file:////localhost//cat", 6013 "protocol": "file:", 6014 "username": "", 6015 "password": "", 6016 "host": "", 6017 "hostname": "", 6018 "port": "", 6019 "pathname": "//localhost//cat", 6020 "search": "", 6021 "hash": "" 6022 }, 6023 { 6024 "input": "file://localhost//a//../..//", 6025 "base": null, 6026 "href": "file://///", 6027 "protocol": "file:", 6028 "username": "", 6029 "password": "", 6030 "host": "", 6031 "hostname": "", 6032 "port": "", 6033 "pathname": "///", 6034 "search": "", 6035 "hash": "" 6036 }, 6037 { 6038 "input": "/////mouse", 6039 "base": "file:///elephant", 6040 "href": "file://///mouse", 6041 "protocol": "file:", 6042 "username": "", 6043 "password": "", 6044 "host": "", 6045 "hostname": "", 6046 "port": "", 6047 "pathname": "///mouse", 6048 "search": "", 6049 "hash": "" 6050 }, 6051 { 6052 "input": "\\//pig", 6053 "base": "file://lion/", 6054 "href": "file:///pig", 6055 "protocol": "file:", 6056 "username": "", 6057 "password": "", 6058 "host": "", 6059 "hostname": "", 6060 "port": "", 6061 "pathname": "/pig", 6062 "search": "", 6063 "hash": "" 6064 }, 6065 { 6066 "input": "\\/localhost//pig", 6067 "base": "file://lion/", 6068 "href": "file:////pig", 6069 "protocol": "file:", 6070 "username": "", 6071 "password": "", 6072 "host": "", 6073 "hostname": "", 6074 "port": "", 6075 "pathname": "//pig", 6076 "search": "", 6077 "hash": "" 6078 }, 6079 { 6080 "input": "//localhost//pig", 6081 "base": "file://lion/", 6082 "href": "file:////pig", 6083 "protocol": "file:", 6084 "username": "", 6085 "password": "", 6086 "host": "", 6087 "hostname": "", 6088 "port": "", 6089 "pathname": "//pig", 6090 "search": "", 6091 "hash": "" 6092 }, 6093 { 6094 "input": "/..//localhost//pig", 6095 "base": "file://lion/", 6096 "href": "file://lion//localhost//pig", 6097 "protocol": "file:", 6098 "username": "", 6099 "password": "", 6100 "host": "lion", 6101 "hostname": "lion", 6102 "port": "", 6103 "pathname": "//localhost//pig", 6104 "search": "", 6105 "hash": "" 6106 }, 6107 { 6108 "input": "file://", 6109 "base": "file://ape/", 6110 "href": "file:///", 6111 "protocol": "file:", 6112 "username": "", 6113 "password": "", 6114 "host": "", 6115 "hostname": "", 6116 "port": "", 6117 "pathname": "/", 6118 "search": "", 6119 "hash": "" 6120 }, 6121 "# File URLs with non-empty hosts", 6122 { 6123 "input": "/rooibos", 6124 "base": "file://tea/", 6125 "href": "file://tea/rooibos", 6126 "protocol": "file:", 6127 "username": "", 6128 "password": "", 6129 "host": "tea", 6130 "hostname": "tea", 6131 "port": "", 6132 "pathname": "/rooibos", 6133 "search": "", 6134 "hash": "" 6135 }, 6136 { 6137 "input": "/?chai", 6138 "base": "file://tea/", 6139 "href": "file://tea/?chai", 6140 "protocol": "file:", 6141 "username": "", 6142 "password": "", 6143 "host": "tea", 6144 "hostname": "tea", 6145 "port": "", 6146 "pathname": "/", 6147 "search": "?chai", 6148 "hash": "" 6149 }, 6150 "# Windows drive letter handling with the 'file:' base URL", 6151 { 6152 "input": "C|", 6153 "base": "file://host/dir/file", 6154 "href": "file://host/C:", 6155 "protocol": "file:", 6156 "username": "", 6157 "password": "", 6158 "host": "host", 6159 "hostname": "host", 6160 "port": "", 6161 "pathname": "/C:", 6162 "search": "", 6163 "hash": "" 6164 }, 6165 { 6166 "input": "C|", 6167 "base": "file://host/D:/dir1/dir2/file", 6168 "href": "file://host/C:", 6169 "protocol": "file:", 6170 "username": "", 6171 "password": "", 6172 "host": "host", 6173 "hostname": "host", 6174 "port": "", 6175 "pathname": "/C:", 6176 "search": "", 6177 "hash": "" 6178 }, 6179 { 6180 "input": "C|#", 6181 "base": "file://host/dir/file", 6182 "href": "file://host/C:#", 6183 "protocol": "file:", 6184 "username": "", 6185 "password": "", 6186 "host": "host", 6187 "hostname": "host", 6188 "port": "", 6189 "pathname": "/C:", 6190 "search": "", 6191 "hash": "" 6192 }, 6193 { 6194 "input": "C|?", 6195 "base": "file://host/dir/file", 6196 "href": "file://host/C:?", 6197 "protocol": "file:", 6198 "username": "", 6199 "password": "", 6200 "host": "host", 6201 "hostname": "host", 6202 "port": "", 6203 "pathname": "/C:", 6204 "search": "", 6205 "hash": "" 6206 }, 6207 { 6208 "input": "C|/", 6209 "base": "file://host/dir/file", 6210 "href": "file://host/C:/", 6211 "protocol": "file:", 6212 "username": "", 6213 "password": "", 6214 "host": "host", 6215 "hostname": "host", 6216 "port": "", 6217 "pathname": "/C:/", 6218 "search": "", 6219 "hash": "" 6220 }, 6221 { 6222 "input": "C|\n/", 6223 "base": "file://host/dir/file", 6224 "href": "file://host/C:/", 6225 "protocol": "file:", 6226 "username": "", 6227 "password": "", 6228 "host": "host", 6229 "hostname": "host", 6230 "port": "", 6231 "pathname": "/C:/", 6232 "search": "", 6233 "hash": "" 6234 }, 6235 { 6236 "input": "C|\\", 6237 "base": "file://host/dir/file", 6238 "href": "file://host/C:/", 6239 "protocol": "file:", 6240 "username": "", 6241 "password": "", 6242 "host": "host", 6243 "hostname": "host", 6244 "port": "", 6245 "pathname": "/C:/", 6246 "search": "", 6247 "hash": "" 6248 }, 6249 { 6250 "input": "C", 6251 "base": "file://host/dir/file", 6252 "href": "file://host/dir/C", 6253 "protocol": "file:", 6254 "username": "", 6255 "password": "", 6256 "host": "host", 6257 "hostname": "host", 6258 "port": "", 6259 "pathname": "/dir/C", 6260 "search": "", 6261 "hash": "" 6262 }, 6263 { 6264 "input": "C|a", 6265 "base": "file://host/dir/file", 6266 "href": "file://host/dir/C|a", 6267 "protocol": "file:", 6268 "username": "", 6269 "password": "", 6270 "host": "host", 6271 "hostname": "host", 6272 "port": "", 6273 "pathname": "/dir/C|a", 6274 "search": "", 6275 "hash": "" 6276 }, 6277 "# Windows drive letter quirk in the file slash state", 6278 { 6279 "input": "/c:/foo/bar", 6280 "base": "file:///c:/baz/qux", 6281 "href": "file:///c:/foo/bar", 6282 "protocol": "file:", 6283 "username": "", 6284 "password": "", 6285 "host": "", 6286 "hostname": "", 6287 "port": "", 6288 "pathname": "/c:/foo/bar", 6289 "search": "", 6290 "hash": "" 6291 }, 6292 { 6293 "input": "/c|/foo/bar", 6294 "base": "file:///c:/baz/qux", 6295 "href": "file:///c:/foo/bar", 6296 "protocol": "file:", 6297 "username": "", 6298 "password": "", 6299 "host": "", 6300 "hostname": "", 6301 "port": "", 6302 "pathname": "/c:/foo/bar", 6303 "search": "", 6304 "hash": "" 6305 }, 6306 { 6307 "input": "file:\\c:\\foo\\bar", 6308 "base": "file:///c:/baz/qux", 6309 "href": "file:///c:/foo/bar", 6310 "protocol": "file:", 6311 "username": "", 6312 "password": "", 6313 "host": "", 6314 "hostname": "", 6315 "port": "", 6316 "pathname": "/c:/foo/bar", 6317 "search": "", 6318 "hash": "" 6319 }, 6320 { 6321 "input": "/c:/foo/bar", 6322 "base": "file://host/path", 6323 "href": "file://host/c:/foo/bar", 6324 "protocol": "file:", 6325 "username": "", 6326 "password": "", 6327 "host": "host", 6328 "hostname": "host", 6329 "port": "", 6330 "pathname": "/c:/foo/bar", 6331 "search": "", 6332 "hash": "" 6333 }, 6334 "# Do not drop the host in the presence of a drive letter", 6335 { 6336 "input": "file://example.net/C:/", 6337 "base": null, 6338 "href": "file://example.net/C:/", 6339 "protocol": "file:", 6340 "username": "", 6341 "password": "", 6342 "host": "example.net", 6343 "hostname": "example.net", 6344 "port": "", 6345 "pathname": "/C:/", 6346 "search": "", 6347 "hash": "" 6348 }, 6349 { 6350 "input": "file://1.2.3.4/C:/", 6351 "base": null, 6352 "href": "file://1.2.3.4/C:/", 6353 "protocol": "file:", 6354 "username": "", 6355 "password": "", 6356 "host": "1.2.3.4", 6357 "hostname": "1.2.3.4", 6358 "port": "", 6359 "pathname": "/C:/", 6360 "search": "", 6361 "hash": "" 6362 }, 6363 { 6364 "input": "file://[1::8]/C:/", 6365 "base": null, 6366 "href": "file://[1::8]/C:/", 6367 "protocol": "file:", 6368 "username": "", 6369 "password": "", 6370 "host": "[1::8]", 6371 "hostname": "[1::8]", 6372 "port": "", 6373 "pathname": "/C:/", 6374 "search": "", 6375 "hash": "" 6376 }, 6377 "# Copy the host from the base URL in the following cases", 6378 { 6379 "input": "C|/", 6380 "base": "file://host/", 6381 "href": "file://host/C:/", 6382 "protocol": "file:", 6383 "username": "", 6384 "password": "", 6385 "host": "host", 6386 "hostname": "host", 6387 "port": "", 6388 "pathname": "/C:/", 6389 "search": "", 6390 "hash": "" 6391 }, 6392 { 6393 "input": "/C:/", 6394 "base": "file://host/", 6395 "href": "file://host/C:/", 6396 "protocol": "file:", 6397 "username": "", 6398 "password": "", 6399 "host": "host", 6400 "hostname": "host", 6401 "port": "", 6402 "pathname": "/C:/", 6403 "search": "", 6404 "hash": "" 6405 }, 6406 { 6407 "input": "file:C:/", 6408 "base": "file://host/", 6409 "href": "file://host/C:/", 6410 "protocol": "file:", 6411 "username": "", 6412 "password": "", 6413 "host": "host", 6414 "hostname": "host", 6415 "port": "", 6416 "pathname": "/C:/", 6417 "search": "", 6418 "hash": "" 6419 }, 6420 { 6421 "input": "file:/C:/", 6422 "base": "file://host/", 6423 "href": "file://host/C:/", 6424 "protocol": "file:", 6425 "username": "", 6426 "password": "", 6427 "host": "host", 6428 "hostname": "host", 6429 "port": "", 6430 "pathname": "/C:/", 6431 "search": "", 6432 "hash": "" 6433 }, 6434 "# Copy the empty host from the input in the following cases", 6435 { 6436 "input": "//C:/", 6437 "base": "file://host/", 6438 "href": "file:///C:/", 6439 "protocol": "file:", 6440 "username": "", 6441 "password": "", 6442 "host": "", 6443 "hostname": "", 6444 "port": "", 6445 "pathname": "/C:/", 6446 "search": "", 6447 "hash": "" 6448 }, 6449 { 6450 "input": "file://C:/", 6451 "base": "file://host/", 6452 "href": "file:///C:/", 6453 "protocol": "file:", 6454 "username": "", 6455 "password": "", 6456 "host": "", 6457 "hostname": "", 6458 "port": "", 6459 "pathname": "/C:/", 6460 "search": "", 6461 "hash": "" 6462 }, 6463 { 6464 "input": "///C:/", 6465 "base": "file://host/", 6466 "href": "file:///C:/", 6467 "protocol": "file:", 6468 "username": "", 6469 "password": "", 6470 "host": "", 6471 "hostname": "", 6472 "port": "", 6473 "pathname": "/C:/", 6474 "search": "", 6475 "hash": "" 6476 }, 6477 { 6478 "input": "file:///C:/", 6479 "base": "file://host/", 6480 "href": "file:///C:/", 6481 "protocol": "file:", 6482 "username": "", 6483 "password": "", 6484 "host": "", 6485 "hostname": "", 6486 "port": "", 6487 "pathname": "/C:/", 6488 "search": "", 6489 "hash": "" 6490 }, 6491 "# Windows drive letter quirk (no host)", 6492 { 6493 "input": "file:/C|/", 6494 "base": null, 6495 "href": "file:///C:/", 6496 "protocol": "file:", 6497 "username": "", 6498 "password": "", 6499 "host": "", 6500 "hostname": "", 6501 "port": "", 6502 "pathname": "/C:/", 6503 "search": "", 6504 "hash": "" 6505 }, 6506 { 6507 "input": "file://C|/", 6508 "base": null, 6509 "href": "file:///C:/", 6510 "protocol": "file:", 6511 "username": "", 6512 "password": "", 6513 "host": "", 6514 "hostname": "", 6515 "port": "", 6516 "pathname": "/C:/", 6517 "search": "", 6518 "hash": "" 6519 }, 6520 "# file URLs without base URL by Rimas Misevičius", 6521 { 6522 "input": "file:", 6523 "base": null, 6524 "href": "file:///", 6525 "protocol": "file:", 6526 "username": "", 6527 "password": "", 6528 "host": "", 6529 "hostname": "", 6530 "port": "", 6531 "pathname": "/", 6532 "search": "", 6533 "hash": "" 6534 }, 6535 { 6536 "input": "file:?q=v", 6537 "base": null, 6538 "href": "file:///?q=v", 6539 "protocol": "file:", 6540 "username": "", 6541 "password": "", 6542 "host": "", 6543 "hostname": "", 6544 "port": "", 6545 "pathname": "/", 6546 "search": "?q=v", 6547 "hash": "" 6548 }, 6549 { 6550 "input": "file:#frag", 6551 "base": null, 6552 "href": "file:///#frag", 6553 "protocol": "file:", 6554 "username": "", 6555 "password": "", 6556 "host": "", 6557 "hostname": "", 6558 "port": "", 6559 "pathname": "/", 6560 "search": "", 6561 "hash": "#frag" 6562 }, 6563 "# file: drive letter cases from https://crbug.com/1078698", 6564 { 6565 "input": "file:///Y:", 6566 "base": null, 6567 "href": "file:///Y:", 6568 "protocol": "file:", 6569 "username": "", 6570 "password": "", 6571 "host": "", 6572 "hostname": "", 6573 "port": "", 6574 "pathname": "/Y:", 6575 "search": "", 6576 "hash": "" 6577 }, 6578 { 6579 "input": "file:///Y:/", 6580 "base": null, 6581 "href": "file:///Y:/", 6582 "protocol": "file:", 6583 "username": "", 6584 "password": "", 6585 "host": "", 6586 "hostname": "", 6587 "port": "", 6588 "pathname": "/Y:/", 6589 "search": "", 6590 "hash": "" 6591 }, 6592 { 6593 "input": "file:///./Y", 6594 "base": null, 6595 "href": "file:///Y", 6596 "protocol": "file:", 6597 "username": "", 6598 "password": "", 6599 "host": "", 6600 "hostname": "", 6601 "port": "", 6602 "pathname": "/Y", 6603 "search": "", 6604 "hash": "" 6605 }, 6606 { 6607 "input": "file:///./Y:", 6608 "base": null, 6609 "href": "file:///Y:", 6610 "protocol": "file:", 6611 "username": "", 6612 "password": "", 6613 "host": "", 6614 "hostname": "", 6615 "port": "", 6616 "pathname": "/Y:", 6617 "search": "", 6618 "hash": "" 6619 }, 6620 { 6621 "input": "\\\\\\.\\Y:", 6622 "base": null, 6623 "failure": true, 6624 "relativeTo": "non-opaque-path-base" 6625 }, 6626 "# file: drive letter cases from https://crbug.com/1078698 but lowercased", 6627 { 6628 "input": "file:///y:", 6629 "base": null, 6630 "href": "file:///y:", 6631 "protocol": "file:", 6632 "username": "", 6633 "password": "", 6634 "host": "", 6635 "hostname": "", 6636 "port": "", 6637 "pathname": "/y:", 6638 "search": "", 6639 "hash": "" 6640 }, 6641 { 6642 "input": "file:///y:/", 6643 "base": null, 6644 "href": "file:///y:/", 6645 "protocol": "file:", 6646 "username": "", 6647 "password": "", 6648 "host": "", 6649 "hostname": "", 6650 "port": "", 6651 "pathname": "/y:/", 6652 "search": "", 6653 "hash": "" 6654 }, 6655 { 6656 "input": "file:///./y", 6657 "base": null, 6658 "href": "file:///y", 6659 "protocol": "file:", 6660 "username": "", 6661 "password": "", 6662 "host": "", 6663 "hostname": "", 6664 "port": "", 6665 "pathname": "/y", 6666 "search": "", 6667 "hash": "" 6668 }, 6669 { 6670 "input": "file:///./y:", 6671 "base": null, 6672 "href": "file:///y:", 6673 "protocol": "file:", 6674 "username": "", 6675 "password": "", 6676 "host": "", 6677 "hostname": "", 6678 "port": "", 6679 "pathname": "/y:", 6680 "search": "", 6681 "hash": "" 6682 }, 6683 { 6684 "input": "\\\\\\.\\y:", 6685 "base": null, 6686 "failure": true, 6687 "relativeTo": "non-opaque-path-base" 6688 }, 6689 "# Additional file URL tests for (https://github.com/whatwg/url/issues/405)", 6690 { 6691 "input": "file://localhost//a//../..//foo", 6692 "base": null, 6693 "href": "file://///foo", 6694 "protocol": "file:", 6695 "username": "", 6696 "password": "", 6697 "host": "", 6698 "hostname": "", 6699 "port": "", 6700 "pathname": "///foo", 6701 "search": "", 6702 "hash": "" 6703 }, 6704 { 6705 "input": "file://localhost////foo", 6706 "base": null, 6707 "href": "file://////foo", 6708 "protocol": "file:", 6709 "username": "", 6710 "password": "", 6711 "host": "", 6712 "hostname": "", 6713 "port": "", 6714 "pathname": "////foo", 6715 "search": "", 6716 "hash": "" 6717 }, 6718 { 6719 "input": "file:////foo", 6720 "base": null, 6721 "href": "file:////foo", 6722 "protocol": "file:", 6723 "username": "", 6724 "password": "", 6725 "host": "", 6726 "hostname": "", 6727 "port": "", 6728 "pathname": "//foo", 6729 "search": "", 6730 "hash": "" 6731 }, 6732 { 6733 "input": "file:///one/two", 6734 "base": "file:///", 6735 "href": "file:///one/two", 6736 "protocol": "file:", 6737 "username": "", 6738 "password": "", 6739 "host": "", 6740 "hostname": "", 6741 "port": "", 6742 "pathname": "/one/two", 6743 "search": "", 6744 "hash": "" 6745 }, 6746 { 6747 "input": "file:////one/two", 6748 "base": "file:///", 6749 "href": "file:////one/two", 6750 "protocol": "file:", 6751 "username": "", 6752 "password": "", 6753 "host": "", 6754 "hostname": "", 6755 "port": "", 6756 "pathname": "//one/two", 6757 "search": "", 6758 "hash": "" 6759 }, 6760 { 6761 "input": "//one/two", 6762 "base": "file:///", 6763 "href": "file://one/two", 6764 "protocol": "file:", 6765 "username": "", 6766 "password": "", 6767 "host": "one", 6768 "hostname": "one", 6769 "port": "", 6770 "pathname": "/two", 6771 "search": "", 6772 "hash": "" 6773 }, 6774 { 6775 "input": "///one/two", 6776 "base": "file:///", 6777 "href": "file:///one/two", 6778 "protocol": "file:", 6779 "username": "", 6780 "password": "", 6781 "host": "", 6782 "hostname": "", 6783 "port": "", 6784 "pathname": "/one/two", 6785 "search": "", 6786 "hash": "" 6787 }, 6788 { 6789 "input": "////one/two", 6790 "base": "file:///", 6791 "href": "file:////one/two", 6792 "protocol": "file:", 6793 "username": "", 6794 "password": "", 6795 "host": "", 6796 "hostname": "", 6797 "port": "", 6798 "pathname": "//one/two", 6799 "search": "", 6800 "hash": "" 6801 }, 6802 { 6803 "input": "file:///.//", 6804 "base": "file:////", 6805 "href": "file:////", 6806 "protocol": "file:", 6807 "username": "", 6808 "password": "", 6809 "host": "", 6810 "hostname": "", 6811 "port": "", 6812 "pathname": "//", 6813 "search": "", 6814 "hash": "" 6815 }, 6816 "File URL tests for https://github.com/whatwg/url/issues/549", 6817 { 6818 "input": "file:.//p", 6819 "base": null, 6820 "href": "file:////p", 6821 "protocol": "file:", 6822 "username": "", 6823 "password": "", 6824 "host": "", 6825 "hostname": "", 6826 "port": "", 6827 "pathname": "//p", 6828 "search": "", 6829 "hash": "" 6830 }, 6831 { 6832 "input": "file:/.//p", 6833 "base": null, 6834 "href": "file:////p", 6835 "protocol": "file:", 6836 "username": "", 6837 "password": "", 6838 "host": "", 6839 "hostname": "", 6840 "port": "", 6841 "pathname": "//p", 6842 "search": "", 6843 "hash": "" 6844 }, 6845 "# IPv6 tests", 6846 { 6847 "input": "http://[1:0::]", 6848 "base": "http://example.net/", 6849 "href": "http://[1::]/", 6850 "origin": "http://[1::]", 6851 "protocol": "http:", 6852 "username": "", 6853 "password": "", 6854 "host": "[1::]", 6855 "hostname": "[1::]", 6856 "port": "", 6857 "pathname": "/", 6858 "search": "", 6859 "hash": "" 6860 }, 6861 { 6862 "input": "http://[0:1:2:3:4:5:6:7:8]", 6863 "base": "http://example.net/", 6864 "failure": true 6865 }, 6866 { 6867 "input": "https://[0::0::0]", 6868 "base": null, 6869 "failure": true 6870 }, 6871 { 6872 "input": "https://[0:.0]", 6873 "base": null, 6874 "failure": true 6875 }, 6876 { 6877 "input": "https://[0:0:]", 6878 "base": null, 6879 "failure": true 6880 }, 6881 { 6882 "input": "https://[0:1:2:3:4:5:6:7.0.0.0.1]", 6883 "base": null, 6884 "failure": true 6885 }, 6886 { 6887 "input": "https://[0:1.00.0.0.0]", 6888 "base": null, 6889 "failure": true 6890 }, 6891 { 6892 "input": "https://[0:1.290.0.0.0]", 6893 "base": null, 6894 "failure": true 6895 }, 6896 { 6897 "input": "https://[0:1.23.23]", 6898 "base": null, 6899 "failure": true 6900 }, 6901 "# Empty host", 6902 { 6903 "input": "http://?", 6904 "base": null, 6905 "failure": true 6906 }, 6907 { 6908 "input": "http://#", 6909 "base": null, 6910 "failure": true 6911 }, 6912 "Port overflow (2^32 + 81)", 6913 { 6914 "input": "http://f:4294967377/c", 6915 "base": "http://example.org/", 6916 "failure": true 6917 }, 6918 "Port overflow (2^64 + 81)", 6919 { 6920 "input": "http://f:18446744073709551697/c", 6921 "base": "http://example.org/", 6922 "failure": true 6923 }, 6924 "Port overflow (2^128 + 81)", 6925 { 6926 "input": "http://f:340282366920938463463374607431768211537/c", 6927 "base": "http://example.org/", 6928 "failure": true 6929 }, 6930 "# Non-special-URL path tests", 6931 { 6932 "input": "sc://ñ", 6933 "base": null, 6934 "href": "sc://%C3%B1", 6935 "origin": "null", 6936 "protocol": "sc:", 6937 "username": "", 6938 "password": "", 6939 "host": "%C3%B1", 6940 "hostname": "%C3%B1", 6941 "port": "", 6942 "pathname": "", 6943 "search": "", 6944 "hash": "" 6945 }, 6946 { 6947 "input": "sc://ñ?x", 6948 "base": null, 6949 "href": "sc://%C3%B1?x", 6950 "origin": "null", 6951 "protocol": "sc:", 6952 "username": "", 6953 "password": "", 6954 "host": "%C3%B1", 6955 "hostname": "%C3%B1", 6956 "port": "", 6957 "pathname": "", 6958 "search": "?x", 6959 "hash": "" 6960 }, 6961 { 6962 "input": "sc://ñ#x", 6963 "base": null, 6964 "href": "sc://%C3%B1#x", 6965 "origin": "null", 6966 "protocol": "sc:", 6967 "username": "", 6968 "password": "", 6969 "host": "%C3%B1", 6970 "hostname": "%C3%B1", 6971 "port": "", 6972 "pathname": "", 6973 "search": "", 6974 "hash": "#x" 6975 }, 6976 { 6977 "input": "#x", 6978 "base": "sc://ñ", 6979 "href": "sc://%C3%B1#x", 6980 "origin": "null", 6981 "protocol": "sc:", 6982 "username": "", 6983 "password": "", 6984 "host": "%C3%B1", 6985 "hostname": "%C3%B1", 6986 "port": "", 6987 "pathname": "", 6988 "search": "", 6989 "hash": "#x" 6990 }, 6991 { 6992 "input": "?x", 6993 "base": "sc://ñ", 6994 "href": "sc://%C3%B1?x", 6995 "origin": "null", 6996 "protocol": "sc:", 6997 "username": "", 6998 "password": "", 6999 "host": "%C3%B1", 7000 "hostname": "%C3%B1", 7001 "port": "", 7002 "pathname": "", 7003 "search": "?x", 7004 "hash": "" 7005 }, 7006 { 7007 "input": "sc://?", 7008 "base": null, 7009 "href": "sc://?", 7010 "protocol": "sc:", 7011 "username": "", 7012 "password": "", 7013 "host": "", 7014 "hostname": "", 7015 "port": "", 7016 "pathname": "", 7017 "search": "", 7018 "hash": "" 7019 }, 7020 { 7021 "input": "sc://#", 7022 "base": null, 7023 "href": "sc://#", 7024 "protocol": "sc:", 7025 "username": "", 7026 "password": "", 7027 "host": "", 7028 "hostname": "", 7029 "port": "", 7030 "pathname": "", 7031 "search": "", 7032 "hash": "" 7033 }, 7034 { 7035 "input": "///", 7036 "base": "sc://x/", 7037 "href": "sc:///", 7038 "protocol": "sc:", 7039 "username": "", 7040 "password": "", 7041 "host": "", 7042 "hostname": "", 7043 "port": "", 7044 "pathname": "/", 7045 "search": "", 7046 "hash": "" 7047 }, 7048 { 7049 "input": "////", 7050 "base": "sc://x/", 7051 "href": "sc:////", 7052 "protocol": "sc:", 7053 "username": "", 7054 "password": "", 7055 "host": "", 7056 "hostname": "", 7057 "port": "", 7058 "pathname": "//", 7059 "search": "", 7060 "hash": "" 7061 }, 7062 { 7063 "input": "////x/", 7064 "base": "sc://x/", 7065 "href": "sc:////x/", 7066 "protocol": "sc:", 7067 "username": "", 7068 "password": "", 7069 "host": "", 7070 "hostname": "", 7071 "port": "", 7072 "pathname": "//x/", 7073 "search": "", 7074 "hash": "" 7075 }, 7076 { 7077 "input": "tftp://foobar.com/someconfig;mode=netascii", 7078 "base": null, 7079 "href": "tftp://foobar.com/someconfig;mode=netascii", 7080 "origin": "null", 7081 "protocol": "tftp:", 7082 "username": "", 7083 "password": "", 7084 "host": "foobar.com", 7085 "hostname": "foobar.com", 7086 "port": "", 7087 "pathname": "/someconfig;mode=netascii", 7088 "search": "", 7089 "hash": "" 7090 }, 7091 { 7092 "input": "telnet://user:pass@foobar.com:23/", 7093 "base": null, 7094 "href": "telnet://user:pass@foobar.com:23/", 7095 "origin": "null", 7096 "protocol": "telnet:", 7097 "username": "user", 7098 "password": "pass", 7099 "host": "foobar.com:23", 7100 "hostname": "foobar.com", 7101 "port": "23", 7102 "pathname": "/", 7103 "search": "", 7104 "hash": "" 7105 }, 7106 { 7107 "input": "ut2004://10.10.10.10:7777/Index.ut2", 7108 "base": null, 7109 "href": "ut2004://10.10.10.10:7777/Index.ut2", 7110 "origin": "null", 7111 "protocol": "ut2004:", 7112 "username": "", 7113 "password": "", 7114 "host": "10.10.10.10:7777", 7115 "hostname": "10.10.10.10", 7116 "port": "7777", 7117 "pathname": "/Index.ut2", 7118 "search": "", 7119 "hash": "" 7120 }, 7121 { 7122 "input": "redis://foo:bar@somehost:6379/0?baz=bam&qux=baz", 7123 "base": null, 7124 "href": "redis://foo:bar@somehost:6379/0?baz=bam&qux=baz", 7125 "origin": "null", 7126 "protocol": "redis:", 7127 "username": "foo", 7128 "password": "bar", 7129 "host": "somehost:6379", 7130 "hostname": "somehost", 7131 "port": "6379", 7132 "pathname": "/0", 7133 "search": "?baz=bam&qux=baz", 7134 "hash": "" 7135 }, 7136 { 7137 "input": "rsync://foo@host:911/sup", 7138 "base": null, 7139 "href": "rsync://foo@host:911/sup", 7140 "origin": "null", 7141 "protocol": "rsync:", 7142 "username": "foo", 7143 "password": "", 7144 "host": "host:911", 7145 "hostname": "host", 7146 "port": "911", 7147 "pathname": "/sup", 7148 "search": "", 7149 "hash": "" 7150 }, 7151 { 7152 "input": "git://github.com/foo/bar.git", 7153 "base": null, 7154 "href": "git://github.com/foo/bar.git", 7155 "origin": "null", 7156 "protocol": "git:", 7157 "username": "", 7158 "password": "", 7159 "host": "github.com", 7160 "hostname": "github.com", 7161 "port": "", 7162 "pathname": "/foo/bar.git", 7163 "search": "", 7164 "hash": "" 7165 }, 7166 { 7167 "input": "irc://myserver.com:6999/channel?passwd", 7168 "base": null, 7169 "href": "irc://myserver.com:6999/channel?passwd", 7170 "origin": "null", 7171 "protocol": "irc:", 7172 "username": "", 7173 "password": "", 7174 "host": "myserver.com:6999", 7175 "hostname": "myserver.com", 7176 "port": "6999", 7177 "pathname": "/channel", 7178 "search": "?passwd", 7179 "hash": "" 7180 }, 7181 { 7182 "input": "dns://fw.example.org:9999/foo.bar.org?type=TXT", 7183 "base": null, 7184 "href": "dns://fw.example.org:9999/foo.bar.org?type=TXT", 7185 "origin": "null", 7186 "protocol": "dns:", 7187 "username": "", 7188 "password": "", 7189 "host": "fw.example.org:9999", 7190 "hostname": "fw.example.org", 7191 "port": "9999", 7192 "pathname": "/foo.bar.org", 7193 "search": "?type=TXT", 7194 "hash": "" 7195 }, 7196 { 7197 "input": "ldap://localhost:389/ou=People,o=JNDITutorial", 7198 "base": null, 7199 "href": "ldap://localhost:389/ou=People,o=JNDITutorial", 7200 "origin": "null", 7201 "protocol": "ldap:", 7202 "username": "", 7203 "password": "", 7204 "host": "localhost:389", 7205 "hostname": "localhost", 7206 "port": "389", 7207 "pathname": "/ou=People,o=JNDITutorial", 7208 "search": "", 7209 "hash": "" 7210 }, 7211 { 7212 "input": "git+https://github.com/foo/bar", 7213 "base": null, 7214 "href": "git+https://github.com/foo/bar", 7215 "origin": "null", 7216 "protocol": "git+https:", 7217 "username": "", 7218 "password": "", 7219 "host": "github.com", 7220 "hostname": "github.com", 7221 "port": "", 7222 "pathname": "/foo/bar", 7223 "search": "", 7224 "hash": "" 7225 }, 7226 { 7227 "input": "urn:ietf:rfc:2648", 7228 "base": null, 7229 "href": "urn:ietf:rfc:2648", 7230 "origin": "null", 7231 "protocol": "urn:", 7232 "username": "", 7233 "password": "", 7234 "host": "", 7235 "hostname": "", 7236 "port": "", 7237 "pathname": "ietf:rfc:2648", 7238 "search": "", 7239 "hash": "" 7240 }, 7241 { 7242 "input": "tag:joe@example.org,2001:foo/bar", 7243 "base": null, 7244 "href": "tag:joe@example.org,2001:foo/bar", 7245 "origin": "null", 7246 "protocol": "tag:", 7247 "username": "", 7248 "password": "", 7249 "host": "", 7250 "hostname": "", 7251 "port": "", 7252 "pathname": "joe@example.org,2001:foo/bar", 7253 "search": "", 7254 "hash": "" 7255 }, 7256 "Serialize /. in path", 7257 { 7258 "input": "non-spec:/.//", 7259 "base": null, 7260 "href": "non-spec:/.//", 7261 "protocol": "non-spec:", 7262 "username": "", 7263 "password": "", 7264 "host": "", 7265 "hostname": "", 7266 "port": "", 7267 "pathname": "//", 7268 "search": "", 7269 "hash": "" 7270 }, 7271 { 7272 "input": "non-spec:/..//", 7273 "base": null, 7274 "href": "non-spec:/.//", 7275 "protocol": "non-spec:", 7276 "username": "", 7277 "password": "", 7278 "host": "", 7279 "hostname": "", 7280 "port": "", 7281 "pathname": "//", 7282 "search": "", 7283 "hash": "" 7284 }, 7285 { 7286 "input": "non-spec:/a/..//", 7287 "base": null, 7288 "href": "non-spec:/.//", 7289 "protocol": "non-spec:", 7290 "username": "", 7291 "password": "", 7292 "host": "", 7293 "hostname": "", 7294 "port": "", 7295 "pathname": "//", 7296 "search": "", 7297 "hash": "" 7298 }, 7299 { 7300 "input": "non-spec:/.//path", 7301 "base": null, 7302 "href": "non-spec:/.//path", 7303 "protocol": "non-spec:", 7304 "username": "", 7305 "password": "", 7306 "host": "", 7307 "hostname": "", 7308 "port": "", 7309 "pathname": "//path", 7310 "search": "", 7311 "hash": "" 7312 }, 7313 { 7314 "input": "non-spec:/..//path", 7315 "base": null, 7316 "href": "non-spec:/.//path", 7317 "protocol": "non-spec:", 7318 "username": "", 7319 "password": "", 7320 "host": "", 7321 "hostname": "", 7322 "port": "", 7323 "pathname": "//path", 7324 "search": "", 7325 "hash": "" 7326 }, 7327 { 7328 "input": "non-spec:/a/..//path", 7329 "base": null, 7330 "href": "non-spec:/.//path", 7331 "protocol": "non-spec:", 7332 "username": "", 7333 "password": "", 7334 "host": "", 7335 "hostname": "", 7336 "port": "", 7337 "pathname": "//path", 7338 "search": "", 7339 "hash": "" 7340 }, 7341 { 7342 "input": "/.//path", 7343 "base": "non-spec:/p", 7344 "href": "non-spec:/.//path", 7345 "protocol": "non-spec:", 7346 "username": "", 7347 "password": "", 7348 "host": "", 7349 "hostname": "", 7350 "port": "", 7351 "pathname": "//path", 7352 "search": "", 7353 "hash": "" 7354 }, 7355 { 7356 "input": "/..//path", 7357 "base": "non-spec:/p", 7358 "href": "non-spec:/.//path", 7359 "protocol": "non-spec:", 7360 "username": "", 7361 "password": "", 7362 "host": "", 7363 "hostname": "", 7364 "port": "", 7365 "pathname": "//path", 7366 "search": "", 7367 "hash": "" 7368 }, 7369 { 7370 "input": "..//path", 7371 "base": "non-spec:/p", 7372 "href": "non-spec:/.//path", 7373 "protocol": "non-spec:", 7374 "username": "", 7375 "password": "", 7376 "host": "", 7377 "hostname": "", 7378 "port": "", 7379 "pathname": "//path", 7380 "search": "", 7381 "hash": "" 7382 }, 7383 { 7384 "input": "a/..//path", 7385 "base": "non-spec:/p", 7386 "href": "non-spec:/.//path", 7387 "protocol": "non-spec:", 7388 "username": "", 7389 "password": "", 7390 "host": "", 7391 "hostname": "", 7392 "port": "", 7393 "pathname": "//path", 7394 "search": "", 7395 "hash": "" 7396 }, 7397 { 7398 "input": "", 7399 "base": "non-spec:/..//p", 7400 "href": "non-spec:/.//p", 7401 "protocol": "non-spec:", 7402 "username": "", 7403 "password": "", 7404 "host": "", 7405 "hostname": "", 7406 "port": "", 7407 "pathname": "//p", 7408 "search": "", 7409 "hash": "" 7410 }, 7411 { 7412 "input": "path", 7413 "base": "non-spec:/..//p", 7414 "href": "non-spec:/.//path", 7415 "protocol": "non-spec:", 7416 "username": "", 7417 "password": "", 7418 "host": "", 7419 "hostname": "", 7420 "port": "", 7421 "pathname": "//path", 7422 "search": "", 7423 "hash": "" 7424 }, 7425 "Do not serialize /. in path", 7426 { 7427 "input": "../path", 7428 "base": "non-spec:/.//p", 7429 "href": "non-spec:/path", 7430 "protocol": "non-spec:", 7431 "username": "", 7432 "password": "", 7433 "host": "", 7434 "hostname": "", 7435 "port": "", 7436 "pathname": "/path", 7437 "search": "", 7438 "hash": "" 7439 }, 7440 "# percent encoded hosts in non-special-URLs", 7441 { 7442 "input": "non-special://%E2%80%A0/", 7443 "base": null, 7444 "href": "non-special://%E2%80%A0/", 7445 "protocol": "non-special:", 7446 "username": "", 7447 "password": "", 7448 "host": "%E2%80%A0", 7449 "hostname": "%E2%80%A0", 7450 "port": "", 7451 "pathname": "/", 7452 "search": "", 7453 "hash": "" 7454 }, 7455 { 7456 "input": "non-special://H%4fSt/path", 7457 "base": null, 7458 "href": "non-special://H%4fSt/path", 7459 "protocol": "non-special:", 7460 "username": "", 7461 "password": "", 7462 "host": "H%4fSt", 7463 "hostname": "H%4fSt", 7464 "port": "", 7465 "pathname": "/path", 7466 "search": "", 7467 "hash": "" 7468 }, 7469 "# IPv6 in non-special-URLs", 7470 { 7471 "input": "non-special://[1:2:0:0:5:0:0:0]/", 7472 "base": null, 7473 "href": "non-special://[1:2:0:0:5::]/", 7474 "protocol": "non-special:", 7475 "username": "", 7476 "password": "", 7477 "host": "[1:2:0:0:5::]", 7478 "hostname": "[1:2:0:0:5::]", 7479 "port": "", 7480 "pathname": "/", 7481 "search": "", 7482 "hash": "" 7483 }, 7484 { 7485 "input": "non-special://[1:2:0:0:0:0:0:3]/", 7486 "base": null, 7487 "href": "non-special://[1:2::3]/", 7488 "protocol": "non-special:", 7489 "username": "", 7490 "password": "", 7491 "host": "[1:2::3]", 7492 "hostname": "[1:2::3]", 7493 "port": "", 7494 "pathname": "/", 7495 "search": "", 7496 "hash": "" 7497 }, 7498 { 7499 "input": "non-special://[1:2::3]:80/", 7500 "base": null, 7501 "href": "non-special://[1:2::3]:80/", 7502 "protocol": "non-special:", 7503 "username": "", 7504 "password": "", 7505 "host": "[1:2::3]:80", 7506 "hostname": "[1:2::3]", 7507 "port": "80", 7508 "pathname": "/", 7509 "search": "", 7510 "hash": "" 7511 }, 7512 { 7513 "input": "non-special://[:80/", 7514 "base": null, 7515 "failure": true 7516 }, 7517 { 7518 "input": "blob:d3958f5c-0777-0845-9dcf-2cb28783acaf", 7519 "base": null, 7520 "href": "blob:d3958f5c-0777-0845-9dcf-2cb28783acaf", 7521 "origin": "null", 7522 "protocol": "blob:", 7523 "username": "", 7524 "password": "", 7525 "host": "", 7526 "hostname": "", 7527 "port": "", 7528 "pathname": "d3958f5c-0777-0845-9dcf-2cb28783acaf", 7529 "search": "", 7530 "hash": "" 7531 }, 7532 { 7533 "input": "blob:", 7534 "base": null, 7535 "href": "blob:", 7536 "origin": "null", 7537 "protocol": "blob:", 7538 "username": "", 7539 "password": "", 7540 "host": "", 7541 "hostname": "", 7542 "port": "", 7543 "pathname": "", 7544 "search": "", 7545 "hash": "" 7546 }, 7547 "Invalid IPv4 radix digits", 7548 { 7549 "input": "http://0x7f.0.0.0x7g", 7550 "base": null, 7551 "href": "http://0x7f.0.0.0x7g/", 7552 "protocol": "http:", 7553 "username": "", 7554 "password": "", 7555 "host": "0x7f.0.0.0x7g", 7556 "hostname": "0x7f.0.0.0x7g", 7557 "port": "", 7558 "pathname": "/", 7559 "search": "", 7560 "hash": "" 7561 }, 7562 { 7563 "input": "http://0X7F.0.0.0X7G", 7564 "base": null, 7565 "href": "http://0x7f.0.0.0x7g/", 7566 "protocol": "http:", 7567 "username": "", 7568 "password": "", 7569 "host": "0x7f.0.0.0x7g", 7570 "hostname": "0x7f.0.0.0x7g", 7571 "port": "", 7572 "pathname": "/", 7573 "search": "", 7574 "hash": "" 7575 }, 7576 "Invalid IPv4 portion of IPv6 address", 7577 { 7578 "input": "http://[::127.0.0.0.1]", 7579 "base": null, 7580 "failure": true 7581 }, 7582 "Uncompressed IPv6 addresses with 0", 7583 { 7584 "input": "http://[0:1:0:1:0:1:0:1]", 7585 "base": null, 7586 "href": "http://[0:1:0:1:0:1:0:1]/", 7587 "protocol": "http:", 7588 "username": "", 7589 "password": "", 7590 "host": "[0:1:0:1:0:1:0:1]", 7591 "hostname": "[0:1:0:1:0:1:0:1]", 7592 "port": "", 7593 "pathname": "/", 7594 "search": "", 7595 "hash": "" 7596 }, 7597 { 7598 "input": "http://[1:0:1:0:1:0:1:0]", 7599 "base": null, 7600 "href": "http://[1:0:1:0:1:0:1:0]/", 7601 "protocol": "http:", 7602 "username": "", 7603 "password": "", 7604 "host": "[1:0:1:0:1:0:1:0]", 7605 "hostname": "[1:0:1:0:1:0:1:0]", 7606 "port": "", 7607 "pathname": "/", 7608 "search": "", 7609 "hash": "" 7610 }, 7611 "Percent-encoded query and fragment", 7612 { 7613 "input": "http://example.org/test?\u0022", 7614 "base": null, 7615 "href": "http://example.org/test?%22", 7616 "protocol": "http:", 7617 "username": "", 7618 "password": "", 7619 "host": "example.org", 7620 "hostname": "example.org", 7621 "port": "", 7622 "pathname": "/test", 7623 "search": "?%22", 7624 "hash": "" 7625 }, 7626 { 7627 "input": "http://example.org/test?\u0023", 7628 "base": null, 7629 "href": "http://example.org/test?#", 7630 "protocol": "http:", 7631 "username": "", 7632 "password": "", 7633 "host": "example.org", 7634 "hostname": "example.org", 7635 "port": "", 7636 "pathname": "/test", 7637 "search": "", 7638 "hash": "" 7639 }, 7640 { 7641 "input": "http://example.org/test?\u003C", 7642 "base": null, 7643 "href": "http://example.org/test?%3C", 7644 "protocol": "http:", 7645 "username": "", 7646 "password": "", 7647 "host": "example.org", 7648 "hostname": "example.org", 7649 "port": "", 7650 "pathname": "/test", 7651 "search": "?%3C", 7652 "hash": "" 7653 }, 7654 { 7655 "input": "http://example.org/test?\u003E", 7656 "base": null, 7657 "href": "http://example.org/test?%3E", 7658 "protocol": "http:", 7659 "username": "", 7660 "password": "", 7661 "host": "example.org", 7662 "hostname": "example.org", 7663 "port": "", 7664 "pathname": "/test", 7665 "search": "?%3E", 7666 "hash": "" 7667 }, 7668 { 7669 "input": "http://example.org/test?\u2323", 7670 "base": null, 7671 "href": "http://example.org/test?%E2%8C%A3", 7672 "protocol": "http:", 7673 "username": "", 7674 "password": "", 7675 "host": "example.org", 7676 "hostname": "example.org", 7677 "port": "", 7678 "pathname": "/test", 7679 "search": "?%E2%8C%A3", 7680 "hash": "" 7681 }, 7682 { 7683 "input": "http://example.org/test?%23%23", 7684 "base": null, 7685 "href": "http://example.org/test?%23%23", 7686 "protocol": "http:", 7687 "username": "", 7688 "password": "", 7689 "host": "example.org", 7690 "hostname": "example.org", 7691 "port": "", 7692 "pathname": "/test", 7693 "search": "?%23%23", 7694 "hash": "" 7695 }, 7696 { 7697 "input": "http://example.org/test?%GH", 7698 "base": null, 7699 "href": "http://example.org/test?%GH", 7700 "protocol": "http:", 7701 "username": "", 7702 "password": "", 7703 "host": "example.org", 7704 "hostname": "example.org", 7705 "port": "", 7706 "pathname": "/test", 7707 "search": "?%GH", 7708 "hash": "" 7709 }, 7710 { 7711 "input": "http://example.org/test?a#%EF", 7712 "base": null, 7713 "href": "http://example.org/test?a#%EF", 7714 "protocol": "http:", 7715 "username": "", 7716 "password": "", 7717 "host": "example.org", 7718 "hostname": "example.org", 7719 "port": "", 7720 "pathname": "/test", 7721 "search": "?a", 7722 "hash": "#%EF" 7723 }, 7724 { 7725 "input": "http://example.org/test?a#%GH", 7726 "base": null, 7727 "href": "http://example.org/test?a#%GH", 7728 "protocol": "http:", 7729 "username": "", 7730 "password": "", 7731 "host": "example.org", 7732 "hostname": "example.org", 7733 "port": "", 7734 "pathname": "/test", 7735 "search": "?a", 7736 "hash": "#%GH" 7737 }, 7738 "URLs that require a non-about:blank base. (Also serve as invalid base tests.)", 7739 { 7740 "input": "a", 7741 "base": null, 7742 "failure": true, 7743 "relativeTo": "non-opaque-path-base" 7744 }, 7745 { 7746 "input": "a/", 7747 "base": null, 7748 "failure": true, 7749 "relativeTo": "non-opaque-path-base" 7750 }, 7751 { 7752 "input": "a//", 7753 "base": null, 7754 "failure": true, 7755 "relativeTo": "non-opaque-path-base" 7756 }, 7757 "Bases that don't fail to parse but fail to be bases", 7758 { 7759 "input": "test-a-colon.html", 7760 "base": "a:", 7761 "failure": true 7762 }, 7763 { 7764 "input": "test-a-colon-b.html", 7765 "base": "a:b", 7766 "failure": true 7767 }, 7768 "Other base URL tests, that must succeed", 7769 { 7770 "input": "test-a-colon-slash.html", 7771 "base": "a:/", 7772 "href": "a:/test-a-colon-slash.html", 7773 "protocol": "a:", 7774 "username": "", 7775 "password": "", 7776 "host": "", 7777 "hostname": "", 7778 "port": "", 7779 "pathname": "/test-a-colon-slash.html", 7780 "search": "", 7781 "hash": "" 7782 }, 7783 { 7784 "input": "test-a-colon-slash-slash.html", 7785 "base": "a://", 7786 "href": "a:///test-a-colon-slash-slash.html", 7787 "protocol": "a:", 7788 "username": "", 7789 "password": "", 7790 "host": "", 7791 "hostname": "", 7792 "port": "", 7793 "pathname": "/test-a-colon-slash-slash.html", 7794 "search": "", 7795 "hash": "" 7796 }, 7797 { 7798 "input": "test-a-colon-slash-b.html", 7799 "base": "a:/b", 7800 "href": "a:/test-a-colon-slash-b.html", 7801 "protocol": "a:", 7802 "username": "", 7803 "password": "", 7804 "host": "", 7805 "hostname": "", 7806 "port": "", 7807 "pathname": "/test-a-colon-slash-b.html", 7808 "search": "", 7809 "hash": "" 7810 }, 7811 { 7812 "input": "test-a-colon-slash-slash-b.html", 7813 "base": "a://b", 7814 "href": "a://b/test-a-colon-slash-slash-b.html", 7815 "protocol": "a:", 7816 "username": "", 7817 "password": "", 7818 "host": "b", 7819 "hostname": "b", 7820 "port": "", 7821 "pathname": "/test-a-colon-slash-slash-b.html", 7822 "search": "", 7823 "hash": "" 7824 }, 7825 "Null code point in fragment", 7826 { 7827 "input": "http://example.org/test?a#b\u0000c", 7828 "base": null, 7829 "href": "http://example.org/test?a#b%00c", 7830 "protocol": "http:", 7831 "username": "", 7832 "password": "", 7833 "host": "example.org", 7834 "hostname": "example.org", 7835 "port": "", 7836 "pathname": "/test", 7837 "search": "?a", 7838 "hash": "#b%00c" 7839 }, 7840 { 7841 "input": "non-spec://example.org/test?a#b\u0000c", 7842 "base": null, 7843 "href": "non-spec://example.org/test?a#b%00c", 7844 "protocol": "non-spec:", 7845 "username": "", 7846 "password": "", 7847 "host": "example.org", 7848 "hostname": "example.org", 7849 "port": "", 7850 "pathname": "/test", 7851 "search": "?a", 7852 "hash": "#b%00c" 7853 }, 7854 { 7855 "input": "non-spec:/test?a#b\u0000c", 7856 "base": null, 7857 "href": "non-spec:/test?a#b%00c", 7858 "protocol": "non-spec:", 7859 "username": "", 7860 "password": "", 7861 "host": "", 7862 "hostname": "", 7863 "port": "", 7864 "pathname": "/test", 7865 "search": "?a", 7866 "hash": "#b%00c" 7867 }, 7868 "First scheme char - not allowed: https://github.com/whatwg/url/issues/464", 7869 { 7870 "input": "10.0.0.7:8080/foo.html", 7871 "base": "file:///some/dir/bar.html", 7872 "href": "file:///some/dir/10.0.0.7:8080/foo.html", 7873 "protocol": "file:", 7874 "username": "", 7875 "password": "", 7876 "host": "", 7877 "hostname": "", 7878 "port": "", 7879 "pathname": "/some/dir/10.0.0.7:8080/foo.html", 7880 "search": "", 7881 "hash": "" 7882 }, 7883 "Subsequent scheme chars - not allowed", 7884 { 7885 "input": "a!@$*=/foo.html", 7886 "base": "file:///some/dir/bar.html", 7887 "href": "file:///some/dir/a!@$*=/foo.html", 7888 "protocol": "file:", 7889 "username": "", 7890 "password": "", 7891 "host": "", 7892 "hostname": "", 7893 "port": "", 7894 "pathname": "/some/dir/a!@$*=/foo.html", 7895 "search": "", 7896 "hash": "" 7897 }, 7898 "First and subsequent scheme chars - allowed", 7899 { 7900 "input": "a1234567890-+.:foo/bar", 7901 "base": "http://example.com/dir/file", 7902 "href": "a1234567890-+.:foo/bar", 7903 "protocol": "a1234567890-+.:", 7904 "username": "", 7905 "password": "", 7906 "host": "", 7907 "hostname": "", 7908 "port": "", 7909 "pathname": "foo/bar", 7910 "search": "", 7911 "hash": "" 7912 }, 7913 "IDNA ignored code points in file URLs hosts", 7914 { 7915 "input": "file://a\u00ADb/p", 7916 "base": null, 7917 "href": "file://ab/p", 7918 "protocol": "file:", 7919 "username": "", 7920 "password": "", 7921 "host": "ab", 7922 "hostname": "ab", 7923 "port": "", 7924 "pathname": "/p", 7925 "search": "", 7926 "hash": "" 7927 }, 7928 { 7929 "input": "file://a%C2%ADb/p", 7930 "base": null, 7931 "href": "file://ab/p", 7932 "protocol": "file:", 7933 "username": "", 7934 "password": "", 7935 "host": "ab", 7936 "hostname": "ab", 7937 "port": "", 7938 "pathname": "/p", 7939 "search": "", 7940 "hash": "" 7941 }, 7942 "IDNA hostnames which get mapped to 'localhost'", 7943 { 7944 "input": "file://loC𝐀𝐋𝐇𝐨𝐬𝐭/usr/bin", 7945 "base": null, 7946 "href": "file:///usr/bin", 7947 "protocol": "file:", 7948 "username": "", 7949 "password": "", 7950 "host": "", 7951 "hostname": "", 7952 "port": "", 7953 "pathname": "/usr/bin", 7954 "search": "", 7955 "hash": "" 7956 }, 7957 "Empty host after the domain to ASCII", 7958 { 7959 "input": "file://\u00ad/p", 7960 "base": null, 7961 "failure": true 7962 }, 7963 { 7964 "input": "file://%C2%AD/p", 7965 "base": null, 7966 "failure": true 7967 }, 7968 { 7969 "input": "file://xn--/p", 7970 "base": null, 7971 "failure": true 7972 }, 7973 "https://bugzilla.mozilla.org/show_bug.cgi?id=1647058", 7974 { 7975 "input": "#link", 7976 "base": "https://example.org/##link", 7977 "href": "https://example.org/#link", 7978 "protocol": "https:", 7979 "username": "", 7980 "password": "", 7981 "host": "example.org", 7982 "hostname": "example.org", 7983 "port": "", 7984 "pathname": "/", 7985 "search": "", 7986 "hash": "#link" 7987 }, 7988 "UTF-8 percent-encode of C0 control percent-encode set and supersets", 7989 { 7990 "input": "non-special:cannot-be-a-base-url-\u0000\u0001\u001F\u001E\u007E\u007F\u0080", 7991 "base": null, 7992 "hash": "", 7993 "host": "", 7994 "hostname": "", 7995 "href": "non-special:cannot-be-a-base-url-%00%01%1F%1E~%7F%C2%80", 7996 "origin": "null", 7997 "password": "", 7998 "pathname": "cannot-be-a-base-url-%00%01%1F%1E~%7F%C2%80", 7999 "port": "", 8000 "protocol": "non-special:", 8001 "search": "", 8002 "username": "" 8003 }, 8004 { 8005 "input": "https://www.example.com/path{\u007Fpath.html?query'\u007F=query#fragment<\u007Ffragment", 8006 "base": null, 8007 "hash": "#fragment%3C%7Ffragment", 8008 "host": "www.example.com", 8009 "hostname": "www.example.com", 8010 "href": "https://www.example.com/path%7B%7Fpath.html?query%27%7F=query#fragment%3C%7Ffragment", 8011 "origin": "https://www.example.com", 8012 "password": "", 8013 "pathname": "/path%7B%7Fpath.html", 8014 "port": "", 8015 "protocol": "https:", 8016 "search": "?query%27%7F=query", 8017 "username": "" 8018 }, 8019 { 8020 "input": "https://user:pass[\u007F@foo/bar", 8021 "base": "http://example.org", 8022 "hash": "", 8023 "host": "foo", 8024 "hostname": "foo", 8025 "href": "https://user:pass%5B%7F@foo/bar", 8026 "origin": "https://foo", 8027 "password": "pass%5B%7F", 8028 "pathname": "/bar", 8029 "port": "", 8030 "protocol": "https:", 8031 "search": "", 8032 "username": "user" 8033 }, 8034 "Tests for the distinct percent-encode sets", 8035 { 8036 "input": "foo:// !\"$%&'()*+,-.;<=>@[\\]^_`{|}~@host/", 8037 "base": null, 8038 "hash": "", 8039 "host": "host", 8040 "hostname": "host", 8041 "href": "foo://%20!%22$%&'()*+,-.%3B%3C%3D%3E%40%5B%5C%5D%5E_%60%7B%7C%7D~@host/", 8042 "origin": "null", 8043 "password": "", 8044 "pathname": "/", 8045 "port": "", 8046 "protocol": "foo:", 8047 "search": "", 8048 "username": "%20!%22$%&'()*+,-.%3B%3C%3D%3E%40%5B%5C%5D%5E_%60%7B%7C%7D~" 8049 }, 8050 { 8051 "input": "foo://joe: !\"$%&'()*+,-.:;<=>@[\\]^_`{|}~@host/", 8052 "base": null, 8053 "hash": "", 8054 "host": "host", 8055 "hostname": "host", 8056 "href": "foo://joe:%20!%22$%&'()*+,-.%3A%3B%3C%3D%3E%40%5B%5C%5D%5E_%60%7B%7C%7D~@host/", 8057 "origin": "null", 8058 "password": "%20!%22$%&'()*+,-.%3A%3B%3C%3D%3E%40%5B%5C%5D%5E_%60%7B%7C%7D~", 8059 "pathname": "/", 8060 "port": "", 8061 "protocol": "foo:", 8062 "search": "", 8063 "username": "joe" 8064 }, 8065 { 8066 "input": "foo://!\"$%&'()*+,-.;=_`{}~/", 8067 "base": null, 8068 "hash": "", 8069 "host": "!\"$%&'()*+,-.;=_`{}~", 8070 "hostname": "!\"$%&'()*+,-.;=_`{}~", 8071 "href": "foo://!\"$%&'()*+,-.;=_`{}~/", 8072 "origin": "null", 8073 "password": "", 8074 "pathname": "/", 8075 "port": "", 8076 "protocol": "foo:", 8077 "search": "", 8078 "username": "" 8079 }, 8080 { 8081 "input": "foo://host/ !\"$%&'()*+,-./:;<=>@[\\]^_`{|}~", 8082 "base": null, 8083 "hash": "", 8084 "host": "host", 8085 "hostname": "host", 8086 "href": "foo://host/%20!%22$%&'()*+,-./:;%3C=%3E@[\\]^_%60%7B|%7D~", 8087 "origin": "null", 8088 "password": "", 8089 "pathname": "/%20!%22$%&'()*+,-./:;%3C=%3E@[\\]^_%60%7B|%7D~", 8090 "port": "", 8091 "protocol": "foo:", 8092 "search": "", 8093 "username": "" 8094 }, 8095 { 8096 "input": "foo://host/dir/? !\"$%&'()*+,-./:;<=>?@[\\]^_`{|}~", 8097 "base": null, 8098 "hash": "", 8099 "host": "host", 8100 "hostname": "host", 8101 "href": "foo://host/dir/?%20!%22$%&'()*+,-./:;%3C=%3E?@[\\]^_`{|}~", 8102 "origin": "null", 8103 "password": "", 8104 "pathname": "/dir/", 8105 "port": "", 8106 "protocol": "foo:", 8107 "search": "?%20!%22$%&'()*+,-./:;%3C=%3E?@[\\]^_`{|}~", 8108 "username": "" 8109 }, 8110 { 8111 "input": "wss://host/dir/? !\"$%&'()*+,-./:;<=>?@[\\]^_`{|}~", 8112 "base": null, 8113 "hash": "", 8114 "host": "host", 8115 "hostname": "host", 8116 "href": "wss://host/dir/?%20!%22$%&%27()*+,-./:;%3C=%3E?@[\\]^_`{|}~", 8117 "origin": "wss://host", 8118 "password": "", 8119 "pathname": "/dir/", 8120 "port": "", 8121 "protocol": "wss:", 8122 "search": "?%20!%22$%&%27()*+,-./:;%3C=%3E?@[\\]^_`{|}~", 8123 "username": "" 8124 }, 8125 { 8126 "input": "foo://host/dir/# !\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~", 8127 "base": null, 8128 "hash": "#%20!%22#$%&'()*+,-./:;%3C=%3E?@[\\]^_%60{|}~", 8129 "host": "host", 8130 "hostname": "host", 8131 "href": "foo://host/dir/#%20!%22#$%&'()*+,-./:;%3C=%3E?@[\\]^_%60{|}~", 8132 "origin": "null", 8133 "password": "", 8134 "pathname": "/dir/", 8135 "port": "", 8136 "protocol": "foo:", 8137 "search": "", 8138 "username": "" 8139 }, 8140 "Ensure that input schemes are not ignored when resolving non-special URLs", 8141 { 8142 "input": "abc:rootless", 8143 "base": "abc://host/path", 8144 "hash": "", 8145 "host": "", 8146 "hostname": "", 8147 "href": "abc:rootless", 8148 "password": "", 8149 "pathname": "rootless", 8150 "port": "", 8151 "protocol": "abc:", 8152 "search": "", 8153 "username": "" 8154 }, 8155 { 8156 "input": "abc:rootless", 8157 "base": "abc:/path", 8158 "hash": "", 8159 "host": "", 8160 "hostname": "", 8161 "href": "abc:rootless", 8162 "password": "", 8163 "pathname": "rootless", 8164 "port": "", 8165 "protocol": "abc:", 8166 "search": "", 8167 "username": "" 8168 }, 8169 { 8170 "input": "abc:rootless", 8171 "base": "abc:path", 8172 "hash": "", 8173 "host": "", 8174 "hostname": "", 8175 "href": "abc:rootless", 8176 "password": "", 8177 "pathname": "rootless", 8178 "port": "", 8179 "protocol": "abc:", 8180 "search": "", 8181 "username": "" 8182 }, 8183 { 8184 "input": "abc:/rooted", 8185 "base": "abc://host/path", 8186 "hash": "", 8187 "host": "", 8188 "hostname": "", 8189 "href": "abc:/rooted", 8190 "password": "", 8191 "pathname": "/rooted", 8192 "port": "", 8193 "protocol": "abc:", 8194 "search": "", 8195 "username": "" 8196 }, 8197 "Empty query and fragment with blank should throw an error", 8198 { 8199 "input": "#", 8200 "base": null, 8201 "failure": true, 8202 "relativeTo": "any-base" 8203 }, 8204 { 8205 "input": "?", 8206 "base": null, 8207 "failure": true, 8208 "relativeTo": "non-opaque-path-base" 8209 }, 8210 "Last component looks like a number, but not valid IPv4", 8211 { 8212 "input": "http://1.2.3.4.5", 8213 "base": "http://other.com/", 8214 "failure": true 8215 }, 8216 { 8217 "input": "http://1.2.3.4.5.", 8218 "base": "http://other.com/", 8219 "failure": true 8220 }, 8221 { 8222 "input": "http://0..0x300/", 8223 "base": null, 8224 "failure": true 8225 }, 8226 { 8227 "input": "http://0..0x300./", 8228 "base": null, 8229 "failure": true 8230 }, 8231 { 8232 "input": "http://256.256.256.256.256", 8233 "base": "http://other.com/", 8234 "failure": true 8235 }, 8236 { 8237 "input": "http://256.256.256.256.256.", 8238 "base": "http://other.com/", 8239 "failure": true 8240 }, 8241 { 8242 "input": "http://1.2.3.08", 8243 "base": null, 8244 "failure": true 8245 }, 8246 { 8247 "input": "http://1.2.3.08.", 8248 "base": null, 8249 "failure": true 8250 }, 8251 { 8252 "input": "http://1.2.3.09", 8253 "base": null, 8254 "failure": true 8255 }, 8256 { 8257 "input": "http://09.2.3.4", 8258 "base": null, 8259 "failure": true 8260 }, 8261 { 8262 "input": "http://09.2.3.4.", 8263 "base": null, 8264 "failure": true 8265 }, 8266 { 8267 "input": "http://01.2.3.4.5", 8268 "base": null, 8269 "failure": true 8270 }, 8271 { 8272 "input": "http://01.2.3.4.5.", 8273 "base": null, 8274 "failure": true 8275 }, 8276 { 8277 "input": "http://0x100.2.3.4", 8278 "base": null, 8279 "failure": true 8280 }, 8281 { 8282 "input": "http://0x100.2.3.4.", 8283 "base": null, 8284 "failure": true 8285 }, 8286 { 8287 "input": "http://0x1.2.3.4.5", 8288 "base": null, 8289 "failure": true 8290 }, 8291 { 8292 "input": "http://0x1.2.3.4.5.", 8293 "base": null, 8294 "failure": true 8295 }, 8296 { 8297 "input": "http://foo.1.2.3.4", 8298 "base": null, 8299 "failure": true 8300 }, 8301 { 8302 "input": "http://foo.1.2.3.4.", 8303 "base": null, 8304 "failure": true 8305 }, 8306 { 8307 "input": "http://foo.2.3.4", 8308 "base": null, 8309 "failure": true 8310 }, 8311 { 8312 "input": "http://foo.2.3.4.", 8313 "base": null, 8314 "failure": true 8315 }, 8316 { 8317 "input": "http://foo.09", 8318 "base": null, 8319 "failure": true 8320 }, 8321 { 8322 "input": "http://foo.09.", 8323 "base": null, 8324 "failure": true 8325 }, 8326 { 8327 "input": "http://foo.0x4", 8328 "base": null, 8329 "failure": true 8330 }, 8331 { 8332 "input": "http://foo.0x4.", 8333 "base": null, 8334 "failure": true 8335 }, 8336 { 8337 "input": "http://foo.09..", 8338 "base": null, 8339 "hash": "", 8340 "host": "foo.09..", 8341 "hostname": "foo.09..", 8342 "href": "http://foo.09../", 8343 "password": "", 8344 "pathname": "/", 8345 "port": "", 8346 "protocol": "http:", 8347 "search": "", 8348 "username": "" 8349 }, 8350 { 8351 "input": "http://0999999999999999999/", 8352 "base": null, 8353 "failure": true 8354 }, 8355 { 8356 "input": "http://foo.0x", 8357 "base": null, 8358 "failure": true 8359 }, 8360 { 8361 "input": "http://foo.0XFfFfFfFfFfFfFfFfFfAcE123", 8362 "base": null, 8363 "failure": true 8364 }, 8365 { 8366 "input": "http://💩.123/", 8367 "base": null, 8368 "failure": true 8369 }, 8370 "U+0000 and U+FFFF in various places", 8371 { 8372 "input": "https://\u0000y", 8373 "base": null, 8374 "failure": true 8375 }, 8376 { 8377 "input": "https://x/\u0000y", 8378 "base": null, 8379 "hash": "", 8380 "host": "x", 8381 "hostname": "x", 8382 "href": "https://x/%00y", 8383 "password": "", 8384 "pathname": "/%00y", 8385 "port": "", 8386 "protocol": "https:", 8387 "search": "", 8388 "username": "" 8389 }, 8390 { 8391 "input": "https://x/?\u0000y", 8392 "base": null, 8393 "hash": "", 8394 "host": "x", 8395 "hostname": "x", 8396 "href": "https://x/?%00y", 8397 "password": "", 8398 "pathname": "/", 8399 "port": "", 8400 "protocol": "https:", 8401 "search": "?%00y", 8402 "username": "" 8403 }, 8404 { 8405 "input": "https://x/?#\u0000y", 8406 "base": null, 8407 "hash": "#%00y", 8408 "host": "x", 8409 "hostname": "x", 8410 "href": "https://x/?#%00y", 8411 "password": "", 8412 "pathname": "/", 8413 "port": "", 8414 "protocol": "https:", 8415 "search": "", 8416 "username": "" 8417 }, 8418 { 8419 "input": "https://\uFFFFy", 8420 "base": null, 8421 "failure": true 8422 }, 8423 { 8424 "input": "https://x/\uFFFFy", 8425 "base": null, 8426 "hash": "", 8427 "host": "x", 8428 "hostname": "x", 8429 "href": "https://x/%EF%BF%BFy", 8430 "password": "", 8431 "pathname": "/%EF%BF%BFy", 8432 "port": "", 8433 "protocol": "https:", 8434 "search": "", 8435 "username": "" 8436 }, 8437 { 8438 "input": "https://x/?\uFFFFy", 8439 "base": null, 8440 "hash": "", 8441 "host": "x", 8442 "hostname": "x", 8443 "href": "https://x/?%EF%BF%BFy", 8444 "password": "", 8445 "pathname": "/", 8446 "port": "", 8447 "protocol": "https:", 8448 "search": "?%EF%BF%BFy", 8449 "username": "" 8450 }, 8451 { 8452 "input": "https://x/?#\uFFFFy", 8453 "base": null, 8454 "hash": "#%EF%BF%BFy", 8455 "host": "x", 8456 "hostname": "x", 8457 "href": "https://x/?#%EF%BF%BFy", 8458 "password": "", 8459 "pathname": "/", 8460 "port": "", 8461 "protocol": "https:", 8462 "search": "", 8463 "username": "" 8464 }, 8465 { 8466 "input": "non-special:\u0000y", 8467 "base": null, 8468 "hash": "", 8469 "host": "", 8470 "hostname": "", 8471 "href": "non-special:%00y", 8472 "password": "", 8473 "pathname": "%00y", 8474 "port": "", 8475 "protocol": "non-special:", 8476 "search": "", 8477 "username": "" 8478 }, 8479 { 8480 "input": "non-special:x/\u0000y", 8481 "base": null, 8482 "hash": "", 8483 "host": "", 8484 "hostname": "", 8485 "href": "non-special:x/%00y", 8486 "password": "", 8487 "pathname": "x/%00y", 8488 "port": "", 8489 "protocol": "non-special:", 8490 "search": "", 8491 "username": "" 8492 }, 8493 { 8494 "input": "non-special:x/?\u0000y", 8495 "base": null, 8496 "hash": "", 8497 "host": "", 8498 "hostname": "", 8499 "href": "non-special:x/?%00y", 8500 "password": "", 8501 "pathname": "x/", 8502 "port": "", 8503 "protocol": "non-special:", 8504 "search": "?%00y", 8505 "username": "" 8506 }, 8507 { 8508 "input": "non-special:x/?#\u0000y", 8509 "base": null, 8510 "hash": "#%00y", 8511 "host": "", 8512 "hostname": "", 8513 "href": "non-special:x/?#%00y", 8514 "password": "", 8515 "pathname": "x/", 8516 "port": "", 8517 "protocol": "non-special:", 8518 "search": "", 8519 "username": "" 8520 }, 8521 { 8522 "input": "non-special:\uFFFFy", 8523 "base": null, 8524 "hash": "", 8525 "host": "", 8526 "hostname": "", 8527 "href": "non-special:%EF%BF%BFy", 8528 "password": "", 8529 "pathname": "%EF%BF%BFy", 8530 "port": "", 8531 "protocol": "non-special:", 8532 "search": "", 8533 "username": "" 8534 }, 8535 { 8536 "input": "non-special:x/\uFFFFy", 8537 "base": null, 8538 "hash": "", 8539 "host": "", 8540 "hostname": "", 8541 "href": "non-special:x/%EF%BF%BFy", 8542 "password": "", 8543 "pathname": "x/%EF%BF%BFy", 8544 "port": "", 8545 "protocol": "non-special:", 8546 "search": "", 8547 "username": "" 8548 }, 8549 { 8550 "input": "non-special:x/?\uFFFFy", 8551 "base": null, 8552 "hash": "", 8553 "host": "", 8554 "hostname": "", 8555 "href": "non-special:x/?%EF%BF%BFy", 8556 "password": "", 8557 "pathname": "x/", 8558 "port": "", 8559 "protocol": "non-special:", 8560 "search": "?%EF%BF%BFy", 8561 "username": "" 8562 }, 8563 { 8564 "input": "non-special:x/?#\uFFFFy", 8565 "base": null, 8566 "hash": "#%EF%BF%BFy", 8567 "host": "", 8568 "hostname": "", 8569 "href": "non-special:x/?#%EF%BF%BFy", 8570 "password": "", 8571 "pathname": "x/", 8572 "port": "", 8573 "protocol": "non-special:", 8574 "search": "", 8575 "username": "" 8576 }, 8577 { 8578 "input": "", 8579 "base": null, 8580 "failure": true, 8581 "relativeTo": "non-opaque-path-base" 8582 }, 8583 { 8584 "input": "https://example.com/\"quoted\"", 8585 "base": null, 8586 "hash": "", 8587 "host": "example.com", 8588 "hostname": "example.com", 8589 "href": "https://example.com/%22quoted%22", 8590 "origin": "https://example.com", 8591 "password": "", 8592 "pathname": "/%22quoted%22", 8593 "port": "", 8594 "protocol": "https:", 8595 "search": "", 8596 "username": "" 8597 }, 8598 { 8599 "input": "https://a%C2%ADb/", 8600 "base": null, 8601 "hash": "", 8602 "host": "ab", 8603 "hostname": "ab", 8604 "href": "https://ab/", 8605 "origin": "https://ab", 8606 "password": "", 8607 "pathname": "/", 8608 "port": "", 8609 "protocol": "https:", 8610 "search": "", 8611 "username": "" 8612 }, 8613 { 8614 "comment": "Empty host after domain to ASCII", 8615 "input": "https://\u00AD/", 8616 "base": null, 8617 "failure": true 8618 }, 8619 { 8620 "input": "https://%C2%AD/", 8621 "base": null, 8622 "failure": true 8623 }, 8624 { 8625 "input": "https://xn--/", 8626 "base": null, 8627 "failure": true 8628 }, 8629 "Non-special schemes that some implementations might incorrectly treat as special", 8630 { 8631 "input": "data://example.com:8080/pathname?search#hash", 8632 "base": null, 8633 "href": "data://example.com:8080/pathname?search#hash", 8634 "origin": "null", 8635 "protocol": "data:", 8636 "username": "", 8637 "password": "", 8638 "host": "example.com:8080", 8639 "hostname": "example.com", 8640 "port": "8080", 8641 "pathname": "/pathname", 8642 "search": "?search", 8643 "hash": "#hash" 8644 }, 8645 { 8646 "input": "data:///test", 8647 "base": null, 8648 "href": "data:///test", 8649 "origin": "null", 8650 "protocol": "data:", 8651 "username": "", 8652 "password": "", 8653 "host": "", 8654 "hostname": "", 8655 "port": "", 8656 "pathname": "/test", 8657 "search": "", 8658 "hash": "" 8659 }, 8660 { 8661 "input": "data://test/a/../b", 8662 "base": null, 8663 "href": "data://test/b", 8664 "origin": "null", 8665 "protocol": "data:", 8666 "username": "", 8667 "password": "", 8668 "host": "test", 8669 "hostname": "test", 8670 "port": "", 8671 "pathname": "/b", 8672 "search": "", 8673 "hash": "" 8674 }, 8675 { 8676 "input": "data://:443", 8677 "base": null, 8678 "failure": true 8679 }, 8680 { 8681 "input": "data://test:test", 8682 "base": null, 8683 "failure": true 8684 }, 8685 { 8686 "input": "data://[:1]", 8687 "base": null, 8688 "failure": true 8689 }, 8690 { 8691 "input": "javascript://example.com:8080/pathname?search#hash", 8692 "base": null, 8693 "href": "javascript://example.com:8080/pathname?search#hash", 8694 "origin": "null", 8695 "protocol": "javascript:", 8696 "username": "", 8697 "password": "", 8698 "host": "example.com:8080", 8699 "hostname": "example.com", 8700 "port": "8080", 8701 "pathname": "/pathname", 8702 "search": "?search", 8703 "hash": "#hash" 8704 }, 8705 { 8706 "input": "javascript:///test", 8707 "base": null, 8708 "href": "javascript:///test", 8709 "origin": "null", 8710 "protocol": "javascript:", 8711 "username": "", 8712 "password": "", 8713 "host": "", 8714 "hostname": "", 8715 "port": "", 8716 "pathname": "/test", 8717 "search": "", 8718 "hash": "" 8719 }, 8720 { 8721 "input": "javascript://test/a/../b", 8722 "base": null, 8723 "href": "javascript://test/b", 8724 "origin": "null", 8725 "protocol": "javascript:", 8726 "username": "", 8727 "password": "", 8728 "host": "test", 8729 "hostname": "test", 8730 "port": "", 8731 "pathname": "/b", 8732 "search": "", 8733 "hash": "" 8734 }, 8735 { 8736 "input": "javascript://:443", 8737 "base": null, 8738 "failure": true 8739 }, 8740 { 8741 "input": "javascript://test:test", 8742 "base": null, 8743 "failure": true 8744 }, 8745 { 8746 "input": "javascript://[:1]", 8747 "base": null, 8748 "failure": true 8749 }, 8750 { 8751 "input": "mailto://example.com:8080/pathname?search#hash", 8752 "base": null, 8753 "href": "mailto://example.com:8080/pathname?search#hash", 8754 "origin": "null", 8755 "protocol": "mailto:", 8756 "username": "", 8757 "password": "", 8758 "host": "example.com:8080", 8759 "hostname": "example.com", 8760 "port": "8080", 8761 "pathname": "/pathname", 8762 "search": "?search", 8763 "hash": "#hash" 8764 }, 8765 { 8766 "input": "mailto:///test", 8767 "base": null, 8768 "href": "mailto:///test", 8769 "origin": "null", 8770 "protocol": "mailto:", 8771 "username": "", 8772 "password": "", 8773 "host": "", 8774 "hostname": "", 8775 "port": "", 8776 "pathname": "/test", 8777 "search": "", 8778 "hash": "" 8779 }, 8780 { 8781 "input": "mailto://test/a/../b", 8782 "base": null, 8783 "href": "mailto://test/b", 8784 "origin": "null", 8785 "protocol": "mailto:", 8786 "username": "", 8787 "password": "", 8788 "host": "test", 8789 "hostname": "test", 8790 "port": "", 8791 "pathname": "/b", 8792 "search": "", 8793 "hash": "" 8794 }, 8795 { 8796 "input": "mailto://:443", 8797 "base": null, 8798 "failure": true 8799 }, 8800 { 8801 "input": "mailto://test:test", 8802 "base": null, 8803 "failure": true 8804 }, 8805 { 8806 "input": "mailto://[:1]", 8807 "base": null, 8808 "failure": true 8809 }, 8810 { 8811 "input": "intent://example.com:8080/pathname?search#hash", 8812 "base": null, 8813 "href": "intent://example.com:8080/pathname?search#hash", 8814 "origin": "null", 8815 "protocol": "intent:", 8816 "username": "", 8817 "password": "", 8818 "host": "example.com:8080", 8819 "hostname": "example.com", 8820 "port": "8080", 8821 "pathname": "/pathname", 8822 "search": "?search", 8823 "hash": "#hash" 8824 }, 8825 { 8826 "input": "intent:///test", 8827 "base": null, 8828 "href": "intent:///test", 8829 "origin": "null", 8830 "protocol": "intent:", 8831 "username": "", 8832 "password": "", 8833 "host": "", 8834 "hostname": "", 8835 "port": "", 8836 "pathname": "/test", 8837 "search": "", 8838 "hash": "" 8839 }, 8840 { 8841 "input": "intent://test/a/../b", 8842 "base": null, 8843 "href": "intent://test/b", 8844 "origin": "null", 8845 "protocol": "intent:", 8846 "username": "", 8847 "password": "", 8848 "host": "test", 8849 "hostname": "test", 8850 "port": "", 8851 "pathname": "/b", 8852 "search": "", 8853 "hash": "" 8854 }, 8855 { 8856 "input": "intent://:443", 8857 "base": null, 8858 "failure": true 8859 }, 8860 { 8861 "input": "intent://test:test", 8862 "base": null, 8863 "failure": true 8864 }, 8865 { 8866 "input": "intent://[:1]", 8867 "base": null, 8868 "failure": true 8869 }, 8870 { 8871 "input": "urn://example.com:8080/pathname?search#hash", 8872 "base": null, 8873 "href": "urn://example.com:8080/pathname?search#hash", 8874 "origin": "null", 8875 "protocol": "urn:", 8876 "username": "", 8877 "password": "", 8878 "host": "example.com:8080", 8879 "hostname": "example.com", 8880 "port": "8080", 8881 "pathname": "/pathname", 8882 "search": "?search", 8883 "hash": "#hash" 8884 }, 8885 { 8886 "input": "urn:///test", 8887 "base": null, 8888 "href": "urn:///test", 8889 "origin": "null", 8890 "protocol": "urn:", 8891 "username": "", 8892 "password": "", 8893 "host": "", 8894 "hostname": "", 8895 "port": "", 8896 "pathname": "/test", 8897 "search": "", 8898 "hash": "" 8899 }, 8900 { 8901 "input": "urn://test/a/../b", 8902 "base": null, 8903 "href": "urn://test/b", 8904 "origin": "null", 8905 "protocol": "urn:", 8906 "username": "", 8907 "password": "", 8908 "host": "test", 8909 "hostname": "test", 8910 "port": "", 8911 "pathname": "/b", 8912 "search": "", 8913 "hash": "" 8914 }, 8915 { 8916 "input": "urn://:443", 8917 "base": null, 8918 "failure": true 8919 }, 8920 { 8921 "input": "urn://test:test", 8922 "base": null, 8923 "failure": true 8924 }, 8925 { 8926 "input": "urn://[:1]", 8927 "base": null, 8928 "failure": true 8929 }, 8930 { 8931 "input": "turn://example.com:8080/pathname?search#hash", 8932 "base": null, 8933 "href": "turn://example.com:8080/pathname?search#hash", 8934 "origin": "null", 8935 "protocol": "turn:", 8936 "username": "", 8937 "password": "", 8938 "host": "example.com:8080", 8939 "hostname": "example.com", 8940 "port": "8080", 8941 "pathname": "/pathname", 8942 "search": "?search", 8943 "hash": "#hash" 8944 }, 8945 { 8946 "input": "turn:///test", 8947 "base": null, 8948 "href": "turn:///test", 8949 "origin": "null", 8950 "protocol": "turn:", 8951 "username": "", 8952 "password": "", 8953 "host": "", 8954 "hostname": "", 8955 "port": "", 8956 "pathname": "/test", 8957 "search": "", 8958 "hash": "" 8959 }, 8960 { 8961 "input": "turn://test/a/../b", 8962 "base": null, 8963 "href": "turn://test/b", 8964 "origin": "null", 8965 "protocol": "turn:", 8966 "username": "", 8967 "password": "", 8968 "host": "test", 8969 "hostname": "test", 8970 "port": "", 8971 "pathname": "/b", 8972 "search": "", 8973 "hash": "" 8974 }, 8975 { 8976 "input": "turn://:443", 8977 "base": null, 8978 "failure": true 8979 }, 8980 { 8981 "input": "turn://test:test", 8982 "base": null, 8983 "failure": true 8984 }, 8985 { 8986 "input": "turn://[:1]", 8987 "base": null, 8988 "failure": true 8989 }, 8990 { 8991 "input": "stun://example.com:8080/pathname?search#hash", 8992 "base": null, 8993 "href": "stun://example.com:8080/pathname?search#hash", 8994 "origin": "null", 8995 "protocol": "stun:", 8996 "username": "", 8997 "password": "", 8998 "host": "example.com:8080", 8999 "hostname": "example.com", 9000 "port": "8080", 9001 "pathname": "/pathname", 9002 "search": "?search", 9003 "hash": "#hash" 9004 }, 9005 { 9006 "input": "stun:///test", 9007 "base": null, 9008 "href": "stun:///test", 9009 "origin": "null", 9010 "protocol": "stun:", 9011 "username": "", 9012 "password": "", 9013 "host": "", 9014 "hostname": "", 9015 "port": "", 9016 "pathname": "/test", 9017 "search": "", 9018 "hash": "" 9019 }, 9020 { 9021 "input": "stun://test/a/../b", 9022 "base": null, 9023 "href": "stun://test/b", 9024 "origin": "null", 9025 "protocol": "stun:", 9026 "username": "", 9027 "password": "", 9028 "host": "test", 9029 "hostname": "test", 9030 "port": "", 9031 "pathname": "/b", 9032 "search": "", 9033 "hash": "" 9034 }, 9035 { 9036 "input": "stun://:443", 9037 "base": null, 9038 "failure": true 9039 }, 9040 { 9041 "input": "stun://test:test", 9042 "base": null, 9043 "failure": true 9044 }, 9045 { 9046 "input": "stun://[:1]", 9047 "base": null, 9048 "failure": true 9049 } 9050 ]