about summary refs log tree commit diff
path: root/tests/rustdoc/enum
diff options
context:
space:
mode:
Diffstat (limited to 'tests/rustdoc/enum')
-rw-r--r--tests/rustdoc/enum/auxiliary/enum-variant.rs48
-rw-r--r--tests/rustdoc/enum/auxiliary/variant-struct.rs5
-rw-r--r--tests/rustdoc/enum/enum-headings.rs40
-rw-r--r--tests/rustdoc/enum/enum-non-exhaustive-108925.rs13
-rw-r--r--tests/rustdoc/enum/enum-variant-doc-hidden-field-88600.rs37
-rw-r--r--tests/rustdoc/enum/enum-variant-fields-heading.rs18
-rw-r--r--tests/rustdoc/enum/enum-variant-fields-heading.variants.html3
-rw-r--r--tests/rustdoc/enum/enum-variant-value.rs191
-rw-r--r--tests/rustdoc/enum/render-enum-variant-structlike-32395.rs18
-rw-r--r--tests/rustdoc/enum/strip-enum-variant.no-not-shown.html1
-rw-r--r--tests/rustdoc/enum/strip-enum-variant.rs11
11 files changed, 385 insertions, 0 deletions
diff --git a/tests/rustdoc/enum/auxiliary/enum-variant.rs b/tests/rustdoc/enum/auxiliary/enum-variant.rs
new file mode 100644
index 00000000000..a0a7fd894f9
--- /dev/null
+++ b/tests/rustdoc/enum/auxiliary/enum-variant.rs
@@ -0,0 +1,48 @@
+#![crate_name = "bar"]
+
+pub enum E {
+    A = 12,
+    B,
+    C = 1245,
+}
+
+pub enum F {
+    A,
+    B,
+}
+
+#[repr(u32)]
+pub enum G {
+    A = 12,
+    B,
+    C(u32),
+}
+
+pub enum H {
+    A,
+    C(u32),
+}
+
+#[repr(C)]
+pub enum N {
+    A,
+    B,
+}
+
+#[repr(C)]
+pub enum O {
+    A(u32),
+    B,
+}
+
+#[repr(u32)]
+pub enum P {
+    A,
+    B,
+}
+
+#[repr(u32)]
+pub enum Q {
+    A(u32),
+    B,
+}
diff --git a/tests/rustdoc/enum/auxiliary/variant-struct.rs b/tests/rustdoc/enum/auxiliary/variant-struct.rs
new file mode 100644
index 00000000000..0f3d2e5f1b7
--- /dev/null
+++ b/tests/rustdoc/enum/auxiliary/variant-struct.rs
@@ -0,0 +1,5 @@
+pub enum Foo {
+    Bar {
+        qux: (),
+    }
+}
diff --git a/tests/rustdoc/enum/enum-headings.rs b/tests/rustdoc/enum/enum-headings.rs
new file mode 100644
index 00000000000..6deabf1cd9a
--- /dev/null
+++ b/tests/rustdoc/enum/enum-headings.rs
@@ -0,0 +1,40 @@
+#![crate_name = "foo"]
+//@ has foo/enum.Token.html
+/// A token!
+/// # First
+/// Some following text...
+//@ has - '//h2[@id="first"]' "First"
+pub enum Token {
+    /// A declaration!
+    /// # Variant-First
+    /// Some following text...
+    //@ has - '//h4[@id="variant-first"]' "Variant-First"
+    Declaration {
+        /// A version!
+        /// # Variant-Field-First
+        /// Some following text...
+        //@ has - '//h5[@id="variant-field-first"]' "Variant-Field-First"
+        version: String,
+    },
+    /// A Zoople!
+    /// # Variant-First
+    Zoople(
+        //@ has - '//h5[@id="variant-tuple-field-first"]' "Variant-Tuple-Field-First"
+        /// Zoople's first variant!
+        /// # Variant-Tuple-Field-First
+        /// Some following text...
+        usize,
+    ),
+    /// Unfinished business!
+    /// # Non-Exhaustive-First
+    /// Some following text...
+    //@ has - '//h4[@id="non-exhaustive-first"]' "Non-Exhaustive-First"
+    #[non_exhaustive]
+    Unfinished {
+        /// This is x.
+        /// # X-First
+        /// Some following text...
+        //@ has - '//h5[@id="x-first"]' "X-First"
+        x: usize,
+    },
+}
diff --git a/tests/rustdoc/enum/enum-non-exhaustive-108925.rs b/tests/rustdoc/enum/enum-non-exhaustive-108925.rs
new file mode 100644
index 00000000000..ea2462449d2
--- /dev/null
+++ b/tests/rustdoc/enum/enum-non-exhaustive-108925.rs
@@ -0,0 +1,13 @@
+// https://github.com/rust-lang/rust/issues/108925
+#![crate_name="foo"]
+
+//@ has foo/enum.MyThing.html
+//@ has - '//code' 'Shown'
+//@ !has - '//code' 'NotShown'
+//@ !has - '//code' '// some variants omitted'
+#[non_exhaustive]
+pub enum MyThing {
+    Shown,
+    #[doc(hidden)]
+    NotShown,
+}
diff --git a/tests/rustdoc/enum/enum-variant-doc-hidden-field-88600.rs b/tests/rustdoc/enum/enum-variant-doc-hidden-field-88600.rs
new file mode 100644
index 00000000000..f1d461c66c3
--- /dev/null
+++ b/tests/rustdoc/enum/enum-variant-doc-hidden-field-88600.rs
@@ -0,0 +1,37 @@
+// This test ensure that #[doc(hidden)] is applied correctly in enum variant fields.
+// https://github.com/rust-lang/rust/issues/88600
+#![crate_name = "foo"]
+
+// Denotes a field which should be hidden.
+pub struct H;
+
+// Denotes a field which should not be hidden (shown).
+pub struct S;
+
+//@ has foo/enum.FooEnum.html
+pub enum FooEnum {
+    //@ has - '//*[@id="variant.HiddenTupleItem"]//h3' 'HiddenTupleItem(/* private fields */)'
+    //@ count - '//*[@id="variant.HiddenTupleItem.field.0"]' 0
+    HiddenTupleItem(#[doc(hidden)] H),
+    //@ has - '//*[@id="variant.MultipleHidden"]//h3' 'MultipleHidden(/* private fields */)'
+    //@ count - '//*[@id="variant.MultipleHidden.field.0"]' 0
+    //@ count - '//*[@id="variant.MultipleHidden.field.1"]' 0
+    MultipleHidden(#[doc(hidden)] H, #[doc(hidden)] H),
+    //@ has - '//*[@id="variant.MixedHiddenFirst"]//h3' 'MixedHiddenFirst(_, S)'
+    //@ count - '//*[@id="variant.MixedHiddenFirst.field.0"]' 0
+    //@ has - '//*[@id="variant.MixedHiddenFirst.field.1"]' '1: S'
+    MixedHiddenFirst(#[doc(hidden)] H, /** dox */ S),
+    //@ has - '//*[@id="variant.MixedHiddenLast"]//h3' 'MixedHiddenLast(S, _)'
+    //@ has - '//*[@id="variant.MixedHiddenLast.field.0"]' '0: S'
+    //@ count - '//*[@id="variant.MixedHiddenLast.field.1"]' 0
+    MixedHiddenLast(/** dox */ S, #[doc(hidden)] H),
+    //@ has - '//*[@id="variant.HiddenStruct"]//h3' 'HiddenStruct'
+    //@ count - '//*[@id="variant.HiddenStruct.field.h"]' 0
+    //@ has - '//*[@id="variant.HiddenStruct.field.s"]' 's: S'
+    HiddenStruct {
+        #[doc(hidden)]
+        h: H,
+        /// dox
+        s: S,
+    },
+}
diff --git a/tests/rustdoc/enum/enum-variant-fields-heading.rs b/tests/rustdoc/enum/enum-variant-fields-heading.rs
new file mode 100644
index 00000000000..e210667d3c0
--- /dev/null
+++ b/tests/rustdoc/enum/enum-variant-fields-heading.rs
@@ -0,0 +1,18 @@
+// This is a regression test for <https://github.com/rust-lang/rust/issues/118195>.
+// It ensures that the "Fields" heading is not generated if no field is displayed.
+
+#![crate_name = "foo"]
+
+//@ has 'foo/enum.Foo.html'
+//@ has - '//*[@id="variant.A"]' 'A'
+//@ count - '//*[@id="variant.A.fields"]' 0
+//@ has - '//*[@id="variant.B"]' 'B'
+//@ count - '//*[@id="variant.B.fields"]' 0
+//@ snapshot variants - '//*[@id="main-content"]/*[@class="variants"]'
+
+pub enum Foo {
+    /// A variant with no fields
+    A {},
+    /// A variant with hidden fields
+    B { #[doc(hidden)] a: u8 },
+}
diff --git a/tests/rustdoc/enum/enum-variant-fields-heading.variants.html b/tests/rustdoc/enum/enum-variant-fields-heading.variants.html
new file mode 100644
index 00000000000..bcb36f7cf86
--- /dev/null
+++ b/tests/rustdoc/enum/enum-variant-fields-heading.variants.html
@@ -0,0 +1,3 @@
+<div class="variants"><section id="variant.A" class="variant"><a href="#variant.A" class="anchor">&#167;</a><h3 class="code-header">A</h3></section><div class="docblock"><p>A variant with no fields</p>
+</div><section id="variant.B" class="variant"><a href="#variant.B" class="anchor">&#167;</a><h3 class="code-header">B</h3></section><div class="docblock"><p>A variant with hidden fields</p>
+</div></div>
\ No newline at end of file
diff --git a/tests/rustdoc/enum/enum-variant-value.rs b/tests/rustdoc/enum/enum-variant-value.rs
new file mode 100644
index 00000000000..1670de8a24f
--- /dev/null
+++ b/tests/rustdoc/enum/enum-variant-value.rs
@@ -0,0 +1,191 @@
+// This test ensures that the variant value is displayed with underscores but without
+// a type name at the end.
+
+//@ aux-build:enum-variant.rs
+
+#![crate_name = "foo"]
+
+extern crate bar;
+
+// In this case, since all variants are C-like variants and at least one of them
+// has its value set, we display values for all of them.
+
+//@ has 'foo/enum.A.html'
+//@ has - '//*[@class="rust item-decl"]/code' 'A = 12,'
+//@ has - '//*[@class="rust item-decl"]/code' 'B = 13,'
+//@ has - '//*[@class="rust item-decl"]/code' 'C = 1_245,'
+//@ matches - '//*[@id="variant.A"]/h3' '^A = 12$'
+//@ matches - '//*[@id="variant.B"]/h3' '^B = 13$'
+//@ matches - '//*[@id="variant.C"]/h3' '^C = 1_245$'
+pub enum A {
+    A = 12,
+    B,
+    C = 1245,
+}
+
+// In this case, all variants are C-like variants but none of them has its value set.
+// Therefore we don't display values.
+
+//@ has 'foo/enum.B.html'
+//@ has - '//*[@class="rust item-decl"]/code' 'A,'
+//@ has - '//*[@class="rust item-decl"]/code' 'B,'
+//@ matches - '//*[@id="variant.A"]/h3' '^A$'
+//@ matches - '//*[@id="variant.B"]/h3' '^B$'
+pub enum B {
+    A,
+    B,
+}
+
+// In this case, not all variants are C-like variants so we don't display values.
+
+//@ has 'foo/enum.C.html'
+//@ has - '//*[@class="rust item-decl"]/code' 'A = 12,'
+//@ has - '//*[@class="rust item-decl"]/code' 'B,'
+//@ has - '//*[@class="rust item-decl"]/code' 'C(u32),'
+//@ matches - '//*[@id="variant.A"]/h3' '^A = 12$'
+//@ matches - '//*[@id="variant.B"]/h3' '^B$'
+//@ has - '//*[@id="variant.C"]/h3' 'C(u32)'
+#[repr(u32)]
+pub enum C {
+    A = 12,
+    B,
+    C(u32),
+}
+
+// In this case, not all variants are C-like variants and no C-like variant has its
+// value set, so we don't display values.
+
+//@ has 'foo/enum.D.html'
+//@ has - '//*[@class="rust item-decl"]/code' 'A,'
+//@ has - '//*[@class="rust item-decl"]/code' 'C(u32),'
+//@ matches - '//*[@id="variant.A"]/h3' '^A$'
+//@ has - '//*[@id="variant.C"]/h3' 'C(u32)'
+pub enum D {
+    A,
+    C(u32),
+}
+
+//@ has 'foo/enum.E.html'
+//@ has - '//*[@class="rust item-decl"]/code' 'A = 12,'
+//@ has - '//*[@class="rust item-decl"]/code' 'B = 13,'
+//@ has - '//*[@class="rust item-decl"]/code' 'C = 1_245,'
+//@ matches - '//*[@id="variant.A"]/h3' '^A = 12$'
+//@ matches - '//*[@id="variant.B"]/h3' '^B = 13$'
+//@ matches - '//*[@id="variant.C"]/h3' '^C = 1_245$'
+pub use bar::E;
+
+//@ has 'foo/enum.F.html'
+//@ has - '//*[@class="rust item-decl"]/code' 'A,'
+//@ has - '//*[@class="rust item-decl"]/code' 'B,'
+//@ matches - '//*[@id="variant.A"]/h3' '^A$'
+//@ matches - '//*[@id="variant.B"]/h3' '^B$'
+pub use bar::F;
+
+//@ has 'foo/enum.G.html'
+//@ has - '//*[@class="rust item-decl"]/code' 'A = 12,'
+//@ has - '//*[@class="rust item-decl"]/code' 'B,'
+//@ has - '//*[@class="rust item-decl"]/code' 'C(u32),'
+//@ matches - '//*[@id="variant.A"]/h3' '^A = 12$'
+//@ matches - '//*[@id="variant.B"]/h3' '^B$'
+//@ has - '//*[@id="variant.C"]/h3' 'C(u32)'
+pub use bar::G;
+
+//@ has 'foo/enum.H.html'
+//@ has - '//*[@class="rust item-decl"]/code' 'A,'
+//@ has - '//*[@class="rust item-decl"]/code' 'C(u32),'
+//@ matches - '//*[@id="variant.A"]/h3' '^A$'
+//@ has - '//*[@id="variant.C"]/h3' 'C(u32)'
+pub use bar::H;
+
+// Testing more complex cases.
+pub const X: isize = 2;
+//@ has 'foo/enum.I.html'
+//@ has - '//*[@class="rust item-decl"]/code' 'A = 2,'
+//@ has - '//*[@class="rust item-decl"]/code' 'B = 4,'
+//@ has - '//*[@class="rust item-decl"]/code' 'C = 9,'
+//@ has - '//*[@class="rust item-decl"]/code' 'D = -1,'
+//@ matches - '//*[@id="variant.A"]/h3' '^A = 2$'
+//@ matches - '//*[@id="variant.B"]/h3' '^B = 4$'
+//@ matches - '//*[@id="variant.C"]/h3' '^C = 9$'
+//@ matches - '//*[@id="variant.D"]/h3' '^D = -1$'
+#[repr(isize)]
+pub enum I {
+    A = X,
+    B = X * 2,
+    C = Self::B as isize + X + 3,
+    D = -1,
+}
+
+// Testing `repr`.
+
+//@ has 'foo/enum.J.html'
+//@ has - '//*[@class="rust item-decl"]/code' 'A = 0,'
+//@ has - '//*[@class="rust item-decl"]/code' 'B = 1,'
+//@ matches - '//*[@id="variant.A"]/h3' '^A = 0$'
+//@ matches - '//*[@id="variant.B"]/h3' '^B = 1$'
+#[repr(C)]
+pub enum J {
+    A,
+    B,
+}
+
+//@ has 'foo/enum.K.html'
+//@ has - '//*[@class="rust item-decl"]/code' 'A(u32),'
+//@ has - '//*[@class="rust item-decl"]/code' 'B,'
+//@ has - '//*[@id="variant.A"]/h3' 'A(u32)'
+//@ matches - '//*[@id="variant.B"]/h3' '^B$'
+#[repr(C)]
+pub enum K {
+    A(u32),
+    B,
+}
+
+//@ has 'foo/enum.L.html'
+//@ has - '//*[@class="rust item-decl"]/code' 'A = 0,'
+//@ has - '//*[@class="rust item-decl"]/code' 'B = 1,'
+//@ matches - '//*[@id="variant.A"]/h3' '^A = 0$'
+//@ matches - '//*[@id="variant.B"]/h3' '^B = 1$'
+#[repr(u32)]
+pub enum L {
+    A,
+    B,
+}
+
+//@ has 'foo/enum.M.html'
+//@ has - '//*[@class="rust item-decl"]/code' 'A(u32),'
+//@ has - '//*[@class="rust item-decl"]/code' 'B,'
+//@ has - '//*[@id="variant.A"]/h3' 'A(u32)'
+//@ matches - '//*[@id="variant.B"]/h3' '^B$'
+#[repr(u32)]
+pub enum M {
+    A(u32),
+    B,
+}
+
+//@ has 'foo/enum.N.html'
+//@ has - '//*[@class="rust item-decl"]/code' 'A = 0,'
+//@ has - '//*[@class="rust item-decl"]/code' 'B = 1,'
+//@ matches - '//*[@id="variant.A"]/h3' '^A = 0$'
+//@ matches - '//*[@id="variant.B"]/h3' '^B = 1$'
+pub use bar::N;
+
+//@ has 'foo/enum.O.html'
+//@ has - '//*[@class="rust item-decl"]/code' 'A(u32),'
+//@ has - '//*[@class="rust item-decl"]/code' 'B,'
+//@ has - '//*[@id="variant.A"]/h3' 'A(u32)'
+//@ matches - '//*[@id="variant.B"]/h3' '^B$'
+pub use bar::O;
+
+//@ has 'foo/enum.P.html'
+//@ has - '//*[@class="rust item-decl"]/code' 'A = 0,'
+//@ has - '//*[@class="rust item-decl"]/code' 'B = 1,'
+//@ matches - '//*[@id="variant.A"]/h3' '^A = 0$'
+//@ matches - '//*[@id="variant.B"]/h3' '^B = 1$'
+pub use bar::P;
+
+//@ has 'foo/enum.Q.html'
+//@ has - '//*[@class="rust item-decl"]/code' 'A(u32),'
+//@ has - '//*[@class="rust item-decl"]/code' 'B,'
+//@ has - '//*[@id="variant.A"]/h3' 'A(u32)'
+//@ matches - '//*[@id="variant.B"]/h3' '^B$'
+pub use bar::Q;
diff --git a/tests/rustdoc/enum/render-enum-variant-structlike-32395.rs b/tests/rustdoc/enum/render-enum-variant-structlike-32395.rs
new file mode 100644
index 00000000000..d4cefb2911d
--- /dev/null
+++ b/tests/rustdoc/enum/render-enum-variant-structlike-32395.rs
@@ -0,0 +1,18 @@
+//@ aux-build:variant-struct.rs
+//@ build-aux-docs
+//@ ignore-cross-compile
+
+// https://github.com/rust-lang/rust/issues/32395
+#![crate_name="issue_32395"]
+
+//@ has variant_struct/enum.Foo.html
+//@ !hasraw - 'pub qux'
+//@ !hasraw - 'pub(crate) qux'
+//@ !hasraw - 'pub Bar'
+extern crate variant_struct;
+
+//@ has issue_32395/enum.Foo.html
+//@ !hasraw - 'pub qux'
+//@ !hasraw - 'pub(crate) qux'
+//@ !hasraw - 'pub Bar'
+pub use variant_struct::Foo;
diff --git a/tests/rustdoc/enum/strip-enum-variant.no-not-shown.html b/tests/rustdoc/enum/strip-enum-variant.no-not-shown.html
new file mode 100644
index 00000000000..d7a36cc631a
--- /dev/null
+++ b/tests/rustdoc/enum/strip-enum-variant.no-not-shown.html
@@ -0,0 +1 @@
+<ul class="block variant"><li><a href="#variant.Shown" title="Shown">Shown</a></li></ul>
\ No newline at end of file
diff --git a/tests/rustdoc/enum/strip-enum-variant.rs b/tests/rustdoc/enum/strip-enum-variant.rs
new file mode 100644
index 00000000000..9874588ef59
--- /dev/null
+++ b/tests/rustdoc/enum/strip-enum-variant.rs
@@ -0,0 +1,11 @@
+//@ has strip_enum_variant/enum.MyThing.html
+//@ has - '//code' 'Shown'
+//@ !has - '//code' 'NotShown'
+//@ has - '//code' '// some variants omitted'
+// Also check that `NotShown` isn't displayed in the sidebar.
+//@ snapshot no-not-shown - '//*[@class="sidebar-elems"]/section/*[@class="block variant"]'
+pub enum MyThing {
+    Shown,
+    #[doc(hidden)]
+    NotShown,
+}