urltestdata-orig.json (137437B)
1 [ 2 "# Based on http://trac.webkit.org/browser/trunk/LayoutTests/fast/url/script-tests/segments.js", 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": "about:blank", 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": "about:blank", 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": "about:blank", 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": "about:blank", 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# e", 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": "# e" 167 }, 168 { 169 "input": "lolscheme:x x#x x", 170 "base": "about:blank", 171 "href": "lolscheme:x x#x x", 172 "protocol": "lolscheme:", 173 "username": "", 174 "password": "", 175 "host": "", 176 "hostname": "", 177 "port": "", 178 "pathname": "x x", 179 "search": "", 180 "hash": "#x x" 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": "::", 544 "base": "http://example.org/foo/bar", 545 "href": "http://example.org/foo/::", 546 "origin": "http://example.org", 547 "protocol": "http:", 548 "username": "", 549 "password": "", 550 "host": "example.org", 551 "hostname": "example.org", 552 "port": "", 553 "pathname": "/foo/::", 554 "search": "", 555 "hash": "" 556 }, 557 { 558 "input": "::23", 559 "base": "http://example.org/foo/bar", 560 "href": "http://example.org/foo/::23", 561 "origin": "http://example.org", 562 "protocol": "http:", 563 "username": "", 564 "password": "", 565 "host": "example.org", 566 "hostname": "example.org", 567 "port": "", 568 "pathname": "/foo/::23", 569 "search": "", 570 "hash": "" 571 }, 572 { 573 "input": "foo://", 574 "base": "http://example.org/foo/bar", 575 "href": "foo:///", 576 "origin": "null", 577 "protocol": "foo:", 578 "username": "", 579 "password": "", 580 "host": "", 581 "hostname": "", 582 "port": "", 583 "pathname": "/", 584 "search": "", 585 "hash": "" 586 }, 587 { 588 "input": "http://a:b@c:29/d", 589 "base": "http://example.org/foo/bar", 590 "href": "http://a:b@c:29/d", 591 "origin": "http://c:29", 592 "protocol": "http:", 593 "username": "a", 594 "password": "b", 595 "host": "c:29", 596 "hostname": "c", 597 "port": "29", 598 "pathname": "/d", 599 "search": "", 600 "hash": "" 601 }, 602 { 603 "input": "http::@c:29", 604 "base": "http://example.org/foo/bar", 605 "href": "http://example.org/foo/:@c:29", 606 "origin": "http://example.org", 607 "protocol": "http:", 608 "username": "", 609 "password": "", 610 "host": "example.org", 611 "hostname": "example.org", 612 "port": "", 613 "pathname": "/foo/:@c:29", 614 "search": "", 615 "hash": "" 616 }, 617 { 618 "input": "http://&a:foo(b]c@d:2/", 619 "base": "http://example.org/foo/bar", 620 "href": "http://&a:foo(b%5Dc@d:2/", 621 "origin": "http://d:2", 622 "protocol": "http:", 623 "username": "&a", 624 "password": "foo(b%5Dc", 625 "host": "d:2", 626 "hostname": "d", 627 "port": "2", 628 "pathname": "/", 629 "search": "", 630 "hash": "" 631 }, 632 { 633 "input": "http://::@c@d:2", 634 "base": "http://example.org/foo/bar", 635 "href": "http://:%3A%40c@d:2/", 636 "origin": "http://d:2", 637 "protocol": "http:", 638 "username": "", 639 "password": "%3A%40c", 640 "host": "d:2", 641 "hostname": "d", 642 "port": "2", 643 "pathname": "/", 644 "search": "", 645 "hash": "" 646 }, 647 { 648 "input": "http://foo.com:b@d/", 649 "base": "http://example.org/foo/bar", 650 "href": "http://foo.com:b@d/", 651 "origin": "http://d", 652 "protocol": "http:", 653 "username": "foo.com", 654 "password": "b", 655 "host": "d", 656 "hostname": "d", 657 "port": "", 658 "pathname": "/", 659 "search": "", 660 "hash": "" 661 }, 662 { 663 "input": "http://foo.com/\\@", 664 "base": "http://example.org/foo/bar", 665 "href": "http://foo.com//@", 666 "origin": "http://foo.com", 667 "protocol": "http:", 668 "username": "", 669 "password": "", 670 "host": "foo.com", 671 "hostname": "foo.com", 672 "port": "", 673 "pathname": "//@", 674 "search": "", 675 "hash": "" 676 }, 677 { 678 "input": "http:\\\\foo.com\\", 679 "base": "http://example.org/foo/bar", 680 "href": "http://foo.com/", 681 "origin": "http://foo.com", 682 "protocol": "http:", 683 "username": "", 684 "password": "", 685 "host": "foo.com", 686 "hostname": "foo.com", 687 "port": "", 688 "pathname": "/", 689 "search": "", 690 "hash": "" 691 }, 692 { 693 "input": "http:\\\\a\\b:c\\d@foo.com\\", 694 "base": "http://example.org/foo/bar", 695 "href": "http://a/b:c/d@foo.com/", 696 "origin": "http://a", 697 "protocol": "http:", 698 "username": "", 699 "password": "", 700 "host": "a", 701 "hostname": "a", 702 "port": "", 703 "pathname": "/b:c/d@foo.com/", 704 "search": "", 705 "hash": "" 706 }, 707 { 708 "input": "foo:/", 709 "base": "http://example.org/foo/bar", 710 "href": "foo:/", 711 "origin": "null", 712 "protocol": "foo:", 713 "username": "", 714 "password": "", 715 "host": "", 716 "hostname": "", 717 "port": "", 718 "pathname": "/", 719 "search": "", 720 "hash": "" 721 }, 722 { 723 "input": "foo:/bar.com/", 724 "base": "http://example.org/foo/bar", 725 "href": "foo:/bar.com/", 726 "origin": "null", 727 "protocol": "foo:", 728 "username": "", 729 "password": "", 730 "host": "", 731 "hostname": "", 732 "port": "", 733 "pathname": "/bar.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": "c:/foo", 784 "base": "http://example.org/foo/bar", 785 "href": "c:/foo", 786 "origin": "null", 787 "protocol": "c:", 788 "username": "", 789 "password": "", 790 "host": "", 791 "hostname": "", 792 "port": "", 793 "pathname": "/foo", 794 "search": "", 795 "hash": "" 796 }, 797 { 798 "input": "//foo/bar", 799 "base": "http://example.org/foo/bar", 800 "href": "http://foo/bar", 801 "origin": "http://foo", 802 "protocol": "http:", 803 "username": "", 804 "password": "", 805 "host": "foo", 806 "hostname": "foo", 807 "port": "", 808 "pathname": "/bar", 809 "search": "", 810 "hash": "" 811 }, 812 { 813 "input": "http://foo/path;a??e#f#g", 814 "base": "http://example.org/foo/bar", 815 "href": "http://foo/path;a??e#f#g", 816 "origin": "http://foo", 817 "protocol": "http:", 818 "username": "", 819 "password": "", 820 "host": "foo", 821 "hostname": "foo", 822 "port": "", 823 "pathname": "/path;a", 824 "search": "??e", 825 "hash": "#f#g" 826 }, 827 { 828 "input": "http://foo/abcd?efgh?ijkl", 829 "base": "http://example.org/foo/bar", 830 "href": "http://foo/abcd?efgh?ijkl", 831 "origin": "http://foo", 832 "protocol": "http:", 833 "username": "", 834 "password": "", 835 "host": "foo", 836 "hostname": "foo", 837 "port": "", 838 "pathname": "/abcd", 839 "search": "?efgh?ijkl", 840 "hash": "" 841 }, 842 { 843 "input": "http://foo/abcd#foo?bar", 844 "base": "http://example.org/foo/bar", 845 "href": "http://foo/abcd#foo?bar", 846 "origin": "http://foo", 847 "protocol": "http:", 848 "username": "", 849 "password": "", 850 "host": "foo", 851 "hostname": "foo", 852 "port": "", 853 "pathname": "/abcd", 854 "search": "", 855 "hash": "#foo?bar" 856 }, 857 { 858 "input": "[61:24:74]:98", 859 "base": "http://example.org/foo/bar", 860 "href": "http://example.org/foo/[61:24:74]:98", 861 "origin": "http://example.org", 862 "protocol": "http:", 863 "username": "", 864 "password": "", 865 "host": "example.org", 866 "hostname": "example.org", 867 "port": "", 868 "pathname": "/foo/[61:24:74]:98", 869 "search": "", 870 "hash": "" 871 }, 872 { 873 "input": "http:[61:27]/:foo", 874 "base": "http://example.org/foo/bar", 875 "href": "http://example.org/foo/[61:27]/:foo", 876 "origin": "http://example.org", 877 "protocol": "http:", 878 "username": "", 879 "password": "", 880 "host": "example.org", 881 "hostname": "example.org", 882 "port": "", 883 "pathname": "/foo/[61:27]/:foo", 884 "search": "", 885 "hash": "" 886 }, 887 { 888 "input": "http://[1::2]:3:4", 889 "base": "http://example.org/foo/bar", 890 "failure": true 891 }, 892 { 893 "input": "http://2001::1", 894 "base": "http://example.org/foo/bar", 895 "failure": true 896 }, 897 { 898 "input": "http://2001::1]", 899 "base": "http://example.org/foo/bar", 900 "failure": true 901 }, 902 { 903 "input": "http://2001::1]:80", 904 "base": "http://example.org/foo/bar", 905 "failure": true 906 }, 907 { 908 "input": "http://[2001::1]", 909 "base": "http://example.org/foo/bar", 910 "href": "http://[2001::1]/", 911 "origin": "http://[2001::1]", 912 "protocol": "http:", 913 "username": "", 914 "password": "", 915 "host": "[2001::1]", 916 "hostname": "[2001::1]", 917 "port": "", 918 "pathname": "/", 919 "search": "", 920 "hash": "" 921 }, 922 { 923 "input": "http://[::127.0.0.1]", 924 "base": "http://example.org/foo/bar", 925 "href": "http://[::7f00:1]/", 926 "origin": "http://[::7f00:1]", 927 "protocol": "http:", 928 "username": "", 929 "password": "", 930 "host": "[::7f00:1]", 931 "hostname": "[::7f00:1]", 932 "port": "", 933 "pathname": "/", 934 "search": "", 935 "hash": "" 936 }, 937 { 938 "input": "http://[0:0:0:0:0:0:13.1.68.3]", 939 "base": "http://example.org/foo/bar", 940 "href": "http://[::d01:4403]/", 941 "origin": "http://[::d01:4403]", 942 "protocol": "http:", 943 "username": "", 944 "password": "", 945 "host": "[::d01:4403]", 946 "hostname": "[::d01:4403]", 947 "port": "", 948 "pathname": "/", 949 "search": "", 950 "hash": "" 951 }, 952 { 953 "input": "http://[2001::1]:80", 954 "base": "http://example.org/foo/bar", 955 "href": "http://[2001::1]/", 956 "origin": "http://[2001::1]", 957 "protocol": "http:", 958 "username": "", 959 "password": "", 960 "host": "[2001::1]", 961 "hostname": "[2001::1]", 962 "port": "", 963 "pathname": "/", 964 "search": "", 965 "hash": "" 966 }, 967 { 968 "input": "http:/example.com/", 969 "base": "http://example.org/foo/bar", 970 "href": "http://example.org/example.com/", 971 "origin": "http://example.org", 972 "protocol": "http:", 973 "username": "", 974 "password": "", 975 "host": "example.org", 976 "hostname": "example.org", 977 "port": "", 978 "pathname": "/example.com/", 979 "search": "", 980 "hash": "" 981 }, 982 { 983 "input": "ftp:/example.com/", 984 "base": "http://example.org/foo/bar", 985 "href": "ftp://example.com/", 986 "origin": "ftp://example.com", 987 "protocol": "ftp:", 988 "username": "", 989 "password": "", 990 "host": "example.com", 991 "hostname": "example.com", 992 "port": "", 993 "pathname": "/", 994 "search": "", 995 "hash": "" 996 }, 997 { 998 "input": "https:/example.com/", 999 "base": "http://example.org/foo/bar", 1000 "href": "https://example.com/", 1001 "origin": "https://example.com", 1002 "protocol": "https:", 1003 "username": "", 1004 "password": "", 1005 "host": "example.com", 1006 "hostname": "example.com", 1007 "port": "", 1008 "pathname": "/", 1009 "search": "", 1010 "hash": "" 1011 }, 1012 { 1013 "input": "madeupscheme:/example.com/", 1014 "base": "http://example.org/foo/bar", 1015 "href": "madeupscheme:/example.com/", 1016 "origin": "null", 1017 "protocol": "madeupscheme:", 1018 "username": "", 1019 "password": "", 1020 "host": "", 1021 "hostname": "", 1022 "port": "", 1023 "pathname": "/example.com/", 1024 "search": "", 1025 "hash": "" 1026 }, 1027 { 1028 "input": "file:/example.com/", 1029 "base": "http://example.org/foo/bar", 1030 "href": "file:///example.com/", 1031 "protocol": "file:", 1032 "username": "", 1033 "password": "", 1034 "host": "", 1035 "hostname": "", 1036 "port": "", 1037 "pathname": "/example.com/", 1038 "search": "", 1039 "hash": "" 1040 }, 1041 { 1042 "input": "file://example:1/", 1043 "base": "about:blank", 1044 "failure": true 1045 }, 1046 { 1047 "input": "file://example:test/", 1048 "base": "about:blank", 1049 "failure": true 1050 }, 1051 { 1052 "input": "file://example%/", 1053 "base": "about:blank", 1054 "failure": true 1055 }, 1056 { 1057 "input": "file://[example]/", 1058 "base": "about:blank", 1059 "failure": true 1060 }, 1061 { 1062 "input": "ftps:/example.com/", 1063 "base": "http://example.org/foo/bar", 1064 "href": "ftps:/example.com/", 1065 "origin": "null", 1066 "protocol": "ftps:", 1067 "username": "", 1068 "password": "", 1069 "host": "", 1070 "hostname": "", 1071 "port": "", 1072 "pathname": "/example.com/", 1073 "search": "", 1074 "hash": "" 1075 }, 1076 { 1077 "input": "gopher:/example.com/", 1078 "base": "http://example.org/foo/bar", 1079 "href": "gopher://example.com/", 1080 "origin": "gopher://example.com", 1081 "protocol": "gopher:", 1082 "username": "", 1083 "password": "", 1084 "host": "example.com", 1085 "hostname": "example.com", 1086 "port": "", 1087 "pathname": "/", 1088 "search": "", 1089 "hash": "" 1090 }, 1091 { 1092 "input": "ws:/example.com/", 1093 "base": "http://example.org/foo/bar", 1094 "href": "ws://example.com/", 1095 "origin": "ws://example.com", 1096 "protocol": "ws:", 1097 "username": "", 1098 "password": "", 1099 "host": "example.com", 1100 "hostname": "example.com", 1101 "port": "", 1102 "pathname": "/", 1103 "search": "", 1104 "hash": "" 1105 }, 1106 { 1107 "input": "wss:/example.com/", 1108 "base": "http://example.org/foo/bar", 1109 "href": "wss://example.com/", 1110 "origin": "wss://example.com", 1111 "protocol": "wss:", 1112 "username": "", 1113 "password": "", 1114 "host": "example.com", 1115 "hostname": "example.com", 1116 "port": "", 1117 "pathname": "/", 1118 "search": "", 1119 "hash": "" 1120 }, 1121 { 1122 "input": "data:/example.com/", 1123 "base": "http://example.org/foo/bar", 1124 "href": "data:/example.com/", 1125 "origin": "null", 1126 "protocol": "data:", 1127 "username": "", 1128 "password": "", 1129 "host": "", 1130 "hostname": "", 1131 "port": "", 1132 "pathname": "/example.com/", 1133 "search": "", 1134 "hash": "" 1135 }, 1136 { 1137 "input": "javascript:/example.com/", 1138 "base": "http://example.org/foo/bar", 1139 "href": "javascript:/example.com/", 1140 "origin": "null", 1141 "protocol": "javascript:", 1142 "username": "", 1143 "password": "", 1144 "host": "", 1145 "hostname": "", 1146 "port": "", 1147 "pathname": "/example.com/", 1148 "search": "", 1149 "hash": "" 1150 }, 1151 { 1152 "input": "mailto:/example.com/", 1153 "base": "http://example.org/foo/bar", 1154 "href": "mailto:/example.com/", 1155 "origin": "null", 1156 "protocol": "mailto:", 1157 "username": "", 1158 "password": "", 1159 "host": "", 1160 "hostname": "", 1161 "port": "", 1162 "pathname": "/example.com/", 1163 "search": "", 1164 "hash": "" 1165 }, 1166 { 1167 "input": "http:example.com/", 1168 "base": "http://example.org/foo/bar", 1169 "href": "http://example.org/foo/example.com/", 1170 "origin": "http://example.org", 1171 "protocol": "http:", 1172 "username": "", 1173 "password": "", 1174 "host": "example.org", 1175 "hostname": "example.org", 1176 "port": "", 1177 "pathname": "/foo/example.com/", 1178 "search": "", 1179 "hash": "" 1180 }, 1181 { 1182 "input": "ftp:example.com/", 1183 "base": "http://example.org/foo/bar", 1184 "href": "ftp://example.com/", 1185 "origin": "ftp://example.com", 1186 "protocol": "ftp:", 1187 "username": "", 1188 "password": "", 1189 "host": "example.com", 1190 "hostname": "example.com", 1191 "port": "", 1192 "pathname": "/", 1193 "search": "", 1194 "hash": "" 1195 }, 1196 { 1197 "input": "https:example.com/", 1198 "base": "http://example.org/foo/bar", 1199 "href": "https://example.com/", 1200 "origin": "https://example.com", 1201 "protocol": "https:", 1202 "username": "", 1203 "password": "", 1204 "host": "example.com", 1205 "hostname": "example.com", 1206 "port": "", 1207 "pathname": "/", 1208 "search": "", 1209 "hash": "" 1210 }, 1211 { 1212 "input": "madeupscheme:example.com/", 1213 "base": "http://example.org/foo/bar", 1214 "href": "madeupscheme:example.com/", 1215 "origin": "null", 1216 "protocol": "madeupscheme:", 1217 "username": "", 1218 "password": "", 1219 "host": "", 1220 "hostname": "", 1221 "port": "", 1222 "pathname": "example.com/", 1223 "search": "", 1224 "hash": "" 1225 }, 1226 { 1227 "input": "ftps:example.com/", 1228 "base": "http://example.org/foo/bar", 1229 "href": "ftps:example.com/", 1230 "origin": "null", 1231 "protocol": "ftps:", 1232 "username": "", 1233 "password": "", 1234 "host": "", 1235 "hostname": "", 1236 "port": "", 1237 "pathname": "example.com/", 1238 "search": "", 1239 "hash": "" 1240 }, 1241 { 1242 "input": "gopher:example.com/", 1243 "base": "http://example.org/foo/bar", 1244 "href": "gopher://example.com/", 1245 "origin": "gopher://example.com", 1246 "protocol": "gopher:", 1247 "username": "", 1248 "password": "", 1249 "host": "example.com", 1250 "hostname": "example.com", 1251 "port": "", 1252 "pathname": "/", 1253 "search": "", 1254 "hash": "" 1255 }, 1256 { 1257 "input": "ws:example.com/", 1258 "base": "http://example.org/foo/bar", 1259 "href": "ws://example.com/", 1260 "origin": "ws://example.com", 1261 "protocol": "ws:", 1262 "username": "", 1263 "password": "", 1264 "host": "example.com", 1265 "hostname": "example.com", 1266 "port": "", 1267 "pathname": "/", 1268 "search": "", 1269 "hash": "" 1270 }, 1271 { 1272 "input": "wss:example.com/", 1273 "base": "http://example.org/foo/bar", 1274 "href": "wss://example.com/", 1275 "origin": "wss://example.com", 1276 "protocol": "wss:", 1277 "username": "", 1278 "password": "", 1279 "host": "example.com", 1280 "hostname": "example.com", 1281 "port": "", 1282 "pathname": "/", 1283 "search": "", 1284 "hash": "" 1285 }, 1286 { 1287 "input": "data:example.com/", 1288 "base": "http://example.org/foo/bar", 1289 "href": "data:example.com/", 1290 "origin": "null", 1291 "protocol": "data:", 1292 "username": "", 1293 "password": "", 1294 "host": "", 1295 "hostname": "", 1296 "port": "", 1297 "pathname": "example.com/", 1298 "search": "", 1299 "hash": "" 1300 }, 1301 { 1302 "input": "javascript:example.com/", 1303 "base": "http://example.org/foo/bar", 1304 "href": "javascript:example.com/", 1305 "origin": "null", 1306 "protocol": "javascript:", 1307 "username": "", 1308 "password": "", 1309 "host": "", 1310 "hostname": "", 1311 "port": "", 1312 "pathname": "example.com/", 1313 "search": "", 1314 "hash": "" 1315 }, 1316 { 1317 "input": "mailto:example.com/", 1318 "base": "http://example.org/foo/bar", 1319 "href": "mailto:example.com/", 1320 "origin": "null", 1321 "protocol": "mailto:", 1322 "username": "", 1323 "password": "", 1324 "host": "", 1325 "hostname": "", 1326 "port": "", 1327 "pathname": "example.com/", 1328 "search": "", 1329 "hash": "" 1330 }, 1331 { 1332 "input": "/a/b/c", 1333 "base": "http://example.org/foo/bar", 1334 "href": "http://example.org/a/b/c", 1335 "origin": "http://example.org", 1336 "protocol": "http:", 1337 "username": "", 1338 "password": "", 1339 "host": "example.org", 1340 "hostname": "example.org", 1341 "port": "", 1342 "pathname": "/a/b/c", 1343 "search": "", 1344 "hash": "" 1345 }, 1346 { 1347 "input": "/a/ /c", 1348 "base": "http://example.org/foo/bar", 1349 "href": "http://example.org/a/%20/c", 1350 "origin": "http://example.org", 1351 "protocol": "http:", 1352 "username": "", 1353 "password": "", 1354 "host": "example.org", 1355 "hostname": "example.org", 1356 "port": "", 1357 "pathname": "/a/%20/c", 1358 "search": "", 1359 "hash": "" 1360 }, 1361 { 1362 "input": "/a%2fc", 1363 "base": "http://example.org/foo/bar", 1364 "href": "http://example.org/a%2fc", 1365 "origin": "http://example.org", 1366 "protocol": "http:", 1367 "username": "", 1368 "password": "", 1369 "host": "example.org", 1370 "hostname": "example.org", 1371 "port": "", 1372 "pathname": "/a%2fc", 1373 "search": "", 1374 "hash": "" 1375 }, 1376 { 1377 "input": "/a/%2f/c", 1378 "base": "http://example.org/foo/bar", 1379 "href": "http://example.org/a/%2f/c", 1380 "origin": "http://example.org", 1381 "protocol": "http:", 1382 "username": "", 1383 "password": "", 1384 "host": "example.org", 1385 "hostname": "example.org", 1386 "port": "", 1387 "pathname": "/a/%2f/c", 1388 "search": "", 1389 "hash": "" 1390 }, 1391 { 1392 "input": "#β", 1393 "base": "http://example.org/foo/bar", 1394 "href": "http://example.org/foo/bar#%CE%B2", 1395 "origin": "http://example.org", 1396 "protocol": "http:", 1397 "username": "", 1398 "password": "", 1399 "host": "example.org", 1400 "hostname": "example.org", 1401 "port": "", 1402 "pathname": "/foo/bar", 1403 "search": "", 1404 "hash": "#%CE%B2" 1405 }, 1406 { 1407 "input": "data:text/html,test#test", 1408 "base": "http://example.org/foo/bar", 1409 "href": "data:text/html,test#test", 1410 "origin": "null", 1411 "protocol": "data:", 1412 "username": "", 1413 "password": "", 1414 "host": "", 1415 "hostname": "", 1416 "port": "", 1417 "pathname": "text/html,test", 1418 "search": "", 1419 "hash": "#test" 1420 }, 1421 { 1422 "input": "tel:1234567890", 1423 "base": "http://example.org/foo/bar", 1424 "href": "tel:1234567890", 1425 "origin": "null", 1426 "protocol": "tel:", 1427 "username": "", 1428 "password": "", 1429 "host": "", 1430 "hostname": "", 1431 "port": "", 1432 "pathname": "1234567890", 1433 "search": "", 1434 "hash": "" 1435 }, 1436 "# Based on http://trac.webkit.org/browser/trunk/LayoutTests/fast/url/file.html", 1437 { 1438 "input": "file:c:\\foo\\bar.html", 1439 "base": "file:///tmp/mock/path", 1440 "href": "file:///c:/foo/bar.html", 1441 "protocol": "file:", 1442 "username": "", 1443 "password": "", 1444 "host": "", 1445 "hostname": "", 1446 "port": "", 1447 "pathname": "/c:/foo/bar.html", 1448 "search": "", 1449 "hash": "" 1450 }, 1451 { 1452 "input": " File:c|////foo\\bar.html", 1453 "base": "file:///tmp/mock/path", 1454 "href": "file:///c:////foo/bar.html", 1455 "protocol": "file:", 1456 "username": "", 1457 "password": "", 1458 "host": "", 1459 "hostname": "", 1460 "port": "", 1461 "pathname": "/c:////foo/bar.html", 1462 "search": "", 1463 "hash": "" 1464 }, 1465 { 1466 "input": "C|/foo/bar", 1467 "base": "file:///tmp/mock/path", 1468 "href": "file:///C:/foo/bar", 1469 "protocol": "file:", 1470 "username": "", 1471 "password": "", 1472 "host": "", 1473 "hostname": "", 1474 "port": "", 1475 "pathname": "/C:/foo/bar", 1476 "search": "", 1477 "hash": "" 1478 }, 1479 { 1480 "input": "/C|\\foo\\bar", 1481 "base": "file:///tmp/mock/path", 1482 "href": "file:///C:/foo/bar", 1483 "protocol": "file:", 1484 "username": "", 1485 "password": "", 1486 "host": "", 1487 "hostname": "", 1488 "port": "", 1489 "pathname": "/C:/foo/bar", 1490 "search": "", 1491 "hash": "" 1492 }, 1493 { 1494 "input": "//C|/foo/bar", 1495 "base": "file:///tmp/mock/path", 1496 "href": "file:///C:/foo/bar", 1497 "protocol": "file:", 1498 "username": "", 1499 "password": "", 1500 "host": "", 1501 "hostname": "", 1502 "port": "", 1503 "pathname": "/C:/foo/bar", 1504 "search": "", 1505 "hash": "" 1506 }, 1507 { 1508 "input": "//server/file", 1509 "base": "file:///tmp/mock/path", 1510 "href": "file://server/file", 1511 "protocol": "file:", 1512 "username": "", 1513 "password": "", 1514 "host": "server", 1515 "hostname": "server", 1516 "port": "", 1517 "pathname": "/file", 1518 "search": "", 1519 "hash": "" 1520 }, 1521 { 1522 "input": "\\\\server\\file", 1523 "base": "file:///tmp/mock/path", 1524 "href": "file://server/file", 1525 "protocol": "file:", 1526 "username": "", 1527 "password": "", 1528 "host": "server", 1529 "hostname": "server", 1530 "port": "", 1531 "pathname": "/file", 1532 "search": "", 1533 "hash": "" 1534 }, 1535 { 1536 "input": "/\\server/file", 1537 "base": "file:///tmp/mock/path", 1538 "href": "file://server/file", 1539 "protocol": "file:", 1540 "username": "", 1541 "password": "", 1542 "host": "server", 1543 "hostname": "server", 1544 "port": "", 1545 "pathname": "/file", 1546 "search": "", 1547 "hash": "" 1548 }, 1549 { 1550 "input": "file:///foo/bar.txt", 1551 "base": "file:///tmp/mock/path", 1552 "href": "file:///foo/bar.txt", 1553 "protocol": "file:", 1554 "username": "", 1555 "password": "", 1556 "host": "", 1557 "hostname": "", 1558 "port": "", 1559 "pathname": "/foo/bar.txt", 1560 "search": "", 1561 "hash": "" 1562 }, 1563 { 1564 "input": "file:///home/me", 1565 "base": "file:///tmp/mock/path", 1566 "href": "file:///home/me", 1567 "protocol": "file:", 1568 "username": "", 1569 "password": "", 1570 "host": "", 1571 "hostname": "", 1572 "port": "", 1573 "pathname": "/home/me", 1574 "search": "", 1575 "hash": "" 1576 }, 1577 { 1578 "input": "//", 1579 "base": "file:///tmp/mock/path", 1580 "href": "file:///", 1581 "protocol": "file:", 1582 "username": "", 1583 "password": "", 1584 "host": "", 1585 "hostname": "", 1586 "port": "", 1587 "pathname": "/", 1588 "search": "", 1589 "hash": "" 1590 }, 1591 { 1592 "input": "///", 1593 "base": "file:///tmp/mock/path", 1594 "href": "file:///", 1595 "protocol": "file:", 1596 "username": "", 1597 "password": "", 1598 "host": "", 1599 "hostname": "", 1600 "port": "", 1601 "pathname": "/", 1602 "search": "", 1603 "hash": "" 1604 }, 1605 { 1606 "input": "///test", 1607 "base": "file:///tmp/mock/path", 1608 "href": "file:///test", 1609 "protocol": "file:", 1610 "username": "", 1611 "password": "", 1612 "host": "", 1613 "hostname": "", 1614 "port": "", 1615 "pathname": "/test", 1616 "search": "", 1617 "hash": "" 1618 }, 1619 { 1620 "input": "file://test", 1621 "base": "file:///tmp/mock/path", 1622 "href": "file://test/", 1623 "protocol": "file:", 1624 "username": "", 1625 "password": "", 1626 "host": "test", 1627 "hostname": "test", 1628 "port": "", 1629 "pathname": "/", 1630 "search": "", 1631 "hash": "" 1632 }, 1633 { 1634 "input": "file://localhost", 1635 "base": "file:///tmp/mock/path", 1636 "href": "file:///", 1637 "protocol": "file:", 1638 "username": "", 1639 "password": "", 1640 "host": "", 1641 "hostname": "", 1642 "port": "", 1643 "pathname": "/", 1644 "search": "", 1645 "hash": "" 1646 }, 1647 { 1648 "input": "file://localhost/", 1649 "base": "file:///tmp/mock/path", 1650 "href": "file:///", 1651 "protocol": "file:", 1652 "username": "", 1653 "password": "", 1654 "host": "", 1655 "hostname": "", 1656 "port": "", 1657 "pathname": "/", 1658 "search": "", 1659 "hash": "" 1660 }, 1661 { 1662 "input": "file://localhost/test", 1663 "base": "file:///tmp/mock/path", 1664 "href": "file:///test", 1665 "protocol": "file:", 1666 "username": "", 1667 "password": "", 1668 "host": "", 1669 "hostname": "", 1670 "port": "", 1671 "pathname": "/test", 1672 "search": "", 1673 "hash": "" 1674 }, 1675 { 1676 "input": "test", 1677 "base": "file:///tmp/mock/path", 1678 "href": "file:///tmp/mock/test", 1679 "protocol": "file:", 1680 "username": "", 1681 "password": "", 1682 "host": "", 1683 "hostname": "", 1684 "port": "", 1685 "pathname": "/tmp/mock/test", 1686 "search": "", 1687 "hash": "" 1688 }, 1689 { 1690 "input": "file:test", 1691 "base": "file:///tmp/mock/path", 1692 "href": "file:///tmp/mock/test", 1693 "protocol": "file:", 1694 "username": "", 1695 "password": "", 1696 "host": "", 1697 "hostname": "", 1698 "port": "", 1699 "pathname": "/tmp/mock/test", 1700 "search": "", 1701 "hash": "" 1702 }, 1703 "# Based on http://trac.webkit.org/browser/trunk/LayoutTests/fast/url/script-tests/path.js", 1704 { 1705 "input": "http://example.com/././foo", 1706 "base": "about:blank", 1707 "href": "http://example.com/foo", 1708 "origin": "http://example.com", 1709 "protocol": "http:", 1710 "username": "", 1711 "password": "", 1712 "host": "example.com", 1713 "hostname": "example.com", 1714 "port": "", 1715 "pathname": "/foo", 1716 "search": "", 1717 "hash": "" 1718 }, 1719 { 1720 "input": "http://example.com/./.foo", 1721 "base": "about:blank", 1722 "href": "http://example.com/.foo", 1723 "origin": "http://example.com", 1724 "protocol": "http:", 1725 "username": "", 1726 "password": "", 1727 "host": "example.com", 1728 "hostname": "example.com", 1729 "port": "", 1730 "pathname": "/.foo", 1731 "search": "", 1732 "hash": "" 1733 }, 1734 { 1735 "input": "http://example.com/foo/.", 1736 "base": "about:blank", 1737 "href": "http://example.com/foo/", 1738 "origin": "http://example.com", 1739 "protocol": "http:", 1740 "username": "", 1741 "password": "", 1742 "host": "example.com", 1743 "hostname": "example.com", 1744 "port": "", 1745 "pathname": "/foo/", 1746 "search": "", 1747 "hash": "" 1748 }, 1749 { 1750 "input": "http://example.com/foo/./", 1751 "base": "about:blank", 1752 "href": "http://example.com/foo/", 1753 "origin": "http://example.com", 1754 "protocol": "http:", 1755 "username": "", 1756 "password": "", 1757 "host": "example.com", 1758 "hostname": "example.com", 1759 "port": "", 1760 "pathname": "/foo/", 1761 "search": "", 1762 "hash": "" 1763 }, 1764 { 1765 "input": "http://example.com/foo/bar/..", 1766 "base": "about:blank", 1767 "href": "http://example.com/foo/", 1768 "origin": "http://example.com", 1769 "protocol": "http:", 1770 "username": "", 1771 "password": "", 1772 "host": "example.com", 1773 "hostname": "example.com", 1774 "port": "", 1775 "pathname": "/foo/", 1776 "search": "", 1777 "hash": "" 1778 }, 1779 { 1780 "input": "http://example.com/foo/bar/../", 1781 "base": "about:blank", 1782 "href": "http://example.com/foo/", 1783 "origin": "http://example.com", 1784 "protocol": "http:", 1785 "username": "", 1786 "password": "", 1787 "host": "example.com", 1788 "hostname": "example.com", 1789 "port": "", 1790 "pathname": "/foo/", 1791 "search": "", 1792 "hash": "" 1793 }, 1794 { 1795 "input": "http://example.com/foo/..bar", 1796 "base": "about:blank", 1797 "href": "http://example.com/foo/..bar", 1798 "origin": "http://example.com", 1799 "protocol": "http:", 1800 "username": "", 1801 "password": "", 1802 "host": "example.com", 1803 "hostname": "example.com", 1804 "port": "", 1805 "pathname": "/foo/..bar", 1806 "search": "", 1807 "hash": "" 1808 }, 1809 { 1810 "input": "http://example.com/foo/bar/../ton", 1811 "base": "about:blank", 1812 "href": "http://example.com/foo/ton", 1813 "origin": "http://example.com", 1814 "protocol": "http:", 1815 "username": "", 1816 "password": "", 1817 "host": "example.com", 1818 "hostname": "example.com", 1819 "port": "", 1820 "pathname": "/foo/ton", 1821 "search": "", 1822 "hash": "" 1823 }, 1824 { 1825 "input": "http://example.com/foo/bar/../ton/../../a", 1826 "base": "about:blank", 1827 "href": "http://example.com/a", 1828 "origin": "http://example.com", 1829 "protocol": "http:", 1830 "username": "", 1831 "password": "", 1832 "host": "example.com", 1833 "hostname": "example.com", 1834 "port": "", 1835 "pathname": "/a", 1836 "search": "", 1837 "hash": "" 1838 }, 1839 { 1840 "input": "http://example.com/foo/../../..", 1841 "base": "about:blank", 1842 "href": "http://example.com/", 1843 "origin": "http://example.com", 1844 "protocol": "http:", 1845 "username": "", 1846 "password": "", 1847 "host": "example.com", 1848 "hostname": "example.com", 1849 "port": "", 1850 "pathname": "/", 1851 "search": "", 1852 "hash": "" 1853 }, 1854 { 1855 "input": "http://example.com/foo/../../../ton", 1856 "base": "about:blank", 1857 "href": "http://example.com/ton", 1858 "origin": "http://example.com", 1859 "protocol": "http:", 1860 "username": "", 1861 "password": "", 1862 "host": "example.com", 1863 "hostname": "example.com", 1864 "port": "", 1865 "pathname": "/ton", 1866 "search": "", 1867 "hash": "" 1868 }, 1869 { 1870 "input": "http://example.com/foo/%2e", 1871 "base": "about:blank", 1872 "href": "http://example.com/foo/", 1873 "origin": "http://example.com", 1874 "protocol": "http:", 1875 "username": "", 1876 "password": "", 1877 "host": "example.com", 1878 "hostname": "example.com", 1879 "port": "", 1880 "pathname": "/foo/", 1881 "search": "", 1882 "hash": "" 1883 }, 1884 { 1885 "input": "http://example.com/foo/%2e%2", 1886 "base": "about:blank", 1887 "href": "http://example.com/foo/%2e%2", 1888 "origin": "http://example.com", 1889 "protocol": "http:", 1890 "username": "", 1891 "password": "", 1892 "host": "example.com", 1893 "hostname": "example.com", 1894 "port": "", 1895 "pathname": "/foo/%2e%2", 1896 "search": "", 1897 "hash": "" 1898 }, 1899 { 1900 "input": "http://example.com/foo/%2e./%2e%2e/.%2e/%2e.bar", 1901 "base": "about:blank", 1902 "href": "http://example.com/%2e.bar", 1903 "origin": "http://example.com", 1904 "protocol": "http:", 1905 "username": "", 1906 "password": "", 1907 "host": "example.com", 1908 "hostname": "example.com", 1909 "port": "", 1910 "pathname": "/%2e.bar", 1911 "search": "", 1912 "hash": "" 1913 }, 1914 { 1915 "input": "http://example.com////../..", 1916 "base": "about:blank", 1917 "href": "http://example.com//", 1918 "origin": "http://example.com", 1919 "protocol": "http:", 1920 "username": "", 1921 "password": "", 1922 "host": "example.com", 1923 "hostname": "example.com", 1924 "port": "", 1925 "pathname": "//", 1926 "search": "", 1927 "hash": "" 1928 }, 1929 { 1930 "input": "http://example.com/foo/bar//../..", 1931 "base": "about:blank", 1932 "href": "http://example.com/foo/", 1933 "origin": "http://example.com", 1934 "protocol": "http:", 1935 "username": "", 1936 "password": "", 1937 "host": "example.com", 1938 "hostname": "example.com", 1939 "port": "", 1940 "pathname": "/foo/", 1941 "search": "", 1942 "hash": "" 1943 }, 1944 { 1945 "input": "http://example.com/foo/bar//..", 1946 "base": "about:blank", 1947 "href": "http://example.com/foo/bar/", 1948 "origin": "http://example.com", 1949 "protocol": "http:", 1950 "username": "", 1951 "password": "", 1952 "host": "example.com", 1953 "hostname": "example.com", 1954 "port": "", 1955 "pathname": "/foo/bar/", 1956 "search": "", 1957 "hash": "" 1958 }, 1959 { 1960 "input": "http://example.com/foo", 1961 "base": "about:blank", 1962 "href": "http://example.com/foo", 1963 "origin": "http://example.com", 1964 "protocol": "http:", 1965 "username": "", 1966 "password": "", 1967 "host": "example.com", 1968 "hostname": "example.com", 1969 "port": "", 1970 "pathname": "/foo", 1971 "search": "", 1972 "hash": "" 1973 }, 1974 { 1975 "input": "http://example.com/%20foo", 1976 "base": "about:blank", 1977 "href": "http://example.com/%20foo", 1978 "origin": "http://example.com", 1979 "protocol": "http:", 1980 "username": "", 1981 "password": "", 1982 "host": "example.com", 1983 "hostname": "example.com", 1984 "port": "", 1985 "pathname": "/%20foo", 1986 "search": "", 1987 "hash": "" 1988 }, 1989 { 1990 "input": "http://example.com/foo%", 1991 "base": "about:blank", 1992 "href": "http://example.com/foo%", 1993 "origin": "http://example.com", 1994 "protocol": "http:", 1995 "username": "", 1996 "password": "", 1997 "host": "example.com", 1998 "hostname": "example.com", 1999 "port": "", 2000 "pathname": "/foo%", 2001 "search": "", 2002 "hash": "" 2003 }, 2004 { 2005 "input": "http://example.com/foo%2", 2006 "base": "about:blank", 2007 "href": "http://example.com/foo%2", 2008 "origin": "http://example.com", 2009 "protocol": "http:", 2010 "username": "", 2011 "password": "", 2012 "host": "example.com", 2013 "hostname": "example.com", 2014 "port": "", 2015 "pathname": "/foo%2", 2016 "search": "", 2017 "hash": "" 2018 }, 2019 { 2020 "input": "http://example.com/foo%2zbar", 2021 "base": "about:blank", 2022 "href": "http://example.com/foo%2zbar", 2023 "origin": "http://example.com", 2024 "protocol": "http:", 2025 "username": "", 2026 "password": "", 2027 "host": "example.com", 2028 "hostname": "example.com", 2029 "port": "", 2030 "pathname": "/foo%2zbar", 2031 "search": "", 2032 "hash": "" 2033 }, 2034 { 2035 "input": "http://example.com/foo%2©zbar", 2036 "base": "about:blank", 2037 "href": "http://example.com/foo%2%C3%82%C2%A9zbar", 2038 "origin": "http://example.com", 2039 "protocol": "http:", 2040 "username": "", 2041 "password": "", 2042 "host": "example.com", 2043 "hostname": "example.com", 2044 "port": "", 2045 "pathname": "/foo%2%C3%82%C2%A9zbar", 2046 "search": "", 2047 "hash": "" 2048 }, 2049 { 2050 "input": "http://example.com/foo%41%7a", 2051 "base": "about:blank", 2052 "href": "http://example.com/foo%41%7a", 2053 "origin": "http://example.com", 2054 "protocol": "http:", 2055 "username": "", 2056 "password": "", 2057 "host": "example.com", 2058 "hostname": "example.com", 2059 "port": "", 2060 "pathname": "/foo%41%7a", 2061 "search": "", 2062 "hash": "" 2063 }, 2064 { 2065 "input": "http://example.com/foo\t\u0091%91", 2066 "base": "about:blank", 2067 "href": "http://example.com/foo%C2%91%91", 2068 "origin": "http://example.com", 2069 "protocol": "http:", 2070 "username": "", 2071 "password": "", 2072 "host": "example.com", 2073 "hostname": "example.com", 2074 "port": "", 2075 "pathname": "/foo%C2%91%91", 2076 "search": "", 2077 "hash": "" 2078 }, 2079 { 2080 "input": "http://example.com/foo%00%51", 2081 "base": "about:blank", 2082 "href": "http://example.com/foo%00%51", 2083 "origin": "http://example.com", 2084 "protocol": "http:", 2085 "username": "", 2086 "password": "", 2087 "host": "example.com", 2088 "hostname": "example.com", 2089 "port": "", 2090 "pathname": "/foo%00%51", 2091 "search": "", 2092 "hash": "" 2093 }, 2094 { 2095 "input": "http://example.com/(%28:%3A%29)", 2096 "base": "about:blank", 2097 "href": "http://example.com/(%28:%3A%29)", 2098 "origin": "http://example.com", 2099 "protocol": "http:", 2100 "username": "", 2101 "password": "", 2102 "host": "example.com", 2103 "hostname": "example.com", 2104 "port": "", 2105 "pathname": "/(%28:%3A%29)", 2106 "search": "", 2107 "hash": "" 2108 }, 2109 { 2110 "input": "http://example.com/%3A%3a%3C%3c", 2111 "base": "about:blank", 2112 "href": "http://example.com/%3A%3a%3C%3c", 2113 "origin": "http://example.com", 2114 "protocol": "http:", 2115 "username": "", 2116 "password": "", 2117 "host": "example.com", 2118 "hostname": "example.com", 2119 "port": "", 2120 "pathname": "/%3A%3a%3C%3c", 2121 "search": "", 2122 "hash": "" 2123 }, 2124 { 2125 "input": "http://example.com/foo\tbar", 2126 "base": "about:blank", 2127 "href": "http://example.com/foobar", 2128 "origin": "http://example.com", 2129 "protocol": "http:", 2130 "username": "", 2131 "password": "", 2132 "host": "example.com", 2133 "hostname": "example.com", 2134 "port": "", 2135 "pathname": "/foobar", 2136 "search": "", 2137 "hash": "" 2138 }, 2139 { 2140 "input": "http://example.com\\\\foo\\\\bar", 2141 "base": "about:blank", 2142 "href": "http://example.com//foo//bar", 2143 "origin": "http://example.com", 2144 "protocol": "http:", 2145 "username": "", 2146 "password": "", 2147 "host": "example.com", 2148 "hostname": "example.com", 2149 "port": "", 2150 "pathname": "//foo//bar", 2151 "search": "", 2152 "hash": "" 2153 }, 2154 { 2155 "input": "http://example.com/%7Ffp3%3Eju%3Dduvgw%3Dd", 2156 "base": "about:blank", 2157 "href": "http://example.com/%7Ffp3%3Eju%3Dduvgw%3Dd", 2158 "origin": "http://example.com", 2159 "protocol": "http:", 2160 "username": "", 2161 "password": "", 2162 "host": "example.com", 2163 "hostname": "example.com", 2164 "port": "", 2165 "pathname": "/%7Ffp3%3Eju%3Dduvgw%3Dd", 2166 "search": "", 2167 "hash": "" 2168 }, 2169 { 2170 "input": "http://example.com/@asdf%40", 2171 "base": "about:blank", 2172 "href": "http://example.com/@asdf%40", 2173 "origin": "http://example.com", 2174 "protocol": "http:", 2175 "username": "", 2176 "password": "", 2177 "host": "example.com", 2178 "hostname": "example.com", 2179 "port": "", 2180 "pathname": "/@asdf%40", 2181 "search": "", 2182 "hash": "" 2183 }, 2184 { 2185 "input": "http://example.com/你好你好", 2186 "base": "about:blank", 2187 "href": "http://example.com/%E4%BD%A0%E5%A5%BD%E4%BD%A0%E5%A5%BD", 2188 "origin": "http://example.com", 2189 "protocol": "http:", 2190 "username": "", 2191 "password": "", 2192 "host": "example.com", 2193 "hostname": "example.com", 2194 "port": "", 2195 "pathname": "/%E4%BD%A0%E5%A5%BD%E4%BD%A0%E5%A5%BD", 2196 "search": "", 2197 "hash": "" 2198 }, 2199 { 2200 "input": "http://example.com/‥/foo", 2201 "base": "about:blank", 2202 "href": "http://example.com/%E2%80%A5/foo", 2203 "origin": "http://example.com", 2204 "protocol": "http:", 2205 "username": "", 2206 "password": "", 2207 "host": "example.com", 2208 "hostname": "example.com", 2209 "port": "", 2210 "pathname": "/%E2%80%A5/foo", 2211 "search": "", 2212 "hash": "" 2213 }, 2214 { 2215 "input": "http://example.com//foo", 2216 "base": "about:blank", 2217 "href": "http://example.com/%EF%BB%BF/foo", 2218 "origin": "http://example.com", 2219 "protocol": "http:", 2220 "username": "", 2221 "password": "", 2222 "host": "example.com", 2223 "hostname": "example.com", 2224 "port": "", 2225 "pathname": "/%EF%BB%BF/foo", 2226 "search": "", 2227 "hash": "" 2228 }, 2229 { 2230 "input": "http://example.com//foo//bar", 2231 "base": "about:blank", 2232 "href": "http://example.com/%E2%80%AE/foo/%E2%80%AD/bar", 2233 "origin": "http://example.com", 2234 "protocol": "http:", 2235 "username": "", 2236 "password": "", 2237 "host": "example.com", 2238 "hostname": "example.com", 2239 "port": "", 2240 "pathname": "/%E2%80%AE/foo/%E2%80%AD/bar", 2241 "search": "", 2242 "hash": "" 2243 }, 2244 "# Based on http://trac.webkit.org/browser/trunk/LayoutTests/fast/url/script-tests/relative.js", 2245 { 2246 "input": "http://www.google.com/foo?bar=baz#", 2247 "base": "about:blank", 2248 "href": "http://www.google.com/foo?bar=baz#", 2249 "origin": "http://www.google.com", 2250 "protocol": "http:", 2251 "username": "", 2252 "password": "", 2253 "host": "www.google.com", 2254 "hostname": "www.google.com", 2255 "port": "", 2256 "pathname": "/foo", 2257 "search": "?bar=baz", 2258 "hash": "" 2259 }, 2260 { 2261 "input": "http://www.google.com/foo?bar=baz# »", 2262 "base": "about:blank", 2263 "href": "http://www.google.com/foo?bar=baz# %C2%BB", 2264 "origin": "http://www.google.com", 2265 "protocol": "http:", 2266 "username": "", 2267 "password": "", 2268 "host": "www.google.com", 2269 "hostname": "www.google.com", 2270 "port": "", 2271 "pathname": "/foo", 2272 "search": "?bar=baz", 2273 "hash": "# %C2%BB" 2274 }, 2275 { 2276 "input": "data:test# »", 2277 "base": "about:blank", 2278 "href": "data:test# %C2%BB", 2279 "origin": "null", 2280 "protocol": "data:", 2281 "username": "", 2282 "password": "", 2283 "host": "", 2284 "hostname": "", 2285 "port": "", 2286 "pathname": "test", 2287 "search": "", 2288 "hash": "# %C2%BB" 2289 }, 2290 { 2291 "input": "http://www.google.com", 2292 "base": "about:blank", 2293 "href": "http://www.google.com/", 2294 "origin": "http://www.google.com", 2295 "protocol": "http:", 2296 "username": "", 2297 "password": "", 2298 "host": "www.google.com", 2299 "hostname": "www.google.com", 2300 "port": "", 2301 "pathname": "/", 2302 "search": "", 2303 "hash": "" 2304 }, 2305 { 2306 "input": "http://192.0x00A80001", 2307 "base": "about:blank", 2308 "href": "http://192.168.0.1/", 2309 "origin": "http://192.168.0.1", 2310 "protocol": "http:", 2311 "username": "", 2312 "password": "", 2313 "host": "192.168.0.1", 2314 "hostname": "192.168.0.1", 2315 "port": "", 2316 "pathname": "/", 2317 "search": "", 2318 "hash": "" 2319 }, 2320 { 2321 "input": "http://www/foo%2Ehtml", 2322 "base": "about:blank", 2323 "href": "http://www/foo%2Ehtml", 2324 "origin": "http://www", 2325 "protocol": "http:", 2326 "username": "", 2327 "password": "", 2328 "host": "www", 2329 "hostname": "www", 2330 "port": "", 2331 "pathname": "/foo%2Ehtml", 2332 "search": "", 2333 "hash": "" 2334 }, 2335 { 2336 "input": "http://www/foo/%2E/html", 2337 "base": "about:blank", 2338 "href": "http://www/foo/html", 2339 "origin": "http://www", 2340 "protocol": "http:", 2341 "username": "", 2342 "password": "", 2343 "host": "www", 2344 "hostname": "www", 2345 "port": "", 2346 "pathname": "/foo/html", 2347 "search": "", 2348 "hash": "" 2349 }, 2350 { 2351 "input": "http://user:pass@/", 2352 "base": "about:blank", 2353 "failure": true 2354 }, 2355 { 2356 "input": "http://%25DOMAIN:foobar@foodomain.com/", 2357 "base": "about:blank", 2358 "href": "http://%25DOMAIN:foobar@foodomain.com/", 2359 "origin": "http://foodomain.com", 2360 "protocol": "http:", 2361 "username": "%25DOMAIN", 2362 "password": "foobar", 2363 "host": "foodomain.com", 2364 "hostname": "foodomain.com", 2365 "port": "", 2366 "pathname": "/", 2367 "search": "", 2368 "hash": "" 2369 }, 2370 { 2371 "input": "http:\\\\www.google.com\\foo", 2372 "base": "about:blank", 2373 "href": "http://www.google.com/foo", 2374 "origin": "http://www.google.com", 2375 "protocol": "http:", 2376 "username": "", 2377 "password": "", 2378 "host": "www.google.com", 2379 "hostname": "www.google.com", 2380 "port": "", 2381 "pathname": "/foo", 2382 "search": "", 2383 "hash": "" 2384 }, 2385 { 2386 "input": "http://foo:80/", 2387 "base": "about:blank", 2388 "href": "http://foo/", 2389 "origin": "http://foo", 2390 "protocol": "http:", 2391 "username": "", 2392 "password": "", 2393 "host": "foo", 2394 "hostname": "foo", 2395 "port": "", 2396 "pathname": "/", 2397 "search": "", 2398 "hash": "" 2399 }, 2400 { 2401 "input": "http://foo:81/", 2402 "base": "about:blank", 2403 "href": "http://foo:81/", 2404 "origin": "http://foo:81", 2405 "protocol": "http:", 2406 "username": "", 2407 "password": "", 2408 "host": "foo:81", 2409 "hostname": "foo", 2410 "port": "81", 2411 "pathname": "/", 2412 "search": "", 2413 "hash": "" 2414 }, 2415 { 2416 "input": "httpa://foo:80/", 2417 "base": "about:blank", 2418 "href": "httpa://foo:80/", 2419 "origin": "null", 2420 "protocol": "httpa:", 2421 "username": "", 2422 "password": "", 2423 "host": "foo:80", 2424 "hostname": "foo", 2425 "port": "80", 2426 "pathname": "/", 2427 "search": "", 2428 "hash": "" 2429 }, 2430 { 2431 "input": "http://foo:-80/", 2432 "base": "about:blank", 2433 "failure": true 2434 }, 2435 { 2436 "input": "https://foo:443/", 2437 "base": "about:blank", 2438 "href": "https://foo/", 2439 "origin": "https://foo", 2440 "protocol": "https:", 2441 "username": "", 2442 "password": "", 2443 "host": "foo", 2444 "hostname": "foo", 2445 "port": "", 2446 "pathname": "/", 2447 "search": "", 2448 "hash": "" 2449 }, 2450 { 2451 "input": "https://foo:80/", 2452 "base": "about:blank", 2453 "href": "https://foo:80/", 2454 "origin": "https://foo:80", 2455 "protocol": "https:", 2456 "username": "", 2457 "password": "", 2458 "host": "foo:80", 2459 "hostname": "foo", 2460 "port": "80", 2461 "pathname": "/", 2462 "search": "", 2463 "hash": "" 2464 }, 2465 { 2466 "input": "ftp://foo:21/", 2467 "base": "about:blank", 2468 "href": "ftp://foo/", 2469 "origin": "ftp://foo", 2470 "protocol": "ftp:", 2471 "username": "", 2472 "password": "", 2473 "host": "foo", 2474 "hostname": "foo", 2475 "port": "", 2476 "pathname": "/", 2477 "search": "", 2478 "hash": "" 2479 }, 2480 { 2481 "input": "ftp://foo:80/", 2482 "base": "about:blank", 2483 "href": "ftp://foo:80/", 2484 "origin": "ftp://foo:80", 2485 "protocol": "ftp:", 2486 "username": "", 2487 "password": "", 2488 "host": "foo:80", 2489 "hostname": "foo", 2490 "port": "80", 2491 "pathname": "/", 2492 "search": "", 2493 "hash": "" 2494 }, 2495 { 2496 "input": "gopher://foo:70/", 2497 "base": "about:blank", 2498 "href": "gopher://foo/", 2499 "origin": "gopher://foo", 2500 "protocol": "gopher:", 2501 "username": "", 2502 "password": "", 2503 "host": "foo", 2504 "hostname": "foo", 2505 "port": "", 2506 "pathname": "/", 2507 "search": "", 2508 "hash": "" 2509 }, 2510 { 2511 "input": "gopher://foo:443/", 2512 "base": "about:blank", 2513 "href": "gopher://foo:443/", 2514 "origin": "gopher://foo:443", 2515 "protocol": "gopher:", 2516 "username": "", 2517 "password": "", 2518 "host": "foo:443", 2519 "hostname": "foo", 2520 "port": "443", 2521 "pathname": "/", 2522 "search": "", 2523 "hash": "" 2524 }, 2525 { 2526 "input": "ws://foo:80/", 2527 "base": "about:blank", 2528 "href": "ws://foo/", 2529 "origin": "ws://foo", 2530 "protocol": "ws:", 2531 "username": "", 2532 "password": "", 2533 "host": "foo", 2534 "hostname": "foo", 2535 "port": "", 2536 "pathname": "/", 2537 "search": "", 2538 "hash": "" 2539 }, 2540 { 2541 "input": "ws://foo:81/", 2542 "base": "about:blank", 2543 "href": "ws://foo:81/", 2544 "origin": "ws://foo:81", 2545 "protocol": "ws:", 2546 "username": "", 2547 "password": "", 2548 "host": "foo:81", 2549 "hostname": "foo", 2550 "port": "81", 2551 "pathname": "/", 2552 "search": "", 2553 "hash": "" 2554 }, 2555 { 2556 "input": "ws://foo:443/", 2557 "base": "about:blank", 2558 "href": "ws://foo:443/", 2559 "origin": "ws://foo:443", 2560 "protocol": "ws:", 2561 "username": "", 2562 "password": "", 2563 "host": "foo:443", 2564 "hostname": "foo", 2565 "port": "443", 2566 "pathname": "/", 2567 "search": "", 2568 "hash": "" 2569 }, 2570 { 2571 "input": "ws://foo:815/", 2572 "base": "about:blank", 2573 "href": "ws://foo:815/", 2574 "origin": "ws://foo:815", 2575 "protocol": "ws:", 2576 "username": "", 2577 "password": "", 2578 "host": "foo:815", 2579 "hostname": "foo", 2580 "port": "815", 2581 "pathname": "/", 2582 "search": "", 2583 "hash": "" 2584 }, 2585 { 2586 "input": "wss://foo:80/", 2587 "base": "about:blank", 2588 "href": "wss://foo:80/", 2589 "origin": "wss://foo:80", 2590 "protocol": "wss:", 2591 "username": "", 2592 "password": "", 2593 "host": "foo:80", 2594 "hostname": "foo", 2595 "port": "80", 2596 "pathname": "/", 2597 "search": "", 2598 "hash": "" 2599 }, 2600 { 2601 "input": "wss://foo:81/", 2602 "base": "about:blank", 2603 "href": "wss://foo:81/", 2604 "origin": "wss://foo:81", 2605 "protocol": "wss:", 2606 "username": "", 2607 "password": "", 2608 "host": "foo:81", 2609 "hostname": "foo", 2610 "port": "81", 2611 "pathname": "/", 2612 "search": "", 2613 "hash": "" 2614 }, 2615 { 2616 "input": "wss://foo:443/", 2617 "base": "about:blank", 2618 "href": "wss://foo/", 2619 "origin": "wss://foo", 2620 "protocol": "wss:", 2621 "username": "", 2622 "password": "", 2623 "host": "foo", 2624 "hostname": "foo", 2625 "port": "", 2626 "pathname": "/", 2627 "search": "", 2628 "hash": "" 2629 }, 2630 { 2631 "input": "wss://foo:815/", 2632 "base": "about:blank", 2633 "href": "wss://foo:815/", 2634 "origin": "wss://foo:815", 2635 "protocol": "wss:", 2636 "username": "", 2637 "password": "", 2638 "host": "foo:815", 2639 "hostname": "foo", 2640 "port": "815", 2641 "pathname": "/", 2642 "search": "", 2643 "hash": "" 2644 }, 2645 { 2646 "input": "http:/example.com/", 2647 "base": "about:blank", 2648 "href": "http://example.com/", 2649 "origin": "http://example.com", 2650 "protocol": "http:", 2651 "username": "", 2652 "password": "", 2653 "host": "example.com", 2654 "hostname": "example.com", 2655 "port": "", 2656 "pathname": "/", 2657 "search": "", 2658 "hash": "" 2659 }, 2660 { 2661 "input": "ftp:/example.com/", 2662 "base": "about:blank", 2663 "href": "ftp://example.com/", 2664 "origin": "ftp://example.com", 2665 "protocol": "ftp:", 2666 "username": "", 2667 "password": "", 2668 "host": "example.com", 2669 "hostname": "example.com", 2670 "port": "", 2671 "pathname": "/", 2672 "search": "", 2673 "hash": "" 2674 }, 2675 { 2676 "input": "https:/example.com/", 2677 "base": "about:blank", 2678 "href": "https://example.com/", 2679 "origin": "https://example.com", 2680 "protocol": "https:", 2681 "username": "", 2682 "password": "", 2683 "host": "example.com", 2684 "hostname": "example.com", 2685 "port": "", 2686 "pathname": "/", 2687 "search": "", 2688 "hash": "" 2689 }, 2690 { 2691 "input": "madeupscheme:/example.com/", 2692 "base": "about:blank", 2693 "href": "madeupscheme:/example.com/", 2694 "origin": "null", 2695 "protocol": "madeupscheme:", 2696 "username": "", 2697 "password": "", 2698 "host": "", 2699 "hostname": "", 2700 "port": "", 2701 "pathname": "/example.com/", 2702 "search": "", 2703 "hash": "" 2704 }, 2705 { 2706 "input": "file:/example.com/", 2707 "base": "about:blank", 2708 "href": "file:///example.com/", 2709 "protocol": "file:", 2710 "username": "", 2711 "password": "", 2712 "host": "", 2713 "hostname": "", 2714 "port": "", 2715 "pathname": "/example.com/", 2716 "search": "", 2717 "hash": "" 2718 }, 2719 { 2720 "input": "ftps:/example.com/", 2721 "base": "about:blank", 2722 "href": "ftps:/example.com/", 2723 "origin": "null", 2724 "protocol": "ftps:", 2725 "username": "", 2726 "password": "", 2727 "host": "", 2728 "hostname": "", 2729 "port": "", 2730 "pathname": "/example.com/", 2731 "search": "", 2732 "hash": "" 2733 }, 2734 { 2735 "input": "gopher:/example.com/", 2736 "base": "about:blank", 2737 "href": "gopher://example.com/", 2738 "origin": "gopher://example.com", 2739 "protocol": "gopher:", 2740 "username": "", 2741 "password": "", 2742 "host": "example.com", 2743 "hostname": "example.com", 2744 "port": "", 2745 "pathname": "/", 2746 "search": "", 2747 "hash": "" 2748 }, 2749 { 2750 "input": "ws:/example.com/", 2751 "base": "about:blank", 2752 "href": "ws://example.com/", 2753 "origin": "ws://example.com", 2754 "protocol": "ws:", 2755 "username": "", 2756 "password": "", 2757 "host": "example.com", 2758 "hostname": "example.com", 2759 "port": "", 2760 "pathname": "/", 2761 "search": "", 2762 "hash": "" 2763 }, 2764 { 2765 "input": "wss:/example.com/", 2766 "base": "about:blank", 2767 "href": "wss://example.com/", 2768 "origin": "wss://example.com", 2769 "protocol": "wss:", 2770 "username": "", 2771 "password": "", 2772 "host": "example.com", 2773 "hostname": "example.com", 2774 "port": "", 2775 "pathname": "/", 2776 "search": "", 2777 "hash": "" 2778 }, 2779 { 2780 "input": "data:/example.com/", 2781 "base": "about:blank", 2782 "href": "data:/example.com/", 2783 "origin": "null", 2784 "protocol": "data:", 2785 "username": "", 2786 "password": "", 2787 "host": "", 2788 "hostname": "", 2789 "port": "", 2790 "pathname": "/example.com/", 2791 "search": "", 2792 "hash": "" 2793 }, 2794 { 2795 "input": "javascript:/example.com/", 2796 "base": "about:blank", 2797 "href": "javascript:/example.com/", 2798 "origin": "null", 2799 "protocol": "javascript:", 2800 "username": "", 2801 "password": "", 2802 "host": "", 2803 "hostname": "", 2804 "port": "", 2805 "pathname": "/example.com/", 2806 "search": "", 2807 "hash": "" 2808 }, 2809 { 2810 "input": "mailto:/example.com/", 2811 "base": "about:blank", 2812 "href": "mailto:/example.com/", 2813 "origin": "null", 2814 "protocol": "mailto:", 2815 "username": "", 2816 "password": "", 2817 "host": "", 2818 "hostname": "", 2819 "port": "", 2820 "pathname": "/example.com/", 2821 "search": "", 2822 "hash": "" 2823 }, 2824 { 2825 "input": "http:example.com/", 2826 "base": "about:blank", 2827 "href": "http://example.com/", 2828 "origin": "http://example.com", 2829 "protocol": "http:", 2830 "username": "", 2831 "password": "", 2832 "host": "example.com", 2833 "hostname": "example.com", 2834 "port": "", 2835 "pathname": "/", 2836 "search": "", 2837 "hash": "" 2838 }, 2839 { 2840 "input": "ftp:example.com/", 2841 "base": "about:blank", 2842 "href": "ftp://example.com/", 2843 "origin": "ftp://example.com", 2844 "protocol": "ftp:", 2845 "username": "", 2846 "password": "", 2847 "host": "example.com", 2848 "hostname": "example.com", 2849 "port": "", 2850 "pathname": "/", 2851 "search": "", 2852 "hash": "" 2853 }, 2854 { 2855 "input": "https:example.com/", 2856 "base": "about:blank", 2857 "href": "https://example.com/", 2858 "origin": "https://example.com", 2859 "protocol": "https:", 2860 "username": "", 2861 "password": "", 2862 "host": "example.com", 2863 "hostname": "example.com", 2864 "port": "", 2865 "pathname": "/", 2866 "search": "", 2867 "hash": "" 2868 }, 2869 { 2870 "input": "madeupscheme:example.com/", 2871 "base": "about:blank", 2872 "href": "madeupscheme:example.com/", 2873 "origin": "null", 2874 "protocol": "madeupscheme:", 2875 "username": "", 2876 "password": "", 2877 "host": "", 2878 "hostname": "", 2879 "port": "", 2880 "pathname": "example.com/", 2881 "search": "", 2882 "hash": "" 2883 }, 2884 { 2885 "input": "ftps:example.com/", 2886 "base": "about:blank", 2887 "href": "ftps:example.com/", 2888 "origin": "null", 2889 "protocol": "ftps:", 2890 "username": "", 2891 "password": "", 2892 "host": "", 2893 "hostname": "", 2894 "port": "", 2895 "pathname": "example.com/", 2896 "search": "", 2897 "hash": "" 2898 }, 2899 { 2900 "input": "gopher:example.com/", 2901 "base": "about:blank", 2902 "href": "gopher://example.com/", 2903 "origin": "gopher://example.com", 2904 "protocol": "gopher:", 2905 "username": "", 2906 "password": "", 2907 "host": "example.com", 2908 "hostname": "example.com", 2909 "port": "", 2910 "pathname": "/", 2911 "search": "", 2912 "hash": "" 2913 }, 2914 { 2915 "input": "ws:example.com/", 2916 "base": "about:blank", 2917 "href": "ws://example.com/", 2918 "origin": "ws://example.com", 2919 "protocol": "ws:", 2920 "username": "", 2921 "password": "", 2922 "host": "example.com", 2923 "hostname": "example.com", 2924 "port": "", 2925 "pathname": "/", 2926 "search": "", 2927 "hash": "" 2928 }, 2929 { 2930 "input": "wss:example.com/", 2931 "base": "about:blank", 2932 "href": "wss://example.com/", 2933 "origin": "wss://example.com", 2934 "protocol": "wss:", 2935 "username": "", 2936 "password": "", 2937 "host": "example.com", 2938 "hostname": "example.com", 2939 "port": "", 2940 "pathname": "/", 2941 "search": "", 2942 "hash": "" 2943 }, 2944 { 2945 "input": "data:example.com/", 2946 "base": "about:blank", 2947 "href": "data:example.com/", 2948 "origin": "null", 2949 "protocol": "data:", 2950 "username": "", 2951 "password": "", 2952 "host": "", 2953 "hostname": "", 2954 "port": "", 2955 "pathname": "example.com/", 2956 "search": "", 2957 "hash": "" 2958 }, 2959 { 2960 "input": "javascript:example.com/", 2961 "base": "about:blank", 2962 "href": "javascript:example.com/", 2963 "origin": "null", 2964 "protocol": "javascript:", 2965 "username": "", 2966 "password": "", 2967 "host": "", 2968 "hostname": "", 2969 "port": "", 2970 "pathname": "example.com/", 2971 "search": "", 2972 "hash": "" 2973 }, 2974 { 2975 "input": "mailto:example.com/", 2976 "base": "about:blank", 2977 "href": "mailto:example.com/", 2978 "origin": "null", 2979 "protocol": "mailto:", 2980 "username": "", 2981 "password": "", 2982 "host": "", 2983 "hostname": "", 2984 "port": "", 2985 "pathname": "example.com/", 2986 "search": "", 2987 "hash": "" 2988 }, 2989 "# Based on http://trac.webkit.org/browser/trunk/LayoutTests/fast/url/segments-userinfo-vs-host.html", 2990 { 2991 "input": "http:@www.example.com", 2992 "base": "about:blank", 2993 "href": "http://www.example.com/", 2994 "origin": "http://www.example.com", 2995 "protocol": "http:", 2996 "username": "", 2997 "password": "", 2998 "host": "www.example.com", 2999 "hostname": "www.example.com", 3000 "port": "", 3001 "pathname": "/", 3002 "search": "", 3003 "hash": "" 3004 }, 3005 { 3006 "input": "http:/@www.example.com", 3007 "base": "about:blank", 3008 "href": "http://www.example.com/", 3009 "origin": "http://www.example.com", 3010 "protocol": "http:", 3011 "username": "", 3012 "password": "", 3013 "host": "www.example.com", 3014 "hostname": "www.example.com", 3015 "port": "", 3016 "pathname": "/", 3017 "search": "", 3018 "hash": "" 3019 }, 3020 { 3021 "input": "http://@www.example.com", 3022 "base": "about:blank", 3023 "href": "http://www.example.com/", 3024 "origin": "http://www.example.com", 3025 "protocol": "http:", 3026 "username": "", 3027 "password": "", 3028 "host": "www.example.com", 3029 "hostname": "www.example.com", 3030 "port": "", 3031 "pathname": "/", 3032 "search": "", 3033 "hash": "" 3034 }, 3035 { 3036 "input": "http:a:b@www.example.com", 3037 "base": "about:blank", 3038 "href": "http://a:b@www.example.com/", 3039 "origin": "http://www.example.com", 3040 "protocol": "http:", 3041 "username": "a", 3042 "password": "b", 3043 "host": "www.example.com", 3044 "hostname": "www.example.com", 3045 "port": "", 3046 "pathname": "/", 3047 "search": "", 3048 "hash": "" 3049 }, 3050 { 3051 "input": "http:/a:b@www.example.com", 3052 "base": "about:blank", 3053 "href": "http://a:b@www.example.com/", 3054 "origin": "http://www.example.com", 3055 "protocol": "http:", 3056 "username": "a", 3057 "password": "b", 3058 "host": "www.example.com", 3059 "hostname": "www.example.com", 3060 "port": "", 3061 "pathname": "/", 3062 "search": "", 3063 "hash": "" 3064 }, 3065 { 3066 "input": "http://a:b@www.example.com", 3067 "base": "about:blank", 3068 "href": "http://a:b@www.example.com/", 3069 "origin": "http://www.example.com", 3070 "protocol": "http:", 3071 "username": "a", 3072 "password": "b", 3073 "host": "www.example.com", 3074 "hostname": "www.example.com", 3075 "port": "", 3076 "pathname": "/", 3077 "search": "", 3078 "hash": "" 3079 }, 3080 { 3081 "input": "http://@pple.com", 3082 "base": "about:blank", 3083 "href": "http://pple.com/", 3084 "origin": "http://pple.com", 3085 "protocol": "http:", 3086 "username": "", 3087 "password": "", 3088 "host": "pple.com", 3089 "hostname": "pple.com", 3090 "port": "", 3091 "pathname": "/", 3092 "search": "", 3093 "hash": "" 3094 }, 3095 { 3096 "input": "http::b@www.example.com", 3097 "base": "about:blank", 3098 "href": "http://:b@www.example.com/", 3099 "origin": "http://www.example.com", 3100 "protocol": "http:", 3101 "username": "", 3102 "password": "b", 3103 "host": "www.example.com", 3104 "hostname": "www.example.com", 3105 "port": "", 3106 "pathname": "/", 3107 "search": "", 3108 "hash": "" 3109 }, 3110 { 3111 "input": "http:/:b@www.example.com", 3112 "base": "about:blank", 3113 "href": "http://:b@www.example.com/", 3114 "origin": "http://www.example.com", 3115 "protocol": "http:", 3116 "username": "", 3117 "password": "b", 3118 "host": "www.example.com", 3119 "hostname": "www.example.com", 3120 "port": "", 3121 "pathname": "/", 3122 "search": "", 3123 "hash": "" 3124 }, 3125 { 3126 "input": "http://:b@www.example.com", 3127 "base": "about:blank", 3128 "href": "http://:b@www.example.com/", 3129 "origin": "http://www.example.com", 3130 "protocol": "http:", 3131 "username": "", 3132 "password": "b", 3133 "host": "www.example.com", 3134 "hostname": "www.example.com", 3135 "port": "", 3136 "pathname": "/", 3137 "search": "", 3138 "hash": "" 3139 }, 3140 { 3141 "input": "http:/:@/www.example.com", 3142 "base": "about:blank", 3143 "failure": true 3144 }, 3145 { 3146 "input": "http://user@/www.example.com", 3147 "base": "about:blank", 3148 "failure": true 3149 }, 3150 { 3151 "input": "http:@/www.example.com", 3152 "base": "about:blank", 3153 "failure": true 3154 }, 3155 { 3156 "input": "http:/@/www.example.com", 3157 "base": "about:blank", 3158 "failure": true 3159 }, 3160 { 3161 "input": "http://@/www.example.com", 3162 "base": "about:blank", 3163 "failure": true 3164 }, 3165 { 3166 "input": "https:@/www.example.com", 3167 "base": "about:blank", 3168 "failure": true 3169 }, 3170 { 3171 "input": "http:a:b@/www.example.com", 3172 "base": "about:blank", 3173 "failure": true 3174 }, 3175 { 3176 "input": "http:/a:b@/www.example.com", 3177 "base": "about:blank", 3178 "failure": true 3179 }, 3180 { 3181 "input": "http://a:b@/www.example.com", 3182 "base": "about:blank", 3183 "failure": true 3184 }, 3185 { 3186 "input": "http::@/www.example.com", 3187 "base": "about:blank", 3188 "failure": true 3189 }, 3190 { 3191 "input": "http:a:@www.example.com", 3192 "base": "about:blank", 3193 "href": "http://a@www.example.com/", 3194 "origin": "http://www.example.com", 3195 "protocol": "http:", 3196 "username": "a", 3197 "password": "", 3198 "host": "www.example.com", 3199 "hostname": "www.example.com", 3200 "port": "", 3201 "pathname": "/", 3202 "search": "", 3203 "hash": "" 3204 }, 3205 { 3206 "input": "http:/a:@www.example.com", 3207 "base": "about:blank", 3208 "href": "http://a@www.example.com/", 3209 "origin": "http://www.example.com", 3210 "protocol": "http:", 3211 "username": "a", 3212 "password": "", 3213 "host": "www.example.com", 3214 "hostname": "www.example.com", 3215 "port": "", 3216 "pathname": "/", 3217 "search": "", 3218 "hash": "" 3219 }, 3220 { 3221 "input": "http://a:@www.example.com", 3222 "base": "about:blank", 3223 "href": "http://a@www.example.com/", 3224 "origin": "http://www.example.com", 3225 "protocol": "http:", 3226 "username": "a", 3227 "password": "", 3228 "host": "www.example.com", 3229 "hostname": "www.example.com", 3230 "port": "", 3231 "pathname": "/", 3232 "search": "", 3233 "hash": "" 3234 }, 3235 { 3236 "input": "http://www.@pple.com", 3237 "base": "about:blank", 3238 "href": "http://www.@pple.com/", 3239 "origin": "http://pple.com", 3240 "protocol": "http:", 3241 "username": "www.", 3242 "password": "", 3243 "host": "pple.com", 3244 "hostname": "pple.com", 3245 "port": "", 3246 "pathname": "/", 3247 "search": "", 3248 "hash": "" 3249 }, 3250 { 3251 "input": "http:@:www.example.com", 3252 "base": "about:blank", 3253 "failure": true 3254 }, 3255 { 3256 "input": "http:/@:www.example.com", 3257 "base": "about:blank", 3258 "failure": true 3259 }, 3260 { 3261 "input": "http://@:www.example.com", 3262 "base": "about:blank", 3263 "failure": true 3264 }, 3265 { 3266 "input": "http://:@www.example.com", 3267 "base": "about:blank", 3268 "href": "http://www.example.com/", 3269 "origin": "http://www.example.com", 3270 "protocol": "http:", 3271 "username": "", 3272 "password": "", 3273 "host": "www.example.com", 3274 "hostname": "www.example.com", 3275 "port": "", 3276 "pathname": "/", 3277 "search": "", 3278 "hash": "" 3279 }, 3280 "# Others", 3281 { 3282 "input": "/", 3283 "base": "http://www.example.com/test", 3284 "href": "http://www.example.com/", 3285 "origin": "http://www.example.com", 3286 "protocol": "http:", 3287 "username": "", 3288 "password": "", 3289 "host": "www.example.com", 3290 "hostname": "www.example.com", 3291 "port": "", 3292 "pathname": "/", 3293 "search": "", 3294 "hash": "" 3295 }, 3296 { 3297 "input": "/test.txt", 3298 "base": "http://www.example.com/test", 3299 "href": "http://www.example.com/test.txt", 3300 "origin": "http://www.example.com", 3301 "protocol": "http:", 3302 "username": "", 3303 "password": "", 3304 "host": "www.example.com", 3305 "hostname": "www.example.com", 3306 "port": "", 3307 "pathname": "/test.txt", 3308 "search": "", 3309 "hash": "" 3310 }, 3311 { 3312 "input": ".", 3313 "base": "http://www.example.com/test", 3314 "href": "http://www.example.com/", 3315 "origin": "http://www.example.com", 3316 "protocol": "http:", 3317 "username": "", 3318 "password": "", 3319 "host": "www.example.com", 3320 "hostname": "www.example.com", 3321 "port": "", 3322 "pathname": "/", 3323 "search": "", 3324 "hash": "" 3325 }, 3326 { 3327 "input": "..", 3328 "base": "http://www.example.com/test", 3329 "href": "http://www.example.com/", 3330 "origin": "http://www.example.com", 3331 "protocol": "http:", 3332 "username": "", 3333 "password": "", 3334 "host": "www.example.com", 3335 "hostname": "www.example.com", 3336 "port": "", 3337 "pathname": "/", 3338 "search": "", 3339 "hash": "" 3340 }, 3341 { 3342 "input": "test.txt", 3343 "base": "http://www.example.com/test", 3344 "href": "http://www.example.com/test.txt", 3345 "origin": "http://www.example.com", 3346 "protocol": "http:", 3347 "username": "", 3348 "password": "", 3349 "host": "www.example.com", 3350 "hostname": "www.example.com", 3351 "port": "", 3352 "pathname": "/test.txt", 3353 "search": "", 3354 "hash": "" 3355 }, 3356 { 3357 "input": "./test.txt", 3358 "base": "http://www.example.com/test", 3359 "href": "http://www.example.com/test.txt", 3360 "origin": "http://www.example.com", 3361 "protocol": "http:", 3362 "username": "", 3363 "password": "", 3364 "host": "www.example.com", 3365 "hostname": "www.example.com", 3366 "port": "", 3367 "pathname": "/test.txt", 3368 "search": "", 3369 "hash": "" 3370 }, 3371 { 3372 "input": "../test.txt", 3373 "base": "http://www.example.com/test", 3374 "href": "http://www.example.com/test.txt", 3375 "origin": "http://www.example.com", 3376 "protocol": "http:", 3377 "username": "", 3378 "password": "", 3379 "host": "www.example.com", 3380 "hostname": "www.example.com", 3381 "port": "", 3382 "pathname": "/test.txt", 3383 "search": "", 3384 "hash": "" 3385 }, 3386 { 3387 "input": "../aaa/test.txt", 3388 "base": "http://www.example.com/test", 3389 "href": "http://www.example.com/aaa/test.txt", 3390 "origin": "http://www.example.com", 3391 "protocol": "http:", 3392 "username": "", 3393 "password": "", 3394 "host": "www.example.com", 3395 "hostname": "www.example.com", 3396 "port": "", 3397 "pathname": "/aaa/test.txt", 3398 "search": "", 3399 "hash": "" 3400 }, 3401 { 3402 "input": "../../test.txt", 3403 "base": "http://www.example.com/test", 3404 "href": "http://www.example.com/test.txt", 3405 "origin": "http://www.example.com", 3406 "protocol": "http:", 3407 "username": "", 3408 "password": "", 3409 "host": "www.example.com", 3410 "hostname": "www.example.com", 3411 "port": "", 3412 "pathname": "/test.txt", 3413 "search": "", 3414 "hash": "" 3415 }, 3416 { 3417 "input": "中/test.txt", 3418 "base": "http://www.example.com/test", 3419 "href": "http://www.example.com/%E4%B8%AD/test.txt", 3420 "origin": "http://www.example.com", 3421 "protocol": "http:", 3422 "username": "", 3423 "password": "", 3424 "host": "www.example.com", 3425 "hostname": "www.example.com", 3426 "port": "", 3427 "pathname": "/%E4%B8%AD/test.txt", 3428 "search": "", 3429 "hash": "" 3430 }, 3431 { 3432 "input": "http://www.example2.com", 3433 "base": "http://www.example.com/test", 3434 "href": "http://www.example2.com/", 3435 "origin": "http://www.example2.com", 3436 "protocol": "http:", 3437 "username": "", 3438 "password": "", 3439 "host": "www.example2.com", 3440 "hostname": "www.example2.com", 3441 "port": "", 3442 "pathname": "/", 3443 "search": "", 3444 "hash": "" 3445 }, 3446 { 3447 "input": "//www.example2.com", 3448 "base": "http://www.example.com/test", 3449 "href": "http://www.example2.com/", 3450 "origin": "http://www.example2.com", 3451 "protocol": "http:", 3452 "username": "", 3453 "password": "", 3454 "host": "www.example2.com", 3455 "hostname": "www.example2.com", 3456 "port": "", 3457 "pathname": "/", 3458 "search": "", 3459 "hash": "" 3460 }, 3461 { 3462 "input": "file:...", 3463 "base": "http://www.example.com/test", 3464 "href": "file:///...", 3465 "protocol": "file:", 3466 "username": "", 3467 "password": "", 3468 "host": "", 3469 "hostname": "", 3470 "port": "", 3471 "pathname": "/...", 3472 "search": "", 3473 "hash": "" 3474 }, 3475 { 3476 "input": "file:..", 3477 "base": "http://www.example.com/test", 3478 "href": "file:///", 3479 "protocol": "file:", 3480 "username": "", 3481 "password": "", 3482 "host": "", 3483 "hostname": "", 3484 "port": "", 3485 "pathname": "/", 3486 "search": "", 3487 "hash": "" 3488 }, 3489 { 3490 "input": "file:a", 3491 "base": "http://www.example.com/test", 3492 "href": "file:///a", 3493 "protocol": "file:", 3494 "username": "", 3495 "password": "", 3496 "host": "", 3497 "hostname": "", 3498 "port": "", 3499 "pathname": "/a", 3500 "search": "", 3501 "hash": "" 3502 }, 3503 "# Based on http://trac.webkit.org/browser/trunk/LayoutTests/fast/url/host.html", 3504 "Basic canonicalization, uppercase should be converted to lowercase", 3505 { 3506 "input": "http://ExAmPlE.CoM", 3507 "base": "http://other.com/", 3508 "href": "http://example.com/", 3509 "origin": "http://example.com", 3510 "protocol": "http:", 3511 "username": "", 3512 "password": "", 3513 "host": "example.com", 3514 "hostname": "example.com", 3515 "port": "", 3516 "pathname": "/", 3517 "search": "", 3518 "hash": "" 3519 }, 3520 { 3521 "input": "http://example example.com", 3522 "base": "http://other.com/", 3523 "failure": true 3524 }, 3525 { 3526 "input": "http://Goo%20 goo%7C|.com", 3527 "base": "http://other.com/", 3528 "failure": true 3529 }, 3530 { 3531 "input": "http://[]", 3532 "base": "http://other.com/", 3533 "failure": true 3534 }, 3535 { 3536 "input": "http://[:]", 3537 "base": "http://other.com/", 3538 "failure": true 3539 }, 3540 "U+3000 is mapped to U+0020 (space) which is disallowed", 3541 { 3542 "input": "http://GOO\u00a0\u3000goo.com", 3543 "base": "http://other.com/", 3544 "failure": true 3545 }, 3546 "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", 3547 { 3548 "input": "http://GOO\u200b\u2060\ufeffgoo.com", 3549 "base": "http://other.com/", 3550 "href": "http://googoo.com/", 3551 "origin": "http://googoo.com", 3552 "protocol": "http:", 3553 "username": "", 3554 "password": "", 3555 "host": "googoo.com", 3556 "hostname": "googoo.com", 3557 "port": "", 3558 "pathname": "/", 3559 "search": "", 3560 "hash": "" 3561 }, 3562 "Leading and trailing C0 control or space", 3563 { 3564 "input": "\u0000\u001b\u0004\u0012 http://example.com/\u001f \u000d ", 3565 "base": "about:blank", 3566 "href": "http://example.com/", 3567 "origin": "http://example.com", 3568 "protocol": "http:", 3569 "username": "", 3570 "password": "", 3571 "host": "example.com", 3572 "hostname": "example.com", 3573 "port": "", 3574 "pathname": "/", 3575 "search": "", 3576 "hash": "" 3577 }, 3578 "Ideographic full stop (full-width period for Chinese, etc.) should be treated as a dot. U+3002 is mapped to U+002E (dot)", 3579 { 3580 "input": "http://www.foo。bar.com", 3581 "base": "http://other.com/", 3582 "href": "http://www.foo.bar.com/", 3583 "origin": "http://www.foo.bar.com", 3584 "protocol": "http:", 3585 "username": "", 3586 "password": "", 3587 "host": "www.foo.bar.com", 3588 "hostname": "www.foo.bar.com", 3589 "port": "", 3590 "pathname": "/", 3591 "search": "", 3592 "hash": "" 3593 }, 3594 "Invalid unicode characters should fail... U+FDD0 is disallowed; %ef%b7%90 is U+FDD0", 3595 { 3596 "input": "http://\ufdd0zyx.com", 3597 "base": "http://other.com/", 3598 "failure": true 3599 }, 3600 "This is the same as previous but escaped", 3601 { 3602 "input": "http://%ef%b7%90zyx.com", 3603 "base": "http://other.com/", 3604 "failure": true 3605 }, 3606 "U+FFFD", 3607 { 3608 "input": "https://\ufffd", 3609 "base": "about:blank", 3610 "failure": true 3611 }, 3612 { 3613 "input": "https://%EF%BF%BD", 3614 "base": "about:blank", 3615 "failure": true 3616 }, 3617 { 3618 "input": "https://x/\ufffd?\ufffd#\ufffd", 3619 "base": "about:blank", 3620 "href": "https://x/%EF%BF%BD?%EF%BF%BD#%EF%BF%BD", 3621 "origin": "https://x", 3622 "protocol": "https:", 3623 "username": "", 3624 "password": "", 3625 "host": "x", 3626 "hostname": "x", 3627 "port": "", 3628 "pathname": "/%EF%BF%BD", 3629 "search": "?%EF%BF%BD", 3630 "hash": "#%EF%BF%BD" 3631 }, 3632 "Test name prepping, fullwidth input should be converted to ASCII and NOT IDN-ized. This is 'Go' in fullwidth UTF-8/UTF-16.", 3633 { 3634 "input": "http://Go.com", 3635 "base": "http://other.com/", 3636 "href": "http://go.com/", 3637 "origin": "http://go.com", 3638 "protocol": "http:", 3639 "username": "", 3640 "password": "", 3641 "host": "go.com", 3642 "hostname": "go.com", 3643 "port": "", 3644 "pathname": "/", 3645 "search": "", 3646 "hash": "" 3647 }, 3648 "URL spec forbids the following. https://www.w3.org/Bugs/Public/show_bug.cgi?id=24257", 3649 { 3650 "input": "http://%41.com", 3651 "base": "http://other.com/", 3652 "failure": true 3653 }, 3654 { 3655 "input": "http://%ef%bc%85%ef%bc%94%ef%bc%91.com", 3656 "base": "http://other.com/", 3657 "failure": true 3658 }, 3659 "...%00 in fullwidth should fail (also as escaped UTF-8 input)", 3660 { 3661 "input": "http://%00.com", 3662 "base": "http://other.com/", 3663 "failure": true 3664 }, 3665 { 3666 "input": "http://%ef%bc%85%ef%bc%90%ef%bc%90.com", 3667 "base": "http://other.com/", 3668 "failure": true 3669 }, 3670 "Basic IDN support, UTF-8 and UTF-16 input should be converted to IDN", 3671 { 3672 "input": "http://你好你好", 3673 "base": "http://other.com/", 3674 "href": "http://xn--6qqa088eba/", 3675 "origin": "http://xn--6qqa088eba", 3676 "protocol": "http:", 3677 "username": "", 3678 "password": "", 3679 "host": "xn--6qqa088eba", 3680 "hostname": "xn--6qqa088eba", 3681 "port": "", 3682 "pathname": "/", 3683 "search": "", 3684 "hash": "" 3685 }, 3686 { 3687 "input": "https://faß.ExAmPlE/", 3688 "base": "about:blank", 3689 "href": "https://xn--fa-hia.example/", 3690 "origin": "https://xn--fa-hia.example", 3691 "protocol": "https:", 3692 "username": "", 3693 "password": "", 3694 "host": "xn--fa-hia.example", 3695 "hostname": "xn--fa-hia.example", 3696 "port": "", 3697 "pathname": "/", 3698 "search": "", 3699 "hash": "" 3700 }, 3701 { 3702 "input": "sc://faß.ExAmPlE/", 3703 "base": "about:blank", 3704 "href": "sc://fa%C3%9F.ExAmPlE/", 3705 "origin": "null", 3706 "protocol": "sc:", 3707 "username": "", 3708 "password": "", 3709 "host": "fa%C3%9F.ExAmPlE", 3710 "hostname": "fa%C3%9F.ExAmPlE", 3711 "port": "", 3712 "pathname": "/", 3713 "search": "", 3714 "hash": "" 3715 }, 3716 "Invalid escaped characters should fail and the percents should be escaped. https://www.w3.org/Bugs/Public/show_bug.cgi?id=24191", 3717 { 3718 "input": "http://%zz%66%a.com", 3719 "base": "http://other.com/", 3720 "failure": true 3721 }, 3722 "If we get an invalid character that has been escaped.", 3723 { 3724 "input": "http://%25", 3725 "base": "http://other.com/", 3726 "failure": true 3727 }, 3728 { 3729 "input": "http://hello%00", 3730 "base": "http://other.com/", 3731 "failure": true 3732 }, 3733 "Escaped numbers should be treated like IP addresses if they are.", 3734 { 3735 "input": "http://%30%78%63%30%2e%30%32%35%30.01", 3736 "base": "http://other.com/", 3737 "href": "http://192.168.0.1/", 3738 "origin": "http://192.168.0.1", 3739 "protocol": "http:", 3740 "username": "", 3741 "password": "", 3742 "host": "192.168.0.1", 3743 "hostname": "192.168.0.1", 3744 "port": "", 3745 "pathname": "/", 3746 "search": "", 3747 "hash": "" 3748 }, 3749 { 3750 "input": "http://%30%78%63%30%2e%30%32%35%30.01%2e", 3751 "base": "http://other.com/", 3752 "href": "http://192.168.0.1/", 3753 "origin": "http://192.168.0.1", 3754 "protocol": "http:", 3755 "username": "", 3756 "password": "", 3757 "host": "192.168.0.1", 3758 "hostname": "192.168.0.1", 3759 "port": "", 3760 "pathname": "/", 3761 "search": "", 3762 "hash": "" 3763 }, 3764 { 3765 "input": "http://192.168.0.257", 3766 "base": "http://other.com/", 3767 "failure": true 3768 }, 3769 "Invalid escaping in hosts causes failure", 3770 { 3771 "input": "http://%3g%78%63%30%2e%30%32%35%30%2E.01", 3772 "base": "http://other.com/", 3773 "failure": true 3774 }, 3775 "A space in a host causes failure", 3776 { 3777 "input": "http://192.168.0.1 hello", 3778 "base": "http://other.com/", 3779 "failure": true 3780 }, 3781 { 3782 "input": "https://x x:12", 3783 "base": "about:blank", 3784 "failure": true 3785 }, 3786 "Fullwidth and escaped UTF-8 fullwidth should still be treated as IP", 3787 { 3788 "input": "http://0Xc0.0250.01", 3789 "base": "http://other.com/", 3790 "href": "http://192.168.0.1/", 3791 "origin": "http://192.168.0.1", 3792 "protocol": "http:", 3793 "username": "", 3794 "password": "", 3795 "host": "192.168.0.1", 3796 "hostname": "192.168.0.1", 3797 "port": "", 3798 "pathname": "/", 3799 "search": "", 3800 "hash": "" 3801 }, 3802 "Domains with empty labels", 3803 { 3804 "input": "http://./", 3805 "base": "about:blank", 3806 "href": "http://./", 3807 "origin": "http://.", 3808 "protocol": "http:", 3809 "username": "", 3810 "password": "", 3811 "host": ".", 3812 "hostname": ".", 3813 "port": "", 3814 "pathname": "/", 3815 "search": "", 3816 "hash": "" 3817 }, 3818 { 3819 "input": "http://../", 3820 "base": "about:blank", 3821 "href": "http://../", 3822 "origin": "http://..", 3823 "protocol": "http:", 3824 "username": "", 3825 "password": "", 3826 "host": "..", 3827 "hostname": "..", 3828 "port": "", 3829 "pathname": "/", 3830 "search": "", 3831 "hash": "" 3832 }, 3833 { 3834 "input": "http://0..0x300/", 3835 "base": "about:blank", 3836 "href": "http://0..0x300/", 3837 "origin": "http://0..0x300", 3838 "protocol": "http:", 3839 "username": "", 3840 "password": "", 3841 "host": "0..0x300", 3842 "hostname": "0..0x300", 3843 "port": "", 3844 "pathname": "/", 3845 "search": "", 3846 "hash": "" 3847 }, 3848 "Broken IPv6", 3849 { 3850 "input": "http://[www.google.com]/", 3851 "base": "about:blank", 3852 "failure": true 3853 }, 3854 { 3855 "input": "http://[google.com]", 3856 "base": "http://other.com/", 3857 "failure": true 3858 }, 3859 { 3860 "input": "http://[::1.2.3.4x]", 3861 "base": "http://other.com/", 3862 "failure": true 3863 }, 3864 { 3865 "input": "http://[::1.2.3.]", 3866 "base": "http://other.com/", 3867 "failure": true 3868 }, 3869 { 3870 "input": "http://[::1.2.]", 3871 "base": "http://other.com/", 3872 "failure": true 3873 }, 3874 { 3875 "input": "http://[::1.]", 3876 "base": "http://other.com/", 3877 "failure": true 3878 }, 3879 "Misc Unicode", 3880 { 3881 "input": "http://foo:💩@example.com/bar", 3882 "base": "http://other.com/", 3883 "href": "http://foo:%F0%9F%92%A9@example.com/bar", 3884 "origin": "http://example.com", 3885 "protocol": "http:", 3886 "username": "foo", 3887 "password": "%F0%9F%92%A9", 3888 "host": "example.com", 3889 "hostname": "example.com", 3890 "port": "", 3891 "pathname": "/bar", 3892 "search": "", 3893 "hash": "" 3894 }, 3895 "# resolving a fragment against any scheme succeeds", 3896 { 3897 "input": "#", 3898 "base": "test:test", 3899 "href": "test:test#", 3900 "origin": "null", 3901 "protocol": "test:", 3902 "username": "", 3903 "password": "", 3904 "host": "", 3905 "hostname": "", 3906 "port": "", 3907 "pathname": "test", 3908 "search": "", 3909 "hash": "" 3910 }, 3911 { 3912 "input": "#x", 3913 "base": "mailto:x@x.com", 3914 "href": "mailto:x@x.com#x", 3915 "origin": "null", 3916 "protocol": "mailto:", 3917 "username": "", 3918 "password": "", 3919 "host": "", 3920 "hostname": "", 3921 "port": "", 3922 "pathname": "x@x.com", 3923 "search": "", 3924 "hash": "#x" 3925 }, 3926 { 3927 "input": "#x", 3928 "base": "data:,", 3929 "href": "data:,#x", 3930 "origin": "null", 3931 "protocol": "data:", 3932 "username": "", 3933 "password": "", 3934 "host": "", 3935 "hostname": "", 3936 "port": "", 3937 "pathname": ",", 3938 "search": "", 3939 "hash": "#x" 3940 }, 3941 { 3942 "input": "#x", 3943 "base": "about:blank", 3944 "href": "about:blank#x", 3945 "origin": "null", 3946 "protocol": "about:", 3947 "username": "", 3948 "password": "", 3949 "host": "", 3950 "hostname": "", 3951 "port": "", 3952 "pathname": "blank", 3953 "search": "", 3954 "hash": "#x" 3955 }, 3956 { 3957 "input": "#", 3958 "base": "test:test?test", 3959 "href": "test:test?test#", 3960 "origin": "null", 3961 "protocol": "test:", 3962 "username": "", 3963 "password": "", 3964 "host": "", 3965 "hostname": "", 3966 "port": "", 3967 "pathname": "test", 3968 "search": "?test", 3969 "hash": "" 3970 }, 3971 "# multiple @ in authority state", 3972 { 3973 "input": "https://@test@test@example:800/", 3974 "base": "http://doesnotmatter/", 3975 "href": "https://%40test%40test@example:800/", 3976 "origin": "https://example:800", 3977 "protocol": "https:", 3978 "username": "%40test%40test", 3979 "password": "", 3980 "host": "example:800", 3981 "hostname": "example", 3982 "port": "800", 3983 "pathname": "/", 3984 "search": "", 3985 "hash": "" 3986 }, 3987 { 3988 "input": "https://@@@example", 3989 "base": "http://doesnotmatter/", 3990 "href": "https://%40%40@example/", 3991 "origin": "https://example", 3992 "protocol": "https:", 3993 "username": "%40%40", 3994 "password": "", 3995 "host": "example", 3996 "hostname": "example", 3997 "port": "", 3998 "pathname": "/", 3999 "search": "", 4000 "hash": "" 4001 }, 4002 "non-az-09 characters", 4003 { 4004 "input": "http://`{}:`{}@h/`{}?`{}", 4005 "base": "http://doesnotmatter/", 4006 "href": "http://%60%7B%7D:%60%7B%7D@h/%60%7B%7D?`{}", 4007 "origin": "http://h", 4008 "protocol": "http:", 4009 "username": "%60%7B%7D", 4010 "password": "%60%7B%7D", 4011 "host": "h", 4012 "hostname": "h", 4013 "port": "", 4014 "pathname": "/%60%7B%7D", 4015 "search": "?`{}", 4016 "hash": "" 4017 }, 4018 "# Credentials in base", 4019 { 4020 "input": "/some/path", 4021 "base": "http://user@example.org/smth", 4022 "href": "http://user@example.org/some/path", 4023 "origin": "http://example.org", 4024 "protocol": "http:", 4025 "username": "user", 4026 "password": "", 4027 "host": "example.org", 4028 "hostname": "example.org", 4029 "port": "", 4030 "pathname": "/some/path", 4031 "search": "", 4032 "hash": "" 4033 }, 4034 { 4035 "input": "", 4036 "base": "http://user:pass@example.org:21/smth", 4037 "href": "http://user:pass@example.org:21/smth", 4038 "origin": "http://example.org:21", 4039 "protocol": "http:", 4040 "username": "user", 4041 "password": "pass", 4042 "host": "example.org:21", 4043 "hostname": "example.org", 4044 "port": "21", 4045 "pathname": "/smth", 4046 "search": "", 4047 "hash": "" 4048 }, 4049 { 4050 "input": "/some/path", 4051 "base": "http://user:pass@example.org:21/smth", 4052 "href": "http://user:pass@example.org:21/some/path", 4053 "origin": "http://example.org:21", 4054 "protocol": "http:", 4055 "username": "user", 4056 "password": "pass", 4057 "host": "example.org:21", 4058 "hostname": "example.org", 4059 "port": "21", 4060 "pathname": "/some/path", 4061 "search": "", 4062 "hash": "" 4063 }, 4064 "# a set of tests designed by zcorpan for relative URLs with unknown schemes", 4065 { 4066 "input": "i", 4067 "base": "sc:sd", 4068 "failure": true 4069 }, 4070 { 4071 "input": "i", 4072 "base": "sc:sd/sd", 4073 "failure": true 4074 }, 4075 { 4076 "input": "i", 4077 "base": "sc:/pa/pa", 4078 "href": "sc:/pa/i", 4079 "origin": "null", 4080 "protocol": "sc:", 4081 "username": "", 4082 "password": "", 4083 "host": "", 4084 "hostname": "", 4085 "port": "", 4086 "pathname": "/pa/i", 4087 "search": "", 4088 "hash": "" 4089 }, 4090 { 4091 "input": "i", 4092 "base": "sc://ho/pa", 4093 "href": "sc://ho/i", 4094 "origin": "null", 4095 "protocol": "sc:", 4096 "username": "", 4097 "password": "", 4098 "host": "ho", 4099 "hostname": "ho", 4100 "port": "", 4101 "pathname": "/i", 4102 "search": "", 4103 "hash": "" 4104 }, 4105 { 4106 "input": "i", 4107 "base": "sc:///pa/pa", 4108 "href": "sc:///pa/i", 4109 "origin": "null", 4110 "protocol": "sc:", 4111 "username": "", 4112 "password": "", 4113 "host": "", 4114 "hostname": "", 4115 "port": "", 4116 "pathname": "/pa/i", 4117 "search": "", 4118 "hash": "" 4119 }, 4120 { 4121 "input": "../i", 4122 "base": "sc:sd", 4123 "failure": true 4124 }, 4125 { 4126 "input": "../i", 4127 "base": "sc:sd/sd", 4128 "failure": true 4129 }, 4130 { 4131 "input": "../i", 4132 "base": "sc:/pa/pa", 4133 "href": "sc:/i", 4134 "origin": "null", 4135 "protocol": "sc:", 4136 "username": "", 4137 "password": "", 4138 "host": "", 4139 "hostname": "", 4140 "port": "", 4141 "pathname": "/i", 4142 "search": "", 4143 "hash": "" 4144 }, 4145 { 4146 "input": "../i", 4147 "base": "sc://ho/pa", 4148 "href": "sc://ho/i", 4149 "origin": "null", 4150 "protocol": "sc:", 4151 "username": "", 4152 "password": "", 4153 "host": "ho", 4154 "hostname": "ho", 4155 "port": "", 4156 "pathname": "/i", 4157 "search": "", 4158 "hash": "" 4159 }, 4160 { 4161 "input": "../i", 4162 "base": "sc:///pa/pa", 4163 "href": "sc:///i", 4164 "origin": "null", 4165 "protocol": "sc:", 4166 "username": "", 4167 "password": "", 4168 "host": "", 4169 "hostname": "", 4170 "port": "", 4171 "pathname": "/i", 4172 "search": "", 4173 "hash": "" 4174 }, 4175 { 4176 "input": "/i", 4177 "base": "sc:sd", 4178 "failure": true 4179 }, 4180 { 4181 "input": "/i", 4182 "base": "sc:sd/sd", 4183 "failure": true 4184 }, 4185 { 4186 "input": "/i", 4187 "base": "sc:/pa/pa", 4188 "href": "sc:/i", 4189 "origin": "null", 4190 "protocol": "sc:", 4191 "username": "", 4192 "password": "", 4193 "host": "", 4194 "hostname": "", 4195 "port": "", 4196 "pathname": "/i", 4197 "search": "", 4198 "hash": "" 4199 }, 4200 { 4201 "input": "/i", 4202 "base": "sc://ho/pa", 4203 "href": "sc://ho/i", 4204 "origin": "null", 4205 "protocol": "sc:", 4206 "username": "", 4207 "password": "", 4208 "host": "ho", 4209 "hostname": "ho", 4210 "port": "", 4211 "pathname": "/i", 4212 "search": "", 4213 "hash": "" 4214 }, 4215 { 4216 "input": "/i", 4217 "base": "sc:///pa/pa", 4218 "href": "sc:///i", 4219 "origin": "null", 4220 "protocol": "sc:", 4221 "username": "", 4222 "password": "", 4223 "host": "", 4224 "hostname": "", 4225 "port": "", 4226 "pathname": "/i", 4227 "search": "", 4228 "hash": "" 4229 }, 4230 { 4231 "input": "?i", 4232 "base": "sc:sd", 4233 "failure": true 4234 }, 4235 { 4236 "input": "?i", 4237 "base": "sc:sd/sd", 4238 "failure": true 4239 }, 4240 { 4241 "input": "?i", 4242 "base": "sc:/pa/pa", 4243 "href": "sc:/pa/pa?i", 4244 "origin": "null", 4245 "protocol": "sc:", 4246 "username": "", 4247 "password": "", 4248 "host": "", 4249 "hostname": "", 4250 "port": "", 4251 "pathname": "/pa/pa", 4252 "search": "?i", 4253 "hash": "" 4254 }, 4255 { 4256 "input": "?i", 4257 "base": "sc://ho/pa", 4258 "href": "sc://ho/pa?i", 4259 "origin": "null", 4260 "protocol": "sc:", 4261 "username": "", 4262 "password": "", 4263 "host": "ho", 4264 "hostname": "ho", 4265 "port": "", 4266 "pathname": "/pa", 4267 "search": "?i", 4268 "hash": "" 4269 }, 4270 { 4271 "input": "?i", 4272 "base": "sc:///pa/pa", 4273 "href": "sc:///pa/pa?i", 4274 "origin": "null", 4275 "protocol": "sc:", 4276 "username": "", 4277 "password": "", 4278 "host": "", 4279 "hostname": "", 4280 "port": "", 4281 "pathname": "/pa/pa", 4282 "search": "?i", 4283 "hash": "" 4284 }, 4285 { 4286 "input": "#i", 4287 "base": "sc:sd", 4288 "href": "sc:sd#i", 4289 "origin": "null", 4290 "protocol": "sc:", 4291 "username": "", 4292 "password": "", 4293 "host": "", 4294 "hostname": "", 4295 "port": "", 4296 "pathname": "sd", 4297 "search": "", 4298 "hash": "#i" 4299 }, 4300 { 4301 "input": "#i", 4302 "base": "sc:sd/sd", 4303 "href": "sc:sd/sd#i", 4304 "origin": "null", 4305 "protocol": "sc:", 4306 "username": "", 4307 "password": "", 4308 "host": "", 4309 "hostname": "", 4310 "port": "", 4311 "pathname": "sd/sd", 4312 "search": "", 4313 "hash": "#i" 4314 }, 4315 { 4316 "input": "#i", 4317 "base": "sc:/pa/pa", 4318 "href": "sc:/pa/pa#i", 4319 "origin": "null", 4320 "protocol": "sc:", 4321 "username": "", 4322 "password": "", 4323 "host": "", 4324 "hostname": "", 4325 "port": "", 4326 "pathname": "/pa/pa", 4327 "search": "", 4328 "hash": "#i" 4329 }, 4330 { 4331 "input": "#i", 4332 "base": "sc://ho/pa", 4333 "href": "sc://ho/pa#i", 4334 "origin": "null", 4335 "protocol": "sc:", 4336 "username": "", 4337 "password": "", 4338 "host": "ho", 4339 "hostname": "ho", 4340 "port": "", 4341 "pathname": "/pa", 4342 "search": "", 4343 "hash": "#i" 4344 }, 4345 { 4346 "input": "#i", 4347 "base": "sc:///pa/pa", 4348 "href": "sc:///pa/pa#i", 4349 "origin": "null", 4350 "protocol": "sc:", 4351 "username": "", 4352 "password": "", 4353 "host": "", 4354 "hostname": "", 4355 "port": "", 4356 "pathname": "/pa/pa", 4357 "search": "", 4358 "hash": "#i" 4359 }, 4360 "# make sure that relative URL logic works on known typically non-relative schemes too", 4361 { 4362 "input": "about:/../", 4363 "base": "about:blank", 4364 "href": "about:/", 4365 "origin": "null", 4366 "protocol": "about:", 4367 "username": "", 4368 "password": "", 4369 "host": "", 4370 "hostname": "", 4371 "port": "", 4372 "pathname": "/", 4373 "search": "", 4374 "hash": "" 4375 }, 4376 { 4377 "input": "data:/../", 4378 "base": "about:blank", 4379 "href": "data:/", 4380 "origin": "null", 4381 "protocol": "data:", 4382 "username": "", 4383 "password": "", 4384 "host": "", 4385 "hostname": "", 4386 "port": "", 4387 "pathname": "/", 4388 "search": "", 4389 "hash": "" 4390 }, 4391 { 4392 "input": "javascript:/../", 4393 "base": "about:blank", 4394 "href": "javascript:/", 4395 "origin": "null", 4396 "protocol": "javascript:", 4397 "username": "", 4398 "password": "", 4399 "host": "", 4400 "hostname": "", 4401 "port": "", 4402 "pathname": "/", 4403 "search": "", 4404 "hash": "" 4405 }, 4406 { 4407 "input": "mailto:/../", 4408 "base": "about:blank", 4409 "href": "mailto:/", 4410 "origin": "null", 4411 "protocol": "mailto:", 4412 "username": "", 4413 "password": "", 4414 "host": "", 4415 "hostname": "", 4416 "port": "", 4417 "pathname": "/", 4418 "search": "", 4419 "hash": "" 4420 }, 4421 "# unknown schemes and their hosts", 4422 { 4423 "input": "sc://ñ.test/", 4424 "base": "about:blank", 4425 "href": "sc://%C3%B1.test/", 4426 "origin": "null", 4427 "protocol": "sc:", 4428 "username": "", 4429 "password": "", 4430 "host": "%C3%B1.test", 4431 "hostname": "%C3%B1.test", 4432 "port": "", 4433 "pathname": "/", 4434 "search": "", 4435 "hash": "" 4436 }, 4437 { 4438 "input": "sc://\u001F!\"$&'()*+,-.;<=>^_`{|}~/", 4439 "base": "about:blank", 4440 "href": "sc://%1F!\"$&'()*+,-.;<=>^_`{|}~/", 4441 "origin": "null", 4442 "protocol": "sc:", 4443 "username": "", 4444 "password": "", 4445 "host": "%1F!\"$&'()*+,-.;<=>^_`{|}~", 4446 "hostname": "%1F!\"$&'()*+,-.;<=>^_`{|}~", 4447 "port": "", 4448 "pathname": "/", 4449 "search": "", 4450 "hash": "" 4451 }, 4452 { 4453 "input": "sc://\u0000/", 4454 "base": "about:blank", 4455 "failure": true 4456 }, 4457 { 4458 "input": "sc:// /", 4459 "base": "about:blank", 4460 "failure": true 4461 }, 4462 { 4463 "input": "sc://%/", 4464 "base": "about:blank", 4465 "href": "sc://%/", 4466 "protocol": "sc:", 4467 "username": "", 4468 "password": "", 4469 "host": "%", 4470 "hostname": "%", 4471 "port": "", 4472 "pathname": "/", 4473 "search": "", 4474 "hash": "" 4475 }, 4476 { 4477 "input": "sc://[/", 4478 "base": "about:blank", 4479 "failure": true 4480 }, 4481 { 4482 "input": "sc://\\/", 4483 "base": "about:blank", 4484 "failure": true 4485 }, 4486 { 4487 "input": "sc://]/", 4488 "base": "about:blank", 4489 "failure": true 4490 }, 4491 { 4492 "input": "x", 4493 "base": "sc://ñ", 4494 "href": "sc://%C3%B1/x", 4495 "origin": "null", 4496 "protocol": "sc:", 4497 "username": "", 4498 "password": "", 4499 "host": "%C3%B1", 4500 "hostname": "%C3%B1", 4501 "port": "", 4502 "pathname": "/x", 4503 "search": "", 4504 "hash": "" 4505 }, 4506 "# unknown schemes and backslashes", 4507 { 4508 "input": "sc:\\../", 4509 "base": "about:blank", 4510 "href": "sc:\\../", 4511 "origin": "null", 4512 "protocol": "sc:", 4513 "username": "", 4514 "password": "", 4515 "host": "", 4516 "hostname": "", 4517 "port": "", 4518 "pathname": "\\../", 4519 "search": "", 4520 "hash": "" 4521 }, 4522 "# unknown scheme with path looking like a password", 4523 { 4524 "input": "sc::a@example.net", 4525 "base": "about:blank", 4526 "href": "sc::a@example.net", 4527 "origin": "null", 4528 "protocol": "sc:", 4529 "username": "", 4530 "password": "", 4531 "host": "", 4532 "hostname": "", 4533 "port": "", 4534 "pathname": ":a@example.net", 4535 "search": "", 4536 "hash": "" 4537 }, 4538 "# unknown scheme with bogus percent-encoding", 4539 { 4540 "input": "wow:%NBD", 4541 "base": "about:blank", 4542 "href": "wow:%NBD", 4543 "origin": "null", 4544 "protocol": "wow:", 4545 "username": "", 4546 "password": "", 4547 "host": "", 4548 "hostname": "", 4549 "port": "", 4550 "pathname": "%NBD", 4551 "search": "", 4552 "hash": "" 4553 }, 4554 { 4555 "input": "wow:%1G", 4556 "base": "about:blank", 4557 "href": "wow:%1G", 4558 "origin": "null", 4559 "protocol": "wow:", 4560 "username": "", 4561 "password": "", 4562 "host": "", 4563 "hostname": "", 4564 "port": "", 4565 "pathname": "%1G", 4566 "search": "", 4567 "hash": "" 4568 }, 4569 "# Hosts and percent-encoding", 4570 { 4571 "input": "ftp://example.com%80/", 4572 "base": "about:blank", 4573 "failure": true 4574 }, 4575 { 4576 "input": "ftp://example.com%A0/", 4577 "base": "about:blank", 4578 "failure": true 4579 }, 4580 { 4581 "input": "https://example.com%80/", 4582 "base": "about:blank", 4583 "failure": true 4584 }, 4585 { 4586 "input": "https://example.com%A0/", 4587 "base": "about:blank", 4588 "failure": true 4589 }, 4590 { 4591 "input": "ftp://%e2%98%83", 4592 "base": "about:blank", 4593 "href": "ftp://xn--n3h/", 4594 "origin": "ftp://xn--n3h", 4595 "protocol": "ftp:", 4596 "username": "", 4597 "password": "", 4598 "host": "xn--n3h", 4599 "hostname": "xn--n3h", 4600 "port": "", 4601 "pathname": "/", 4602 "search": "", 4603 "hash": "" 4604 }, 4605 { 4606 "input": "https://%e2%98%83", 4607 "base": "about:blank", 4608 "href": "https://xn--n3h/", 4609 "origin": "https://xn--n3h", 4610 "protocol": "https:", 4611 "username": "", 4612 "password": "", 4613 "host": "xn--n3h", 4614 "hostname": "xn--n3h", 4615 "port": "", 4616 "pathname": "/", 4617 "search": "", 4618 "hash": "" 4619 }, 4620 "# tests from jsdom/whatwg-url designed for code coverage", 4621 { 4622 "input": "http://127.0.0.1:10100/relative_import.html", 4623 "base": "about:blank", 4624 "href": "http://127.0.0.1:10100/relative_import.html", 4625 "origin": "http://127.0.0.1:10100", 4626 "protocol": "http:", 4627 "username": "", 4628 "password": "", 4629 "host": "127.0.0.1:10100", 4630 "hostname": "127.0.0.1", 4631 "port": "10100", 4632 "pathname": "/relative_import.html", 4633 "search": "", 4634 "hash": "" 4635 }, 4636 { 4637 "input": "http://facebook.com/?foo=%7B%22abc%22", 4638 "base": "about:blank", 4639 "href": "http://facebook.com/?foo=%7B%22abc%22", 4640 "origin": "http://facebook.com", 4641 "protocol": "http:", 4642 "username": "", 4643 "password": "", 4644 "host": "facebook.com", 4645 "hostname": "facebook.com", 4646 "port": "", 4647 "pathname": "/", 4648 "search": "?foo=%7B%22abc%22", 4649 "hash": "" 4650 }, 4651 { 4652 "input": "https://localhost:3000/jqueryui@1.2.3", 4653 "base": "about:blank", 4654 "href": "https://localhost:3000/jqueryui@1.2.3", 4655 "origin": "https://localhost:3000", 4656 "protocol": "https:", 4657 "username": "", 4658 "password": "", 4659 "host": "localhost:3000", 4660 "hostname": "localhost", 4661 "port": "3000", 4662 "pathname": "/jqueryui@1.2.3", 4663 "search": "", 4664 "hash": "" 4665 }, 4666 "# tab/LF/CR", 4667 { 4668 "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", 4669 "base": "about:blank", 4670 "href": "http://host:9000/path?query#frag", 4671 "origin": "http://host:9000", 4672 "protocol": "http:", 4673 "username": "", 4674 "password": "", 4675 "host": "host:9000", 4676 "hostname": "host", 4677 "port": "9000", 4678 "pathname": "/path", 4679 "search": "?query", 4680 "hash": "#frag" 4681 }, 4682 "# Stringification of URL.searchParams", 4683 { 4684 "input": "?a=b&c=d", 4685 "base": "http://example.org/foo/bar", 4686 "href": "http://example.org/foo/bar?a=b&c=d", 4687 "origin": "http://example.org", 4688 "protocol": "http:", 4689 "username": "", 4690 "password": "", 4691 "host": "example.org", 4692 "hostname": "example.org", 4693 "port": "", 4694 "pathname": "/foo/bar", 4695 "search": "?a=b&c=d", 4696 "searchParams": "a=b&c=d", 4697 "hash": "" 4698 }, 4699 { 4700 "input": "??a=b&c=d", 4701 "base": "http://example.org/foo/bar", 4702 "href": "http://example.org/foo/bar??a=b&c=d", 4703 "origin": "http://example.org", 4704 "protocol": "http:", 4705 "username": "", 4706 "password": "", 4707 "host": "example.org", 4708 "hostname": "example.org", 4709 "port": "", 4710 "pathname": "/foo/bar", 4711 "search": "??a=b&c=d", 4712 "searchParams": "%3Fa=b&c=d", 4713 "hash": "" 4714 }, 4715 "# Scheme only", 4716 { 4717 "input": "http:", 4718 "base": "http://example.org/foo/bar", 4719 "href": "http://example.org/foo/bar", 4720 "origin": "http://example.org", 4721 "protocol": "http:", 4722 "username": "", 4723 "password": "", 4724 "host": "example.org", 4725 "hostname": "example.org", 4726 "port": "", 4727 "pathname": "/foo/bar", 4728 "search": "", 4729 "searchParams": "", 4730 "hash": "" 4731 }, 4732 { 4733 "input": "http:", 4734 "base": "https://example.org/foo/bar", 4735 "failure": true 4736 }, 4737 { 4738 "input": "sc:", 4739 "base": "https://example.org/foo/bar", 4740 "href": "sc:", 4741 "origin": "null", 4742 "protocol": "sc:", 4743 "username": "", 4744 "password": "", 4745 "host": "", 4746 "hostname": "", 4747 "port": "", 4748 "pathname": "", 4749 "search": "", 4750 "searchParams": "", 4751 "hash": "" 4752 }, 4753 "# Percent encoding of fragments", 4754 { 4755 "input": "http://foo.bar/baz?qux#foo\bbar", 4756 "base": "about:blank", 4757 "href": "http://foo.bar/baz?qux#foo%08bar", 4758 "origin": "http://foo.bar", 4759 "protocol": "http:", 4760 "username": "", 4761 "password": "", 4762 "host": "foo.bar", 4763 "hostname": "foo.bar", 4764 "port": "", 4765 "pathname": "/baz", 4766 "search": "?qux", 4767 "searchParams": "qux=", 4768 "hash": "#foo%08bar" 4769 }, 4770 "# IPv4 parsing (via https://github.com/nodejs/node/pull/10317)", 4771 { 4772 "input": "http://192.168.257", 4773 "base": "http://other.com/", 4774 "href": "http://192.168.1.1/", 4775 "origin": "http://192.168.1.1", 4776 "protocol": "http:", 4777 "username": "", 4778 "password": "", 4779 "host": "192.168.1.1", 4780 "hostname": "192.168.1.1", 4781 "port": "", 4782 "pathname": "/", 4783 "search": "", 4784 "hash": "" 4785 }, 4786 { 4787 "input": "http://192.168.257.com", 4788 "base": "http://other.com/", 4789 "href": "http://192.168.257.com/", 4790 "origin": "http://192.168.257.com", 4791 "protocol": "http:", 4792 "username": "", 4793 "password": "", 4794 "host": "192.168.257.com", 4795 "hostname": "192.168.257.com", 4796 "port": "", 4797 "pathname": "/", 4798 "search": "", 4799 "hash": "" 4800 }, 4801 { 4802 "input": "http://256", 4803 "base": "http://other.com/", 4804 "href": "http://0.0.1.0/", 4805 "origin": "http://0.0.1.0", 4806 "protocol": "http:", 4807 "username": "", 4808 "password": "", 4809 "host": "0.0.1.0", 4810 "hostname": "0.0.1.0", 4811 "port": "", 4812 "pathname": "/", 4813 "search": "", 4814 "hash": "" 4815 }, 4816 { 4817 "input": "http://256.com", 4818 "base": "http://other.com/", 4819 "href": "http://256.com/", 4820 "origin": "http://256.com", 4821 "protocol": "http:", 4822 "username": "", 4823 "password": "", 4824 "host": "256.com", 4825 "hostname": "256.com", 4826 "port": "", 4827 "pathname": "/", 4828 "search": "", 4829 "hash": "" 4830 }, 4831 { 4832 "input": "http://999999999", 4833 "base": "http://other.com/", 4834 "href": "http://59.154.201.255/", 4835 "origin": "http://59.154.201.255", 4836 "protocol": "http:", 4837 "username": "", 4838 "password": "", 4839 "host": "59.154.201.255", 4840 "hostname": "59.154.201.255", 4841 "port": "", 4842 "pathname": "/", 4843 "search": "", 4844 "hash": "" 4845 }, 4846 { 4847 "input": "http://999999999.com", 4848 "base": "http://other.com/", 4849 "href": "http://999999999.com/", 4850 "origin": "http://999999999.com", 4851 "protocol": "http:", 4852 "username": "", 4853 "password": "", 4854 "host": "999999999.com", 4855 "hostname": "999999999.com", 4856 "port": "", 4857 "pathname": "/", 4858 "search": "", 4859 "hash": "" 4860 }, 4861 { 4862 "input": "http://10000000000", 4863 "base": "http://other.com/", 4864 "failure": true 4865 }, 4866 { 4867 "input": "http://10000000000.com", 4868 "base": "http://other.com/", 4869 "href": "http://10000000000.com/", 4870 "origin": "http://10000000000.com", 4871 "protocol": "http:", 4872 "username": "", 4873 "password": "", 4874 "host": "10000000000.com", 4875 "hostname": "10000000000.com", 4876 "port": "", 4877 "pathname": "/", 4878 "search": "", 4879 "hash": "" 4880 }, 4881 { 4882 "input": "http://4294967295", 4883 "base": "http://other.com/", 4884 "href": "http://255.255.255.255/", 4885 "origin": "http://255.255.255.255", 4886 "protocol": "http:", 4887 "username": "", 4888 "password": "", 4889 "host": "255.255.255.255", 4890 "hostname": "255.255.255.255", 4891 "port": "", 4892 "pathname": "/", 4893 "search": "", 4894 "hash": "" 4895 }, 4896 { 4897 "input": "http://4294967296", 4898 "base": "http://other.com/", 4899 "failure": true 4900 }, 4901 { 4902 "input": "http://0xffffffff", 4903 "base": "http://other.com/", 4904 "href": "http://255.255.255.255/", 4905 "origin": "http://255.255.255.255", 4906 "protocol": "http:", 4907 "username": "", 4908 "password": "", 4909 "host": "255.255.255.255", 4910 "hostname": "255.255.255.255", 4911 "port": "", 4912 "pathname": "/", 4913 "search": "", 4914 "hash": "" 4915 }, 4916 { 4917 "input": "http://0xffffffff1", 4918 "base": "http://other.com/", 4919 "failure": true 4920 }, 4921 { 4922 "input": "http://256.256.256.256", 4923 "base": "http://other.com/", 4924 "failure": true 4925 }, 4926 { 4927 "input": "http://256.256.256.256.256", 4928 "base": "http://other.com/", 4929 "href": "http://256.256.256.256.256/", 4930 "origin": "http://256.256.256.256.256", 4931 "protocol": "http:", 4932 "username": "", 4933 "password": "", 4934 "host": "256.256.256.256.256", 4935 "hostname": "256.256.256.256.256", 4936 "port": "", 4937 "pathname": "/", 4938 "search": "", 4939 "hash": "" 4940 }, 4941 { 4942 "input": "https://0x.0x.0", 4943 "base": "about:blank", 4944 "href": "https://0.0.0.0/", 4945 "origin": "https://0.0.0.0", 4946 "protocol": "https:", 4947 "username": "", 4948 "password": "", 4949 "host": "0.0.0.0", 4950 "hostname": "0.0.0.0", 4951 "port": "", 4952 "pathname": "/", 4953 "search": "", 4954 "hash": "" 4955 }, 4956 "More IPv4 parsing (via https://github.com/jsdom/whatwg-url/issues/92)", 4957 { 4958 "input": "https://256.0.0.1/test", 4959 "base": "about:blank", 4960 "failure": true 4961 }, 4962 "# file URLs containing percent-encoded Windows drive letters (shouldn't work)", 4963 { 4964 "input": "file:///C%3A/", 4965 "base": "about:blank", 4966 "href": "file:///C%3A/", 4967 "protocol": "file:", 4968 "username": "", 4969 "password": "", 4970 "host": "", 4971 "hostname": "", 4972 "port": "", 4973 "pathname": "/C%3A/", 4974 "search": "", 4975 "hash": "" 4976 }, 4977 { 4978 "input": "file:///C%7C/", 4979 "base": "about:blank", 4980 "href": "file:///C%7C/", 4981 "protocol": "file:", 4982 "username": "", 4983 "password": "", 4984 "host": "", 4985 "hostname": "", 4986 "port": "", 4987 "pathname": "/C%7C/", 4988 "search": "", 4989 "hash": "" 4990 }, 4991 "# file URLs relative to other file URLs (via https://github.com/jsdom/whatwg-url/pull/60)", 4992 { 4993 "input": "pix/submit.gif", 4994 "base": "file:///C:/Users/Domenic/Dropbox/GitHub/tmpvar/jsdom/test/level2/html/files/anchor.html", 4995 "href": "file:///C:/Users/Domenic/Dropbox/GitHub/tmpvar/jsdom/test/level2/html/files/pix/submit.gif", 4996 "protocol": "file:", 4997 "username": "", 4998 "password": "", 4999 "host": "", 5000 "hostname": "", 5001 "port": "", 5002 "pathname": "/C:/Users/Domenic/Dropbox/GitHub/tmpvar/jsdom/test/level2/html/files/pix/submit.gif", 5003 "search": "", 5004 "hash": "" 5005 }, 5006 { 5007 "input": "..", 5008 "base": "file:///C:/", 5009 "href": "file:///C:/", 5010 "protocol": "file:", 5011 "username": "", 5012 "password": "", 5013 "host": "", 5014 "hostname": "", 5015 "port": "", 5016 "pathname": "/C:/", 5017 "search": "", 5018 "hash": "" 5019 }, 5020 { 5021 "input": "..", 5022 "base": "file:///", 5023 "href": "file:///", 5024 "protocol": "file:", 5025 "username": "", 5026 "password": "", 5027 "host": "", 5028 "hostname": "", 5029 "port": "", 5030 "pathname": "/", 5031 "search": "", 5032 "hash": "" 5033 }, 5034 "# More file URL tests by zcorpan and annevk", 5035 { 5036 "input": "/", 5037 "base": "file:///C:/a/b", 5038 "href": "file:///C:/", 5039 "protocol": "file:", 5040 "username": "", 5041 "password": "", 5042 "host": "", 5043 "hostname": "", 5044 "port": "", 5045 "pathname": "/C:/", 5046 "search": "", 5047 "hash": "" 5048 }, 5049 { 5050 "input": "//d:", 5051 "base": "file:///C:/a/b", 5052 "href": "file:///d:", 5053 "protocol": "file:", 5054 "username": "", 5055 "password": "", 5056 "host": "", 5057 "hostname": "", 5058 "port": "", 5059 "pathname": "/d:", 5060 "search": "", 5061 "hash": "" 5062 }, 5063 { 5064 "input": "//d:/..", 5065 "base": "file:///C:/a/b", 5066 "href": "file:///d:/", 5067 "protocol": "file:", 5068 "username": "", 5069 "password": "", 5070 "host": "", 5071 "hostname": "", 5072 "port": "", 5073 "pathname": "/d:/", 5074 "search": "", 5075 "hash": "" 5076 }, 5077 { 5078 "input": "..", 5079 "base": "file:///ab:/", 5080 "href": "file:///", 5081 "protocol": "file:", 5082 "username": "", 5083 "password": "", 5084 "host": "", 5085 "hostname": "", 5086 "port": "", 5087 "pathname": "/", 5088 "search": "", 5089 "hash": "" 5090 }, 5091 { 5092 "input": "..", 5093 "base": "file:///1:/", 5094 "href": "file:///", 5095 "protocol": "file:", 5096 "username": "", 5097 "password": "", 5098 "host": "", 5099 "hostname": "", 5100 "port": "", 5101 "pathname": "/", 5102 "search": "", 5103 "hash": "" 5104 }, 5105 { 5106 "input": "", 5107 "base": "file:///test?test#test", 5108 "href": "file:///test?test", 5109 "protocol": "file:", 5110 "username": "", 5111 "password": "", 5112 "host": "", 5113 "hostname": "", 5114 "port": "", 5115 "pathname": "/test", 5116 "search": "?test", 5117 "hash": "" 5118 }, 5119 { 5120 "input": "file:", 5121 "base": "file:///test?test#test", 5122 "href": "file:///test?test", 5123 "protocol": "file:", 5124 "username": "", 5125 "password": "", 5126 "host": "", 5127 "hostname": "", 5128 "port": "", 5129 "pathname": "/test", 5130 "search": "?test", 5131 "hash": "" 5132 }, 5133 { 5134 "input": "?x", 5135 "base": "file:///test?test#test", 5136 "href": "file:///test?x", 5137 "protocol": "file:", 5138 "username": "", 5139 "password": "", 5140 "host": "", 5141 "hostname": "", 5142 "port": "", 5143 "pathname": "/test", 5144 "search": "?x", 5145 "hash": "" 5146 }, 5147 { 5148 "input": "file:?x", 5149 "base": "file:///test?test#test", 5150 "href": "file:///test?x", 5151 "protocol": "file:", 5152 "username": "", 5153 "password": "", 5154 "host": "", 5155 "hostname": "", 5156 "port": "", 5157 "pathname": "/test", 5158 "search": "?x", 5159 "hash": "" 5160 }, 5161 { 5162 "input": "#x", 5163 "base": "file:///test?test#test", 5164 "href": "file:///test?test#x", 5165 "protocol": "file:", 5166 "username": "", 5167 "password": "", 5168 "host": "", 5169 "hostname": "", 5170 "port": "", 5171 "pathname": "/test", 5172 "search": "?test", 5173 "hash": "#x" 5174 }, 5175 { 5176 "input": "file:#x", 5177 "base": "file:///test?test#test", 5178 "href": "file:///test?test#x", 5179 "protocol": "file:", 5180 "username": "", 5181 "password": "", 5182 "host": "", 5183 "hostname": "", 5184 "port": "", 5185 "pathname": "/test", 5186 "search": "?test", 5187 "hash": "#x" 5188 }, 5189 "# File URLs and many (back)slashes", 5190 { 5191 "input": "file:///localhost//cat", 5192 "base": "about:blank", 5193 "href": "file:///localhost//cat", 5194 "protocol": "file:", 5195 "username": "", 5196 "password": "", 5197 "host": "", 5198 "hostname": "", 5199 "port": "", 5200 "pathname": "/localhost//cat", 5201 "search": "", 5202 "hash": "" 5203 }, 5204 { 5205 "input": "\\//pig", 5206 "base": "file://lion/", 5207 "href": "file:///pig", 5208 "protocol": "file:", 5209 "username": "", 5210 "password": "", 5211 "host": "", 5212 "hostname": "", 5213 "port": "", 5214 "pathname": "/pig", 5215 "search": "", 5216 "hash": "" 5217 }, 5218 { 5219 "input": "file://", 5220 "base": "file://ape/", 5221 "href": "file:///", 5222 "protocol": "file:", 5223 "username": "", 5224 "password": "", 5225 "host": "", 5226 "hostname": "", 5227 "port": "", 5228 "pathname": "/", 5229 "search": "", 5230 "hash": "" 5231 }, 5232 "# Windows drive letter handling with the 'file:' base URL", 5233 { 5234 "input": "C|#", 5235 "base": "file://host/dir/file", 5236 "href": "file:///C:#", 5237 "protocol": "file:", 5238 "username": "", 5239 "password": "", 5240 "host": "", 5241 "hostname": "", 5242 "port": "", 5243 "pathname": "/C:", 5244 "search": "", 5245 "hash": "" 5246 }, 5247 { 5248 "input": "C|?", 5249 "base": "file://host/dir/file", 5250 "href": "file:///C:?", 5251 "protocol": "file:", 5252 "username": "", 5253 "password": "", 5254 "host": "", 5255 "hostname": "", 5256 "port": "", 5257 "pathname": "/C:", 5258 "search": "", 5259 "hash": "" 5260 }, 5261 { 5262 "input": "C|/", 5263 "base": "file://host/dir/file", 5264 "href": "file:///C:/", 5265 "protocol": "file:", 5266 "username": "", 5267 "password": "", 5268 "host": "", 5269 "hostname": "", 5270 "port": "", 5271 "pathname": "/C:/", 5272 "search": "", 5273 "hash": "" 5274 }, 5275 { 5276 "input": "C|\n/", 5277 "base": "file://host/dir/file", 5278 "href": "file:///C:/", 5279 "protocol": "file:", 5280 "username": "", 5281 "password": "", 5282 "host": "", 5283 "hostname": "", 5284 "port": "", 5285 "pathname": "/C:/", 5286 "search": "", 5287 "hash": "" 5288 }, 5289 { 5290 "input": "C|\\", 5291 "base": "file://host/dir/file", 5292 "href": "file:///C:/", 5293 "protocol": "file:", 5294 "username": "", 5295 "password": "", 5296 "host": "", 5297 "hostname": "", 5298 "port": "", 5299 "pathname": "/C:/", 5300 "search": "", 5301 "hash": "" 5302 }, 5303 { 5304 "input": "C", 5305 "base": "file://host/dir/file", 5306 "href": "file://host/dir/C", 5307 "protocol": "file:", 5308 "username": "", 5309 "password": "", 5310 "host": "host", 5311 "hostname": "host", 5312 "port": "", 5313 "pathname": "/dir/C", 5314 "search": "", 5315 "hash": "" 5316 }, 5317 { 5318 "input": "C|a", 5319 "base": "file://host/dir/file", 5320 "href": "file://host/dir/C|a", 5321 "protocol": "file:", 5322 "username": "", 5323 "password": "", 5324 "host": "host", 5325 "hostname": "host", 5326 "port": "", 5327 "pathname": "/dir/C|a", 5328 "search": "", 5329 "hash": "" 5330 }, 5331 "# Windows drive letter quirk in the file slash state", 5332 { 5333 "input": "/c:/foo/bar", 5334 "base": "file://host/path", 5335 "href": "file:///c:/foo/bar", 5336 "protocol": "file:", 5337 "username": "", 5338 "password": "", 5339 "host": "", 5340 "hostname": "", 5341 "port": "", 5342 "pathname": "/c:/foo/bar", 5343 "search": "", 5344 "hash": "" 5345 }, 5346 "# Windows drive letter quirk (no host)", 5347 { 5348 "input": "file:/C|/", 5349 "base": "about:blank", 5350 "href": "file:///C:/", 5351 "protocol": "file:", 5352 "username": "", 5353 "password": "", 5354 "host": "", 5355 "hostname": "", 5356 "port": "", 5357 "pathname": "/C:/", 5358 "search": "", 5359 "hash": "" 5360 }, 5361 { 5362 "input": "file://C|/", 5363 "base": "about:blank", 5364 "href": "file:///C:/", 5365 "protocol": "file:", 5366 "username": "", 5367 "password": "", 5368 "host": "", 5369 "hostname": "", 5370 "port": "", 5371 "pathname": "/C:/", 5372 "search": "", 5373 "hash": "" 5374 }, 5375 "# Windows drive letter quirk with not empty host", 5376 { 5377 "input": "file://example.net/C:/", 5378 "base": "about:blank", 5379 "href": "file:///C:/", 5380 "protocol": "file:", 5381 "username": "", 5382 "password": "", 5383 "host": "", 5384 "hostname": "", 5385 "port": "", 5386 "pathname": "/C:/", 5387 "search": "", 5388 "hash": "" 5389 }, 5390 { 5391 "input": "file://1.2.3.4/C:/", 5392 "base": "about:blank", 5393 "href": "file:///C:/", 5394 "protocol": "file:", 5395 "username": "", 5396 "password": "", 5397 "host": "", 5398 "hostname": "", 5399 "port": "", 5400 "pathname": "/C:/", 5401 "search": "", 5402 "hash": "" 5403 }, 5404 { 5405 "input": "file://[1::8]/C:/", 5406 "base": "about:blank", 5407 "href": "file:///C:/", 5408 "protocol": "file:", 5409 "username": "", 5410 "password": "", 5411 "host": "", 5412 "hostname": "", 5413 "port": "", 5414 "pathname": "/C:/", 5415 "search": "", 5416 "hash": "" 5417 }, 5418 "# file URLs without base URL by Rimas Misevičius", 5419 { 5420 "input": "file:", 5421 "base": "about:blank", 5422 "href": "file:///", 5423 "protocol": "file:", 5424 "username": "", 5425 "password": "", 5426 "host": "", 5427 "hostname": "", 5428 "port": "", 5429 "pathname": "/", 5430 "search": "", 5431 "hash": "" 5432 }, 5433 { 5434 "input": "file:?q=v", 5435 "base": "about:blank", 5436 "href": "file:///?q=v", 5437 "protocol": "file:", 5438 "username": "", 5439 "password": "", 5440 "host": "", 5441 "hostname": "", 5442 "port": "", 5443 "pathname": "/", 5444 "search": "?q=v", 5445 "hash": "" 5446 }, 5447 { 5448 "input": "file:#frag", 5449 "base": "about:blank", 5450 "href": "file:///#frag", 5451 "protocol": "file:", 5452 "username": "", 5453 "password": "", 5454 "host": "", 5455 "hostname": "", 5456 "port": "", 5457 "pathname": "/", 5458 "search": "", 5459 "hash": "#frag" 5460 }, 5461 "# IPv6 tests", 5462 { 5463 "input": "http://[1:0::]", 5464 "base": "http://example.net/", 5465 "href": "http://[1::]/", 5466 "origin": "http://[1::]", 5467 "protocol": "http:", 5468 "username": "", 5469 "password": "", 5470 "host": "[1::]", 5471 "hostname": "[1::]", 5472 "port": "", 5473 "pathname": "/", 5474 "search": "", 5475 "hash": "" 5476 }, 5477 { 5478 "input": "http://[0:1:2:3:4:5:6:7:8]", 5479 "base": "http://example.net/", 5480 "failure": true 5481 }, 5482 { 5483 "input": "https://[0::0::0]", 5484 "base": "about:blank", 5485 "failure": true 5486 }, 5487 { 5488 "input": "https://[0:.0]", 5489 "base": "about:blank", 5490 "failure": true 5491 }, 5492 { 5493 "input": "https://[0:0:]", 5494 "base": "about:blank", 5495 "failure": true 5496 }, 5497 { 5498 "input": "https://[0:1:2:3:4:5:6:7.0.0.0.1]", 5499 "base": "about:blank", 5500 "failure": true 5501 }, 5502 { 5503 "input": "https://[0:1.00.0.0.0]", 5504 "base": "about:blank", 5505 "failure": true 5506 }, 5507 { 5508 "input": "https://[0:1.290.0.0.0]", 5509 "base": "about:blank", 5510 "failure": true 5511 }, 5512 { 5513 "input": "https://[0:1.23.23]", 5514 "base": "about:blank", 5515 "failure": true 5516 }, 5517 "# Empty host", 5518 { 5519 "input": "http://?", 5520 "base": "about:blank", 5521 "failure": true 5522 }, 5523 { 5524 "input": "http://#", 5525 "base": "about:blank", 5526 "failure": true 5527 }, 5528 "Port overflow (2^32 + 81)", 5529 { 5530 "input": "http://f:4294967377/c", 5531 "base": "http://example.org/", 5532 "failure": true 5533 }, 5534 "Port overflow (2^64 + 81)", 5535 { 5536 "input": "http://f:18446744073709551697/c", 5537 "base": "http://example.org/", 5538 "failure": true 5539 }, 5540 "Port overflow (2^128 + 81)", 5541 { 5542 "input": "http://f:340282366920938463463374607431768211537/c", 5543 "base": "http://example.org/", 5544 "failure": true 5545 }, 5546 "# Non-special-URL path tests", 5547 { 5548 "input": "///", 5549 "base": "sc://x/", 5550 "href": "sc:///", 5551 "protocol": "sc:", 5552 "username": "", 5553 "password": "", 5554 "host": "", 5555 "hostname": "", 5556 "port": "", 5557 "pathname": "/", 5558 "search": "", 5559 "hash": "" 5560 }, 5561 { 5562 "input": "tftp://foobar.com/someconfig;mode=netascii", 5563 "base": "about:blank", 5564 "href": "tftp://foobar.com/someconfig;mode=netascii", 5565 "origin": "null", 5566 "protocol": "tftp:", 5567 "username": "", 5568 "password": "", 5569 "host": "foobar.com", 5570 "hostname": "foobar.com", 5571 "port": "", 5572 "pathname": "/someconfig;mode=netascii", 5573 "search": "", 5574 "hash": "" 5575 }, 5576 { 5577 "input": "telnet://user:pass@foobar.com:23/", 5578 "base": "about:blank", 5579 "href": "telnet://user:pass@foobar.com:23/", 5580 "origin": "null", 5581 "protocol": "telnet:", 5582 "username": "user", 5583 "password": "pass", 5584 "host": "foobar.com:23", 5585 "hostname": "foobar.com", 5586 "port": "23", 5587 "pathname": "/", 5588 "search": "", 5589 "hash": "" 5590 }, 5591 { 5592 "input": "ut2004://10.10.10.10:7777/Index.ut2", 5593 "base": "about:blank", 5594 "href": "ut2004://10.10.10.10:7777/Index.ut2", 5595 "origin": "null", 5596 "protocol": "ut2004:", 5597 "username": "", 5598 "password": "", 5599 "host": "10.10.10.10:7777", 5600 "hostname": "10.10.10.10", 5601 "port": "7777", 5602 "pathname": "/Index.ut2", 5603 "search": "", 5604 "hash": "" 5605 }, 5606 { 5607 "input": "redis://foo:bar@somehost:6379/0?baz=bam&qux=baz", 5608 "base": "about:blank", 5609 "href": "redis://foo:bar@somehost:6379/0?baz=bam&qux=baz", 5610 "origin": "null", 5611 "protocol": "redis:", 5612 "username": "foo", 5613 "password": "bar", 5614 "host": "somehost:6379", 5615 "hostname": "somehost", 5616 "port": "6379", 5617 "pathname": "/0", 5618 "search": "?baz=bam&qux=baz", 5619 "hash": "" 5620 }, 5621 { 5622 "input": "rsync://foo@host:911/sup", 5623 "base": "about:blank", 5624 "href": "rsync://foo@host:911/sup", 5625 "origin": "null", 5626 "protocol": "rsync:", 5627 "username": "foo", 5628 "password": "", 5629 "host": "host:911", 5630 "hostname": "host", 5631 "port": "911", 5632 "pathname": "/sup", 5633 "search": "", 5634 "hash": "" 5635 }, 5636 { 5637 "input": "git://github.com/foo/bar.git", 5638 "base": "about:blank", 5639 "href": "git://github.com/foo/bar.git", 5640 "origin": "null", 5641 "protocol": "git:", 5642 "username": "", 5643 "password": "", 5644 "host": "github.com", 5645 "hostname": "github.com", 5646 "port": "", 5647 "pathname": "/foo/bar.git", 5648 "search": "", 5649 "hash": "" 5650 }, 5651 { 5652 "input": "irc://myserver.com:6999/channel?passwd", 5653 "base": "about:blank", 5654 "href": "irc://myserver.com:6999/channel?passwd", 5655 "origin": "null", 5656 "protocol": "irc:", 5657 "username": "", 5658 "password": "", 5659 "host": "myserver.com:6999", 5660 "hostname": "myserver.com", 5661 "port": "6999", 5662 "pathname": "/channel", 5663 "search": "?passwd", 5664 "hash": "" 5665 }, 5666 { 5667 "input": "dns://fw.example.org:9999/foo.bar.org?type=TXT", 5668 "base": "about:blank", 5669 "href": "dns://fw.example.org:9999/foo.bar.org?type=TXT", 5670 "origin": "null", 5671 "protocol": "dns:", 5672 "username": "", 5673 "password": "", 5674 "host": "fw.example.org:9999", 5675 "hostname": "fw.example.org", 5676 "port": "9999", 5677 "pathname": "/foo.bar.org", 5678 "search": "?type=TXT", 5679 "hash": "" 5680 }, 5681 { 5682 "input": "ldap://localhost:389/ou=People,o=JNDITutorial", 5683 "base": "about:blank", 5684 "href": "ldap://localhost:389/ou=People,o=JNDITutorial", 5685 "origin": "null", 5686 "protocol": "ldap:", 5687 "username": "", 5688 "password": "", 5689 "host": "localhost:389", 5690 "hostname": "localhost", 5691 "port": "389", 5692 "pathname": "/ou=People,o=JNDITutorial", 5693 "search": "", 5694 "hash": "" 5695 }, 5696 { 5697 "input": "git+https://github.com/foo/bar", 5698 "base": "about:blank", 5699 "href": "git+https://github.com/foo/bar", 5700 "origin": "null", 5701 "protocol": "git+https:", 5702 "username": "", 5703 "password": "", 5704 "host": "github.com", 5705 "hostname": "github.com", 5706 "port": "", 5707 "pathname": "/foo/bar", 5708 "search": "", 5709 "hash": "" 5710 }, 5711 { 5712 "input": "urn:ietf:rfc:2648", 5713 "base": "about:blank", 5714 "href": "urn:ietf:rfc:2648", 5715 "origin": "null", 5716 "protocol": "urn:", 5717 "username": "", 5718 "password": "", 5719 "host": "", 5720 "hostname": "", 5721 "port": "", 5722 "pathname": "ietf:rfc:2648", 5723 "search": "", 5724 "hash": "" 5725 }, 5726 { 5727 "input": "tag:joe@example.org,2001:foo/bar", 5728 "base": "about:blank", 5729 "href": "tag:joe@example.org,2001:foo/bar", 5730 "origin": "null", 5731 "protocol": "tag:", 5732 "username": "", 5733 "password": "", 5734 "host": "", 5735 "hostname": "", 5736 "port": "", 5737 "pathname": "joe@example.org,2001:foo/bar", 5738 "search": "", 5739 "hash": "" 5740 }, 5741 "# percent encoded hosts in non-special-URLs", 5742 { 5743 "input": "non-special://%E2%80%A0/", 5744 "base": "about:blank", 5745 "href": "non-special://%E2%80%A0/", 5746 "protocol": "non-special:", 5747 "username": "", 5748 "password": "", 5749 "host": "%E2%80%A0", 5750 "hostname": "%E2%80%A0", 5751 "port": "", 5752 "pathname": "/", 5753 "search": "", 5754 "hash": "" 5755 }, 5756 { 5757 "input": "non-special://H%4fSt/path", 5758 "base": "about:blank", 5759 "href": "non-special://H%4fSt/path", 5760 "protocol": "non-special:", 5761 "username": "", 5762 "password": "", 5763 "host": "H%4fSt", 5764 "hostname": "H%4fSt", 5765 "port": "", 5766 "pathname": "/path", 5767 "search": "", 5768 "hash": "" 5769 }, 5770 "# IPv6 in non-special-URLs", 5771 { 5772 "input": "non-special://[1:2:0:0:5:0:0:0]/", 5773 "base": "about:blank", 5774 "href": "non-special://[1:2:0:0:5::]/", 5775 "protocol": "non-special:", 5776 "username": "", 5777 "password": "", 5778 "host": "[1:2:0:0:5::]", 5779 "hostname": "[1:2:0:0:5::]", 5780 "port": "", 5781 "pathname": "/", 5782 "search": "", 5783 "hash": "" 5784 }, 5785 { 5786 "input": "non-special://[1:2:0:0:0:0:0:3]/", 5787 "base": "about:blank", 5788 "href": "non-special://[1:2::3]/", 5789 "protocol": "non-special:", 5790 "username": "", 5791 "password": "", 5792 "host": "[1:2::3]", 5793 "hostname": "[1:2::3]", 5794 "port": "", 5795 "pathname": "/", 5796 "search": "", 5797 "hash": "" 5798 }, 5799 { 5800 "input": "non-special://[1:2::3]:80/", 5801 "base": "about:blank", 5802 "href": "non-special://[1:2::3]:80/", 5803 "protocol": "non-special:", 5804 "username": "", 5805 "password": "", 5806 "host": "[1:2::3]:80", 5807 "hostname": "[1:2::3]", 5808 "port": "80", 5809 "pathname": "/", 5810 "search": "", 5811 "hash": "" 5812 }, 5813 { 5814 "input": "non-special://[:80/", 5815 "base": "about:blank", 5816 "failure": true 5817 }, 5818 { 5819 "input": "blob:https://example.com:443/", 5820 "base": "about:blank", 5821 "href": "blob:https://example.com:443/", 5822 "protocol": "blob:", 5823 "username": "", 5824 "password": "", 5825 "host": "", 5826 "hostname": "", 5827 "port": "", 5828 "pathname": "https://example.com:443/", 5829 "search": "", 5830 "hash": "" 5831 }, 5832 { 5833 "input": "blob:d3958f5c-0777-0845-9dcf-2cb28783acaf", 5834 "base": "about:blank", 5835 "href": "blob:d3958f5c-0777-0845-9dcf-2cb28783acaf", 5836 "protocol": "blob:", 5837 "username": "", 5838 "password": "", 5839 "host": "", 5840 "hostname": "", 5841 "port": "", 5842 "pathname": "d3958f5c-0777-0845-9dcf-2cb28783acaf", 5843 "search": "", 5844 "hash": "" 5845 }, 5846 "Invalid IPv4 radix digits", 5847 { 5848 "input": "http://0177.0.0.0189", 5849 "base": "about:blank", 5850 "href": "http://0177.0.0.0189/", 5851 "protocol": "http:", 5852 "username": "", 5853 "password": "", 5854 "host": "0177.0.0.0189", 5855 "hostname": "0177.0.0.0189", 5856 "port": "", 5857 "pathname": "/", 5858 "search": "", 5859 "hash": "" 5860 }, 5861 { 5862 "input": "http://0x7f.0.0.0x7g", 5863 "base": "about:blank", 5864 "href": "http://0x7f.0.0.0x7g/", 5865 "protocol": "http:", 5866 "username": "", 5867 "password": "", 5868 "host": "0x7f.0.0.0x7g", 5869 "hostname": "0x7f.0.0.0x7g", 5870 "port": "", 5871 "pathname": "/", 5872 "search": "", 5873 "hash": "" 5874 }, 5875 { 5876 "input": "http://0X7F.0.0.0X7G", 5877 "base": "about:blank", 5878 "href": "http://0x7f.0.0.0x7g/", 5879 "protocol": "http:", 5880 "username": "", 5881 "password": "", 5882 "host": "0x7f.0.0.0x7g", 5883 "hostname": "0x7f.0.0.0x7g", 5884 "port": "", 5885 "pathname": "/", 5886 "search": "", 5887 "hash": "" 5888 }, 5889 "Invalid IPv4 portion of IPv6 address", 5890 { 5891 "input": "http://[::127.0.0.0.1]", 5892 "base": "about:blank", 5893 "failure": true 5894 }, 5895 "Uncompressed IPv6 addresses with 0", 5896 { 5897 "input": "http://[0:1:0:1:0:1:0:1]", 5898 "base": "about:blank", 5899 "href": "http://[0:1:0:1:0:1:0:1]/", 5900 "protocol": "http:", 5901 "username": "", 5902 "password": "", 5903 "host": "[0:1:0:1:0:1:0:1]", 5904 "hostname": "[0:1:0:1:0:1:0:1]", 5905 "port": "", 5906 "pathname": "/", 5907 "search": "", 5908 "hash": "" 5909 }, 5910 { 5911 "input": "http://[1:0:1:0:1:0:1:0]", 5912 "base": "about:blank", 5913 "href": "http://[1:0:1:0:1:0:1:0]/", 5914 "protocol": "http:", 5915 "username": "", 5916 "password": "", 5917 "host": "[1:0:1:0:1:0:1:0]", 5918 "hostname": "[1:0:1:0:1:0:1:0]", 5919 "port": "", 5920 "pathname": "/", 5921 "search": "", 5922 "hash": "" 5923 }, 5924 "Percent-encoded query and fragment", 5925 { 5926 "input": "http://example.org/test?\u0022", 5927 "base": "about:blank", 5928 "href": "http://example.org/test?%22", 5929 "protocol": "http:", 5930 "username": "", 5931 "password": "", 5932 "host": "example.org", 5933 "hostname": "example.org", 5934 "port": "", 5935 "pathname": "/test", 5936 "search": "?%22", 5937 "hash": "" 5938 }, 5939 { 5940 "input": "http://example.org/test?\u0023", 5941 "base": "about:blank", 5942 "href": "http://example.org/test?#", 5943 "protocol": "http:", 5944 "username": "", 5945 "password": "", 5946 "host": "example.org", 5947 "hostname": "example.org", 5948 "port": "", 5949 "pathname": "/test", 5950 "search": "", 5951 "hash": "" 5952 }, 5953 { 5954 "input": "http://example.org/test?\u003C", 5955 "base": "about:blank", 5956 "href": "http://example.org/test?%3C", 5957 "protocol": "http:", 5958 "username": "", 5959 "password": "", 5960 "host": "example.org", 5961 "hostname": "example.org", 5962 "port": "", 5963 "pathname": "/test", 5964 "search": "?%3C", 5965 "hash": "" 5966 }, 5967 { 5968 "input": "http://example.org/test?\u003E", 5969 "base": "about:blank", 5970 "href": "http://example.org/test?%3E", 5971 "protocol": "http:", 5972 "username": "", 5973 "password": "", 5974 "host": "example.org", 5975 "hostname": "example.org", 5976 "port": "", 5977 "pathname": "/test", 5978 "search": "?%3E", 5979 "hash": "" 5980 }, 5981 { 5982 "input": "http://example.org/test?\u2323", 5983 "base": "about:blank", 5984 "href": "http://example.org/test?%E2%8C%A3", 5985 "protocol": "http:", 5986 "username": "", 5987 "password": "", 5988 "host": "example.org", 5989 "hostname": "example.org", 5990 "port": "", 5991 "pathname": "/test", 5992 "search": "?%E2%8C%A3", 5993 "hash": "" 5994 }, 5995 { 5996 "input": "http://example.org/test?%23%23", 5997 "base": "about:blank", 5998 "href": "http://example.org/test?%23%23", 5999 "protocol": "http:", 6000 "username": "", 6001 "password": "", 6002 "host": "example.org", 6003 "hostname": "example.org", 6004 "port": "", 6005 "pathname": "/test", 6006 "search": "?%23%23", 6007 "hash": "" 6008 }, 6009 { 6010 "input": "http://example.org/test?%GH", 6011 "base": "about:blank", 6012 "href": "http://example.org/test?%GH", 6013 "protocol": "http:", 6014 "username": "", 6015 "password": "", 6016 "host": "example.org", 6017 "hostname": "example.org", 6018 "port": "", 6019 "pathname": "/test", 6020 "search": "?%GH", 6021 "hash": "" 6022 }, 6023 { 6024 "input": "http://example.org/test?a#%EF", 6025 "base": "about:blank", 6026 "href": "http://example.org/test?a#%EF", 6027 "protocol": "http:", 6028 "username": "", 6029 "password": "", 6030 "host": "example.org", 6031 "hostname": "example.org", 6032 "port": "", 6033 "pathname": "/test", 6034 "search": "?a", 6035 "hash": "#%EF" 6036 }, 6037 { 6038 "input": "http://example.org/test?a#%GH", 6039 "base": "about:blank", 6040 "href": "http://example.org/test?a#%GH", 6041 "protocol": "http:", 6042 "username": "", 6043 "password": "", 6044 "host": "example.org", 6045 "hostname": "example.org", 6046 "port": "", 6047 "pathname": "/test", 6048 "search": "?a", 6049 "hash": "#%GH" 6050 }, 6051 "Bad bases", 6052 { 6053 "input": "test-a.html", 6054 "base": "a", 6055 "failure": true 6056 }, 6057 { 6058 "input": "test-a-slash.html", 6059 "base": "a/", 6060 "failure": true 6061 }, 6062 { 6063 "input": "test-a-slash-slash.html", 6064 "base": "a//", 6065 "failure": true 6066 }, 6067 { 6068 "input": "test-a-colon.html", 6069 "base": "a:", 6070 "failure": true 6071 }, 6072 { 6073 "input": "test-a-colon-slash.html", 6074 "base": "a:/", 6075 "href": "a:/test-a-colon-slash.html", 6076 "protocol": "a:", 6077 "username": "", 6078 "password": "", 6079 "host": "", 6080 "hostname": "", 6081 "port": "", 6082 "pathname": "/test-a-colon-slash.html", 6083 "search": "", 6084 "hash": "" 6085 }, 6086 { 6087 "input": "test-a-colon-slash-slash.html", 6088 "base": "a://", 6089 "href": "a:///test-a-colon-slash-slash.html", 6090 "protocol": "a:", 6091 "username": "", 6092 "password": "", 6093 "host": "", 6094 "hostname": "", 6095 "port": "", 6096 "pathname": "/test-a-colon-slash-slash.html", 6097 "search": "", 6098 "hash": "" 6099 }, 6100 { 6101 "input": "test-a-colon-b.html", 6102 "base": "a:b", 6103 "failure": true 6104 }, 6105 { 6106 "input": "test-a-colon-slash-b.html", 6107 "base": "a:/b", 6108 "href": "a:/test-a-colon-slash-b.html", 6109 "protocol": "a:", 6110 "username": "", 6111 "password": "", 6112 "host": "", 6113 "hostname": "", 6114 "port": "", 6115 "pathname": "/test-a-colon-slash-b.html", 6116 "search": "", 6117 "hash": "" 6118 }, 6119 { 6120 "input": "test-a-colon-slash-slash-b.html", 6121 "base": "a://b", 6122 "href": "a://b/test-a-colon-slash-slash-b.html", 6123 "protocol": "a:", 6124 "username": "", 6125 "password": "", 6126 "host": "b", 6127 "hostname": "b", 6128 "port": "", 6129 "pathname": "/test-a-colon-slash-slash-b.html", 6130 "search": "", 6131 "hash": "" 6132 }, 6133 "Null code point in fragment", 6134 { 6135 "input": "http://example.org/test?a#b\u0000c", 6136 "base": "about:blank", 6137 "href": "http://example.org/test?a#bc", 6138 "protocol": "http:", 6139 "username": "", 6140 "password": "", 6141 "host": "example.org", 6142 "hostname": "example.org", 6143 "port": "", 6144 "pathname": "/test", 6145 "search": "?a", 6146 "hash": "#bc" 6147 } 6148 ]