From 2fd8f4cb0099947f84b5193c8f474fa71c3c0388 Mon Sep 17 00:00:00 2001 From: Tim Schaub Date: Tue, 11 Jun 2013 21:42:00 -0600 Subject: [PATCH] Integration testing for binary logical operators --- test/spec/ol/expression/expression.test.js | 54 ++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/test/spec/ol/expression/expression.test.js b/test/spec/ol/expression/expression.test.js index 704c7e0d3e..44256b923a 100644 --- a/test/spec/ol/expression/expression.test.js +++ b/test/spec/ol/expression/expression.test.js @@ -371,6 +371,59 @@ describe('ol.expression.parse', function() { }); }); + describe('binary logical operators', function() { + // http://www.ecma-international.org/ecma-262/5.1/#sec-11.11 + + it('parses && operator', function() { + var expr = ol.expression.parse('foo&&bar'); + expect(expr).to.be.a(ol.expression.Logical); + expect(expr.evaluate({foo: true, bar: true})).to.be(true); + expect(expr.evaluate({foo: true, bar: false})).to.be(false); + expect(expr.evaluate({foo: false, bar: true})).to.be(false); + expect(expr.evaluate({foo: false, bar: false})).to.be(false); + }); + + it('consumes space as expected with &&', function() { + var expr = ol.expression.parse(' foo && bar '); + expect(expr).to.be.a(ol.expression.Logical); + expect(expr.evaluate({foo: true, bar: true})).to.be(true); + expect(expr.evaluate({foo: true, bar: false})).to.be(false); + expect(expr.evaluate({foo: false, bar: true})).to.be(false); + expect(expr.evaluate({foo: false, bar: false})).to.be(false); + }); + + it('throws for invalid spacing with &&', function() { + expect(function() { + ol.expression.parse('true & & false'); + }).throwException(); + }); + + it('parses || operator', function() { + var expr = ol.expression.parse('foo||bar'); + expect(expr).to.be.a(ol.expression.Logical); + expect(expr.evaluate({foo: true, bar: true})).to.be(true); + expect(expr.evaluate({foo: true, bar: false})).to.be(true); + expect(expr.evaluate({foo: false, bar: true})).to.be(true); + expect(expr.evaluate({foo: false, bar: false})).to.be(false); + }); + + it('consumes space as expected with ||', function() { + var expr = ol.expression.parse(' foo || bar '); + expect(expr).to.be.a(ol.expression.Logical); + expect(expr.evaluate({foo: true, bar: true})).to.be(true); + expect(expr.evaluate({foo: true, bar: false})).to.be(true); + expect(expr.evaluate({foo: false, bar: true})).to.be(true); + expect(expr.evaluate({foo: false, bar: false})).to.be(false); + }); + + it('throws for invalid spacing with ||', function() { + expect(function() { + ol.expression.parse('true | | false'); + }).throwException(); + }); + + }); + }); @@ -380,6 +433,7 @@ goog.require('ol.expression.Comparison'); goog.require('ol.expression.Expression'); goog.require('ol.expression.Identifier'); goog.require('ol.expression.Literal'); +goog.require('ol.expression.Logical'); goog.require('ol.expression.Math'); goog.require('ol.expression.Member'); goog.require('ol.expression.Not');