test.cjs 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. const { chromium } = require('playwright');
  2. const fs = require('fs');
  3. (async () => {
  4. const APP = process.env.APP;
  5. const URL = 'http://127.0.0.1:8077/';
  6. const browser = await chromium.launch({
  7. headless: true,
  8. args: ['--no-sandbox', '--enable-unsafe-swiftshader', '--use-gl=angle', '--use-angle=swiftshader', '--ignore-gpu-blocklist'],
  9. });
  10. const page = await browser.newPage({ viewport: { width: 1100, height: 800 } });
  11. const errors = [], pageerrors = [], notfound = [];
  12. page.on('console', (m) => { if (m.type() === 'error') errors.push(m.text()); });
  13. page.on('pageerror', (e) => pageerrors.push(String(e)));
  14. page.on('response', (r) => { if (r.status() === 404) notfound.push(r.url().replace(/^https?:\/\/[^/]+/, '')); });
  15. await page.goto(URL, { waitUntil: 'networkidle' });
  16. // --- DEMO scene + walk test ---
  17. await page.click('#btn-demo');
  18. await page.waitForFunction('window.__genreconReady === true', { timeout: 20000 });
  19. await page.waitForTimeout(1400); // settle on floor
  20. const params = await page.evaluate('window.__params');
  21. const demoTris = await page.evaluate('window.__genreconTris');
  22. const cam0 = await page.evaluate('window.__genreconCam');
  23. await page.evaluate(() => document.dispatchEvent(new KeyboardEvent('keydown', { code: 'KeyW' })));
  24. await page.waitForTimeout(1000);
  25. const dbg = await page.evaluate('window.__dbg');
  26. await page.evaluate(() => document.dispatchEvent(new KeyboardEvent('keyup', { code: 'KeyW' })));
  27. const cam1 = await page.evaluate('window.__genreconCam');
  28. const walkDist = Math.hypot(cam1[0] - cam0[0], cam1[2] - cam0[2]);
  29. await page.screenshot({ path: APP + '/test-demo.png' });
  30. // --- full upload→reconstruct(mock)→viewer flow ---
  31. const fake = APP + '/_fakevid.mp4';
  32. fs.writeFileSync(fake, Buffer.alloc(4096, 1));
  33. await page.goto(URL, { waitUntil: 'networkidle' });
  34. await page.setInputFiles('#file-input', fake);
  35. await page.waitForSelector('#view-progress.active', { timeout: 5000 });
  36. await page.waitForSelector('#view-viewer.active', { timeout: 40000 });
  37. await page.waitForFunction('window.__genreconReady === true', { timeout: 20000 });
  38. await page.waitForTimeout(800);
  39. const uploadTris = await page.evaluate('window.__genreconTris');
  40. await page.screenshot({ path: APP + '/test-upload.png' });
  41. console.log(JSON.stringify({
  42. errors, pageerrors, notfound: [...new Set(notfound)],
  43. params, demoTris, cam0, cam1, walkDist, dbg, uploadTris,
  44. }, null, 2));
  45. await browser.close();
  46. })().catch((e) => { console.error('TEST_FAIL', e); process.exit(1); });