// Opt-in: inspect the real desktop without typing or changing its clipboard. import { chromium } from '../tools/playwright/node_modules/playwright/index.mjs'; import assert from 'node:assert/strict'; const browser=await chromium.launch({headless:true,args:["--disable-features=LocalNetworkAccessChecks"]}); try { const page=await browser.newPage({viewport:{width:1440,height:900},hasTouch:true});page.setDefaultTimeout(15000);page.on("pageerror",e=>console.error(e.message)); await page.goto(process.env.LAZYBOY_TEST_UI_URL||'http://127.0.0.1:8787'); const iframe=page.locator('iframe.desktop-frame');await iframe.waitFor({timeout:30000}); const frame=await (await iframe.elementHandle()).contentFrame(); await frame.waitForFunction(async()=>{const {default:ui}=await import('./app/ui.js');return ui.rfb?._rfbConnectionState==='connected'},undefined,{timeout:30000}); await page.waitForTimeout(2000); const live=page.frameLocator('iframe.desktop-frame'); await page.screenshot({path:'.run/desktop-controls-inspect.png'}); assert.equal(await live.locator('#noVNC_container').evaluate(el=>getComputedStyle(el).borderBottomRightRadius),'0px'); assert.equal(await live.locator('#lazyboy-tools').isVisible(),false); await page.screenshot({path:'.run/desktop-controls-desktop.png'}); await page.locator('.computer-expand').click(); await page.setViewportSize({width:390,height:844}); const mobile=page.frameLocator('iframe.desktop-frame'); await page.locator('.computer-overlay .computer-hud').waitFor({state:'hidden',timeout:30000}); await mobile.locator('canvas').waitFor(); await mobile.locator('#lazyboy-trackpad').waitFor(); const before=await mobile.locator('canvas').boundingBox(); await mobile.getByRole('button',{name:'放大',exact:true}).click(); const after=await mobile.locator('canvas').boundingBox();assert.ok(after.width>before.width*1.2); await page.screenshot({path:'.run/desktop-mobile-trackpad.png'}); await mobile.getByRole('button',{name:'剪貼簿 / 輸入'}).click(); await page.screenshot({path:'.run/desktop-controls-mobile.png'}); await page.evaluate(()=>document.documentElement.dataset.theme='light'); await mobile.locator('html[data-theme=light]').waitFor(); assert.equal(await mobile.locator('#lazyboy-tools').evaluate(el=>getComputedStyle(el).backgroundColor),'rgb(247, 247, 248)'); await page.screenshot({path:'.run/desktop-controls-mobile-light.png'}); await mobile.getByRole('button',{name:'關閉',exact:true}).click(); await page.setViewportSize({width:844,height:390}); await mobile.locator('html[data-landscape=true]').waitFor(); await page.screenshot({path:'.run/desktop-mobile-landscape.png'}); console.log('PASS desktop without toolbar, real noVNC zoom, phone trackpad, landscape left controls and theme sync'); }finally{await Promise.all(browser.contexts().map(c=>c.unrouteAll({behavior:"ignoreErrors"})));await browser.close()}