@@ -520,6 +520,115 @@ defmodule URITest do
520
520
end
521
521
end
522
522
523
+ test "merge/2 (with W3C examples)" do
524
+ # These examples are from the W3C JSON-LD test suite:
525
+ #
526
+ # https://w3c.github.io/json-ld-api/tests/toRdf-manifest#t0124
527
+ # https://w3c.github.io/json-ld-api/tests/toRdf-manifest#t0125
528
+
529
+ base1 = "http://a/bb/ccc/."
530
+
531
+ rel_and_result1 = % {
532
+ "g:h" => "g:h" ,
533
+ "g" => "http://a/bb/ccc/g" ,
534
+ "./g" => "http://a/bb/ccc/g" ,
535
+ "g/" => "http://a/bb/ccc/g/" ,
536
+ "/g" => "http://a/g" ,
537
+ "//g" => "http://g" ,
538
+ "?y" => "http://a/bb/ccc/.?y" ,
539
+ "g?y" => "http://a/bb/ccc/g?y" ,
540
+ "#s" => "http://a/bb/ccc/.#s" ,
541
+ "g#s" => "http://a/bb/ccc/g#s" ,
542
+ "g?y#s" => "http://a/bb/ccc/g?y#s" ,
543
+ ";x" => "http://a/bb/ccc/;x" ,
544
+ "g;x" => "http://a/bb/ccc/g;x" ,
545
+ "g;x?y#s" => "http://a/bb/ccc/g;x?y#s" ,
546
+ "" => "http://a/bb/ccc/." ,
547
+ "." => "http://a/bb/ccc/" ,
548
+ "./" => "http://a/bb/ccc/" ,
549
+ ".." => "http://a/bb/" ,
550
+ "../" => "http://a/bb/" ,
551
+ "../g" => "http://a/bb/g" ,
552
+ "../.." => "http://a/" ,
553
+ "../../" => "http://a/" ,
554
+ "../../g" => "http://a/g" ,
555
+ "../../../g" => "http://a/g" ,
556
+ "../../../../g" => "http://a/g" ,
557
+ "/./g" => "http://a/g" ,
558
+ "/../g" => "http://a/g" ,
559
+ "g." => "http://a/bb/ccc/g." ,
560
+ ".g" => "http://a/bb/ccc/.g" ,
561
+ "g.." => "http://a/bb/ccc/g.." ,
562
+ "..g" => "http://a/bb/ccc/..g" ,
563
+ "./../g" => "http://a/bb/g" ,
564
+ "./g/." => "http://a/bb/ccc/g/" ,
565
+ "g/./h" => "http://a/bb/ccc/g/h" ,
566
+ "g/../h" => "http://a/bb/ccc/h" ,
567
+ "g;x=1/./y" => "http://a/bb/ccc/g;x=1/y" ,
568
+ "g;x=1/../y" => "http://a/bb/ccc/y" ,
569
+ "g?y/./x" => "http://a/bb/ccc/g?y/./x" ,
570
+ "g?y/../x" => "http://a/bb/ccc/g?y/../x" ,
571
+ "g#s/./x" => "http://a/bb/ccc/g#s/./x" ,
572
+ "g#s/../x" => "http://a/bb/ccc/g#s/../x" ,
573
+ "http:g" => "http:g"
574
+ }
575
+
576
+ for { rel , result } <- rel_and_result1 do
577
+ assert URI . merge ( base1 , rel ) |> URI . to_string ( ) == result
578
+ end
579
+
580
+ base2 = "http://a/bb/ccc/.."
581
+
582
+ rel_and_result2 = % {
583
+ "g:h" => "g:h" ,
584
+ "g" => "http://a/bb/ccc/g" ,
585
+ "./g" => "http://a/bb/ccc/g" ,
586
+ "g/" => "http://a/bb/ccc/g/" ,
587
+ "/g" => "http://a/g" ,
588
+ "//g" => "http://g" ,
589
+ "?y" => "http://a/bb/ccc/..?y" ,
590
+ "g?y" => "http://a/bb/ccc/g?y" ,
591
+ "#s" => "http://a/bb/ccc/..#s" ,
592
+ "g#s" => "http://a/bb/ccc/g#s" ,
593
+ "g?y#s" => "http://a/bb/ccc/g?y#s" ,
594
+ ";x" => "http://a/bb/ccc/;x" ,
595
+ "g;x" => "http://a/bb/ccc/g;x" ,
596
+ "g;x?y#s" => "http://a/bb/ccc/g;x?y#s" ,
597
+ "" => "http://a/bb/ccc/.." ,
598
+ "." => "http://a/bb/ccc/" ,
599
+ "./" => "http://a/bb/ccc/" ,
600
+ ".." => "http://a/bb/" ,
601
+ "../" => "http://a/bb/" ,
602
+ "../g" => "http://a/bb/g" ,
603
+ "../.." => "http://a/" ,
604
+ "../../" => "http://a/" ,
605
+ "../../g" => "http://a/g" ,
606
+ "../../../g" => "http://a/g" ,
607
+ "../../../../g" => "http://a/g" ,
608
+ "/./g" => "http://a/g" ,
609
+ "/../g" => "http://a/g" ,
610
+ "g." => "http://a/bb/ccc/g." ,
611
+ ".g" => "http://a/bb/ccc/.g" ,
612
+ "g.." => "http://a/bb/ccc/g.." ,
613
+ "..g" => "http://a/bb/ccc/..g" ,
614
+ "./../g" => "http://a/bb/g" ,
615
+ "./g/." => "http://a/bb/ccc/g/" ,
616
+ "g/./h" => "http://a/bb/ccc/g/h" ,
617
+ "g/../h" => "http://a/bb/ccc/h" ,
618
+ "g;x=1/./y" => "http://a/bb/ccc/g;x=1/y" ,
619
+ "g;x=1/../y" => "http://a/bb/ccc/y" ,
620
+ "g?y/./x" => "http://a/bb/ccc/g?y/./x" ,
621
+ "g?y/../x" => "http://a/bb/ccc/g?y/../x" ,
622
+ "g#s/./x" => "http://a/bb/ccc/g#s/./x" ,
623
+ "g#s/../x" => "http://a/bb/ccc/g#s/../x" ,
624
+ "http:g" => "http:g"
625
+ }
626
+
627
+ for { rel , result } <- rel_and_result2 do
628
+ assert URI . merge ( base2 , rel ) |> URI . to_string ( ) == result
629
+ end
630
+ end
631
+
523
632
test "append_query/2" do
524
633
assert URI . append_query ( URI . parse ( "http://example.com/?x=1" ) , "x=2" ) . query == "x=1&x=2"
525
634
assert URI . append_query ( URI . parse ( "http://example.com/?x=1&" ) , "x=2" ) . query == "x=1&x=2"
0 commit comments