diff --git a/src/ol/expression/parser.js b/src/ol/expression/parser.js index e9f0397331..056f6ddafd 100644 --- a/src/ol/expression/parser.js +++ b/src/ol/expression/parser.js @@ -424,7 +424,7 @@ ol.expression.Parser.prototype.parsePrimaryExpression_ = function(lexer) { /** - * Parse expression with a unary operator. + * Parse expression with a unary operator. Limited to logical not operator. * http://www.ecma-international.org/ecma-262/5.1/#sec-11.4 * * @param {ol.expression.Lexer} lexer Lexer. diff --git a/test/spec/ol/expression/parser.test.js b/test/spec/ol/expression/parser.test.js index 708e6d0018..d832dd60e6 100644 --- a/test/spec/ol/expression/parser.test.js +++ b/test/spec/ol/expression/parser.test.js @@ -222,6 +222,42 @@ describe('ol.expression.Parser', function() { }); + describe('#parseUnaryExpression_()', function() { + + function parse(source) { + var lexer = new ol.expression.Lexer(source); + var parser = new ol.expression.Parser(); + var expr = parser.parseUnaryExpression_(lexer); + expect(lexer.peek().type).to.be(ol.expression.TokenType.EOF); + return expr; + } + + it('parses logical not', function() { + var expr = parse('!foo'); + expect(expr).to.be.a(ol.expression.Not); + expect(expr.evaluate({foo: true})).to.be(false); + }); + + it('works with string literal', function() { + var expr = parse('!"foo"'); + expect(expr).to.be.a(ol.expression.Not); + expect(expr.evaluate()).to.be(false); + }); + + it('works with empty string', function() { + var expr = parse('!""'); + expect(expr).to.be.a(ol.expression.Not); + expect(expr.evaluate()).to.be(true); + }); + + it('works with null', function() { + var expr = parse('!null'); + expect(expr).to.be.a(ol.expression.Not); + expect(expr.evaluate()).to.be(true); + }); + + }); + }); @@ -234,5 +270,6 @@ 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'); goog.require('ol.expression.Parser'); goog.require('ol.expression.TokenType');