diff --git a/addons/web/static/test/class.js b/addons/web/static/test/class.js
index ed977635a5f..faad4421e31 100644
--- a/addons/web/static/test/class.js
+++ b/addons/web/static/test/class.js
@@ -2,8 +2,8 @@ $(document).ready(function () {
var openerp;
module('web-class', {
setup: function () {
- openerp = window.openerp.init();
- window.openerp.web.core(openerp);
+ openerp = window.openerp.init([]);
+ window.openerp.web.corelib(openerp);
}
});
test('Basic class creation', function () {
diff --git a/addons/web/static/test/corelib.js b/addons/web/static/test/corelib.js
deleted file mode 100644
index 45bfed69485..00000000000
--- a/addons/web/static/test/corelib.js
+++ /dev/null
@@ -1,143 +0,0 @@
-
-module("Class");
-
-test("base", function() {
- ok(!!nova.Class, "Class does exist");
- ok(!!nova.Class.extend, "extend does exist");
- var Claz = nova.Class.extend({
- test: function() {
- return "ok";
- }
- });
- equal(new Claz().test(), "ok");
- var Claz2 = Claz.extend({
- test: function() {
- return this._super() + "2";
- }
- });
- equal(new Claz2().test(), "ok2");
-});
-
-module("DestroyableMixin");
-
-test("base", function() {
- var Claz = nova.Class.extend(_.extend({}, nova.DestroyableMixin, {}));
- var x = new Claz();
- equal(!!x.isDestroyed(), false);
- x.destroy();
- equal(x.isDestroyed(), true);
-});
-
-module("ParentedMixin");
-
-test("base", function() {
- var Claz = nova.Class.extend(_.extend({}, nova.ParentedMixin, {}));
- var x = new Claz();
- var y = new Claz();
- y.setParent(x);
- equal(y.getParent(), x);
- equal(x.getChildren()[0], y);
- x.destroy();
- equal(y.isDestroyed(), true);
-});
-
-module("Events");
-
-test("base", function() {
- var x = new nova.internal.Events();
- var tmp = 0;
- var fct = function() {tmp = 1;};
- x.on("test", fct);
- equal(tmp, 0);
- x.trigger("test");
- equal(tmp, 1);
- tmp = 0;
- x.off("test", fct);
- x.trigger("test");
- equal(tmp, 0);
-});
-
-module("EventDispatcherMixin");
-
-test("base", function() {
- var Claz = nova.Class.extend(_.extend({}, nova.EventDispatcherMixin, {}));
- var x = new Claz();
- var y = new Claz();
- var tmp = 0;
- var fct = function() {tmp = 1;};
- x.on("test", y, fct);
- equal(tmp, 0);
- x.trigger("test");
- equal(tmp, 1);
- tmp = 0;
- x.off("test", y, fct);
- x.trigger("test");
- equal(tmp, 0);
- tmp = 0;
- x.on("test", y, fct);
- y.destroy();
- x.trigger("test");
- equal(tmp, 0);
-});
-
-module("GetterSetterMixin");
-
-test("base", function() {
- var Claz = nova.Class.extend(_.extend({}, nova.GetterSetterMixin, {}));
- var x = new Claz();
- var y = new Claz();
- x.set({test: 1});
- equal(x.get("test"), 1);
- var tmp = 0;
- x.on("change:test", y, function(model, options) {
- tmp = 1;
- equal(options.oldValue, 1);
- equal(options.newValue, 2);
- equal(x.get("test"), 2);
- equal(model, x);
- });
- x.set({test: 2});
- equal(tmp, 1);
-});
-
-test("change event only when changed", function() {
- var Claz = nova.Class.extend(_.extend({}, nova.GetterSetterMixin, {}));
- var x = new Claz();
- var exec1 = false;
- var exec2 = false;
- x.on("change:test", null, function() {exec1 = true;});
- x.on("change", null, function() {exec2 = true;});
- x.set({"test": 3});
- equal(exec1, true);
- equal(exec2, true);
- exec1 = false;
- exec2 = false;
- x.set({"test": 3});
- equal(exec1, false);
- equal(exec2, false);
-});
-
-module("Widget");
-
-test("base", function() {
- var Claz = nova.Widget.extend({
- renderElement: function() {
- this.$element.attr("id", "testdiv");
- this.$element.html("test");
- }
- });
- var x = new Claz();
- x.appendTo($("body"));
- var $el = $("#testdiv");
- equal($el.length, 1);
- equal($el.parents()[0], $("body")[0]);
- equal($el.html(), "test");
-
- var y = new Claz(x);
- equal(y.getParent(), x);
-
- x.destroy();
- $el = $("#testdiv");
- equal($el.length, 0);
-});
-
diff --git a/addons/web/static/test/evals.js b/addons/web/static/test/evals.js
index 9c1dcaf638f..290a009f46d 100644
--- a/addons/web/static/test/evals.js
+++ b/addons/web/static/test/evals.js
@@ -3,8 +3,9 @@ $(document).ready(function () {
module("eval.contexts", {
setup: function () {
- openerp = window.openerp.init();
- window.openerp.web.core(openerp);
+ openerp = window.openerp.init([]);
+ window.openerp.web.corelib(openerp);
+ window.openerp.web.coresetup(openerp);
}
});
test('context_sequences', function () {
diff --git a/addons/web/static/test/form.js b/addons/web/static/test/form.js
index 8317c7bfcd2..aace926a96a 100644
--- a/addons/web/static/test/form.js
+++ b/addons/web/static/test/form.js
@@ -2,8 +2,9 @@ $(document).ready(function () {
var openerp;
module("form.widget", {
setup: function () {
- openerp = window.openerp.init(true);
- window.openerp.web.core(openerp);
+ openerp = window.openerp.init([]);
+ window.openerp.web.corelib(openerp);
+ window.openerp.web.coresetup(openerp);
window.openerp.web.chrome(openerp);
// views loader stuff
window.openerp.web.data(openerp);
diff --git a/addons/web/static/test/formats.js b/addons/web/static/test/formats.js
index c0d6798628d..4fe07ff0a9c 100644
--- a/addons/web/static/test/formats.js
+++ b/addons/web/static/test/formats.js
@@ -3,8 +3,9 @@ $(document).ready(function () {
module('server-formats', {
setup: function () {
- openerp = window.openerp.init();
- window.openerp.web.core(openerp);
+ openerp = window.openerp.init([]);
+ window.openerp.web.corelib(openerp);
+ window.openerp.web.coresetup(openerp);
window.openerp.web.dates(openerp);
}
});
@@ -40,8 +41,9 @@ $(document).ready(function () {
module('web-formats', {
setup: function () {
- openerp = window.openerp.init();
- window.openerp.web.core(openerp);
+ openerp = window.openerp.init([]);
+ window.openerp.web.corelib(openerp);
+ window.openerp.web.coresetup(openerp);
window.openerp.web.dates(openerp);
window.openerp.web.formats(openerp);
}
@@ -206,8 +208,9 @@ $(document).ready(function () {
});
module('custom-date-formats', {
setup: function () {
- openerp = window.openerp.init();
- window.openerp.web.core(openerp);
+ openerp = window.openerp.init([]);
+ window.openerp.web.corelib(openerp);
+ window.openerp.web.coresetup(openerp);
window.openerp.web.dates(openerp);
window.openerp.web.formats(openerp);
}
diff --git a/addons/web/static/test/fulltest.html b/addons/web/static/test/fulltest.html
new file mode 100644
index 00000000000..a031325966a
--- /dev/null
+++ b/addons/web/static/test/fulltest.html
@@ -0,0 +1,50 @@
+
+
+
+
+
OpenERP
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/addons/web/static/test/fulltest/dataset.js b/addons/web/static/test/fulltest/dataset.js
new file mode 100644
index 00000000000..9f7ab101869
--- /dev/null
+++ b/addons/web/static/test/fulltest/dataset.js
@@ -0,0 +1,241 @@
+$(document).ready(function () {
+ var t = window.openerp.test_support;
+ function context_(c) {
+ return _.extend({ lang: 'en_US', tz: 'UTC', uid: 87539319 }, c);
+ }
+
+ t.module('Dataset shortcuts', 'data');
+ t.test('read_index', function (openerp) {
+ var ds = new openerp.web.DataSet(
+ {session: openerp.connection}, 'some.model');
+ ds.ids = [10, 20, 30, 40, 50];
+ ds.index = 2;
+ t.expect(ds.read_index(['a', 'b', 'c']), function (result) {
+ strictEqual(result.method, 'read');
+ strictEqual(result.model, 'some.model');
+
+ strictEqual(result.args.length, 2);
+ deepEqual(result.args[0], [30]);
+
+ deepEqual(result.kwargs, {
+ context: context_()
+ });
+ });
+ });
+ t.test('default_get', function (openerp) {
+ var ds = new openerp.web.DataSet(
+ {session: openerp.connection}, 'some.model', {foo: 'bar'});
+ t.expect(ds.default_get(['a', 'b', 'c']), function (result) {
+ strictEqual(result.method, 'default_get');
+ strictEqual(result.model, 'some.model');
+
+ strictEqual(result.args.length, 1);
+ deepEqual(result.args[0], ['a', 'b', 'c']);
+
+ deepEqual(result.kwargs, {
+ context: context_({foo: 'bar'})
+ });
+ });
+ });
+ t.test('create', function (openerp) {
+ var ds = new openerp.web.DataSet({session: openerp.connection}, 'some.model');
+ t.expect(ds.create({foo: 1, bar: 2}), function (r) {
+ strictEqual(r.method, 'create');
+
+ strictEqual(r.args.length, 1);
+ deepEqual(r.args[0], {foo: 1, bar: 2});
+
+ deepEqual(r.kwargs, {
+ context: context_()
+ });
+ });
+ });
+ t.test('write', function (openerp) {
+ var ds = new openerp.web.DataSet({session: openerp.connection}, 'mod');
+ t.expect(ds.write(42, {foo: 1}), function (r) {
+ strictEqual(r.method, 'write');
+
+ strictEqual(r.args.length, 2);
+ deepEqual(r.args[0], [42]);
+ deepEqual(r.args[1], {foo: 1});
+ deepEqual(r.kwargs, {
+ context: context_()
+ });
+ });
+ // FIXME: can't run multiple sessions in the same test(), fucks everything up
+// t.expect(ds.write(42, {foo: 1}, { context: {lang: 'bob'} }), function (r) {
+// strictEqual(r.args.length, 3);
+// strictEqual(r.args[2].lang, 'bob');
+// });
+ });
+ t.test('unlink', function (openerp) {
+ var ds = new openerp.web.DataSet({session: openerp.connection}, 'mod');
+ t.expect(ds.unlink([42]), function (r) {
+ strictEqual(r.method, 'unlink');
+
+ strictEqual(r.args.length, 1);
+ deepEqual(r.args[0], [42]);
+ deepEqual(r.kwargs, {
+ context: context_()
+ });
+ });
+ });
+ t.test('call', function (openerp) {
+ var ds = new openerp.web.DataSet({session: openerp.connection}, 'mod');
+ t.expect(ds.call('frob', ['a', 'b', 42]), function (r) {
+ strictEqual(r.method, 'frob');
+
+ strictEqual(r.args.length, 3);
+ deepEqual(r.args, ['a', 'b', 42]);
+
+ ok(_.isEmpty(r.kwargs));
+ });
+ });
+ t.test('name_get', function (openerp) {
+ var ds = new openerp.web.DataSet({session: openerp.connection}, 'mod');
+ t.expect(ds.name_get([1, 2], null), function (r) {
+ strictEqual(r.method, 'name_get');
+
+ strictEqual(r.args.length, 1);
+ deepEqual(r.args[0], [1, 2]);
+ deepEqual(r.kwargs, {
+ context: context_()
+ });
+ });
+ });
+ t.test('name_search, name', function (openerp) {
+ var ds = new openerp.web.DataSet({session: openerp.connection}, 'mod');
+ t.expect(ds.name_search('bob'), function (r) {
+ strictEqual(r.method, 'name_search');
+
+ strictEqual(r.args.length, 0);
+ deepEqual(r.kwargs, {
+ name: 'bob',
+ args: false,
+ operator: 'ilike',
+ context: context_(),
+ limit: 0
+ });
+ });
+ });
+ t.test('name_search, domain & operator', function (openerp) {
+ var ds = new openerp.web.DataSet({session: openerp.connection}, 'mod');
+ t.expect(ds.name_search(0, [['foo', '=', 3]], 'someop'), function (r) {
+ strictEqual(r.method, 'name_search');
+
+ strictEqual(r.args.length, 0);
+ deepEqual(r.kwargs, {
+ name: '',
+ args: [['foo', '=', 3]],
+ operator: 'someop',
+ context: context_(),
+ limit: 0
+ });
+ });
+ });
+ t.test('exec_workflow', function (openerp) {
+ var ds = new openerp.web.DataSet({session: openerp.connection}, 'mod');
+ t.expect(ds.exec_workflow(42, 'foo'), function (r) {
+ strictEqual(r['service'], 'object');
+ strictEqual(r.method, 'exec_workflow');
+
+ // db, id, password, model, method, id
+ strictEqual(r.args.length, 6);
+ strictEqual(r.args[4], 'foo');
+ strictEqual(r.args[5], 42);
+ });
+ });
+
+ t.test('DataSetSearch#read_slice', function (openerp) {
+ var ds = new openerp.web.DataSetSearch({session: openerp.connection}, 'mod');
+ t.expect(ds.read_slice(['foo', 'bar'], {
+ domain: [['foo', '>', 42], ['qux', '=', 'grault']],
+ context: {peewee: 'herman'},
+ offset: 160,
+ limit: 80
+ }), function (r) {
+ strictEqual(r.method, 'search');
+
+ strictEqual(r.args.length, 5);
+ deepEqual(r.args[0], [['foo', '>', 42], ['qux', '=', 'grault']]);
+ strictEqual(r.args[1], 160);
+ strictEqual(r.args[2], 80);
+ strictEqual(r.args[3], false);
+ strictEqual(r.args[4].peewee, 'herman');
+
+ ok(_.isEmpty(r.kwargs));
+ });
+ });
+ t.test('DataSetSearch#read_slice sorted', function (openerp) {
+ var ds = new openerp.web.DataSetSearch({session: openerp.connection}, 'mod');
+ ds.sort('foo');
+ ds.sort('foo');
+ ds.sort('bar');
+ t.expect(ds.read_slice(['foo', 'bar'], { }), function (r) {
+ strictEqual(r.method, 'search');
+
+ strictEqual(r.args.length, 5);
+ deepEqual(r.args[0], []);
+ strictEqual(r.args[1], 0);
+ strictEqual(r.args[2], false);
+ strictEqual(r.args[3], 'bar ASC, foo DESC');
+ deepEqual(r.args[4], context_());
+
+ ok(_.isEmpty(r.kwargs));
+ });
+ });
+
+ t.module('Nonliterals', 'data', {
+ domains: [
+ "[('model_id', '=', parent.model)]",
+ "[('product_id','=',product_id)]"
+ ],
+ contexts: ['{a: b > c}']
+ });
+ t.test('Dataset', function (openerp) {
+ var ds = new openerp.web.DataSetSearch(
+ {session: openerp.connection}, 'mod');
+ var c = new openerp.web.CompoundContext(
+ {a: 'foo', b: 3, c: 5}, openerp.contexts[0]);
+ t.expect(ds.read_slice(['foo', 'bar'], {
+ context: c
+ }), function (r) {
+ strictEqual(r.method, 'search');
+
+ deepEqual(r.args[4], context_({
+ foo: false,
+ a: 'foo',
+ b: 3,
+ c: 5
+ }));
+
+ ok(_.isEmpty(r.kwargs));
+ });
+ });
+ t.test('name_search', function (openerp) {
+ var eval_context = {
+ active_id: 42,
+ active_ids: [42],
+ active_model: 'mod',
+ parent: {model: 'qux'}
+ };
+ var ds = new openerp.web.DataSet(
+ {session: openerp.connection}, 'mod',
+ new openerp.web.CompoundContext({})
+ .set_eval_context(eval_context));
+ var domain = new openerp.web.CompoundDomain(openerp.domains[0])
+ .set_eval_context(eval_context);
+ t.expect(ds.name_search('foo', domain, 'ilike', 0), function (r) {
+ strictEqual(r.method, 'name_search');
+
+ strictEqual(r.args.length, 0);
+ deepEqual(r.kwargs, {
+ name: 'foo',
+ args: [['model_id', '=', 'qux']],
+ operator: 'ilike',
+ context: context_(),
+ limit: 0
+ });
+ });
+ });
+});
diff --git a/addons/web/static/test/list-utils.js b/addons/web/static/test/list-utils.js
index 8cc34454cd5..7890e71c6bc 100644
--- a/addons/web/static/test/list-utils.js
+++ b/addons/web/static/test/list-utils.js
@@ -10,7 +10,13 @@ $(document).ready(function () {
};
module('list-events', {
setup: function () {
- openerp = window.openerp.init();
+ openerp = window.openerp.init([]);
+ window.openerp.web.corelib(openerp);
+ window.openerp.web.coresetup(openerp);
+ window.openerp.web.chrome(openerp);
+ // views loader stuff
+ window.openerp.web.data(openerp);
+ window.openerp.web.views(openerp);
window.openerp.web.list(openerp);
}
});
@@ -90,7 +96,13 @@ $(document).ready(function () {
module('list-records', {
setup: function () {
- openerp = window.openerp.init();
+ openerp = window.openerp.init([]);
+ window.openerp.web.corelib(openerp);
+ window.openerp.web.coresetup(openerp);
+ window.openerp.web.chrome(openerp);
+ // views loader stuff
+ window.openerp.web.data(openerp);
+ window.openerp.web.views(openerp);
window.openerp.web.list(openerp);
}
});
@@ -123,7 +135,13 @@ $(document).ready(function () {
module('list-collections-degenerate', {
setup: function () {
- openerp = window.openerp.init();
+ openerp = window.openerp.init([]);
+ window.openerp.web.corelib(openerp);
+ window.openerp.web.coresetup(openerp);
+ window.openerp.web.chrome(openerp);
+ // views loader stuff
+ window.openerp.web.data(openerp);
+ window.openerp.web.views(openerp);
window.openerp.web.list(openerp);
}
});
@@ -245,7 +263,13 @@ $(document).ready(function () {
module('list-hofs', {
setup: function () {
- openerp = window.openerp.init();
+ openerp = window.openerp.init([]);
+ window.openerp.web.corelib(openerp);
+ window.openerp.web.coresetup(openerp);
+ window.openerp.web.chrome(openerp);
+ // views loader stuff
+ window.openerp.web.data(openerp);
+ window.openerp.web.views(openerp);
window.openerp.web.list(openerp);
}
});
diff --git a/addons/web/static/test/onchange.js b/addons/web/static/test/onchange.js
deleted file mode 100644
index 8074c755bd3..00000000000
--- a/addons/web/static/test/onchange.js
+++ /dev/null
@@ -1,74 +0,0 @@
-$(document).ready(function () {
- var openerp,
- make_form = function (default_values) {
- var fields = {};
- _(default_values).each(function (value, name) {
- fields[name] = value instanceof Function ? value : {
- get_on_change_value: function () { return value; }
- };
- });
- return _.extend(new openerp.web.FormView(null, {}),
- {fields: fields});
- };
- module("form.onchange", {
- setup: function () {
- openerp = window.openerp.init(true);
- window.openerp.web.core(openerp);
- window.openerp.web.chrome(openerp);
- // views loader stuff
- window.openerp.web.data(openerp);
- window.openerp.web.views(openerp);
- window.openerp.web.list(openerp);
- window.openerp.web.form(openerp);
- }
- });
- test('Parse args-less onchange', function () {
- var f = new openerp.web.FormView(null, {});
- var result = f.parse_on_change('on_change_foo()', {});
- equal(result.method, 'on_change_foo');
- deepEqual(result.args, []);
- });
- test('Parse 1-arg onchange', function () {
- var f = make_form({foo: 3});
- var result = f.parse_on_change('on_change_foo(foo)', {});
- equal(result.method, 'on_change_foo');
- deepEqual(result.args, [3]);
- });
- test('Parse 2-args onchange', function () {
- var f = make_form({foo: 3, bar: 'qux'});
- var result = f.parse_on_change('on_change_foo(bar, foo)', {});
- equal(result.method, 'on_change_foo');
- deepEqual(result.args, ['qux', 3]);
- });
- test('Literal null', function () {
- var f = make_form();
- var result = f.parse_on_change('on_null(None)', {});
- deepEqual(result.args, [null]);
- });
- test('Literal true', function () {
- var f = make_form();
- var result = f.parse_on_change('on_null(True)', {});
- deepEqual(result.args, [true]);
- });
- test('Literal false', function () {
- var f = make_form();
- var result = f.parse_on_change('on_null(False)', {});
- deepEqual(result.args, [false]);
- });
- test('Literal string', function () {
- var f = make_form();
- var result = f.parse_on_change('on_str("foo")', {});
- deepEqual(result.args, ['foo']);
- var result2 = f.parse_on_change("on_str('foo')", {});
- deepEqual(result2.args, ['foo']);
- });
- test('Literal number', function () {
- var f = make_form();
- var result = f.parse_on_change('on_str(42)', {});
- deepEqual(result.args, [42]);
- var result2 = f.parse_on_change("on_str(-25)", {});
- deepEqual(result2.args, [-25]);
- var result3 = f.parse_on_change("on_str(25.02)", {});
- deepEqual(result3.args, [25.02]);
- });
-});
diff --git a/addons/web/static/test/registry.js b/addons/web/static/test/registry.js
index d0a1d10385e..da0cb952783 100644
--- a/addons/web/static/test/registry.js
+++ b/addons/web/static/test/registry.js
@@ -2,8 +2,8 @@ $(document).ready(function () {
var openerp;
module('Registry', {
setup: function () {
- openerp = window.openerp.init(true);
- window.openerp.web.core(openerp);
+ openerp = window.openerp.init([]);
+ window.openerp.web.corelib(openerp);
openerp.web.Foo = {};
openerp.web.Bar = {};
openerp.web.Foo2 = {};
diff --git a/addons/web/static/test/rpc.js b/addons/web/static/test/rpc.js
new file mode 100644
index 00000000000..8a49a48685f
--- /dev/null
+++ b/addons/web/static/test/rpc.js
@@ -0,0 +1,131 @@
+$(document).ready(function () {
+ var openerp;
+
+ module('Misordered resolution management', {
+ setup: function () {
+ openerp = window.openerp.init([]);
+ window.openerp.web.corelib(openerp);
+ window.openerp.web.coresetup(openerp);
+ window.openerp.web.data(openerp);
+ }
+ });
+ test('Resolve all correctly ordered, sync', function () {
+ var dm = new openerp.web.DropMisordered(), flag = false;
+
+ var d1 = $.Deferred(), d2 = $.Deferred(),
+ r1 = dm.add(d1), r2 = dm.add(d2);
+
+ $.when(r1, r2).done(function () {
+ flag = true;
+ });
+ d1.resolve();
+ d2.resolve();
+
+ ok(flag);
+ });
+ test("Don't resolve mis-ordered, sync", function () {
+ var dm = new openerp.web.DropMisordered(),
+ done1 = false, done2 = false,
+ fail1 = false, fail2 = false;
+
+ var d1 = $.Deferred(), d2 = $.Deferred();
+ dm.add(d1).then(function () { done1 = true; },
+ function () { fail1 = true; });
+ dm.add(d2).then(function () { done2 = true; },
+ function () { fail2 = true; });
+
+ d2.resolve();
+ d1.resolve();
+
+ // d1 is in limbo
+ ok(!done1);
+ ok(!fail1);
+ // d2 is resolved
+ ok(done2);
+ ok(!fail2);
+ });
+ test('Fail mis-ordered flag, sync', function () {
+ var dm = new openerp.web.DropMisordered(true),
+ done1 = false, done2 = false,
+ fail1 = false, fail2 = false;
+
+ var d1 = $.Deferred(), d2 = $.Deferred();
+ dm.add(d1).then(function () { done1 = true; },
+ function () { fail1 = true; });
+ dm.add(d2).then(function () { done2 = true; },
+ function () { fail2 = true; });
+
+ d2.resolve();
+ d1.resolve();
+
+ // d1 is failed
+ ok(!done1);
+ ok(fail1);
+ // d2 is resolved
+ ok(done2);
+ ok(!fail2);
+ });
+
+ asyncTest('Resolve all correctly ordered, sync', 1, function () {
+ var dm = new openerp.web.DropMisordered();
+
+ var d1 = $.Deferred(), d2 = $.Deferred(),
+ r1 = dm.add(d1), r2 = dm.add(d2);
+
+ setTimeout(function () { d1.resolve(); }, 100);
+ setTimeout(function () { d2.resolve(); }, 200);
+
+ $.when(r1, r2).done(function () {
+ start();
+ ok(true);
+ });
+ });
+ asyncTest("Don't resolve mis-ordered, sync", 4, function () {
+ var dm = new openerp.web.DropMisordered(),
+ done1 = false, done2 = false,
+ fail1 = false, fail2 = false;
+
+ var d1 = $.Deferred(), d2 = $.Deferred();
+ dm.add(d1).then(function () { done1 = true; },
+ function () { fail1 = true; });
+ dm.add(d2).then(function () { done2 = true; },
+ function () { fail2 = true; });
+
+ setTimeout(function () { d1.resolve(); }, 200);
+ setTimeout(function () { d2.resolve(); }, 100);
+
+ setTimeout(function () {
+ start();
+ // d1 is in limbo
+ ok(!done1);
+ ok(!fail1);
+ // d2 is resolved
+ ok(done2);
+ ok(!fail2);
+ }, 400);
+ });
+ asyncTest('Fail mis-ordered flag, sync', 4, function () {
+ var dm = new openerp.web.DropMisordered(true),
+ done1 = false, done2 = false,
+ fail1 = false, fail2 = false;
+
+ var d1 = $.Deferred(), d2 = $.Deferred();
+ dm.add(d1).then(function () { done1 = true; },
+ function () { fail1 = true; });
+ dm.add(d2).then(function () { done2 = true; },
+ function () { fail2 = true; });
+
+ setTimeout(function () { d1.resolve(); }, 200);
+ setTimeout(function () { d2.resolve(); }, 100);
+
+ setTimeout(function () {
+ start();
+ // d1 is failed
+ ok(!done1);
+ ok(fail1);
+ // d2 is resolved
+ ok(done2);
+ ok(!fail2);
+ }, 400);
+ });
+});
diff --git a/addons/web/static/test/test.html b/addons/web/static/test/test.html
index 1e34c6ec933..84dd3ee7f27 100644
--- a/addons/web/static/test/test.html
+++ b/addons/web/static/test/test.html
@@ -26,10 +26,9 @@
-
-
-
+
+
@@ -52,6 +51,6 @@
-
+