fix: align presentation with complete Strategy narrative
Build and publish Eldorado documentation / build (pull_request) Successful in 48s
Build and publish Eldorado documentation / build (pull_request) Successful in 48s
This commit is contained in:
1 parent
eea14bf00f
commit
c88f4dbc25
8 files changed
+505
-73
No files matched your search
@@ -11,22 +11,23 @@ const fs=require('node:fs'); const assert=require('node:assert/strict');
|
||||
const page=await context.newPage();const errors=[];page.on('pageerror',e=>errors.push(e.message));page.on('response',r=>{if(r.status()>=400)errors.push(`${r.status()} ${r.url()}`)});page.on('console',m=>{if(m.type()==='error')errors.push(m.text())});
|
||||
assert.equal((await page.goto(url,{waitUntil:'networkidle'})).status(),200);
|
||||
await page.waitForFunction(()=>window.Reveal?.isReady());await page.evaluate(()=>document.fonts.ready);
|
||||
assert.equal(await page.evaluate(()=>Reveal.getTotalSlides()),19);
|
||||
assert.equal(await page.evaluate(()=>Reveal.getTotalSlides()),23);
|
||||
assert.equal(await page.evaluate(()=>Reveal.getConfig().transition),'none');
|
||||
const bounds=[];
|
||||
for(let i=0;i<19;i++){
|
||||
for(let i=0;i<23;i++){
|
||||
await page.evaluate(i=>Reveal.slide(i),i);await page.waitForTimeout(60);
|
||||
const bad=await page.evaluate(()=>{
|
||||
const slide=Reveal.getCurrentSlide(),r=slide.getBoundingClientRect();
|
||||
return [...slide.querySelectorAll('h1,h2,p,li,td,th,.rail,.gate,.facts,.flow,.roles,.timeline,.capacity,.measure-list,.contrast,.comparison,.choices,.ledger')].filter(e=>!e.closest('.notes')).filter(e=>{const b=e.getBoundingClientRect();return b.bottom>r.bottom+1||b.right>r.right+1||b.left<r.left-1||b.top<r.top-1}).map(e=>e.textContent.slice(0,60));
|
||||
return [...slide.querySelectorAll('svg,text,.journey,.learning-loop,.contribution-grid,h1,h2,p,li,td,th,.rail,.gate,.facts,.flow,.roles,.timeline,.capacity,.measure-list,.contrast,.comparison,.choices,.ledger')].filter(e=>!e.closest('.notes')&&e.getBoundingClientRect().width>0).filter(e=>{const b=e.getBoundingClientRect();return b.bottom>r.bottom+1||b.right>r.right+1||b.left<r.left-1||b.top<r.top-1}).map(e=>e.textContent.slice(0,60));
|
||||
});
|
||||
bounds.push({slide:i+1,overflow:bad});
|
||||
if(i===4)assert(await page.evaluate(()=>[...document.querySelectorAll('#contributors .contribution-grid>div')].every(e=>{const a=e.querySelector('span').getBoundingClientRect(), arrow=e.querySelector('i').getBoundingClientRect(), b=e.querySelector('b').getBoundingClientRect();return a.bottom<=arrow.top+2&&arrow.bottom<=b.top+2&&Math.abs((a.left+a.right-b.left-b.right)/2)<2&&getComputedStyle(e.querySelector('i')).transform==='matrix(0, 1, -1, 0, 0, 0)'})),'contribution arrows must point down to their own phase');
|
||||
bounds.push({slide:i+1,overflow:bad});
|
||||
await page.screenshot({path:`${out}/${viewport.width}-slide-${String(i+1).padStart(2,'0')}.png`});
|
||||
}
|
||||
fs.writeFileSync(`${out}/${viewport.width}-bounds.json`,JSON.stringify(bounds,null,2));
|
||||
assert.deepEqual(bounds.filter(b=>b.overflow.length),[],'slide overflow');
|
||||
await page.goto(url+'#/qualification');await page.reload();await page.waitForFunction(()=>Reveal.isReady());assert.equal(await page.evaluate(()=>Reveal.getCurrentSlide().id),'qualification');
|
||||
await page.keyboard.press('ArrowRight');assert.equal(await page.evaluate(()=>Reveal.getCurrentSlide().id),'inconclusive');await page.keyboard.press('ArrowLeft');
|
||||
await page.keyboard.press('ArrowRight');assert.equal(await page.evaluate(()=>Reveal.getCurrentSlide().id),'experiment');await page.keyboard.press('ArrowLeft');
|
||||
await page.getByRole('button',{name:'Overview',exact:true}).click();assert(await page.evaluate(()=>Reveal.isOverview()));await page.keyboard.press('Escape');assert(!await page.evaluate(()=>Reveal.isOverview()));
|
||||
if(viewport.width===1440){
|
||||
await page.getByRole('button',{name:'Fullscreen',exact:true}).click();await page.waitForFunction(()=>!!document.fullscreenElement);await page.getByRole('button',{name:'Fullscreen',exact:true}).click();await page.waitForFunction(()=>!document.fullscreenElement);
|
||||
@@ -42,11 +43,11 @@ const fs=require('node:fs'); const assert=require('node:assert/strict');
|
||||
const links=await page.locator('a').evaluateAll(els=>els.map(e=>e.href).filter(h=>!h.includes('?')));
|
||||
for(const link of new Set(links))assert.equal((await page.request.get(link)).status(),200,link);
|
||||
await page.getByRole('link',{name:'Portal',exact:true}).click();await page.waitForURL(base+root);await page.getByRole('link',{name:/Open presentation/}).scrollIntoViewIfNeeded();await page.screenshot({path:`${out}/${viewport.width}-homepage.png`});await page.getByRole('link',{name:/Open presentation/}).click();await page.waitForFunction(()=>window.Reveal?.isReady());
|
||||
assert.deepEqual(errors,[]);results.push({viewport,slides:19,overflow:false,errors,deepLinkRefresh:true,keyboard:true,overview:true,links:true,touch:viewport.width!==1440});await context.close();
|
||||
assert.deepEqual(errors,[]);results.push({viewport,slides:23,overflow:false,errors,deepLinkRefresh:true,keyboard:true,overview:true,links:true,touch:viewport.width!==1440});await context.close();
|
||||
}
|
||||
const narrow=await browser.newPage({viewport:{width:320,height:720}});await narrow.goto(url,{waitUntil:'networkidle'});await narrow.evaluate(()=>document.fonts.ready);assert(await narrow.evaluate(()=>document.querySelector('.toolbar').scrollWidth<=innerWidth),'320px toolbar must not clip Print');await narrow.screenshot({path:out+'/320-toolbar.png'});await narrow.close();
|
||||
const page=await browser.newPage({viewport:{width:1440,height:900}});await page.goto(url+'?print-pdf',{waitUntil:'networkidle'});await page.waitForFunction(()=>document.querySelectorAll('.pdf-page').length===19);await page.pdf({path:out+'/print.pdf',preferCSSPageSize:true,printBackground:true});
|
||||
assert.equal(await page.locator('.pdf-page').count(),19);
|
||||
fs.writeFileSync(`${out}/results.json`,JSON.stringify({results,printPages:19},null,2));console.log('PASS: 57 slide views, bounds, refresh/hash, keyboard, overview, touch, fullscreen, notes, all links, homepage, print');
|
||||
const page=await browser.newPage({viewport:{width:1440,height:900}});await page.goto(url+'?print-pdf',{waitUntil:'networkidle'});await page.waitForFunction(()=>document.querySelectorAll('.pdf-page').length===23);await page.pdf({path:out+'/print.pdf',preferCSSPageSize:true,printBackground:true});
|
||||
assert.equal(await page.locator('.pdf-page').count(),23);
|
||||
fs.writeFileSync(`${out}/results.json`,JSON.stringify({results,printPages:23},null,2));console.log('PASS: 69 slide views, bounds, refresh/hash, keyboard, overview, touch, fullscreen, notes, all links, homepage, print');
|
||||
}finally{await browser.close()}
|
||||
})().catch(e=>{console.error(e);process.exitCode=1});
|
||||
Reference in new issue
Block a user