import { test } from 'node:test';
import assert from 'node:assert/strict';
const { compactMode, freeArea, applyMode, textureCap } = await import('../js/layout.js');
test('phones get a compact layout; tablets and desktops keep theirs', () => {
assert.equal(compactMode(390, 844), 'portrait'); // phone, upright
assert.equal(compactMode(700, 1000), 'portrait');
assert.equal(compactMode(844, 390), 'landscape'); // phone on its side
assert.equal(compactMode(1000, 500), 'landscape');
assert.equal(compactMode(1024, 768), ''); // tablet
assert.equal(compactMode(1400, 900), '');
assert.equal(compactMode(1200, 450), '', 'a wide short window is a desktop');
});
test('the free map area leaves out what the panel covers', () => {
assert.deepEqual(freeArea(1400, 900, { left: 1050, top: 10, width: 340, height: 880 }), { w: 1050, h: 900 });
assert.deepEqual(freeArea(390, 844, { left: 0, top: 464, width: 390, height: 380 }), { w: 390, h: 464 });
assert.deepEqual(freeArea(390, 844, null), { w: 390, h: 844 });
assert.deepEqual(freeArea(390, 844, { left: 0, top: 0, width: 0, height: 0 }), { w: 390, h: 844 });
assert.deepEqual(freeArea(390, 844, { left: 0, top: 10, width: 390, height: 834 }), { w: 390, h: 64 }, 'never below a tile row');
});
test('applyMode sets the body classes and says when a phone layout begins', () => {
const cls = new Set(['menu-open']);
const body = { classList: { toggle: (c, on) => (on ? cls.add(c) : cls.delete(c)), remove: c => cls.delete(c) } };
assert.equal(applyMode(body, 'portrait', ''), true);
assert.deepEqual([...cls].sort(), ['compact', 'menu-open', 'portrait']);
assert.equal(applyMode(body, 'landscape', 'portrait'), false, 'already compact');
assert.deepEqual([...cls].sort(), ['compact', 'landscape', 'menu-open']);
assert.equal(applyMode(body, '', 'landscape'), false);
assert.deepEqual([...cls], [], 'desktop: no phone classes, menu closed');
});
test('touch devices and phone screens get 4096-px layer textures; desktops their GPU maximum', () => {
assert.equal(textureCap(16384, false, 1400, 900), 16384);
assert.equal(textureCap(16384, true, 1400, 900), 4096, 'a tablet');
assert.equal(textureCap(16384, false, 390, 844), 4096, 'a phone-sized window');
assert.equal(textureCap(2048, true, 390, 844), 2048, 'never above the GPU limit');
});