Reduce to a single literal

This commit is contained in:
Tim Schaub
2013-06-10 10:05:10 -06:00
parent 20b66fc447
commit 052b973b39
3 changed files with 117 additions and 171 deletions

View File

@@ -1,19 +1,6 @@
goog.provide('ol.test.expression.Expression');
describe('ol.expression.BooleanLiteral', function() {
describe('constructor', function() {
it('creates a new expression', function() {
var expr = new ol.expression.BooleanLiteral(true);
expect(expr).to.be.a(ol.expression.Expression);
expect(expr).to.be.a(ol.expression.BooleanLiteral);
});
});
});
describe('ol.expression.Identifier', function() {
describe('constructor', function() {
@@ -24,62 +11,115 @@ describe('ol.expression.Identifier', function() {
});
});
describe('#evaluate()', function() {
it('returns a number from the scope', function() {
var expr = new ol.expression.Identifier('foo');
expect(expr.evaluate({foo: 42})).to.be(42);
});
it('returns a string from the scope', function() {
var expr = new ol.expression.Identifier('foo');
expect(expr.evaluate({foo: 'chicken'})).to.be('chicken');
});
it('returns a boolean from the scope', function() {
var expr = new ol.expression.Identifier('bar');
expect(expr.evaluate({bar: false})).to.be(false);
expect(expr.evaluate({bar: true})).to.be(true);
});
it('returns a null from the scope', function() {
var expr = new ol.expression.Identifier('nada');
expect(expr.evaluate({nada: null})).to.be(null);
});
it('works for unicode identifiers', function() {
var expr = new ol.expression.Identifier('\u03c0');
expect(expr.evaluate({'\u03c0': Math.PI})).to.be(Math.PI);
});
});
});
describe('ol.expression.Literal', function() {
describe('constructor', function() {
it('creates a new expression', function() {
var expr = new ol.expression.Literal(true);
expect(expr).to.be.a(ol.expression.Expression);
expect(expr).to.be.a(ol.expression.Literal);
});
});
describe('#evaluate()', function() {
it('works for numeric literal', function() {
var expr = new ol.expression.Literal(42e-11);
expect(expr.evaluate({})).to.be(4.2e-10);
});
it('works for string literal', function() {
var expr = new ol.expression.Literal('asdf');
expect(expr.evaluate({})).to.be('asdf');
});
it('works for boolean literal', function() {
var expr = new ol.expression.Literal(true);
expect(expr.evaluate({})).to.be(true);
});
it('works for null literal', function() {
var expr = new ol.expression.Literal(null);
expect(expr.evaluate({})).to.be(null);
});
});
});
describe('ol.expression.Not', function() {
describe('constructor', function() {
it('creates a new expression', function() {
var expr = new ol.expression.Not(
new ol.expression.BooleanLiteral(true));
new ol.expression.Literal(true));
expect(expr).to.be.a(ol.expression.Expression);
expect(expr).to.be.a(ol.expression.Not);
});
});
});
describe('#evaluate()', function() {
it('returns the logical complement', function() {
var expr = new ol.expression.Not(new ol.expression.Literal(true));
expect(expr.evaluate({})).to.be(false);
describe('ol.expression.NullLiteral', function() {
describe('constructor', function() {
it('creates a new expression', function() {
var expr = new ol.expression.NullLiteral();
expect(expr).to.be.a(ol.expression.Expression);
expect(expr).to.be.a(ol.expression.NullLiteral);
expr = new ol.expression.Not(new ol.expression.Literal(false));
expect(expr.evaluate({})).to.be(true);
});
});
});
describe('ol.expression.NumericLiteral', function() {
describe('constructor', function() {
it('creates a new expression', function() {
var expr = new ol.expression.NumericLiteral(42);
expect(expr).to.be.a(ol.expression.Expression);
expect(expr).to.be.a(ol.expression.NumericLiteral);
it('negates a truthy string', function() {
var expr = new ol.expression.Not(new ol.expression.Literal('asdf'));
expect(expr.evaluate({})).to.be(false);
});
});
});
it('negates a falsy string', function() {
var expr = new ol.expression.Not(new ol.expression.Literal(''));
expect(expr.evaluate({})).to.be(true);
});
describe('ol.expression.StringLiteral', function() {
it('negates a truthy number', function() {
var expr = new ol.expression.Not(new ol.expression.Literal(42));
expect(expr.evaluate({})).to.be(false);
});
describe('constructor', function() {
it('creates a new expression', function() {
var expr = new ol.expression.StringLiteral('bar');
expect(expr).to.be.a(ol.expression.Expression);
expect(expr).to.be.a(ol.expression.StringLiteral);
it('negates a falsy number', function() {
var expr = new ol.expression.Not(new ol.expression.Literal(NaN));
expect(expr.evaluate({})).to.be(true);
});
});
});
goog.require('ol.expression.BooleanLiteral');
goog.require('ol.expression.Expression');
goog.require('ol.expression.Identifier');
goog.require('ol.expression.Literal');
goog.require('ol.expression.Not');
goog.require('ol.expression.NullLiteral');
goog.require('ol.expression.NumericLiteral');
goog.require('ol.expression.StringLiteral');