DSDSWeb/static/js/Cesium-1.53/Specs/Scene/GlobeSpec.js

271 lines
9.4 KiB
JavaScript
Raw Normal View History

2024-07-11 18:02:47 +08:00
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');