Skip to content

Commit e868d2a

Browse files
committed
rcdom: Port remaining tests of rustc_test
Move the custom test runner into its own `util::runner` module and use it from the other test files. This allow `cargo test` to complete under rust 1.77.1.
1 parent f16afdc commit e868d2a

6 files changed

+87
-59
lines changed

rcdom/Cargo.toml

-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ xml5ever = { version = "0.18", path = "../xml5ever" }
2222

2323
[dev-dependencies]
2424
serde_json = "1.0"
25-
rustc-test = "0.3"
2625

2726
[[test]]
2827
name = "html-tokenizer"

rcdom/tests/html-tokenizer.rs

+17-10
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,19 @@ use html5ever::tokenizer::{CommentToken, DoctypeToken, TagToken, Token};
2020
use html5ever::tokenizer::{Doctype, EndTag, StartTag, Tag};
2121
use html5ever::tokenizer::{TokenSink, TokenSinkResult, Tokenizer, TokenizerOpts};
2222
use html5ever::{namespace_url, ns, Attribute, LocalName, QualName};
23-
use rustc_test::{DynTestFn, DynTestName, TestDesc, TestDescAndFn};
2423
use serde_json::{Map, Value};
2524
use std::ffi::OsStr;
2625
use std::fs::File;
2726
use std::io::Read;
2827
use std::path::Path;
2928
use std::{char, env, mem};
3029

30+
use util::runner::Test;
31+
32+
mod util {
33+
pub mod runner;
34+
}
35+
3136
#[derive(Debug)]
3237
struct TestError;
3338

@@ -334,10 +339,11 @@ fn mk_test(
334339
expect: Value,
335340
expect_errors: Vec<Value>,
336341
opts: TokenizerOpts,
337-
) -> TestDescAndFn {
338-
TestDescAndFn {
339-
desc: TestDesc::new(DynTestName(desc)),
340-
testfn: DynTestFn(Box::new(move || {
342+
) -> Test {
343+
Test {
344+
name: desc,
345+
skip: false,
346+
test: Box::new(move || {
341347
// Split up the input at different points to test incremental tokenization.
342348
let insplits = splits(&input, 3);
343349
for input in insplits.into_iter() {
@@ -354,11 +360,11 @@ fn mk_test(
354360
);
355361
}
356362
}
357-
})),
363+
}),
358364
}
359365
}
360366

