import { Cartesian2 } from "../../Source/Cesium.js";
|
import { combine } from "../../Source/Cesium.js";
|
import { FeatureDetection } from "../../Source/Cesium.js";
|
import { KeyboardEventModifier } from "../../Source/Cesium.js";
|
import { CameraEventAggregator } from "../../Source/Cesium.js";
|
import { CameraEventType } from "../../Source/Cesium.js";
|
import createCanvas from "../createCanvas.js";
|
import DomEventSimulator from "../DomEventSimulator.js";
|
|
describe("Scene/CameraEventAggregator", function () {
|
var usePointerEvents;
|
var canvas;
|
var handler;
|
var handler2;
|
|
beforeAll(function () {
|
usePointerEvents = FeatureDetection.supportsPointerEvents();
|
canvas = createCanvas(1024, 768);
|
});
|
|
afterAll(function () {
|
document.body.removeChild(canvas);
|
});
|
|
beforeEach(function () {
|
handler = new CameraEventAggregator(canvas);
|
});
|
|
afterEach(function () {
|
handler = handler && !handler.isDestroyed() && handler.destroy();
|
handler2 = handler2 && !handler2.isDestroyed() && handler2.destroy();
|
});
|
|
var MouseButtons = {
|
LEFT: 0,
|
MIDDLE: 1,
|
RIGHT: 2,
|
};
|
|
function simulateMouseDown(options) {
|
if (usePointerEvents) {
|
DomEventSimulator.firePointerDown(
|
canvas,
|
combine(options, {
|
pointerType: "mouse",
|
})
|
);
|
} else {
|
DomEventSimulator.fireMouseDown(canvas, options);
|
}
|
}
|
|
function simulateMouseUp(options) {
|
if (usePointerEvents) {
|
DomEventSimulator.firePointerUp(
|
canvas,
|
combine(options, {
|
pointerType: "mouse",
|
})
|
);
|
} else {
|
DomEventSimulator.fireMouseUp(canvas, options);
|
}
|
}
|
|
function simulateMouseMove(options) {
|
if (usePointerEvents) {
|
DomEventSimulator.firePointerMove(
|
canvas,
|
combine(options, {
|
pointerType: "mouse",
|
})
|
);
|
} else {
|
DomEventSimulator.fireMouseMove(canvas, options);
|
}
|
}
|
|
function moveMouse(button, startPosition, endPosition, shiftKey) {
|
var canvasRect = canvas.getBoundingClientRect();
|
|
var options = {
|
button: button,
|
clientX: startPosition.x + canvasRect.left,
|
clientY: startPosition.y + canvasRect.top,
|
shiftKey: shiftKey,
|
};
|
simulateMouseDown(options);
|
options.clientX = endPosition.x + canvasRect.left;
|
options.clientY = endPosition.y + canvasRect.top;
|
simulateMouseMove(options);
|
simulateMouseUp(options);
|
}
|
|
it("throws without a canvas", function () {
|
expect(function () {
|
handler2 = new CameraEventAggregator();
|
}).toThrowDeveloperError();
|
});
|
|
it("getMovement throws without a type", function () {
|
expect(function () {
|
handler.getMovement();
|
}).toThrowDeveloperError();
|
});
|
|
it("isMoving throws without a type", function () {
|
expect(function () {
|
handler.isMoving();
|
}).toThrowDeveloperError();
|
});
|
|
it("isButtonDown throws without a type", function () {
|
expect(function () {
|
handler.isButtonDown();
|
}).toThrowDeveloperError();
|
});
|
|
it("getButtonPressTime throws without a type", function () {
|
expect(function () {
|
handler.getButtonPressTime();
|
}).toThrowDeveloperError();
|
});
|
|
it("getButtonReleaseTime throws without a type", function () {
|
expect(function () {
|
handler.getButtonReleaseTime();
|
}).toThrowDeveloperError();
|
});
|
|
it("getMovement", function () {
|
var startPosition = Cartesian2.ZERO;
|
var endPosition = Cartesian2.UNIT_X;
|
|
moveMouse(MouseButtons.LEFT, startPosition, endPosition);
|
var movement = handler.getMovement(CameraEventType.LEFT_DRAG);
|
expect(movement).toBeDefined();
|
expect(movement.startPosition).toEqual(startPosition);
|
expect(movement.endPosition).toEqual(endPosition);
|
|
moveMouse(MouseButtons.RIGHT, startPosition, endPosition, true);
|
movement = handler.getMovement(
|
CameraEventType.RIGHT_DRAG,
|
KeyboardEventModifier.SHIFT
|
);
|
expect(movement).toBeDefined();
|
expect(movement.startPosition).toEqual(startPosition);
|
expect(movement.endPosition).toEqual(endPosition);
|
});
|
|
it("getLastMovement", function () {
|
expect(handler.getLastMovement(CameraEventType.LEFT_DRAG)).toBeUndefined();
|
var startPosition = Cartesian2.ZERO;
|
var endPosition = Cartesian2.UNIT_X;
|
var endPosition2 = Cartesian2.UNIT_Y;
|
|
var canvasRect = canvas.getBoundingClientRect();
|
|
var options = {
|
button: MouseButtons.LEFT,
|
clientX: startPosition.x + canvasRect.left,
|
clientY: startPosition.y + canvasRect.top,
|
};
|
simulateMouseDown(options);
|
options.clientX = endPosition.x + canvasRect.left;
|
options.clientY = endPosition.y + canvasRect.top;
|
simulateMouseMove(options);
|
handler.reset();
|
options.clientX = endPosition2.x + canvasRect.left;
|
options.clientY = endPosition2.y + canvasRect.top;
|
simulateMouseMove(options);
|
|
var movement = handler.getLastMovement(CameraEventType.LEFT_DRAG);
|
expect(movement).toBeDefined();
|
expect(movement.startPosition).toEqual(startPosition);
|
expect(movement.endPosition).toEqual(endPosition);
|
});
|
|
it("isMoving", function () {
|
expect(handler.isMoving(CameraEventType.LEFT_DRAG)).toEqual(false);
|
var startPosition = Cartesian2.ZERO;
|
var endPosition = Cartesian2.UNIT_X;
|
|
moveMouse(MouseButtons.LEFT, startPosition, endPosition);
|
expect(handler.isMoving(CameraEventType.LEFT_DRAG)).toEqual(true);
|
handler.reset();
|
expect(handler.isMoving(CameraEventType.LEFT_DRAG)).toEqual(false);
|
});
|
|
it("isButtonDown", function () {
|
expect(handler.isButtonDown(CameraEventType.LEFT_DRAG)).toEqual(false);
|
|
var options = {
|
button: MouseButtons.LEFT,
|
clientX: 0,
|
clientY: 0,
|
};
|
simulateMouseDown(options);
|
|
expect(handler.isButtonDown(CameraEventType.LEFT_DRAG)).toEqual(true);
|
simulateMouseUp(options);
|
expect(handler.isButtonDown(CameraEventType.LEFT_DRAG)).toEqual(false);
|
});
|
|
it("anyButtonDown", function () {
|
expect(handler.anyButtonDown).toEqual(false);
|
|
var options = {
|
button: MouseButtons.LEFT,
|
clientX: 0,
|
clientY: 0,
|
};
|
simulateMouseDown(options);
|
expect(handler.anyButtonDown).toEqual(true);
|
|
options.button = MouseButtons.RIGHT;
|
simulateMouseDown(options);
|
expect(handler.anyButtonDown).toEqual(true);
|
|
simulateMouseUp(options);
|
|
options.button = MouseButtons.LEFT;
|
simulateMouseUp(options);
|
|
expect(handler.anyButtonDown).toEqual(false);
|
});
|
|
it("cancels anyButtonDown on any button up", function () {
|
expect(handler.anyButtonDown).toEqual(false);
|
|
var options = {
|
button: MouseButtons.LEFT,
|
clientX: 0,
|
clientY: 0,
|
};
|
simulateMouseDown(options);
|
|
options.button = MouseButtons.RIGHT;
|
simulateMouseDown(options);
|
|
simulateMouseUp(options);
|
|
expect(handler.anyButtonDown).toEqual(false);
|
});
|
|
it("getButtonPressTime", function () {
|
expect(
|
handler.getButtonPressTime(CameraEventType.LEFT_DRAG)
|
).toBeUndefined();
|
|
var options = {
|
button: MouseButtons.LEFT,
|
clientX: 0,
|
clientY: 0,
|
};
|
var before = new Date();
|
simulateMouseDown(options);
|
var after = new Date();
|
|
var downTime = handler.getButtonPressTime(CameraEventType.LEFT_DRAG);
|
expect(downTime).toBeDefined();
|
expect(downTime.getTime()).toBeGreaterThanOrEqualTo(before.getTime());
|
expect(downTime.getTime()).toBeLessThanOrEqualTo(after.getTime());
|
});
|
|
it("getButtonReleaseTime", function () {
|
expect(
|
handler.getButtonReleaseTime(CameraEventType.LEFT_DRAG)
|
).toBeUndefined();
|
|
var options = {
|
button: MouseButtons.LEFT,
|
clientX: 0,
|
clientY: 0,
|
};
|
simulateMouseDown(options);
|
var before = new Date();
|
simulateMouseUp(options);
|
var after = new Date();
|
|
var upTime = handler.getButtonReleaseTime(CameraEventType.LEFT_DRAG);
|
expect(upTime).toBeDefined();
|
expect(upTime.getTime()).toBeGreaterThanOrEqualTo(before.getTime());
|
expect(upTime.getTime()).toBeLessThanOrEqualTo(after.getTime());
|
});
|
|
it("aggregates events", function () {
|
var startPosition = Cartesian2.ZERO;
|
var endPosition = Cartesian2.UNIT_X;
|
var endPosition2 = Cartesian2.UNIT_Y;
|
|
var canvasRect = canvas.getBoundingClientRect();
|
|
var options = {
|
button: MouseButtons.LEFT,
|
clientX: startPosition.x + canvasRect.left,
|
clientY: startPosition.y + canvasRect.top,
|
};
|
simulateMouseDown(options);
|
options.clientX = endPosition.x + canvasRect.left;
|
options.clientY = endPosition.y + canvasRect.top;
|
simulateMouseMove(options);
|
options.clientX = endPosition2.x + canvasRect.left;
|
options.clientY = endPosition2.y + canvasRect.top;
|
simulateMouseMove(options);
|
|
var movement = handler.getMovement(CameraEventType.LEFT_DRAG);
|
expect(movement).toBeDefined();
|
expect(movement.startPosition).toEqual(startPosition);
|
expect(movement.endPosition).toEqual(endPosition2);
|
});
|
|
it("isDestroyed", function () {
|
expect(handler.isDestroyed()).toEqual(false);
|
handler.destroy();
|
expect(handler.isDestroyed()).toEqual(true);
|
});
|
});
|