[FIX] problem in editable list o2m when hitting the enter button rapidly

bzr revid: nicolas.vanhoren@openerp.com-20121116151248-il59eiekk758suco
This commit is contained in:
niv-openerp 2012-11-16 16:12:48 +01:00
parent 8ccbab8254
commit 40c4ed7f54
3 changed files with 66 additions and 1 deletions

View File

@ -81,7 +81,8 @@ This module provides the core of the OpenERP Web Client.
"static/test/search.js",
"static/test/Widget.js",
"static/test/list.js",
"static/test/list-editable.js"
"static/test/list-editable.js",
"static/test/mutex.js"
],
'bootstrap': True,
'twitter': False,

View File

@ -622,6 +622,8 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM
return self._process_save(save_obj).then(function() {
save_obj.ret = _.toArray(arguments);
return iterate();
}, function() {
save_obj.error = true;
});
}
return $.when();
@ -805,6 +807,8 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM
var save_obj = {prepend_on_create: prepend_on_create, ret: null};
this.save_list.push(save_obj);
return this._process_operations().then(function() {
if (save_obj.error)
return $.Deferred().reject();
return $.when.apply($, save_obj.ret);
});
},

View File

@ -0,0 +1,60 @@
openerp.testing.section('mutex', {
dependencies: ['web.coresetup'],
setup: function (instance) {
}
}, function (test) {
test('simpleScheduling', function (instance) {
var m = new $.Mutex();
var def1 = $.Deferred();
var def2 = $.Deferred();
var p1 = m.exec(function() { return def1; });
var p2 = m.exec(function() { return def2; });
equal(p1.state(), "pending");
equal(p2.state(), "pending");
def1.resolve();
equal(p1.state(), "resolved");
equal(p2.state(), "pending");
def2.resolve();
equal(p1.state(), "resolved");
equal(p2.state(), "resolved");
});
test('simpleScheduling2', function (instance) {
var m = new $.Mutex();
var def1 = $.Deferred();
var def2 = $.Deferred();
var p1 = m.exec(function() { return def1; });
var p2 = m.exec(function() { return def2; });
equal(p1.state(), "pending");
equal(p2.state(), "pending");
def2.resolve();
equal(p1.state(), "pending");
equal(p2.state(), "pending");
def1.resolve();
equal(p1.state(), "resolved");
equal(p2.state(), "resolved");
});
test('reject', function (instance) {
var m = new $.Mutex();
var def1 = $.Deferred();
var def2 = $.Deferred();
var def3 = $.Deferred();
var p1 = m.exec(function() {return def1;});
var p2 = m.exec(function() {return def2;});
var p3 = m.exec(function() {return def3;});
equal(p1.state(), "pending");
equal(p2.state(), "pending");
equal(p3.state(), "pending");
def1.resolve();
equal(p1.state(), "resolved");
equal(p2.state(), "pending");
equal(p3.state(), "pending");
def2.reject();
equal(p1.state(), "resolved");
equal(p2.state(), "rejected");
equal(p3.state(), "pending");
def3.resolve();
equal(p1.state(), "resolved");
equal(p2.state(), "rejected");
equal(p3.state(), "resolved");
});
});