osm-map-js/scripts/test.cjs
2025-09-13 03:41:49 +09:00

67 lines
No EOL
2.1 KiB
JavaScript

const assert = require('node:assert');
const { spawn } = require('node:child_process');
const fs = require('node:fs');
const { Browser, Builder, By } = require('selenium-webdriver');
const firefox = require('selenium-webdriver/firefox');
async function test() {
const generate_env_var = process.env.OSM_MAP_GENERATE_DATA || 'false';
const generete_data = generate_env_var === '1' || generate_env_var.toLowerCase() === 'true';
const server = spawn('node', ['scripts/server.js'], {stdio: [null, null, 'inherit']}); // show stderr (stdout is read)
console.log('Creating selenium driver');
const options = new firefox.Options();
options.addArguments('--headless');
const driver = await new Builder().forBrowser(Browser.FIREFOX).setFirefoxOptions(options).build();
try
{
const max_try = 5;
let read_try = 0;
for(; read_try < max_try; read_try +=1)
{
const server_out = server.stdout.read();
if(server_out != null)
{
assert.equal('Server is listening on port 8080\n', server_out.toString(), 'Server not starting properly');
break;
}
await driver.sleep(50);
}
assert.notEqual(read_try, max_try, 'Timeout waiting for server starting');
const test_name = 'test';
console.log('Fetching test html');
await driver.get('http://localhost:8080/build/packages/osm-map-nano/dist/test.html');
assert.equal(`OSM Map Test : ${test_name}`, await driver.getTitle(), 'Wrong HTML title');
let canvas = await driver.findElement(By.id('canvas-test'));
const image_url_prefix = 'data:image/png;base64,';
const image_data = Buffer.from(
(await driver.executeScript('return arguments[0].toDataURL()', canvas)).substring(image_url_prefix.length), 'base64');
const expected_data = fs.readFileSync('data/test.png');
if(generete_data)
{
if(!expected_data.equals(image_data))
{
console.log(`Generating image for test ${test_name}`);
fs.writeFileSync('data/test.png', image_data);
}
}
else
assert.ok(expected_data.equals(image_data));
}
catch (error)
{
console.error('TEST FAILED');
console.error(error);
}
finally
{
console.log('Exiting selenium driver');
await driver.quit();
server.kill('SIGINT');
}
}
test();