67 lines
No EOL
2.1 KiB
JavaScript
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(); |