import { test } from 'node:test'; import assert from 'node:assert/strict'; import { assertChangedAssets, assertWarmAssets } from './measurement.mjs'; test('changed CSS and feature measurements reject unrelated application transfers',()=>{ const requests=[{url:'/sw.js',bytes:7000},{url:'/asset-sync-core.js',bytes:2000},{url:'/index.html',bytes:12000},{url:'/api/manifest',bytes:3000},{url:'/theme-glass.css?v=new',bytes:5000},{url:'/fonts/a.woff2',bytes:0}]; assertChangedAssets(requests,'/theme-glass.css'); assert.throws(()=>assertChangedAssets([...requests,{url:'/app.js?v=new',bytes:10000}],'/theme-glass.css')); assert.throws(()=>assertChangedAssets(requests.filter(r=>!r.url.includes('theme-glass')),'/theme-glass.css')); assertChangedAssets([{url:'/presenter.js?v=new',bytes:3200}],'/presenter.js'); assert.throws(()=>assertChangedAssets([{url:'/presenter.js?v=new',bytes:3200},{url:'/icons/192.png',bytes:1000}],'/presenter.js')); }); test('warm measurements reject unfinished shell downloads but allow API checks',()=>{ assertWarmAssets([{url:'/api/version',bytes:62},{url:'/app.js?v=current',bytes:0}]); assert.throws(()=>assertWarmAssets([{url:'/theme-glass.css?v=current',bytes:5000}])); });