diff options
Diffstat (limited to 'integration_tests/tests')
| -rw-r--r-- | integration_tests/tests/test_html5lib.rs | 16 | 
1 files changed, 13 insertions, 3 deletions
diff --git a/integration_tests/tests/test_html5lib.rs b/integration_tests/tests/test_html5lib.rs index 32dccd4..61e2133 100644 --- a/integration_tests/tests/test_html5lib.rs +++ b/integration_tests/tests/test_html5lib.rs @@ -5,6 +5,13 @@ use pretty_assertions::assert_eq;  use serde::{de::Error as _, Deserialize};  use std::{collections::BTreeMap, fs::File, io::BufReader, path::Path}; +fn parse_tests( +    reader: impl std::io::Read, +) -> Result<impl Iterator<Item = Test>, serde_json::Error> { +    let Tests { tests } = serde_json::from_reader(reader)?; +    Ok(tests.into_iter().map(undo_double_escaping)) +} +  struct ExpectedOutputTokens(Vec<Token<()>>);  impl<'de> Deserialize<'de> for ExpectedOutputTokens { @@ -250,14 +257,14 @@ fn test_tokenizer_file(path: &Path) {      let f = File::open(path).unwrap();      let bf = BufReader::new(f); -    let tests: Tests = serde_json::from_reader(bf).unwrap(); +    let tests = parse_tests(bf).expect(&format!("failed to parse {path:?}")); -    for (i, test) in tests.tests.into_iter().enumerate() { +    for (i, test) in tests.into_iter().enumerate() {          run_test(fname, i, test);      }  } -fn run_test(fname: &str, test_i: usize, mut test: Test) { +fn undo_double_escaping(mut test: Test) -> Test {      test.input = if test.double_escaped {          unescape(&test.input)      } else { @@ -279,7 +286,10 @@ fn run_test(fname: &str, test_i: usize, mut test: Test) {      } else {          ExpectedOutputTokens(test.output.0)      }; +    test +} +fn run_test(fname: &str, test_i: usize, test: Test) {      for state in &test.initial_states {          run_test_inner(              fname,  | 
