Cast boolean and null before creating literal expression
This commit is contained in:
@@ -404,10 +404,14 @@ ol.expression.Parser.prototype.parsePrimaryExpression_ = function(lexer) {
|
|||||||
if (type === ol.expression.TokenType.IDENTIFIER) {
|
if (type === ol.expression.TokenType.IDENTIFIER) {
|
||||||
expr = this.createIdentifier_(/** @type {string} */ (token.value));
|
expr = this.createIdentifier_(/** @type {string} */ (token.value));
|
||||||
} else if (type === ol.expression.TokenType.STRING_LITERAL ||
|
} else if (type === ol.expression.TokenType.STRING_LITERAL ||
|
||||||
type === ol.expression.TokenType.NUMERIC_LITERAL ||
|
type === ol.expression.TokenType.NUMERIC_LITERAL) {
|
||||||
type === ol.expression.TokenType.BOOLEAN_LITERAL ||
|
// numeric and string literals are already the correct type
|
||||||
type === ol.expression.TokenType.NULL_LITERAL) {
|
|
||||||
expr = this.createLiteral_(token.value);
|
expr = this.createLiteral_(token.value);
|
||||||
|
} else if (type === ol.expression.TokenType.BOOLEAN_LITERAL) {
|
||||||
|
// because booleans are valid member properties, tokens are still string
|
||||||
|
expr = this.createLiteral_(token.value === 'true');
|
||||||
|
} else if (type === ol.expression.TokenType.NULL_LITERAL) {
|
||||||
|
expr = this.createLiteral_(null);
|
||||||
} else {
|
} else {
|
||||||
throw new Error('Unexpected token: ' + token.value);
|
throw new Error('Unexpected token: ' + token.value);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
goog.provide('ol.test.expression');
|
goog.provide('ol.test.expression.Parser');
|
||||||
|
|
||||||
describe('ol.expression.Parser', function() {
|
describe('ol.expression.Parser', function() {
|
||||||
|
|
||||||
@@ -19,13 +19,47 @@ describe('ol.expression.Parser', function() {
|
|||||||
|
|
||||||
it('parses grouped expressions', function() {
|
it('parses grouped expressions', function() {
|
||||||
var expr = parse('(3 * (foo + 2))');
|
var expr = parse('(3 * (foo + 2))');
|
||||||
expect(expr).to.be.a(ol.expression.Expression);
|
|
||||||
expect(expr).to.be.a(ol.expression.Math);
|
expect(expr).to.be.a(ol.expression.Math);
|
||||||
expect(expr.evaluate({foo: 3})).to.be(15);
|
expect(expr.evaluate({foo: 3})).to.be(15);
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('#parsePrimaryExpression_()', function() {
|
||||||
|
|
||||||
|
function parse(source) {
|
||||||
|
var lexer = new ol.expression.Lexer(source);
|
||||||
|
var parser = new ol.expression.Parser();
|
||||||
|
return parser.parsePrimaryExpression_(lexer);
|
||||||
|
}
|
||||||
|
|
||||||
|
it('parses string literal', function() {
|
||||||
|
var expr = parse('"foo"');
|
||||||
|
expect(expr).to.be.a(ol.expression.Literal);
|
||||||
|
expect(expr.evaluate({})).to.be('foo');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('parses numeric literal', function() {
|
||||||
|
var expr = parse('.42e2');
|
||||||
|
expect(expr).to.be.a(ol.expression.Literal);
|
||||||
|
expect(expr.evaluate({})).to.be(42);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('parses boolean literal', function() {
|
||||||
|
var expr = parse('.42e2');
|
||||||
|
expect(expr).to.be.a(ol.expression.Literal);
|
||||||
|
expect(expr.evaluate({})).to.be(42);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('parses null literal', function() {
|
||||||
|
var expr = parse('null');
|
||||||
|
expect(expr).to.be.a(ol.expression.Literal);
|
||||||
|
expect(expr.evaluate({})).to.be(null);
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user