Skip to content

Commit 5ca849c

Browse files
authored
Merge pull request #4940 from AnalyticalGraphicsInc/expression-fixes
3D Tiles Styling - Type Mismatches #2
2 parents 89047dc + 57e67f1 commit 5ca849c

10 files changed

+154
-173
lines changed

Apps/Sandcastle/gallery/3D Tiles Point Cloud Styling.html

+2-2
Original file line numberDiff line numberDiff line change
@@ -100,11 +100,11 @@
100100
});
101101

102102
addStyle('Show Subsections', {
103-
show : "${id} == 1 || ${id} > 250 && ${id} < 300"
103+
show : "${id} === 1 || ${id} > 250 && ${id} < 300"
104104
});
105105

106106
addStyle('Mod', {
107-
show : "${id} % 2 == 0"
107+
show : "${id} % 2 === 0"
108108
});
109109

110110
addStyle('Abs', {

Apps/Sandcastle/gallery/3D Tiles.html

+2-2
Original file line numberDiff line numberDiff line change
@@ -548,7 +548,7 @@
548548

549549
var leftOperand = 0;
550550
var rightOperand = 0;
551-
var op = '==';
551+
var op = '===';
552552

553553
// Left operand (properties and literals)
554554

@@ -562,7 +562,7 @@
562562

563563
// Operator
564564

565-
var ops = ['<', '<=', '>', '>=', '==', '!='];
565+
var ops = ['<', '<=', '>', '>=', '===', '!=='];
566566
var operators = [{
567567
text : 'Operator',
568568
onselect : function() {

Source/Scene/Cesium3DTileBatchTable.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -280,7 +280,7 @@ define([
280280
}
281281

282282
// Store any information needed to access the binary data, including the typed array,
283-
// componentCount (e.g. a MAT4 would be 16), and the type used to pack and unpack (e.g. Matrix4).
283+
// componentCount (e.g. a VEC4 would be 4), and the type used to pack and unpack (e.g. Cartesian4).
284284
binaryProperties[name] = {
285285
typedArray : typedArray,
286286
componentCount : componentCount,

Source/Scene/Cesium3DTileStyle.js

+5-5
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ define([
109109
var pointSizeExpression = defaultValue(styleJson.pointSize, DEFAULT_JSON_NUMBER_EXPRESSION);
110110

111111
var color;
112-
if (typeof(colorExpression) === 'string') {
112+
if (typeof colorExpression === 'string') {
113113
color = new Expression(colorExpression);
114114
} else if (defined(colorExpression.conditions)) {
115115
color = new ConditionsExpression(colorExpression);
@@ -118,9 +118,9 @@ define([
118118
that._color = color;
119119

120120
var show;
121-
if (typeof(showExpression) === 'boolean') {
121+
if (typeof showExpression === 'boolean') {
122122
show = new Expression(String(showExpression));
123-
} else if (typeof(showExpression) === 'string') {
123+
} else if (typeof showExpression === 'string') {
124124
show = new Expression(showExpression);
125125
} else if (defined(showExpression.conditions)) {
126126
show = new ConditionsExpression(showExpression);
@@ -129,9 +129,9 @@ define([
129129
that._show = show;
130130

131131
var pointSize;
132-
if (typeof(pointSizeExpression) === 'number') {
132+
if (typeof pointSizeExpression === 'number') {
133133
pointSize = new Expression(String(pointSizeExpression));
134-
} else if (typeof(pointSizeExpression) === 'string') {
134+
} else if (typeof pointSizeExpression === 'string') {
135135
pointSize = new Expression(pointSizeExpression);
136136
} else if (defined(pointSizeExpression.conditions)) {
137137
pointSize = new ConditionsExpression(pointSizeExpression);

Source/Scene/ConditionsExpression.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,8 @@ define([
3333
* var expression = new Cesium.Expression({
3434
* expression : 'regExp("^1(\\d)").exec(${id})',
3535
* conditions : [
36-
* ['${expression} == "1"', 'color("#FF0000")'],
37-
* ['${expression} == "2"', 'color("#00FF00")'],
36+
* ['${expression} === "1"', 'color("#FF0000")'],
37+
* ['${expression} === "2"', 'color("#00FF00")'],
3838
* ['true', 'color("#FFFFFF")']
3939
* ]
4040
* });

Source/Scene/Expression.js

+78-73
Large diffs are not rendered by default.

Source/Scene/PointCloud3DTileContent.js

-1
Original file line numberDiff line numberDiff line change
@@ -514,7 +514,6 @@ define([
514514

515515
for (var name in styleableProperties) {
516516
if (styleableProperties.hasOwnProperty(name)) {
517-
// TODO : this will not handle matrix types currently
518517
var property = styleableProperties[name];
519518
var typedArray = property.typedArray;
520519
var componentCount = property.componentCount;

Specs/Scene/Cesium3DTileStyleSpec.js

+4-4
Original file line numberDiff line numberDiff line change
@@ -330,7 +330,7 @@ defineSuite([
330330

331331
it('applies show style with variable', function() {
332332
var style = new Cesium3DTileStyle({
333-
"show" : "${ZipCode} == '19341'"
333+
"show" : "${ZipCode} === '19341'"
334334
});
335335

336336
expect(style.show.evaluate(frameState, feature1)).toEqual(true);
@@ -404,10 +404,10 @@ defineSuite([
404404
it('applies color style that maps id to color', function() {
405405
var style = new Cesium3DTileStyle({
406406
"color" : {
407-
"expression" : "regExp('^1(\\d)').exec(${id})",
407+
"expression" : "regExp('^1(\\d)').exec(String(${id}))",
408408
"conditions" : [
409-
["${expression} == '1'", "color('#FF0000')"],
410-
["${expression} == '2'", "color('#00FF00')"],
409+
["${expression} === '1'", "color('#FF0000')"],
410+
["${expression} === '2'", "color('#00FF00')"],
411411
["true", "color('#FFFFFF')"]
412412
]
413413
}

Specs/Scene/ConditionsExpressionSpec.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ defineSuite([
4848

4949
var jsonExpWithUndefinedExpression = {
5050
conditions : [
51-
['${expression} == undefined', 'color("blue")'],
51+
['${expression} === undefined', 'color("blue")'],
5252
['true', 'color("lime")']
5353
]
5454
};

Specs/Scene/ExpressionSpec.js

+59-82
Original file line numberDiff line numberDiff line change
@@ -1010,20 +1010,6 @@ defineSuite([
10101010
expect(expression.evaluate(frameState, undefined)).toEqual(false);
10111011
});
10121012

1013-
it('evaluates binary equals', function() {
1014-
var expression = new Expression('\'hello\' == \'hello\'');
1015-
expect(expression.evaluate(frameState, undefined)).toEqual(true);
1016-
1017-
expression = new Expression('1 == 2');
1018-
expect(expression.evaluate(frameState, undefined)).toEqual(false);
1019-
1020-
expression = new Expression('false == true == false');
1021-
expect(expression.evaluate(frameState, undefined)).toEqual(true);
1022-
1023-
expression = new Expression('1 == "1"');
1024-
expect(expression.evaluate(frameState, undefined)).toEqual(true);
1025-
});
1026-
10271013
it('evaluates binary not equals strict', function() {
10281014
var expression = new Expression('\'hello\' !== \'hello\'');
10291015
expect(expression.evaluate(frameState, undefined)).toEqual(false);
@@ -1038,20 +1024,6 @@ defineSuite([
10381024
expect(expression.evaluate(frameState, undefined)).toEqual(true);
10391025
});
10401026

1041-
it('evaluates binary not equals', function() {
1042-
var expression = new Expression('\'hello\' != \'hello\'');
1043-
expect(expression.evaluate(frameState, undefined)).toEqual(false);
1044-
1045-
expression = new Expression('1 != 2');
1046-
expect(expression.evaluate(frameState, undefined)).toEqual(true);
1047-
1048-
expression = new Expression('false != true != false');
1049-
expect(expression.evaluate(frameState, undefined)).toEqual(true);
1050-
1051-
expression = new Expression('1 != "1"');
1052-
expect(expression.evaluate(frameState, undefined)).toEqual(false);
1053-
});
1054-
10551027
it('evaluates binary less than', function() {
10561028
var expression = new Expression('2 < 3');
10571029
expect(expression.evaluate(frameState, undefined)).toEqual(true);
@@ -1278,15 +1250,9 @@ defineSuite([
12781250
expression = new Expression('rgba(255, 255, 255, 1.0) % rgba(255, 255, 255, 1.0)');
12791251
expect(expression.evaluate(frameState, undefined)).toEqual(Cartesian4.fromColor(new Color(0, 0, 0, 0)));
12801252

1281-
expression = new Expression('color(\'green\') == color(\'green\')');
1282-
expect(expression.evaluate(frameState, undefined)).toEqual(true);
1283-
1284-
expression = new Expression('color() == color()');
1253+
expression = new Expression('color(\'green\') === color(\'green\')');
12851254
expect(expression.evaluate(frameState, undefined)).toEqual(true);
12861255

1287-
expression = new Expression('color(\'green\') != color(\'green\')');
1288-
expect(expression.evaluate(frameState, undefined)).toEqual(false);
1289-
12901256
expression = new Expression('color(\'green\') !== color(\'green\')');
12911257
expect(expression.evaluate(frameState, undefined)).toEqual(false);
12921258
});
@@ -1382,15 +1348,6 @@ defineSuite([
13821348
expression = new Expression('vec4(2, 3, 4, 5) % vec4(3, 3, 3, 2)');
13831349
expect(expression.evaluate(frameState, undefined)).toEqual(new Cartesian4(2, 0, 1, 1));
13841350

1385-
expression = new Expression('vec2(1, 3) == vec2(1, 3)');
1386-
expect(expression.evaluate(frameState, undefined)).toEqual(true);
1387-
1388-
expression = new Expression('vec3(1, 3, 4) == vec3(1, 3, 4)');
1389-
expect(expression.evaluate(frameState, undefined)).toEqual(true);
1390-
1391-
expression = new Expression('vec4(1, 3, 4, 6) == vec4(1, 3, 4, 6)');
1392-
expect(expression.evaluate(frameState, undefined)).toEqual(true);
1393-
13941351
expression = new Expression('vec2(1, 2) === vec2(1, 2)');
13951352
expect(expression.evaluate(frameState, undefined)).toEqual(true);
13961353

@@ -1400,15 +1357,6 @@ defineSuite([
14001357
expression = new Expression('vec4(1, 2, 3, 4) === vec4(1, 2, 3, 4)');
14011358
expect(expression.evaluate(frameState, undefined)).toEqual(true);
14021359

1403-
expression = new Expression('vec2(1, 2) != vec2(1, 2)');
1404-
expect(expression.evaluate(frameState, undefined)).toEqual(false);
1405-
1406-
expression = new Expression('vec3(1, 2, 3) != vec3(1, 2, 3)');
1407-
expect(expression.evaluate(frameState, undefined)).toEqual(false);
1408-
1409-
expression = new Expression('vec4(1, 2, 3, 4) != vec4(1, 2, 3, 4)');
1410-
expect(expression.evaluate(frameState, undefined)).toEqual(false);
1411-
14121360
expression = new Expression('vec2(1, 2) !== vec2(1, 2)');
14131361
expect(expression.evaluate(frameState, undefined)).toEqual(false);
14141362

@@ -2358,7 +2306,7 @@ defineSuite([
23582306
vector : Cartesian4.UNIT_X
23592307
});
23602308

2361-
expression = new Expression('${feature} == ${feature.feature}');
2309+
expression = new Expression('${feature} === ${feature.feature}');
23622310
expect(expression.evaluate(frameState, feature)).toEqual(true);
23632311
});
23642312

@@ -2443,6 +2391,18 @@ defineSuite([
24432391
expect(expression.evaluate(frameState, feature)).toEqual(true);
24442392
});
24452393

2394+
it('throws if regex test function has invalid arguments', function() {
2395+
var expression = new Expression('regExp("1").test(1)');
2396+
expect(function() {
2397+
expression.evaluate(frameState, undefined);
2398+
}).toThrowDeveloperError();
2399+
2400+
expression = new Expression('regExp("a").test(regExp("b"))');
2401+
expect(function() {
2402+
expression.evaluate(frameState, undefined);
2403+
}).toThrowDeveloperError();
2404+
});
2405+
24462406
it('evaluates regex exec function', function() {
24472407
var feature = new MockFeature();
24482408
feature.addProperty('property', 'abc');
@@ -2467,6 +2427,18 @@ defineSuite([
24672427
expect(expression.evaluate(frameState, feature)).toEqual('1');
24682428
});
24692429

2430+
it('throws if regex exec function has invalid arguments', function() {
2431+
var expression = new Expression('regExp("1").exec(1)');
2432+
expect(function() {
2433+
expression.evaluate(frameState, undefined);
2434+
}).toThrowDeveloperError();
2435+
2436+
expression = new Expression('regExp("a").exec(regExp("b"))');
2437+
expect(function() {
2438+
expression.evaluate(frameState, undefined);
2439+
}).toThrowDeveloperError();
2440+
});
2441+
24702442
it('evaluates regex match operator', function() {
24712443
var feature = new MockFeature();
24722444
feature.addProperty('property', 'abc');
@@ -2486,17 +2458,28 @@ defineSuite([
24862458
expression = new Expression('regExp("quick\\s(brown).+?(jumps)", "ig") =~ "The Quick Brown Fox Jumps Over The Lazy Dog"');
24872459
expect(expression.evaluate(frameState, undefined)).toEqual(true);
24882460

2489-
expression = new Expression('regExp("a") =~ 1');
2490-
expect(expression.evaluate(frameState, undefined)).toEqual(false);
2461+
expression = new Expression('regExp(${property}) =~ ${property}');
2462+
expect(expression.evaluate(frameState, feature)).toEqual(true);
2463+
});
2464+
2465+
it('throws if regex match operator has invalid arguments', function() {
2466+
var feature = new MockFeature();
2467+
feature.addProperty('property', 'abc');
2468+
2469+
var expression = new Expression('regExp("a") =~ 1');
2470+
expect(function() {
2471+
expression.evaluate(frameState, undefined);
2472+
}).toThrowDeveloperError();
24912473

24922474
expression = new Expression('1 =~ regExp("a")');
2493-
expect(expression.evaluate(frameState, undefined)).toEqual(false);
2475+
expect(function() {
2476+
expression.evaluate(frameState, undefined);
2477+
}).toThrowDeveloperError();
24942478

24952479
expression = new Expression('1 =~ 1');
2496-
expect(expression.evaluate(frameState, undefined)).toEqual(false);
2497-
2498-
expression = new Expression('regExp(${property}) =~ ${property}');
2499-
expect(expression.evaluate(frameState, feature)).toEqual(true);
2480+
expect(function() {
2481+
expression.evaluate(frameState, undefined);
2482+
}).toThrowDeveloperError();
25002483
});
25012484

25022485
it('evaluates regex not match operator', function() {
@@ -2518,17 +2501,25 @@ defineSuite([
25182501
expression = new Expression('regExp("quick\\s(brown).+?(jumps)", "ig") !~ "The Quick Brown Fox Jumps Over The Lazy Dog"');
25192502
expect(expression.evaluate(frameState, undefined)).toEqual(false);
25202503

2521-
expression = new Expression('regExp("a") !~ 1');
2522-
expect(expression.evaluate(frameState, undefined)).toEqual(true);
2504+
expression = new Expression('regExp(${property}) !~ ${property}');
2505+
expect(expression.evaluate(frameState, feature)).toEqual(false);
2506+
});
2507+
2508+
it('throws if regex not match operator has invalid arguments', function() {
2509+
var expression = new Expression('regExp("a") !~ 1');
2510+
expect(function() {
2511+
expression.evaluate(frameState, undefined);
2512+
}).toThrowDeveloperError();
25232513

25242514
expression = new Expression('1 !~ regExp("a")');
2525-
expect(expression.evaluate(frameState, undefined)).toEqual(true);
2515+
expect(function() {
2516+
expression.evaluate(frameState, undefined);
2517+
}).toThrowDeveloperError();
25262518

25272519
expression = new Expression('1 !~ 1');
2528-
expect(expression.evaluate(frameState, undefined)).toEqual(false);
2529-
2530-
expression = new Expression('regExp(${property}) !~ ${property}');
2531-
expect(expression.evaluate(frameState, feature)).toEqual(false);
2520+
expect(function() {
2521+
expression.evaluate(frameState, undefined);
2522+
}).toThrowDeveloperError();
25322523
});
25332524

25342525
it('throws if test is not called with a RegExp', function() {
@@ -2708,27 +2699,13 @@ defineSuite([
27082699
expect(shaderExpression).toEqual(expected);
27092700
});
27102701

2711-
it('gets shader expression for binary equals', function() {
2712-
var expression = new Expression('1.0 == 2.0');
2713-
var shaderExpression = expression.getShaderExpression('', {});
2714-
var expected = '(1.0 == 2.0)';
2715-
expect(shaderExpression).toEqual(expected);
2716-
});
2717-
27182702
it('gets shader expression for binary not equals strict', function() {
27192703
var expression = new Expression('1.0 !== 2.0');
27202704
var shaderExpression = expression.getShaderExpression('', {});
27212705
var expected = '(1.0 != 2.0)';
27222706
expect(shaderExpression).toEqual(expected);
27232707
});
27242708

2725-
it('gets shader expression for binary not equals', function() {
2726-
var expression = new Expression('1.0 != 2.0');
2727-
var shaderExpression = expression.getShaderExpression('', {});
2728-
var expected = '(1.0 != 2.0)';
2729-
expect(shaderExpression).toEqual(expected);
2730-
});
2731-
27322709
it('gets shader expression for binary less than', function() {
27332710
var expression = new Expression('1.0 < 2.0');
27342711
var shaderExpression = expression.getShaderExpression('', {});

0 commit comments

Comments
 (0)