@@ -679,3 +679,81 @@ fn pop_if_empty_in_bounds() {
679
679
segments. pop_if_empty ( ) ;
680
680
segments. pop ( ) ;
681
681
}
682
+
683
+ #[ test]
684
+ fn test_slicing ( ) {
685
+ use url:: Position :: * ;
686
+
687
+ #[ derive( Default ) ]
688
+ struct ExpectedSlices < ' a > {
689
+ full : & ' a str ,
690
+ scheme : & ' a str ,
691
+ username : & ' a str ,
692
+ password : & ' a str ,
693
+ host : & ' a str ,
694
+ port : & ' a str ,
695
+ path : & ' a str ,
696
+ query : & ' a str ,
697
+ fragment : & ' a str ,
698
+ }
699
+
700
+ let data = [
701
+ ExpectedSlices {
702
+ full : "https://user:pass@domain.com:9742/path/file.ext?key=val&key2=val2#fragment" ,
703
+ scheme : "https" ,
704
+ username : "user" ,
705
+ password : "pass" ,
706
+ host : "domain.com" ,
707
+ port : "9742" ,
708
+ path : "/path/file.ext" ,
709
+ query : "key=val&key2=val2" ,
710
+ fragment : "fragment" ,
711
+ } ,
712
+ ExpectedSlices {
713
+ full : "https://domain.com:9742/path/file.ext#fragment" ,
714
+ scheme : "https" ,
715
+ host : "domain.com" ,
716
+ port : "9742" ,
717
+ path : "/path/file.ext" ,
718
+ fragment : "fragment" ,
719
+ ..Default :: default ( )
720
+ } ,
721
+ ExpectedSlices {
722
+ full : "https://domain.com:9742/path/file.ext" ,
723
+ scheme : "https" ,
724
+ host : "domain.com" ,
725
+ port : "9742" ,
726
+ path : "/path/file.ext" ,
727
+ ..Default :: default ( )
728
+ } ,
729
+ ExpectedSlices {
730
+ full : "blob:blob-info" ,
731
+ scheme : "blob" ,
732
+ path : "blob-info" ,
733
+ ..Default :: default ( )
734
+ } ,
735
+ ] ;
736
+
737
+ for expected_slices in & data {
738
+ let url = Url :: parse ( expected_slices. full ) . unwrap ( ) ;
739
+ assert_eq ! ( & url[ ..] , expected_slices. full) ;
740
+ assert_eq ! ( & url[ BeforeScheme ..AfterScheme ] , expected_slices. scheme) ;
741
+ assert_eq ! (
742
+ & url[ BeforeUsername ..AfterUsername ] ,
743
+ expected_slices. username
744
+ ) ;
745
+ assert_eq ! (
746
+ & url[ BeforePassword ..AfterPassword ] ,
747
+ expected_slices. password
748
+ ) ;
749
+ assert_eq ! ( & url[ BeforeHost ..AfterHost ] , expected_slices. host) ;
750
+ assert_eq ! ( & url[ BeforePort ..AfterPort ] , expected_slices. port) ;
751
+ assert_eq ! ( & url[ BeforePath ..AfterPath ] , expected_slices. path) ;
752
+ assert_eq ! ( & url[ BeforeQuery ..AfterQuery ] , expected_slices. query) ;
753
+ assert_eq ! (
754
+ & url[ BeforeFragment ..AfterFragment ] ,
755
+ expected_slices. fragment
756
+ ) ;
757
+ assert_eq ! ( & url[ ..AfterFragment ] , expected_slices. full) ;
758
+ }
759
+ }
0 commit comments