defineSuite([ 'DataSources/KmlTour', 'Core/Cartesian3', 'Core/HeadingPitchRange', 'Core/Math', 'DataSources/KmlLookAt', 'DataSources/KmlTourFlyTo', 'DataSources/KmlTourWait', 'Specs/pollToPromise' ], function( KmlTour, Cartesian3, HeadingPitchRange, CesiumMath, KmlLookAt, KmlTourFlyTo, KmlTourWait, pollToPromise) { 'use strict'; 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); }); });