DSDSWeb/static/js/Cesium-1.53/Specs/Widgets/CesiumInspector/CesiumInspectorViewModelSpe...

245 lines
8.6 KiB
JavaScript
Raw Normal View History

2024-07-11 18:02:47 +08:00
defineSuite([
'Widgets/CesiumInspector/CesiumInspectorViewModel',
'Core/defined',
'Core/GeometryInstance',
'Core/Math',
'Core/Rectangle',
'Core/RectangleGeometry',
'Core/WebMercatorTilingScheme',
'Scene/EllipsoidSurfaceAppearance',
'Scene/Globe',
'Scene/GlobeSurfaceTile',
'Scene/Primitive',
'Scene/QuadtreeTile',
'Specs/createScene'
], function(
CesiumInspectorViewModel,
defined,
GeometryInstance,
CesiumMath,
Rectangle,
RectangleGeometry,
WebMercatorTilingScheme,
EllipsoidSurfaceAppearance,
Globe,
GlobeSurfaceTile,
Primitive,
QuadtreeTile,
createScene) {
'use strict';
var scene;
var performanceContainer;
function createRectangle(rectangle, rotation) {
return new Primitive({
geometryInstances: new GeometryInstance({
geometry: new RectangleGeometry({
rectangle: rectangle,
vertexFormat: EllipsoidSurfaceAppearance.VERTEX_FORMAT,
rotation: rotation
})
}),
appearance: new EllipsoidSurfaceAppearance({
aboveGround: false
})
});
}
beforeAll(function() {
scene = createScene();
performanceContainer = document.createElement('div');
});
afterAll(function() {
scene.destroyForSpecs();
});
beforeEach(function() {
scene.globe = new Globe();
scene.initializeFrame();
});
afterEach(function() {
scene.primitives.removeAll();
});
it('can create and destroy', function() {
var viewModel = new CesiumInspectorViewModel(scene, performanceContainer);
expect(viewModel.scene).toBe(scene);
expect(viewModel.performanceContainer).toBe(performanceContainer);
expect(viewModel.isDestroyed()).toEqual(false);
viewModel.destroy();
expect(viewModel.isDestroyed()).toEqual(true);
});
it('throws if scene is undefined', function() {
expect(function() {
return new CesiumInspectorViewModel();
}).toThrowDeveloperError();
});
it('throws if performanceContainer is undefined', function() {
expect(function() {
return new CesiumInspectorViewModel(scene);
}).toThrowDeveloperError();
});
it('show frustums', function() {
var viewModel = new CesiumInspectorViewModel(scene, performanceContainer);
viewModel.frustums = true;
expect(viewModel.scene.debugShowFrustums).toBe(true);
scene.render();
viewModel.frustums = false;
expect(viewModel.scene.debugShowFrustums).toBe(false);
});
it('show performance', function() {
var viewModel = new CesiumInspectorViewModel(scene, performanceContainer);
viewModel.performance = true;
scene.render();
expect(performanceContainer.innerHTML).not.toEqual('');
viewModel.performance = false;
scene.render();
expect(performanceContainer.innerHTML).toEqual('');
});
it ('primitive bounding sphere', function() {
var p = scene.primitives.add(createRectangle(new Rectangle(
CesiumMath.toRadians(-110.0),
CesiumMath.toRadians(0.0),
CesiumMath.toRadians(-90.0),
CesiumMath.toRadians(20.0)),
CesiumMath.toRadians(45)));
var viewModel = new CesiumInspectorViewModel(scene, performanceContainer);
scene.render();
viewModel.primitive = p;
viewModel.primitiveBoundingSphere = true;
expect(p.debugShowBoundingVolume).toEqual(true);
viewModel.primitiveBoundingSphere = false;
scene.render();
expect(p.debugShowBoundingVolume).toEqual(false);
});
it ('primitive filter', function() {
var p = scene.primitives.add(createRectangle(new Rectangle(
CesiumMath.toRadians(-110.0),
CesiumMath.toRadians(0.0),
CesiumMath.toRadians(-90.0),
CesiumMath.toRadians(20.0)),
CesiumMath.toRadians(45)));
var q = scene.primitives.add(createRectangle(new Rectangle(
CesiumMath.toRadians(-10.0),
CesiumMath.toRadians(0.0),
CesiumMath.toRadians(-9.0),
CesiumMath.toRadians(20.0))));
var viewModel = new CesiumInspectorViewModel(scene, performanceContainer);
scene.render();
viewModel.primitive = p;
viewModel.filterPrimitive = true;
expect(defined(scene.debugCommandFilter)).toEqual(true);
expect(scene.debugCommandFilter({owner: p})).toEqual(true);
expect(scene.debugCommandFilter({owner: q})).toEqual(false);
viewModel.filterPrimitive = false;
expect(defined(scene.debugCommandFilter)).toEqual(false);
});
it ('primitive reference frame', function() {
var p = scene.primitives.add(createRectangle(new Rectangle(
CesiumMath.toRadians(-110.0),
CesiumMath.toRadians(0.0),
CesiumMath.toRadians(-90.0),
CesiumMath.toRadians(20.0)),
CesiumMath.toRadians(45)));
var viewModel = new CesiumInspectorViewModel(scene, performanceContainer);
scene.render();
viewModel.primitive = p;
viewModel.primitiveReferenceFrame = true;
expect(scene.primitives.length).toEqual(2);
viewModel.primitiveReferenceFrame = false;
scene.render();
expect(scene.primitives.length).toEqual(1);
});
it('show wireframe', function() {
var viewModel = new CesiumInspectorViewModel(scene, performanceContainer);
viewModel.wireframe = true;
expect(viewModel.scene.globe._surface.tileProvider._debug.wireframe).toBe(true);
viewModel.wireframe = false;
expect(viewModel.scene.globe._surface.tileProvider._debug.wireframe).toBe(false);
});
it('suspend updates', function() {
var viewModel = new CesiumInspectorViewModel(scene, performanceContainer);
viewModel.suspendUpdates = true;
expect(viewModel.scene.globe._surface._debug.suspendLodUpdate).toBe(true);
viewModel.suspendUpdates = false;
expect(viewModel.scene.globe._surface._debug.suspendLodUpdate).toBe(false);
});
it('show tile coords', function() {
var viewModel = new CesiumInspectorViewModel(scene, performanceContainer);
expect(viewModel.scene.imageryLayers.length).toBe(0);
viewModel.tileCoordinates = true;
expect(viewModel.scene.imageryLayers.length).toBe(1);
viewModel.tileCoordinates = false;
expect(viewModel.scene.imageryLayers.length).toBe(0);
});
it('show tile bounding sphere', function() {
var viewModel = new CesiumInspectorViewModel(scene, performanceContainer);
var tile = new QuadtreeTile({tilingScheme : new WebMercatorTilingScheme(), x : 0, y : 0, level : 0});
tile.data = new GlobeSurfaceTile();
viewModel.tile = tile;
viewModel.tileBoundingSphere = true;
expect(viewModel.scene.globe._surface.tileProvider._debug.boundingSphereTile).toBe(tile);
viewModel.tileBoundingSphere = false;
expect(viewModel.scene.globe._surface.tileProvider._debug.boundingSphereTile).toBe(undefined);
});
it('filter tile', function() {
var viewModel = new CesiumInspectorViewModel(scene, performanceContainer);
var tile = new QuadtreeTile({tilingScheme : new WebMercatorTilingScheme(), x : 0, y : 0, level : 0});
tile.data = new GlobeSurfaceTile();
tile.renderable = true;
viewModel.tile = tile;
viewModel.filterTile = true;
expect(viewModel.scene.globe._surface._tilesToRender[0]).toBe(tile);
expect(viewModel.suspendUpdates).toBe(true);
viewModel.filterTile = false;
expect(viewModel.suspendUpdates).toBe(false);
});
it('does not try to render a non-renderable tile', function() {
var viewModel = new CesiumInspectorViewModel(scene, performanceContainer);
var tile = new QuadtreeTile({tilingScheme : new WebMercatorTilingScheme(), x : 0, y : 0, level : 0});
tile.data = new GlobeSurfaceTile();
viewModel.tile = tile;
viewModel.filterTile = true;
expect(viewModel.scene.globe._surface._tilesToRender.length).toBe(0);
expect(viewModel.suspendUpdates).toBe(true);
viewModel.filterTile = false;
expect(viewModel.suspendUpdates).toBe(false);
});
}, 'WebGL');