import { defined } from "../../../Source/Cesium.js"; import { GeometryInstance } from "../../../Source/Cesium.js"; import { Math as CesiumMath } from "../../../Source/Cesium.js"; import { Rectangle } from "../../../Source/Cesium.js"; import { RectangleGeometry } from "../../../Source/Cesium.js"; import { WebMercatorTilingScheme } from "../../../Source/Cesium.js"; import { EllipsoidSurfaceAppearance } from "../../../Source/Cesium.js"; import { Globe } from "../../../Source/Cesium.js"; import { GlobeSurfaceTile } from "../../../Source/Cesium.js"; import { Primitive } from "../../../Source/Cesium.js"; import { QuadtreeTile } from "../../../Source/Cesium.js"; import createScene from "../../createScene.js"; import { CesiumInspectorViewModel } from "../../../Source/Cesium.js"; describe( "Widgets/CesiumInspector/CesiumInspectorViewModel", function () { 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" );