From a029cf244f9433c39b4e5d2729d9d5113eba02ba Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Thu, 5 Apr 2012 11:50:09 +0200 Subject: [PATCH] [FIX] in a compound context, context n+1 has all of its preceding siblings in its evaluation context bzr revid: xmo@openerp.com-20120405095009-v2i1xg8gf6lvigjv --- addons/web/static/src/js/core.js | 14 ++++------ addons/web/static/test/evals.js | 47 ++++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+), 8 deletions(-) diff --git a/addons/web/static/src/js/core.js b/addons/web/static/src/js/core.js index abbcc780ee2..18b04f3b734 100644 --- a/addons/web/static/src/js/core.js +++ b/addons/web/static/src/js/core.js @@ -625,24 +625,22 @@ openerp.web.Connection = openerp.web.CallbackEnabled.extend( /** @lends openerp. var result_context = _.extend({}, this.user_context), self = this; _(contexts).each(function (ctx) { + var evaluated = ctx; // __eval_context evaluations can lead to some of `contexts`'s // values being null, skip them as well as empty contexts if (_.isEmpty(ctx)) { return; } switch(ctx.__ref) { case 'context': - _.extend(result_context, py.eval( - ctx.__debug, evaluation_context)); + evaluated = py.eval(ctx.__debug, evaluation_context); break; case 'compound_context': var eval_context = self.test_eval_contexts([ctx.__eval_context]); - _.extend( - result_context, self.test_eval_contexts( - ctx.__contexts, _.extend( - {}, evaluation_context, eval_context))); + evaluated = self.test_eval_contexts( + ctx.__contexts, _.extend({}, evaluation_context, eval_context)); break; - default: - _.extend(result_context, ctx); } + _.extend(evaluation_context, evaluated); + _.extend(result_context, evaluated); }); return result_context; }, diff --git a/addons/web/static/test/evals.js b/addons/web/static/test/evals.js index 688a07dd455..9c1dcaf638f 100644 --- a/addons/web/static/test/evals.js +++ b/addons/web/static/test/evals.js @@ -7,6 +7,53 @@ $(document).ready(function () { window.openerp.web.core(openerp); } }); + test('context_sequences', function () { + // Context n should have base evaluation context + all of contexts + // 0..n-1 in its own evaluation context + var active_id = 4; + var result = openerp.connection.test_eval_contexts([ + { + "__contexts": [ + { + "department_id": false, + "lang": "en_US", + "project_id": false, + "section_id": false, + "tz": false, + "uid": 1 + }, + { "search_default_create_uid": 1 }, + {} + ], + "__eval_context": null, + "__ref": "compound_context" + }, + { + "active_id": active_id, + "active_ids": [ active_id ], + "active_model": "purchase.requisition" + }, + { + "__debug": "{'record_id' : active_id}", + "__id": "63e8e9bff8a6", + "__ref": "context" + } + ]); + + deepEqual(result, { + department_id: false, + lang: 'en_US', + project_id: false, + section_id: false, + tz: false, + uid: 1, + search_default_create_uid: 1, + active_id: active_id, + active_ids: [active_id], + active_model: 'purchase.requisition', + record_id: active_id + }); + }); test('non-literal_eval_contexts', function () { var result = openerp.connection.test_eval_contexts([{ "__ref": "compound_context",