diff options
Diffstat (limited to 'addons/web/static/lib/py.parse/test/test.js')
| -rw-r--r-- | addons/web/static/lib/py.parse/test/test.js | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/addons/web/static/lib/py.parse/test/test.js b/addons/web/static/lib/py.parse/test/test.js new file mode 100644 index 00000000000..0b4ddc1b623 --- /dev/null +++ b/addons/web/static/lib/py.parse/test/test.js @@ -0,0 +1,90 @@ +var py = require('../lib/py.js'), + assert = require('assert'); + +// Literals +assert.strictEqual(py.eval('1'), 1); +assert.strictEqual(py.eval('None'), null); +assert.strictEqual(py.eval('False'), false); +assert.strictEqual(py.eval('True'), true); +assert.strictEqual(py.eval('"somestring"'), 'somestring'); +assert.strictEqual(py.eval("'somestring'"), 'somestring'); +assert.deepEqual(py.eval("()").toJSON(), []); +assert.deepEqual(py.eval("[]").toJSON(), []); +assert.deepEqual(py.eval("{}").toJSON(), {}); +assert.deepEqual(py.eval("(None, True, False, 0, 1, 'foo')").toJSON(), + [null, true, false, 0, 1, 'foo']); +assert.deepEqual(py.eval("[None, True, False, 0, 1, 'foo']").toJSON(), + [null, true, false, 0, 1, 'foo']); +assert.deepEqual(py.eval("{'foo': 1, foo: 2}", {foo: 'bar'}).toJSON(), + {foo: 1, bar: 2}); + +// Equality tests +assert.ok(py.eval( + "foo == 'foo'", {foo: 'foo'})); +// Inequality +assert.ok(py.eval( + "foo != bar", {foo: 'foo', bar: 'bar'})); + +// Comparisons +assert.ok(py.eval('3 < 5')); +assert.ok(py.eval('5 >= 3')); +assert.ok(py.eval('3 >= 3')); +assert.ok(!py.eval('5 < 3')); +assert.ok(py.eval('1 < 3 < 5')); +assert.ok(py.eval('5 > 3 > 1')); +assert.ok(py.eval('1 < 3 > 2 == 2 > -2 not in (0, 1, 2)')); +// string rich comparisons +assert.ok(py.eval( + 'date >= current', {date: '2010-06-08', current: '2010-06-05'})); + +// Boolean operators +assert.ok(py.eval( + "foo == 'foo' or foo == 'bar'", {foo: 'bar'})); +assert.ok(py.eval( + "foo == 'foo' and bar == 'bar'", {foo: 'foo', bar: 'bar'})); +// - lazyness, second clauses NameError if not short-circuited +assert.ok(py.eval( + "foo == 'foo' or bar == 'bar'", {foo: 'foo'})); +assert.ok(!py.eval( + "foo == 'foo' and bar == 'bar'", {foo: 'bar'})); + +// contains (in) +assert.ok(py.eval( + "foo in ('foo', 'bar')", {foo: 'bar'})); +assert.ok(py.eval('1 in (1, 2, 3, 4)')); +assert.ok(!py.eval('1 in (2, 3, 4)')); +assert.ok(py.eval('type in ("url",)', {type: 'url'})); +assert.ok(!py.eval('type in ("url",)', {type: 'ur'})); +assert.ok(py.eval('1 not in (2, 3, 4)')); +assert.ok(py.eval('type not in ("url",)', {type: 'ur'})); + +assert.ok(py.eval( + "foo in ['foo', 'bar']", {foo: 'bar'})); +// string contains +assert.ok(py.eval('type in "view"', {type: 'view'})); +assert.ok(!py.eval('type in "view"', {type: 'bob'})); +assert.ok(py.eval('type in "url"', {type: 'ur'})); + +// Literals +assert.strictEqual(py.eval('False'), false); +assert.strictEqual(py.eval('True'), true); +assert.strictEqual(py.eval('None'), null); +assert.ok(py.eval('foo == False', {foo: false})); +assert.ok(!py.eval('foo == False', {foo: true})); + +// conversions +assert.strictEqual( + py.eval('bool(date_deadline)', {bool: py.bool, date_deadline: '2008'}), + true); + +// getattr +assert.ok(py.eval('foo.bar', {foo: {bar: true}})); +assert.ok(!py.eval('foo.bar', {foo: {bar: false}})); + +// complex expressions +assert.ok(py.eval( + "state=='pending' and not(date_deadline and (date_deadline < current_date))", + {state: 'pending', date_deadline: false})); +assert.ok(py.eval( + "state=='pending' and not(date_deadline and (date_deadline < current_date))", + {state: 'pending', date_deadline: '2010-05-08', current_date: '2010-05-08'}));; |
