test_webgpu.js 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. const puppeteer = require('puppeteer');
  2. const { spawn } = require('child_process');
  3. const res = spawn("python", ["-m", "http.server", "8000"], { shell: true });
  4. async function timeout(time) {
  5. return new Promise((resolve) => setTimeout(resolve, time));
  6. }
  7. function cleanup(err) {
  8. console.log("cleaning up");
  9. res.kill();
  10. if (err != null) {
  11. console.error(err);
  12. process.exit(1);
  13. }
  14. process.exit(0);
  15. }
  16. async function waitForText(selector, text) {
  17. let n = 0;
  18. let ready = false;
  19. while (n < 30) {
  20. const res = await (await selector.getProperty("textContent")).jsonValue();
  21. console.log(`waiting for text ${text} got ${res}`);
  22. if(res == text) {
  23. ready = true;
  24. break
  25. }
  26. await timeout(1000);
  27. n += 1
  28. }
  29. return ready;
  30. }
  31. async function runTest() {
  32. const browser = await puppeteer.launch({ headless: false, args: ["--enable-unsafe-webgpu"] });
  33. const page = await browser.newPage();
  34. page.on("console", message => console.log(`message from console ${message.text()}`))
  35. .on("pageerror", ({ message }) => console.log(`error from page ${message}`));
  36. const res = await page.goto("http://localhost:8000/examples/index.html");
  37. if (res.status() !== 200) throw new Error("Failed to load page");
  38. const textSelector = await page.waitForSelector("#result");
  39. const buttonSelector = await page.waitForSelector("input[type=button]");
  40. const ready = await waitForText(textSelector, "ready");
  41. if (!ready) throw new Error("Failed to load page");
  42. await buttonSelector.evaluate(e => e.click());
  43. const done = await waitForText(textSelector, "hen");
  44. if (!done) throw new Error("failed to get hen");
  45. cleanup(null);
  46. }
  47. runTest().catch(err => cleanup(err));