From 973606e67a664795e6fee417e0d84f03836fe6eb Mon Sep 17 00:00:00 2001 From: Tim Schaub Date: Tue, 11 Jun 2013 18:22:50 -0600 Subject: [PATCH] Integration tests for equality operators --- src/ol/expression/parser.js | 8 +- test/spec/ol/expression/expression.test.js | 92 ++++++++++++++++++++++ 2 files changed, 99 insertions(+), 1 deletion(-) diff --git a/src/ol/expression/parser.js b/src/ol/expression/parser.js index 056f6ddafd..ca0ae678d7 100644 --- a/src/ol/expression/parser.js +++ b/src/ol/expression/parser.js @@ -219,7 +219,13 @@ ol.expression.Parser.prototype.createUnaryExpression_ = function(op, expr) { */ ol.expression.Parser.prototype.parse = function(source) { var lexer = new ol.expression.Lexer(source); - return this.parseExpression_(lexer); + var expr = this.parseExpression_(lexer); + var token = lexer.peek(); + if (token.type !== ol.expression.TokenType.EOF) { + // TODO: token.index + throw new Error('Unexpected token: ' + token.value); + } + return expr; }; diff --git a/test/spec/ol/expression/expression.test.js b/test/spec/ol/expression/expression.test.js index b3c965a76b..704c7e0d3e 100644 --- a/test/spec/ol/expression/expression.test.js +++ b/test/spec/ol/expression/expression.test.js @@ -279,6 +279,98 @@ describe('ol.expression.parse', function() { }); + describe('equality operators', function() { + // http://www.ecma-international.org/ecma-262/5.1/#sec-11.9 + + it('parses == operator', function() { + var expr = ol.expression.parse('foo==42'); + expect(expr).to.be.a(ol.expression.Comparison); + expect(expr.evaluate({foo: 42})).to.be(true); + expect(expr.evaluate({foo: 41})).to.be(false); + expect(expr.evaluate({foo: '42'})).to.be(true); + }); + + it('consumes whitespace as expected with ==', function() { + var expr = ol.expression.parse(' 42 ==foo '); + expect(expr).to.be.a(ol.expression.Comparison); + expect(expr.evaluate({foo: 42})).to.be(true); + expect(expr.evaluate({foo: 41})).to.be(false); + expect(expr.evaluate({foo: '42'})).to.be(true); + }); + + it('throws for invalid spacing with ==', function() { + expect(function() { + ol.expression.parse(' 10 = =foo '); + }).throwException(); + }); + + it('parses != operator', function() { + var expr = ol.expression.parse('foo!=42'); + expect(expr).to.be.a(ol.expression.Comparison); + expect(expr.evaluate({foo: 42})).to.be(false); + expect(expr.evaluate({foo: 41})).to.be(true); + expect(expr.evaluate({foo: '42'})).to.be(false); + }); + + it('consumes whitespace as expected with !=', function() { + var expr = ol.expression.parse(' 42 !=foo '); + expect(expr).to.be.a(ol.expression.Comparison); + expect(expr.evaluate({foo: 42})).to.be(false); + expect(expr.evaluate({foo: 41})).to.be(true); + expect(expr.evaluate({foo: '42'})).to.be(false); + }); + + it('throws for invalid spacing with !=', function() { + expect(function() { + ol.expression.parse(' 10! =foo '); + }).throwException(); + }); + + it('parses === operator', function() { + var expr = ol.expression.parse('42===foo'); + expect(expr).to.be.a(ol.expression.Comparison); + expect(expr.evaluate({foo: 42})).to.be(true); + expect(expr.evaluate({foo: 41})).to.be(false); + expect(expr.evaluate({foo: '42'})).to.be(false); + }); + + it('consumes whitespace as expected with ===', function() { + var expr = ol.expression.parse(' foo ===42 '); + expect(expr).to.be.a(ol.expression.Comparison); + expect(expr.evaluate({foo: 42})).to.be(true); + expect(expr.evaluate({foo: 41})).to.be(false); + expect(expr.evaluate({foo: '42'})).to.be(false); + }); + + it('throws for invalid spacing with ===', function() { + expect(function() { + ol.expression.parse(' 10 = == foo '); + }).throwException(); + }); + + it('parses !== operator', function() { + var expr = ol.expression.parse('foo!==42'); + expect(expr).to.be.a(ol.expression.Comparison); + expect(expr.evaluate({foo: 42})).to.be(false); + expect(expr.evaluate({foo: 41})).to.be(true); + expect(expr.evaluate({foo: '42'})).to.be(true); + }); + + it('consumes whitespace as expected with !==', function() { + var expr = ol.expression.parse(' 42 !== foo '); + expect(expr).to.be.a(ol.expression.Comparison); + expect(expr.evaluate({foo: 42})).to.be(false); + expect(expr.evaluate({foo: 41})).to.be(true); + expect(expr.evaluate({foo: '42'})).to.be(true); + }); + + it('throws for invalid spacing with !==', function() { + expect(function() { + ol.expression.parse(' 10 != = foo '); + }).throwException(); + }); + }); + });