import {
|
Cartesian3,
|
MetadataClass,
|
TilesetMetadata,
|
} from "../../Source/Cesium.js";
|
|
describe("Scene/TilesetMetadata", function () {
|
it("creates tileset metadata with default values", function () {
|
var tilesetMetadata = new TilesetMetadata({
|
tileset: {},
|
});
|
|
expect(tilesetMetadata.class).toBeUndefined();
|
expect(tilesetMetadata.name).toBeUndefined();
|
expect(tilesetMetadata.description).toBeUndefined();
|
expect(tilesetMetadata.extras).toBeUndefined();
|
});
|
|
it("creates tileset metadata", function () {
|
var cityClass = new MetadataClass({
|
id: "city",
|
class: {
|
properties: {
|
neighborhoods: {
|
type: "ARRAY",
|
componentType: "STRING",
|
},
|
},
|
},
|
});
|
|
var extras = {
|
other: 0,
|
};
|
|
var extensions = {
|
EXT_other_extension: {},
|
};
|
|
var properties = {
|
neighborhoods: ["A", "B", "C"],
|
};
|
|
var tilesetMetadata = new TilesetMetadata({
|
class: cityClass,
|
tileset: {
|
name: "City",
|
description: "City Metadata",
|
extras: extras,
|
extensions: extensions,
|
properties: properties,
|
},
|
});
|
|
expect(tilesetMetadata.class).toBe(cityClass);
|
expect(tilesetMetadata.name).toBe("City");
|
expect(tilesetMetadata.description).toBe("City Metadata");
|
expect(tilesetMetadata.extras).toBe(extras);
|
expect(tilesetMetadata.extensions).toBe(extensions);
|
expect(tilesetMetadata.getProperty("neighborhoods")).toEqual(
|
properties.neighborhoods
|
);
|
});
|
|
it("constructor throws without tileset", function () {
|
expect(function () {
|
return new TilesetMetadata();
|
}).toThrowDeveloperError();
|
});
|
|
it("hasProperty returns false when there's no properties", function () {
|
var tilesetMetadata = new TilesetMetadata({
|
tileset: {},
|
});
|
expect(tilesetMetadata.hasProperty("height")).toBe(false);
|
});
|
|
it("hasProperty returns false when there's no property with the given property ID", function () {
|
var buildingClass = new MetadataClass({
|
id: "building",
|
class: {
|
properties: {
|
height: {
|
componentType: "FLOAT32",
|
},
|
},
|
},
|
});
|
|
var tilesetMetadata = new TilesetMetadata({
|
class: buildingClass,
|
tileset: {
|
properties: {
|
height: 10.0,
|
},
|
},
|
});
|
expect(tilesetMetadata.hasProperty("color")).toBe(false);
|
});
|
|
it("hasProperty returns true when there's a property with the given property ID", function () {
|
var buildingClass = new MetadataClass({
|
id: "building",
|
class: {
|
properties: {
|
height: {
|
componentType: "FLOAT32",
|
},
|
},
|
},
|
});
|
|
var tilesetMetadata = new TilesetMetadata({
|
class: buildingClass,
|
tileset: {
|
properties: {
|
height: 10.0,
|
},
|
},
|
});
|
expect(tilesetMetadata.hasProperty("height")).toBe(true);
|
});
|
|
it("hasProperty returns true when the class has a default value for a missing property", function () {
|
var buildingClass = new MetadataClass({
|
id: "building",
|
class: {
|
properties: {
|
height: {
|
componentType: "FLOAT32",
|
optional: true,
|
default: 10.0,
|
},
|
},
|
},
|
});
|
var tilesetMetadata = new TilesetMetadata({
|
class: buildingClass,
|
tileset: {},
|
});
|
|
expect(tilesetMetadata.hasProperty("height")).toBe(true);
|
});
|
|
it("hasProperty throws without propertyId", function () {
|
var tilesetMetadata = new TilesetMetadata({
|
tileset: {},
|
});
|
|
expect(function () {
|
tilesetMetadata.hasProperty();
|
}).toThrowDeveloperError();
|
});
|
|
it("hasPropertyBySemantic returns false when there's no properties", function () {
|
var tilesetMetadata = new TilesetMetadata({
|
tileset: {},
|
});
|
expect(tilesetMetadata.hasPropertyBySemantic("HEIGHT")).toBe(false);
|
});
|
|
it("hasPropertyBySemantic returns false when there's no property with the given semantic", function () {
|
var buildingClass = new MetadataClass({
|
id: "building",
|
class: {
|
properties: {
|
height: {
|
componentType: "FLOAT32",
|
},
|
},
|
},
|
});
|
|
var tilesetMetadata = new TilesetMetadata({
|
class: buildingClass,
|
tileset: {
|
properties: {
|
height: 10.0,
|
},
|
},
|
});
|
expect(tilesetMetadata.hasPropertyBySemantic("HEIGHT")).toBe(false);
|
});
|
|
it("hasPropertyBySemantic returns true when there's a property with the given semantic", function () {
|
var buildingClass = new MetadataClass({
|
id: "building",
|
class: {
|
properties: {
|
height: {
|
componentType: "FLOAT32",
|
semantic: "HEIGHT",
|
},
|
},
|
},
|
});
|
|
var tilesetMetadata = new TilesetMetadata({
|
class: buildingClass,
|
tileset: {
|
properties: {
|
height: 10.0,
|
},
|
},
|
});
|
expect(tilesetMetadata.hasPropertyBySemantic("HEIGHT")).toBe(true);
|
});
|
|
it("hasPropertyBySemantic returns true when the class has a default value for a missing property", function () {
|
var buildingClass = new MetadataClass({
|
id: "building",
|
class: {
|
properties: {
|
height: {
|
componentType: "FLOAT32",
|
semantic: "HEIGHT",
|
optional: true,
|
default: 10.0,
|
},
|
},
|
},
|
});
|
var tilesetMetadata = new TilesetMetadata({
|
class: buildingClass,
|
tileset: {},
|
});
|
|
expect(tilesetMetadata.hasPropertyBySemantic("HEIGHT")).toBe(true);
|
});
|
|
it("hasPropertyBySemantic throws without semantic", function () {
|
var tilesetMetadata = new TilesetMetadata({
|
tileset: {},
|
});
|
|
expect(function () {
|
tilesetMetadata.hasPropertyBySemantic(undefined);
|
}).toThrowDeveloperError();
|
});
|
|
it("getPropertyIds returns empty array when there are no properties", function () {
|
var tilesetMetadata = new TilesetMetadata({
|
tileset: {},
|
});
|
|
expect(tilesetMetadata.getPropertyIds().length).toBe(0);
|
});
|
|
it("getPropertyIds returns array of property IDs", function () {
|
var buildingClass = new MetadataClass({
|
id: "building",
|
class: {
|
properties: {
|
height: {
|
componentType: "FLOAT32",
|
},
|
color: {
|
componentType: "STRING",
|
},
|
},
|
},
|
});
|
|
var tilesetMetadata = new TilesetMetadata({
|
class: buildingClass,
|
tileset: {
|
properties: {
|
height: 10.0,
|
color: "RED",
|
},
|
},
|
});
|
|
expect(tilesetMetadata.getPropertyIds().sort()).toEqual([
|
"color",
|
"height",
|
]);
|
});
|
|
it("getPropertyIds includes properties with default values", function () {
|
var buildingClass = new MetadataClass({
|
id: "building",
|
class: {
|
properties: {
|
height: {
|
componentType: "FLOAT32",
|
optional: true,
|
default: 10.0,
|
},
|
color: {
|
componentType: "STRING",
|
},
|
},
|
},
|
});
|
var tilesetMetadata = new TilesetMetadata({
|
class: buildingClass,
|
tileset: {
|
properties: {
|
color: "RED",
|
},
|
},
|
});
|
|
expect(tilesetMetadata.getPropertyIds().sort()).toEqual([
|
"color",
|
"height",
|
]);
|
});
|
|
it("getPropertyIds uses results argument", function () {
|
var buildingClass = new MetadataClass({
|
id: "building",
|
class: {
|
properties: {
|
height: {
|
componentType: "FLOAT32",
|
},
|
color: {
|
componentType: "STRING",
|
},
|
},
|
},
|
});
|
|
var tilesetMetadata = new TilesetMetadata({
|
class: buildingClass,
|
tileset: {
|
properties: {
|
height: 10.0,
|
color: "RED",
|
},
|
},
|
});
|
|
var results = [];
|
var returnedResults = tilesetMetadata.getPropertyIds(results);
|
|
expect(results).toBe(returnedResults);
|
expect(results.sort()).toEqual(["color", "height"]);
|
});
|
|
it("getProperty returns undefined when there's no properties", function () {
|
var tilesetMetadata = new TilesetMetadata({
|
tileset: {},
|
});
|
expect(tilesetMetadata.getProperty("height")).toBeUndefined();
|
});
|
|
it("getProperty returns undefined when there's no property with the given property ID", function () {
|
var buildingClass = new MetadataClass({
|
id: "building",
|
class: {
|
properties: {
|
height: {
|
componentType: "FLOAT32",
|
},
|
},
|
},
|
});
|
|
var tilesetMetadata = new TilesetMetadata({
|
class: buildingClass,
|
tileset: {
|
properties: {
|
height: 10.0,
|
},
|
},
|
});
|
expect(tilesetMetadata.getProperty("color")).toBeUndefined();
|
});
|
|
it("getProperty returns the property value", function () {
|
var buildingClass = new MetadataClass({
|
id: "building",
|
class: {
|
properties: {
|
position: {
|
type: "VEC3",
|
componentType: "FLOAT32",
|
},
|
},
|
},
|
});
|
|
var position = [0.0, 0.0, 0.0];
|
|
var tilesetMetadata = new TilesetMetadata({
|
class: buildingClass,
|
tileset: {
|
properties: {
|
position: position,
|
},
|
},
|
});
|
|
var value = tilesetMetadata.getProperty("position");
|
expect(value).toEqual(Cartesian3.unpack(position));
|
});
|
|
it("getProperty returns the default value when the property is missing", function () {
|
var position = [0.0, 0.0, 0.0];
|
var buildingClass = new MetadataClass({
|
id: "building",
|
class: {
|
properties: {
|
position: {
|
type: "VEC3",
|
componentType: "FLOAT32",
|
optional: true,
|
default: position,
|
},
|
},
|
},
|
});
|
|
var tilesetMetadata = new TilesetMetadata({
|
class: buildingClass,
|
tileset: {},
|
});
|
|
var value = tilesetMetadata.getProperty("position");
|
expect(value).toEqual(Cartesian3.unpack(position));
|
});
|
|
it("getProperty throws without propertyId", function () {
|
var tilesetMetadata = new TilesetMetadata({
|
tileset: {},
|
});
|
|
expect(function () {
|
tilesetMetadata.getProperty();
|
}).toThrowDeveloperError();
|
});
|
|
it("setProperty returns false if property doesn't exist", function () {
|
var tilesetMetadata = new TilesetMetadata({
|
tileset: {},
|
});
|
|
var position = [0.0, 0.0, 0.0];
|
expect(tilesetMetadata.setProperty("position", position)).toBe(false);
|
});
|
|
it("setProperty sets property value", function () {
|
var buildingClass = new MetadataClass({
|
id: "building",
|
class: {
|
properties: {
|
position: {
|
type: "VEC3",
|
componentType: "FLOAT32",
|
},
|
},
|
},
|
});
|
|
var tilesetMetadata = new TilesetMetadata({
|
class: buildingClass,
|
tileset: {
|
properties: {
|
position: [0.0, 0.0, 0.0],
|
},
|
},
|
});
|
|
var position = new Cartesian3(1.0, 1.0, 1.0);
|
expect(tilesetMetadata.setProperty("position", position)).toBe(true);
|
expect(tilesetMetadata.getProperty("position")).toEqual(position);
|
expect(tilesetMetadata.getProperty("position")).not.toBe(position); // The value is cloned
|
});
|
|
it("setProperty throws without propertyId", function () {
|
var tilesetMetadata = new TilesetMetadata({
|
tileset: {},
|
});
|
|
expect(function () {
|
tilesetMetadata.setProperty();
|
}).toThrowDeveloperError();
|
});
|
|
it("setProperty throws without value", function () {
|
var tilesetMetadata = new TilesetMetadata({
|
tileset: {},
|
});
|
|
expect(function () {
|
tilesetMetadata.setProperty("color");
|
}).toThrowDeveloperError();
|
});
|
|
it("getPropertyBySemantic returns undefined when there's no class", function () {
|
var tilesetMetadata = new TilesetMetadata({
|
tileset: {},
|
});
|
expect(tilesetMetadata.getPropertyBySemantic("_HEIGHT")).toBeUndefined();
|
});
|
|
it("getPropertyBySemantic returns undefined when there's no property with the given semantic", function () {
|
var buildingClass = new MetadataClass({
|
id: "building",
|
class: {
|
properties: {
|
height: {
|
componentType: "FLOAT32",
|
},
|
},
|
},
|
});
|
|
var tilesetMetadata = new TilesetMetadata({
|
class: buildingClass,
|
tileset: {
|
properties: {
|
height: 10.0,
|
},
|
},
|
});
|
|
expect(tilesetMetadata.getPropertyBySemantic("_HEIGHT")).toBeUndefined();
|
});
|
|
it("getPropertyBySemantic returns the property value", function () {
|
var buildingClass = new MetadataClass({
|
id: "building",
|
class: {
|
properties: {
|
height: {
|
componentType: "FLOAT32",
|
semantic: "_HEIGHT",
|
},
|
},
|
},
|
});
|
|
var tilesetMetadata = new TilesetMetadata({
|
class: buildingClass,
|
tileset: {
|
properties: {
|
height: 10.0,
|
},
|
},
|
});
|
|
expect(tilesetMetadata.getPropertyBySemantic("_HEIGHT")).toBe(10.0);
|
});
|
|
it("getPropertyBySemantic throws without semantic", function () {
|
var tilesetMetadata = new TilesetMetadata({
|
tileset: {},
|
});
|
|
expect(function () {
|
tilesetMetadata.getPropertyBySemantic();
|
}).toThrowDeveloperError();
|
});
|
|
it("setPropertyBySemantic sets property value", function () {
|
var buildingClass = new MetadataClass({
|
id: "building",
|
class: {
|
properties: {
|
height: {
|
componentType: "FLOAT32",
|
semantic: "_HEIGHT",
|
},
|
},
|
},
|
});
|
|
var tilesetMetadata = new TilesetMetadata({
|
class: buildingClass,
|
tileset: {
|
properties: {
|
height: 10.0,
|
},
|
},
|
});
|
|
expect(tilesetMetadata.setPropertyBySemantic("_HEIGHT", 20.0)).toBe(true);
|
expect(tilesetMetadata.getProperty("height")).toBe(20.0);
|
});
|
|
it("setPropertyBySemantic returns false if semantic does not exist", function () {
|
var buildingClass = new MetadataClass({
|
id: "building",
|
class: {
|
properties: {
|
height: {
|
componentType: "FLOAT32",
|
},
|
},
|
},
|
});
|
|
var tilesetMetadata = new TilesetMetadata({
|
class: buildingClass,
|
tileset: {
|
properties: {
|
height: 10.0,
|
},
|
},
|
});
|
|
expect(tilesetMetadata.setPropertyBySemantic("_HEIGHT", 20.0)).toBe(false);
|
});
|
|
it("setPropertyBySemantic throws without semantic", function () {
|
var tilesetMetadata = new TilesetMetadata({
|
tileset: {},
|
});
|
|
expect(function () {
|
tilesetMetadata.setPropertyBySemantic();
|
}).toThrowDeveloperError();
|
});
|
|
it("setPropertyBySemantic throws without value", function () {
|
var buildingClass = new MetadataClass({
|
id: "building",
|
class: {
|
properties: {
|
height: {
|
componentType: "FLOAT32",
|
semantic: "_HEIGHT",
|
},
|
},
|
},
|
});
|
|
var tilesetMetadata = new TilesetMetadata({
|
class: buildingClass,
|
tileset: {
|
properties: {
|
height: 10.0,
|
},
|
},
|
});
|
|
expect(function () {
|
tilesetMetadata.setPropertyBySemantic("_HEIGHT");
|
}).toThrowDeveloperError();
|
});
|
});
|