import { JsonMetadataTable } from "../../Source/Cesium.js"; describe("Scene/JsonMetadataTable", function () { var properties = { priority: [2, 1, 0], labels: ["Point Cloud", "Mesh", "Raster"], uri: ["tree.las", "building.gltf", "map.tif"], sizeInfo: [ { pointCount: 100, }, { vertices: 3000, faces: 1000, }, { width: 1024, height: 1024, }, ], mixedValues: ["red", 3, false], }; var count = 3; var table; beforeEach(function () { table = new JsonMetadataTable({ count: count, properties: properties, }); }); it("constructor throws without count", function () { expect(function () { return new JsonMetadataTable({ count: undefined, properties: properties, }); }).toThrowDeveloperError(); }); it("constructor throws without properties", function () { expect(function () { return new JsonMetadataTable({ count: count, properties: undefined, }); }).toThrowDeveloperError(); }); it("constructor clones properties", function () { var oldValue = properties.sizeInfo[0]; var sizeInfo = { lengthBytes: 1024, }; table.setProperty(0, "sizeInfo", sizeInfo); expect(properties.sizeInfo[0]).toBe(oldValue); expect(table.getProperty(0, "sizeInfo")).toEqual(sizeInfo); }); it("hasProperty returns true if the table has this property", function () { expect(table.hasProperty("priority")).toBe(true); }); it("hasProperty returns false if the table does not have this property", function () { expect(table.hasProperty("price")).toBe(false); }); it("getPropertyIds returns a list of property Ids", function () { expect(table.getPropertyIds().sort()).toEqual([ "labels", "mixedValues", "priority", "sizeInfo", "uri", ]); }); it("getProperty returns undefined for unknown property Id", function () { expect(table.getProperty(0, "color")).not.toBeDefined(); }); it("getProperty throws without index", function () { expect(function () { return table.getProperty(undefined, "priority"); }).toThrowDeveloperError(); }); it("getProperty throws for out-of-bounds index", function () { expect(function () { return table.getProperty(5, "priority"); }).toThrowDeveloperError(); }); it("getProperty throws without propertyId", function () { expect(function () { return table.getProperty(5, undefined); }).toThrowDeveloperError(); }); it("getProperty returns the property value", function () { expect(table.getProperty(0, "priority")).toBe(2); expect(table.getProperty(1, "priority")).toBe(1); expect(table.getProperty(2, "priority")).toBe(0); }); it("getProperty returns copy of value", function () { var value1 = table.getProperty(1, "sizeInfo"); var value2 = table.getProperty(1, "sizeInfo"); expect(value1).toEqual(properties.sizeInfo[1]); expect(value1).toEqual(value2); expect(value2).not.toBe(value1); }); it("getProperty works with heterogeneous values", function () { expect(table.getProperty(0, "mixedValues")).toBe("red"); expect(table.getProperty(1, "mixedValues")).toBe(3); expect(table.getProperty(2, "mixedValues")).toBe(false); }); it("setProperty throws without index", function () { expect(function () { return table.setProperty(undefined, undefined); }).toThrowDeveloperError(); }); it("setProperty throws for out-of-bounds index", function () { expect(function () { return table.setProperty(5, "priority", 3); }).toThrowDeveloperError(); }); it("setProperty throws without propertyId", function () { expect(function () { return table.setProperty(5, undefined); }).toThrowDeveloperError(); }); it("setProperty returns false if property doesn't exist", function () { expect(table.setProperty(0, "color", [255, 255, 255, 1.0])).toBe(false); }); it("setProperty sets property value", function () { var sizeInfo = { lengthBytes: 1024, }; expect(table.setProperty(0, "sizeInfo", sizeInfo)).toBe(true); expect(table.getProperty(0, "sizeInfo")).toEqual(sizeInfo); }); it("setProperty copies value", function () { var sizeInfo = { lengthBytes: 1024, }; table.setProperty(1, "sizeInfo", sizeInfo); sizeInfo.offset = 8; expect(table.getProperty(1, "sizeInfo")).not.toEqual(sizeInfo); }); });