summaryrefslogtreecommitdiffstats
path: root/third_party/rust/unic-langid-impl/tests/fixtures.rs
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 00:47:55 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 00:47:55 +0000
commit26a029d407be480d791972afb5975cf62c9360a6 (patch)
treef435a8308119effd964b339f76abb83a57c29483 /third_party/rust/unic-langid-impl/tests/fixtures.rs
parentInitial commit. (diff)
downloadfirefox-26a029d407be480d791972afb5975cf62c9360a6.tar.xz
firefox-26a029d407be480d791972afb5975cf62c9360a6.zip
Adding upstream version 124.0.1.upstream/124.0.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'third_party/rust/unic-langid-impl/tests/fixtures.rs')
-rw-r--r--third_party/rust/unic-langid-impl/tests/fixtures.rs75
1 files changed, 75 insertions, 0 deletions
diff --git a/third_party/rust/unic-langid-impl/tests/fixtures.rs b/third_party/rust/unic-langid-impl/tests/fixtures.rs
new file mode 100644
index 0000000000..27cd29b33a
--- /dev/null
+++ b/third_party/rust/unic-langid-impl/tests/fixtures.rs
@@ -0,0 +1,75 @@
+use std::convert::TryInto;
+use std::error::Error;
+use std::fs::File;
+use std::path::Path;
+
+use unic_langid_impl::LanguageIdentifier;
+
+use serde::{Deserialize, Serialize};
+
+#[derive(Serialize, Deserialize)]
+struct LangIdTestInputData {
+ string: String,
+}
+
+#[derive(Serialize, Deserialize, Debug)]
+struct LangIdTestOutputObject {
+ language: Option<String>,
+ script: Option<String>,
+ region: Option<String>,
+ #[serde(default)]
+ variants: Vec<String>,
+}
+
+#[derive(Serialize, Deserialize, Debug)]
+#[serde(untagged)]
+enum LangIdTestOutput {
+ String(String),
+ Object(LangIdTestOutputObject),
+}
+
+#[derive(Serialize, Deserialize)]
+struct LangIdTestSet {
+ input: LangIdTestInputData,
+ output: LangIdTestOutput,
+}
+
+fn read_langid_testsets<P: AsRef<Path>>(path: P) -> Result<Vec<LangIdTestSet>, Box<dyn Error>> {
+ let file = File::open(path)?;
+ let sets = serde_json::from_reader(file)?;
+ Ok(sets)
+}
+
+fn test_langid_fixtures(path: &str) {
+ let tests = read_langid_testsets(path).unwrap();
+
+ for test in tests {
+ let s = test.input.string;
+
+ let langid: LanguageIdentifier = s.parse().expect("Parsing failed.");
+
+ match test.output {
+ LangIdTestOutput::Object(o) => {
+ let expected = LanguageIdentifier::from_parts(
+ o.language.try_into().unwrap(),
+ o.script.as_ref().map(|s| s.parse().unwrap()),
+ o.region.as_ref().map(|r| r.parse().unwrap()),
+ o.variants
+ .iter()
+ .map(|s| s.parse().unwrap())
+ .collect::<Vec<_>>()
+ .as_ref(),
+ );
+ assert_eq!(langid, expected);
+ }
+ LangIdTestOutput::String(s) => {
+ assert_eq!(langid.to_string(), s);
+ }
+ }
+ }
+}
+
+#[test]
+fn parse() {
+ test_langid_fixtures("./tests/fixtures/parsing.json");
+}