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.

152 lines
4.8 KiB
JavaScript

import { Cartesian3 } from "../../Source/Cesium.js";
import { HeadingPitchRange } from "../../Source/Cesium.js";
import { Math as CesiumMath } from "../../Source/Cesium.js";
import { KmlLookAt } from "../../Source/Cesium.js";
import { KmlTour } from "../../Source/Cesium.js";
import { KmlTourFlyTo } from "../../Source/Cesium.js";
import { KmlTourWait } from "../../Source/Cesium.js";
import pollToPromise from "../pollToPromise.js";
describe("DataSources/KmlTour", function () {
function getLookAt() {
var position = Cartesian3.fromDegrees(40.0, 30.0, 1000);
var hpr = new HeadingPitchRange(
CesiumMath.toRadians(10.0),
CesiumMath.toRadians(45.0),
10000
);
return new KmlLookAt(position, hpr);
}
function createMockViewer() {
var mockViewer = {};
mockViewer.scene = {};
mockViewer.scene.camera = {};
mockViewer.scene.camera.flyTo = jasmine
.createSpy("flyTo")
.and.callFake(function (options) {
if (options.complete) {
options.complete();
}
});
mockViewer.scene.camera.flyToBoundingSphere = jasmine
.createSpy("flyToBoundingSphere")
.and.callFake(function (boundingSphere, options) {
if (options.complete) {
options.complete();
}
});
return mockViewer;
}
it("add entries to playlist", function () {
var tour = new KmlTour("test", "test");
var wait = new KmlTourWait(10);
var flyTo = new KmlTourFlyTo(5, null, getLookAt());
tour.addPlaylistEntry(wait);
tour.addPlaylistEntry(flyTo);
expect(tour.playlist.length).toEqual(2);
expect(tour.playlist[0]).toBe(wait);
expect(tour.playlist[1]).toBe(flyTo);
});
it("calls entries play", function () {
var waitSpy = spyOn(KmlTourWait.prototype, "play").and.callFake(function (
callback
) {
callback();
});
var flySpy = spyOn(KmlTourFlyTo.prototype, "play").and.callFake(function (
callback
) {
callback();
});
var tour = new KmlTour("test", "test");
var wait = new KmlTourWait(0.1);
var flyTo = new KmlTourFlyTo(0.1, null, getLookAt());
tour.addPlaylistEntry(wait);
tour.addPlaylistEntry(flyTo);
var mockViewer = createMockViewer();
tour.play(mockViewer);
return pollToPromise(function () {
return waitSpy.calls.count() > 0 && flySpy.calls.count() > 0;
}).then(function () {
expect(waitSpy).toHaveBeenCalled();
expect(flySpy).toHaveBeenCalled();
});
});
it("calls events", function () {
var tour = new KmlTour("test", "test");
var wait1 = new KmlTourWait(0.05);
var wait2 = new KmlTourWait(0.02);
var tourStart = jasmine.createSpy("TourStart");
var tourEnd = jasmine.createSpy("TourEnd");
var entryStart = jasmine.createSpy("EntryStart");
var entryEnd = jasmine.createSpy("EntryEnd");
tour.addPlaylistEntry(wait1);
tour.addPlaylistEntry(wait2);
tour.tourStart.addEventListener(tourStart);
tour.tourEnd.addEventListener(tourEnd);
tour.entryStart.addEventListener(entryStart);
tour.entryEnd.addEventListener(entryEnd);
tour.play(createMockViewer());
return pollToPromise(function () {
return tourEnd.calls.count() > 0;
}).then(function () {
expect(tourStart).toHaveBeenCalled();
expect(entryStart).toHaveBeenCalled();
expect(entryEnd).toHaveBeenCalled();
expect(tourEnd).toHaveBeenCalledWith(false);
});
});
it("terminates playback", function () {
var tour = new KmlTour("test", "test");
var wait = new KmlTourWait(60);
var flyTo = new KmlTourFlyTo(0.1, null, getLookAt());
var tourStart = jasmine.createSpy("TourStart");
var tourEnd = jasmine.createSpy("TourEnd");
var entryStart = jasmine.createSpy("EntryStart");
var entryEnd = jasmine.createSpy("EntryEnd");
tour.addPlaylistEntry(wait);
tour.addPlaylistEntry(flyTo);
tour.tourStart.addEventListener(tourStart);
tour.tourEnd.addEventListener(tourEnd);
tour.entryStart.addEventListener(entryStart);
tour.entryEnd.addEventListener(entryEnd);
var mockViewer = createMockViewer();
tour.play(mockViewer);
setTimeout(function () {
tour.stop();
expect(tourStart).toHaveBeenCalled();
// Wait entry have been started
expect(entryStart).toHaveBeenCalledWith(wait);
// Wait entry have been terminated
expect(entryEnd).toHaveBeenCalledWith(wait, true);
expect(tourEnd).toHaveBeenCalledWith(true);
expect(entryStart.calls.count()).toEqual(1);
expect(entryEnd.calls.count()).toEqual(1);
expect(tourStart.calls.count()).toEqual(1);
expect(tourEnd.calls.count()).toEqual(1);
expect(mockViewer.scene.camera.flyTo.calls.count()).toEqual(0);
expect(mockViewer.scene.camera.flyToBoundingSphere.calls.count()).toEqual(
0
);
}, 5);
});
});