@@ -882,3 +882,81 @@ fn pop_if_empty_in_bounds() {
882
882
segments. pop_if_empty ( ) ;
883
883
segments. pop ( ) ;
884
884
}
885
+
886
+ #[ test]
887
+ fn test_slicing ( ) {
888
+ use url:: Position :: * ;
889
+
890
+ #[ derive( Default ) ]
891
+ struct ExpectedSlices < ' a > {
892
+ full : & ' a str ,
893
+ scheme : & ' a str ,
894
+ username : & ' a str ,
895
+ password : & ' a str ,
896
+ host : & ' a str ,
897
+ port : & ' a str ,
898
+ path : & ' a str ,
899
+ query : & ' a str ,
900
+ fragment : & ' a str ,
901
+ }
902
+
903
+ let data = [
904
+ ExpectedSlices {
905
+ full : "https://user:pass@domain.com:9742/path/file.ext?key=val&key2=val2#fragment" ,
906
+ scheme : "https" ,
907
+ username : "user" ,
908
+ password : "pass" ,
909
+ host : "domain.com" ,
910
+ port : "9742" ,
911
+ path : "/path/file.ext" ,
912
+ query : "key=val&key2=val2" ,
913
+ fragment : "fragment" ,
914
+ } ,
915
+ ExpectedSlices {
916
+ full : "https://domain.com:9742/path/file.ext#fragment" ,
917
+ scheme : "https" ,
918
+ host : "domain.com" ,
919
+ port : "9742" ,
920
+ path : "/path/file.ext" ,
921
+ fragment : "fragment" ,
922
+ ..Default :: default ( )
923
+ } ,
924
+ ExpectedSlices {
925
+ full : "https://domain.com:9742/path/file.ext" ,
926
+ scheme : "https" ,
927
+ host : "domain.com" ,
928
+ port : "9742" ,
929
+ path : "/path/file.ext" ,
930
+ ..Default :: default ( )
931
+ } ,
932
+ ExpectedSlices {
933
+ full : "blob:blob-info" ,
934
+ scheme : "blob" ,
935
+ path : "blob-info" ,
936
+ ..Default :: default ( )
937
+ } ,
938
+ ] ;
939
+
940
+ for expected_slices in & data {
941
+ let url = Url :: parse ( expected_slices. full ) . unwrap ( ) ;
942
+ assert_eq ! ( & url[ ..] , expected_slices. full) ;
943
+ assert_eq ! ( & url[ BeforeScheme ..AfterScheme ] , expected_slices. scheme) ;
944
+ assert_eq ! (
945
+ & url[ BeforeUsername ..AfterUsername ] ,
946
+ expected_slices. username
947
+ ) ;
948
+ assert_eq ! (
949
+ & url[ BeforePassword ..AfterPassword ] ,
950
+ expected_slices. password
951
+ ) ;
952
+ assert_eq ! ( & url[ BeforeHost ..AfterHost ] , expected_slices. host) ;
953
+ assert_eq ! ( & url[ BeforePort ..AfterPort ] , expected_slices. port) ;
954
+ assert_eq ! ( & url[ BeforePath ..AfterPath ] , expected_slices. path) ;
955
+ assert_eq ! ( & url[ BeforeQuery ..AfterQuery ] , expected_slices. query) ;
956
+ assert_eq ! (
957
+ & url[ BeforeFragment ..AfterFragment ] ,
958
+ expected_slices. fragment
959
+ ) ;
960
+ assert_eq ! ( & url[ ..AfterFragment ] , expected_slices. full) ;
961
+ }
962
+ }
0 commit comments