DSDSWeb/static/js/Cesium-1.53/Specs/Core/VideoSynchronizerSpec.js

188 lines
6.4 KiB
JavaScript

defineSuite([
'Core/VideoSynchronizer',
'Core/Clock',
'Core/FeatureDetection',
'Core/Iso8601',
'Core/JulianDate',
'Core/Math',
'Specs/pollToPromise'
], function(
VideoSynchronizer,
Clock,
FeatureDetection,
Iso8601,
JulianDate,
CesiumMath,
pollToPromise) {
'use strict';
//Video textures do not work on Internet Explorer
if (FeatureDetection.isInternetExplorer()) {
return;
}
function loadVideo() {
var element = document.createElement('video');
var source = document.createElement('source');
source.setAttribute('src', 'http://cesiumjs.org/videos/Sandcastle/big-buck-bunny_trailer.webm');
source.setAttribute('type', 'video/webm');
element.appendChild(source);
source = document.createElement('source');
source.setAttribute('src', 'http://cesiumjs.org/videos/Sandcastle/big-buck-bunny_trailer.mp4');
source.setAttribute('type', 'video/mp4');
element.appendChild(source);
source = document.createElement('source');
source.setAttribute('src', 'http://cesiumjs.org/videos/Sandcastle/big-buck-bunny_trailer.mov');
source.setAttribute('type', 'video/quicktime');
element.appendChild(source);
return element;
}
it('Can default construct', function() {
var videoSynchronizer = new VideoSynchronizer();
expect(videoSynchronizer.clock).not.toBeDefined();
expect(videoSynchronizer.element).not.toBeDefined();
expect(videoSynchronizer.epoch).toBe(Iso8601.MINIMUM_VALUE);
expect(videoSynchronizer.tolerance).toBe(1.0);
expect(videoSynchronizer.isDestroyed()).toBe(false);
expect(videoSynchronizer.destroy()).not.toBeDefined();
expect(videoSynchronizer.isDestroyed()).toBe(true);
});
it('Can construct with options', function() {
var clock = new Clock();
var element = document.createElement('video');
var epoch = new JulianDate();
var tolerance = 0.15;
var videoSynchronizer = new VideoSynchronizer({
clock : clock,
element : element,
epoch : epoch,
tolerance: tolerance
});
expect(videoSynchronizer.clock).toBe(clock);
expect(videoSynchronizer.element).toBe(element);
expect(videoSynchronizer.epoch).toBe(epoch);
expect(videoSynchronizer.tolerance).toBe(tolerance);
expect(videoSynchronizer.isDestroyed()).toBe(false);
expect(videoSynchronizer.destroy()).not.toBeDefined();
expect(videoSynchronizer.isDestroyed()).toBe(true);
});
it('Syncs time when looping', function() {
var epoch = JulianDate.fromIso8601('2015-11-01T00:00:00Z');
var clock = new Clock();
clock.shouldAnimate = false;
clock.currentTime = epoch.clone();
var element = loadVideo();
element.loop = true;
var videoSynchronizer = new VideoSynchronizer({
clock : clock,
element : element,
epoch : epoch
});
return pollToPromise(function() {
clock.tick();
return element.currentTime === 0;
}).then(function() {
clock.currentTime = JulianDate.addSeconds(epoch, 10, clock.currentTime);
return pollToPromise(function() {
clock.tick();
return element.currentTime === 10;
});
}).then(function() {
clock.currentTime = JulianDate.addSeconds(epoch, 60, clock.currentTime);
return pollToPromise(function() {
clock.tick();
return CesiumMath.equalsEpsilon(element.currentTime, 60 - element.duration, CesiumMath.EPSILON3);
});
}).then(function() {
clock.currentTime = JulianDate.addSeconds(epoch, -1, clock.currentTime);
return pollToPromise(function() {
clock.tick();
return CesiumMath.equalsEpsilon(element.currentTime, element.duration - 1, CesiumMath.EPSILON1);
});
}).then(function() {
videoSynchronizer.destroy();
});
});
it('Syncs time when not looping', function() {
var epoch = JulianDate.fromIso8601('2015-11-01T00:00:00Z');
var clock = new Clock();
clock.shouldAnimate = false;
clock.currentTime = epoch.clone();
var element = loadVideo();
var videoSynchronizer = new VideoSynchronizer({
clock : clock,
element : element,
epoch : epoch
});
return pollToPromise(function() {
clock.tick();
return element.currentTime === 0;
}).then(function() {
clock.currentTime = JulianDate.addSeconds(epoch, 10, clock.currentTime);
return pollToPromise(function() {
clock.tick();
return element.currentTime === 10;
});
}).then(function() {
clock.currentTime = JulianDate.addSeconds(epoch, 60, clock.currentTime);
return pollToPromise(function() {
clock.tick();
return CesiumMath.equalsEpsilon(element.currentTime, element.duration, CesiumMath.EPSILON3);
});
}).then(function() {
clock.currentTime = JulianDate.addSeconds(epoch, -1, clock.currentTime);
return pollToPromise(function() {
clock.tick();
return element.currentTime === 0;
});
}).then(function() {
videoSynchronizer.destroy();
});
});
it('Plays/pauses video based on clock', function() {
var epoch = JulianDate.fromIso8601('2015-11-01T00:00:00Z');
var clock = new Clock();
var element = loadVideo();
var videoSynchronizer = new VideoSynchronizer({
clock : clock,
element : element,
epoch : epoch
});
return pollToPromise(function() {
clock.shouldAnimate = false;
clock.tick();
return element.paused === true;
}).then(function() {
clock.shouldAnimate = true;
clock.tick();
return element.paused === false;
}).then(function() {
clock.shouldAnimate = false;
clock.tick();
return element.paused === true;
}).then(function() {
videoSynchronizer.destroy();
});
});
});