about summary refs log tree commit diff
diff options
context:
space:
mode:
authorYuki Okushi <huyuumi.dev@gmail.com>2021-03-12 08:55:13 +0900
committerGitHub <noreply@github.com>2021-03-12 08:55:13 +0900
commita98dc9b3e7d9f4f6c5a3ef850aa6a08c28a55ce1 (patch)
tree33938445c709d4060699dbfef033a1fcd0e545a1
parent2f0bbc0d1d1ee137d226ea1c6d703e81d5b3660e (diff)
parent5f24798b9e228438973a8abeee1a2d5ea016f335 (diff)
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
-rw-r--r--src/test/rustdoc-json/reexport/glob_extern.rs17
-rw-r--r--src/test/rustdoc-json/reexport/glob_private.rs27
-rw-r--r--src/test/rustdoc-json/reexport/rename_public.rs17
-rw-r--r--src/test/rustdoc-json/reexport/simple_private.rs13
-rw-r--r--src/test/rustdoc-json/reexport/simple_public.rs18
-rw-r--r--src/tools/jsondocck/src/main.rs24
6 files changed, 114 insertions, 2 deletions
diff --git a/src/test/rustdoc-json/reexport/glob_extern.rs b/src/test/rustdoc-json/reexport/glob_extern.rs
new file mode 100644
index 00000000000..831c185f6b1
--- /dev/null
+++ b/src/test/rustdoc-json/reexport/glob_extern.rs
@@ -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::*;
diff --git a/src/test/rustdoc-json/reexport/glob_private.rs b/src/test/rustdoc-json/reexport/glob_private.rs
new file mode 100644
index 00000000000..e907de92367
--- /dev/null
+++ b/src/test/rustdoc-json/reexport/glob_private.rs
@@ -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
diff --git a/src/test/rustdoc-json/reexport/rename_public.rs b/src/test/rustdoc-json/reexport/rename_public.rs
new file mode 100644
index 00000000000..8c2d7200d0c
--- /dev/null
+++ b/src/test/rustdoc-json/reexport/rename_public.rs
@@ -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;
diff --git a/src/test/rustdoc-json/reexport/simple_private.rs b/src/test/rustdoc-json/reexport/simple_private.rs
new file mode 100644
index 00000000000..658b121e6ce
--- /dev/null
+++ b/src/test/rustdoc-json/reexport/simple_private.rs
@@ -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;
diff --git a/src/test/rustdoc-json/reexport/simple_public.rs b/src/test/rustdoc-json/reexport/simple_public.rs
new file mode 100644
index 00000000000..0c97a2e7b40
--- /dev/null
+++ b/src/test/rustdoc-json/reexport/simple_public.rs
@@ -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;
diff --git a/src/tools/jsondocck/src/main.rs b/src/tools/jsondocck/src/main.rs
index 5020a4917a0..bcb3f6922ef 100644
--- a/src/tools/jsondocck/src/main.rs
+++ b/src/tools/jsondocck/src/main.rs
@@ -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!(),
             }
@@ -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 => {