import { Cesium3DTileset } from "../../../Source/Cesium.js"; import { Cesium3DTileStyle } from "../../../Source/Cesium.js"; import { Globe } from "../../../Source/Cesium.js"; import createScene from "../../createScene.js"; import { when } from "../../../Source/Cesium.js"; import { Cesium3DTilesInspectorViewModel } from "../../../Source/Cesium.js"; describe( "Widgets/Cesium3DTilesInspector/Cesium3DTilesInspectorViewModel", function () { // Parent tile with content and four child tiles with content var tilesetUrl = "./Data/Cesium3DTiles/Tilesets/Tileset/tileset.json"; var scene; var viewModel; var performanceContainer = document.createElement("div"); beforeAll(function () { scene = createScene(); }); 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 Cesium3DTilesInspectorViewModel( scene, performanceContainer ); expect(viewModel._scene).toBe(scene); expect(viewModel.isDestroyed()).toEqual(false); viewModel.destroy(); expect(viewModel.isDestroyed()).toEqual(true); }); it("throws if scene is undefined", function () { expect(function () { return new Cesium3DTilesInspectorViewModel(); }).toThrowDeveloperError(); }); it("throws if performanceContainer is undefined", function () { expect(function () { return new Cesium3DTilesInspectorViewModel(scene); }).toThrowDeveloperError(); }); describe("tileset options", function () { it("show properties", function () { viewModel = new Cesium3DTilesInspectorViewModel( scene, performanceContainer ); var tileset = new Cesium3DTileset({ url: tilesetUrl, }); viewModel.tileset = tileset; var done = when.defer(); tileset.readyPromise.then(function () { expect(viewModel.properties.indexOf("id") !== -1).toBe(true); expect(viewModel.properties.indexOf("Longitude") !== -1).toBe(true); expect(viewModel.properties.indexOf("Latitude") !== -1).toBe(true); expect(viewModel.properties.indexOf("Height") !== -1).toBe(true); viewModel.destroy(); done.resolve(); }); return done; }); }); describe("display options", function () { beforeAll(function () { viewModel = new Cesium3DTilesInspectorViewModel( scene, performanceContainer ); var tileset = new Cesium3DTileset({ url: tilesetUrl, }); viewModel.tileset = tileset; return tileset.readyPromise; }); afterAll(function () { viewModel.destroy(); }); it("colorize", function () { viewModel.colorize = true; expect(viewModel.tileset.debugColorizeTiles).toBe(true); viewModel.colorize = false; expect(viewModel.tileset.debugColorizeTiles).toBe(false); }); it("wireframe", function () { viewModel.wireframe = true; expect(viewModel.tileset.debugWireframe).toBe(true); viewModel.wireframe = false; expect(viewModel.tileset.debugWireframe).toBe(false); }); it("showBoundingVolumes", function () { viewModel.showBoundingVolumes = true; expect(viewModel.tileset.debugShowBoundingVolume).toBe(true); viewModel.showBoundingVolumes = false; expect(viewModel.tileset.debugShowBoundingVolume).toBe(false); }); it("showContentVolumes", function () { viewModel.showContentBoundingVolumes = true; expect(viewModel.tileset.debugShowContentBoundingVolume).toBe(true); viewModel.showContentBoundingVolumes = false; expect(viewModel.tileset.debugShowContentBoundingVolume).toBe(false); }); it("showRequestVolumes", function () { viewModel.showRequestVolumes = true; expect(viewModel.tileset.debugShowViewerRequestVolume).toBe(true); viewModel.showRequestVolumes = false; expect(viewModel.tileset.debugShowViewerRequestVolume).toBe(false); }); it("showOnlyPickedTileDebugLabel", function () { viewModel.showOnlyPickedTileDebugLabel = true; expect(viewModel.tileset.debugPickedTileLabelOnly).toBe(true); viewModel.showOnlyPickedTileDebugLabel = false; expect(viewModel.tileset.debugPickedTileLabelOnly).toBe(false); }); it("showGeometricError", function () { viewModel.showGeometricError = true; expect(viewModel.tileset.debugShowGeometricError).toBe(true); viewModel.showGeometricError = false; expect(viewModel.tileset.debugShowGeometricError).toBe(false); }); it("showRenderingStatistics", function () { viewModel.showRenderingStatistics = true; expect(viewModel.tileset.debugShowRenderingStatistics).toBe(true); viewModel.showRenderingStatistics = false; expect(viewModel.tileset.debugShowRenderingStatistics).toBe(false); }); it("showMemoryUsage", function () { viewModel.showMemoryUsage = true; expect(viewModel.tileset.debugShowMemoryUsage).toBe(true); viewModel.showMemoryUsage = false; expect(viewModel.tileset.debugShowMemoryUsage).toBe(false); }); it("showUrl", function () { viewModel.showUrl = true; expect(viewModel.tileset.debugShowUrl).toBe(true); viewModel.showUrl = false; expect(viewModel.tileset.debugShowUrl).toBe(false); }); it("pointCloudShading", function () { viewModel.pointCloudShading = true; expect(viewModel.tileset.pointCloudShading.attenuation).toBe(true); viewModel.pointCloudShading = false; expect(viewModel.tileset.pointCloudShading.attenuation).toBe(false); }); it("geometricErrorScale", function () { viewModel.geometricErrorScale = 1.0; expect(viewModel.tileset.pointCloudShading.geometricErrorScale).toBe( 1.0 ); viewModel.geometricErrorScale = 0.0; expect(viewModel.tileset.pointCloudShading.geometricErrorScale).toBe( 0.0 ); }); it("maximumAttenuation", function () { viewModel.maximumAttenuation = 1.0; expect(viewModel.tileset.pointCloudShading.maximumAttenuation).toBe( 1.0 ); viewModel.maximumAttenuation = 0.0; expect( viewModel.tileset.pointCloudShading.maximumAttenuation ).not.toBeDefined(); }); it("baseResolution", function () { viewModel.baseResolution = 1.0; expect(viewModel.tileset.pointCloudShading.baseResolution).toBe(1.0); viewModel.baseResolution = 0.0; expect( viewModel.tileset.pointCloudShading.baseResolution ).not.toBeDefined(); }); it("eyeDomeLighting", function () { viewModel.eyeDomeLighting = true; expect(viewModel.tileset.pointCloudShading.eyeDomeLighting).toBe(true); viewModel.eyeDomeLighting = false; expect(viewModel.tileset.pointCloudShading.eyeDomeLighting).toBe(false); }); it("eyeDomeLightingStrength", function () { viewModel.eyeDomeLightingStrength = 1.0; expect( viewModel.tileset.pointCloudShading.eyeDomeLightingStrength ).toBe(1.0); viewModel.eyeDomeLightingStrength = 0.0; expect( viewModel.tileset.pointCloudShading.eyeDomeLightingStrength ).toBe(0.0); }); it("eyeDomeLightingRadius", function () { viewModel.eyeDomeLightingRadius = 1.0; expect(viewModel.tileset.pointCloudShading.eyeDomeLightingRadius).toBe( 1.0 ); viewModel.eyeDomeLightingRadius = 0.0; expect(viewModel.tileset.pointCloudShading.eyeDomeLightingRadius).toBe( 0.0 ); }); }); describe("update options", function () { beforeAll(function () { viewModel = new Cesium3DTilesInspectorViewModel( scene, performanceContainer ); viewModel.tileset = new Cesium3DTileset({ url: tilesetUrl, }); return viewModel.tileset.readyPromise; }); afterAll(function () { viewModel.destroy(); }); it("freeze frame", function () { viewModel.freezeFrame = false; expect(viewModel.tileset.debugFreezeFrame).toBe(false); viewModel.freezeFrame = true; expect(viewModel.tileset.debugFreezeFrame).toBe(true); }); it("maximum screen space error", function () { viewModel.dynamicScreenSpaceError = false; viewModel.maximumScreenSpaceError = 10; expect(viewModel.tileset.dynamicScreenSpaceError).toBe(false); expect(viewModel.tileset.maximumScreenSpaceError).toBe(10); }); it("dynamic screen space error", function () { viewModel.dynamicScreenSpaceError = true; viewModel.dynamicScreenSpaceErrorFactor = 2; viewModel.dynamicScreenSpaceErrorDensity = 0.1; expect(viewModel.tileset.dynamicScreenSpaceError).toBe(true); expect(viewModel.tileset.dynamicScreenSpaceErrorFactor).toBe(2); expect(viewModel.tileset.dynamicScreenSpaceErrorDensity).toBe(0.1); }); }); describe("style options", function () { var style; beforeAll(function () { style = new Cesium3DTileStyle({ color: { conditions: [ ["${Height} >= 83", "color('purple', 0.5)"], ["${Height} >= 80", "color('red')"], ["${Height} >= 70", "color('orange')"], ["${Height} >= 12", "color('yellow')"], ["${Height} >= 7", "color('lime')"], ["${Height} >= 1", "color('cyan')"], ["true", "color('blue')"], ], }, meta: { description: "'Building id ${id} has height ${Height}.'", }, }); viewModel = new Cesium3DTilesInspectorViewModel( scene, performanceContainer ); viewModel.tileset = new Cesium3DTileset({ url: tilesetUrl, }); return viewModel.tileset.readyPromise; }); afterAll(function () { viewModel.destroy(); }); it("loads tileset style", function () { viewModel.tileset.style = style; viewModel._update(); expect(JSON.stringify(style.style)).toBe( JSON.stringify(JSON.parse(viewModel.styleString)) ); }); it("does not throw on invalid syntax", function () { expect(function () { viewModel.styleString = "invalid"; }).not.toThrowError(); }); it("recompiles style", function () { viewModel._style = undefined; viewModel.tileset.style = style; viewModel._update(); var s = JSON.parse(viewModel.styleString); s.color = "color('red')"; viewModel.styleString = JSON.stringify(s); viewModel.compileStyle(); viewModel._update(); expect(viewModel.tileset.style.style.color).toBe("color('red')"); expect(viewModel.tileset.style.style.meta.description).toBe( "'Building id ${id} has height ${Height}.'" ); }); it("does not throw on invalid value", function () { expect(function () { viewModel.styleString = '{ "color": "color(1)" }'; }).not.toThrowError(); }); }); }, "WebGL" );