Skip to content

Commit

Permalink
refactor(test-functional): rewrite test
Browse files Browse the repository at this point in the history
  • Loading branch information
ftoromanoff committed Aug 31, 2023
1 parent 9d81bcd commit 9b0dacf
Showing 1 changed file with 195 additions and 151 deletions.
346 changes: 195 additions & 151 deletions test/functional/others/GlobeControls.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,21 @@ let middleWidth;
let middleHeight;

describe('GlobeControls with globe example', function _() {
before(async () => {
await loadExample('examples/view_3d_map.html', this.fullTitle());
await page.evaluate(() => {
window.THREE = itowns.THREE;
const raycaster = new THREE.Raycaster();
const screen = new THREE.Vector2();
view
.getPickingPositionFromDepth = function fn(mouse, target = new THREE.Vector3()) {
let pageLoaded;
const title = this.fullTitle();

it("should load 'view_3d_map' page", async function _it() {
pageLoaded = await loadExample('examples/view_3d_map.html', title);
assert.ok(pageLoaded);
});

it('should get middle position', async function _it() {
if (pageLoaded) {
[middleWidth, middleHeight] = await page.evaluate(() => {
window.THREE = itowns.THREE;
const raycaster = new THREE.Raycaster();
const screen = new THREE.Vector2();
view.getPickingPositionFromDepth = function fn(mouse, target = new THREE.Vector3()) {
const g = view.mainLoop.gfxEngine;
const dim = g.getWindowSize();
const ellipsoid = new itowns.Ellipsoid(itowns.ellipsoidSizes);
Expand All @@ -27,173 +34,210 @@ describe('GlobeControls with globe example', function _() {
return target;
};

// Hide GUI :
debugMenu.gui.remove(cRL);
minimap.hide();
navigation.hide();
searchbar.hide();
scale.hide();
});

middleWidth = await page.evaluate(() => window.innerWidth / 2);
middleHeight = await page.evaluate(() => window.innerHeight / 2);
// Hide GUI :
debugMenu.gui.remove(cRL);
minimap.hide();
navigation.hide();
searchbar.hide();
scale.hide();
return [window.innerWidth / 2, window.innerHeight / 2];
});
assert.ok(middleWidth);
assert.ok(middleHeight);
} else {
this.skip();
}
});

it('should move and then tilt, like expected', async () => {
const tilt = 45;
const vCoord = { longitude: 22, latitude: 47 };
const result = await page.evaluate((pTilt, vC) => new Promise((resolve) => {
const tilts = [];
const cb = (event) => {
view.controls
.removeEventListener(itowns.CONTROL_EVENTS.ORIENTATION_CHANGED, cb);
tilts.push(view.controls.getTilt());
tilts.push(event.new.tilt);
const coord = view.controls.getLookAtCoordinate();
if (tilts.length === 3) {
resolve({ tilts, coord });
}
};
view.controls
.addEventListener(itowns.CONTROL_EVENTS.ORIENTATION_CHANGED, cb);

const pCoord = new itowns.Coordinates('EPSG:4326', vC.longitude, vC.latitude, 0);

view.controls.lookAtCoordinate({ coord: pCoord })
.then(() => view.controls.setTilt(pTilt).then((p) => {
tilts.push(p.tilt);
it('should move and then tilt, like expected', async function _it() {
if (pageLoaded) {
const tilt = 45;
const vCoord = { longitude: 22, latitude: 47 };
const result = await page.evaluate((pTilt, vC) => new Promise((resolve) => {
const tilts = [];
const cb = (event) => {
view.controls
.removeEventListener(itowns.CONTROL_EVENTS.ORIENTATION_CHANGED, cb);
tilts.push(view.controls.getTilt());
tilts.push(event.new.tilt);
const coord = view.controls.getLookAtCoordinate();
if (tilts.length === 3) {
resolve({ tilts, coord });
}
}));
}), tilt, vCoord);

const tilts = result.tilts;
const coord = result.coord;
const eps = 0.000001;

assert.ok(Math.abs(vCoord.longitude - coord.x) < eps);
assert.ok(Math.abs(vCoord.latitude - coord.y) < eps);
assert.ok(Math.abs(tilt - tilts[0]) < eps);
assert.ok(Math.abs(tilt - tilts[1]) < eps);
assert.ok(Math.abs(tilt - tilts[2]) < eps);
};
view.controls
.addEventListener(itowns.CONTROL_EVENTS.ORIENTATION_CHANGED, cb);

const pCoord = new itowns.Coordinates('EPSG:4326', vC.longitude, vC.latitude, 0);

view.controls.lookAtCoordinate({ coord: pCoord })
.then(() => view.controls.setTilt(pTilt).then((p) => {
tilts.push(p.tilt);
const coord = view.controls.getLookAtCoordinate();
if (tilts.length === 3) {
resolve({ tilts, coord });
}
}));
}), tilt, vCoord);

const tilts = result.tilts;
const coord = result.coord;
const eps = 0.000001;

assert.ok(Math.abs(vCoord.longitude - coord.x) < eps);
assert.ok(Math.abs(vCoord.latitude - coord.y) < eps);
assert.ok(Math.abs(tilt - tilts[0]) < eps);
assert.ok(Math.abs(tilt - tilts[1]) < eps);
assert.ok(Math.abs(tilt - tilts[2]) < eps);
} else {
this.skip();
}
});

it('should get same tilt with event, promise and getTilt, like expected', async () => {
const tilt = 45;
const tilts = await page.evaluate(pTilt => new Promise((resolve) => {
const checks = [];
const cb = (event) => {
it('should get same tilt with event, promise and getTilt, like expected', async function _it() {
if (pageLoaded) {
const tilt = 45;
const tilts = await page.evaluate(pTilt => new Promise((resolve) => {
const checks = [];
const cb = (event) => {
view.controls
.removeEventListener(itowns.CONTROL_EVENTS.ORIENTATION_CHANGED, cb);
checks.push(view.controls.getTilt());
checks.push(event.new.tilt);
if (checks.length === 3) {
resolve(checks);
}
};
view.controls
.removeEventListener(itowns.CONTROL_EVENTS.ORIENTATION_CHANGED, cb);
checks.push(view.controls.getTilt());
checks.push(event.new.tilt);
if (checks.length === 3) {
resolve(checks);
}
};
view.controls
.addEventListener(itowns.CONTROL_EVENTS.ORIENTATION_CHANGED, cb);
view.controls.setTilt(pTilt).then((p) => {
checks.push(p.tilt);
if (checks.length === 3) {
resolve(checks);
}
});
}), tilt);
assert.ok(Math.abs(tilt - tilts[0]) < 0.000001);
assert.ok(Math.abs(tilt - tilts[1]) < 0.000001);
assert.ok(Math.abs(tilt - tilts[2]) < 0.000001);
.addEventListener(itowns.CONTROL_EVENTS.ORIENTATION_CHANGED, cb);
view.controls.setTilt(pTilt).then((p) => {
checks.push(p.tilt);
if (checks.length === 3) {
resolve(checks);
}
});
}), tilt);

const eps = 0.000001;
assert.ok(Math.abs(tilt - tilts[0]) < eps);
assert.ok(Math.abs(tilt - tilts[1]) < eps);
assert.ok(Math.abs(tilt - tilts[2]) < eps);
} else {
this.skip();
}
});

it('should move like expected', async () => {
await page.evaluate(() => {
view.controls.enableDamping = false;
});
it('should move like expected', async function _it() {
if (pageLoaded && middleWidth) {
await page.evaluate(() => {
view.controls.enableDamping = false;
});

const mouse = page.mouse;
await mouse.move(middleWidth, middleHeight, { steps: 20 });
await mouse.down();
await mouse.move(middleWidth + 200, middleHeight, { steps: 50 });
await mouse.up();
const mouse = page.mouse;
await mouse.move(middleWidth, middleHeight, { steps: 20 });
await mouse.down();
await mouse.move(middleWidth + 200, middleHeight, { steps: 50 });
await mouse.up();

const endCoord = await page.evaluate(() => view.controls.getLookAtCoordinate());
const endCoord = await page.evaluate(() => view.controls.getLookAtCoordinate());

const diffLongitude = initialPosition.coord.x - endCoord.x;
assert.ok(Math.abs(Math.round(diffLongitude)) >= 25);
const diffLongitude = initialPosition.coord.x - endCoord.x;
assert.ok(Math.abs(Math.round(diffLongitude)) >= 25);
} else {
this.skip();
}
});

it('should zoom like expected with middle button', async () => {
await page.evaluate(() => { view.controls.enableDamping = false; });
const mouse = page.mouse;
await mouse.move(middleWidth, middleHeight, { steps: 20 });
await mouse.down({ button: 'middle' });
await mouse.move(middleWidth, (middleHeight) - 200, { steps: 50 });
await mouse.up({ button: 'middle' });
const endRange = await page.evaluate(() => Promise.resolve(view.controls.getRange()));
assert.ok((initialPosition.range - endRange) > 20000000);
it('should zoom like expected with middle button', async function _it() {
if (pageLoaded && middleWidth) {
await page.evaluate(() => { view.controls.enableDamping = false; });
const mouse = page.mouse;
await mouse.move(middleWidth, middleHeight, { steps: 20 });
await mouse.down({ button: 'middle' });
await mouse.move(middleWidth, (middleHeight) - 200, { steps: 50 });
await mouse.up({ button: 'middle' });
const endRange = await page.evaluate(() => Promise.resolve(view.controls.getRange()));
assert.ok((initialPosition.range - endRange) > 20000000);
} else {
this.skip();
}
});

it('should change tilt like expected', async () => {
await page.evaluate(() => { view.controls.enableDamping = false; });
await page.keyboard.down('Control');
const mouse = page.mouse;
await mouse.move(middleWidth, middleHeight);
await mouse.down();
await mouse.move(middleWidth, (middleHeight) - 200, { steps: 20 });
await mouse.up();
await page.keyboard.up('Control');
const endTilt = await page.evaluate(() => view.controls.getTilt());
assert.ok(initialPosition.tilt - endTilt > 20);
it('should change tilt like expected', async function _it() {
if (pageLoaded && middleWidth) {
await page.evaluate(() => { view.controls.enableDamping = false; });
await page.keyboard.down('Control');
const mouse = page.mouse;
await mouse.move(middleWidth, middleHeight);
await mouse.down();
await mouse.move(middleWidth, (middleHeight) - 200, { steps: 20 });
await mouse.up();
await page.keyboard.up('Control');
const endTilt = await page.evaluate(() => view.controls.getTilt());
assert.ok(initialPosition.tilt - endTilt > 20);
} else {
this.skip();
}
});

it('should change heading like expected', async () => {
await page.evaluate(() => { view.controls.enableDamping = false; });
await page.keyboard.down('Control');
const mouse = page.mouse;
await mouse.move(middleWidth, middleHeight, { steps: 20 });
await mouse.down();
await mouse.move((middleWidth) + 50, (middleHeight), { steps: 10 });
await mouse.up();
await page.keyboard.up('Control');
const endHeading = await page.evaluate(() => view.controls.getHeading());
assert.ok(Math.floor(initialPosition.heading + endHeading) > 10);
it('should change heading like expected', async function _it() {
if (pageLoaded && middleWidth) {
await page.evaluate(() => { view.controls.enableDamping = false; });
await page.keyboard.down('Control');
const mouse = page.mouse;
await mouse.move(middleWidth, middleHeight, { steps: 20 });
await mouse.down();
await mouse.move((middleWidth) + 50, (middleHeight), { steps: 10 });
await mouse.up();
await page.keyboard.up('Control');
const endHeading = await page.evaluate(() => view.controls.getHeading());
assert.ok(Math.floor(initialPosition.heading + endHeading) > 10);
} else {
this.skip();
}
});

it('should zoom like expected with double click', async () => {
const end = page.evaluate(() => new Promise((resolve) => {
const endAni = () => {
view.controls.removeEventListener('animation-ended', endAni);
resolve(view.controls.getRange());
};
view.controls.addEventListener('animation-ended', endAni);
}));

await page.evaluate(() => { view.controls.enableDamping = false; });
await page.mouse.click(middleWidth, middleHeight);
await page.mouse.click(middleWidth, middleHeight);
const result = await end.then(er => (initialPosition.range * 0.6) - er);
assert.ok(Math.abs(result) < 100);
it('should zoom like expected with double click', async function _it() {
if (pageLoaded && middleWidth) {
const end = page.evaluate(() => new Promise((resolve) => {
const endAni = () => {
view.controls.removeEventListener('animation-ended', endAni);
resolve(view.controls.getRange());
};
view.controls.addEventListener('animation-ended', endAni);
}));

await page.evaluate(() => { view.controls.enableDamping = false; });
await page.mouse.click(middleWidth, middleHeight);
await page.mouse.click(middleWidth, middleHeight);
const result = await end.then(er => (initialPosition.range * 0.6) - er);
assert.ok(Math.abs(result) < 100);
} else {
this.skip();
}
});

it('should zoom like expected with mouse wheel', async () => {
it('should zoom like expected with mouse wheel', async function _it() {
if (pageLoaded && middleWidth) {
// FIX Me: use puppetter mouse#wheel instead of new WheelEvent
await page.evaluate(() => { view.controls.enableDamping = false; });
await page.mouse.move(middleWidth, middleHeight, { steps: 20 });
const finalRange = await page.evaluate(() => new Promise((resolve) => {
view.mainLoop.addEventListener('command-queue-empty', () => {
if (view.mainLoop.renderingState === 0) {
resolve(view.controls.getRange());
}
});
const wheelEvent = new WheelEvent('wheel', {
deltaY: -50000,
});
view.domElement.dispatchEvent(wheelEvent, document);
window.dispatchEvent(wheelEvent, document);
}));
// On the travis server, the range is negative.
assert.ok(Math.abs(initialPosition.range - finalRange) > 2000000);
await page.evaluate(() => { view.controls.enableDamping = false; });
await page.mouse.move(middleWidth, middleHeight, { steps: 20 });
const finalRange = await page.evaluate(() => new Promise((resolve) => {
view.mainLoop.addEventListener('command-queue-empty', () => {
if (view.mainLoop.renderingState === 0) {
resolve(view.controls.getRange());
}
});
const wheelEvent = new WheelEvent('wheel', {
deltaY: -50000,
});
view.domElement.dispatchEvent(wheelEvent, document);
window.dispatchEvent(wheelEvent, document);
}));
// On the travis server, the range is negative.
assert.ok(Math.abs(initialPosition.range - finalRange) > 2000000);
} else {
this.skip();
}
});
});

0 comments on commit 9b0dacf

Please sign in to comment.