Correct index for tokens

This commit is contained in:
Tim Schaub
2013-06-12 17:00:43 -06:00
parent f0567f5053
commit 72d32ec71a
2 changed files with 65 additions and 4 deletions

View File

@@ -97,6 +97,7 @@ describe('ol.expression.Lexer', function() {
var lexer = new ol.expression.Lexer(source);
var token = lexer.scanIdentifier_(lexer.getCurrentCharCode_());
if (!part) {
expect(token.index).to.be(0);
expect(lexer.peek().type).to.be(ol.expression.TokenType.EOF);
}
return token;
@@ -187,6 +188,7 @@ describe('ol.expression.Lexer', function() {
function scan(source) {
var lexer = new ol.expression.Lexer(source);
var token = lexer.scanNumericLiteral_(lexer.getCurrentCharCode_());
expect(token.index).to.be(0);
expect(lexer.peek().type).to.be(ol.expression.TokenType.EOF);
return token;
}
@@ -197,12 +199,34 @@ describe('ol.expression.Lexer', function() {
expect(token.type).to.be(ol.expression.TokenType.NUMERIC_LITERAL);
});
it('throws for bogus integer', function() {
expect(function() {
scan('123z');
}).throwException(function(err) {
expect(err).to.be.an(ol.expression.UnexpectedToken);
var token = err.token;
expect(token.value).to.be('z');
expect(token.index).to.be(3);
});
});
it('works for float', function() {
var token = scan('123.456');
expect(token.value).to.be(123.456);
expect(token.type).to.be(ol.expression.TokenType.NUMERIC_LITERAL);
});
it('throws for bogus float', function() {
expect(function() {
scan('123.4x4');
}).throwException(function(err) {
expect(err).to.be.an(ol.expression.UnexpectedToken);
var token = err.token;
expect(token.value).to.be('x');
expect(token.index).to.be(5);
});
});
it('works with exponent', function() {
var token = scan('1.234e5');
expect(token.value).to.be(1.234e5);
@@ -221,18 +245,53 @@ describe('ol.expression.Lexer', function() {
expect(token.type).to.be(ol.expression.TokenType.NUMERIC_LITERAL);
});
it('throws for bogus float', function() {
expect(function() {
scan('1.234eo4');
}).throwException(function(err) {
expect(err).to.be.an(ol.expression.UnexpectedToken);
var token = err.token;
expect(token.value).to.be('o');
expect(token.index).to.be(6);
});
});
it('works with octals', function() {
var token = scan('02322');
expect(token.value).to.be(1234);
expect(token.type).to.be(ol.expression.TokenType.NUMERIC_LITERAL);
});
it('throws for bogus octal', function() {
// note that this is more strict than most es5 engines
expect(function() {
scan('02392');
}).throwException(function(err) {
expect(err).to.be.an(ol.expression.UnexpectedToken);
var token = err.token;
expect(token.value).to.be('9');
expect(token.index).to.be(3);
});
});
it('works with hex', function() {
var token = scan('0x4d2');
expect(token.value).to.be(1234);
expect(token.type).to.be(ol.expression.TokenType.NUMERIC_LITERAL);
});
it('throws for bogus hex', function() {
// note that this is more strict than most es5 engines
expect(function() {
scan('0x4G');
}).throwException(function(err) {
expect(err).to.be.an(ol.expression.UnexpectedToken);
var token = err.token;
expect(token.value).to.be('G');
expect(token.index).to.be(3);
});
});
});
describe('#scanPunctuator_()', function() {
@@ -240,6 +299,7 @@ describe('ol.expression.Lexer', function() {
function scan(source) {
var lexer = new ol.expression.Lexer(source);
var token = lexer.scanPunctuator_(lexer.getCurrentCharCode_());
expect(token.index).to.be(0);
expect(lexer.peek().type).to.be(ol.expression.TokenType.EOF);
return token;
}
@@ -329,6 +389,7 @@ describe('ol.expression.Lexer', function() {
function scan(source) {
var lexer = new ol.expression.Lexer(source);
var token = lexer.scanStringLiteral_(lexer.getCurrentCharCode_());
expect(token.index).to.be(0);
expect(lexer.peek().type).to.be(ol.expression.TokenType.EOF);
return token;
}