Auto merge of #79979 - GuillaumeGomez:rustdoc-gui-tests, r=Mark-Simulacrum

Rustdoc gui tests

This is a reopening of #70533.

For this first version, there will be no screenshot comparison. Also, a big change compared to the previous version: the tests are now hosted in the rust repository directly. Since there is no image, it's pretty lightweight to say the least.

So now, only remains the nodejs script to run the tests and the tests themselves. Just one thing is missing: where should I put the documentation for these tests? I'm not sure where would be the best place for that. The doc will contain important information like the documentation of the framework used and how to install it (`npm install browser-ui-test`, but still needs to be put somewhere so no one is lost).

We'd also need to install the package when running the CI too. For now, it runs as long as we have nodejs installed, but I think we don't it to run in all nodejs targets?

cc `@jyn514`

r? `@Mark-Simulacrum`
This commit is contained in:
bors 2021-02-22 06:47:59 +00:00
commit 352238d152
19 changed files with 312 additions and 3 deletions

View file

@ -0,0 +1,3 @@
goto: file://|DOC_PATH|/index.html
click: ".srclink"
assert: (".line-numbers", 1)

View file

@ -0,0 +1,4 @@
goto: file://|DOC_PATH|/index.html
assert: ("#functions")
goto: ./struct.Foo.html
assert: ("div.type-decl")

View file

@ -0,0 +1,6 @@
goto: file://|DOC_PATH|/index.html
click: ".srclink"
click: "#sidebar-toggle"
wait-for: 500
fail: true
assert: ("#source-sidebar", { "left": "-300px" })

View file

@ -0,0 +1,67 @@
//! The point of this crate is to be able to have enough different "kinds" of
//! documentation generated so we can test each different features.
#![crate_name = "test_docs"]
use std::fmt;
/// Basic function with some code examples:
///
/// ```
/// println!("nothing fancy");
/// ```
///
/// A failing to compile one:
///
/// ```compile_fail
/// println!("where did my argument {} go? :'(");
/// ```
///
/// An ignored one:
///
/// ```ignore (it's a test)
/// Let's say I'm just some text will ya?
/// ```
pub fn foo() {}
/// Just a normal struct.
pub struct Foo;
/// Just a normal enum.
pub enum WhoLetTheDogOut {
/// Woof!
Woof,
/// Meoooooooow...
Meow,
}
/// Who doesn't love to wrap a `format!` call?
pub fn some_more_function<T: fmt::Debug>(t: &T) -> String {
format!("{:?}", t)
}
/// Woohoo! A trait!
pub trait AnotherOne {
/// Some func 1.
fn func1();
/// Some func 2.
fn func2();
/// Some func 3.
fn func3();
}
/// Check for "i" signs in lists!
///
/// 1. elem 1
/// 2.test 1
/// ```compile_fail
/// fn foo() {}
/// ```
/// 3. elem 3
/// 4. ```ignore (it's a test)
/// fn foo() {}
/// ```
/// 5. elem 5
pub fn check_list_code_block() {}

View file

@ -0,0 +1,3 @@
goto: file://|DOC_PATH|/index.html
goto: ./fn.check_list_code_block.html
assert: ("pre.rust.fn")

View file

@ -0,0 +1,10 @@
goto: file://|DOC_PATH|/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)" })

View file

@ -0,0 +1,7 @@
goto: file://|DOC_PATH|/index.html
click: "#toggle-all-docs"
wait-for: 5000
assert: ("#main > div.docblock.hidden-by-usual-hider")
click: "#toggle-all-docs"
wait-for: 5000
assert: ("#main > div.docblock.hidden-by-usual-hider", 0)