import { B3dmLoader, B3dmParser, Cartesian3, GltfLoader, Matrix4, Resource, ResourceCache, } from "../../../Source/Cesium.js"; import Cesium3DTilesTester from "../../Cesium3DTilesTester.js"; import createScene from "../../createScene.js"; import waitForLoaderProcess from "../../waitForLoaderProcess.js"; describe("Scene/ModelExperimental/B3dmLoader", function () { var withBatchTableUrl = "./Data/Cesium3DTiles/Batched/BatchedWithBatchTable/batchedWithBatchTable.b3dm"; var withBatchTableBinaryUrl = "./Data/Cesium3DTiles/Batched/BatchedWithBatchTableBinary/batchedWithBatchTableBinary.b3dm"; var withoutBatchTableUrl = "./Data/Cesium3DTiles/Batched/BatchedWithoutBatchTable/batchedWithoutBatchTable.b3dm"; var withRtcCenterUrl = "./Data/Cesium3DTiles/Batched/BatchedWithRtcCenter/batchedWithRtcCenter.b3dm"; var withBatchTableHierarchy = "./Data/Cesium3DTiles/Hierarchy/BatchTableHierarchy/tile.b3dm"; var noBatchIdsUrl = "Data/Cesium3DTiles/Batched/BatchedNoBatchIds/batchedNoBatchIds.b3dm"; var scene; var b3dmLoaders = []; beforeAll(function () { scene = createScene(); // Keep the error from logging to the console when running tests spyOn(B3dmParser, "_deprecationWarning"); }); afterAll(function () { scene.destroyForSpecs(); }); afterEach(function () { for (var i = 0; i < b3dmLoaders.length; i++) { var loader = b3dmLoaders[i]; if (!loader.isDestroyed()) { loader.destroy(); } } b3dmLoaders.length = 0; ResourceCache.clearForSpecs(); }); function loadB3dm(b3dmPath) { var resource = Resource.createIfNeeded(b3dmPath); return Resource.fetchArrayBuffer({ url: b3dmPath, }).then(function (arrayBuffer) { var loader = new B3dmLoader({ b3dmResource: resource, arrayBuffer: arrayBuffer, }); b3dmLoaders.push(loader); loader.load(); return waitForLoaderProcess(loader, scene); }); } it("loads BatchedNoBatchIds", function () { return loadB3dm(noBatchIdsUrl).then(function (loader) { var components = loader.components; expect(components).toBeDefined(); var featureMetadata = components.featureMetadata; expect(featureMetadata).toBeUndefined(); }); }); it("loads BatchedWithBatchTable", function () { return loadB3dm(withBatchTableUrl).then(function (loader) { var components = loader.components; var featureMetadata = components.featureMetadata; var propertyTable = featureMetadata.getPropertyTable(0); expect(propertyTable).toBeDefined(); expect(propertyTable.count).toEqual(10); expect(propertyTable.class).toBeDefined(); }); }); it("loads BatchedWithBatchTableBinary", function () { return loadB3dm(withBatchTableBinaryUrl).then(function (loader) { var components = loader.components; var featureMetadata = components.featureMetadata; var propertyTable = featureMetadata.getPropertyTable(0); expect(propertyTable).toBeDefined(); expect(propertyTable.count).toEqual(10); expect(propertyTable.class).toBeDefined(); }); }); it("loads BatchedWithoutBatchTableUrl", function () { return loadB3dm(withoutBatchTableUrl).then(function (loader) { var components = loader.components; var featureMetadata = components.featureMetadata; var propertyTable = featureMetadata.getPropertyTable(0); expect(propertyTable).toBeDefined(); expect(propertyTable.count).toEqual(10); expect(propertyTable.class).toBeUndefined(); }); }); it("loads BatchedWithRtcCenterUrl", function () { return loadB3dm(withRtcCenterUrl).then(function (loader) { var components = loader.components; var featureMetadata = components.featureMetadata; var propertyTable = featureMetadata.getPropertyTable(0); expect(propertyTable).toBeDefined(); expect(propertyTable.count).toEqual(10); expect(loader.transform).toEqual( Matrix4.fromTranslation(new Cartesian3(0.1, 0.2, 0.3)) ); }); }); it("loads BatchTableHierarchy", function () { return loadB3dm(withBatchTableHierarchy).then(function (loader) { var components = loader.components; var featureMetadata = components.featureMetadata; var propertyTable = featureMetadata.getPropertyTable(0); expect(propertyTable).toBeDefined(); expect(propertyTable.count).toEqual(30); expect(propertyTable._batchTableHierarchy).toBeDefined(); }); }); it("throws with invalid version", function () { var arrayBuffer = Cesium3DTilesTester.generateBatchedTileBuffer({ version: 2, }); Cesium3DTilesTester.loadTileExpectError(scene, arrayBuffer, "b3dm"); }); it("throws with empty gltf", function () { // Expect to throw DeveloperError in Model due to invalid gltf magic var arrayBuffer = Cesium3DTilesTester.generateBatchedTileBuffer(); Cesium3DTilesTester.loadTileExpectError(scene, arrayBuffer, "b3dm"); }); it("destroys B3DM loader", function () { var unloadGltfLoader = spyOn( GltfLoader.prototype, "unload" ).and.callThrough(); return loadB3dm(withBatchTableUrl).then(function (loader) { expect(loader.components).toBeDefined(); expect(loader.isDestroyed()).toBe(false); loader.destroy(); expect(loader.components).toBeUndefined(); expect(loader.isDestroyed()).toBe(true); expect(unloadGltfLoader.calls.count()).toBe(1); }); }); });