From d5a3bc85197e74ccd4fd2bc01ee1fe16a78ec604 Mon Sep 17 00:00:00 2001 From: Martin Fischer Date: Tue, 15 Aug 2023 09:11:18 +0200 Subject: refactor: separate test logic from html5lib-test parsing --- integration_tests/tests/test_html5lib.rs | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) (limited to 'integration_tests') 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, serde_json::Error> { + let Tests { tests } = serde_json::from_reader(reader)?; + Ok(tests.into_iter().map(undo_double_escaping)) +} + struct ExpectedOutputTokens(Vec>); 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, -- cgit v1.2.3