yzt
2023-05-26 de4278af2fd46705a40bac58ec01122db6b7f3d7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
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);
  });
});