[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
This commit is contained in:
Xavier Morel 2012-04-05 11:50:09 +02:00
parent 239a118913
commit a029cf244f
2 changed files with 53 additions and 8 deletions

View File

@ -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;
},

View File

@ -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",