From 49bcee8997cf0c21f6c85ecb193dd6910fe301e3 Mon Sep 17 00:00:00 2001 From: Pietro Albini Date: Mon, 26 Jul 2021 12:41:43 +0200 Subject: [PATCH 01/10] switch to the stable channel --- src/ci/channel | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ci/channel b/src/ci/channel index 65b2df87f7df3..2bf5ad0447d33 100644 --- a/src/ci/channel +++ b/src/ci/channel @@ -1 +1 @@ -beta +stable From 26210a3558e1bd78c94376d90c5bf9e07d932511 Mon Sep 17 00:00:00 2001 From: Erin Power Date: Mon, 26 Jul 2021 12:45:13 +0200 Subject: [PATCH 02/10] update release notes to 1.54.0 --- RELEASES.md | 143 +++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 129 insertions(+), 14 deletions(-) diff --git a/RELEASES.md b/RELEASES.md index ced712ffb530b..36d6a5276f227 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -1,3 +1,127 @@ +Version 1.54.0 (2021-07-29) +============================ + +Language +----------------------- + +- [You can now use macros for values in built-in attribute macros.][83366] + While a seemingly minor addition on its own, this enables a lot of + powerful functionality when combined correctly. Most notably you can + now include external documentation in your crate by writing the following. + ```rust + #![doc = include_str!("README.md")] + ``` + You can also use this to include auto-generated modules: + ```rust + #[path = concat!(env!("OUT_DIR"), "/generated.rs")] + mod generated; + ``` + +- [You can now cast between unsized slice types (and types which contain + unsized slices) in `const fn`.][85078] +- [You can now use multiple generic lifetimes with `impl Trait` where the + lifetimes don't explicitly outlive another.][84701] In code this means + that you can now have `impl Trait<'a, 'b>` where as before you could + only have `impl Trait<'a, 'b> where 'b: 'a`. + +Compiler +----------------------- + +- [Rustc will now search for custom JSON targets in + `/lib/rustlib//target.json` where `/` is the "sysroot" + directory.][83800] You can find your sysroot directory by running + `rustc --print sysroot`. +- [Added `wasm` as a `target_family` for WebAssembly platforms.][84072] +- [You can now use `#[target_feature]` on safe functions when targeting + WebAssembly platforms.][84988] +- [Improved debugger output for enums on Windows MSVC platforms.][85292] +- [Added tier 3\* support for `bpfel-unknown-none` + and `bpfeb-unknown-none`.][79608] + +\* Refer to Rust's [platform support page][platform-support-doc] for more + information on Rust's tiered platform support. + +Libraries +----------------------- + +- [`panic::panic_any` will now `#[track_caller]`.][85745] +- [Added `OutOfMemory` as a variant of `io::ErrorKind`.][84744] +- [ `proc_macro::Literal` now implements `FromStr`.][84717] +- [The implementations of vendor intrinsics in core::arch have been + significantly refactored.][83278] The main user-visible changes are + a 50% reduction in the size of libcore.rlib and stricter validation + of constant operands passed to intrinsics. The latter is technically + a breaking change, but allows Rust to more closely match the C vendor + intrinsics API. + +Stabilized APIs +--------------- + +- [`BTreeMap::into_keys`] +- [`BTreeMap::into_values`] +- [`HashMap::into_keys`] +- [`HashMap::into_values`] +- [`arch::wasm32`] +- [`VecDeque::binary_search`] +- [`VecDeque::binary_search_by`] +- [`VecDeque::binary_search_by_key`] +- [`VecDeque::partition_point`] + +Cargo +----- + +- [Added the `--prune ` option to `cargo-tree` to remove a package from + the dependency graph.][cargo/9520] +- [Added the `--depth` option to `cargo-tree` to print only to a certain depth + in the tree ][cargo/9499] +- [Added the `no-proc-macro` value to `cargo-tree --edges` to hide procedural + macro dependencies.][cargo/9488] +- [A new environment variable named `CARGO_TARGET_TMPDIR` is available.][cargo/9375] + This variable points to a directory that integration tests and benches + can use as a "scratchpad" for testing filesystem operations. + +Compatibility Notes +------------------- +- [Mixing Option and Result via `?` is no longer permitted in closures for inferred types.][86831] +- [Previously unsound code is no longer permitted where different constructors in branches + could require different lifetimes.][85574] +- As previously mentioned the [`std::arch` instrinsics now uses stricter const checking][83278] + than before and may reject some previously accepted code. +- [`i128` multiplication on Cortex M0+ platforms currently unconditionally causes overflow + when compiled with `codegen-units = 1`.][86063] + +[85574]: https://github.com/rust-lang/rust/issues/85574 +[86831]: https://github.com/rust-lang/rust/issues/86831 +[86063]: https://github.com/rust-lang/rust/issues/86063 +[86831]: https://github.com/rust-lang/rust/issues/86831 +[79608]: https://github.com/rust-lang/rust/pull/79608 +[84988]: https://github.com/rust-lang/rust/pull/84988 +[84701]: https://github.com/rust-lang/rust/pull/84701 +[84072]: https://github.com/rust-lang/rust/pull/84072 +[85745]: https://github.com/rust-lang/rust/pull/85745 +[84744]: https://github.com/rust-lang/rust/pull/84744 +[85078]: https://github.com/rust-lang/rust/pull/85078 +[84717]: https://github.com/rust-lang/rust/pull/84717 +[83800]: https://github.com/rust-lang/rust/pull/83800 +[83366]: https://github.com/rust-lang/rust/pull/83366 +[83278]: https://github.com/rust-lang/rust/pull/83278 +[85292]: https://github.com/rust-lang/rust/pull/85292 +[cargo/9520]: https://github.com/rust-lang/cargo/pull/9520 +[cargo/9499]: https://github.com/rust-lang/cargo/pull/9499 +[cargo/9488]: https://github.com/rust-lang/cargo/pull/9488 +[cargo/9375]: https://github.com/rust-lang/cargo/pull/9375 +[`BTreeMap::into_keys`]: https://doc.rust-lang.org/std/collections/struct.BTreeMap.html#method.into_keys +[`BTreeMap::into_values`]: https://doc.rust-lang.org/std/collections/struct.BTreeMap.html#method.into_values +[`HashMap::into_keys`]: https://doc.rust-lang.org/std/collections/struct.HashMap.html#method.into_keys +[`HashMap::into_values`]: https://doc.rust-lang.org/std/collections/struct.HashMap.html#method.into_values +[`arch::wasm32`]: https://doc.rust-lang.org/core/arch/wasm32/index.html +[`VecDeque::binary_search`]: https://doc.rust-lang.org/std/collections/struct.VecDeque.html#method.binary_search +[`VecDeque::binary_search_by`]: https://doc.rust-lang.org/std/collections/struct.VecDeque.html#method.binary_search_by + +[`VecDeque::binary_search_by_key`]: https://doc.rust-lang.org/std/collections/struct.VecDeque.html#method.binary_search_by_key + +[`VecDeque::partition_point`]: https://doc.rust-lang.org/std/collections/struct.VecDeque.html#method.partition_point + Version 1.53.0 (2021-06-17) ============================ @@ -81,13 +205,6 @@ Stabilised APIs - [`Vec::extend_from_within`] - [`array::from_mut`] - [`array::from_ref`] -- [`char::MAX`] -- [`char::REPLACEMENT_CHARACTER`] -- [`char::UNICODE_VERSION`] -- [`char::decode_utf16`] -- [`char::from_digit`] -- [`char::from_u32_unchecked`] -- [`char::from_u32`] - [`cmp::max_by_key`] - [`cmp::max_by`] - [`cmp::min_by_key`] @@ -120,6 +237,7 @@ Compatibility Notes In particular, this was known to be a problem in the `lexical-core` crate, but they have published fixes for semantic versions 0.4 through 0.7. To update this dependency alone, use `cargo update -p lexical-core`. +- Incremental compilation remains off by default, unless one uses the `RUSTC_FORCE_INCREMENTAL=1` environment variable added in 1.52.1. Internal Only ------------- @@ -156,13 +274,6 @@ related tools. [cargo/9298]: https://github.com/rust-lang/cargo/pull/9298 [cargo/9282]: https://github.com/rust-lang/cargo/pull/9282 [cargo/9392]: https://github.com/rust-lang/cargo/pull/9392 -[`char::MAX`]: https://doc.rust-lang.org/std/primitive.char.html#associatedconstant.MAX -[`char::REPLACEMENT_CHARACTER`]: https://doc.rust-lang.org/std/primitive.char.html#associatedconstant.REPLACEMENT_CHARACTER -[`char::UNICODE_VERSION`]: https://doc.rust-lang.org/std/primitive.char.html#associatedconstant.UNICODE_VERSION -[`char::decode_utf16`]: https://doc.rust-lang.org/std/primitive.char.html#method.decode_utf16 -[`char::from_u32`]: https://doc.rust-lang.org/std/primitive.char.html#method.from_u32 -[`char::from_u32_unchecked`]: https://doc.rust-lang.org/std/primitive.char.html#method.from_u32_unchecked -[`char::from_digit`]: https://doc.rust-lang.org/std/primitive.char.html#method.from_digit [`AtomicBool::fetch_update`]: https://doc.rust-lang.org/std/sync/atomic/struct.AtomicBool.html#method.fetch_update [`AtomicPtr::fetch_update`]: https://doc.rust-lang.org/std/sync/atomic/struct.AtomicPtr.html#method.fetch_update [`BTreeMap::retain`]: https://doc.rust-lang.org/std/collections/struct.BTreeMap.html#method.retain @@ -324,6 +435,7 @@ Compatibility Notes - [Rustc now catches more cases of `pub_use_of_private_extern_crate`][80763] - [Changes in how proc macros handle whitespace may lead to panics when used with older `proc-macro-hack` versions. A `cargo update` should be sufficient to fix this in all cases.][84136] +- [Turn `#[derive]` into a regular macro attribute][79078] [84136]: https://github.com/rust-lang/rust/issues/84136 [80763]: https://github.com/rust-lang/rust/pull/80763 @@ -350,6 +462,7 @@ Compatibility Notes [78429]: https://github.com/rust-lang/rust/pull/78429 [82733]: https://github.com/rust-lang/rust/pull/82733 [82594]: https://github.com/rust-lang/rust/pull/82594 +[79078]: https://github.com/rust-lang/rust/pull/79078 [cargo/9181]: https://github.com/rust-lang/cargo/pull/9181 [`char::MAX`]: https://doc.rust-lang.org/std/primitive.char.html#associatedconstant.MAX [`char::REPLACEMENT_CHARACTER`]: https://doc.rust-lang.org/std/primitive.char.html#associatedconstant.REPLACEMENT_CHARACTER @@ -1760,6 +1873,7 @@ Language - [You can now use `#[repr(transparent)]` on univariant `enum`s.][68122] Meaning that you can create an enum that has the exact layout and ABI of the type it contains. +- [You can now use outer attribute procedural macros on inline modules.][64273] - [There are some *syntax-only* changes:][67131] - `default` is syntactically allowed before items in `trait` definitions. - Items in `impl`s (i.e. `const`s, `type`s, and `fn`s) may syntactically @@ -1821,6 +1935,7 @@ Compatibility Notes [67935]: https://github.com/rust-lang/rust/pull/67935/ [68339]: https://github.com/rust-lang/rust/pull/68339/ [68122]: https://github.com/rust-lang/rust/pull/68122/ +[64273]: https://github.com/rust-lang/rust/pull/64273/ [67712]: https://github.com/rust-lang/rust/pull/67712/ [67887]: https://github.com/rust-lang/rust/pull/67887/ [67131]: https://github.com/rust-lang/rust/pull/67131/ From e722a08eb8b151a34755495e7ca4438b0a46ed81 Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Thu, 15 Jul 2021 22:06:53 +0200 Subject: [PATCH 03/10] Do not hide the sidebar on mobile, move it outside of the viewport instead --- src/librustdoc/html/static/rustdoc.css | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/librustdoc/html/static/rustdoc.css b/src/librustdoc/html/static/rustdoc.css index d8684641a3045..b88e4ac5c28e5 100644 --- a/src/librustdoc/html/static/rustdoc.css +++ b/src/librustdoc/html/static/rustdoc.css @@ -1577,15 +1577,18 @@ details.undocumented[open] > summary::before { display: none; } + /* We do NOT hide this element so that alternative device readers still have this information + available. */ .sidebar-elems { position: fixed; z-index: 1; - left: 0; top: 45px; bottom: 0; + width: 246px; + /* We move the sidebar to the left by its own width so it doesn't appear. */ + left: -246px; overflow-y: auto; border-right: 1px solid; - display: none; } .sidebar > .block.version { @@ -1662,8 +1665,7 @@ details.undocumented[open] > summary::before { } .show-it { - display: block; - width: 246px; + left: 0; } .show-it > .block.items { From 2818e74c38507525938aaa639eb7ad23f0b03efb Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Thu, 15 Jul 2021 22:12:28 +0200 Subject: [PATCH 04/10] Add test for sidebar display value on mobile --- src/test/rustdoc-gui/sidebar-mobile.goml | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 src/test/rustdoc-gui/sidebar-mobile.goml diff --git a/src/test/rustdoc-gui/sidebar-mobile.goml b/src/test/rustdoc-gui/sidebar-mobile.goml new file mode 100644 index 0000000000000..9a1442e48a9ea --- /dev/null +++ b/src/test/rustdoc-gui/sidebar-mobile.goml @@ -0,0 +1,10 @@ +// This test ensure that the sidebar isn't "hidden" on mobile but instead moved out of the viewport. +// This is especially important for devices for "text-first" content (like for users with +// sight issues). +goto: file://|DOC_PATH|/test_docs/struct.Foo.html +// Switching to "mobile view" by reducing the width to 600px. +size: (600, 600) +assert-css: (".sidebar-elems", {"display": "block", "left": "-246px"}) +// Opening the sidebar menu. +click: ".sidebar-menu" +assert-css: (".sidebar-elems", {"display": "block", "left": "0px"}) From 0a297ac47d03588d63ed31b025120e4cb0199930 Mon Sep 17 00:00:00 2001 From: Michael Howell Date: Fri, 16 Jul 2021 21:58:23 -0700 Subject: [PATCH 05/10] Rustdoc accessibility: make the sidebar headers actual headers Part of #87059 Preview it at: https://notriddle.com/notriddle-rustdoc-test/rustdoc-sidebar-header/std/index.html --- src/librustdoc/html/render/context.rs | 4 +- src/librustdoc/html/render/mod.rs | 54 +++++++++++++------------- src/librustdoc/html/static/rustdoc.css | 5 +++ 3 files changed, 34 insertions(+), 29 deletions(-) diff --git a/src/librustdoc/html/render/context.rs b/src/librustdoc/html/render/context.rs index 1898f5feed2cd..84c5b5dd60466 100644 --- a/src/librustdoc/html/render/context.rs +++ b/src/librustdoc/html/render/context.rs @@ -527,7 +527,7 @@ impl<'tcx> FormatRenderer<'tcx> for Context<'tcx> { }; let sidebar = if let Some(ref version) = self.cache.crate_version { format!( - "

Crate {}

\ + "

Crate {}

\
\

Version {}

\
\ @@ -554,7 +554,7 @@ impl<'tcx> FormatRenderer<'tcx> for Context<'tcx> { page.root_path = "./"; let mut style_files = self.shared.style_files.clone(); - let sidebar = "

Settings

"; + let sidebar = "

Settings

"; style_files.push(StylePath { path: PathBuf::from("settings.css"), disabled: false }); let v = layout::render( &self.shared.layout, diff --git a/src/librustdoc/html/render/mod.rs b/src/librustdoc/html/render/mod.rs index 53112c87fdc61..5022ed9fc7b37 100644 --- a/src/librustdoc/html/render/mod.rs +++ b/src/librustdoc/html/render/mod.rs @@ -1690,7 +1690,7 @@ fn print_sidebar(cx: &Context<'_>, it: &clean::Item, buffer: &mut Buffer) { { write!( buffer, - "

{}{}

", + "

{}{}

", match *it.kind { clean::StructItem(..) => "Struct ", clean::TraitItem(..) => "Trait ", @@ -1753,7 +1753,7 @@ fn print_sidebar(cx: &Context<'_>, it: &clean::Item, buffer: &mut Buffer) { // to navigate the documentation (though slightly inefficiently). if !it.is_mod() { - buffer.write_str("

Other items in
"); + buffer.write_str("

Other items in
"); for (i, name) in cx.current.iter().take(parentlen).enumerate() { if i > 0 { buffer.write_str("::"); @@ -1765,7 +1765,7 @@ fn print_sidebar(cx: &Context<'_>, it: &clean::Item, buffer: &mut Buffer) { *name ); } - buffer.write_str("

"); + buffer.write_str("

"); } // Sidebar refers to the enclosing module, not this module. @@ -1876,7 +1876,7 @@ fn sidebar_assoc_items(cx: &Context<'_>, out: &mut Buffer, it: &clean::Item) { ret.sort(); out.push_str( - "Methods\ + "

Methods

\
", ); for line in ret { @@ -1941,24 +1941,24 @@ fn sidebar_assoc_items(cx: &Context<'_>, out: &mut Buffer, it: &clean::Item) { if !concrete_format.is_empty() { out.push_str( - "\ - Trait Implementations", + "

\ + Trait Implementations

", ); write_sidebar_links(out, concrete_format); } if !synthetic_format.is_empty() { out.push_str( - "\ - Auto Trait Implementations", + "

\ + Auto Trait Implementations

", ); write_sidebar_links(out, synthetic_format); } if !blanket_format.is_empty() { out.push_str( - "\ - Blanket Implementations", + "

\ + Blanket Implementations

", ); write_sidebar_links(out, blanket_format); } @@ -2010,7 +2010,7 @@ fn sidebar_deref_methods(cx: &Context<'_>, out: &mut Buffer, impl_: &Impl, v: &V if !ret.is_empty() { write!( out, - "Methods from {}<Target={}>", + "

Methods from {}<Target={}>

", Escape(&format!("{:#}", impl_.inner_impl().trait_.as_ref().unwrap().print(cx))), Escape(&format!("{:#}", real_target.print(cx))), ); @@ -2046,7 +2046,7 @@ fn sidebar_struct(cx: &Context<'_>, buf: &mut Buffer, it: &clean::Item, s: &clea if !fields.is_empty() { if let CtorKind::Fictive = s.struct_type { sidebar.push_str( - "Fields\ + "

Fields

\
", ); @@ -2123,8 +2123,8 @@ fn sidebar_trait(cx: &Context<'_>, buf: &mut Buffer, it: &clean::Item, t: &clean print_sidebar_section( buf, &t.items, - "\ - Associated Types
", + "

\ + Associated Types

", |m| m.is_associated_type(), |out, sym| write!(out, "{0}", sym), "
", @@ -2133,8 +2133,8 @@ fn sidebar_trait(cx: &Context<'_>, buf: &mut Buffer, it: &clean::Item, t: &clean print_sidebar_section( buf, &t.items, - "\ - Associated Constants
", + "

\ + Associated Constants

", |m| m.is_associated_const(), |out, sym| write!(out, "{0}", sym), "
", @@ -2143,8 +2143,8 @@ fn sidebar_trait(cx: &Context<'_>, buf: &mut Buffer, it: &clean::Item, t: &clean print_sidebar_section( buf, &t.items, - "\ - Required Methods
", + "

\ + Required Methods

", |m| m.is_ty_method(), |out, sym| write!(out, "{0}", sym), "
", @@ -2153,8 +2153,8 @@ fn sidebar_trait(cx: &Context<'_>, buf: &mut Buffer, it: &clean::Item, t: &clean print_sidebar_section( buf, &t.items, - "\ - Provided Methods
", + "

\ + Provided Methods

", |m| m.is_method(), |out, sym| write!(out, "{0}", sym), "
", @@ -2176,8 +2176,8 @@ fn sidebar_trait(cx: &Context<'_>, buf: &mut Buffer, it: &clean::Item, t: &clean if !res.is_empty() { res.sort(); buf.push_str( - "\ - Implementations on Foreign Types\ + "

\ + Implementations on Foreign Types

\
", ); for (name, id) in res.into_iter() { @@ -2189,11 +2189,11 @@ fn sidebar_trait(cx: &Context<'_>, buf: &mut Buffer, it: &clean::Item, t: &clean sidebar_assoc_items(cx, buf, it); - buf.push_str("Implementors"); + buf.push_str("

Implementors

"); if t.is_auto { buf.push_str( - "Auto Implementors", + "

Auto Implementors

", ); } @@ -2236,7 +2236,7 @@ fn sidebar_union(cx: &Context<'_>, buf: &mut Buffer, it: &clean::Item, u: &clean if !fields.is_empty() { sidebar.push_str( - "Fields\ + "

Fields

\
", ); @@ -2268,7 +2268,7 @@ fn sidebar_enum(cx: &Context<'_>, buf: &mut Buffer, it: &clean::Item, e: &clean: if !variants.is_empty() { variants.sort_unstable(); sidebar.push_str(&format!( - "Variants\ + "

Variants

\
{}
", variants.join(""), )); diff --git a/src/librustdoc/html/static/rustdoc.css b/src/librustdoc/html/static/rustdoc.css index b88e4ac5c28e5..e514a965b2cf4 100644 --- a/src/librustdoc/html/static/rustdoc.css +++ b/src/librustdoc/html/static/rustdoc.css @@ -293,9 +293,12 @@ nav.sub { .sidebar .location { border: 1px solid; font-size: 17px; + font-weight: inherit; margin: 30px 10px 20px 10px; text-align: center; word-wrap: break-word; + font-weight: inherit; + padding: 0; } .sidebar .version { @@ -348,6 +351,8 @@ nav.sub { text-align: center; font-size: 17px; margin-bottom: 5px; + font-weight: inherit; + padding: 0; } .sidebar-links { From e64f99409926b70cd1bb5feb3a22da1d21d26a58 Mon Sep 17 00:00:00 2001 From: Michael Howell Date: Fri, 16 Jul 2021 22:00:22 -0700 Subject: [PATCH 06/10] Remove redundant CSS --- src/librustdoc/html/static/rustdoc.css | 1 - 1 file changed, 1 deletion(-) diff --git a/src/librustdoc/html/static/rustdoc.css b/src/librustdoc/html/static/rustdoc.css index e514a965b2cf4..156cbfdd2a78c 100644 --- a/src/librustdoc/html/static/rustdoc.css +++ b/src/librustdoc/html/static/rustdoc.css @@ -293,7 +293,6 @@ nav.sub { .sidebar .location { border: 1px solid; font-size: 17px; - font-weight: inherit; margin: 30px 10px 20px 10px; text-align: center; word-wrap: break-word; From 1e01a14b0bdfcb3b2addd847d667300fb2f032b6 Mon Sep 17 00:00:00 2001 From: Michael Howell Date: Sat, 17 Jul 2021 09:45:07 -0700 Subject: [PATCH 07/10] Fix test cases for header titles in sidebar --- src/test/rustdoc/deref-typedef.rs | 2 +- src/test/rustdoc/negative-impl-sidebar.rs | 2 +- src/test/rustdoc/sidebar-items.rs | 14 +++++++------- src/test/rustdoc/sidebar-links-to-foreign-impl.rs | 2 +- src/test/rustdoc/typedef.rs | 2 +- 5 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/test/rustdoc/deref-typedef.rs b/src/test/rustdoc/deref-typedef.rs index 3fc48b46d7410..d42ff384b29b8 100644 --- a/src/test/rustdoc/deref-typedef.rs +++ b/src/test/rustdoc/deref-typedef.rs @@ -6,7 +6,7 @@ // @has '-' '//*[@class="impl-items"]//*[@id="method.foo_b"]' 'pub fn foo_b(&self)' // @has '-' '//*[@class="impl-items"]//*[@id="method.foo_c"]' 'pub fn foo_c(&self)' // @has '-' '//*[@class="impl-items"]//*[@id="method.foo_j"]' 'pub fn foo_j(&self)' -// @has '-' '//*[@class="sidebar-title"][@href="#deref-methods"]' 'Methods from Deref' +// @has '-' '//*[@class="sidebar-title"]/a[@href="#deref-methods"]' 'Methods from Deref' // @has '-' '//*[@class="sidebar-links"]/a[@href="#method.foo_a"]' 'foo_a' // @has '-' '//*[@class="sidebar-links"]/a[@href="#method.foo_b"]' 'foo_b' // @has '-' '//*[@class="sidebar-links"]/a[@href="#method.foo_c"]' 'foo_c' diff --git a/src/test/rustdoc/negative-impl-sidebar.rs b/src/test/rustdoc/negative-impl-sidebar.rs index 3414d9540776a..d63ab346045ee 100644 --- a/src/test/rustdoc/negative-impl-sidebar.rs +++ b/src/test/rustdoc/negative-impl-sidebar.rs @@ -4,6 +4,6 @@ pub struct Foo; // @has foo/struct.Foo.html -// @has - '//*[@class="sidebar-title"][@href="#trait-implementations"]' 'Trait Implementations' +// @has - '//*[@class="sidebar-title"]/a[@href="#trait-implementations"]' 'Trait Implementations' // @has - '//*[@class="sidebar-links"]/a' '!Sync' impl !Sync for Foo {} diff --git a/src/test/rustdoc/sidebar-items.rs b/src/test/rustdoc/sidebar-items.rs index 3ba6dbacc8d32..5da660b4df304 100644 --- a/src/test/rustdoc/sidebar-items.rs +++ b/src/test/rustdoc/sidebar-items.rs @@ -1,13 +1,13 @@ #![crate_name = "foo"] // @has foo/trait.Foo.html -// @has - '//*[@class="sidebar-title"][@href="#required-methods"]' 'Required Methods' +// @has - '//*[@class="sidebar-title"]/a[@href="#required-methods"]' 'Required Methods' // @has - '//*[@class="sidebar-links"]/a' 'bar' -// @has - '//*[@class="sidebar-title"][@href="#provided-methods"]' 'Provided Methods' +// @has - '//*[@class="sidebar-title"]/a[@href="#provided-methods"]' 'Provided Methods' // @has - '//*[@class="sidebar-links"]/a' 'foo' -// @has - '//*[@class="sidebar-title"][@href="#associated-const"]' 'Associated Constants' +// @has - '//*[@class="sidebar-title"]/a[@href="#associated-const"]' 'Associated Constants' // @has - '//*[@class="sidebar-links"]/a' 'BAR' -// @has - '//*[@class="sidebar-title"][@href="#associated-types"]' 'Associated Types' +// @has - '//*[@class="sidebar-title"]/a[@href="#associated-types"]' 'Associated Types' // @has - '//*[@class="sidebar-links"]/a' 'Output' pub trait Foo { const BAR: u32 = 0; @@ -18,7 +18,7 @@ pub trait Foo { } // @has foo/struct.Bar.html -// @has - '//*[@class="sidebar-title"][@href="#fields"]' 'Fields' +// @has - '//*[@class="sidebar-title"]/a[@href="#fields"]' 'Fields' // @has - '//*[@class="sidebar-links"]/a[@href="#structfield.f"]' 'f' // @has - '//*[@class="sidebar-links"]/a[@href="#structfield.u"]' 'u' // @!has - '//*[@class="sidebar-links"]/a' 'waza' @@ -29,7 +29,7 @@ pub struct Bar { } // @has foo/enum.En.html -// @has - '//*[@class="sidebar-title"][@href="#variants"]' 'Variants' +// @has - '//*[@class="sidebar-title"]/a[@href="#variants"]' 'Variants' // @has - '//*[@class="sidebar-links"]/a' 'foo' // @has - '//*[@class="sidebar-links"]/a' 'bar' pub enum En { @@ -38,7 +38,7 @@ pub enum En { } // @has foo/union.MyUnion.html -// @has - '//*[@class="sidebar-title"][@href="#fields"]' 'Fields' +// @has - '//*[@class="sidebar-title"]/a[@href="#fields"]' 'Fields' // @has - '//*[@class="sidebar-links"]/a[@href="#structfield.f1"]' 'f1' // @has - '//*[@class="sidebar-links"]/a[@href="#structfield.f2"]' 'f2' // @!has - '//*[@class="sidebar-links"]/a' 'waza' diff --git a/src/test/rustdoc/sidebar-links-to-foreign-impl.rs b/src/test/rustdoc/sidebar-links-to-foreign-impl.rs index d256fbe8de08a..e73c5b4f640cf 100644 --- a/src/test/rustdoc/sidebar-links-to-foreign-impl.rs +++ b/src/test/rustdoc/sidebar-links-to-foreign-impl.rs @@ -3,7 +3,7 @@ #![crate_name = "foo"] // @has foo/trait.Foo.html -// @has - '//*[@class="sidebar-title"][@href="#foreign-impls"]' 'Implementations on Foreign Types' +// @has - '//*[@class="sidebar-title"]/a[@href="#foreign-impls"]' 'Implementations on Foreign Types' // @has - '//h2[@id="foreign-impls"]' 'Implementations on Foreign Types' // @has - '//*[@class="sidebar-links"]/a[@href="#impl-Foo-for-u32"]' 'u32' // @has - '//div[@id="impl-Foo-for-u32"]//code' 'impl Foo for u32' diff --git a/src/test/rustdoc/typedef.rs b/src/test/rustdoc/typedef.rs index 21a7fdda7691d..479cd91a9dc60 100644 --- a/src/test/rustdoc/typedef.rs +++ b/src/test/rustdoc/typedef.rs @@ -12,7 +12,7 @@ impl MyStruct { // @has - '//*[@class="impl has-srclink"]//code' 'impl MyAlias' // @has - '//*[@class="impl has-srclink"]//code' 'impl MyTrait for MyAlias' // @has - 'Alias docstring' -// @has - '//*[@class="sidebar"]//p[@class="location"]' 'Type Definition MyAlias' +// @has - '//*[@class="sidebar"]//*[@class="location"]' 'Type Definition MyAlias' // @has - '//*[@class="sidebar"]//a[@href="#implementations"]' 'Methods' // @has - '//*[@class="sidebar"]//a[@href="#trait-implementations"]' 'Trait Implementations' /// Alias docstring From 963e820023abd46973e08fb55c091e84bfdac324 Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Wed, 14 Jul 2021 16:28:15 +0200 Subject: [PATCH 08/10] Update browser-ui-test package version --- src/ci/docker/host-x86_64/x86_64-gnu-tools/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ci/docker/host-x86_64/x86_64-gnu-tools/Dockerfile b/src/ci/docker/host-x86_64/x86_64-gnu-tools/Dockerfile index 605d988dad712..ee7c223ba578b 100644 --- a/src/ci/docker/host-x86_64/x86_64-gnu-tools/Dockerfile +++ b/src/ci/docker/host-x86_64/x86_64-gnu-tools/Dockerfile @@ -71,7 +71,7 @@ ENV PATH="/node-v14.4.0-linux-x64/bin:${PATH}" # https://github.com/puppeteer/puppeteer/issues/375 # # We also specify the version in case we need to update it to go around cache limitations. -RUN npm install -g browser-ui-test@0.2.12 --unsafe-perm=true +RUN npm install -g browser-ui-test@0.4.2 --unsafe-perm=true ENV RUST_CONFIGURE_ARGS \ --build=x86_64-unknown-linux-gnu \ From 22bbbe80b2f3b79caa9f268b29f235e2fad0f3f1 Mon Sep 17 00:00:00 2001 From: bors Date: Sun, 25 Jul 2021 21:41:57 +0000 Subject: [PATCH 09/10] Rustdoc accessibility: use real headers for doc items Part of #87059 Partially reverts #84703 Heavily modified for beta backport needs. --- src/librustdoc/html/render/mod.rs | 33 +++++----- src/librustdoc/html/render/print_item.rs | 5 +- src/librustdoc/html/static/main.js | 4 +- src/librustdoc/html/static/rustdoc.css | 66 +++++++++++++++---- src/librustdoc/html/static/themes/ayu.css | 3 +- src/librustdoc/html/static/themes/dark.css | 3 +- src/librustdoc/html/static/themes/light.css | 3 +- .../rustdoc-gui/src/settings/.package-cache | 0 src/test/rustdoc/assoc-consts.rs | 4 +- src/test/rustdoc/assoc-types.rs | 6 +- src/test/rustdoc/async-fn.rs | 6 +- src/test/rustdoc/blanket-reexport-item.rs | 2 +- src/test/rustdoc/const-display.rs | 8 ++- src/test/rustdoc/const-generics/add-impl.rs | 2 +- .../const-generics/const-generics-docs.rs | 12 ++-- src/test/rustdoc/const-generics/const-impl.rs | 10 +-- .../const-equate-pred.rs | 2 +- src/test/rustdoc/const.rs | 2 +- .../rustdoc/duplicate_impls/issue-33054.rs | 6 +- src/test/rustdoc/extern-impl-trait.rs | 4 +- src/test/rustdoc/extern-impl.rs | 16 ++--- src/test/rustdoc/extern-method.rs | 8 +-- src/test/rustdoc/generic-impl.rs | 4 +- src/test/rustdoc/impl-disambiguation.rs | 10 +-- src/test/rustdoc/impl-parts.rs | 4 +- src/test/rustdoc/inline_cross/impl_trait.rs | 4 +- .../rustdoc/inline_cross/issue-31948-1.rs | 20 +++--- .../rustdoc/inline_cross/issue-31948-2.rs | 12 ++-- src/test/rustdoc/inline_cross/issue-31948.rs | 20 +++--- src/test/rustdoc/inline_cross/issue-32881.rs | 4 +- src/test/rustdoc/inline_cross/issue-33113.rs | 4 +- src/test/rustdoc/inline_cross/trait-vis.rs | 2 +- src/test/rustdoc/inline_local/trait-vis.rs | 4 +- src/test/rustdoc/issue-19190.rs | 4 +- src/test/rustdoc/issue-25001.rs | 18 ++--- src/test/rustdoc/issue-27362.rs | 2 +- src/test/rustdoc/issue-29503.rs | 2 +- src/test/rustdoc/issue-33592.rs | 4 +- src/test/rustdoc/issue-35169-2.rs | 14 ++-- src/test/rustdoc/issue-35169.rs | 14 ++-- src/test/rustdoc/issue-46727.rs | 2 +- src/test/rustdoc/issue-50159.rs | 4 +- src/test/rustdoc/issue-51236.rs | 2 +- src/test/rustdoc/issue-53689.rs | 2 +- src/test/rustdoc/issue-54705.rs | 4 +- src/test/rustdoc/issue-55321.rs | 8 +-- src/test/rustdoc/issue-56822.rs | 2 +- src/test/rustdoc/issue-60726.rs | 4 +- src/test/rustdoc/issue-75588.rs | 4 +- .../issue-80233-normalize-auto-trait.rs | 2 +- .../issue-82465-asref-for-and-of-local.rs | 4 +- src/test/rustdoc/negative-impl.rs | 4 +- src/test/rustdoc/primitive-generic-impl.rs | 2 +- .../rustdoc/sidebar-links-to-foreign-impl.rs | 4 +- src/test/rustdoc/sized_trait.rs | 2 +- src/test/rustdoc/src-links-auto-impls.rs | 12 ++-- src/test/rustdoc/synthetic_auto/basic.rs | 4 +- src/test/rustdoc/synthetic_auto/complex.rs | 2 +- .../rustdoc/synthetic_auto/crate-local.rs | 6 +- src/test/rustdoc/synthetic_auto/lifetimes.rs | 4 +- src/test/rustdoc/synthetic_auto/manual.rs | 4 +- src/test/rustdoc/synthetic_auto/negative.rs | 4 +- src/test/rustdoc/synthetic_auto/nested.rs | 4 +- .../rustdoc/synthetic_auto/no-redundancy.rs | 2 +- src/test/rustdoc/synthetic_auto/overflow.rs | 2 +- src/test/rustdoc/synthetic_auto/project.rs | 4 +- .../synthetic_auto/self-referential.rs | 2 +- .../rustdoc/synthetic_auto/static-region.rs | 2 +- src/test/rustdoc/toggle-method.rs | 4 +- src/test/rustdoc/toggle-trait-fn.rs | 8 +-- src/test/rustdoc/trait-impl.rs | 2 +- src/test/rustdoc/traits-in-bodies.rs | 6 +- src/test/rustdoc/typedef.rs | 4 +- src/test/rustdoc/visibility.rs | 12 ++-- src/test/rustdoc/where.rs | 10 +-- 75 files changed, 271 insertions(+), 228 deletions(-) create mode 100644 src/test/rustdoc-gui/src/settings/.package-cache diff --git a/src/librustdoc/html/render/mod.rs b/src/librustdoc/html/render/mod.rs index 5022ed9fc7b37..0b14c327e4723 100644 --- a/src/librustdoc/html/render/mod.rs +++ b/src/librustdoc/html/render/mod.rs @@ -1214,7 +1214,7 @@ fn notable_traits_decl(decl: &clean::FnDecl, cx: &Context<'_>) -> String { if out.is_empty() { write!( &mut out, - "

Notable traits for {}

\ + "
Notable traits for {}
\ ", impl_.for_.print(cx) ); @@ -1370,7 +1370,7 @@ fn render_impl( "
", id, item_type, in_trait_class, ); - w.write_str(""); + w.write_str("

"); render_assoc_item( w, item, @@ -1378,7 +1378,7 @@ fn render_impl( ItemType::Impl, cx, ); - w.write_str(""); + w.write_str("

"); render_stability_since_raw( w, item.stable_since(tcx).as_deref(), @@ -1396,9 +1396,10 @@ fn render_impl( let id = cx.derive_id(source_id.clone()); write!( w, - "
", + "
", id, item_type, in_trait_class ); + w.write_str("

"); assoc_type( w, item, @@ -1408,7 +1409,7 @@ fn render_impl( "", cx, ); - w.write_str(""); + w.write_str("

"); write!(w, "", id); w.write_str("
"); } @@ -1417,9 +1418,10 @@ fn render_impl( let id = cx.derive_id(source_id.clone()); write!( w, - "
", + "
", id, item_type, in_trait_class ); + w.write_str("

"); assoc_const( w, item, @@ -1429,7 +1431,7 @@ fn render_impl( "", cx, ); - w.write_str(""); + w.write_str("

"); render_stability_since_raw( w, item.stable_since(tcx).as_deref(), @@ -1444,7 +1446,8 @@ fn render_impl( clean::AssocTypeItem(ref bounds, ref default) => { let source_id = format!("{}.{}", item_type, name); let id = cx.derive_id(source_id.clone()); - write!(w, "
", id, item_type, in_trait_class,); + write!(w, "
", id, item_type, in_trait_class,); + w.write_str("

"); assoc_type( w, item, @@ -1454,7 +1457,7 @@ fn render_impl( "", cx, ); - w.write_str(""); + w.write_str("

"); write!(w, "", id); w.write_str("
"); } @@ -1638,12 +1641,8 @@ fn render_impl_summary( format!(" data-aliases=\"{}\"", aliases.join(",")) }; if let Some(use_absolute) = use_absolute { - write!( - w, - "
\ - ", - id, aliases - ); + write!(w, "
", id, aliases); + write!(w, "

"); write!(w, "{}", i.inner_impl().print(use_absolute, cx)); if show_def_docs { for it in &i.inner_impl().items { @@ -1654,12 +1653,12 @@ fn render_impl_summary( } } } - w.write_str(""); + w.write_str("

"); } else { write!( w, "
\ - {}", +

{}

", id, aliases, i.inner_impl().print(false, cx) diff --git a/src/librustdoc/html/render/print_item.rs b/src/librustdoc/html/render/print_item.rs index 04464b622d7a3..aef516e33354d 100644 --- a/src/librustdoc/html/render/print_item.rs +++ b/src/librustdoc/html/render/print_item.rs @@ -585,9 +585,10 @@ fn item_trait(w: &mut Buffer, cx: &Context<'_>, it: &clean::Item, t: &clean::Tra if toggled { write!(w, "
"); } - write!(w, "
", id); + write!(w, "
", id); + write!(w, "

"); render_assoc_item(w, m, AssocItemLink::Anchor(Some(&id)), ItemType::Impl, cx); - w.write_str(""); + w.write_str("

"); render_stability_since(w, m, t, cx.tcx()); write_srclink(cx, m, w); w.write_str("
"); diff --git a/src/librustdoc/html/static/main.js b/src/librustdoc/html/static/main.js index 1a15a444a701a..fe1ce2e8b5c30 100644 --- a/src/librustdoc/html/static/main.js +++ b/src/librustdoc/html/static/main.js @@ -703,8 +703,10 @@ function hideThemeButtonState() { } } - var code = document.createElement("code"); + var code = document.createElement("h3"); code.innerHTML = struct.text; + addClass(code, "code-header"); + addClass(code, "in-band"); onEachLazy(code.getElementsByTagName("a"), function(elem) { var href = elem.getAttribute("href"); diff --git a/src/librustdoc/html/static/rustdoc.css b/src/librustdoc/html/static/rustdoc.css index 156cbfdd2a78c..f801ef09c503f 100644 --- a/src/librustdoc/html/static/rustdoc.css +++ b/src/librustdoc/html/static/rustdoc.css @@ -134,12 +134,25 @@ h1.fqn { h1.fqn > .in-band > a:hover { text-decoration: underline; } -h2, h3, h4 { +#main > h2, #main > h3, #main > h4 { border-bottom: 1px solid; } -.impl, .method, -.type:not(.container-rustdoc), .associatedconstant, -.associatedtype { +h3.code-header, h4.code-header { + font-size: 1em; + font-weight: 600; + border: none; + padding: 0; + margin: 0; +} +.impl, +.impl-items .method, +.methods .method, +.impl-items .type, +.methods .type, +.impl-items .associatedconstant, +.methods .associatedconstant, +.impl-items .associatedtype, +.methods .associatedtype { flex-basis: 100%; font-weight: 600; margin-top: 16px; @@ -190,7 +203,34 @@ summary { outline: none; } -code, pre, a.test-arrow { +/* Fix some style changes due to normalize.css 8 */ + +td, +th { + padding: 0; +} + +table { + border-collapse: collapse; +} + +button, +input, +optgroup, +select, +textarea { + color: inherit; + font: inherit; + margin: 0; +} + +/* end tweaks for normalize.css 8 */ + +details:not(.rustdoc-toggle) summary { + margin-bottom: .6em; +} + +code, pre, a.test-arrow, .code-header { font-family: "Source Code Pro", monospace; } .docblock code, .docblock-short code { @@ -474,9 +514,10 @@ nav.sub { font-weight: normal; } -.method > code, .trait-impl > code, .invisible > code { +.method > .code-header, .trait-impl > .code-header, .invisible > .code-header { max-width: calc(100% - 41px); display: block; + flex-grow: 1; } .invisible { @@ -490,7 +531,7 @@ nav.sub { padding: 0px; } -.in-band > code { +.in-band > code, .in-band > .code-header { display: inline-block; } @@ -585,7 +626,7 @@ nav.sub { .content .item-info { position: relative; margin-left: 33px; - margin-top: -13px; + margin-top: -6px; } .sub-variant > div > .item-info { @@ -596,7 +637,7 @@ nav.sub { content: '⬑'; font-size: 25px; position: absolute; - top: -6px; + top: 0px; left: -19px; } @@ -690,7 +731,7 @@ a { } .invisible > .srclink, -.method > code + .srclink { +.method > .code-header + .srclink { position: absolute; top: 0; right: 0; @@ -912,7 +953,7 @@ body.blur > :not(#help) { .impl-items .since, .impl .since, .methods .since { flex-grow: 0; padding-left: 12px; - padding-right: 2px; + padding-right: 6px; position: initial; } @@ -1045,8 +1086,7 @@ a.test-arrow:hover{ display: block; } - -:target > code { +:target > code, :target > .code-header { opacity: 1; } diff --git a/src/librustdoc/html/static/themes/ayu.css b/src/librustdoc/html/static/themes/ayu.css index d220d8708a123..1fc648d76b925 100644 --- a/src/librustdoc/html/static/themes/ayu.css +++ b/src/librustdoc/html/static/themes/ayu.css @@ -133,7 +133,6 @@ pre, .rustdoc.source .example-wrap { color: #708090; background-color: rgba(255, 236, 164, 0.06); padding-right: 4px; - border-right: 1px solid #ffb44c; } .docblock h1, .docblock h2, .docblock h3, .docblock h4, .docblock h5 { @@ -334,7 +333,7 @@ a.test-arrow:hover { color: #999; } -:target > code, :target > .in-band { +:target, :target > * { background: rgba(255, 236, 164, 0.06); border-right: 3px solid rgba(255, 180, 76, 0.85); } diff --git a/src/librustdoc/html/static/themes/dark.css b/src/librustdoc/html/static/themes/dark.css index 6385a763f2ef7..3105a99de1e9e 100644 --- a/src/librustdoc/html/static/themes/dark.css +++ b/src/librustdoc/html/static/themes/dark.css @@ -282,9 +282,8 @@ a.test-arrow:hover{ color: #999; } -:target > code, :target > .in-band { +:target, :target > * { background-color: #494a3d; - border-right: 3px solid #bb7410; } pre.compile_fail { diff --git a/src/librustdoc/html/static/themes/light.css b/src/librustdoc/html/static/themes/light.css index c19d5bfc317f7..10fde92dcb8c0 100644 --- a/src/librustdoc/html/static/themes/light.css +++ b/src/librustdoc/html/static/themes/light.css @@ -275,9 +275,8 @@ a.test-arrow:hover{ color: #999; } -:target > code, :target > .in-band { +:target, :target > * { background: #FDFFD3; - border-right: 3px solid #ffb44c; } pre.compile_fail { diff --git a/src/test/rustdoc-gui/src/settings/.package-cache b/src/test/rustdoc-gui/src/settings/.package-cache new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/src/test/rustdoc/assoc-consts.rs b/src/test/rustdoc/assoc-consts.rs index a3dd166e65171..ff7fd66391628 100644 --- a/src/test/rustdoc/assoc-consts.rs +++ b/src/test/rustdoc/assoc-consts.rs @@ -13,7 +13,7 @@ pub trait Foo { pub struct Bar; impl Foo for Bar { - // @has assoc_consts/struct.Bar.html '//code' 'impl Foo for Bar' + // @has assoc_consts/struct.Bar.html '//h3[@class="code-header in-band"]' 'impl Foo for Bar' // @has - '//*[@id="associatedconstant.FOO"]' 'const FOO: usize' const FOO: usize = 12; // @has - '//*[@id="associatedconstant.FOO_NO_DEFAULT"]' 'const FOO_NO_DEFAULT: bool' @@ -77,7 +77,7 @@ pub trait Qux { const QUX_DEFAULT2: u32 = 3; } -// @has assoc_consts/struct.Bar.html '//code' 'impl Qux for Bar' +// @has assoc_consts/struct.Bar.html '//h3[@class="code-header in-band"]' 'impl Qux for Bar' impl Qux for Bar { // @has - '//*[@id="associatedconstant.QUX0"]' 'const QUX0: u8' // @has - '//*[@class="docblock"]' "Docs for QUX0 in trait." diff --git a/src/test/rustdoc/assoc-types.rs b/src/test/rustdoc/assoc-types.rs index 8fda171002ba0..d9e4ffab1c7d5 100644 --- a/src/test/rustdoc/assoc-types.rs +++ b/src/test/rustdoc/assoc-types.rs @@ -2,11 +2,11 @@ // @has assoc_types/trait.Index.html pub trait Index { - // @has - '//*[@id="associatedtype.Output"]//code' 'type Output: ?Sized' + // @has - '//*[@id="associatedtype.Output"]//h4[@class="code-header"]' 'type Output: ?Sized' type Output: ?Sized; - // @has - '//*[@id="tymethod.index"]//code' \ + // @has - '//*[@id="tymethod.index"]//h4[@class="code-header"]' \ // "fn index<'a>(&'a self, index: I) -> &'a Self::Output" - // @has - '//*[@id="tymethod.index"]//code//a[@href="trait.Index.html#associatedtype.Output"]' \ + // @has - '//*[@id="tymethod.index"]//h4[@class="code-header"]//a[@href="trait.Index.html#associatedtype.Output"]' \ // "Output" fn index<'a>(&'a self, index: I) -> &'a Self::Output; } diff --git a/src/test/rustdoc/async-fn.rs b/src/test/rustdoc/async-fn.rs index 9f95d9a994b17..6d85171edf784 100644 --- a/src/test/rustdoc/async-fn.rs +++ b/src/test/rustdoc/async-fn.rs @@ -35,9 +35,9 @@ pub async fn quux() -> impl Bar { } // @has async_fn/struct.Foo.html -// @matches - '//code' 'pub async fn f\(\)$' -// @matches - '//code' 'pub async unsafe fn g\(\)$' -// @matches - '//code' 'pub async fn mut_self\(self, first: usize\)$' +// @matches - '//h4[@class="code-header"]' 'pub async fn f\(\)$' +// @matches - '//h4[@class="code-header"]' 'pub async unsafe fn g\(\)$' +// @matches - '//h4[@class="code-header"]' 'pub async fn mut_self\(self, first: usize\)$' pub struct Foo; impl Foo { diff --git a/src/test/rustdoc/blanket-reexport-item.rs b/src/test/rustdoc/blanket-reexport-item.rs index 6f0c15cb5aca6..b934d84a9f616 100644 --- a/src/test/rustdoc/blanket-reexport-item.rs +++ b/src/test/rustdoc/blanket-reexport-item.rs @@ -1,6 +1,6 @@ #![crate_name = "foo"] -// @has foo/struct.S.html '//div[@id="impl-Into%3CU%3E"]//code' 'impl Into for T' +// @has foo/struct.S.html '//div[@id="impl-Into%3CU%3E"]//h3[@class="code-header in-band"]' 'impl Into for T' pub struct S2 {} mod m { pub struct S {} diff --git a/src/test/rustdoc/const-display.rs b/src/test/rustdoc/const-display.rs index 2761f92ef5712..be5ae93392beb 100644 --- a/src/test/rustdoc/const-display.rs +++ b/src/test/rustdoc/const-display.rs @@ -38,12 +38,16 @@ pub const unsafe fn bar_not_gated() -> u32 { 42 } pub struct Foo; impl Foo { - // @has 'foo/struct.Foo.html' '//div[@id="method.gated"]/code' 'pub unsafe fn gated() -> u32' + // @has 'foo/struct.Foo.html' '//div[@id="method.gated"]/h4[@class="code-header"]' 'pub fn gated() -> u32' + #[stable(feature = "rust1", since = "1.0.0")] + #[rustc_const_unstable(feature="foo", issue = "none")] + pub const fn gated() -> u32 { 42 } + #[stable(feature = "rust1", since = "1.0.0")] #[rustc_const_unstable(feature="foo", issue = "none")] pub const unsafe fn gated() -> u32 { 42 } - // @has 'foo/struct.Foo.html' '//div[@id="method.stable_impl"]/code' 'pub const fn stable_impl() -> u32' + // @has 'foo/struct.Foo.html' '//div[@id="method.stable_impl"]/h4[@class="code-header"]' 'pub const fn stable_impl() -> u32' // @has - '//span[@class="since"]' '1.0.0 (const: 1.2.0)' #[stable(feature = "rust1", since = "1.0.0")] #[rustc_const_stable(feature = "rust1", since = "1.2.0")] diff --git a/src/test/rustdoc/const-generics/add-impl.rs b/src/test/rustdoc/const-generics/add-impl.rs index 8f412aa8c4026..123dbaa406b83 100644 --- a/src/test/rustdoc/const-generics/add-impl.rs +++ b/src/test/rustdoc/const-generics/add-impl.rs @@ -8,7 +8,7 @@ pub struct Simd { inner: T, } -// @has foo/struct.Simd.html '//div[@id="trait-implementations-list"]//div/code' 'impl Add> for Simd' +// @has foo/struct.Simd.html '//div[@id="trait-implementations-list"]//div/h3[@class="code-header in-band"]' 'impl Add> for Simd' impl Add for Simd { type Output = Self; diff --git a/src/test/rustdoc/const-generics/const-generics-docs.rs b/src/test/rustdoc/const-generics/const-generics-docs.rs index 7c4c70432c762..92d2c4697e7ed 100644 --- a/src/test/rustdoc/const-generics/const-generics-docs.rs +++ b/src/test/rustdoc/const-generics/const-generics-docs.rs @@ -19,10 +19,10 @@ pub use extern_crate::WTrait; // @has foo/trait.Trait.html '//pre[@class="rust trait"]' \ // 'pub trait Trait' -// @has - '//*[@id="impl-Trait%3C1_usize%3E-for-u8"]//code' 'impl Trait<1_usize> for u8' -// @has - '//*[@id="impl-Trait%3C2_usize%3E-for-u8"]//code' 'impl Trait<2_usize> for u8' -// @has - '//*[@id="impl-Trait%3C{1%20+%202}%3E-for-u8"]//code' 'impl Trait<{1 + 2}> for u8' -// @has - '//*[@id="impl-Trait%3CN%3E-for-%5Bu8%3B%20N%5D"]//code' \ +// @has - '//*[@id="impl-Trait%3C1_usize%3E-for-u8"]//h3[@class="code-header in-band"]' 'impl Trait<1_usize> for u8' +// @has - '//*[@id="impl-Trait%3C2_usize%3E-for-u8"]//h3[@class="code-header in-band"]' 'impl Trait<2_usize> for u8' +// @has - '//*[@id="impl-Trait%3C{1%20+%202}%3E-for-u8"]//h3[@class="code-header in-band"]' 'impl Trait<{1 + 2}> for u8' +// @has - '//*[@id="impl-Trait%3CN%3E-for-%5Bu8%3B%20N%5D"]//h3[@class="code-header in-band"]' \ // 'impl Trait for [u8; N]' pub trait Trait {} impl Trait<1> for u8 {} @@ -36,7 +36,7 @@ pub struct Foo where u8: Trait; // @has foo/struct.Bar.html '//pre[@class="rust struct"]' 'pub struct Bar(_)' pub struct Bar([T; N]); -// @has foo/struct.Foo.html '//div[@id="impl"]/code' 'impl Foo where u8: Trait' +// @has foo/struct.Foo.html '//div[@id="impl"]/h3[@class="code-header in-band"]' 'impl Foo where u8: Trait' impl Foo where u8: Trait { // @has - '//*[@id="associatedconstant.FOO_ASSOC"]' 'pub const FOO_ASSOC: usize' pub const FOO_ASSOC: usize = M + 13; @@ -47,7 +47,7 @@ impl Foo where u8: Trait { } } -// @has foo/struct.Bar.html '//div[@id="impl"]/code' 'impl Bar' +// @has foo/struct.Bar.html '//div[@id="impl"]/h3[@class="code-header in-band"]' 'impl Bar' impl Bar { // @has - '//*[@id="method.hey"]' \ // 'pub fn hey(&self) -> Foo where u8: Trait' diff --git a/src/test/rustdoc/const-generics/const-impl.rs b/src/test/rustdoc/const-generics/const-impl.rs index e4e504dd83b5b..7ddcb3a29f28b 100644 --- a/src/test/rustdoc/const-generics/const-impl.rs +++ b/src/test/rustdoc/const-generics/const-impl.rs @@ -9,20 +9,20 @@ pub enum Order { } // @has foo/struct.VSet.html '//pre[@class="rust struct"]' 'pub struct VSet' -// @has foo/struct.VSet.html '//div[@id="impl-Send"]/code' 'impl Send for VSet' -// @has foo/struct.VSet.html '//div[@id="impl-Sync"]/code' 'impl Sync for VSet' +// @has foo/struct.VSet.html '//div[@id="impl-Send"]/h3[@class="code-header in-band"]' 'impl Send for VSet' +// @has foo/struct.VSet.html '//div[@id="impl-Sync"]/h3[@class="code-header in-band"]' 'impl Sync for VSet' pub struct VSet { inner: Vec, } -// @has foo/struct.VSet.html '//div[@id="impl"]/code' 'impl VSet' +// @has foo/struct.VSet.html '//div[@id="impl"]/h3[@class="code-header in-band"]' 'impl VSet' impl VSet { pub fn new() -> Self { Self { inner: Vec::new() } } } -// @has foo/struct.VSet.html '//div[@id="impl-1"]/code' 'impl VSet' +// @has foo/struct.VSet.html '//div[@id="impl-1"]/h3[@class="code-header in-band"]' 'impl VSet' impl VSet { pub fn new() -> Self { Self { inner: Vec::new() } @@ -31,7 +31,7 @@ impl VSet { pub struct Escape; -// @has foo/struct.Escape.html '//div[@id="impl"]/code' 'impl Escape<{ r#""# }>' +// @has foo/struct.Escape.html '//div[@id="impl"]/h3[@class="code-header in-band"]' 'impl Escape<{ r#""# }>' impl Escape<{ r#""# }> { pub fn f() {} } diff --git a/src/test/rustdoc/const-generics/lazy_normalization_consts/const-equate-pred.rs b/src/test/rustdoc/const-generics/lazy_normalization_consts/const-equate-pred.rs index 6cc02f78c625d..f4c5dcc72259d 100644 --- a/src/test/rustdoc/const-generics/lazy_normalization_consts/const-equate-pred.rs +++ b/src/test/rustdoc/const-generics/lazy_normalization_consts/const-equate-pred.rs @@ -12,7 +12,7 @@ pub struct Hasher { unsafe impl Send for Hasher {} // @has foo/struct.Foo.html -// @has - '//code' 'impl Send for Foo' +// @has - '//h3[@class="code-header in-band"]' 'impl Send for Foo' pub struct Foo { hasher: Hasher<[u8; 3]>, } diff --git a/src/test/rustdoc/const.rs b/src/test/rustdoc/const.rs index 638de3292becb..587ad4db47829 100644 --- a/src/test/rustdoc/const.rs +++ b/src/test/rustdoc/const.rs @@ -3,7 +3,7 @@ pub struct Foo; impl Foo { - // @has const/struct.Foo.html '//*[@id="method.new"]//code' 'const unsafe fn new' + // @has const/struct.Foo.html '//*[@id="method.new"]//h4[@class="code-header"]' 'const unsafe fn new' pub const unsafe fn new() -> Foo { Foo } diff --git a/src/test/rustdoc/duplicate_impls/issue-33054.rs b/src/test/rustdoc/duplicate_impls/issue-33054.rs index 15c3444606c15..7ace13fe3a6b5 100644 --- a/src/test/rustdoc/duplicate_impls/issue-33054.rs +++ b/src/test/rustdoc/duplicate_impls/issue-33054.rs @@ -1,10 +1,10 @@ // @has issue_33054/impls/struct.Foo.html -// @has - '//code' 'impl Foo' -// @has - '//code' 'impl Bar for Foo' +// @has - '//h3[@class="code-header in-band"]' 'impl Foo' +// @has - '//h3[@class="code-header in-band"]' 'impl Bar for Foo' // @count - '//*[@id="trait-implementations-list"]//*[@class="impl has-srclink"]' 1 // @count - '//*[@id="main"]/details/summary/*[@class="impl has-srclink"]' 1 // @has issue_33054/impls/bar/trait.Bar.html -// @has - '//code' 'impl Bar for Foo' +// @has - '//h3[@class="code-header in-band"]' 'impl Bar for Foo' // @count - '//*[@class="struct"]' 1 pub mod impls; diff --git a/src/test/rustdoc/extern-impl-trait.rs b/src/test/rustdoc/extern-impl-trait.rs index 58bd650feb466..8ab026afd1b8d 100644 --- a/src/test/rustdoc/extern-impl-trait.rs +++ b/src/test/rustdoc/extern-impl-trait.rs @@ -4,8 +4,8 @@ extern crate extern_impl_trait; -// @has 'foo/struct.X.html' '//code' "impl Foo + 'a" +// @has 'foo/struct.X.html' '//h4[@class="code-header"]' "impl Foo + 'a" pub use extern_impl_trait::X; -// @has 'foo/struct.Y.html' '//code' "impl ?Sized + Foo + 'a" +// @has 'foo/struct.Y.html' '//h4[@class="code-header"]' "impl ?Sized + Foo + 'a" pub use extern_impl_trait::Y; diff --git a/src/test/rustdoc/extern-impl.rs b/src/test/rustdoc/extern-impl.rs index f68e10a4d092c..f357d65df94be 100644 --- a/src/test/rustdoc/extern-impl.rs +++ b/src/test/rustdoc/extern-impl.rs @@ -4,24 +4,24 @@ pub struct Foo; impl Foo { - // @has - '//code' 'fn rust0()' + // @has - '//h4[@class="code-header"]' 'fn rust0()' pub fn rust0() {} - // @has - '//code' 'fn rust1()' + // @has - '//h4[@class="code-header"]' 'fn rust1()' pub extern "Rust" fn rust1() {} - // @has - '//code' 'extern "C" fn c0()' + // @has - '//h4[@class="code-header"]' 'extern "C" fn c0()' pub extern fn c0() {} - // @has - '//code' 'extern "C" fn c1()' + // @has - '//h4[@class="code-header"]' 'extern "C" fn c1()' pub extern "C" fn c1() {} - // @has - '//code' 'extern "system" fn system0()' + // @has - '//h4[@class="code-header"]' 'extern "system" fn system0()' pub extern "system" fn system0() {} } // @has foo/trait.Bar.html pub trait Bar {} -// @has - '//code' 'impl Bar for fn()' +// @has - '//h3[@class="code-header in-band"]' 'impl Bar for fn()' impl Bar for fn() {} -// @has - '//code' 'impl Bar for extern "C" fn()' +// @has - '//h3[@class="code-header in-band"]' 'impl Bar for extern "C" fn()' impl Bar for extern fn() {} -// @has - '//code' 'impl Bar for extern "system" fn()' +// @has - '//h3[@class="code-header in-band"]' 'impl Bar for extern "system" fn()' impl Bar for extern "system" fn() {} diff --git a/src/test/rustdoc/extern-method.rs b/src/test/rustdoc/extern-method.rs index 7fbe5fe43274d..9cf5fc190af0f 100644 --- a/src/test/rustdoc/extern-method.rs +++ b/src/test/rustdoc/extern-method.rs @@ -6,14 +6,14 @@ extern crate rustdoc_extern_method as foo; // @has extern_method/trait.Foo.html //pre "pub trait Foo" -// @has - '//*[@id="tymethod.foo"]//code' 'extern "rust-call" fn foo' -// @has - '//*[@id="method.foo_"]//code' 'extern "rust-call" fn foo_' +// @has - '//*[@id="tymethod.foo"]//h4[@class="code-header"]' 'extern "rust-call" fn foo' +// @has - '//*[@id="method.foo_"]//h4[@class="code-header"]' 'extern "rust-call" fn foo_' pub use foo::Foo; // @has extern_method/trait.Bar.html //pre "pub trait Bar" pub trait Bar { - // @has - '//*[@id="tymethod.bar"]//code' 'extern "rust-call" fn bar' + // @has - '//*[@id="tymethod.bar"]//h4[@class="code-header"]' 'extern "rust-call" fn bar' extern "rust-call" fn bar(&self, _: ()); - // @has - '//*[@id="method.bar_"]//code' 'extern "rust-call" fn bar_' + // @has - '//*[@id="method.bar_"]//h4[@class="code-header"]' 'extern "rust-call" fn bar_' extern "rust-call" fn bar_(&self, _: ()) { } } diff --git a/src/test/rustdoc/generic-impl.rs b/src/test/rustdoc/generic-impl.rs index 96ced021041ff..906316d2ebcc0 100644 --- a/src/test/rustdoc/generic-impl.rs +++ b/src/test/rustdoc/generic-impl.rs @@ -2,10 +2,10 @@ use std::fmt; -// @!has foo/struct.Bar.html '//div[@id="impl-ToString"]//code' 'impl ToString for T' +// @!has foo/struct.Bar.html '//div[@id="impl-ToString"]//h3[@class="code-header in-band"]' 'impl ToString for T' pub struct Bar; -// @has foo/struct.Foo.html '//div[@id="impl-ToString"]//code' 'impl ToString for T' +// @has foo/struct.Foo.html '//div[@id="impl-ToString"]//h3[@class="code-header in-band"]' 'impl ToString for T' pub struct Foo; // @has foo/struct.Foo.html '//div[@class="sidebar-links"]/a[@href="#impl-ToString"]' 'ToString' diff --git a/src/test/rustdoc/impl-disambiguation.rs b/src/test/rustdoc/impl-disambiguation.rs index 9f55318563937..d1d39ccff328f 100644 --- a/src/test/rustdoc/impl-disambiguation.rs +++ b/src/test/rustdoc/impl-disambiguation.rs @@ -4,13 +4,13 @@ pub trait Foo {} pub struct Bar { field: T } -// @has foo/trait.Foo.html '//*[@class="item-list"]//code' \ +// @has foo/trait.Foo.html '//*[@class="item-list"]//h3[@class="code-header in-band"]' \ // "impl Foo for Bar" impl Foo for Bar {} -// @has foo/trait.Foo.html '//*[@class="item-list"]//code' \ +// @has foo/trait.Foo.html '//*[@class="item-list"]//h3[@class="code-header in-band"]' \ // "impl Foo for Bar" impl Foo for Bar {} -// @has foo/trait.Foo.html '//*[@class="item-list"]//code' \ +// @has foo/trait.Foo.html '//*[@class="item-list"]//h3[@class="code-header in-band"]' \ // "impl<'a> Foo for &'a Bar" impl<'a> Foo for &'a Bar {} @@ -22,9 +22,9 @@ pub mod mod2 { pub enum Baz {} } -// @has foo/trait.Foo.html '//*[@class="item-list"]//code' \ +// @has foo/trait.Foo.html '//*[@class="item-list"]//h3[@class="code-header in-band"]' \ // "impl Foo for foo::mod1::Baz" impl Foo for mod1::Baz {} -// @has foo/trait.Foo.html '//*[@class="item-list"]//code' \ +// @has foo/trait.Foo.html '//*[@class="item-list"]//h3[@class="code-header in-band"]' \ // "impl<'a> Foo for &'a foo::mod2::Baz" impl<'a> Foo for &'a mod2::Baz {} diff --git a/src/test/rustdoc/impl-parts.rs b/src/test/rustdoc/impl-parts.rs index e4039eecb7132..249158c1a1f89 100644 --- a/src/test/rustdoc/impl-parts.rs +++ b/src/test/rustdoc/impl-parts.rs @@ -5,8 +5,8 @@ pub auto trait AnAutoTrait {} pub struct Foo { field: T } -// @has impl_parts/struct.Foo.html '//*[@class="impl has-srclink"]//code' \ +// @has impl_parts/struct.Foo.html '//*[@class="impl has-srclink"]//h3[@class="code-header in-band"]' \ // "impl !AnAutoTrait for Foo where T: Sync," -// @has impl_parts/trait.AnAutoTrait.html '//*[@class="item-list"]//code' \ +// @has impl_parts/trait.AnAutoTrait.html '//*[@class="item-list"]//h3[@class="code-header in-band"]' \ // "impl !AnAutoTrait for Foo where T: Sync," impl !AnAutoTrait for Foo where T: Sync {} diff --git a/src/test/rustdoc/inline_cross/impl_trait.rs b/src/test/rustdoc/inline_cross/impl_trait.rs index a2adc0e63c9c0..ef615472b0e98 100644 --- a/src/test/rustdoc/inline_cross/impl_trait.rs +++ b/src/test/rustdoc/inline_cross/impl_trait.rs @@ -31,8 +31,8 @@ pub use impl_trait_aux::func4; pub use impl_trait_aux::async_fn; // @has impl_trait/struct.Foo.html -// @has - '//*[@id="method.method"]//code' "pub fn method<'a>(_x: impl Clone + Into> + 'a)" -// @!has - '//*[@id="method.method"]//code' 'where' +// @has - '//*[@id="method.method"]//h4[@class="code-header"]' "pub fn method<'a>(_x: impl Clone + Into> + 'a)" +// @!has - '//*[@id="method.method"]//h4[@class="code-header"]' 'where' pub use impl_trait_aux::Foo; // @has impl_trait/struct.Bar.html diff --git a/src/test/rustdoc/inline_cross/issue-31948-1.rs b/src/test/rustdoc/inline_cross/issue-31948-1.rs index 390f0b845e00b..be8585dd16e17 100644 --- a/src/test/rustdoc/inline_cross/issue-31948-1.rs +++ b/src/test/rustdoc/inline_cross/issue-31948-1.rs @@ -5,22 +5,22 @@ extern crate rustdoc_nonreachable_impls; // @has issue_31948_1/struct.Wobble.html -// @has - '//*[@class="impl has-srclink"]//code' 'Bark for' -// @has - '//*[@class="impl has-srclink"]//code' 'Woof for' -// @!has - '//*[@class="impl"]//code' 'Bar for' -// @!has - '//*[@class="impl"]//code' 'Qux for' +// @has - '//*[@class="impl has-srclink"]//h3[@class="code-header in-band"]' 'Bark for' +// @has - '//*[@class="impl has-srclink"]//h3[@class="code-header in-band"]' 'Woof for' +// @!has - '//*[@class="impl"]//h3[@class="code-header in-band"]' 'Bar for' +// @!has - '//*[@class="impl"]//h3[@class="code-header in-band"]' 'Qux for' pub use rustdoc_nonreachable_impls::hidden::Wobble; // @has issue_31948_1/trait.Bark.html -// @has - '//code' 'for Foo' -// @has - '//code' 'for Wobble' -// @!has - '//code' 'for Wibble' +// @has - '//h3[@class="code-header in-band"]' 'for Foo' +// @has - '//h3[@class="code-header in-band"]' 'for Wobble' +// @!has - '//h3[@class="code-header in-band"]' 'for Wibble' pub use rustdoc_nonreachable_impls::Bark; // @has issue_31948_1/trait.Woof.html -// @has - '//code' 'for Foo' -// @has - '//code' 'for Wobble' -// @!has - '//code' 'for Wibble' +// @has - '//h3[@class="code-header in-band"]' 'for Foo' +// @has - '//h3[@class="code-header in-band"]' 'for Wobble' +// @!has - '//h3[@class="code-header in-band"]' 'for Wibble' pub use rustdoc_nonreachable_impls::Woof; // @!has issue_31948_1/trait.Bar.html diff --git a/src/test/rustdoc/inline_cross/issue-31948-2.rs b/src/test/rustdoc/inline_cross/issue-31948-2.rs index 013e777440f1a..7aa994f19d6f1 100644 --- a/src/test/rustdoc/inline_cross/issue-31948-2.rs +++ b/src/test/rustdoc/inline_cross/issue-31948-2.rs @@ -5,15 +5,15 @@ extern crate rustdoc_nonreachable_impls; // @has issue_31948_2/struct.Wobble.html -// @has - '//*[@class="impl has-srclink"]//code' 'Qux for' -// @has - '//*[@class="impl has-srclink"]//code' 'Bark for' -// @has - '//*[@class="impl has-srclink"]//code' 'Woof for' -// @!has - '//*[@class="impl"]//code' 'Bar for' +// @has - '//*[@class="impl has-srclink"]//h3[@class="code-header in-band"]' 'Qux for' +// @has - '//*[@class="impl has-srclink"]//h3[@class="code-header in-band"]' 'Bark for' +// @has - '//*[@class="impl has-srclink"]//h3[@class="code-header in-band"]' 'Woof for' +// @!has - '//*[@class="impl"]//h3[@class="code-header in-band"]' 'Bar for' pub use rustdoc_nonreachable_impls::hidden::Wobble; // @has issue_31948_2/trait.Qux.html -// @has - '//code' 'for Foo' -// @has - '//code' 'for Wobble' +// @has - '//h3[@class="code-header in-band"]' 'for Foo' +// @has - '//h3[@class="code-header in-band"]' 'for Wobble' pub use rustdoc_nonreachable_impls::hidden::Qux; // @!has issue_31948_2/trait.Bar.html diff --git a/src/test/rustdoc/inline_cross/issue-31948.rs b/src/test/rustdoc/inline_cross/issue-31948.rs index 82dcc2d2cc3ef..7bf4110d32ac1 100644 --- a/src/test/rustdoc/inline_cross/issue-31948.rs +++ b/src/test/rustdoc/inline_cross/issue-31948.rs @@ -5,22 +5,22 @@ extern crate rustdoc_nonreachable_impls; // @has issue_31948/struct.Foo.html -// @has - '//*[@class="impl has-srclink"]//code' 'Bark for' -// @has - '//*[@class="impl has-srclink"]//code' 'Woof for' -// @!has - '//*[@class="impl has-srclink"]//code' 'Bar for' -// @!has - '//*[@class="impl"]//code' 'Qux for' +// @has - '//*[@class="impl has-srclink"]//h3[@class="code-header in-band"]' 'Bark for' +// @has - '//*[@class="impl has-srclink"]//h3[@class="code-header in-band"]' 'Woof for' +// @!has - '//*[@class="impl has-srclink"]//h3[@class="code-header in-band"]' 'Bar for' +// @!has - '//*[@class="impl"]//h3[@class="code-header in-band"]' 'Qux for' pub use rustdoc_nonreachable_impls::Foo; // @has issue_31948/trait.Bark.html -// @has - '//code' 'for Foo' -// @!has - '//code' 'for Wibble' -// @!has - '//code' 'for Wobble' +// @has - '//h3[@class="code-header in-band"]' 'for Foo' +// @!has - '//h3[@class="code-header in-band"]' 'for Wibble' +// @!has - '//h3[@class="code-header in-band"]' 'for Wobble' pub use rustdoc_nonreachable_impls::Bark; // @has issue_31948/trait.Woof.html -// @has - '//code' 'for Foo' -// @!has - '//code' 'for Wibble' -// @!has - '//code' 'for Wobble' +// @has - '//h3[@class="code-header in-band"]' 'for Foo' +// @!has - '//h3[@class="code-header in-band"]' 'for Wibble' +// @!has - '//h3[@class="code-header in-band"]' 'for Wobble' pub use rustdoc_nonreachable_impls::Woof; // @!has issue_31948/trait.Bar.html diff --git a/src/test/rustdoc/inline_cross/issue-32881.rs b/src/test/rustdoc/inline_cross/issue-32881.rs index 5f31e6cd3ad1f..8052339a83b6d 100644 --- a/src/test/rustdoc/inline_cross/issue-32881.rs +++ b/src/test/rustdoc/inline_cross/issue-32881.rs @@ -5,7 +5,7 @@ extern crate rustdoc_trait_object_impl; // @has issue_32881/trait.Bar.html -// @has - '//code' "impl<'a> dyn Bar" -// @has - '//code' "impl<'a> Debug for dyn Bar" +// @has - '//h3[@class="code-header in-band"]' "impl<'a> dyn Bar" +// @has - '//h3[@class="code-header in-band"]' "impl<'a> Debug for dyn Bar" pub use rustdoc_trait_object_impl::Bar; diff --git a/src/test/rustdoc/inline_cross/issue-33113.rs b/src/test/rustdoc/inline_cross/issue-33113.rs index 1e633600aeff1..c60859bbcea98 100644 --- a/src/test/rustdoc/inline_cross/issue-33113.rs +++ b/src/test/rustdoc/inline_cross/issue-33113.rs @@ -5,6 +5,6 @@ extern crate bar; // @has issue_33113/trait.Bar.html -// @has - '//code' "for &'a char" -// @has - '//code' "for Foo" +// @has - '//h3[@class="code-header in-band"]' "for &'a char" +// @has - '//h3[@class="code-header in-band"]' "for Foo" pub use bar::Bar; diff --git a/src/test/rustdoc/inline_cross/trait-vis.rs b/src/test/rustdoc/inline_cross/trait-vis.rs index e6585449cb64e..363c52a336e42 100644 --- a/src/test/rustdoc/inline_cross/trait-vis.rs +++ b/src/test/rustdoc/inline_cross/trait-vis.rs @@ -3,5 +3,5 @@ extern crate inner; // @has trait_vis/struct.SomeStruct.html -// @has - '//code' 'impl Clone for SomeStruct' +// @has - '//h3[@class="code-header in-band"]' 'impl Clone for SomeStruct' pub use inner::SomeStruct; diff --git a/src/test/rustdoc/inline_local/trait-vis.rs b/src/test/rustdoc/inline_local/trait-vis.rs index a9b54fbe79edc..e7b08088f4032 100644 --- a/src/test/rustdoc/inline_local/trait-vis.rs +++ b/src/test/rustdoc/inline_local/trait-vis.rs @@ -13,6 +13,6 @@ mod asdf { } // @has trait_vis/struct.SomeStruct.html -// @has - '//code' 'impl ThisTrait for SomeStruct' -// @!has - '//code' 'impl PrivateTrait for SomeStruct' +// @has - '//h3[@class="code-header in-band"]' 'impl ThisTrait for SomeStruct' +// @!has - '//h3[@class="code-header in-band"]' 'impl PrivateTrait for SomeStruct' pub use asdf::SomeStruct; diff --git a/src/test/rustdoc/issue-19190.rs b/src/test/rustdoc/issue-19190.rs index 9dac49c6413d8..2046273e2c1ba 100644 --- a/src/test/rustdoc/issue-19190.rs +++ b/src/test/rustdoc/issue-19190.rs @@ -14,7 +14,7 @@ impl Deref for Bar { } // @has issue_19190/struct.Bar.html -// @has - '//*[@id="method.foo"]//code' 'fn foo(&self)' +// @has - '//*[@id="method.foo"]//h4[@class="code-header"]' 'fn foo(&self)' // @has - '//*[@id="method.foo"]' 'fn foo(&self)' -// @!has - '//*[@id="method.static_foo"]//code' 'fn static_foo()' +// @!has - '//*[@id="method.static_foo"]//h4[@class="code-header"]' 'fn static_foo()' // @!has - '//*[@id="method.static_foo"]' 'fn static_foo()' diff --git a/src/test/rustdoc/issue-25001.rs b/src/test/rustdoc/issue-25001.rs index e53cf6451353f..c97b35adaf22e 100644 --- a/src/test/rustdoc/issue-25001.rs +++ b/src/test/rustdoc/issue-25001.rs @@ -8,36 +8,36 @@ pub trait Bar { } impl Foo { - // @has - '//*[@id="method.pass"]//code' 'fn pass()' + // @has - '//*[@id="method.pass"]//h4[@class="code-header"]' 'fn pass()' pub fn pass() {} } impl Foo { - // @has - '//*[@id="method.pass-1"]//code' 'fn pass() -> usize' + // @has - '//*[@id="method.pass-1"]//h4[@class="code-header"]' 'fn pass() -> usize' pub fn pass() -> usize { 42 } } impl Foo { - // @has - '//*[@id="method.pass-2"]//code' 'fn pass() -> isize' + // @has - '//*[@id="method.pass-2"]//h4[@class="code-header"]' 'fn pass() -> isize' pub fn pass() -> isize { 42 } } impl Bar for Foo { - // @has - '//*[@id="associatedtype.Item"]//code' 'type Item = T' + // @has - '//*[@id="associatedtype.Item"]//h4[@class="code-header"]' 'type Item = T' type Item=T; - // @has - '//*[@id="method.quux"]//code' 'fn quux(self)' + // @has - '//*[@id="method.quux"]//h4[@class="code-header"]' 'fn quux(self)' fn quux(self) {} } impl<'a, T> Bar for &'a Foo { - // @has - '//*[@id="associatedtype.Item-1"]//code' "type Item = &'a T" + // @has - '//*[@id="associatedtype.Item-1"]//h4[@class="code-header"]' "type Item = &'a T" type Item=&'a T; - // @has - '//*[@id="method.quux-1"]//code' 'fn quux(self)' + // @has - '//*[@id="method.quux-1"]//h4[@class="code-header"]' 'fn quux(self)' fn quux(self) {} } impl<'a, T> Bar for &'a mut Foo { - // @has - '//*[@id="associatedtype.Item-2"]//code' "type Item = &'a mut T" + // @has - '//*[@id="associatedtype.Item-2"]//h4[@class="code-header"]' "type Item = &'a mut T" type Item=&'a mut T; - // @has - '//*[@id="method.quux-2"]//code' 'fn quux(self)' + // @has - '//*[@id="method.quux-2"]//h4[@class="code-header"]' 'fn quux(self)' fn quux(self) {} } diff --git a/src/test/rustdoc/issue-27362.rs b/src/test/rustdoc/issue-27362.rs index 1cbba4b663df8..097e4e3b03d9d 100644 --- a/src/test/rustdoc/issue-27362.rs +++ b/src/test/rustdoc/issue-27362.rs @@ -7,4 +7,4 @@ pub use issue_27362_aux::*; // @matches issue_27362/fn.foo.html '//pre' "pub const fn foo()" // @matches issue_27362/fn.bar.html '//pre' "pub const unsafe fn bar()" -// @matches issue_27362/struct.Foo.html '//code' "const unsafe fn baz()" +// @matches issue_27362/struct.Foo.html '//h4[@class="code-header"]' "const unsafe fn baz()" diff --git a/src/test/rustdoc/issue-29503.rs b/src/test/rustdoc/issue-29503.rs index 23d9e73b567d0..90a2b76eab67b 100644 --- a/src/test/rustdoc/issue-29503.rs +++ b/src/test/rustdoc/issue-29503.rs @@ -5,7 +5,7 @@ pub trait MyTrait { fn my_string(&self) -> String; } -// @has - "//div[@id='implementors-list']//div[@id='impl-MyTrait']//code" "impl MyTrait for T where T: Debug" +// @has - "//div[@id='implementors-list']//div[@id='impl-MyTrait']//h3[@class='code-header in-band']" "impl MyTrait for T where T: Debug" impl MyTrait for T where T: fmt::Debug { fn my_string(&self) -> String { format!("{:?}", self) diff --git a/src/test/rustdoc/issue-33592.rs b/src/test/rustdoc/issue-33592.rs index 81450f15c2078..815439db9bfd2 100644 --- a/src/test/rustdoc/issue-33592.rs +++ b/src/test/rustdoc/issue-33592.rs @@ -6,8 +6,8 @@ pub struct Bar; pub struct Baz; -// @has foo/trait.Foo.html '//code' 'impl Foo for Bar' +// @has foo/trait.Foo.html '//h3[@class="code-header in-band"]' 'impl Foo for Bar' impl Foo for Bar {} -// @has foo/trait.Foo.html '//code' 'impl Foo for Baz' +// @has foo/trait.Foo.html '//h3[@class="code-header in-band"]' 'impl Foo for Baz' impl Foo for Baz {} diff --git a/src/test/rustdoc/issue-35169-2.rs b/src/test/rustdoc/issue-35169-2.rs index a688ae48d00ce..f08466baf8b05 100644 --- a/src/test/rustdoc/issue-35169-2.rs +++ b/src/test/rustdoc/issue-35169-2.rs @@ -24,17 +24,17 @@ impl DerefMut for Bar { } // @has issue_35169_2/struct.Bar.html -// @has - '//*[@id="method.by_ref"]//code' 'fn by_ref(&self)' +// @has - '//*[@id="method.by_ref"]//h4[@class="code-header"]' 'fn by_ref(&self)' // @has - '//*[@id="method.by_ref"]' 'fn by_ref(&self)' -// @has - '//*[@id="method.by_explicit_ref"]//code' 'fn by_explicit_ref(self: &Foo)' +// @has - '//*[@id="method.by_explicit_ref"]//h4[@class="code-header"]' 'fn by_explicit_ref(self: &Foo)' // @has - '//*[@id="method.by_explicit_ref"]' 'fn by_explicit_ref(self: &Foo)' -// @has - '//*[@id="method.by_mut_ref"]//code' 'fn by_mut_ref(&mut self)' +// @has - '//*[@id="method.by_mut_ref"]//h4[@class="code-header"]' 'fn by_mut_ref(&mut self)' // @has - '//*[@id="method.by_mut_ref"]' 'fn by_mut_ref(&mut self)' -// @has - '//*[@id="method.by_explicit_mut_ref"]//code' 'fn by_explicit_mut_ref(self: &mut Foo)' +// @has - '//*[@id="method.by_explicit_mut_ref"]//h4[@class="code-header"]' 'fn by_explicit_mut_ref(self: &mut Foo)' // @has - '//*[@id="method.by_explicit_mut_ref"]' 'fn by_explicit_mut_ref(self: &mut Foo)' -// @!has - '//*[@id="method.by_explicit_box"]//code' 'fn by_explicit_box(self: Box)' +// @!has - '//*[@id="method.by_explicit_box"]//h4[@class="code-header"]' 'fn by_explicit_box(self: Box)' // @!has - '//*[@id="method.by_explicit_box"]' 'fn by_explicit_box(self: Box)' -// @!has - '//*[@id="method.by_explicit_self_box"]//code' 'fn by_explicit_self_box(self: Box)' +// @!has - '//*[@id="method.by_explicit_self_box"]//h4[@class="code-header"]' 'fn by_explicit_self_box(self: Box)' // @!has - '//*[@id="method.by_explicit_self_box"]' 'fn by_explicit_self_box(self: Box)' -// @!has - '//*[@id="method.static_foo"]//code' 'fn static_foo()' +// @!has - '//*[@id="method.static_foo"]//h4[@class="code-header"]' 'fn static_foo()' // @!has - '//*[@id="method.static_foo"]' 'fn static_foo()' diff --git a/src/test/rustdoc/issue-35169.rs b/src/test/rustdoc/issue-35169.rs index 4f10c04a616b3..70a2265c80632 100644 --- a/src/test/rustdoc/issue-35169.rs +++ b/src/test/rustdoc/issue-35169.rs @@ -19,17 +19,17 @@ impl Deref for Bar { } // @has issue_35169/struct.Bar.html -// @has - '//*[@id="method.by_ref"]//code' 'fn by_ref(&self)' +// @has - '//*[@id="method.by_ref"]//h4[@class="code-header"]' 'fn by_ref(&self)' // @has - '//*[@id="method.by_ref"]' 'fn by_ref(&self)' -// @has - '//*[@id="method.by_explicit_ref"]//code' 'fn by_explicit_ref(self: &Foo)' +// @has - '//*[@id="method.by_explicit_ref"]//h4[@class="code-header"]' 'fn by_explicit_ref(self: &Foo)' // @has - '//*[@id="method.by_explicit_ref"]' 'fn by_explicit_ref(self: &Foo)' -// @!has - '//*[@id="method.by_mut_ref"]//code' 'fn by_mut_ref(&mut self)' +// @!has - '//*[@id="method.by_mut_ref"]//h4[@class="code-header"]' 'fn by_mut_ref(&mut self)' // @!has - '//*[@id="method.by_mut_ref"]' 'fn by_mut_ref(&mut self)' -// @!has - '//*[@id="method.by_explicit_mut_ref"]//code' 'fn by_explicit_mut_ref(self: &mut Foo)' +// @!has - '//*[@id="method.by_explicit_mut_ref"]//h4[@class="code-header"]' 'fn by_explicit_mut_ref(self: &mut Foo)' // @!has - '//*[@id="method.by_explicit_mut_ref"]' 'fn by_explicit_mut_ref(self: &mut Foo)' -// @!has - '//*[@id="method.by_explicit_box"]//code' 'fn by_explicit_box(self: Box)' +// @!has - '//*[@id="method.by_explicit_box"]//h4[@class="code-header"]' 'fn by_explicit_box(self: Box)' // @!has - '//*[@id="method.by_explicit_box"]' 'fn by_explicit_box(self: Box)' -// @!has - '//*[@id="method.by_explicit_self_box"]//code' 'fn by_explicit_self_box(self: Box)' +// @!has - '//*[@id="method.by_explicit_self_box"]//h4[@class="code-header"]' 'fn by_explicit_self_box(self: Box)' // @!has - '//*[@id="method.by_explicit_self_box"]' 'fn by_explicit_self_box(self: Box)' -// @!has - '//*[@id="method.static_foo"]//code' 'fn static_foo()' +// @!has - '//*[@id="method.static_foo"]//h4[@class="code-header"]' 'fn static_foo()' // @!has - '//*[@id="method.static_foo"]' 'fn static_foo()' diff --git a/src/test/rustdoc/issue-46727.rs b/src/test/rustdoc/issue-46727.rs index 0f991cf676ff7..00e9127a34d20 100644 --- a/src/test/rustdoc/issue-46727.rs +++ b/src/test/rustdoc/issue-46727.rs @@ -3,5 +3,5 @@ extern crate issue_46727; // @has issue_46727/trait.Foo.html -// @has - '//code' 'impl Foo for Bar<[T; 3]>' +// @has - '//h3[@class="code-header in-band"]' 'impl Foo for Bar<[T; 3]>' pub use issue_46727::{Foo, Bar}; diff --git a/src/test/rustdoc/issue-50159.rs b/src/test/rustdoc/issue-50159.rs index 69774aa351f17..d88c29217023a 100644 --- a/src/test/rustdoc/issue-50159.rs +++ b/src/test/rustdoc/issue-50159.rs @@ -11,8 +11,8 @@ impl Signal2 for B where B: Signal { } // @has issue_50159/struct.Switch.html -// @has - '//code' 'impl Send for Switch where ::Item: Send' -// @has - '//code' 'impl Sync for Switch where ::Item: Sync' +// @has - '//h3[@class="code-header in-band"]' 'impl Send for Switch where ::Item: Send' +// @has - '//h3[@class="code-header in-band"]' 'impl Sync for Switch where ::Item: Sync' // @count - '//*[@id="implementations-list"]//*[@class="impl"]' 0 // @count - '//*[@id="synthetic-implementations-list"]//*[@class="impl has-srclink"]' 5 pub struct Switch { diff --git a/src/test/rustdoc/issue-51236.rs b/src/test/rustdoc/issue-51236.rs index e01dae6c7f183..ee11ccc681163 100644 --- a/src/test/rustdoc/issue-51236.rs +++ b/src/test/rustdoc/issue-51236.rs @@ -7,7 +7,7 @@ pub mod traits { } // @has issue_51236/struct.Owned.html -// @has - '//*[@id="synthetic-implementations-list"]//*[@class="impl has-srclink"]//code' \ +// @has - '//*[@id="synthetic-implementations-list"]//*[@class="impl has-srclink"]//h3[@class="code-header in-band"]' \ // "impl Send for Owned where >::Reader: Send" pub struct Owned where T: for<'a> ::traits::Owned<'a> { marker: PhantomData<>::Reader>, diff --git a/src/test/rustdoc/issue-53689.rs b/src/test/rustdoc/issue-53689.rs index 7fe962c506188..52ce4159d823e 100644 --- a/src/test/rustdoc/issue-53689.rs +++ b/src/test/rustdoc/issue-53689.rs @@ -6,7 +6,7 @@ extern crate issue_53689; // @has foo/trait.MyTrait.html // @!has - 'MyStruct' -// @count - '//*[code="impl MyTrait for T"]' 1 +// @count - '//*[h3="impl MyTrait for T"]' 1 pub trait MyTrait {} impl MyTrait for T {} diff --git a/src/test/rustdoc/issue-54705.rs b/src/test/rustdoc/issue-54705.rs index 5a94d36ed70d0..bedaf5c4ddc36 100644 --- a/src/test/rustdoc/issue-54705.rs +++ b/src/test/rustdoc/issue-54705.rs @@ -3,10 +3,10 @@ pub trait ScopeHandle<'scope> {} // @has issue_54705/struct.ScopeFutureContents.html -// @has - '//*[@id="synthetic-implementations-list"]//*[@class="impl has-srclink"]//code' \ +// @has - '//*[@id="synthetic-implementations-list"]//*[@class="impl has-srclink"]//h3[@class="code-header in-band"]' \ // "impl<'scope, S> Send for ScopeFutureContents<'scope, S> where S: Sync" // -// @has - '//*[@id="synthetic-implementations-list"]//*[@class="impl has-srclink"]//code' \ +// @has - '//*[@id="synthetic-implementations-list"]//*[@class="impl has-srclink"]//h3[@class="code-header in-band"]' \ // "impl<'scope, S> Sync for ScopeFutureContents<'scope, S> where S: Sync" pub struct ScopeFutureContents<'scope, S> where S: ScopeHandle<'scope>, diff --git a/src/test/rustdoc/issue-55321.rs b/src/test/rustdoc/issue-55321.rs index b664733487b3d..ee2420d86d236 100644 --- a/src/test/rustdoc/issue-55321.rs +++ b/src/test/rustdoc/issue-55321.rs @@ -1,9 +1,9 @@ #![feature(negative_impls)] // @has issue_55321/struct.A.html -// @has - '//*[@id="trait-implementations-list"]//*[@class="impl has-srclink"]//code' \ +// @has - '//*[@id="trait-implementations-list"]//*[@class="impl has-srclink"]//h3[@class="code-header in-band"]' \ // "impl !Send for A" -// @has - '//*[@id="trait-implementations-list"]//*[@class="impl has-srclink"]//code' \ +// @has - '//*[@id="trait-implementations-list"]//*[@class="impl has-srclink"]//h3[@class="code-header in-band"]' \ // "impl !Sync for A" pub struct A(); @@ -11,8 +11,8 @@ impl !Send for A {} impl !Sync for A {} // @has issue_55321/struct.B.html -// @has - '//*[@id="synthetic-implementations-list"]//*[@class="impl has-srclink"]//code' \ +// @has - '//*[@id="synthetic-implementations-list"]//*[@class="impl has-srclink"]//h3[@class="code-header in-band"]' \ // "impl !Send for B" -// @has - '//*[@id="synthetic-implementations-list"]//*[@class="impl has-srclink"]//code' \ +// @has - '//*[@id="synthetic-implementations-list"]//*[@class="impl has-srclink"]//h3[@class="code-header in-band"]' \ // "impl !Sync for B" pub struct B(A, Box); diff --git a/src/test/rustdoc/issue-56822.rs b/src/test/rustdoc/issue-56822.rs index 977596e0b9088..aef6ddd8d23bc 100644 --- a/src/test/rustdoc/issue-56822.rs +++ b/src/test/rustdoc/issue-56822.rs @@ -17,7 +17,7 @@ impl<'a, T> MyTrait for Inner<'a, T> { } // @has issue_56822/struct.Parser.html -// @has - '//*[@id="synthetic-implementations-list"]//*[@class="impl has-srclink"]//code' \ +// @has - '//*[@id="synthetic-implementations-list"]//*[@class="impl has-srclink"]//h3[@class="code-header in-band"]' \ // "impl<'a> Send for Parser<'a>" pub struct Parser<'a> { field: > as MyTrait>::Output diff --git a/src/test/rustdoc/issue-60726.rs b/src/test/rustdoc/issue-60726.rs index e0417f1a4f4b8..167f0f039c15e 100644 --- a/src/test/rustdoc/issue-60726.rs +++ b/src/test/rustdoc/issue-60726.rs @@ -26,9 +26,9 @@ where {} // @has issue_60726/struct.IntoIter.html -// @has - '//*[@id="synthetic-implementations-list"]//*[@class="impl has-srclink"]//code' \ +// @has - '//*[@id="synthetic-implementations-list"]//*[@class="impl has-srclink"]//h3[@class="code-header in-band"]' \ // "impl !Send for IntoIter" -// @has - '//*[@id="synthetic-implementations-list"]//*[@class="impl has-srclink"]//code' \ +// @has - '//*[@id="synthetic-implementations-list"]//*[@class="impl has-srclink"]//h3[@class="code-header in-band"]' \ // "impl !Sync for IntoIter" pub struct IntoIter{ hello:DynTrait>, diff --git a/src/test/rustdoc/issue-75588.rs b/src/test/rustdoc/issue-75588.rs index aebffeff5f05e..ac97b94fb351b 100644 --- a/src/test/rustdoc/issue-75588.rs +++ b/src/test/rustdoc/issue-75588.rs @@ -10,8 +10,8 @@ extern crate realcore; extern crate real_gimli; // issue #74672 -// @!has foo/trait.Deref.html '//*[@id="impl-Deref-for-EndianSlice"]//code' 'impl Deref for EndianSlice' +// @!has foo/trait.Deref.html '//*[@id="impl-Deref-for-EndianSlice"]//h3[@class="code-header in-band"]' 'impl Deref for EndianSlice' pub use realcore::Deref; -// @has foo/trait.Join.html '//*[@id="impl-Join-for-Foo"]//code' 'impl Join for Foo' +// @has foo/trait.Join.html '//*[@id="impl-Join-for-Foo"]//h3[@class="code-header in-band"]' 'impl Join for Foo' pub use realcore::Join; diff --git a/src/test/rustdoc/issue-80233-normalize-auto-trait.rs b/src/test/rustdoc/issue-80233-normalize-auto-trait.rs index 585a0864bb25d..515e617b4f4ce 100644 --- a/src/test/rustdoc/issue-80233-normalize-auto-trait.rs +++ b/src/test/rustdoc/issue-80233-normalize-auto-trait.rs @@ -31,7 +31,7 @@ impl Trait3 for Vec { pub struct Struct1 {} // @has issue_80233_normalize_auto_trait/struct.Question.html -// @has - '//code' 'impl Send for Question' +// @has - '//h3[@class="code-header in-band"]' 'impl Send for Question' pub struct Question { pub ins: < as Trait3>::Type3 as Trait2>::Type2, } diff --git a/src/test/rustdoc/issue-82465-asref-for-and-of-local.rs b/src/test/rustdoc/issue-82465-asref-for-and-of-local.rs index 618ac20ac487d..8999e6a889bda 100644 --- a/src/test/rustdoc/issue-82465-asref-for-and-of-local.rs +++ b/src/test/rustdoc/issue-82465-asref-for-and-of-local.rs @@ -1,14 +1,14 @@ use std::convert::AsRef; pub struct Local; -// @has issue_82465_asref_for_and_of_local/struct.Local.html '//code' 'impl AsRef for Local' +// @has issue_82465_asref_for_and_of_local/struct.Local.html '//h3[@class="code-header in-band"]' 'impl AsRef for Local' impl AsRef for Local { fn as_ref(&self) -> &str { todo!() } } -// @has - '//code' 'impl AsRef for str' +// @has - '//h3[@class="code-header in-band"]' 'impl AsRef for str' impl AsRef for str { fn as_ref(&self) -> &Local { todo!() diff --git a/src/test/rustdoc/negative-impl.rs b/src/test/rustdoc/negative-impl.rs index ee65a7d5f3902..61a2398686230 100644 --- a/src/test/rustdoc/negative-impl.rs +++ b/src/test/rustdoc/negative-impl.rs @@ -5,10 +5,10 @@ pub struct Alpha; // @matches negative_impl/struct.Bravo.html '//pre' "pub struct Bravo" pub struct Bravo(B); -// @matches negative_impl/struct.Alpha.html '//*[@class="impl has-srclink"]//code' \ +// @matches negative_impl/struct.Alpha.html '//*[@class="impl has-srclink"]//h3[@class="code-header in-band"]' \ // "impl !Send for Alpha" impl !Send for Alpha {} -// @matches negative_impl/struct.Bravo.html '//*[@class="impl has-srclink"]//code' "\ +// @matches negative_impl/struct.Bravo.html '//*[@class="impl has-srclink"]//h3[@class="code-header in-band"]' "\ // impl !Send for Bravo" impl !Send for Bravo {} diff --git a/src/test/rustdoc/primitive-generic-impl.rs b/src/test/rustdoc/primitive-generic-impl.rs index 2951f5128e074..0bf6157fed348 100644 --- a/src/test/rustdoc/primitive-generic-impl.rs +++ b/src/test/rustdoc/primitive-generic-impl.rs @@ -2,4 +2,4 @@ include!("primitive/primitive-generic-impl.rs"); -// @has foo/primitive.i32.html '//div[@id="impl-ToString"]//code' 'impl ToString for T' +// @has foo/primitive.i32.html '//div[@id="impl-ToString"]//h3[@class="code-header in-band"]' 'impl ToString for T' diff --git a/src/test/rustdoc/sidebar-links-to-foreign-impl.rs b/src/test/rustdoc/sidebar-links-to-foreign-impl.rs index e73c5b4f640cf..d1083c487642d 100644 --- a/src/test/rustdoc/sidebar-links-to-foreign-impl.rs +++ b/src/test/rustdoc/sidebar-links-to-foreign-impl.rs @@ -6,9 +6,9 @@ // @has - '//*[@class="sidebar-title"]/a[@href="#foreign-impls"]' 'Implementations on Foreign Types' // @has - '//h2[@id="foreign-impls"]' 'Implementations on Foreign Types' // @has - '//*[@class="sidebar-links"]/a[@href="#impl-Foo-for-u32"]' 'u32' -// @has - '//div[@id="impl-Foo-for-u32"]//code' 'impl Foo for u32' +// @has - '//div[@id="impl-Foo-for-u32"]//h3[@class="code-header in-band"]' 'impl Foo for u32' // @has - '//*[@class="sidebar-links"]/a[@href="#impl-Foo-for-%26%27a%20str"]' "&'a str" -// @has - '//div[@id="impl-Foo-for-%26%27a%20str"]//code' "impl<'a> Foo for &'a str" +// @has - '//div[@id="impl-Foo-for-%26%27a%20str"]//h3[@class="code-header in-band"]' "impl<'a> Foo for &'a str" pub trait Foo {} impl Foo for u32 {} diff --git a/src/test/rustdoc/sized_trait.rs b/src/test/rustdoc/sized_trait.rs index 6730c71e90f88..ac4a4ad394c1b 100644 --- a/src/test/rustdoc/sized_trait.rs +++ b/src/test/rustdoc/sized_trait.rs @@ -11,7 +11,7 @@ pub struct Bar { pub struct Foo(T); // @has foo/struct.Unsized.html -// @has - '//div[@id="impl-Sized"]/code' 'impl !Sized for Unsized' +// @has - '//div[@id="impl-Sized"]//h3[@class="code-header in-band"]' 'impl !Sized for Unsized' pub struct Unsized { data: [u8], } diff --git a/src/test/rustdoc/src-links-auto-impls.rs b/src/test/rustdoc/src-links-auto-impls.rs index 6f609e080d3dd..f9ac836c9b18f 100644 --- a/src/test/rustdoc/src-links-auto-impls.rs +++ b/src/test/rustdoc/src-links-auto-impls.rs @@ -1,12 +1,12 @@ #![crate_name = "foo"] // @has foo/struct.Unsized.html -// @has - '//div[@id="impl-Sized"]/code' 'impl !Sized for Unsized' -// @!has - '//div[@id="impl-Sized"]/a[@class="srclink"]' '[src]' -// @has - '//div[@id="impl-Sync"]/code' 'impl Sync for Unsized' -// @!has - '//div[@id="impl-Sync"]/a[@class="srclink"]' '[src]' -// @has - '//div[@id="impl-Any"]/code' 'impl Any for T' -// @has - '//div[@id="impl-Any"]/a[@class="srclink"]' '[src]' +// @has - '//div[@id="impl-Sized"]/h3[@class="code-header in-band"]' 'impl !Sized for Unsized' +// @!has - '//div[@id="impl-Sized"]//a[@class="srclink"]' '[src]' +// @has - '//div[@id="impl-Sync"]/h3[@class="code-header in-band"]' 'impl Sync for Unsized' +// @!has - '//div[@id="impl-Sync"]//a[@class="srclink"]' '[src]' +// @has - '//div[@id="impl-Any"]/h3[@class="code-header in-band"]' 'impl Any for T' +// @has - '//div[@id="impl-Any"]//a[@class="srclink"]' '[src]' pub struct Unsized { data: [u8], } diff --git a/src/test/rustdoc/synthetic_auto/basic.rs b/src/test/rustdoc/synthetic_auto/basic.rs index 943596a0c8518..54c54fdbf68a8 100644 --- a/src/test/rustdoc/synthetic_auto/basic.rs +++ b/src/test/rustdoc/synthetic_auto/basic.rs @@ -1,6 +1,6 @@ // @has basic/struct.Foo.html -// @has - '//code' 'impl Send for Foo where T: Send' -// @has - '//code' 'impl Sync for Foo where T: Sync' +// @has - '//h3[@class="code-header in-band"]' 'impl Send for Foo where T: Send' +// @has - '//h3[@class="code-header in-band"]' 'impl Sync for Foo where T: Sync' // @count - '//*[@id="implementations-list"]//*[@class="impl has-srclink"]' 0 // @count - '//*[@id="synthetic-implementations-list"]//*[@class="impl has-srclink"]' 5 pub struct Foo { diff --git a/src/test/rustdoc/synthetic_auto/complex.rs b/src/test/rustdoc/synthetic_auto/complex.rs index 0213142266feb..f9017b90caee7 100644 --- a/src/test/rustdoc/synthetic_auto/complex.rs +++ b/src/test/rustdoc/synthetic_auto/complex.rs @@ -20,7 +20,7 @@ mod foo { } // @has complex/struct.NotOuter.html -// @has - '//*[@id="synthetic-implementations-list"]//*[@class="impl has-srclink"]//code' \ +// @has - '//*[@id="synthetic-implementations-list"]//*[@class="impl has-srclink"]//h3[@class="code-header in-band"]' \ // "impl<'a, T, K: ?Sized> Send for Outer<'a, T, K> where K: for<'b> Fn((&'b bool, &'a u8)) \ // -> &'b i8, T: MyTrait<'a>, >::MyItem: Copy, 'a: 'static" diff --git a/src/test/rustdoc/synthetic_auto/crate-local.rs b/src/test/rustdoc/synthetic_auto/crate-local.rs index 3346ac05ffe47..58b787dfafc7c 100644 --- a/src/test/rustdoc/synthetic_auto/crate-local.rs +++ b/src/test/rustdoc/synthetic_auto/crate-local.rs @@ -3,7 +3,7 @@ pub auto trait Banana {} // @has crate_local/struct.Peach.html -// @has - '//code' 'impl Banana for Peach' -// @has - '//code' 'impl Send for Peach' -// @has - '//code' 'impl Sync for Peach' +// @has - '//h3[@class="code-header in-band"]' 'impl Banana for Peach' +// @has - '//h3[@class="code-header in-band"]' 'impl Send for Peach' +// @has - '//h3[@class="code-header in-band"]' 'impl Sync for Peach' pub struct Peach; diff --git a/src/test/rustdoc/synthetic_auto/lifetimes.rs b/src/test/rustdoc/synthetic_auto/lifetimes.rs index c2e9b6f404677..ee1393f9729c1 100644 --- a/src/test/rustdoc/synthetic_auto/lifetimes.rs +++ b/src/test/rustdoc/synthetic_auto/lifetimes.rs @@ -9,10 +9,10 @@ where {} // @has lifetimes/struct.Foo.html -// @has - '//*[@id="synthetic-implementations-list"]//*[@class="impl has-srclink"]//code' \ +// @has - '//*[@id="synthetic-implementations-list"]//*[@class="impl has-srclink"]//h3[@class="code-header in-band"]' \ // "impl<'c, K> Send for Foo<'c, K> where K: for<'b> Fn(&'b bool) -> &'c u8, 'c: 'static" // -// @has - '//*[@id="synthetic-implementations-list"]//*[@class="impl has-srclink"]//code' \ +// @has - '//*[@id="synthetic-implementations-list"]//*[@class="impl has-srclink"]//h3[@class="code-header in-band"]' \ // "impl<'c, K> Sync for Foo<'c, K> where K: Sync" pub struct Foo<'c, K: 'c> { inner_field: Inner<'c, K>, diff --git a/src/test/rustdoc/synthetic_auto/manual.rs b/src/test/rustdoc/synthetic_auto/manual.rs index 91fe6c351c5fc..49bad162211b7 100644 --- a/src/test/rustdoc/synthetic_auto/manual.rs +++ b/src/test/rustdoc/synthetic_auto/manual.rs @@ -1,8 +1,8 @@ // @has manual/struct.Foo.html -// @has - '//*[@id="synthetic-implementations-list"]//*[@class="impl has-srclink"]//code' \ +// @has - '//*[@id="synthetic-implementations-list"]//*[@class="impl has-srclink"]//h3[@class="code-header in-band"]' \ // 'impl Sync for Foo where T: Sync' // -// @has - '//*[@id="trait-implementations-list"]//*[@class="impl has-srclink"]//code' \ +// @has - '//*[@id="trait-implementations-list"]//*[@class="impl has-srclink"]//h3[@class="code-header in-band"]' \ // 'impl Send for Foo' // // @count - '//*[@id="trait-implementations-list"]//*[@class="impl has-srclink"]' 1 diff --git a/src/test/rustdoc/synthetic_auto/negative.rs b/src/test/rustdoc/synthetic_auto/negative.rs index 16b36b56b6807..66e749ac38d96 100644 --- a/src/test/rustdoc/synthetic_auto/negative.rs +++ b/src/test/rustdoc/synthetic_auto/negative.rs @@ -3,10 +3,10 @@ pub struct Inner { } // @has negative/struct.Outer.html -// @has - '//*[@id="synthetic-implementations-list"]//*[@class="impl has-srclink"]//code' \ +// @has - '//*[@id="synthetic-implementations-list"]//*[@class="impl has-srclink"]//h3[@class="code-header in-band"]' \ // "impl !Send for Outer" // -// @has - '//*[@id="synthetic-implementations-list"]//*[@class="impl has-srclink"]//code' \ +// @has - '//*[@id="synthetic-implementations-list"]//*[@class="impl has-srclink"]//h3[@class="code-header in-band"]' \ // "impl !Sync for Outer" pub struct Outer { inner_field: Inner, diff --git a/src/test/rustdoc/synthetic_auto/nested.rs b/src/test/rustdoc/synthetic_auto/nested.rs index a6cf5890dcab4..69edbee619e31 100644 --- a/src/test/rustdoc/synthetic_auto/nested.rs +++ b/src/test/rustdoc/synthetic_auto/nested.rs @@ -9,10 +9,10 @@ where } // @has nested/struct.Foo.html -// @has - '//*[@id="synthetic-implementations-list"]//*[@class="impl has-srclink"]//code' \ +// @has - '//*[@id="synthetic-implementations-list"]//*[@class="impl has-srclink"]//h3[@class="code-header in-band"]' \ // 'impl Send for Foo where T: Copy' // -// @has - '//*[@id="synthetic-implementations-list"]//*[@class="impl has-srclink"]//code' \ +// @has - '//*[@id="synthetic-implementations-list"]//*[@class="impl has-srclink"]//h3[@class="code-header in-band"]' \ // 'impl Sync for Foo where T: Sync' pub struct Foo { inner_field: Inner, diff --git a/src/test/rustdoc/synthetic_auto/no-redundancy.rs b/src/test/rustdoc/synthetic_auto/no-redundancy.rs index 5c744e3eb3c94..f727c9a47f268 100644 --- a/src/test/rustdoc/synthetic_auto/no-redundancy.rs +++ b/src/test/rustdoc/synthetic_auto/no-redundancy.rs @@ -9,7 +9,7 @@ where } // @has no_redundancy/struct.Outer.html -// @has - '//*[@id="synthetic-implementations-list"]//*[@class="impl has-srclink"]//code' \ +// @has - '//*[@id="synthetic-implementations-list"]//*[@class="impl has-srclink"]//h3[@class="code-header in-band"]' \ // "impl Send for Outer where T: Copy + Send" pub struct Outer { inner_field: Inner, diff --git a/src/test/rustdoc/synthetic_auto/overflow.rs b/src/test/rustdoc/synthetic_auto/overflow.rs index 546b3e07793e1..c132ab6fb1b3e 100644 --- a/src/test/rustdoc/synthetic_auto/overflow.rs +++ b/src/test/rustdoc/synthetic_auto/overflow.rs @@ -21,7 +21,7 @@ enum TyData { struct VariableKind(I::InternedType); // @has overflow/struct.BoundVarsCollector.html -// @has - '//code' "impl<'tcx> Send for BoundVarsCollector<'tcx>" +// @has - '//h3[@class="code-header in-band"]' "impl<'tcx> Send for BoundVarsCollector<'tcx>" pub struct BoundVarsCollector<'tcx> { val: VariableKind> } diff --git a/src/test/rustdoc/synthetic_auto/project.rs b/src/test/rustdoc/synthetic_auto/project.rs index baf9924b1ae66..8b020582563f3 100644 --- a/src/test/rustdoc/synthetic_auto/project.rs +++ b/src/test/rustdoc/synthetic_auto/project.rs @@ -23,10 +23,10 @@ where } // @has project/struct.Foo.html -// @has - '//*[@id="synthetic-implementations-list"]//*[@class="impl has-srclink"]//code' \ +// @has - '//*[@id="synthetic-implementations-list"]//*[@class="impl has-srclink"]//h3[@class="code-header in-band"]' \ // "impl<'c, K> Send for Foo<'c, K> where K: MyTrait, 'c: 'static" // -// @has - '//*[@id="synthetic-implementations-list"]//*[@class="impl has-srclink"]//code' \ +// @has - '//*[@id="synthetic-implementations-list"]//*[@class="impl has-srclink"]//h3[@class="code-header in-band"]' \ // "impl<'c, K> Sync for Foo<'c, K> where K: MyTrait, ::MyItem: OtherTrait, \ // 'c: 'static," pub struct Foo<'c, K: 'c> { diff --git a/src/test/rustdoc/synthetic_auto/self-referential.rs b/src/test/rustdoc/synthetic_auto/self-referential.rs index e96187e2c9632..ccef901b18da3 100644 --- a/src/test/rustdoc/synthetic_auto/self-referential.rs +++ b/src/test/rustdoc/synthetic_auto/self-referential.rs @@ -23,7 +23,7 @@ impl Pattern for Wrapper { // @has self_referential/struct.WriteAndThen.html -// @has - '//*[@id="synthetic-implementations-list"]//*[@class="impl has-srclink"]//code' \ +// @has - '//*[@id="synthetic-implementations-list"]//*[@class="impl has-srclink"]//h3[@class="code-header in-band"]' \ // "impl Send for WriteAndThen where ::Value: Send" pub struct WriteAndThen(pub P1::Value,pub > as Pattern>::Value) where P1: Pattern; diff --git a/src/test/rustdoc/synthetic_auto/static-region.rs b/src/test/rustdoc/synthetic_auto/static-region.rs index fc732a08ed404..36e985144b0e0 100644 --- a/src/test/rustdoc/synthetic_auto/static-region.rs +++ b/src/test/rustdoc/synthetic_auto/static-region.rs @@ -3,7 +3,7 @@ pub trait OwnedTrait<'a> { } // @has static_region/struct.Owned.html -// @has - '//*[@id="synthetic-implementations-list"]//*[@class="impl has-srclink"]//code' \ +// @has - '//*[@id="synthetic-implementations-list"]//*[@class="impl has-srclink"]//h3[@class="code-header in-band"]' \ // "impl Send for Owned where >::Reader: Send" pub struct Owned where T: OwnedTrait<'static> { marker: >::Reader, diff --git a/src/test/rustdoc/toggle-method.rs b/src/test/rustdoc/toggle-method.rs index f7f6086a4cb10..1aa74e5965960 100644 --- a/src/test/rustdoc/toggle-method.rs +++ b/src/test/rustdoc/toggle-method.rs @@ -4,9 +4,9 @@ // summary. Struct methods with no documentation should not be wrapped. // // @has foo/struct.Foo.html -// @has - '//details[@class="rustdoc-toggle method-toggle"]//summary//code' 'is_documented()' +// @has - '//details[@class="rustdoc-toggle method-toggle"]//summary//h4[@class="code-header"]' 'is_documented()' // @has - '//details[@class="rustdoc-toggle method-toggle"]//*[@class="docblock"]' 'is_documented is documented' -// @!has - '//details[@class="rustdoc-toggle method-toggle"]//summary//code' 'not_documented()' +// @!has - '//details[@class="rustdoc-toggle method-toggle"]//summary//h4[@class="code-header"]' 'not_documented()' pub struct Foo { } diff --git a/src/test/rustdoc/toggle-trait-fn.rs b/src/test/rustdoc/toggle-trait-fn.rs index 0bc5eba75a12d..65e8daeb06619 100644 --- a/src/test/rustdoc/toggle-trait-fn.rs +++ b/src/test/rustdoc/toggle-trait-fn.rs @@ -4,11 +4,11 @@ // summary. Trait methods with no documentation should not be wrapped. // // @has foo/trait.Foo.html -// @has - '//details[@class="rustdoc-toggle"]//summary//code' 'is_documented()' -// @!has - '//details[@class="rustdoc-toggle"]//summary//code' 'not_documented()' +// @has - '//details[@class="rustdoc-toggle"]//summary//h4[@class="code-header"]' 'is_documented()' +// @!has - '//details[@class="rustdoc-toggle"]//summary//h4[@class="code-header"]' 'not_documented()' // @has - '//details[@class="rustdoc-toggle"]//*[@class="docblock"]' 'is_documented is documented' -// @has - '//details[@class="rustdoc-toggle"]//summary//code' 'is_documented_optional()' -// @!has - '//details[@class="rustdoc-toggle"]//summary//code' 'not_documented_optional()' +// @has - '//details[@class="rustdoc-toggle"]//summary//h4[@class="code-header"]' 'is_documented_optional()' +// @!has - '//details[@class="rustdoc-toggle"]//summary//h4[@class="code-header"]' 'not_documented_optional()' // @has - '//details[@class="rustdoc-toggle"]//*[@class="docblock"]' 'is_documented_optional is documented' pub trait Foo { fn not_documented(); diff --git a/src/test/rustdoc/trait-impl.rs b/src/test/rustdoc/trait-impl.rs index 931691db3e6d9..05ccc074bf110 100644 --- a/src/test/rustdoc/trait-impl.rs +++ b/src/test/rustdoc/trait-impl.rs @@ -43,5 +43,5 @@ impl Trait for Struct { // @!has - '//*[@id="method.d"]/../../div[@class="docblock"]/p/em' fn d() {} - // @has - '//*[@id="impl-Trait"]/code/a/@href' 'trait.Trait.html' + // @has - '//*[@id="impl-Trait"]/h3//a/@href' 'trait.Trait.html' } diff --git a/src/test/rustdoc/traits-in-bodies.rs b/src/test/rustdoc/traits-in-bodies.rs index 1c3727a5748e6..6d450a625d0bf 100644 --- a/src/test/rustdoc/traits-in-bodies.rs +++ b/src/test/rustdoc/traits-in-bodies.rs @@ -4,7 +4,7 @@ pub struct Bounded(T); // @has traits_in_bodies/struct.SomeStruct.html -// @has - '//code' 'impl Clone for SomeStruct' +// @has - '//h3[@class="code-header in-band"]' 'impl Clone for SomeStruct' pub struct SomeStruct; fn asdf() -> Bounded { @@ -18,7 +18,7 @@ fn asdf() -> Bounded { } // @has traits_in_bodies/struct.Point.html -// @has - '//code' 'impl Copy for Point' +// @has - '//h3[@class="code-header in-band"]' 'impl Copy for Point' #[derive(Clone)] pub struct Point { x: i32, @@ -31,7 +31,7 @@ const _FOO: () = { }; // @has traits_in_bodies/struct.Inception.html -// @has - '//code' 'impl Clone for Inception' +// @has - '//h3[@class="code-header in-band"]' 'impl Clone for Inception' pub struct Inception; static _BAR: usize = { diff --git a/src/test/rustdoc/typedef.rs b/src/test/rustdoc/typedef.rs index 479cd91a9dc60..1fb28ee99702f 100644 --- a/src/test/rustdoc/typedef.rs +++ b/src/test/rustdoc/typedef.rs @@ -9,8 +9,8 @@ impl MyStruct { } // @has typedef/type.MyAlias.html -// @has - '//*[@class="impl has-srclink"]//code' 'impl MyAlias' -// @has - '//*[@class="impl has-srclink"]//code' 'impl MyTrait for MyAlias' +// @has - '//*[@class="impl has-srclink"]//h3[@class="code-header in-band"]' 'impl MyAlias' +// @has - '//*[@class="impl has-srclink"]//h3[@class="code-header in-band"]' 'impl MyTrait for MyAlias' // @has - 'Alias docstring' // @has - '//*[@class="sidebar"]//*[@class="location"]' 'Type Definition MyAlias' // @has - '//*[@class="sidebar"]//a[@href="#implementations"]' 'Methods' diff --git a/src/test/rustdoc/visibility.rs b/src/test/rustdoc/visibility.rs index beb638406c4be..cd284dad390e7 100644 --- a/src/test/rustdoc/visibility.rs +++ b/src/test/rustdoc/visibility.rs @@ -60,14 +60,14 @@ pub trait PubTrait { fn function(); } -// @has 'foo/struct.FooPublic.html' '//code' 'type Type' -// @!has 'foo/struct.FooPublic.html' '//code' 'pub type Type' +// @has 'foo/struct.FooPublic.html' '//h4[@class="code-header"]' 'type Type' +// @!has 'foo/struct.FooPublic.html' '//h4[@class="code-header"]' 'pub type Type' // -// @has 'foo/struct.FooPublic.html' '//code' 'const CONST: usize' -// @!has 'foo/struct.FooPublic.html' '//code' 'pub const CONST: usize' +// @has 'foo/struct.FooPublic.html' '//h4[@class="code-header"]' 'const CONST: usize' +// @!has 'foo/struct.FooPublic.html' '//h4[@class="code-header"]' 'pub const CONST: usize' // -// @has 'foo/struct.FooPublic.html' '//code' 'fn function()' -// @!has 'foo/struct.FooPublic.html' '//code' 'pub fn function()' +// @has 'foo/struct.FooPublic.html' '//h4[@class="code-header"]' 'fn function()' +// @!has 'foo/struct.FooPublic.html' '//h4[@class="code-header"]' 'pub fn function()' impl PubTrait for FooPublic { type Type = usize; diff --git a/src/test/rustdoc/where.rs b/src/test/rustdoc/where.rs index f204a27d7d3c1..549cfff96cb6d 100644 --- a/src/test/rustdoc/where.rs +++ b/src/test/rustdoc/where.rs @@ -11,7 +11,7 @@ pub fn charlie() where C: MyTrait {} pub struct Delta(D); -// @has foo/struct.Delta.html '//*[@class="impl has-srclink"]//code' \ +// @has foo/struct.Delta.html '//*[@class="impl has-srclink"]//h3[@class="code-header in-band"]' \ // "impl Delta where D: MyTrait" impl Delta where D: MyTrait { pub fn delta() {} @@ -19,17 +19,17 @@ impl Delta where D: MyTrait { pub struct Echo(E); -// @has foo/struct.Echo.html '//*[@class="impl has-srclink"]//code' \ +// @has foo/struct.Echo.html '//*[@class="impl has-srclink"]//h3[@class="code-header in-band"]' \ // "impl MyTrait for Echo where E: MyTrait" -// @has foo/trait.MyTrait.html '//*[@id="implementors-list"]//code' \ +// @has foo/trait.MyTrait.html '//*[@id="implementors-list"]//h3[@class="code-header in-band"]' \ // "impl MyTrait for Echo where E: MyTrait" impl MyTrait for Echo where E: MyTrait {} pub enum Foxtrot { Foxtrot1(F) } -// @has foo/enum.Foxtrot.html '//*[@class="impl has-srclink"]//code' \ +// @has foo/enum.Foxtrot.html '//*[@class="impl has-srclink"]//h3[@class="code-header in-band"]' \ // "impl MyTrait for Foxtrot where F: MyTrait" -// @has foo/trait.MyTrait.html '//*[@id="implementors-list"]//code' \ +// @has foo/trait.MyTrait.html '//*[@id="implementors-list"]//h3[@class="code-header in-band"]' \ // "impl MyTrait for Foxtrot where F: MyTrait" impl MyTrait for Foxtrot where F: MyTrait {} From 55f9bc09a64e845643572fe31c46e8b14d2edb74 Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Mon, 26 Jul 2021 15:22:37 +0200 Subject: [PATCH 10/10] Remove GUI tests for rust beta CI --- src/test/rustdoc-gui/basic-code.goml | 3 - src/test/rustdoc-gui/basic.goml | 4 -- .../rustdoc-gui/check_info_sign_position.goml | 9 --- src/test/rustdoc-gui/code-sidebar-toggle.goml | 6 -- src/test/rustdoc-gui/escape-key.goml | 34 ----------- src/test/rustdoc-gui/hash-item-expansion.goml | 18 ------ .../rustdoc-gui/impl-default-expansion.goml | 3 - src/test/rustdoc-gui/list_code_block.goml | 3 - src/test/rustdoc-gui/search-input-mobile.goml | 11 ---- .../rustdoc-gui/search-result-colors.goml | 14 ----- .../search-result-description.goml | 5 -- .../rustdoc-gui/search-result-display.goml | 12 ---- .../rustdoc-gui/search-result-keyword.goml | 10 ---- ...rch-tab-selection-if-current-is-empty.goml | 21 ------- src/test/rustdoc-gui/shortcuts.goml | 26 --------- src/test/rustdoc-gui/sidebar-mobile.goml | 10 ---- src/test/rustdoc-gui/sidebar.goml | 57 ------------------- src/test/rustdoc-gui/source-code-page.goml | 13 ----- src/test/rustdoc-gui/theme-change.goml | 10 ---- src/test/rustdoc-gui/toggle-docs-mobile.goml | 21 ------- src/test/rustdoc-gui/toggle-docs.goml | 10 ---- .../rustdoc-gui/trait-sidebar-item-order.goml | 7 --- 22 files changed, 307 deletions(-) delete mode 100644 src/test/rustdoc-gui/basic-code.goml delete mode 100644 src/test/rustdoc-gui/basic.goml delete mode 100644 src/test/rustdoc-gui/check_info_sign_position.goml delete mode 100644 src/test/rustdoc-gui/code-sidebar-toggle.goml delete mode 100644 src/test/rustdoc-gui/escape-key.goml delete mode 100644 src/test/rustdoc-gui/hash-item-expansion.goml delete mode 100644 src/test/rustdoc-gui/impl-default-expansion.goml delete mode 100644 src/test/rustdoc-gui/list_code_block.goml delete mode 100644 src/test/rustdoc-gui/search-input-mobile.goml delete mode 100644 src/test/rustdoc-gui/search-result-colors.goml delete mode 100644 src/test/rustdoc-gui/search-result-description.goml delete mode 100644 src/test/rustdoc-gui/search-result-display.goml delete mode 100644 src/test/rustdoc-gui/search-result-keyword.goml delete mode 100644 src/test/rustdoc-gui/search-tab-selection-if-current-is-empty.goml delete mode 100644 src/test/rustdoc-gui/shortcuts.goml delete mode 100644 src/test/rustdoc-gui/sidebar-mobile.goml delete mode 100644 src/test/rustdoc-gui/sidebar.goml delete mode 100644 src/test/rustdoc-gui/source-code-page.goml delete mode 100644 src/test/rustdoc-gui/theme-change.goml delete mode 100644 src/test/rustdoc-gui/toggle-docs-mobile.goml delete mode 100644 src/test/rustdoc-gui/toggle-docs.goml delete mode 100644 src/test/rustdoc-gui/trait-sidebar-item-order.goml diff --git a/src/test/rustdoc-gui/basic-code.goml b/src/test/rustdoc-gui/basic-code.goml deleted file mode 100644 index d014ed60eb039..0000000000000 --- a/src/test/rustdoc-gui/basic-code.goml +++ /dev/null @@ -1,3 +0,0 @@ -goto: file://|DOC_PATH|/test_docs/index.html -click: ".srclink" -assert: (".line-numbers", 1) diff --git a/src/test/rustdoc-gui/basic.goml b/src/test/rustdoc-gui/basic.goml deleted file mode 100644 index 44fcec3393744..0000000000000 --- a/src/test/rustdoc-gui/basic.goml +++ /dev/null @@ -1,4 +0,0 @@ -goto: file://|DOC_PATH|/test_docs/index.html -assert: ("#functions") -goto: ./struct.Foo.html -assert: ("div.type-decl") diff --git a/src/test/rustdoc-gui/check_info_sign_position.goml b/src/test/rustdoc-gui/check_info_sign_position.goml deleted file mode 100644 index d64ee0261370c..0000000000000 --- a/src/test/rustdoc-gui/check_info_sign_position.goml +++ /dev/null @@ -1,9 +0,0 @@ -goto: file://|DOC_PATH|/test_docs/index.html -goto: ./fn.check_list_code_block.html -// If the codeblock is the first element of the docblock, the information tooltip must have -// have some top margin to avoid going over the toggle (the "[+]"). -assert: (".docblock > .information > .compile_fail", { "margin-top": "16px" }) -// Checks that the other codeblocks don't have this top margin. -assert: ("ol > li > .information > .compile_fail", { "margin-top": "0px" }) -assert: ("ol > li > .information > .ignore", { "margin-top": "0px" }) -assert: (".docblock > .information > .ignore", { "margin-top": "0px" }) diff --git a/src/test/rustdoc-gui/code-sidebar-toggle.goml b/src/test/rustdoc-gui/code-sidebar-toggle.goml deleted file mode 100644 index 7e7003d4340a3..0000000000000 --- a/src/test/rustdoc-gui/code-sidebar-toggle.goml +++ /dev/null @@ -1,6 +0,0 @@ -goto: file://|DOC_PATH|/test_docs/index.html -click: ".srclink" -click: "#sidebar-toggle" -wait-for: 500 -fail: true -assert: ("#source-sidebar", { "left": "-300px" }) diff --git a/src/test/rustdoc-gui/escape-key.goml b/src/test/rustdoc-gui/escape-key.goml deleted file mode 100644 index ec034f52c972c..0000000000000 --- a/src/test/rustdoc-gui/escape-key.goml +++ /dev/null @@ -1,34 +0,0 @@ -goto: file://|DOC_PATH|/test_docs/index.html -// First, we check that the search results are hidden when the Escape key is pressed. -write: (".search-input", "test") -wait-for: "#search > h1" // The search element is empty before the first search -assert: ("#search", "class", "content") -assert: ("#main", "class", "content hidden") -press-key: "Escape" -assert: ("#search", "class", "content hidden") -assert: ("#main", "class", "content") - -// Check that focusing the search input brings back the search results -focus: ".search-input" -assert: ("#search", "class", "content") -assert: ("#main", "class", "content hidden") - -// Now let's check that when the help popup is displayed and we press Escape, it doesn't -// hide the search results too. -click: "#help-button" -assert: ("#help", "class", "") -press-key: "Escape" -assert: ("#help", "class", "hidden") -assert: ("#search", "class", "content") -assert: ("#main", "class", "content hidden") - -// Check that Escape hides the search results when a search result is focused. -focus: ".search-input" -assert: ".search-input:focus" -press-key: "ArrowDown" -assert-false: ".search-input:focus" -assert: "#results a:focus" -press-key: "Escape" -assert: ("#help", "class", "hidden") -assert: ("#search", "class", "content hidden") -assert: ("#main", "class", "content") diff --git a/src/test/rustdoc-gui/hash-item-expansion.goml b/src/test/rustdoc-gui/hash-item-expansion.goml deleted file mode 100644 index 1248d11200e6c..0000000000000 --- a/src/test/rustdoc-gui/hash-item-expansion.goml +++ /dev/null @@ -1,18 +0,0 @@ -// This test ensures that the element corresponding to the hash is displayed. -goto: file://|DOC_PATH|/test_docs/struct.Foo.html#method.borrow -// In the blanket implementations list, "Borrow" is the second one, hence the ":nth(2)". -assert: ("#blanket-implementations-list > details:nth-child(2)", "open", "") -// Please note the "\" below is needed because otherwise ".borrow" would be interpreted as -// a class selector. -assert: ("#method\.borrow", {"display": "flex"}) -// We first check that the impl block is open by default. -assert: ("#implementations + details", "open", "") -// We collapse it. -click: "#implementations + details > summary" -// We check that it was collapsed as expected. -assert-false: ("#implementations + details", "open", "") -// To ensure that we will click on the currently hidden method. -assert: (".sidebar-links > a", "must_use") -click: ".sidebar-links > a" -// We check that the impl block was opened as expected so that we can see the method. -assert: ("#implementations + details", "open", "") diff --git a/src/test/rustdoc-gui/impl-default-expansion.goml b/src/test/rustdoc-gui/impl-default-expansion.goml deleted file mode 100644 index 3f1e7ec4a789c..0000000000000 --- a/src/test/rustdoc-gui/impl-default-expansion.goml +++ /dev/null @@ -1,3 +0,0 @@ -// This test ensures that the impl blocks are open by default. -goto: file://|DOC_PATH|/test_docs/struct.Foo.html -assert: ("#main > details.implementors-toggle", "open", "") diff --git a/src/test/rustdoc-gui/list_code_block.goml b/src/test/rustdoc-gui/list_code_block.goml deleted file mode 100644 index 7d3490e9d9410..0000000000000 --- a/src/test/rustdoc-gui/list_code_block.goml +++ /dev/null @@ -1,3 +0,0 @@ -goto: file://|DOC_PATH|/test_docs/index.html -goto: ./fn.check_list_code_block.html -assert: ("pre.rust.fn") diff --git a/src/test/rustdoc-gui/search-input-mobile.goml b/src/test/rustdoc-gui/search-input-mobile.goml deleted file mode 100644 index 5c95db70aecdd..0000000000000 --- a/src/test/rustdoc-gui/search-input-mobile.goml +++ /dev/null @@ -1,11 +0,0 @@ -// Test to ensure that you can click on the search input, whatever the width. -// The PR which fixed it is: https://github.com/rust-lang/rust/pull/81592 -goto: file://|DOC_PATH|/test_docs/index.html -size: (463, 700) -// We first check that the search input isn't already focused. -assert-false: ("input.search-input:focus") -click: "input.search-input" -reload: -size: (750, 700) -click: "input.search-input" -assert: ("input.search-input:focus") diff --git a/src/test/rustdoc-gui/search-result-colors.goml b/src/test/rustdoc-gui/search-result-colors.goml deleted file mode 100644 index 25a015121592c..0000000000000 --- a/src/test/rustdoc-gui/search-result-colors.goml +++ /dev/null @@ -1,14 +0,0 @@ -goto: file://|DOC_PATH|/test_docs/index.html -// We set the theme so we're sure that the corect values will be used, whatever the computer -// this test is running on. -local-storage: {"rustdoc-theme": "dark", "rustdoc-preferred-dark-theme": "dark", "rustdoc-use-system-theme": "false"} -// If the text isn't displayed, the browser doesn't compute color style correctly... -show-text: true -// We reload the page so the local storage settings are being used. -reload: -write: (".search-input", "thisisanalias") -// Waiting for the search results to appear... -wait-for: "#titles" -// Checking that the colors for the alias element are the ones expected. -assert: (".result-name > .alias", {"color": "rgb(255, 255, 255)"}) -assert: (".result-name > .alias > .grey", {"color": "rgb(204, 204, 204)"}) diff --git a/src/test/rustdoc-gui/search-result-description.goml b/src/test/rustdoc-gui/search-result-description.goml deleted file mode 100644 index a50d03cf48912..0000000000000 --- a/src/test/rustdoc-gui/search-result-description.goml +++ /dev/null @@ -1,5 +0,0 @@ -// This test is to ensure that the codeblocks are correctly rendered in the search results. -goto: file://|DOC_PATH|/test_docs/index.html?search=some_more_function -// Waiting for the search results to appear... -wait-for: "#titles" -assert: (".search-results .desc code", "format!") diff --git a/src/test/rustdoc-gui/search-result-display.goml b/src/test/rustdoc-gui/search-result-display.goml deleted file mode 100644 index 96d15c624f115..0000000000000 --- a/src/test/rustdoc-gui/search-result-display.goml +++ /dev/null @@ -1,12 +0,0 @@ -goto: file://|DOC_PATH|/test_docs/index.html -size: (900, 1000) -write: (".search-input", "test") -// Waiting for the search results to appear... -wait-for: "#titles" -// The width is returned by "getComputedStyle" which returns the exact number instead of the -// CSS rule which is "50%"... -assert: (".search-results div.desc", {"width": "320px"}) -size: (600, 100) -// As counter-intuitive as it may seem, in this width, the width is "100%", which is why -// when computed it's larger. -assert: (".search-results div.desc", {"width": "570px"}) diff --git a/src/test/rustdoc-gui/search-result-keyword.goml b/src/test/rustdoc-gui/search-result-keyword.goml deleted file mode 100644 index e7612d663717a..0000000000000 --- a/src/test/rustdoc-gui/search-result-keyword.goml +++ /dev/null @@ -1,10 +0,0 @@ -goto: file://|DOC_PATH|/test_docs/index.html -write: (".search-input", "CookieMonster") -// Waiting for the search results to appear... -wait-for: "#titles" -// Note: The two next assert commands could be merged as one but readability would be -// less good. -// -// Checking that the CSS is displaying " (keyword)" in italic. -assert: (".result-name span.keyword > i", "(keyword)") -assert: (".result-name span.keyword", "CookieMonster (keyword)") diff --git a/src/test/rustdoc-gui/search-tab-selection-if-current-is-empty.goml b/src/test/rustdoc-gui/search-tab-selection-if-current-is-empty.goml deleted file mode 100644 index c828c72e910d5..0000000000000 --- a/src/test/rustdoc-gui/search-tab-selection-if-current-is-empty.goml +++ /dev/null @@ -1,21 +0,0 @@ -goto: file://|DOC_PATH|/test_docs/index.html -write: (".search-input", "Foo") -// Waiting for the search results to appear... -wait-for: "#titles" -assert: ("#titles > button:nth-of-type(1)", "class", "selected") - -// To go back to the original "state" -goto: file://|DOC_PATH|/test_docs/index.html -write: (".search-input", "-> String") -// Waiting for the search results to appear... -wait-for: "#titles" -// With this search, only the last tab shouldn't be empty so it should be selected. -assert: ("#titles > button:nth-of-type(3)", "class", "selected") - -// To go back to the original "state" -goto: file://|DOC_PATH|/test_docs/index.html -write: (".search-input", "-> Something") -// Waiting for the search results to appear... -wait-for: "#titles" -// With this search, all the tabs are empty so the first one should remain selected. -assert: ("#titles > button:nth-of-type(1)", "class", "selected") diff --git a/src/test/rustdoc-gui/shortcuts.goml b/src/test/rustdoc-gui/shortcuts.goml deleted file mode 100644 index 884c38d85fbdb..0000000000000 --- a/src/test/rustdoc-gui/shortcuts.goml +++ /dev/null @@ -1,26 +0,0 @@ -// Check that the various shortcuts are working. -goto: file://|DOC_PATH|/test_docs/index.html -// We first check that the search input isn't already focused. -assert-false: "input.search-input:focus" -press-key: "s" -assert: "input.search-input:focus" -press-key: "Escape" -assert-false: "input.search-input:focus" -// We now check for the help popup. -press-key: "?" -assert: ("#help", {"display": "flex"}) -assert-false: "#help.hidden" -press-key: "Escape" -assert: ("#help.hidden", {"display": "none"}) -// Check for the themes list. -assert: ("#theme-choices", {"display": "none"}) -press-key: "t" -assert: ("#theme-choices", {"display": "block"}) -press-key: "t" -// We ensure that 't' hides back the menu. -assert: ("#theme-choices", {"display": "none"}) -press-key: "t" -assert: ("#theme-choices", {"display": "block"}) -press-key: "Escape" -// We ensure that 'Escape' hides the menu too. -assert: ("#theme-choices", {"display": "none"}) diff --git a/src/test/rustdoc-gui/sidebar-mobile.goml b/src/test/rustdoc-gui/sidebar-mobile.goml deleted file mode 100644 index 9a1442e48a9ea..0000000000000 --- a/src/test/rustdoc-gui/sidebar-mobile.goml +++ /dev/null @@ -1,10 +0,0 @@ -// This test ensure that the sidebar isn't "hidden" on mobile but instead moved out of the viewport. -// This is especially important for devices for "text-first" content (like for users with -// sight issues). -goto: file://|DOC_PATH|/test_docs/struct.Foo.html -// Switching to "mobile view" by reducing the width to 600px. -size: (600, 600) -assert-css: (".sidebar-elems", {"display": "block", "left": "-246px"}) -// Opening the sidebar menu. -click: ".sidebar-menu" -assert-css: (".sidebar-elems", {"display": "block", "left": "0px"}) diff --git a/src/test/rustdoc-gui/sidebar.goml b/src/test/rustdoc-gui/sidebar.goml deleted file mode 100644 index 7703677154ef9..0000000000000 --- a/src/test/rustdoc-gui/sidebar.goml +++ /dev/null @@ -1,57 +0,0 @@ -goto: file://|DOC_PATH|/test_docs/index.html -assert: (".sidebar > .location", "Crate test_docs") -// In modules, we only have one "location" element. -assert: (".sidebar .location", 1) -assert: (".sidebar-elems > #all-types", "See all test_docs's items") -// We check that we have the crates list and that the "current" on is "test_docs". -assert: (".sidebar-elems > .crate > ul > li > a.current", "test_docs") -// And we're also supposed to have the list of items in the current module. -assert: (".sidebar-elems > .items > ul > li:nth-child(1)", "Modules") -assert: (".sidebar-elems > .items > ul > li:nth-child(2)", "Structs") -assert: (".sidebar-elems > .items > ul > li:nth-child(3)", "Enums") -assert: (".sidebar-elems > .items > ul > li:nth-child(4)", "Traits") -assert: (".sidebar-elems > .items > ul > li:nth-child(5)", "Functions") -assert: (".sidebar-elems > .items > ul > li:nth-child(6)", "Type Definitions") -assert: (".sidebar-elems > .items > ul > li:nth-child(7)", "Keywords") -assert: ("#structs + table td > a", "Foo") -click: "#structs + table td > a" - -// PAGE: struct.Foo.html -assert: (".sidebar .location", 2) -// We check that there is no crate listed outside of the top level. -assert-false: ".sidebar-elems > .crate" -// We now go back to the crate page to click on the "lib2" crate link. -goto: file://|DOC_PATH|/test_docs/index.html -click: ".sidebar-elems > .crate > ul > li:first-child > a" - -// PAGE: lib2/index.html -goto: file://|DOC_PATH|/lib2/index.html -assert: (".sidebar > .location", "Crate lib2") -// We check that we have the crates list and that the "current" on is now "lib2". -assert: (".sidebar-elems > .crate > ul > li > a.current", "lib2") -// We now go to the "foobar" function page. -assert: (".sidebar-elems > .items > ul > li:nth-child(1)", "Modules") -assert: (".sidebar-elems > .items > ul > li:nth-child(2)", "Functions") -assert: ("#functions + table td > a", "foobar") -click: "#functions + table td > a" - -// PAGE: fn.foobar.html -// In items containing no items (like functions or constants) and in modules, we have one -// "location" elements. -assert: (".sidebar .location", 1) -// There is a "
" tag between "in" and "lib2", but it doesn't count as a space. -assert: (".sidebar .sidebar-elems .location", "Other items inlib2") -// We check that we don't have the crate list. -assert-false: ".sidebar-elems > .crate" - -goto: ./module/index.html -assert: (".sidebar > .location", "Module module") -// We check that we don't have the crate list. -assert-false: ".sidebar-elems > .crate" - -goto: ./sub_module/sub_sub_module/index.html -assert: (".sidebar > .location", "Module sub_sub_module") -// We check that we don't have the crate list. -assert-false: ".sidebar-elems > .crate" -assert: (".sidebar-elems > .items > ul > li:nth-child(1)", "Functions") -assert: ("#functions + table td > a", "foo") diff --git a/src/test/rustdoc-gui/source-code-page.goml b/src/test/rustdoc-gui/source-code-page.goml deleted file mode 100644 index ff33a541a1801..0000000000000 --- a/src/test/rustdoc-gui/source-code-page.goml +++ /dev/null @@ -1,13 +0,0 @@ -goto: file://|DOC_PATH|/src/test_docs/lib.rs.html -// Check that we can click on the line number. -click: (40, 224) // This is the position of the span for line 4. -// Unfortunately, "#4" isn't a valid query selector, so we have to go around that limitation -// by instead getting the nth span. -assert: (".line-numbers > span:nth-child(4)", "class", "line-highlighted") -// We now check that the good spans are highlighted -goto: file://|DOC_PATH|/src/test_docs/lib.rs.html#4-6 -assert-false: (".line-numbers > span:nth-child(3)", "class", "line-highlighted") -assert: (".line-numbers > span:nth-child(4)", "class", "line-highlighted") -assert: (".line-numbers > span:nth-child(5)", "class", "line-highlighted") -assert: (".line-numbers > span:nth-child(6)", "class", "line-highlighted") -assert-false: (".line-numbers > span:nth-child(7)", "class", "line-highlighted") diff --git a/src/test/rustdoc-gui/theme-change.goml b/src/test/rustdoc-gui/theme-change.goml deleted file mode 100644 index bc9063edd1e7a..0000000000000 --- a/src/test/rustdoc-gui/theme-change.goml +++ /dev/null @@ -1,10 +0,0 @@ -goto: file://|DOC_PATH|/test_docs/index.html -click: "#theme-picker" -click: "#theme-choices > button:first-child" -wait-for: 500 -// should be the ayu theme so let's check the color -assert: ("body", { "background-color": "rgb(15, 20, 25)" }) -click: "#theme-choices > button:last-child" -wait-for: 500 -// should be the light theme so let's check the color -assert: ("body", { "background-color": "rgb(255, 255, 255)" }) diff --git a/src/test/rustdoc-gui/toggle-docs-mobile.goml b/src/test/rustdoc-gui/toggle-docs-mobile.goml deleted file mode 100644 index fcdfc0344db80..0000000000000 --- a/src/test/rustdoc-gui/toggle-docs-mobile.goml +++ /dev/null @@ -1,21 +0,0 @@ -goto: file://|DOC_PATH|/test_docs/struct.Foo.html -size: (433, 600) -assert: (".top-doc", "open", "") -click: (4, 280) // This is the position of the top doc comment toggle -assert-false: (".top-doc", "open", "") -click: (4, 280) -assert: (".top-doc", "open", "") -// To ensure that the toggle isn't over the text, we check that the toggle isn't clicked. -click: (3, 280) -assert: (".top-doc", "open", "") - -// Now we do the same but with a little bigger width -size: (600, 600) -assert: (".top-doc", "open", "") -click: (4, 240) // New Y position since all search elements are back on one line. -assert-false: (".top-doc", "open", "") -click: (4, 240) -assert: (".top-doc", "open", "") -// To ensure that the toggle isn't over the text, we check that the toggle isn't clicked. -click: (3, 240) -assert: (".top-doc", "open", "") diff --git a/src/test/rustdoc-gui/toggle-docs.goml b/src/test/rustdoc-gui/toggle-docs.goml deleted file mode 100644 index 062bc7d51e542..0000000000000 --- a/src/test/rustdoc-gui/toggle-docs.goml +++ /dev/null @@ -1,10 +0,0 @@ -goto: file://|DOC_PATH|/test_docs/index.html -assert: ("#main > details.top-doc", "open", "") -click: "#toggle-all-docs" -wait-for: 1000 -// This is now collapsed so there shouldn't be the "open" attribute on details. -assert-false: ("#main > details.top-doc", "open", "") -click: "#toggle-all-docs" -wait-for: 1000 -// Not collapsed anymore so the "open" attribute should be back. -assert: ("#main > details.top-doc", "open", "") diff --git a/src/test/rustdoc-gui/trait-sidebar-item-order.goml b/src/test/rustdoc-gui/trait-sidebar-item-order.goml deleted file mode 100644 index 2e9f85336ecd8..0000000000000 --- a/src/test/rustdoc-gui/trait-sidebar-item-order.goml +++ /dev/null @@ -1,7 +0,0 @@ -goto: file://|DOC_PATH|/test_docs/trait.AnotherOne.html -assert: (".sidebar-links a:nth-of-type(1)", "another") -assert: (".sidebar-links a:nth-of-type(2)", "func1") -assert: (".sidebar-links a:nth-of-type(3)", "func2") -assert: (".sidebar-links a:nth-of-type(4)", "func3") -assert: (".sidebar-links a:nth-of-type(5)", "hello") -assert: (".sidebar-links a:nth-of-type(6)", "why_not")