import { FeatureMetadata, MetadataSchema } from "../../Source/Cesium.js"; describe("Scene/FeatureMetadata", function () { var propertyTablesSchema = { classes: { building: { properties: { name: { type: "STRING", }, height: { type: "FLOAT64", }, }, }, tree: { properties: { species: { type: "STRING", }, }, }, }, }; var propertyTexturesSchema = { classes: { map: { properties: { color: { type: "ARRAY", componentType: "UINT8", componentCount: 3, }, intensity: { type: "UINT8", }, }, }, ortho: { properties: { vegetation: { type: "UINT8", normalized: true, }, }, }, }, }; it("creates feature metadata with default values", function () { var metadata = new FeatureMetadata({ schema: new MetadataSchema(propertyTablesSchema), }); expect(metadata.schema).toBeDefined(); expect(metadata.statistics).toBeUndefined(); expect(metadata.extras).toBeUndefined(); expect(metadata.extensions).toBeUndefined(); }); it("creates feature metadata", function () { var mockPropertyTables = [ { id: 0, name: "Buildings" }, { id: 1, name: "Trees" }, ]; var metadata = new FeatureMetadata({ schema: new MetadataSchema(propertyTablesSchema), propertyTables: mockPropertyTables, }); expect(metadata.propertyTableCount).toEqual(2); var buildingClass = metadata.schema.classes.building; var treeClass = metadata.schema.classes.tree; expect(buildingClass.id).toBe("building"); expect(treeClass.id).toBe("tree"); var buildingsTable = metadata.getPropertyTable(0); var treesTable = metadata.getPropertyTable(1); expect(buildingsTable).toBe(mockPropertyTables[0]); expect(treesTable).toBe(mockPropertyTables[1]); }); it("creates feature metadata with feature textures", function () { var schema = new MetadataSchema(propertyTexturesSchema); var mapClass = schema.classes.map; var orthoClass = schema.classes.ortho; var mockTextures = [ { id: 0, name: "Map Texture", class: mapClass, }, { id: 1, name: "Ortho Texture", class: orthoClass, }, ]; var metadata = new FeatureMetadata({ schema: schema, propertyTextures: mockTextures, }); expect(mapClass.id).toBe("map"); expect(orthoClass.id).toBe("ortho"); var mapTexture = metadata.getPropertyTexture(0); var orthoTexture = metadata.getPropertyTexture(1); expect(mapTexture.id).toBe(0); expect(mapTexture.name).toBe("Map Texture"); expect(mapTexture.class).toBe(mapClass); expect(orthoTexture.id).toBe(1); expect(orthoTexture.name).toBe("Ortho Texture"); expect(orthoTexture.class).toBe(orthoClass); }); it("creates feature metadata with extras", function () { var extras = { date: "2021-04-14", }; var metadata = new FeatureMetadata({ extras: extras, schema: new MetadataSchema(propertyTablesSchema), }); expect(metadata.extras).toBe(extras); }); it("creates feature metadata with extensions", function () { var extensions = { "3DTILES_extension": {}, }; var metadata = new FeatureMetadata({ extensions: extensions, schema: new MetadataSchema(propertyTablesSchema), }); expect(metadata.extensions).toBe(extensions); }); it("creates feature metadata with statistics", function () { var statistics = { classes: { tree: { count: 100, properties: { height: { min: 10.0, max: 20.0, }, }, }, }, }; var metadata = new FeatureMetadata({ statistics: statistics, schema: new MetadataSchema(propertyTablesSchema), }); expect(metadata.statistics).toBe(statistics); }); it("getPropertyTable throws without propertyTableId", function () { var metadata = new FeatureMetadata({ extension: {}, schema: new MetadataSchema(propertyTablesSchema), }); expect(function () { metadata.getPropertyTable(); }).toThrowDeveloperError(); }); it("getPropertyTexture throws without featureTextureId", function () { var metadata = new FeatureMetadata({ extension: {}, schema: new MetadataSchema(propertyTexturesSchema), }); expect(function () { metadata.getPropertyTexture(); }).toThrowDeveloperError(); }); });