361-
fn mk_tests(tests: &mut Vec<TestDescAndFn>, filename: &str, js: &Value) {
367+
fn mk_tests(tests: &mut Vec<Test>, filename: &str, js: &Value) {
362368
let obj = js.get_obj();
363369
let mut input = js.find("input").get_str();
364370
let mut expect = js.find("output").clone();
@@ -437,7 +443,7 @@ fn mk_tests(tests: &mut Vec<TestDescAndFn>, filename: &str, js: &Value) {
437443
}
438444
}
439445

440-
fn tests(src_dir: &Path) -> Vec<TestDescAndFn> {
446+
fn tests(src_dir: &Path) -> Vec<Test> {
441447
let mut tests = vec![];
442448

443449
let mut add_test = |path: &Path, mut file: File| {
@@ -474,6 +480,7 @@ fn tests(src_dir: &Path) -> Vec<TestDescAndFn> {
474480
}
475481

476482
fn main() {
477-
let args: Vec<_> = env::args().collect();
478-
rustc_test::test_main(&args, tests(Path::new(env!("CARGO_MANIFEST_DIR"))));
483+
for test in tests(Path::new(env!("CARGO_MANIFEST_DIR"))) {
484+
test.run();
485+
}
479486
}

rcdom/tests/html-tree-builder.rs

+18-16
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
// except according to those terms.
99

1010
extern crate markup5ever_rcdom as rcdom;
11-
extern crate rustc_test as test;
1211
#[macro_use]
1312
extern crate html5ever;
1413

@@ -20,12 +19,16 @@ use std::ffi::OsStr;
2019
use std::io::BufRead;
2120
use std::path::Path;
2221
use std::{env, fs, io, iter, mem};
23-
use test::{DynTestName, TestDesc, TestDescAndFn, TestFn};
2422

2523
use html5ever::tendril::{StrTendril, TendrilSink};
2624
use html5ever::{parse_document, parse_fragment, ParseOpts};
2725
use html5ever::{LocalName, QualName};
2826
use rcdom::{Handle, NodeData, RcDom};
27+
use util::runner::Test;
28+
29+
mod util {
30+
pub mod runner;
31+
}
2932

3033
fn parse_tests<It: Iterator<Item = String>>(mut lines: It) -> Vec<HashMap<String, String>> {
3134
let mut tests = vec![];
@@ -159,7 +162,7 @@ fn serialize(buf: &mut String, indent: usize, handle: Handle) {
159162
}
160163

161164
fn make_test(
162-
tests: &mut Vec<TestDescAndFn>,
165+
tests: &mut Vec<Test>,
163166
ignores: &HashSet<String>,
164167
filename: &str,
165168
idx: usize,
@@ -185,7 +188,7 @@ fn make_test_desc_with_scripting_flag(
185188
name: &str,
186189
fields: &HashMap<String, String>,
187190
scripting_enabled: bool,
188-
) -> TestDescAndFn {
191+
) -> Test {
189192
let get_field = |key| {
190193
let field = fields.get(key).expect("missing field");
191194
field.trim_end_matches('\n').to_string()
@@ -197,24 +200,22 @@ fn make_test_desc_with_scripting_flag(
197200
let context = fields
198201
.get("document-fragment")
199202
.map(|field| context_name(field.trim_end_matches('\n')));
200-
let ignore = ignores.contains(name);
203+
let skip = ignores.contains(name);
201204
let mut name = name.to_owned();
202205
if scripting_enabled {
203206
name.push_str(" (scripting enabled)");
204207
} else {
205208
name.push_str(" (scripting disabled)");
206209
};
207-
let mut opts: ParseOpts = Default::default();
208-
opts.tree_builder.scripting_enabled = scripting_enabled;
209210

210-
TestDescAndFn {
211-
desc: TestDesc {
212-
ignore,
213-
..TestDesc::new(DynTestName(name))
214-
},
215-
testfn: TestFn::dyn_test_fn(move || {
211+
Test{
212+
name,
213+
skip,
214+
test: Box::new(move || {
216215
// Do this here because Tendril isn't Send.
217216
let data = StrTendril::from_slice(&data);
217+
let mut opts: ParseOpts = Default::default();
218+
opts.tree_builder.scripting_enabled = scripting_enabled;
218219
let mut result = String::new();
219220
match context {
220221
None => {
@@ -258,7 +259,7 @@ fn context_name(context: &str) -> QualName {
258259
}
259260
}
260261

261-
fn tests(src_dir: &Path, ignores: &HashSet<String>) -> Vec<TestDescAndFn> {
262+
fn tests(src_dir: &Path, ignores: &HashSet<String>) -> Vec<Test> {
262263
let mut tests = vec![];
263264

264265
foreach_html5lib_test(
@@ -286,7 +287,6 @@ fn tests(src_dir: &Path, ignores: &HashSet<String>) -> Vec<TestDescAndFn> {
286287
}
287288

288289
fn main() {
289-
let args: Vec<_> = env::args().collect();
290290
let src_dir = Path::new(env!("CARGO_MANIFEST_DIR"));
291291
let mut ignores = HashSet::new();
292292
{
@@ -297,5 +297,7 @@ fn main() {
297297
}
298298
}
299299

300-
test::test_main(&args, tests(src_dir, &ignores));
300+
for test in tests(src_dir, &ignores) {
301+
test.run();
302+
}
301303
}

rcdom/tests/util/runner.rs

+33
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
// Copyright 2024 The html5ever Project Developers. See the
2+
// COPYRIGHT file at the top-level directory of this distribution.
3+
//
4+
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
5+
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
6+
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
7+
// option. This file may not be copied, modified, or distributed
8+
// except according to those terms.
9+
10+
/// Simple container for storing tests for later execution
11+
pub struct Test {
12+
pub name: String,
13+
pub skip: bool,
14+
pub test: Box<dyn Fn()>,
15+
}
16+
17+
18+
impl Test {
19+
/// Invoke the stored test function
20+
///
21+
/// A status message is printed if the wrapped closure completes
22+
/// or is marked as skipped. The test should panic to report
23+
/// failure.
24+
pub fn run(&self) {
25+
print!("test {} ...", self.name);
26+
if self.skip {
27+
println!(" SKIPPED");
28+
} else {
29+
(self.test)();
30+
println!(" ok");
31+
}
32+
}
33+
}

rcdom/tests/xml-tokenizer.rs

+14-11
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ use std::io::Read;
1414
use std::path::Path;
1515
use std::{env, mem};
1616

17-
use rustc_test::{DynTestFn, DynTestName, TestDesc, TestDescAndFn};
1817
use util::find_tests::foreach_xml5lib_test;
18+
use util::runner::Test;
1919

2020
use markup5ever::buffer_queue::BufferQueue;
2121
use xml5ever::tendril::{SliceExt, StrTendril};
@@ -28,6 +28,7 @@ use xml5ever::{namespace_url, ns, Attribute, LocalName, QualName};
2828

2929
mod util {
3030
pub mod find_tests;
31+
pub mod runner;
3132
}
3233

3334
// Return all ways of splitting the string into at most n
@@ -280,14 +281,15 @@ fn json_to_tokens(js: &Value, exact_errors: bool) -> Vec<Token> {
280281
}
281282

282283
fn mk_xml_test(
283-
desc: String,
284+
name: String,
284285
input: String,
285286
expect: Value,
286287
opts: XmlTokenizerOpts,
287-
) -> TestDescAndFn {
288-
TestDescAndFn {
289-
desc: TestDesc::new(DynTestName(desc)),
290-
testfn: DynTestFn(Box::new(move || {
288+
) -> Test {
289+
Test {
290+
name,
291+
skip: false,
292+
test: Box::new(move || {
291293
// Split up the input at different points to test incremental tokenization.
292294
let insplits = splits(&input, 3);
293295
for input in insplits.into_iter() {
@@ -304,11 +306,11 @@ fn mk_xml_test(
304306
);
305307
}
306308
}
307-
})),
309+
}),
308310
}
309311
}
310312

311-
fn mk_xml_tests(tests: &mut Vec<TestDescAndFn>, filename: &str, js: &Value) {
313+
fn mk_xml_tests(tests: &mut Vec<Test>, filename: &str, js: &Value) {
312314
let input: &str = &js.find("input").get_str();
313315
let expect = js.find("output");
314316
let desc = format!("tok: {}: {}", filename, js.find("description").get_str());
@@ -346,7 +348,7 @@ fn mk_xml_tests(tests: &mut Vec<TestDescAndFn>, filename: &str, js: &Value) {
346348
}
347349
}
348350

349-
fn tests(src_dir: &Path) -> Vec<TestDescAndFn> {
351+
fn tests(src_dir: &Path) -> Vec<Test> {
350352
let mut tests = vec![];
351353
foreach_xml5lib_test(
352354
src_dir,
@@ -373,6 +375,7 @@ fn tests(src_dir: &Path) -> Vec<TestDescAndFn> {
373375
}
374376

375377
fn main() {
376-
let args: Vec<_> = env::args().collect();
377-
rustc_test::test_main(&args, tests(Path::new(env!("CARGO_MANIFEST_DIR"))));
378+
for test in tests(Path::new(env!("CARGO_MANIFEST_DIR"))) {
379+
test.run();
380+
}
378381
}

rcdom/tests/xml-tree-builder.rs

+5-21
Original file line numberDiff line numberDiff line change
@@ -15,29 +15,13 @@ use std::io::BufRead;
1515
use std::path::Path;
1616
use std::{env, fs, io, iter, mem};
1717
use util::find_tests::foreach_xml5lib_test;
18+
use util::runner::Test;
1819
use xml5ever::driver::parse_document;
1920
use xml5ever::tendril::TendrilSink;
2021

2122
mod util {
2223
pub mod find_tests;
23-
24-
pub struct Test {
25-
pub name: String,
26-
pub skip: bool,
27-
pub test: Box<dyn Fn()>,
28-
}
29-
30-
impl Test {
31-
pub fn run(&self) {
32-
print!("test {} ...", self.name);
33-
if self.skip {
34-
println!(" SKIPPED");
35-
} else {
36-
(self.test)();
37-
println!(" ok");
38-
}
39-
}
40-
}
24+
pub mod runner;
4125
}
4226

4327
fn parse_tests<It: Iterator<Item = String>>(mut lines: It) -> Vec<HashMap<String, String>> {
@@ -175,7 +159,7 @@ fn serialize(buf: &mut String, indent: usize, handle: Handle) {
175159
static IGNORE_SUBSTRS: &[&str] = &["<template"];
176160

177161
fn make_xml_test(
178-
tests: &mut Vec<util::Test>,
162+
tests: &mut Vec<Test>,
179163
ignores: &HashSet<String>,
180164
filename: &str,
181165
idx: usize,
@@ -191,7 +175,7 @@ fn make_xml_test(
191175
let name = format!("tb: {}-{}", filename, idx);
192176
let skip = ignores.contains(&name) || IGNORE_SUBSTRS.iter().any(|&ig| data.contains(ig));
193177

194-
tests.push(util::Test {
178+
tests.push(Test {
195179
name,
196180
skip,
197181
test : Box::new(move || {
@@ -215,7 +199,7 @@ fn make_xml_test(
215199
});
216200
}
217201

218-
fn tests(src_dir: &Path, ignores: &HashSet<String>) -> Vec<util::Test> {
202+
fn tests(src_dir: &Path, ignores: &HashSet<String>) -> Vec<Test> {
219203
let mut tests = vec![];
220204

221205
foreach_xml5lib_test(

0 commit comments

Comments
 (0)