DSDSServer2024/build/build.20240805/static/js/Cesium-1.53/Specs/DataSources/PathVisualizerSpec.js

664 lines
28 KiB
JavaScript
Raw Normal View History

defineSuite([
'DataSources/PathVisualizer',
'Core/Cartesian3',
'Core/Color',
'Core/DistanceDisplayCondition',
'Core/JulianDate',
'Core/Matrix4',
'Core/ReferenceFrame',
'Core/TimeInterval',
'DataSources/CompositePositionProperty',
'DataSources/ConstantPositionProperty',
'DataSources/ConstantProperty',
'DataSources/EntityCollection',
'DataSources/PathGraphics',
'DataSources/PolylineGlowMaterialProperty',
'DataSources/PolylineOutlineMaterialProperty',
'DataSources/ReferenceProperty',
'DataSources/SampledPositionProperty',
'DataSources/ScaledPositionProperty',
'DataSources/TimeIntervalCollectionPositionProperty',
'Scene/SceneMode',
'Specs/createScene'
], function(
PathVisualizer,
Cartesian3,
Color,
DistanceDisplayCondition,
JulianDate,
Matrix4,
ReferenceFrame,
TimeInterval,
CompositePositionProperty,
ConstantPositionProperty,
ConstantProperty,
EntityCollection,
PathGraphics,
PolylineGlowMaterialProperty,
PolylineOutlineMaterialProperty,
ReferenceProperty,
SampledPositionProperty,
ScaledPositionProperty,
TimeIntervalCollectionPositionProperty,
SceneMode,
createScene) {
'use strict';
var scene;
var visualizer;
beforeAll(function() {
scene = createScene();
});
afterAll(function() {
scene.destroyForSpecs();
});
afterEach(function() {
visualizer = visualizer && visualizer.destroy();
});
it('constructor throws if no scene is passed.', function() {
expect(function() {
return new PathVisualizer();
}).toThrowDeveloperError();
});
it('update throws if no time specified.', function() {
var entityCollection = new EntityCollection();
visualizer = new PathVisualizer(scene, entityCollection);
expect(function() {
visualizer.update();
}).toThrowDeveloperError();
});
it('isDestroy returns false until destroyed.', function() {
var entityCollection = new EntityCollection();
visualizer = new PathVisualizer(scene, entityCollection);
expect(visualizer.isDestroyed()).toEqual(false);
visualizer.destroy();
expect(visualizer.isDestroyed()).toEqual(true);
visualizer = undefined;
});
it('removes the listener from the entity collection when destroyed', function() {
var entityCollection = new EntityCollection();
var visualizer = new PathVisualizer(scene, entityCollection);
expect(entityCollection.collectionChanged.numberOfListeners).toEqual(1);
visualizer.destroy();
expect(entityCollection.collectionChanged.numberOfListeners).toEqual(0);
});
it('object with no path does not create one.', function() {
var entityCollection = new EntityCollection();
visualizer = new PathVisualizer(scene, entityCollection);
var testObject = entityCollection.getOrCreateEntity('test');
testObject.position = new ConstantProperty([new Cartesian3(1234, 5678, 9101112), new Cartesian3(5678, 1234, 1101112)]);
visualizer.update(JulianDate.now());
expect(scene.primitives.length).toEqual(0);
});
it('object with no position does not create a polyline.', function() {
var entityCollection = new EntityCollection();
visualizer = new PathVisualizer(scene, entityCollection);
var testObject = entityCollection.getOrCreateEntity('test');
var path = testObject.path = new PathGraphics();
path.show = new ConstantProperty(true);
visualizer.update(JulianDate.now());
expect(scene.primitives.length).toEqual(0);
});
it('adding and removing an entity path without rendering does not crash.', function() {
var times = [new JulianDate(0, 0), new JulianDate(1, 0)];
var positions = [new Cartesian3(1234, 5678, 9101112), new Cartesian3(5678, 1234, 1101112)];
var entityCollection = new EntityCollection();
visualizer = new PathVisualizer(scene, entityCollection);
var position = new SampledPositionProperty();
position.addSamples(times, positions);
var testObject = entityCollection.getOrCreateEntity('test');
testObject.position = position;
testObject.path = new PathGraphics();
//Before we fixed the issue, the below remove call would cause a crash
//when visualizer.update was not called at least once after the entity was added.
entityCollection.remove(testObject);
});
it('A PathGraphics causes a primitive to be created and updated.', function() {
var times = [new JulianDate(0, 0), new JulianDate(1, 0)];
var updateTime = new JulianDate(0.5, 0);
var positions = [new Cartesian3(1234, 5678, 9101112), new Cartesian3(5678, 1234, 1101112)];
var entityCollection = new EntityCollection();
visualizer = new PathVisualizer(scene, entityCollection);
expect(scene.primitives.length).toEqual(0);
var testObject = entityCollection.getOrCreateEntity('test');
var position = new SampledPositionProperty();
testObject.position = position;
position.addSamples(times, positions);
var path = testObject.path = new PathGraphics();
path.show = new ConstantProperty(true);
path.material = new PolylineOutlineMaterialProperty();
path.material.color = new ConstantProperty(new Color(0.8, 0.7, 0.6, 0.5));
path.material.outlineColor = new ConstantProperty(new Color(0.1, 0.2, 0.3, 0.4));
path.material.outlineWidth = new ConstantProperty(2.5);
path.width = new ConstantProperty(12.5);
path.distanceDisplayCondition = new ConstantProperty(new DistanceDisplayCondition(10.0, 20.0));
path.leadTime = new ConstantProperty(25);
path.trailTime = new ConstantProperty(10);
visualizer.update(updateTime);
expect(scene.primitives.length).toEqual(1);
var polylineCollection = scene.primitives.get(0);
var primitive = polylineCollection.get(0);
expect(primitive.positions[0]).toEqual(testObject.position.getValue(JulianDate.addSeconds(updateTime, -path.trailTime.getValue(), new JulianDate())));
expect(primitive.positions[1]).toEqual(testObject.position.getValue(updateTime));
expect(primitive.positions[2]).toEqual(testObject.position.getValue(JulianDate.addSeconds(updateTime, path.leadTime.getValue(), new JulianDate())));
expect(primitive.show).toEqual(testObject.path.show.getValue(updateTime));
expect(primitive.width).toEqual(testObject.path.width.getValue(updateTime));
expect(primitive.distanceDisplayCondition).toEqual(testObject.path.distanceDisplayCondition.getValue(updateTime));
var material = primitive.material;
expect(material.uniforms.color).toEqual(testObject.path.material.color.getValue(updateTime));
expect(material.uniforms.outlineColor).toEqual(testObject.path.material.outlineColor.getValue(updateTime));
expect(material.uniforms.outlineWidth).toEqual(testObject.path.material.outlineWidth.getValue(updateTime));
path.show = new ConstantProperty(false);
visualizer.update(updateTime);
expect(primitive.show).toEqual(testObject.path.show.getValue(updateTime));
});
it('creates primitives when an entity is already in the collection.', function() {
var times = [new JulianDate(0, 0), new JulianDate(1, 0)];
var updateTime = new JulianDate(0.5, 0);
var positions = [new Cartesian3(1234, 5678, 9101112), new Cartesian3(5678, 1234, 1101112)];
var entityCollection = new EntityCollection();
var testObject = entityCollection.getOrCreateEntity('test');
var position = new SampledPositionProperty();
testObject.position = position;
position.addSamples(times, positions);
var path = testObject.path = new PathGraphics();
path.show = new ConstantProperty(true);
path.material = new PolylineOutlineMaterialProperty();
path.material.color = new ConstantProperty(new Color(0.8, 0.7, 0.6, 0.5));
path.material.outlineColor = new ConstantProperty(new Color(0.1, 0.2, 0.3, 0.4));
path.material.outlineWidth = new ConstantProperty(2.5);
path.width = new ConstantProperty(12.5);
path.leadTime = new ConstantProperty(25);
path.trailTime = new ConstantProperty(10);
visualizer = new PathVisualizer(scene, entityCollection);
expect(scene.primitives.length).toEqual(0);
visualizer.update(updateTime);
expect(scene.primitives.length).toEqual(1);
});
it('A custom material can be used.', function() {
var times = [new JulianDate(0, 0), new JulianDate(1, 0)];
var updateTime = new JulianDate(0.5, 0);
var positions = [new Cartesian3(1234, 5678, 9101112), new Cartesian3(5678, 1234, 1101112)];
var entityCollection = new EntityCollection();
visualizer = new PathVisualizer(scene, entityCollection);
expect(scene.primitives.length).toEqual(0);
var testObject = entityCollection.getOrCreateEntity('test');
var position = new SampledPositionProperty();
testObject.position = position;
position.addSamples(times, positions);
var path = testObject.path = new PathGraphics();
path.show = new ConstantProperty(true);
path.material = new PolylineGlowMaterialProperty();
path.material.color = new ConstantProperty(new Color(0.8, 0.7, 0.6, 0.5));
path.material.glowPower = new ConstantProperty(0.2);
path.width = new ConstantProperty(12.5);
path.leadTime = new ConstantProperty(25);
path.trailTime = new ConstantProperty(10);
visualizer.update(updateTime);
expect(scene.primitives.length).toEqual(1);
var polylineCollection = scene.primitives.get(0);
var primitive = polylineCollection.get(0);
var material = primitive.material;
expect(material.uniforms.color).toEqual(testObject.path.material.color.getValue(updateTime));
expect(material.uniforms.glowPower).toEqual(testObject.path.material.glowPower.getValue(updateTime));
});
it('Reuses primitives when hiding one and showing another', function() {
var times = [new JulianDate(0, 0), new JulianDate(1, 0)];
var time = new JulianDate(0.5, 0);
var positions = [new Cartesian3(1234, 5678, 9101112), new Cartesian3(5678, 1234, 1101112)];
var entityCollection = new EntityCollection();
visualizer = new PathVisualizer(scene, entityCollection);
var position = new SampledPositionProperty();
position.addSamples(times, positions);
var testObject = entityCollection.getOrCreateEntity('test');
testObject.position = position;
testObject.path = new PathGraphics();
testObject.path.show = new ConstantProperty(true);
testObject.path.leadTime = new ConstantProperty(25);
testObject.path.trailTime = new ConstantProperty(10);
visualizer.update(time);
var polylineCollection = scene.primitives.get(0);
expect(polylineCollection.length).toEqual(1);
testObject.path.show = new ConstantProperty(false);
visualizer.update(time);
expect(polylineCollection.length).toEqual(1);
position = new SampledPositionProperty();
position.addSamples(times, positions);
var testObject2 = entityCollection.getOrCreateEntity('test2');
testObject2.position = position;
testObject2.path = new PathGraphics();
testObject2.path.show = new ConstantProperty(true);
testObject2.path.leadTime = new ConstantProperty(25);
testObject2.path.trailTime = new ConstantProperty(10);
visualizer.update(time);
expect(polylineCollection.length).toEqual(1);
});
it('Switches from inertial to fixed paths in 2D', function() {
var times = [new JulianDate(0, 0), new JulianDate(1, 0)];
var time = new JulianDate(0.5, 0);
var positions = [new Cartesian3(1234, 5678, 9101112), new Cartesian3(5678, 1234, 1101112)];
var position = new SampledPositionProperty(ReferenceFrame.INERTIAL);
position.addSamples(times, positions);
var entityCollection = new EntityCollection();
visualizer = new PathVisualizer(scene, entityCollection);
var testObject = entityCollection.getOrCreateEntity('test');
testObject.position = position;
testObject.path = new PathGraphics();
testObject.path.leadTime = new ConstantProperty(25);
testObject.path.trailTime = new ConstantProperty(10);
visualizer.update(time);
expect(scene.primitives.length).toEqual(1);
//They'll be one inertial polyline collection
var inertialPolylineCollection = scene.primitives.get(0);
expect(inertialPolylineCollection.length).toEqual(1);
expect(inertialPolylineCollection.modelMatrix).not.toEqual(Matrix4.IDENTITY);
var inertialLine = inertialPolylineCollection.get(0);
expect(inertialLine.show).toEqual(true);
scene.mode = SceneMode.SCENE2D;
visualizer.update(time);
//They'll be one inertial polyline collection (with no visible lines)
//and a new fixed polyline collection.
expect(scene.primitives.length).toEqual(2);
var fixedPolylineCollection = scene.primitives.get(1);
expect(inertialLine.show).toEqual(false);
expect(fixedPolylineCollection.length).toEqual(1);
expect(fixedPolylineCollection.modelMatrix).toEqual(Matrix4.IDENTITY);
var fixedLine = fixedPolylineCollection.get(0);
expect(fixedLine.show).toEqual(true);
});
it('clear hides primitives.', function() {
var times = [new JulianDate(0, 0), new JulianDate(1, 0)];
var updateTime = new JulianDate(0.5, 0);
var positions = [new Cartesian3(1234, 5678, 9101112), new Cartesian3(5678, 1234, 1101112)];
var entityCollection = new EntityCollection();
visualizer = new PathVisualizer(scene, entityCollection);
expect(scene.primitives.length).toEqual(0);
var testObject = entityCollection.getOrCreateEntity('test');
var position = new SampledPositionProperty();
testObject.position = position;
position.addSamples(times, positions);
var path = testObject.path = new PathGraphics();
path.show = new ConstantProperty(true);
path.color = new ConstantProperty(new Color(0.8, 0.7, 0.6, 0.5));
path.width = new ConstantProperty(12.5);
path.outlineColor = new ConstantProperty(new Color(0.1, 0.2, 0.3, 0.4));
path.outlineWidth = new ConstantProperty(2.5);
path.leadTime = new ConstantProperty(25);
path.trailTime = new ConstantProperty(10);
visualizer.update(updateTime);
expect(scene.primitives.length).toEqual(1);
var polylineCollection = scene.primitives.get(0);
var primitive = polylineCollection.get(0);
visualizer.update(updateTime);
//Clearing won't actually remove the primitive because of the
//internal cache used by the visualizer, instead it just hides it.
entityCollection.removeAll();
expect(primitive.show).toEqual(false);
expect(primitive.id).toBeUndefined();
});
it('Visualizer sets entity property.', function() {
var times = [new JulianDate(0, 0), new JulianDate(1, 0)];
var updateTime = new JulianDate(0.5, 0);
var positions = [new Cartesian3(1234, 5678, 9101112), new Cartesian3(5678, 1234, 1101112)];
var entityCollection = new EntityCollection();
visualizer = new PathVisualizer(scene, entityCollection);
expect(scene.primitives.length).toEqual(0);
var testObject = entityCollection.getOrCreateEntity('test');
var position = new SampledPositionProperty();
testObject.position = position;
position.addSamples(times, positions);
var path = testObject.path = new PathGraphics();
path.show = new ConstantProperty(true);
path.color = new ConstantProperty(new Color(0.8, 0.7, 0.6, 0.5));
path.width = new ConstantProperty(12.5);
path.outlineColor = new ConstantProperty(new Color(0.1, 0.2, 0.3, 0.4));
path.outlineWidth = new ConstantProperty(2.5);
path.leadTime = new ConstantProperty(25);
path.trailTime = new ConstantProperty(10);
visualizer.update(updateTime);
var polylineCollection = scene.primitives.get(0);
var primitive = polylineCollection.get(0);
expect(primitive.id).toEqual(testObject);
});
it('subSample works for constant properties', function() {
var property = new ConstantPositionProperty(new Cartesian3(1000, 2000, 3000));
var start = new JulianDate(0, 0);
var stop = new JulianDate(1, 0);
var updateTime = new JulianDate(1, 43200);
var referenceFrame = ReferenceFrame.FIXED;
var maximumStep = 10;
var result = PathVisualizer._subSample(property, start, stop, updateTime, referenceFrame, maximumStep);
expect(result).toEqual([property._value]);
});
it('subSample works for reference properties', function() {
var property = new ConstantPositionProperty(new Cartesian3(1000, 2000, 3000));
var start = new JulianDate(0, 0);
var stop = new JulianDate(1, 0);
var updateTime = new JulianDate(1, 43200);
var referenceFrame = ReferenceFrame.FIXED;
var maximumStep = 10;
var entities = new EntityCollection();
var targetEntity = entities.getOrCreateEntity('target');
targetEntity.position = property;
var referenceProperty = new ReferenceProperty(entities, 'target', ['position']);
var result = PathVisualizer._subSample(referenceProperty, start, stop, updateTime, referenceFrame, maximumStep);
expect(result).toEqual([property._value]);
});
it('subSample works for sampled properties', function() {
var property = new SampledPositionProperty();
var start = new JulianDate(0, 0);
var stop = new JulianDate(1, 0);
property.addSample(start, new Cartesian3(0, 0, 0));
property.addSample(stop, new Cartesian3(0, 0, 100));
var updateTime = new JulianDate(0, 43200);
var referenceFrame = ReferenceFrame.FIXED;
var maximumStep = 86400;
var result = [];
//A large maximum step causes no sub-smapling.
PathVisualizer._subSample(property, start, stop, updateTime, referenceFrame, maximumStep, result);
expect(result).toEqual([property.getValue(start), property.getValue(updateTime), property.getValue(stop)]);
//An evenly spaced maximum step causes equal steps from start to stop
maximumStep = 28800;
var expectedStep = 28800;
PathVisualizer._subSample(property, start, stop, updateTime, referenceFrame, maximumStep, result);
expect(result).toEqual([property.getValue(start), property.getValue(JulianDate.addSeconds(start, expectedStep, new JulianDate())), property.getValue(updateTime), property.getValue(JulianDate.addSeconds(start, expectedStep * 2, new JulianDate())), property.getValue(stop)]);
//An maximum step size that is slightly more than halfway between points causes a single step halfway between points
maximumStep = 43201;
expectedStep = 43200;
updateTime = new JulianDate(0, 64800);
PathVisualizer._subSample(property, start, stop, updateTime, referenceFrame, maximumStep, result);
expect(result).toEqual([property.getValue(start), property.getValue(JulianDate.addSeconds(start, expectedStep, new JulianDate())), property.getValue(updateTime), property.getValue(stop)]);
//An maximum step size that is slightly less than halfway between points causes two steps of the eqaul size to be taken between points
maximumStep = 43199;
expectedStep = 28800;
updateTime = new JulianDate(0, 21600);
PathVisualizer._subSample(property, start, stop, updateTime, referenceFrame, maximumStep, result);
expect(result).toEqual([property.getValue(start), property.getValue(updateTime), property.getValue(JulianDate.addSeconds(start, expectedStep, new JulianDate())), property.getValue(JulianDate.addSeconds(start, expectedStep * 2, new JulianDate())), property.getValue(stop)]);
});
it('subSample works for interval properties', function() {
var t1 = new JulianDate(0, 0);
var t2 = new JulianDate(1, 0);
var t3 = new JulianDate(2, 0);
var t4 = new JulianDate(3, 0);
var property = new TimeIntervalCollectionPositionProperty();
property.intervals.addInterval(new TimeInterval({
start : t1,
stop : t2,
data : new Cartesian3(0, 0, 1)
}));
property.intervals.addInterval(new TimeInterval({
start : t2,
stop : t3,
isStartIncluded : false,
isStopIncluded : false,
data : new Cartesian3(0, 0, 2)
}));
property.intervals.addInterval(new TimeInterval({
start : t3,
stop : t4,
data : new Cartesian3(0, 0, 3)
}));
var updateTime = new JulianDate(1, 43200);
var referenceFrame = ReferenceFrame.FIXED;
var maximumStep = 10;
var result = [];
PathVisualizer._subSample(property, t1, t4, updateTime, referenceFrame, maximumStep, result);
expect(result).toEqual([new Cartesian3(0, 0, 1), new Cartesian3(0, 0, 2), new Cartesian3(0, 0, 3)]);
PathVisualizer._subSample(property, t2, t3, updateTime, referenceFrame, maximumStep, result);
expect(result).toEqual([new Cartesian3(0, 0, 1), new Cartesian3(0, 0, 2), new Cartesian3(0, 0, 3)]);
PathVisualizer._subSample(property, t1, t2, updateTime, referenceFrame, maximumStep, result);
expect(result).toEqual([new Cartesian3(0, 0, 1)]);
PathVisualizer._subSample(property, t3, t4, updateTime, referenceFrame, maximumStep, result);
expect(result).toEqual([new Cartesian3(0, 0, 3)]);
});
function CustomPositionProperty(innerProperty) {
this.SampledProperty = innerProperty;
this.isConstant = innerProperty.isConstant;
this.definitionChanged = innerProperty.definitionChanged;
this.referenceFrame = innerProperty.referenceFrame;
this.getValue = function(time, result) {
return innerProperty.getValue(time, result);
};
this.getValueInReferenceFrame = function(time, referenceFrame, result) {
return innerProperty.getValueInReferenceFrame(time, referenceFrame, result);
};
this.equals = function(other) {
return innerProperty.equals(other);
};
}
it('subSample works for custom properties', function() {
var t1 = new JulianDate(0, 0);
var t2 = new JulianDate(1, 0);
var t3 = new JulianDate(2, 0);
var t4 = new JulianDate(3, 0);
var updateTime = new JulianDate(1, 1);
var sampledProperty = new SampledPositionProperty();
sampledProperty.addSample(t1, new Cartesian3(0, 0, 1));
sampledProperty.addSample(t2, new Cartesian3(0, 0, 2));
sampledProperty.addSample(t3, new Cartesian3(0, 0, 3));
sampledProperty.addSample(t4, new Cartesian3(0, 0, 4));
var property = new CustomPositionProperty(sampledProperty);
var referenceFrame = ReferenceFrame.FIXED;
var maximumStep = 43200;
var result = [];
PathVisualizer._subSample(property, t1, t4, updateTime, referenceFrame, maximumStep, result);
expect(result).toEqual([sampledProperty.getValue(t1), sampledProperty.getValue(JulianDate.addSeconds(t1, maximumStep, new JulianDate())), sampledProperty.getValue(JulianDate.addSeconds(t1, maximumStep * 2, new JulianDate())), sampledProperty.getValue(updateTime), sampledProperty.getValue(JulianDate.addSeconds(t1, maximumStep * 3, new JulianDate())), sampledProperty.getValue(JulianDate.addSeconds(t1, maximumStep * 4, new JulianDate())), sampledProperty.getValue(JulianDate.addSeconds(t1, maximumStep * 5, new JulianDate())), sampledProperty.getValue(JulianDate.addSeconds(t1, maximumStep * 6, new JulianDate()))]);
});
function createCompositeTest(useReferenceProperty){
var t1 = new JulianDate(0, 0);
var t2 = new JulianDate(1, 0);
var t3 = new JulianDate(2, 0);
var t4 = new JulianDate(3, 0);
var t5 = new JulianDate(4, 0);
var t6 = new JulianDate(5, 0);
var constantProperty = new ConstantPositionProperty(new Cartesian3(0, 0, 1));
var intervalProperty = new TimeIntervalCollectionPositionProperty();
intervalProperty.intervals.addInterval(new TimeInterval({
start : t1,
stop : t2,
data : new Cartesian3(0, 0, 1)
}));
intervalProperty.intervals.addInterval(new TimeInterval({
start : t2,
stop : t3,
isStartIncluded : false,
isStopIncluded : false,
data : new Cartesian3(0, 0, 2)
}));
intervalProperty.intervals.addInterval(new TimeInterval({
start : t1,
stop : t2,
data : new Cartesian3(0, 0, 3)
}));
var sampledProperty = new SampledPositionProperty();
sampledProperty.addSample(t1, new Cartesian3(0, 0, 1));
sampledProperty.addSample(t2, new Cartesian3(0, 0, 2));
sampledProperty.addSample(t3, new Cartesian3(0, 0, 3));
sampledProperty.addSample(t4, new Cartesian3(0, 0, 4));
var entities = new EntityCollection();
var targetEntity = entities.getOrCreateEntity('target');
targetEntity.position = new ConstantPositionProperty(new Cartesian3(0, 0, 5));
var referenceProperty = new ReferenceProperty(entities, 'target', ['position']);
var scaledProperty = new ScaledPositionProperty(referenceProperty);
var property = new CompositePositionProperty();
property.intervals.addInterval(new TimeInterval({
start : t1,
stop : t2,
data : intervalProperty
}));
property.intervals.addInterval(new TimeInterval({
start : t2,
stop : t3,
isStartIncluded : false,
isStopIncluded : false,
data : constantProperty
}));
property.intervals.addInterval(new TimeInterval({
start : t3,
stop : t4,
data : sampledProperty
}));
property.intervals.addInterval(new TimeInterval({
start : t4,
stop : t5,
isStartIncluded : false,
isStopIncluded : true,
data : referenceProperty
}));
property.intervals.addInterval(new TimeInterval({
start : t5,
stop : t6,
isStartIncluded : false,
isStopIncluded : true,
data : scaledProperty
}));
var updateTime = new JulianDate(0, 0);
var referenceFrame = ReferenceFrame.FIXED;
var maximumStep = 43200;
var result = [];
var propertyToTest = property;
if (useReferenceProperty) {
var testReference = entities.getOrCreateEntity('testReference');
testReference.position = property;
propertyToTest = new ReferenceProperty(entities, 'testReference', ['position']);
}
PathVisualizer._subSample(propertyToTest, t1, t6, updateTime, referenceFrame, maximumStep, result);
expect(result).toEqual([intervalProperty.intervals.get(0).data,
constantProperty.getValue(t1),
sampledProperty.getValue(t3),
sampledProperty.getValue(JulianDate.addSeconds(t3, maximumStep, new JulianDate())),
sampledProperty.getValue(t4),
targetEntity.position.getValue(t5),
scaledProperty.getValue(t6)]);
}
it('subSample works for composite properties', function() {
createCompositeTest(false);
});
it('subSample works for composite properties wrapped in reference properties', function() {
createCompositeTest(true);
});
}, 'WebGL');