melib/percent_encoding: remove doctests, add tests module
Run cargo lints / Lint on ${{ matrix.build }} (linux-amd64, ubuntu-latest, stable, x86_64-unknown-linux-gnu) (pull_request) Successful in 9m37s Details
Run Tests / Test on ${{ matrix.build }} (linux-amd64, ubuntu-latest, stable, x86_64-unknown-linux-gnu) (pull_request) Successful in 15m34s Details

Signed-off-by: Manos Pitsidianakis <manos@pitsidianak.is>
pull/340/head
Manos Pitsidianakis 2024-01-04 10:41:00 +02:00
parent ddab3179c2
commit 7952006870
Signed by: Manos Pitsidianakis
GPG Key ID: 7729C7707F7E09D0
1 changed files with 71 additions and 2 deletions

View File

@ -29,7 +29,7 @@
//!
//! # Examples
//!
//! ```rust
//! ```rust,no_run
//! use melib::utils::percent_encoding::{
//! percent_decode_str, utf8_percent_encode, AsciiSet, CONTROLS,
//! };
@ -57,7 +57,7 @@ use std::{borrow::Cow, mem, slice, str};
///
/// Use the `add` method of an existing set to define a new set. For example:
///
/// ```rust
/// ```rust,no_run
/// use melib::utils::percent_encoding::{AsciiSet, CONTROLS};
///
/// /// https://url.spec.whatwg.org/#fragment-percent-encode-set
@ -493,3 +493,72 @@ fn decode_utf8_lossy(input: Cow<'_, [u8]>) -> Cow<'_, str> {
}
}
}
#[cfg(test)]
mod tests {
use super::*;
/// https://url.spec.whatwg.org/#fragment-percent-encode-set
const FRAGMENT: &AsciiSet = &NON_ALPHANUMERIC
.add(b' ')
.add(b'"')
.add(b'<')
.add(b'>')
.add(b'`');
#[test]
fn test_url_percent() {
assert_eq!(
utf8_percent_encode("foo <bar>", FRAGMENT).to_string(),
"foo%20%3Cbar%3E"
);
assert_eq!(
utf8_percent_encode("Betty's favorite language is Français", FRAGMENT).to_string(),
"Betty%27s%20favorite%20language%20is%20Fran%C3%A7ais"
);
// Roundtrip
assert_eq!(
percent_decode_str(
&utf8_percent_encode("Betty's favorite language is Français", FRAGMENT).to_string()
)
.decode_utf8()
.unwrap(),
"Betty's favorite language is Français"
);
assert_eq!(
percent_decode_str("foo%20%3Cbar%3E").decode_utf8().unwrap(),
"foo <bar>"
);
assert_eq!(
utf8_percent_encode("(45 * 2) + 90", FRAGMENT).to_string(),
"%2845%20%2A%202%29%20%2B%2090"
);
assert_eq!(
utf8_percent_encode("`console.log(value); if (!foo) { _bar(): }`", FRAGMENT)
.to_string(),
"%60console%2Elog%28value%29%3B%20if%20%28%21foo%29%20%7B%20%5Fbar%28%29%3A%20%7D%60"
);
assert_eq!(
utf8_percent_encode("\"it will all be alright !\", he said.", FRAGMENT).to_string(),
"%22it%20will%20all%20be%20alright%20%21%22%2C%20he%20said%2E"
);
assert_eq!(
percent_decode_str("a%C3%A7%C3%BAcar")
.decode_utf8()
.unwrap(),
"açúcar"
);
assert_eq!(
percent_decode_str("tor%C3%A7ut").decode_utf8().unwrap(),
"torçut"
);
assert_eq!(
percent_decode_str("JavaScript_%D1%88%D0%B5%D0%BB%D0%BB%D1%8B")
.decode_utf8()
.unwrap(),
"JavaScript_шеллы"
);
}
}