mirror of
https://github.com/storytold/pdfcraft.git
synced 2026-10-30 13:08:48 -06:00
test(annot): cover 7-bit ASCII percent-encoding of link /URI
Regression test for the /URI percent-encoding fix: round-trips a non-ASCII URL and an already-escaped URL through save/reload and asserts the stored URIs are pure ASCII with existing escapes preserved. Signed-off-by: Charan Rathore <180254320+charan-rathore@users.noreply.github.com>
This commit is contained in:
@@ -588,6 +588,25 @@ fn links_are_added_edited_listed_and_removed() {
|
||||
assert!(links::add(&mut doc, 0, [0.0, 0.0, 1.0, 1.0], &LinkAction::Page(0), &LinkStyle::default()).is_err(), "too small");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn link_uri_is_percent_encoded_to_7_bit_ascii() {
|
||||
use crate::links::{self, LinkAction, LinkStyle};
|
||||
let mut doc = fixture();
|
||||
for url in ["https://example.com/ação", "https://example.com/a%20b"] {
|
||||
links::add(&mut doc, 0, [10.0, 10.0, 110.0, 30.0], &LinkAction::Uri(url.into()), &LinkStyle::default()).unwrap();
|
||||
}
|
||||
let doc = reopen(&doc);
|
||||
let urls: Vec<String> = links::list(&doc)
|
||||
.into_iter()
|
||||
.filter_map(|link| match link.action {
|
||||
LinkAction::Uri(url) => Some(url),
|
||||
_ => None,
|
||||
})
|
||||
.collect();
|
||||
assert_eq!(urls, ["https://example.com/a%C3%A7%C3%A3o", "https://example.com/a%20b"]);
|
||||
assert!(urls.iter().all(|url| url.is_ascii()));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn link_edit_rejects_non_finite_and_overflowed_rectangles_without_mutating_the_pdf() {
|
||||
use crate::links::{self, LinkAction, LinkStyle};
|
||||
@@ -1307,4 +1326,4 @@ fn text_box_font_size_changes_the_da_and_grows_the_box() {
|
||||
assert!(set_font_size(&mut doc, 0, i, 12.0, &meta("")).is_err());
|
||||
assert_eq!(props(&doc, 0, i).unwrap().font_size, None);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user