[MERGE] from trunk
[odoo/odoo.git] / addons / web / static / test / evals.js
index 6eec615..bef8edb 100644 (file)
@@ -1,11 +1,45 @@
+openerp.testing.section('eval.types', {
+    dependencies: ['web.coresetup']
+}, function (test) {
+    test('strftime', function (instance) {
+        var d = new Date();
+        var context = instance.web.pyeval.context();
+        strictEqual(
+            py.eval("time.strftime('%Y')", context),
+            String(d.getFullYear()));
+        strictEqual(
+            py.eval("time.strftime('%Y')+'-01-30'", context),
+            String(d.getFullYear()) + '-01-30');
+        strictEqual(
+            py.eval("time.strftime('%Y-%m-%d %H:%M:%S')", context),
+            _.str.sprintf('%04d-%02d-%02d %02d:%02d:%02d',
+                d.getFullYear(), d.getMonth() + 1, d.getDate(),
+                d.getHours(), d.getMinutes(), d.getSeconds()));
+    });
+});
 openerp.testing.section('eval.contexts', {
     dependencies: ['web.coresetup']
 }, function (test) {
+    test('context_recursive', function (instance) {
+        var context_to_eval = [{
+            __ref: 'context',
+            __debug: '{"foo": context.get("bar", "qux")}'
+        }];
+        deepEqual(
+            instance.web.pyeval.eval('contexts', context_to_eval, {bar: "ok"}),
+            {foo: 'ok'});
+        deepEqual(
+            instance.web.pyeval.eval('contexts', context_to_eval, {bar: false}),
+            {foo: false});
+        deepEqual(
+            instance.web.pyeval.eval('contexts', context_to_eval),
+            {foo: 'qux'});
+    });
     test('context_sequences', function (instance) {
         // Context n should have base evaluation context + all of contexts
         // 0..n-1 in its own evaluation context
         var active_id = 4;
-        var result = instance.session.test_eval_contexts([
+        var result = instance.web.pyeval.eval('contexts', [
             {
                 "__contexts": [
                     {
@@ -49,7 +83,7 @@ openerp.testing.section('eval.contexts', {
         });
     });
     test('non-literal_eval_contexts', function (instance) {
-        var result = instance.session.test_eval_contexts([{
+        var result = instance.web.pyeval.eval('contexts', [{
             "__ref": "compound_context",
             "__contexts": [
                 {"__ref": "context", "__debug": "{'type':parent.type}",
@@ -132,12 +166,96 @@ openerp.testing.section('eval.contexts', {
 }, function (test) {
     test('current_date', function (instance) {
         var current_date = instance.web.date_to_str(new Date());
-        var result = instance.session.test_eval_domains(
+        var result = instance.web.pyeval.eval('domains',
             [[],{"__ref":"domain","__debug":"[('name','>=',current_date),('name','<=',current_date)]","__id":"5dedcfc96648"}],
-            instance.session.test_eval_get_context());
+            instance.web.pyeval.context());
         deepEqual(result, [
             ['name', '>=', current_date],
             ['name', '<=', current_date]
         ]);
-    })
+    });
+    test('context_freevar', function (instance) {
+        var domains_to_eval = [{
+            __ref: 'domain',
+            __debug: '[("foo", "=", context.get("bar", "qux"))]'
+        }, [['bar', '>=', 42]]];
+        deepEqual(
+            instance.web.pyeval.eval('domains', domains_to_eval, {bar: "ok"}),
+            [['foo', '=', 'ok'], ['bar', '>=', 42]]);
+        deepEqual(
+            instance.web.pyeval.eval('domains', domains_to_eval, {bar: false}),
+            [['foo', '=', false], ['bar', '>=', 42]]);
+        deepEqual(
+            instance.web.pyeval.eval('domains', domains_to_eval),
+            [['foo', '=', 'qux'], ['bar', '>=', 42]]);
+    });
+});
+openerp.testing.section('eval.groupbys', {
+    dependencies: ['web.coresetup']
+}, function (test) {
+    test('groupbys_00', function (instance) {
+        var result = instance.web.pyeval.eval('groupbys', [
+            {group_by: 'foo'},
+            {group_by: ['bar', 'qux']},
+            {group_by: null},
+            {group_by: 'grault'}
+        ]);
+        deepEqual(result, ['foo', 'bar', 'qux', 'grault']);
+    });
+    test('groupbys_01', function (instance) {
+        var result = instance.web.pyeval.eval('groupbys', [
+            {group_by: 'foo'},
+            { __ref: 'context', __debug: '{"group_by": "bar"}' },
+            {group_by: 'grault'}
+        ]);
+        deepEqual(result, ['foo', 'bar', 'grault']);
+    });
+    test('groupbys_02', function (instance) {
+        var result = instance.web.pyeval.eval('groupbys', [
+            {group_by: 'foo'},
+            {
+                __ref: 'compound_context',
+                __contexts: [ {group_by: 'bar'} ],
+                __eval_context: null
+            },
+            {group_by: 'grault'}
+        ]);
+        deepEqual(result, ['foo', 'bar', 'grault']);
+    });
+    test('groupbys_03', function (instance) {
+        var result = instance.web.pyeval.eval('groupbys', [
+            {group_by: 'foo'},
+            {
+                __ref: 'compound_context',
+                __contexts: [
+                    { __ref: 'context', __debug: '{"group_by": value}' }
+                ],
+                __eval_context: { value: 'bar' }
+            },
+            {group_by: 'grault'}
+        ]);
+        deepEqual(result, ['foo', 'bar', 'grault']);
+    });
+    test('groupbys_04', function (instance) {
+        var result = instance.web.pyeval.eval('groupbys', [
+            {group_by: 'foo'},
+            {
+                __ref: 'compound_context',
+                __contexts: [
+                    { __ref: 'context', __debug: '{"group_by": value}' }
+                ],
+                __eval_context: { value: 'bar' }
+            },
+            {group_by: 'grault'}
+        ], { value: 'bar' });
+        deepEqual(result, ['foo', 'bar', 'grault']);
+    });
+    test('groupbys_05', function (instance) {
+        var result = instance.web.pyeval.eval('groupbys', [
+            {group_by: 'foo'},
+            { __ref: 'context', __debug: '{"group_by": value}' },
+            {group_by: 'grault'}
+        ], { value: 'bar' });
+        deepEqual(result, ['foo', 'bar', 'grault']);
+    });
 });