You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
138 lines
4.3 KiB
JavaScript
138 lines
4.3 KiB
JavaScript
import { Cartesian4 } from "../../Source/Cesium.js";
|
|
import { Color } from "../../Source/Cesium.js";
|
|
import { ConditionsExpression } from "../../Source/Cesium.js";
|
|
|
|
describe("Scene/ConditionsExpression", function () {
|
|
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 properyNameMap = {
|
|
Height: "a_height",
|
|
};
|
|
var shaderFunction = expression.getShaderFunction(
|
|
"getColor",
|
|
properyNameMap,
|
|
{},
|
|
"vec4"
|
|
);
|
|
var expected =
|
|
"vec4 getColor() \n" +
|
|
"{ \n" +
|
|
" if ((a_height > 100.0)) \n" +
|
|
" { \n" +
|
|
" return vec4(vec3(0.0, 0.0, 1.0), 1.0); \n" +
|
|
" } \n" +
|
|
" else if ((a_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();
|
|
});
|
|
});
|