import {
|
Cesium3DTileFeature,
|
ModelFeatureTable,
|
ModelFeature,
|
} from "../../../Source/Cesium.js";
|
import MetadataTester from "../../MetadataTester.js";
|
|
describe("Scene/ModelExperimental/ModelFeatureTable", function () {
|
var properties = {
|
height: {
|
semantic: "HEIGHT_SEMANTIC",
|
componentType: "FLOAT32",
|
},
|
name: {
|
componentType: "STRING",
|
},
|
HEIGHT_SEMANTIC: {
|
componentType: "FLOAT32",
|
},
|
};
|
var propertyValues = {
|
height: [1.0, 2.0],
|
name: ["A", "B"],
|
HEIGHT_SEMANTIC: [3.0, 4.0],
|
};
|
|
var mockPropertyTable = MetadataTester.createPropertyTable({
|
properties: properties,
|
propertyValues: propertyValues,
|
});
|
|
it("creates ModelFeatures when model does not have content", function () {
|
var table = new ModelFeatureTable({
|
propertyTable: mockPropertyTable,
|
model: {},
|
});
|
expect(table._featuresLength).toEqual(mockPropertyTable.count);
|
var modelFeatures = table._features;
|
for (var i = 0; i < modelFeatures.length; i++) {
|
var feature = table.getFeature(i);
|
expect(feature).toBeInstanceOf(ModelFeature);
|
}
|
});
|
|
it("creates ModelFeatures when model has content", function () {
|
var table = new ModelFeatureTable({
|
propertyTable: mockPropertyTable,
|
model: {
|
content: {
|
tileset: {},
|
},
|
},
|
});
|
expect(table._featuresLength).toEqual(mockPropertyTable.count);
|
var modelFeatures = table._features;
|
for (var i = 0; i < modelFeatures.length; i++) {
|
var feature = table.getFeature(i);
|
expect(feature).toBeInstanceOf(Cesium3DTileFeature);
|
}
|
});
|
|
it("hasProperty works", function () {
|
var table = new ModelFeatureTable({
|
model: {},
|
propertyTable: mockPropertyTable,
|
});
|
var modelFeatures = table._features;
|
for (var i = 0; i < modelFeatures.length; i++) {
|
var feature = modelFeatures[i];
|
expect(feature.hasProperty("height")).toEqual(true);
|
expect(feature.hasProperty("width")).toEqual(false);
|
}
|
});
|
|
it("getFeature works", function () {
|
var table = new ModelFeatureTable({
|
model: {},
|
propertyTable: mockPropertyTable,
|
});
|
expect(table._featuresLength).toEqual(mockPropertyTable.count);
|
var modelFeatures = table._features;
|
for (var i = 0; i < modelFeatures.length; i++) {
|
var feature = table.getFeature(i);
|
expect(feature).toEqual(modelFeatures[i]);
|
expect(feature).toBeInstanceOf(ModelFeature);
|
}
|
});
|
|
it("getProperty works", function () {
|
var table = new ModelFeatureTable({
|
model: {},
|
propertyTable: mockPropertyTable,
|
});
|
expect(table._featuresLength).toEqual(mockPropertyTable.count);
|
var modelFeatures = table._features;
|
|
for (var propertyName in properties) {
|
if (properties.hasOwnProperty(propertyName)) {
|
for (var i = 0; i < modelFeatures.length; i++) {
|
var feature = modelFeatures[i];
|
expect(feature.getProperty(propertyName)).toEqual(
|
propertyValues[propertyName][i]
|
);
|
}
|
}
|
}
|
});
|
|
it("getPropertyInherited works", function () {
|
var table = new ModelFeatureTable({
|
model: {},
|
propertyTable: mockPropertyTable,
|
});
|
expect(table._featuresLength).toEqual(mockPropertyTable.count);
|
var modelFeatures = table._features;
|
|
var i;
|
var feature;
|
|
for (i = 0; i < modelFeatures.length; i++) {
|
feature = modelFeatures[i];
|
expect(feature.getPropertyInherited("height")).toEqual(
|
propertyValues["height"][i]
|
);
|
expect(feature.getPropertyInherited("_height")).toBeUndefined();
|
}
|
|
// Check if the semantic is prioritized over the property name.
|
for (i = 0; i < modelFeatures.length; i++) {
|
feature = modelFeatures[i];
|
expect(feature.getPropertyInherited("HEIGHT_SEMANTIC")).toEqual(
|
propertyValues["height"][i]
|
);
|
expect(feature.getPropertyInherited("_HEIGHT_")).toBeUndefined();
|
}
|
});
|
|
it("getPropertyNames works", function () {
|
var table = new ModelFeatureTable({
|
model: {},
|
propertyTable: mockPropertyTable,
|
});
|
var modelFeatures = table._features;
|
var results;
|
for (var i = 0; i < modelFeatures.length; i++) {
|
results = [];
|
var feature = modelFeatures[i];
|
expect(feature.getPropertyNames(results)).toEqual([
|
"height",
|
"name",
|
"HEIGHT_SEMANTIC",
|
]);
|
}
|
});
|
|
it("setProperty works", function () {
|
var table = new ModelFeatureTable({
|
model: {},
|
propertyTable: mockPropertyTable,
|
});
|
var feature = table._features[0];
|
expect(feature.getProperty("height")).toEqual(1.0);
|
expect(feature.setProperty("height", 3.0)).toEqual(true);
|
expect(feature.getProperty("height")).toEqual(3.0);
|
});
|
|
it("destroy works", function () {
|
var table = new ModelFeatureTable({
|
model: {},
|
propertyTable: mockPropertyTable,
|
});
|
var batchTexture = table._batchTexture;
|
expect(batchTexture.isDestroyed()).toEqual(false);
|
expect(table.isDestroyed()).toEqual(false);
|
|
table.destroy();
|
|
expect(batchTexture.isDestroyed()).toEqual(true);
|
expect(table.isDestroyed()).toEqual(true);
|
});
|
});
|