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

284 lines
8.5 KiB
JavaScript

defineSuite([
'DataSources/PropertyBag',
'Core/JulianDate',
'DataSources/ConstantProperty',
'DataSources/SampledProperty'
], function(
PropertyBag,
JulianDate,
ConstantProperty,
SampledProperty) {
'use strict';
var time = JulianDate.now();
it('sets correct values when constructed with no arguments', function() {
var property = new PropertyBag();
expect(property.isConstant).toBe(true);
expect(property.getValue(time)).toEqual({});
});
it('sets correct values when constructed with arguments', function() {
var property = new PropertyBag({
a : new ConstantProperty(1),
b : new ConstantProperty(2)
});
expect(property.propertyNames).toContain('a');
expect(property.a).toBeDefined();
expect(property.a).toBeInstanceOf(ConstantProperty);
expect(property.hasProperty('a')).toEqual(true);
expect(property.propertyNames).toContain('b');
expect(property.b).toBeDefined();
expect(property.b).toBeInstanceOf(ConstantProperty);
expect(property.hasProperty('b')).toEqual(true);
expect(property.getValue(time)).toEqual({
a : 1,
b : 2
});
});
it('works with result parameter', function() {
var property = new PropertyBag({
a : new ConstantProperty(1),
b : new ConstantProperty(2)
});
var expectedResult = {
a : -1
};
var result = property.getValue(time, expectedResult);
expect(result).toEqual({
a : 1,
b : 2
});
expect(result).toBe(expectedResult);
});
it('leaves extra properties in result object in place', function() {
var property = new PropertyBag({
a : new ConstantProperty(1)
});
var expectedResult = {
q : -1
};
var result = property.getValue(time, expectedResult);
expect(result).toEqual({
a : 1,
q : -1
});
expect(result).toBe(expectedResult);
});
it('converts raw values to properties when constructed', function() {
var property = new PropertyBag({
a : 1,
b : 2
});
expect(property.propertyNames).toContain('a');
expect(property.a).toBeInstanceOf(ConstantProperty);
expect(property.propertyNames).toContain('b');
expect(property.b).toBeInstanceOf(ConstantProperty);
expect(property.getValue(time)).toEqual({
a : 1,
b : 2
});
});
function FakeProperty(v) {
this.v = v;
}
FakeProperty.prototype.getValue = function() {
return this.v;
};
function createFakeProperty(v) {
return new FakeProperty(v);
}
it('uses the provided function to convert raw values to properties when constructed', function() {
var property = new PropertyBag({
a : 1,
b : 2
}, createFakeProperty);
expect(property.propertyNames).toContain('a');
expect(property.a).toBeDefined();
expect(property.a).toBeInstanceOf(FakeProperty);
expect(property.propertyNames).toContain('b');
expect(property.b).toBeDefined();
expect(property.b).toBeInstanceOf(FakeProperty);
expect(property.getValue(time)).toEqual({
a : 1,
b : 2
});
});
it('returns correct results from hasProperty', function() {
var property = new PropertyBag();
expect(property.hasProperty('a')).toEqual(false);
property.addProperty('a');
expect(property.hasProperty('a')).toEqual(true);
});
it('allows adding a property without a value', function() {
var property = new PropertyBag();
property.addProperty('a');
expect(property.propertyNames).toEqual(['a']);
expect(property.a).toBeUndefined();
expect(property.hasProperty('a')).toEqual(true);
expect(property.getValue(time)).toEqual({
a : undefined
});
});
it('allows adding a property with a value', function() {
var property = new PropertyBag();
property.addProperty('a', new ConstantProperty(1));
expect(property.propertyNames).toEqual(['a']);
expect(property.a).toBeInstanceOf(ConstantProperty);
expect(property.getValue(time)).toEqual({
a : 1
});
});
it('uses the provided function to convert raw values to properties when added with a value', function() {
var property = new PropertyBag();
property.addProperty('a', 1, createFakeProperty);
expect(property.propertyNames).toEqual(['a']);
expect(property.a).toBeInstanceOf(FakeProperty);
expect(property.getValue(time)).toEqual({
a : 1
});
});
it('uses the provided function to convert raw values to properties when added without a value', function() {
var property = new PropertyBag();
property.addProperty('a', undefined, createFakeProperty);
expect(property.propertyNames).toEqual(['a']);
expect(property.a).toBeUndefined();
property.a = 1;
expect(property.a).toBeInstanceOf(FakeProperty);
expect(property.getValue(time)).toEqual({
a : 1
});
});
it('allows removing a property that was previously added', function() {
var property = new PropertyBag();
property.addProperty('a', new ConstantProperty(1));
expect(property.hasProperty('a')).toEqual(true);
property.removeProperty('a');
expect(property.propertyNames).toEqual([]);
expect(property.a).toBeUndefined();
expect(property.hasProperty('a')).toEqual(false);
expect(property.getValue(time)).toEqual({});
});
it('throws when removing a property that was not added', function() {
var property = new PropertyBag();
expect(function() {
property.removeProperty('a');
}).toThrowDeveloperError();
});
it('raises definitionChanged event when addProperty is called', function() {
var property = new PropertyBag();
var listener = jasmine.createSpy('listener');
property.definitionChanged.addEventListener(listener);
property.addProperty('a');
expect(listener).toHaveBeenCalledWith(property);
});
it('raises definitionChanged event when properties are changed', function() {
var property = new PropertyBag();
property.addProperty('a');
var listener = jasmine.createSpy('listener');
property.definitionChanged.addEventListener(listener);
var a = new ConstantProperty(1);
property.a = a;
expect(listener).toHaveBeenCalledWith(property, 'a', a, undefined);
});
it('requires propertyName in addProperty', function() {
var property = new PropertyBag();
expect(function() {
property.addProperty();
}).toThrowDeveloperError();
});
it('requires propertyName in removeProperty', function() {
var property = new PropertyBag();
expect(function() {
property.removeProperty();
}).toThrowDeveloperError();
});
it('has working equals function', function() {
var left = new PropertyBag({
a : new ConstantProperty(1)
});
var right = new PropertyBag({
a : new ConstantProperty(1)
});
expect(left.equals(right)).toEqual(true);
right.addProperty('c');
expect(left.equals(right)).toEqual(false);
right = new PropertyBag({
a : new ConstantProperty(2)
});
expect(left.equals(right)).toEqual(false);
right = new PropertyBag({
b : new ConstantProperty(1)
});
expect(left.equals(right)).toEqual(false);
right = new PropertyBag();
expect(left.equals(right)).toEqual(false);
left = new PropertyBag();
right = new PropertyBag();
expect(left.equals(right)).toEqual(true);
});
it('returns true from isConstant only if all members are constant', function() {
var property = new PropertyBag();
property.addProperty('a', new ConstantProperty(2));
expect(property.isConstant).toBe(true);
var sampledProperty = new SampledProperty(Number);
sampledProperty.addSample(time, 1);
property.addProperty('b', sampledProperty);
expect(property.isConstant).toBe(false);
});
});