[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/search.js",
|
||||||
"static/test/Widget.js",
|
"static/test/Widget.js",
|
||||||
"static/test/list.js",
|
"static/test/list.js",
|
||||||
"static/test/list-editable.js"
|
"static/test/list-editable.js",
|
||||||
|
"static/test/mutex.js"
|
||||||
],
|
],
|
||||||
'bootstrap': True,
|
'bootstrap': True,
|
||||||
'twitter': False,
|
'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() {
|
return self._process_save(save_obj).then(function() {
|
||||||
save_obj.ret = _.toArray(arguments);
|
save_obj.ret = _.toArray(arguments);
|
||||||
return iterate();
|
return iterate();
|
||||||
|
}, function() {
|
||||||
|
save_obj.error = true;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
return $.when();
|
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};
|
var save_obj = {prepend_on_create: prepend_on_create, ret: null};
|
||||||
this.save_list.push(save_obj);
|
this.save_list.push(save_obj);
|
||||||
return this._process_operations().then(function() {
|
return this._process_operations().then(function() {
|
||||||
|
if (save_obj.error)
|
||||||
|
return $.Deferred().reject();
|
||||||
return $.when.apply($, save_obj.ret);
|
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