-
Notifications
You must be signed in to change notification settings - Fork 1.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add base for GUI tests #2476
base: master
Are you sure you want to change the base?
Add base for GUI tests #2476
Changes from 1 commit
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||
---|---|---|---|---|---|---|---|---|
@@ -0,0 +1,87 @@ | ||||||||
use std::env::current_dir; | ||||||||
use std::fs::{read_to_string, remove_dir_all}; | ||||||||
use std::process::Command; | ||||||||
|
||||||||
fn get_available_browser_ui_test_version_inner(global: bool) -> Option<String> { | ||||||||
let mut command = Command::new("npm"); | ||||||||
command | ||||||||
.arg("list") | ||||||||
.arg("--parseable") | ||||||||
.arg("--long") | ||||||||
.arg("--depth=0"); | ||||||||
if global { | ||||||||
command.arg("--global"); | ||||||||
} | ||||||||
let stdout = command.output().expect("`npm` command not found").stdout; | ||||||||
let lines = String::from_utf8_lossy(&stdout); | ||||||||
lines | ||||||||
.lines() | ||||||||
.find_map(|l| l.split(':').nth(1)?.strip_prefix("browser-ui-test@")) | ||||||||
.map(std::borrow::ToOwned::to_owned) | ||||||||
} | ||||||||
|
||||||||
fn get_available_browser_ui_test_version() -> Option<String> { | ||||||||
get_available_browser_ui_test_version_inner(false) | ||||||||
.or_else(|| get_available_browser_ui_test_version_inner(true)) | ||||||||
} | ||||||||
|
||||||||
fn expected_browser_ui_test_version() -> String { | ||||||||
let content = read_to_string(".github/workflows/main.yml") | ||||||||
.expect("failed to read `.github/workflows/main.yml`"); | ||||||||
for line in content.lines() { | ||||||||
let line = line.trim(); | ||||||||
if let Some(version) = line.strip_prefix("BROWSER_UI_TEST_VERSION:") { | ||||||||
return version.trim().replace('\'', ""); | ||||||||
} | ||||||||
} | ||||||||
panic!("failed to retrieved `browser-ui-test` version"); | ||||||||
} | ||||||||
|
||||||||
fn main() { | ||||||||
let browser_ui_test_version = expected_browser_ui_test_version(); | ||||||||
match get_available_browser_ui_test_version() { | ||||||||
Some(version) => { | ||||||||
if version != browser_ui_test_version { | ||||||||
eprintln!( | ||||||||
"⚠️ Installed version of browser-ui-test (`{version}`) is different than the \ | ||||||||
one used in the CI (`{browser_ui_test_version}`) You can install this version \ | ||||||||
using `npm update browser-ui-test` or by using `npm install browser-ui-test\ | ||||||||
@{browser_ui_test_version}`", | ||||||||
); | ||||||||
} | ||||||||
} | ||||||||
None => { | ||||||||
panic!( | ||||||||
"`browser-ui-test` is not installed. You can install this package using `npm \ | ||||||||
update browser-ui-test` or by using `npm install browser-ui-test\ | ||||||||
@{browser_ui_test_version}`", | ||||||||
); | ||||||||
} | ||||||||
} | ||||||||
|
||||||||
let current_dir = current_dir().expect("failed to retrieve current directory"); | ||||||||
let test_book = current_dir.join("test_book"); | ||||||||
|
||||||||
// Result doesn't matter. | ||||||||
let _ = remove_dir_all(test_book.join("book")); | ||||||||
|
||||||||
let mut cmd = Command::new("cargo"); | ||||||||
cmd.arg("run").arg("build").arg(&test_book); | ||||||||
// Then we run the GUI tests on it. | ||||||||
assert!(cmd.status().is_ok_and(|status| status.success())); | ||||||||
|
||||||||
let book_dir = format!("file://{}", current_dir.join("test_book/book/").display()); | ||||||||
|
||||||||
let mut command = Command::new("npx"); | ||||||||
command | ||||||||
.arg("browser-ui-test") | ||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Lacking anything else to try...
Suggested change
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Okay, then. Looks like the solution is to turn off the sandbox (at least in CI, which is already isolated into containers). There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. You need to rustfmt this file. Tabs aren't used for indentation here. |
||||||||
.args(["--variable", "DOC_PATH", book_dir.as_str()]) | ||||||||
.args(["--test-folder", "tests/gui"]); | ||||||||
if std::env::args().any(|arg| arg == "--disable-headless-test") { | ||||||||
command.arg("--no-headless"); | ||||||||
} | ||||||||
|
||||||||
// Then we run the GUI tests on it. | ||||||||
let status = command.status().expect("failed to get command output"); | ||||||||
assert!(status.success()); | ||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
This should give us a little more information. |
||||||||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,59 @@ | ||
// This GUI test checks sidebar hide/show and also its behaviour on smaller | ||
// width. | ||
|
||
// We disable the requests checks because `searchindex.json` will always fail | ||
// locally. | ||
fail-on-request-error: false | ||
go-to: |DOC_PATH| + "index.html" | ||
set-window-size: (1100, 600) | ||
// Need to reload for the new size to be taken account by the JS. | ||
reload: | ||
|
||
store-value: (content_indent, 308) | ||
|
||
define-function: ( | ||
"hide-sidebar", | ||
[], | ||
block { | ||
// The content should be "moved" to the right because of the sidebar. | ||
assert-css: ("#sidebar", {"transform": "none"}) | ||
assert-position: ("#page-wrapper", {"x": |content_indent|}) | ||
|
||
// We now hide the sidebar. | ||
click: "#sidebar-toggle" | ||
wait-for: "body.sidebar-hidden" | ||
// `transform` is 0.3s so we need to wait a bit (0.5s) to ensure the animation is done. | ||
wait-for: 5000 | ||
assert-css-false: ("#sidebar", {"transform": "none"}) | ||
// The page content should now be on the left. | ||
assert-position: ("#page-wrapper", {"x": 0}) | ||
}, | ||
) | ||
|
||
define-function: ( | ||
"show-sidebar", | ||
[], | ||
block { | ||
// The page content should be on the left and the sidebar "moved out". | ||
assert-css: ("#sidebar", {"transform": "matrix(1, 0, 0, 1, -308, 0)"}) | ||
assert-position: ("#page-wrapper", {"x": 0}) | ||
|
||
// We expand the sidebar. | ||
click: "#sidebar-toggle" | ||
wait-for: "body.sidebar-visible" | ||
// `transform` is 0.3s so we need to wait a bit (0.5s) to ensure the animation is done. | ||
wait-for: 5000 | ||
assert-css-false: ("#sidebar", {"transform": "matrix(1, 0, 0, 1, -308, 0)"}) | ||
// The page content should be moved to the right. | ||
assert-position: ("#page-wrapper", {"x": |content_indent|}) | ||
}, | ||
) | ||
|
||
call-function: ("hide-sidebar", {}) | ||
call-function: ("show-sidebar", {}) | ||
|
||
// We now test on smaller width to ensure that the sidebar is collapsed by default. | ||
set-window-size: (900, 600) | ||
reload: | ||
call-function: ("show-sidebar", {}) | ||
call-function: ("hide-sidebar", {}) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Since I removed the
if
condition, the GUI test is now failing on linux. I have no clue what's going since the output seems to not be present for unknown reasons...