Skip to content

Commit

Permalink
Rollup merge of rust-lang#82571 - aDotInTheVoid:reexport-tests, r=Cra…
Browse files Browse the repository at this point in the history
…ftSpider

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 rust-lang#80664, but I want to have all the ajacent cases tested before starting work on that to ensure I dont break anything.

Improves rust-lang#81359

cc `@CraftSpider`

r? `@jyn514`

`@rustbot` modify labels: +A-testsuite +T-rustdoc +A-rustdoc-json
  • Loading branch information
JohnTitor committed Mar 11, 2021
2 parents eb714da + 5f24798 commit 56fee40
Show file tree
Hide file tree
Showing 6 changed files with 114 additions and 2 deletions.
17 changes: 17 additions & 0 deletions src/test/rustdoc-json/reexport/glob_extern.rs
Original file line number Diff line number Diff line change
@@ -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::*;
27 changes: 27 additions & 0 deletions src/test/rustdoc-json/reexport/glob_private.rs
Original file line number Diff line number Diff line change
@@ -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
17 changes: 17 additions & 0 deletions src/test/rustdoc-json/reexport/rename_public.rs
Original file line number Diff line number Diff line change
@@ -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;
13 changes: 13 additions & 0 deletions src/test/rustdoc-json/reexport/simple_private.rs
Original file line number Diff line number Diff line change
@@ -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;
18 changes: 18 additions & 0 deletions src/test/rustdoc-json/reexport/simple_public.rs
Original file line number Diff line number Diff line change
@@ -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;
24 changes: 22 additions & 2 deletions src/tools/jsondocck/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -205,7 +205,21 @@ fn check_command(command: Command, cache: &mut Cache) -> Result<(), CkError> {
let val = cache.get_value(&command.args[0])?;
let results = select(&val, &command.args[1]).unwrap();
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!(),
}
Expand Down Expand Up @@ -233,7 +247,13 @@ fn check_command(command: Command, cache: &mut Cache) -> Result<(), CkError> {
assert_eq!(command.args[1], "=", "Expected an `=`");
let val = cache.get_value(&command.args[2])?;
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() {
0 => false,
1 => {
Expand Down

0 comments on commit 56fee40

Please sign in to comment.