From 7a1e69e2886034dc36a94841d3428ae6efee4e40 Mon Sep 17 00:00:00 2001 From: Tim Schaub Date: Mon, 10 Jun 2013 17:33:51 -0600 Subject: [PATCH] Initial parsing tests --- src/ol/expression/parser.js | 15 +++++++++-- test/spec/ol/expression/parser.test.js | 35 ++++++++++++++++++++++++++ 2 files changed, 48 insertions(+), 2 deletions(-) create mode 100644 test/spec/ol/expression/parser.test.js diff --git a/src/ol/expression/parser.js b/src/ol/expression/parser.js index 02b58bed5a..b9ebcea859 100644 --- a/src/ol/expression/parser.js +++ b/src/ol/expression/parser.js @@ -433,8 +433,7 @@ ol.expression.Parser.prototype.parseUnaryExpression_ = function(lexer) { expr = this.parseUnaryExpression_(lexer); expr = this.createUnaryExpression_('!', expr); } else { - // TODO: add token.index - throw new Error('Unexpected token: ' + operator.value); + expr = this.parseLeftHandSideExpression_(lexer); } return expr; }; @@ -450,3 +449,15 @@ ol.expression.Parser.prototype.parseUnaryExpression_ = function(lexer) { ol.expression.Parser.prototype.parseExpression_ = function(lexer) { return this.parseBinaryExpression_(lexer); }; + + +/** + * Parse an expression + * @param {string} source The expression source (e.g. `'foo + 2'`). + * @return {ol.expression.Expression} An expression instance that can be + * evaluated within some scope to provide a value. + */ +ol.expression.parse = function(source) { + var parser = new ol.expression.Parser(); + return parser.parse(source); +}; diff --git a/test/spec/ol/expression/parser.test.js b/test/spec/ol/expression/parser.test.js new file mode 100644 index 0000000000..d423d1b75c --- /dev/null +++ b/test/spec/ol/expression/parser.test.js @@ -0,0 +1,35 @@ +goog.provide('ol.test.expression'); + +describe('ol.expression.Parser', function() { + + describe('constructor', function() { + it('creates a new expression parser', function() { + var parser = new ol.expression.Parser(); + expect(parser).to.be.a(ol.expression.Parser); + }); + }); + + describe('#parseGroupExpression_()', function() { + + function parse(source) { + var lexer = new ol.expression.Lexer(source); + var parser = new ol.expression.Parser(); + return parser.parseGroupExpression_(lexer); + } + + it('parses grouped expressions', function() { + var expr = parse('(3 * (foo + 2))'); + expect(expr).to.be.a(ol.expression.Expression); + expect(expr).to.be.a(ol.expression.Math); + expect(expr.evaluate({foo: 3})).to.be(15); + }); + + }); + +}); + + +goog.require('ol.expression.Expression'); +goog.require('ol.expression.Lexer'); +goog.require('ol.expression.Math'); +goog.require('ol.expression.Parser');