// Offline checks: production components render, routes are focused, layer indices stay real.
// These do not replace the browser layout and interaction suites.
process.env.NODE_ENV = 'production';
const assert = require('node:assert/strict');
const { build } = require('esbuild');
const { readFile } = require('node:fs/promises');
const React = require('react');
const { renderToStaticMarkup } = require('react-dom/server');
async function compile(contents) {
const result = await build({ stdin: { contents, loader: 'jsx', resolveDir: __dirname },
bundle: true, write: false, platform: 'node', format: 'cjs', packages: 'external' });
const module = { exports: {} };
new Function('require', 'module', 'exports', result.outputFiles[0].text)(require, module, module.exports);
return module.exports;
}
(async () => {
const { chooseInspectionLayer } = await import('./frontend/flow-utils.mjs');
const forty = Array.from({ length: 40 }, (_, i) => i);
assert.equal(chooseInspectionLayer(forty), 31);
for (const previous of [0, 12, 39]) assert.equal(chooseInspectionLayer(forty, previous), previous);
assert.equal(chooseInspectionLayer([0, 1, 2, 3], 31), 3);
assert.equal(chooseInspectionLayer([0, 5, 39]), 39);
assert.equal(chooseInspectionLayer([0]), 0);
assert.equal(chooseInspectionLayer([]), null);
// An absent or invalid previous selection must never turn into an unsupported layer.
for (const available of [forty, [0, 1], [2, 5], [31], [39]]) {
for (const previous of [null, 0, 31, 39, 400]) assert(available.includes(chooseInspectionLayer(available, previous)));
}
// Load Carbon in its server environment before supplying the page's width.
require('@carbon/react');
global.window = { innerWidth: 1280 };
for (const file of ['index.html', 'how-it-works/index.html']) {
const html = await readFile(`frontend/${file}`, 'utf8');
const source = html.match(/', showSelection: true,
}));
assert(custom.includes('Uploaded example'));
assert(!custom.includes('Expected answer:'));
assert(!custom.includes('