rustdoc-search: add an integration test for CCI

Part of https://github.com/rust-lang/rust/issues/130676
This commit is contained in:
Michael Howell
2025-10-27 11:57:32 -07:00
parent 9ea8d67cc6
commit 978fd435ae
6 changed files with 62 additions and 6 deletions

View File

@@ -521,4 +521,25 @@ const EXPECTED = [
returned: [], returned: [],
}, },
] ]
``` ```
If the [`//@ revisions`] directive is used, the JS file will
have access to a variable called `REVISION`.
```js
const EXPECTED = [
// This first test targets name-based search.
{
query: "constructor",
others: REVISION === "has_constructor" ?
[
{ path: "constructor_search", name: "constructor" },
] :
[],
in_args: [],
returned: [],
},
];
```
[`//@ revisions`]: ../tests/compiletest.md#revisions

View File

@@ -18,7 +18,9 @@ impl TestCx<'_> {
.arg("--crate-name") .arg("--crate-name")
.arg(file_stem.replace("-", "_")) .arg(file_stem.replace("-", "_"))
.arg("--test-file") .arg("--test-file")
.arg(self.testpaths.file.with_extension("js")), .arg(self.testpaths.file.with_extension("js"))
.arg("--revision")
.arg(self.revision.unwrap_or_default()),
); );
if !res.status.success() { if !res.status.success() {
self.fatal_proc_rec("rustdoc-js test failed!", &res); self.fatal_proc_rec("rustdoc-js test failed!", &res);

View File

@@ -364,10 +364,10 @@ function hasCheck(content, checkName) {
return content.startsWith(`const ${checkName}`) || content.includes(`\nconst ${checkName}`); return content.startsWith(`const ${checkName}`) || content.includes(`\nconst ${checkName}`);
} }
async function runChecks(testFile, doSearch, parseQuery) { async function runChecks(testFile, doSearch, parseQuery, revision) {
let checkExpected = false; let checkExpected = false;
let checkParsed = false; let checkParsed = false;
let testFileContent = readFile(testFile); let testFileContent = `const REVISION = "${revision}";\n${readFile(testFile)}`;
if (testFileContent.indexOf("FILTER_CRATE") !== -1) { if (testFileContent.indexOf("FILTER_CRATE") !== -1) {
testFileContent += "exports.FILTER_CRATE = FILTER_CRATE;"; testFileContent += "exports.FILTER_CRATE = FILTER_CRATE;";
@@ -548,6 +548,7 @@ function parseOptions(args) {
"doc_folder": "", "doc_folder": "",
"test_folder": "", "test_folder": "",
"test_file": [], "test_file": [],
"revision": "",
}; };
const correspondences = { const correspondences = {
"--resource-suffix": "resource_suffix", "--resource-suffix": "resource_suffix",
@@ -555,6 +556,7 @@ function parseOptions(args) {
"--test-folder": "test_folder", "--test-folder": "test_folder",
"--test-file": "test_file", "--test-file": "test_file",
"--crate-name": "crate_name", "--crate-name": "crate_name",
"--revision": "revision",
}; };
for (let i = 0; i < args.length; ++i) { for (let i = 0; i < args.length; ++i) {
@@ -611,7 +613,7 @@ async function main(argv) {
if (opts["test_file"].length !== 0) { if (opts["test_file"].length !== 0) {
for (const file of opts["test_file"]) { for (const file of opts["test_file"]) {
process.stdout.write(`Testing ${file} ... `); process.stdout.write(`Testing ${file} ... `);
errors += await runChecks(file, doSearch, parseAndSearch.parseQuery); errors += await runChecks(file, doSearch, parseAndSearch.parseQuery, opts.revision);
} }
} else if (opts["test_folder"].length !== 0) { } else if (opts["test_folder"].length !== 0) {
for (const file of fs.readdirSync(opts["test_folder"])) { for (const file of fs.readdirSync(opts["test_folder"])) {
@@ -619,7 +621,7 @@ async function main(argv) {
continue; continue;
} }
process.stdout.write(`Testing ${file} ... `); process.stdout.write(`Testing ${file} ... `);
errors += await runChecks(path.join(opts["test_folder"], file), doSearch, errors += await runChecks(path.join(opts["test_folder"], file, ""), doSearch,
parseAndSearch.parseQuery); parseAndSearch.parseQuery);
} }
} }

View File

@@ -0,0 +1,6 @@
//@ unique-doc-out-dir
//@ doc-flags:--merge=none
//@ doc-flags:--parts-out-dir=info/doc.parts/merged-dep
//@ doc-flags:-Zunstable-options
pub struct Dep;

View File

@@ -0,0 +1,15 @@
const EXPECTED = [
{
'query': 'merged_doc::Doc',
'others': [
{ 'path': 'merged_doc', 'name': 'Doc' },
],
},
{
'query': 'merged_dep::Dep',
'others': REVISION === "nomerge" ? [] :
[
{ 'path': 'merged_dep', 'name': 'Dep' },
],
},
];

View File

@@ -0,0 +1,10 @@
//@ revisions: merge nomerge
//@ aux-build:merged-dep.rs
//@ build-aux-docs
//@[merge] doc-flags:--merge=finalize
//@[merge] doc-flags:--include-parts-dir=info/doc.parts/merged-dep
//@[merge] doc-flags:-Zunstable-options
extern crate merged_dep;
pub struct Doc;