2021-03-29 10:35:45 +02:00

100 lines
3.3 KiB
TypeScript

import * as THREE from "three";
import { LngLat } from "../../../src/api/interfaces/LngLat";
import { Marker } from "../../../src/component/marker/marker/Marker";
class TestMarker extends Marker {
constructor(id: string, lngLat: LngLat) { super(id, lngLat); }
protected _createGeometry(position: number[]): void {
this._geometry = new THREE.Object3D();
this._geometry.position.fromArray(position);
}
protected _disposeGeometry(): void { /* noop */ }
protected _getInteractiveObjects(): THREE.Object3D[] { return [this._geometry]; }
}
describe("Marker.ctor", () => {
it("should be defined", () => {
let marker: Marker = new TestMarker("id", { lat: 1, lng: 2 });
expect(marker).toBeDefined();
expect(marker.id).toBe("id");
expect(marker.lngLat.lat).toBe(1);
expect(marker.lngLat.lng).toBe(2);
});
});
describe("Marker.createGeometry", () => {
it("geometry should be defined", () => {
let marker: Marker = new TestMarker("id", { lat: 1, lng: 2 });
marker.createGeometry([0, 0, 0]);
expect(marker.geometry).toBeDefined();
});
it("geometry should not create a new geometry", () => {
let marker: Marker = new TestMarker("id", { lat: 1, lng: 2 });
marker.createGeometry([0, 0, 0]);
let uuid: string = marker.geometry.uuid;
marker.createGeometry([0, 0, 0]);
expect(marker.geometry.uuid).toBe(uuid);
});
});
describe("Marker.disposeGeometry", () => {
it("geometry should be null", () => {
let marker: Marker = new TestMarker("id", { lat: 1, lng: 2 });
marker.createGeometry([0, 0, 0]);
marker.disposeGeometry();
expect(marker.geometry).toBeUndefined();
});
});
describe("Marker.getInteractiveObjectIds", () => {
it("should return empty array if geometry not defined", () => {
let marker: Marker = new TestMarker("id", { lat: 1, lng: 2 });
let objects: THREE.Object3D[] = marker.getInteractiveObjects();
expect(objects.length).toBe(0);
});
it("should return object ids when geometry created", () => {
let marker: Marker = new TestMarker("id", { lat: 1, lng: 2 });
marker.createGeometry([0, 0, 0]);
let objects: THREE.Object3D[] = marker.getInteractiveObjects();
expect(objects.length).toBe(1);
expect(objects[0].uuid).toBe(marker.geometry.uuid);
});
});
describe("Marker.updatePosition", () => {
it("should update geometry position", () => {
let marker: Marker = new TestMarker("id", { lat: 1, lng: 2 });
marker.createGeometry([0, 1, 2]);
expect(marker.geometry.position.x).toBe(0);
expect(marker.geometry.position.y).toBe(1);
expect(marker.geometry.position.z).toBe(2);
marker.updatePosition([1, 2, 3]);
expect(marker.geometry.position.x).toBe(1);
expect(marker.geometry.position.y).toBe(2);
expect(marker.geometry.position.z).toBe(3);
});
it("should update lng lat", () => {
let marker: Marker = new TestMarker("id", { lat: 0, lng: 0 });
marker.createGeometry([0, 0, 0]);
marker.updatePosition([1, 2, 3], { lat: 1, lng: 2 });
expect(marker.lngLat.lat).toBe(1);
expect(marker.lngLat.lng).toBe(2);
});
});