DSDSWeb/static/js/Cesium-1.53/Specs/DataSources/VelocityOrientationProperty...

205 lines
7.7 KiB
JavaScript

defineSuite([
'DataSources/VelocityOrientationProperty',
'Core/Cartesian3',
'Core/Ellipsoid',
'Core/Event',
'Core/ExtrapolationType',
'Core/JulianDate',
'Core/Quaternion',
'Core/Transforms',
'DataSources/CallbackProperty',
'DataSources/SampledPositionProperty'
], function(
VelocityOrientationProperty,
Cartesian3,
Ellipsoid,
Event,
ExtrapolationType,
JulianDate,
Quaternion,
Transforms,
CallbackProperty,
SampledPositionProperty) {
'use strict';
var time = JulianDate.now();
it('can default construct', function() {
var property = new VelocityOrientationProperty();
expect(property.isConstant).toBe(true);
expect(property.definitionChanged).toBeInstanceOf(Event);
expect(property.position).toBeUndefined();
expect(property.ellipsoid).toBe(Ellipsoid.WGS84);
expect(property.getValue(time)).toBeUndefined();
});
it('can construct with arguments', function() {
var position = new SampledPositionProperty();
var property = new VelocityOrientationProperty(position, Ellipsoid.UNIT_SPHERE);
expect(property.isConstant).toBe(true);
expect(property.definitionChanged).toBeInstanceOf(Event);
expect(property.position).toBe(position);
expect(property.ellipsoid).toBe(Ellipsoid.UNIT_SPHERE);
expect(property.getValue(time)).toBeUndefined();
});
it('setting position raises definitionChanged event', function() {
var property = new VelocityOrientationProperty();
var listener = jasmine.createSpy('listener');
property.definitionChanged.addEventListener(listener);
var position = new SampledPositionProperty();
property.position = position;
expect(listener).toHaveBeenCalledWith(property);
});
it('subscribes/unsubscribes to position definitionChanged and propagates up', function() {
var position = new SampledPositionProperty();
var property = new VelocityOrientationProperty(position);
var listener = jasmine.createSpy('listener');
property.definitionChanged.addEventListener(listener);
//Position changing should raise out property change event
position.definitionChanged.raiseEvent(position);
expect(listener).toHaveBeenCalledWith(property);
//Make sure it unsubscribes when value is changed
property.position = undefined;
listener.calls.reset();
position.definitionChanged.raiseEvent(position);
expect(listener.calls.count()).toBe(0);
});
it('setting position does not raise definitionChanged event for same data', function() {
var position = new SampledPositionProperty();
var property = new VelocityOrientationProperty(position);
var listener = jasmine.createSpy('listener');
property.definitionChanged.addEventListener(listener);
property.position = position;
expect(listener.calls.count()).toBe(0);
});
it('setting ellipsoid raises definitionChanged event', function() {
var property = new VelocityOrientationProperty();
var listener = jasmine.createSpy('listener');
property.definitionChanged.addEventListener(listener);
property.ellipsoid = Ellipsoid.UNIT_SPHERE;
expect(listener).toHaveBeenCalledWith(property);
});
it('setting ellipsoid does not raise definitionChanged event for same data', function() {
var property = new VelocityOrientationProperty();
var listener = jasmine.createSpy('listener');
property.definitionChanged.addEventListener(listener);
property.ellipsoid = Ellipsoid.WGS84;
expect(listener.calls.count()).toBe(0);
});
it('works without result parameter', function() {
var times = [new JulianDate(0, 0), new JulianDate(0, 1.0 / 60.0)];
var values = [Cartesian3.fromDegrees(0, 0, 0), Cartesian3.fromDegrees(1, 0, 0)];
var velocity = Cartesian3.subtract(values[1], values[0], new Cartesian3());
Cartesian3.normalize(velocity, velocity);
var position = new SampledPositionProperty();
position.addSamples(times, values);
var property = new VelocityOrientationProperty(position);
var matrix = Transforms.rotationMatrixFromPositionVelocity(position.getValue(times[0]), velocity);
expect(property.getValue(times[0])).toEqual(Quaternion.fromRotationMatrix(matrix));
matrix = Transforms.rotationMatrixFromPositionVelocity(position.getValue(times[0]), velocity);
expect(property.getValue(times[1])).toEqual(Quaternion.fromRotationMatrix(matrix));
});
it('works with result parameter', function() {
var times = [new JulianDate(0, 0), new JulianDate(0, 1.0 / 60.0)];
var values = [Cartesian3.fromDegrees(0, 0, 0), Cartesian3.fromDegrees(1, 0, 0)];
var velocity = Cartesian3.subtract(values[1], values[0], new Cartesian3());
Cartesian3.normalize(velocity, velocity);
var position = new SampledPositionProperty();
position.addSamples(times, values);
var property = new VelocityOrientationProperty(position);
var expected = new Cartesian3();
var result = property.getValue(times[0], expected);
expect(result).toBe(expected);
var matrix = Transforms.rotationMatrixFromPositionVelocity(position.getValue(times[0]), velocity);
expect(expected).toEqual(Quaternion.fromRotationMatrix(matrix));
});
it('is undefined at zero velocity', function() {
var position = new CallbackProperty(function() {
return Cartesian3.fromDegrees(0, 0, 0);
}, false);
var property = new VelocityOrientationProperty(position);
expect(property.getValue(new JulianDate())).toBeUndefined();
});
it('returns undefined when position value is undefined', function() {
var position = new SampledPositionProperty();
position.addSample(new JulianDate(1, 0), Cartesian3.fromDegrees(0, 0, 0));
position.forwardExtrapolationType = ExtrapolationType.NONE;
position.backwardExtrapolationType = ExtrapolationType.NONE;
var property = new VelocityOrientationProperty(position);
var result = property.getValue(new JulianDate());
expect(result).toBeUndefined();
});
it('returns undefined when position has exactly one value', function() {
var position = new SampledPositionProperty();
position.addSample(new JulianDate(1, 0), Cartesian3.fromDegrees(0, 0, 0));
position.forwardExtrapolationType = ExtrapolationType.NONE;
position.backwardExtrapolationType = ExtrapolationType.NONE;
var property = new VelocityOrientationProperty(position);
var result = property.getValue(new JulianDate(1, 0));
expect(result).toBeUndefined();
});
it('equals works', function() {
var position = new SampledPositionProperty();
var left = new VelocityOrientationProperty();
var right = new VelocityOrientationProperty();
expect(left.equals(right)).toBe(true);
left.position = position;
expect(left.equals(right)).toBe(false);
right.position = position;
expect(left.equals(right)).toBe(true);
left.ellipsoid = Ellipsoid.UNIT_SPHERE;
expect(left.equals(right)).toBe(false);
right.ellipsoid = Ellipsoid.UNIT_SPHERE;
expect(left.equals(right)).toBe(true);
});
it('getValue throws without time', function() {
var property = new VelocityOrientationProperty();
expect(function() {
property.getValue();
}).toThrowDeveloperError();
});
});