Skip to content

Commit 912ddd1

Browse files
committed
Increase slicing test coverage
Add unit tests for all `url::Position` combinations. New test coverage: || src/slicing.rs: 53/58 +56.896551724137936%
1 parent 837538c commit 912ddd1

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
@@ -679,3 +679,81 @@ fn pop_if_empty_in_bounds() {
679679
segments.pop_if_empty();
680680
segments.pop();
681681
}
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

Comments
 (0)