@@ -882,3 +882,81 @@ fn pop_if_empty_in_bounds() {
882882 segments. pop_if_empty ( ) ;
883883 segments. pop ( ) ;
884884}
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