121 lines
4.6 KiB
JavaScript
121 lines
4.6 KiB
JavaScript
defineSuite([
|
|
'Scene/ConditionsExpression',
|
|
'Core/Cartesian4',
|
|
'Core/Color'
|
|
], function(
|
|
ConditionsExpression,
|
|
Cartesian4,
|
|
Color) {
|
|
'use strict';
|
|
|
|
function MockFeature(value) {
|
|
this._value = value;
|
|
}
|
|
|
|
MockFeature.prototype.getProperty = function() {
|
|
return this._value;
|
|
};
|
|
|
|
var jsonExp = {
|
|
conditions : [
|
|
['${Height} > 100', 'color("blue")'],
|
|
['${Height} > 50', 'color("red")'],
|
|
['true', 'color("lime")']
|
|
]
|
|
};
|
|
|
|
var defines = {
|
|
halfHeight: '${Height}/2',
|
|
quarterHeight: '${Height}/4'
|
|
};
|
|
|
|
var jsonExpWithDefines = {
|
|
conditions : [
|
|
['${halfHeight} > 50 && ${halfHeight} < 100', 'color("blue")'],
|
|
['${quarterHeight} > 50 && ${quarterHeight} < 52', 'color("red")'],
|
|
['true', 'color("lime")']
|
|
]
|
|
};
|
|
|
|
it('constructs', function() {
|
|
var expression = new ConditionsExpression(jsonExp);
|
|
expect(expression.conditionsExpression).toEqual(jsonExp);
|
|
});
|
|
|
|
it('evaluates conditional', function() {
|
|
var expression = new ConditionsExpression(jsonExp);
|
|
expect(expression.evaluateColor(new MockFeature(101))).toEqual(Color.BLUE);
|
|
expect(expression.evaluateColor(new MockFeature(52))).toEqual(Color.RED);
|
|
expect(expression.evaluateColor(new MockFeature(3))).toEqual(Color.LIME);
|
|
});
|
|
|
|
it('evaluates conditional with defines', function() {
|
|
var expression = new ConditionsExpression(jsonExpWithDefines, defines);
|
|
expect(expression.evaluateColor(new MockFeature(101))).toEqual(Color.BLUE);
|
|
expect(expression.evaluateColor(new MockFeature(52))).toEqual(Color.LIME);
|
|
expect(expression.evaluateColor(new MockFeature(3))).toEqual(Color.LIME);
|
|
});
|
|
|
|
it('evaluate takes result argument', function() {
|
|
var result = new Cartesian4();
|
|
var expression = new ConditionsExpression(jsonExpWithDefines, defines, result);
|
|
var value = expression.evaluate(new MockFeature(101), result);
|
|
expect(value).toEqual(new Cartesian4(0.0, 0.0, 1.0, 1.0));
|
|
expect(value).toBe(result);
|
|
});
|
|
|
|
it('evaluate takes a color result argument', function() {
|
|
var result = new Color();
|
|
var expression = new ConditionsExpression(jsonExpWithDefines, defines, result);
|
|
var value = expression.evaluate(new MockFeature(101), result);
|
|
expect(value).toEqual(Color.BLUE);
|
|
expect(value).toBe(result);
|
|
});
|
|
|
|
it('constructs and evaluates empty conditional', function() {
|
|
var expression = new ConditionsExpression({
|
|
'conditions' : []
|
|
});
|
|
expect(expression._conditions).toEqual([]);
|
|
expect(expression.evaluate(new MockFeature(101))).toEqual(undefined);
|
|
expect(expression.evaluate(new MockFeature(52))).toEqual(undefined);
|
|
expect(expression.evaluate(new MockFeature(3))).toEqual(undefined);
|
|
});
|
|
|
|
it('constructs and evaluates empty', function() {
|
|
var expression = new ConditionsExpression([]);
|
|
expect(expression._conditions).toEqual(undefined);
|
|
expect(expression.evaluate(new MockFeature(101))).toEqual(undefined);
|
|
expect(expression.evaluate(new MockFeature(52))).toEqual(undefined);
|
|
expect(expression.evaluate(new MockFeature(3))).toEqual(undefined);
|
|
});
|
|
|
|
it('gets shader function', function() {
|
|
var expression = new ConditionsExpression(jsonExp);
|
|
var shaderFunction = expression.getShaderFunction('getColor', '', {}, 'vec4');
|
|
var expected = 'vec4 getColor() \n' +
|
|
'{ \n' +
|
|
' if ((Height > 100.0)) \n' +
|
|
' { \n' +
|
|
' return vec4(vec3(0.0, 0.0, 1.0), 1.0); \n' +
|
|
' } \n' +
|
|
' else if ((Height > 50.0)) \n' +
|
|
' { \n' +
|
|
' return vec4(vec3(1.0, 0.0, 0.0), 1.0); \n' +
|
|
' } \n' +
|
|
' else if (true) \n' +
|
|
' { \n' +
|
|
' return vec4(vec3(0.0, 1.0, 0.0), 1.0); \n' +
|
|
' } \n' +
|
|
' return vec4(1.0); \n' +
|
|
'} \n';
|
|
expect(shaderFunction).toEqual(expected);
|
|
});
|
|
|
|
it('return undefined shader function when there are no conditions', function() {
|
|
var expression = new ConditionsExpression([]);
|
|
var shaderFunction = expression.getShaderFunction('getColor', '', {}, 'vec4');
|
|
expect(shaderFunction).toBeUndefined();
|
|
});
|
|
});
|