Initial commit: RHINE LAB · ANALYSIS OS:三维界面与动效实验(本仓库不含个人归档索引数据)
This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
// Run against a built preview; optionally set REVIEW_CHANNEL=msedge.
|
||||
import assert from 'node:assert/strict';
|
||||
import {mkdir, writeFile} from 'node:fs/promises';
|
||||
import {resolve} from 'node:path';
|
||||
import {pathToFileURL} from 'node:url';
|
||||
const {chromium}=await import(process.env.PLAYWRIGHT_MODULE?pathToFileURL(resolve(process.env.PLAYWRIGHT_MODULE)).href:'playwright');
|
||||
const channel=process.env.REVIEW_CHANNEL || 'chrome';
|
||||
const browser=await chromium.launch({channel,headless:true,args:['--use-angle=d3d11','--enable-gpu','--ignore-gpu-blocklist']});
|
||||
const report={channel,version:browser.version(),checks:[]};
|
||||
try {for(const reducedMotion of ['no-preference','reduce']) {
|
||||
const context=await browser.newContext({viewport:{width:1440,height:900},reducedMotion,serviceWorkers:'block'});
|
||||
const page=await context.newPage(),errors=[];page.on('pageerror',error=>errors.push(error.message));
|
||||
const loaded=async()=>{
|
||||
await page.waitForFunction(()=>window.rhine?.stats().ready);
|
||||
if(await page.locator('.entry-start').count())await page.locator('.entry-start').click();
|
||||
await page.waitForFunction(()=>!document.querySelector('#loading'));
|
||||
};
|
||||
await page.goto(process.env.REVIEW_URL || 'http://127.0.0.1:5190/');await loaded();
|
||||
let state=await page.evaluate(()=>window.rhine.stats());
|
||||
assert.equal(state.mode,reducedMotion==='reduce'?'archive':'boot');
|
||||
assert.equal(state.motion.reduced,reducedMotion==='reduce');
|
||||
await page.evaluate(()=>window.rhine.archive());
|
||||
await page.getByRole('button',{name:'系统设置',exact:true}).click();
|
||||
assert.equal(await page.locator('.settings-label').textContent(),'设置');
|
||||
const checkbox=page.locator('[data-pref="reduced"]');
|
||||
assert.equal(await checkbox.isChecked(),reducedMotion==='reduce');
|
||||
if(reducedMotion==='reduce') {
|
||||
await page.getByRole('button',{name:'启用完整动效并重播'}).click();
|
||||
await page.waitForFunction(()=>window.rhine.stats().mode==='boot');
|
||||
assert.equal(await page.locator('.modal-backdrop').count(),0);
|
||||
state=await page.evaluate(()=>window.rhine.stats());
|
||||
assert.equal(state.motion.reduced,false);assert.equal(state.motion.systemReduced,true);
|
||||
await page.evaluate(()=>window.rhine.archive());await page.waitForTimeout(1000);
|
||||
await page.locator('[data-action="next"]').click();await page.waitForTimeout(150);
|
||||
assert.equal(await page.locator('#stage').evaluate(el=>el.classList.contains('reduce-motion')),false);
|
||||
assert.ok((await page.evaluate(()=>window.rhine.stats().pulses.length))>0);
|
||||
await page.locator('.read-file').click();
|
||||
// The app override also restores document reveals under an OS reduce preference.
|
||||
await page.waitForSelector('.document-redaction-window',{state:'attached'});
|
||||
assert.equal(await page.locator('.document-redaction-window').first().evaluate(el=>getComputedStyle(el).display),'block');
|
||||
await page.reload();await loaded();assert.equal((await page.evaluate(()=>window.rhine.stats())).mode,'boot');
|
||||
}
|
||||
assert.deepEqual(errors,[]);report.checks.push({reducedMotion,passed:true});await context.close();
|
||||
}}finally{await browser.close()}
|
||||
await mkdir('.tools/responsive',{recursive:true});await writeFile(`.tools/responsive/startup-${channel}.json`,JSON.stringify(report,null,2));console.log(JSON.stringify(report,null,2));
|
||||
Reference in New Issue
Block a user