[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:
parent
8ccbab8254
commit
40c4ed7f54
|
@ -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,
|
||||
|
|
|
@ -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);
|
||||
});
|
||||
},
|
||||
|
|
|
@ -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");
|
||||
});
|
||||
});
|
Loading…
Reference in New Issue