From 3443c1c65e9f1753e1e656b35d08416c1fa298f2 Mon Sep 17 00:00:00 2001 From: godosa Date: Wed, 7 Oct 2026 00:14:38 +0200 Subject: worldmap-viewer: initial public history --- viewer/tools/smoke/core.mjs | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 viewer/tools/smoke/core.mjs (limited to 'viewer/tools/smoke/core.mjs') diff --git a/viewer/tools/smoke/core.mjs b/viewer/tools/smoke/core.mjs new file mode 100644 index 0000000..000215c --- /dev/null +++ b/viewer/tools/smoke/core.mjs @@ -0,0 +1,18 @@ +// core.mjs — the viewer boots, renders the globe, switches views and layers without console errors. +export const steps = [ + { name: 'boots', wait: 4000, expect: v => v.ok && !v.toast, + js: `const a = window.mapViewer; return { ok: !!a && !!a.texture, toast: document.getElementById('toast').textContent };` }, + { name: 'globe drawn (centre pixel is not background)', expect: v => Math.abs(v[0] - 16) + Math.abs(v[1] - 18) + Math.abs(v[2] - 26) > 20, + js: `const a = window.mapViewer, gl = a.renderer.getContext(); a.view.render(); const p = new Uint8Array(4); + gl.readPixels(gl.drawingBufferWidth >> 1, gl.drawingBufferHeight >> 1, 1, 1, gl.RGBA, gl.UNSIGNED_BYTE, p); return [...p.slice(0, 3)];` }, + { name: 'views switch', expect: v => v.join() === 'equal_earth,plate_carree,globe', + js: `const a = window.mapViewer, out = []; for (const k of ['equal_earth', 'plate_carree', 'globe']) { a.setView(k); out.push(a.view.kind); } return out;` }, + { name: 'flat views render (their shaders compile)', expect: v => v.every(p => Math.abs(p[0] - 16) + Math.abs(p[1] - 18) + Math.abs(p[2] - 26) > 20), + js: `const a = window.mapViewer, gl = a.renderer.getContext(), out = []; + for (const k of ['equal_earth', 'plate_carree']) { a.setView(k); a.view.setState({ lat: 0, lon: 0, zoom: 1 }); a.view.render(); + const p = new Uint8Array(4); gl.readPixels(gl.drawingBufferWidth >> 1, gl.drawingBufferHeight >> 1, 1, 1, gl.RGBA, gl.UNSIGNED_BYTE, p); out.push([...p.slice(0, 3)]); } + a.setView('globe'); return out;` }, + { name: 'layers load', expect: v => v.n >= 19 && !v.toast, + js: `const s = document.getElementById('layer'); for (const o of s.options) { s.value = o.value; s.dispatchEvent(new Event('change')); await new Promise(r => setTimeout(r, 400)); } + return { n: s.options.length, toast: document.getElementById('toast').textContent };` }, +]; -- cgit