Rollup merge of #82571 - aDotInTheVoid:reexport-tests, r=CraftSpider

Rustdoc Json: Add tests for Reexports, and improve jsondocck

The two changes are orthognal, so you can land just one if you want, but the improved errors realy helped write the tests.

Notably does not have the case from #80664, but I want to have all the ajacent cases tested before starting work on that to ensure I dont break anything.

Improves #81359

cc ```@CraftSpider```

r? ```@jyn514```

```@rustbot``` modify labels: +A-testsuite +T-rustdoc +A-rustdoc-json
This commit is contained in:
Yuki Okushi 2021-03-12 08:55:13 +09:00 committed by GitHub
commit a98dc9b3e7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 114 additions and 2 deletions

View File

@ -0,0 +1,17 @@
// edition:2018
#![no_core]
#![feature(no_core)]
// @!has glob_extern.json "$.index[*][?(@.name=='mod1')]"
mod mod1 {
extern "C" {
// @set public_fn_id = - "$.index[*][?(@.name=='public_fn')].id"
pub fn public_fn();
// @!has - "$.index[*][?(@.name=='private_fn')]"
fn private_fn();
}
}
// @has - "$.index[*][?(@.name=='glob_extern')].inner.items[*]" $public_fn_id
pub use mod1::*;

View File

@ -0,0 +1,27 @@
// edition:2018
#![no_core]
#![feature(no_core)]
// @!has glob_private.json "$.index[*][?(@.name=='mod1')]"
mod mod1 {
// @!has - "$.index[*][?(@.name=='mod2')]"
mod mod2 {
// @set m2pub_id = - "$.index[*][?(@.name=='Mod2Public')].id"
pub struct Mod2Public;
// @!has - "$.index[*][?(@.name=='Mod2Private')]"
struct Mod2Private;
}
pub use self::mod2::*;
// @set m1pub_id = - "$.index[*][?(@.name=='Mod1Public')].id"
pub struct Mod1Public;
// @!has - "$.index[*][?(@.name=='Mod1Private')]"
struct Mod1Private;
}
pub use mod1::*;
// @has - "$.index[*][?(@.name=='glob_private')].inner.items[*]" $m2pub_id
// @has - "$.index[*][?(@.name=='glob_private')].inner.items[*]" $m1pub_id

View File

@ -0,0 +1,17 @@
// edition:2018
#![no_core]
#![feature(no_core)]
// @set inner_id = rename_public.json "$.index[*][?(@.name=='inner')].id"
// @has - "$.index[*][?(@.name=='rename_public')].inner.items[*]" $inner_id
pub mod inner {
// @set public_id = - "$.index[*][?(@.name=='Public')].id"
// @has - "$.index[*][?(@.name=='inner')].inner.items[*]" $public_id
pub struct Public;
}
// @set import_id = - "$.index[*][?(@.inner.name=='NewName')].id"
// @!has - "$.index[*][?(@.inner.name=='Public')]"
// @has - "$.index[*][?(@.name=='rename_public')].inner.items[*]" $import_id
// @is - "$.index[*][?(@.inner.name=='NewName')].inner.span" \"inner::Public\"
pub use inner::Public as NewName;

View File

@ -0,0 +1,13 @@
// edition:2018
#![no_core]
#![feature(no_core)]
// @!has simple_private.json "$.index[*][?(@.name=='inner')]"
mod inner {
// @set pub_id = - "$.index[*][?(@.name=='Public')].id"
pub struct Public;
}
// @has - "$.index[*][?(@.name=='simple_private')].inner.items[*]" $pub_id
pub use inner::Public;

View File

@ -0,0 +1,18 @@
// edition:2018
#![no_core]
#![feature(no_core)]
// @set inner_id = simple_public.json "$.index[*][?(@.name=='inner')].id"
// @has - "$.index[*][?(@.name=='simple_public')].inner.items[*]" $inner_id
pub mod inner {
// @set public_id = - "$.index[*][?(@.name=='Public')].id"
// @has - "$.index[*][?(@.name=='inner')].inner.items[*]" $public_id
pub struct Public;
}
// @set import_id = - "$.index[*][?(@.inner.name=='Public')].id"
// @has - "$.index[*][?(@.name=='simple_public')].inner.items[*]" $import_id
// @is - "$.index[*][?(@.inner.name=='Public')].inner.span" \"inner::Public\"
pub use inner::Public;

View File

@ -205,7 +205,21 @@ fn check_command(command: Command, cache: &mut Cache) -> Result<(), CkError> {
let val = cache.get_value(&command.args[0])?; let val = cache.get_value(&command.args[0])?;
let results = select(&val, &command.args[1]).unwrap(); let results = select(&val, &command.args[1]).unwrap();
let pat = string_to_value(&command.args[2], cache); let pat = string_to_value(&command.args[2], cache);
results.contains(&pat.as_ref()) let has = results.contains(&pat.as_ref());
// Give better error for when @has check fails
if !command.negated && !has {
return Err(CkError::FailedCheck(
format!(
"{} matched to {:?} but didn't have {:?}",
&command.args[1],
results,
pat.as_ref()
),
command,
));
} else {
has
}
} }
_ => unreachable!(), _ => unreachable!(),
} }
@ -233,7 +247,13 @@ fn check_command(command: Command, cache: &mut Cache) -> Result<(), CkError> {
assert_eq!(command.args[1], "=", "Expected an `=`"); assert_eq!(command.args[1], "=", "Expected an `=`");
let val = cache.get_value(&command.args[2])?; let val = cache.get_value(&command.args[2])?;
let results = select(&val, &command.args[3]).unwrap(); let results = select(&val, &command.args[3]).unwrap();
assert_eq!(results.len(), 1); assert_eq!(
results.len(),
1,
"Didn't get 1 result for `{}`: got {:?}",
command.args[3],
results
);
match results.len() { match results.len() {
0 => false, 0 => false,
1 => { 1 => {