You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
116 lines
3.1 KiB
JavaScript
116 lines
3.1 KiB
JavaScript
import { Cartesian3 } from "../../Source/Cesium.js";
|
|
import { Math as CesiumMath } from "../../Source/Cesium.js";
|
|
import { DeviceOrientationCameraController } from "../../Source/Cesium.js";
|
|
import createCamera from "../createCamera.js";
|
|
import createCanvas from "../createCanvas.js";
|
|
import DomEventSimulator from "../DomEventSimulator.js";
|
|
|
|
describe("Scene/DeviceOrientationCameraController", function () {
|
|
var scene;
|
|
var canvas;
|
|
var camera;
|
|
var controller;
|
|
|
|
function MockScene(canvas, camera) {
|
|
this.canvas = canvas;
|
|
this.camera = camera;
|
|
}
|
|
|
|
beforeAll(function () {
|
|
canvas = createCanvas();
|
|
});
|
|
|
|
afterAll(function () {
|
|
document.body.removeChild(canvas);
|
|
});
|
|
|
|
beforeEach(function () {
|
|
camera = createCamera({
|
|
canvas: canvas,
|
|
offset: new Cartesian3(-1.0, 0.0, 0.0),
|
|
});
|
|
scene = new MockScene(canvas, camera);
|
|
controller = new DeviceOrientationCameraController(scene);
|
|
});
|
|
|
|
afterEach(function () {
|
|
controller =
|
|
controller && !controller.isDestroyed() && controller.destroy();
|
|
});
|
|
|
|
function fireEvent(options) {
|
|
// set default orientation
|
|
DomEventSimulator.fireDeviceOrientation(window);
|
|
controller.update();
|
|
// update delta orientation
|
|
DomEventSimulator.fireDeviceOrientation(window, options);
|
|
controller.update();
|
|
}
|
|
|
|
it("throws without scene", function () {
|
|
expect(function () {
|
|
return new DeviceOrientationCameraController();
|
|
}).toThrowDeveloperError();
|
|
});
|
|
|
|
it("rotates for alpha", function () {
|
|
var position = Cartesian3.clone(camera.position);
|
|
var up = Cartesian3.clone(camera.up);
|
|
|
|
fireEvent({
|
|
alpha: 90.0,
|
|
});
|
|
|
|
expect(camera.position).toEqual(position);
|
|
expect(camera.direction).toEqualEpsilon(
|
|
Cartesian3.UNIT_Y,
|
|
CesiumMath.EPSILON14
|
|
);
|
|
expect(camera.up).toEqualEpsilon(up, CesiumMath.EPSILON14);
|
|
expect(camera.right).toEqualEpsilon(
|
|
Cartesian3.UNIT_X,
|
|
CesiumMath.EPSILON14
|
|
);
|
|
});
|
|
|
|
it("rotates for beta", function () {
|
|
var position = Cartesian3.clone(camera.position);
|
|
var direction = Cartesian3.clone(camera.direction);
|
|
|
|
fireEvent({
|
|
beta: 90.0,
|
|
});
|
|
|
|
expect(camera.position).toEqual(position);
|
|
expect(camera.direction).toEqualEpsilon(direction, CesiumMath.EPSILON14);
|
|
expect(camera.up).toEqualEpsilon(Cartesian3.UNIT_Y, CesiumMath.EPSILON14);
|
|
expect(camera.right).toEqualEpsilon(
|
|
Cartesian3.UNIT_Z,
|
|
CesiumMath.EPSILON14
|
|
);
|
|
});
|
|
|
|
it("rotates for gamma", function () {
|
|
var position = Cartesian3.clone(camera.position);
|
|
var right = Cartesian3.clone(camera.right);
|
|
|
|
fireEvent({
|
|
gamma: 90.0,
|
|
});
|
|
|
|
expect(camera.position).toEqual(position);
|
|
expect(camera.direction).toEqualEpsilon(
|
|
Cartesian3.negate(Cartesian3.UNIT_Z, new Cartesian3()),
|
|
CesiumMath.EPSILON14
|
|
);
|
|
expect(camera.up).toEqualEpsilon(Cartesian3.UNIT_X, CesiumMath.EPSILON14);
|
|
expect(camera.right).toEqualEpsilon(right, CesiumMath.EPSILON14);
|
|
});
|
|
|
|
it("is destroyed", function () {
|
|
expect(controller.isDestroyed()).toEqual(false);
|
|
controller.destroy();
|
|
expect(controller.isDestroyed()).toEqual(true);
|
|
});
|
|
});
|