Skip to content

Commit 77fb472

Browse files
authored
Merge pull request #703 from BramBonne/slicing-tests
Increase slicing test coverage
2 parents ea2342e + 912ddd1 commit 77fb472

File tree

1 file changed

+78
-0
lines changed

1 file changed

+78
-0
lines changed

url/tests/unit.rs

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)