271 lines
9.4 KiB
JavaScript
271 lines
9.4 KiB
JavaScript
defineSuite([
|
|
'Scene/Globe',
|
|
'Core/CesiumTerrainProvider',
|
|
'Core/Rectangle',
|
|
'Core/Resource',
|
|
'Scene/SingleTileImageryProvider',
|
|
'Specs/createScene',
|
|
'Specs/pollToPromise'
|
|
], function(
|
|
Globe,
|
|
CesiumTerrainProvider,
|
|
Rectangle,
|
|
Resource,
|
|
SingleTileImageryProvider,
|
|
createScene,
|
|
pollToPromise) {
|
|
'use strict';
|
|
|
|
var scene;
|
|
var globe;
|
|
|
|
beforeAll(function() {
|
|
scene = createScene();
|
|
});
|
|
|
|
afterAll(function() {
|
|
scene.destroyForSpecs();
|
|
});
|
|
|
|
beforeEach(function() {
|
|
globe = new Globe();
|
|
scene.globe = globe;
|
|
});
|
|
|
|
afterEach(function() {
|
|
scene.globe = undefined;
|
|
Resource._Implementations.loadWithXhr = Resource._DefaultImplementations.loadWithXhr;
|
|
});
|
|
|
|
function returnTileJson(path) {
|
|
var oldLoad = Resource._Implementations.loadWithXhr;
|
|
Resource._Implementations.loadWithXhr = function(url, responseType, method, data, headers, deferred, overrideMimeType) {
|
|
if (url.indexOf('layer.json') >= 0) {
|
|
Resource._DefaultImplementations.loadWithXhr(path, responseType, method, data, headers, deferred);
|
|
} else {
|
|
return oldLoad(url, responseType, method, data, headers, deferred, overrideMimeType);
|
|
}
|
|
};
|
|
}
|
|
|
|
function returnVertexNormalTileJson() {
|
|
return returnTileJson('Data/CesiumTerrainTileJson/VertexNormals.tile.json');
|
|
}
|
|
|
|
/**
|
|
* Repeatedly calls render until the load queue is empty. Returns a promise that resolves
|
|
* when the load queue is empty.
|
|
*/
|
|
function updateUntilDone(globe) {
|
|
// update until the load queue is empty.
|
|
return pollToPromise(function() {
|
|
globe._surface._debug.enableDebugOutput = true;
|
|
scene.render();
|
|
return globe.tilesLoaded;
|
|
});
|
|
}
|
|
|
|
it('renders with enableLighting', function() {
|
|
globe.enableLighting = true;
|
|
|
|
var layerCollection = globe.imageryLayers;
|
|
layerCollection.removeAll();
|
|
layerCollection.addImageryProvider(new SingleTileImageryProvider({url : 'Data/Images/Red16x16.png'}));
|
|
|
|
scene.camera.setView({ destination : new Rectangle(0.0001, 0.0001, 0.0025, 0.0025) });
|
|
|
|
return updateUntilDone(globe).then(function() {
|
|
scene.globe.show = false;
|
|
expect(scene).toRender([0, 0, 0, 255]);
|
|
scene.globe.show = true;
|
|
expect(scene).notToRender([0, 0, 0, 255]);
|
|
});
|
|
});
|
|
|
|
it('renders with showWaterEffect set to false', function() {
|
|
globe.showWaterEffect = false;
|
|
|
|
var layerCollection = globe.imageryLayers;
|
|
layerCollection.removeAll();
|
|
layerCollection.addImageryProvider(new SingleTileImageryProvider({url : 'Data/Images/Red16x16.png'}));
|
|
|
|
scene.camera.setView({ destination : new Rectangle(0.0001, 0.0001, 0.0025, 0.0025) });
|
|
|
|
return updateUntilDone(globe).then(function() {
|
|
scene.globe.show = false;
|
|
expect(scene).toRender([0, 0, 0, 255]);
|
|
scene.globe.show = true;
|
|
expect(scene).notToRender([0, 0, 0, 255]);
|
|
});
|
|
});
|
|
|
|
it('ImageryLayersUpdated event fires when layer is added, hidden, shown, moved, or removed', function() {
|
|
var timesEventRaised = 0;
|
|
globe.imageryLayersUpdatedEvent.addEventListener(function () {
|
|
++timesEventRaised;
|
|
});
|
|
|
|
var layerCollection = globe.imageryLayers;
|
|
layerCollection.removeAll();
|
|
var layer = layerCollection.addImageryProvider(new SingleTileImageryProvider({url : 'Data/Images/Red16x16.png'}));
|
|
layerCollection.addImageryProvider(new SingleTileImageryProvider({url : 'Data/Images/Red16x16.png'}));
|
|
return updateUntilDone(globe).then(function() {
|
|
expect(timesEventRaised).toEqual(2);
|
|
|
|
layer.show = false;
|
|
return updateUntilDone(globe);
|
|
}).then(function () {
|
|
expect(timesEventRaised).toEqual(3);
|
|
|
|
layer.show = true;
|
|
return updateUntilDone(globe);
|
|
}).then(function () {
|
|
expect(timesEventRaised).toEqual(4);
|
|
|
|
layerCollection.raise(layer);
|
|
return updateUntilDone(globe);
|
|
}).then(function () {
|
|
expect(timesEventRaised).toEqual(5);
|
|
|
|
layerCollection.remove(layer);
|
|
return updateUntilDone(globe);
|
|
}).then(function () {
|
|
expect(timesEventRaised).toEqual(6);
|
|
});
|
|
});
|
|
|
|
it('terrainProviderChanged event fires', function() {
|
|
var terrainProvider = new CesiumTerrainProvider({
|
|
url : 'made/up/url',
|
|
requestVertexNormals : true
|
|
});
|
|
|
|
var spyListener = jasmine.createSpy('listener');
|
|
globe.terrainProviderChanged.addEventListener(spyListener);
|
|
|
|
globe.terrainProvider = terrainProvider;
|
|
|
|
expect(spyListener).toHaveBeenCalledWith(terrainProvider);
|
|
});
|
|
|
|
it('tilesLoaded return true when tile load queue is empty', function() {
|
|
expect(globe.tilesLoaded).toBe(true);
|
|
|
|
globe._surface._tileLoadQueueHigh.length = 2;
|
|
expect(globe.tilesLoaded).toBe(false);
|
|
|
|
globe._surface._tileLoadQueueHigh.length = 0;
|
|
expect(globe.tilesLoaded).toBe(true);
|
|
|
|
globe._surface._tileLoadQueueMedium.length = 2;
|
|
expect(globe.tilesLoaded).toBe(false);
|
|
|
|
globe._surface._tileLoadQueueMedium.length = 0;
|
|
expect(globe.tilesLoaded).toBe(true);
|
|
|
|
globe._surface._tileLoadQueueLow.length = 2;
|
|
expect(globe.tilesLoaded).toBe(false);
|
|
|
|
globe._surface._tileLoadQueueLow.length = 0;
|
|
expect(globe.tilesLoaded).toBe(true);
|
|
|
|
var terrainProvider = new CesiumTerrainProvider({
|
|
url : 'made/up/url',
|
|
requestVertexNormals : true
|
|
});
|
|
|
|
globe.terrainProvider = terrainProvider;
|
|
scene.render();
|
|
expect(globe.tilesLoaded).toBe(false);
|
|
});
|
|
|
|
it('renders terrain with enableLighting', function() {
|
|
globe.enableLighting = true;
|
|
|
|
var layerCollection = globe.imageryLayers;
|
|
layerCollection.removeAll();
|
|
layerCollection.addImageryProvider(new SingleTileImageryProvider({url : 'Data/Images/Red16x16.png'}));
|
|
|
|
Resource._Implementations.loadWithXhr = function(url, responseType, method, data, headers, deferred, overrideMimeType) {
|
|
Resource._DefaultImplementations.loadWithXhr('Data/CesiumTerrainTileJson/tile.vertexnormals.terrain', responseType, method, data, headers, deferred);
|
|
};
|
|
|
|
returnVertexNormalTileJson();
|
|
|
|
var terrainProvider = new CesiumTerrainProvider({
|
|
url : 'made/up/url',
|
|
requestVertexNormals : true
|
|
});
|
|
|
|
globe.terrainProvider = terrainProvider;
|
|
scene.camera.setView({ destination : new Rectangle(0.0001, 0.0001, 0.0025, 0.0025) });
|
|
|
|
return updateUntilDone(globe).then(function() {
|
|
expect(scene).notToRender([0, 0, 0, 255]);
|
|
|
|
scene.globe.show = false;
|
|
expect(scene).toRender([0, 0, 0, 255]);
|
|
});
|
|
});
|
|
|
|
it('renders with hue shift', function() {
|
|
var layerCollection = globe.imageryLayers;
|
|
layerCollection.removeAll();
|
|
layerCollection.addImageryProvider(new SingleTileImageryProvider({url : 'Data/Images/Blue.png'}));
|
|
|
|
scene.camera.flyHome(0.0);
|
|
|
|
return updateUntilDone(globe).then(function() {
|
|
scene.globe.show = false;
|
|
expect(scene).toRender([0, 0, 0, 255]);
|
|
scene.globe.show = true;
|
|
expect(scene).notToRender([0, 0, 0, 255]);
|
|
expect(scene).toRenderAndCall(function(rgba) {
|
|
scene.globe.atmosphereHueShift = 0.1;
|
|
expect(scene).notToRender([0, 0, 0, 255]);
|
|
expect(scene).notToRender(rgba);
|
|
});
|
|
});
|
|
});
|
|
|
|
it('renders with saturation shift', function() {
|
|
var layerCollection = globe.imageryLayers;
|
|
layerCollection.removeAll();
|
|
layerCollection.addImageryProvider(new SingleTileImageryProvider({url : 'Data/Images/Blue.png'}));
|
|
|
|
scene.camera.flyHome(0.0);
|
|
|
|
return updateUntilDone(globe).then(function() {
|
|
scene.globe.show = false;
|
|
expect(scene).toRender([0, 0, 0, 255]);
|
|
scene.globe.show = true;
|
|
expect(scene).notToRender([0, 0, 0, 255]);
|
|
expect(scene).toRenderAndCall(function(rgba) {
|
|
scene.globe.atmosphereSaturationShift = 0.1;
|
|
expect(scene).notToRender([0, 0, 0, 255]);
|
|
expect(scene).notToRender(rgba);
|
|
});
|
|
});
|
|
});
|
|
|
|
it('renders with brightness shift', function() {
|
|
var layerCollection = globe.imageryLayers;
|
|
layerCollection.removeAll();
|
|
layerCollection.addImageryProvider(new SingleTileImageryProvider({url : 'Data/Images/Blue.png'}));
|
|
|
|
scene.camera.flyHome(0.0);
|
|
|
|
return updateUntilDone(globe).then(function() {
|
|
scene.globe.show = false;
|
|
expect(scene).toRender([0, 0, 0, 255]);
|
|
scene.globe.show = true;
|
|
expect(scene).notToRender([0, 0, 0, 255]);
|
|
expect(scene).toRenderAndCall(function(rgba) {
|
|
scene.globe.atmosphereBrightnessShift = 0.1;
|
|
expect(scene).notToRender([0, 0, 0, 255]);
|
|
expect(scene).notToRender(rgba);
|
|
});
|
|
});
|
|
});
|
|
}, 'WebGL');
|