worldmap-viewer

git clone https://git.godosa.eu/worldmap-viewer

master

raw ยท 2424 bytes

import './_planet.mjs';
import { test } from 'node:test';
import assert from 'node:assert/strict';
import { FakeEl, installFakeDom } from './fakedom.mjs';

installFakeDom();
const { SearchBox } = await import('../js/searchbox.js');
const tick = () => new Promise(r => setTimeout(r, 0));

function box(pins = [], locate = async () => ({ lat: 1, lon: 2 })) {
  const input = new FakeEl('input'), list = new FakeEl('div'), went = [];
  new SearchBox(input, list, { pins: () => pins, locate, go: r => went.push(r) });
  return { input, list, went };
}

test('typing suggests; Enter flies to coordinates with a marker', async () => {
  const { input, list, went } = box();
  input.value = '40N 10W';
  input.fire('input');
  assert.equal(list.hidden, false);
  assert.equal(list.kids.length, 1);
  input.fire('keydown', { key: 'Enter' });
  await tick();
  assert.deepEqual([went[0].lat, went[0].lon, went[0].marker], [40, -10, true]);
  assert.equal(list.hidden, true);
});

test('arrows move the selection; pins fly without a marker', async () => {
  const pins = [{ name: 'Alpha', lat: 3, lon: 4, lore: null, note: '' }, { name: 'Alpine', lat: 5, lon: 6, lore: null, note: '' }];
  const { input, list, went } = box(pins);
  input.value = 'alp';
  input.fire('input');
  assert.equal(list.kids.length, 2);
  input.fire('keydown', { key: 'ArrowDown' });
  assert.match(list.kids[1].className, /sel/);
  input.fire('keydown', { key: 'Enter' });
  await tick();
  assert.deepEqual([went[0].lat, went[0].lon, went[0].marker], [5, 6, false]);
});

test('cell ids go through the server; failures are reported', async () => {
  const ok = box([], async cell => ({ cell, lat: -20, lon: 100 }));
  ok.input.value = '8528308ffffffff';
  ok.input.fire('input');
  ok.input.fire('keydown', { key: 'Enter' });
  await tick();
  assert.deepEqual([ok.went[0].lat, ok.went[0].lon], [-20, 100]);
  const bad = box([], async () => { throw new Error('nope'); });
  bad.input.value = '8528308ffffffff';
  bad.input.fire('input');
  bad.input.fire('keydown', { key: 'Enter' });
  await tick();
  assert.equal(bad.went[0].error, 'nope');
});

test('Esc closes the list; junk shows nothing', () => {
  const { input, list } = box();
  input.value = '95 10';
  input.fire('input');
  assert.equal(list.hidden, true);
  input.value = '40N 10W';
  input.fire('input');
  input.fire('keydown', { key: 'Escape' });
  assert.equal(list.hidden, true);
});