import { MetadataClass, MetadataEntity } from "../../Source/Cesium.js";
|
|
describe("Scene/MetadataEntity", function () {
|
var classDefinition = new MetadataClass({
|
id: "building",
|
class: {
|
properties: {
|
name: {
|
componentType: "STRING",
|
semantic: "NAME",
|
},
|
height: {
|
componentType: "FLOAT32",
|
optional: true,
|
default: 10.0,
|
},
|
position: {
|
type: "ARRAY",
|
componentType: "FLOAT32",
|
componentCount: 3,
|
},
|
},
|
},
|
});
|
|
var properties = {
|
name: "Building A",
|
position: [0.0, 0.0, 0.0],
|
};
|
|
it("throws when using MetadataEntity directly", function () {
|
var entity = new MetadataEntity();
|
expect(function () {
|
return entity.class;
|
}).toThrowDeveloperError();
|
expect(function () {
|
entity.hasProperty();
|
}).toThrowDeveloperError();
|
expect(function () {
|
entity.hasPropertyBySemantic();
|
}).toThrowDeveloperError();
|
expect(function () {
|
entity.getPropertyIds();
|
}).toThrowDeveloperError();
|
expect(function () {
|
entity.getProperty();
|
}).toThrowDeveloperError();
|
expect(function () {
|
entity.setProperty();
|
}).toThrowDeveloperError();
|
expect(function () {
|
entity.getPropertyBySemantic();
|
}).toThrowDeveloperError();
|
expect(function () {
|
entity.setPropertyBySemantic();
|
}).toThrowDeveloperError();
|
});
|
|
it("hasProperty returns false when there's no properties", function () {
|
expect(MetadataEntity.hasProperty("name", {})).toBe(false);
|
});
|
|
it("hasProperty returns false when there's no property with the given property ID", function () {
|
expect(
|
MetadataEntity.hasProperty("volume", properties, classDefinition)
|
).toBe(false);
|
});
|
|
it("hasProperty returns true when there's a property with the given property ID", function () {
|
expect(
|
MetadataEntity.hasProperty("name", properties, classDefinition)
|
).toBe(true);
|
});
|
|
it("hasProperty returns true when the class has a default value for a missing property", function () {
|
expect(
|
MetadataEntity.hasProperty("height", properties, classDefinition)
|
).toBe(true);
|
});
|
|
it("hasProperty throws without propertyId", function () {
|
expect(function () {
|
MetadataEntity.hasProperty(undefined, properties, classDefinition);
|
}).toThrowDeveloperError();
|
});
|
|
it("hasProperty throws without properties", function () {
|
expect(function () {
|
MetadataEntity.hasProperty("name", undefined, classDefinition);
|
}).toThrowDeveloperError();
|
});
|
|
it("hasProperty works without classDefinition", function () {
|
expect(MetadataEntity.hasProperty("name", properties)).toBe(true);
|
expect(MetadataEntity.hasProperty("volume", properties)).toBe(false);
|
});
|
|
it("hasPropertyBySemantic returns false when there's no properties", function () {
|
expect(MetadataEntity.hasPropertyBySemantic("NAME", {})).toBe(false);
|
});
|
|
it("hasPropertyBySemantic returns false when there's no property with the given property ID", function () {
|
expect(
|
MetadataEntity.hasPropertyBySemantic(
|
"VOLUME",
|
properties,
|
classDefinition
|
)
|
).toBe(false);
|
});
|
|
it("hasPropertyBySemantic returns false when there's no class definition", function () {
|
expect(MetadataEntity.hasPropertyBySemantic("NAME", properties)).toBe(
|
false
|
);
|
expect(MetadataEntity.hasPropertyBySemantic("VOLUME", properties)).toBe(
|
false
|
);
|
});
|
|
it("hasPropertyBySemantic returns true when there's a property with the given property ID", function () {
|
expect(
|
MetadataEntity.hasPropertyBySemantic("NAME", properties, classDefinition)
|
).toBe(true);
|
});
|
|
it("hasPropertyBySemantic returns true when the class has a default value for a missing property", function () {
|
expect(
|
MetadataEntity.hasPropertyBySemantic("NAME", properties, classDefinition)
|
).toBe(true);
|
});
|
|
it("hasPropertyBySemantic throws without semantic", function () {
|
expect(function () {
|
MetadataEntity.hasPropertyBySemantic(
|
undefined,
|
properties,
|
classDefinition
|
);
|
}).toThrowDeveloperError();
|
});
|
|
it("hasPropertyBySemantic throws without properties", function () {
|
expect(function () {
|
MetadataEntity.hasPropertyBySemantic("NAME", undefined, classDefinition);
|
}).toThrowDeveloperError();
|
});
|
|
it("getPropertyIds returns empty array when there are no properties", function () {
|
expect(MetadataEntity.getPropertyIds({}).length).toBe(0);
|
});
|
|
it("getPropertyIds returns array of property IDs", function () {
|
// Includes height which has a default value
|
expect(
|
MetadataEntity.getPropertyIds(properties, classDefinition).sort()
|
).toEqual(["height", "name", "position"]);
|
});
|
|
it("getPropertyIds uses results argument", function () {
|
var results = [];
|
var returnedResults = MetadataEntity.getPropertyIds(
|
properties,
|
classDefinition,
|
results
|
);
|
|
expect(results).toBe(returnedResults);
|
expect(results.sort()).toEqual(["height", "name", "position"]);
|
});
|
|
it("getPropertyIds throws without properties", function () {
|
expect(function () {
|
MetadataEntity.getPropertyIds(undefined, classDefinition);
|
}).toThrowDeveloperError();
|
});
|
|
it("getPropertyIds works without classDefinition", function () {
|
var results = [];
|
var returnedResults = MetadataEntity.getPropertyIds(
|
properties,
|
undefined,
|
results
|
);
|
expect(results).toBe(returnedResults);
|
expect(results.sort()).toEqual(["name", "position"]);
|
});
|
|
it("getProperty returns undefined when there's no properties", function () {
|
expect(MetadataEntity.getProperty("name", {})).toBeUndefined();
|
});
|
|
it("getProperty returns undefined when there's no property with the given property ID", function () {
|
expect(
|
MetadataEntity.getProperty("volume", properties, classDefinition)
|
).toBeUndefined();
|
});
|
|
it("getProperty returns the property value", function () {
|
var value = MetadataEntity.getProperty(
|
"position",
|
properties,
|
classDefinition
|
);
|
expect(value).toEqual(properties.position);
|
});
|
|
it("getProperty returns the default value when the property is missing", function () {
|
expect(
|
MetadataEntity.getProperty("height", properties, classDefinition)
|
).toBe(10.0);
|
});
|
|
it("getProperty throws without propertyId", function () {
|
expect(function () {
|
MetadataEntity.getProperty(undefined, properties, classDefinition);
|
}).toThrowDeveloperError();
|
});
|
|
it("getProperty throws without properties", function () {
|
expect(function () {
|
MetadataEntity.getProperty("name", undefined, classDefinition);
|
}).toThrowDeveloperError();
|
});
|
|
it("getProperty works without classDefinition", function () {
|
var value = MetadataEntity.getProperty("position", properties, undefined);
|
expect(value).toEqual(properties.position);
|
expect(value).not.toBe(properties.position); // The value is cloned
|
});
|
|
it("setProperty returns false if property doesn't exist", function () {
|
expect(MetadataEntity.setProperty("volume", 100.0, classDefinition)).toBe(
|
false
|
);
|
});
|
|
it("setProperty sets property value", function () {
|
var position = [1.0, 1.0, 1.0];
|
expect(
|
MetadataEntity.setProperty(
|
"position",
|
position,
|
properties,
|
classDefinition
|
)
|
).toBe(true);
|
var retrievedPosition = MetadataEntity.getProperty(
|
"position",
|
properties,
|
classDefinition
|
);
|
expect(retrievedPosition).toEqual(position);
|
expect(retrievedPosition).not.toBe(position); // The value is cloned
|
});
|
|
it("setProperty throws without propertyId", function () {
|
expect(function () {
|
MetadataEntity.setProperty(
|
undefined,
|
"Building B",
|
properties,
|
classDefinition
|
);
|
}).toThrowDeveloperError();
|
});
|
|
it("setProperty throws without value", function () {
|
expect(function () {
|
MetadataEntity.setProperty(
|
"name",
|
undefined,
|
properties,
|
classDefinition
|
);
|
}).toThrowDeveloperError();
|
});
|
|
it("setProperty throws without properties", function () {
|
expect(function () {
|
MetadataEntity.setProperty(
|
"name",
|
"Building B",
|
undefined,
|
classDefinition
|
);
|
}).toThrowDeveloperError();
|
});
|
|
it("setProperty works without classDefinition", function () {
|
var position = [1.0, 1.0, 1.0];
|
MetadataEntity.setProperty("position", position, properties);
|
var retrievedPosition = MetadataEntity.getProperty("position", properties);
|
expect(retrievedPosition).toEqual(position);
|
expect(retrievedPosition).not.toBe(position); // The value is cloned
|
});
|
|
it("getPropertyBySemantic returns undefined when there's no class", function () {
|
expect(
|
MetadataEntity.getPropertyBySemantic("NAME", properties)
|
).toBeUndefined();
|
});
|
|
it("getPropertyBySemantic returns undefined when there's no property with the given semantic", function () {
|
expect(
|
MetadataEntity.getPropertyBySemantic(
|
"HEIGHT",
|
properties,
|
classDefinition
|
)
|
).toBeUndefined();
|
});
|
|
it("getPropertyBySemantic returns the property value", function () {
|
expect(
|
MetadataEntity.getPropertyBySemantic("NAME", properties, classDefinition)
|
).toBe("Building A");
|
});
|
|
it("getPropertyBySemantic throws without semantic", function () {
|
expect(function () {
|
MetadataEntity.getPropertyBySemantic(
|
undefined,
|
properties,
|
classDefinition
|
);
|
}).toThrowDeveloperError();
|
});
|
|
it("getPropertyBySemantic throws without properties", function () {
|
expect(function () {
|
MetadataEntity.getPropertyBySemantic("NAME", undefined, classDefinition);
|
}).toThrowDeveloperError();
|
});
|
|
it("getPropertyBySemantic returns undefined without classDefinition", function () {
|
expect(
|
MetadataEntity.getPropertyBySemantic("NAME", properties, undefined)
|
).toBeUndefined();
|
});
|
|
it("setPropertyBySemantic sets property value", function () {
|
expect(
|
MetadataEntity.setPropertyBySemantic(
|
"NAME",
|
"Building B",
|
properties,
|
classDefinition
|
)
|
).toBe(true);
|
expect(
|
MetadataEntity.getProperty("name", properties, classDefinition)
|
).toBe("Building B");
|
});
|
|
it("setPropertyBySemantic returns false if the semantic does not exist", function () {
|
expect(
|
MetadataEntity.setPropertyBySemantic(
|
"HEIGHT",
|
20.0,
|
properties,
|
classDefinition
|
)
|
).toBe(false);
|
});
|
|
it("setPropertyBySemantic throws without semantic", function () {
|
expect(function () {
|
MetadataEntity.setPropertyBySemantic(
|
undefined,
|
"Building B",
|
properties,
|
classDefinition
|
);
|
}).toThrowDeveloperError();
|
});
|
|
it("setPropertyBySemantic throws without value", function () {
|
expect(function () {
|
MetadataEntity.setPropertyBySemantic(
|
"NAME",
|
undefined,
|
properties,
|
classDefinition
|
);
|
}).toThrowDeveloperError();
|
});
|
|
it("setPropertyBySemantic throws without properties", function () {
|
expect(function () {
|
MetadataEntity.setPropertyBySemantic(
|
"NAME",
|
"Building B",
|
undefined,
|
classDefinition
|
);
|
}).toThrowDeveloperError();
|
});
|
|
it("setPropertyBySemantic throws without classDefinition", function () {
|
expect(function () {
|
MetadataEntity.setPropertyBySemantic(
|
"NAME",
|
"Building B",
|
properties,
|
undefined
|
);
|
}).toThrowDeveloperError();
|
});
|
});
|