Skip to content

Commit

Permalink
helper to run test
Browse files Browse the repository at this point in the history
  • Loading branch information
mockersf committed May 25, 2022
1 parent 4cb8ca2 commit 51bfbc9
Show file tree
Hide file tree
Showing 8 changed files with 87 additions and 37 deletions.
16 changes: 16 additions & 0 deletions .github/start-wasm-example/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions .github/start-wasm-example/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,5 +9,8 @@
"license": "ISC",
"devDependencies": {
"@playwright/test": "^1.22.1"
},
"dependencies": {
"dotenv": "^16.0.1"
}
}
2 changes: 1 addition & 1 deletion .github/start-wasm-example/playwright.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { devices } from '@playwright/test';
* Read environment variables from file.
* https://github.com/motdotla/dotenv
*/
// require('dotenv').config();
require('dotenv').config();

/**
* See https://playwright.dev/docs/test-configuration.
Expand Down
3 changes: 0 additions & 3 deletions .github/start-wasm-example/test-wasm.ron

This file was deleted.

3 changes: 2 additions & 1 deletion .github/start-wasm-example/tests/wasm_example.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,8 @@ test.describe('WASM example', () => {
}
console.log(msg);
if (msg.includes("Test successful")) {
await page.screenshot({ path: `screenshot-${test_info.project.name}.png`, fullPage: true });
let prefix = process.env.SCREENSHOT_PREFIX === undefined ? "screenshot" : process.env.SCREENSHOT_PREFIX;
await page.screenshot({ path: `${prefix}-${test_info.project.name}.png`, fullPage: true });
found = true;
break;
}
Expand Down
20 changes: 2 additions & 18 deletions .github/workflows/validation-jobs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -53,31 +53,15 @@ jobs:
- name: First WASM build
run: |
cp .github/start-wasm-example/test-wasm.ron ci_testing_config.ron
cargo build --example ui --features "bevy_ci_testing" --target wasm32-unknown-unknown
cargo build --release --example ui --target wasm32-unknown-unknown
- name: Run examples
shell: bash
run: |
# start a webserver
python3 -m http.server --directory examples/wasm &
# build the example in wasm
cp .github/start-wasm-example/test-wasm.ron ci_testing_config.ron
for example_name in shapes lighting ui
do
echo "running $example_name - "`date`
cargo build --example $example_name --features "bevy_ci_testing" --target wasm32-unknown-unknown
wasm-bindgen --out-dir examples/wasm/target --out-name wasm_example --target web target/wasm32-unknown-unknown/debug/examples/$example_name.wasm
cd .github/start-wasm-example
# Fails to open a webgl2 render context in webkit in CI for all examples
# webkit doesn't work in 3D for now
xvfb-run npx playwright test --headed --project firefox chromium
mv screenshot-firefox.png screenshot-$example_name-firefox.png
mv screenshot-chromium.png screenshot-$example_name-chromium.png
# mv screenshot-webkit.png screenshot-$example_name-webkit.png
cd ../..
done
xvfb-run cargo run -p build-wasm-example -- --browsers chromium --browsers firefox --frames 25 --test shapes lighting text_debug breakout
- name: Save screenshots
uses: actions/upload-artifact@v3
Expand Down
1 change: 1 addition & 0 deletions tools/build-wasm-example/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,4 @@ license = "MIT OR Apache-2.0"

[dependencies]
xshell = "0.2"
clap = { version = "3.1.12", features = ["derive"] }
76 changes: 62 additions & 14 deletions tools/build-wasm-example/src/main.rs
Original file line number Diff line number Diff line change
@@ -1,18 +1,66 @@
use std::{fs::File, io::Write};

use clap::Parser;
use xshell::{cmd, Shell};

#[derive(Parser, Debug)]
struct Args {
/// Examples to build
examples: Vec<String>,

#[clap(short, long)]
/// Run tests
test: bool,

#[clap(short, long)]
/// Run on the given browsers. By default, chromium, firefox, webkit
browsers: Vec<String>,

#[clap(short, long)]
/// Stop after this number of frames
frames: Option<usize>,
}

fn main() {
let example = std::env::args().nth(1).expect("abbb");
let sh = Shell::new().unwrap();
cmd!(
sh,
"cargo build --release --target wasm32-unknown-unknown --example {example}"
)
.run()
.expect("Error building example");
cmd!(
sh,
"wasm-bindgen --out-dir examples/wasm/target --out-name wasm_example --target web target/wasm32-unknown-unknown/release/examples/{example}.wasm"
)
.run()
.expect("Error creating wasm binding");
let cli = Args::parse();
eprintln!("{:?}", cli);

assert!(!cli.examples.is_empty(), "must have at least one example");

let mut bevy_ci_testing = vec![];
if let Some(frames) = cli.frames {
let mut file = File::create("ci_testing_config.ron").unwrap();
file.write_fmt(format_args!("(exit_after: Some({}))", frames))
.unwrap();
bevy_ci_testing = vec!["--features", "bevy_ci_testing"];
}

for example in cli.examples {
let sh = Shell::new().unwrap();
let bevy_ci_testing = bevy_ci_testing.clone();
cmd!(
sh,
"cargo build {bevy_ci_testing...} --release --target wasm32-unknown-unknown --example {example}"
)
.run()
.expect("Error building example");
cmd!(
sh,
"wasm-bindgen --out-dir examples/wasm/target --out-name wasm_example --target web target/wasm32-unknown-unknown/release/examples/{example}.wasm"
)
.run()
.expect("Error creating wasm binding");

if cli.test {
let _dir = sh.push_dir(".github/start-wasm-example");
let mut browsers = cli.browsers.clone();
if !browsers.is_empty() {
browsers.insert(0, "--project".to_string());
}
cmd!(sh, "npx playwright test --headed {browsers...}")
.env("SCREENSHOT_PREFIX", format!("screenshot-{example}"))
.run()
.expect("Error running playwright test");
}
}
}

0 comments on commit 51bfbc9

Please sign in to comment.