diff --git a/test/spec/ol/expr/expression.test.js b/test/spec/ol/expr/expression.test.js index 3746bd9e55..ca017825d8 100644 --- a/test/spec/ol/expr/expression.test.js +++ b/test/spec/ol/expr/expression.test.js @@ -237,6 +237,21 @@ describe('ol.expr.parse()', function() { expect(expr.evaluate({bar: 4}, lib)).to.be(8); }); + it('evaluates left to right for equal precedence', function() { + var expr = ol.expr.parse('2 / 4 * 20 % 15'); + expect(expr.evaluate()).to.be(10); + }); + + it('respects group precedence', function() { + expect(ol.expr.parse('2 / 4 * (20 % 15)').evaluate()).to.be(2.5); + expect(ol.expr.parse('2 / (4 * (20 % 15))').evaluate()).to.be(0.1); + expect(ol.expr.parse('2 / ((4 * 20) % 15)').evaluate()).to.be(0.4); + expect(ol.expr.parse('2 / (4 * 20) % 15').evaluate()).to.be(0.025); + expect(ol.expr.parse('(2 / (4 * 20)) % 15').evaluate()).to.be(0.025); + expect(ol.expr.parse('(2 / 4) * 20 % 15').evaluate()).to.be(10); + expect(ol.expr.parse('((2 / 4) * 20) % 15').evaluate()).to.be(10); + }); + it('parses * in left side of comparison expression', function() { var expr = ol.expr.parse('foo * 2 >bar'); expect(expr).to.be.a(ol.expr.Comparison); @@ -280,6 +295,17 @@ describe('ol.expr.parse()', function() { expect(expr.evaluate({foo: 15})).to.be(5); }); + it('respects precedence', function() { + expect(ol.expr.parse('2 + 4 * 20 - 15').evaluate()).to.be(67); + expect(ol.expr.parse('(2 + 4) * 20 - 15').evaluate()).to.be(105); + expect(ol.expr.parse('((2 + 4) * 20) - 15').evaluate()).to.be(105); + expect(ol.expr.parse('(2 + (4 * 20)) - 15').evaluate()).to.be(67); + expect(ol.expr.parse('2 + (4 * 20) - 15').evaluate()).to.be(67); + expect(ol.expr.parse('2 + ((4 * 20) - 15)').evaluate()).to.be(67); + expect(ol.expr.parse('2 + (4 * (20 - 15))').evaluate()).to.be(22); + expect(ol.expr.parse('2 + 4 * (20 - 15)').evaluate()).to.be(22); + }); + it('parses + in call argument', function() { var lib = { foo: function(arg) {