254 lines
8.8 KiB
JavaScript
254 lines
8.8 KiB
JavaScript
openerp.testing.section('testing.stack', function (test) {
|
|
// I heard you like tests, so I put tests in your testing infrastructure,
|
|
// so you can test what you test
|
|
var reject = function () {
|
|
// utility function, rejects a success
|
|
var args = _.toArray(arguments);
|
|
return $.Deferred(function (d) {
|
|
d.reject.apply(d, ["unexpected success"].concat(args));
|
|
});
|
|
};
|
|
test('direct, value, success', {asserts: 1}, function () {
|
|
var s = openerp.testing.Stack();
|
|
return s.execute(function () {
|
|
return 42;
|
|
}).then(function (val) {
|
|
strictEqual(val, 42, "should return the handler value");
|
|
});
|
|
});
|
|
test('direct, deferred, success', {asserts: 1}, function () {
|
|
var s = openerp.testing.Stack();
|
|
return s.execute(function () {
|
|
return $.when(42);
|
|
}).then(function (val) {
|
|
strictEqual(val, 42, "should return the handler value")
|
|
});
|
|
});
|
|
test('direct, value, error', {asserts: 1}, function () {
|
|
var s = openerp.testing.Stack();
|
|
return s.execute(function () {
|
|
throw new Error("foo");
|
|
}).then(reject, function (f) {
|
|
strictEqual(f.message, "foo", "should reject with exception");
|
|
return $.when();
|
|
});
|
|
});
|
|
test('direct, deferred, failure', {asserts: 1}, function () {
|
|
var s = openerp.testing.Stack();
|
|
return s.execute(function () {
|
|
return $.Deferred(function (d) {
|
|
d.reject("failed");
|
|
});
|
|
}).then(reject, function (f) {
|
|
strictEqual(f, "failed", "should propagate failure");
|
|
return $.when();
|
|
});
|
|
});
|
|
|
|
test('successful setup', {asserts: 2}, function () {
|
|
var setup_done = false;
|
|
var s = openerp.testing.Stack();
|
|
return s.push(function () {
|
|
return $.Deferred(function (d) {
|
|
setTimeout(function () {
|
|
setup_done = true;
|
|
d.resolve(2);
|
|
}, 50);
|
|
});
|
|
}).execute(function () {
|
|
return 42;
|
|
}).then(function (val) {
|
|
ok(setup_done, "should have executed setup");
|
|
strictEqual(val, 42, "should return executed function value (not setup)");
|
|
});
|
|
});
|
|
test('successful teardown', {asserts: 2}, function () {
|
|
var teardown = false;
|
|
var s = openerp.testing.Stack();
|
|
return s.push(null, function () {
|
|
return $.Deferred(function (d) {
|
|
setTimeout(function () {
|
|
teardown = true;
|
|
d.resolve(2);
|
|
}, 50);
|
|
});
|
|
}).execute(function () {
|
|
return 42;
|
|
}).then(function (val) {
|
|
ok(teardown, "should have executed teardown");
|
|
strictEqual(val, 42, "should return executed function value (not setup)");
|
|
});
|
|
});
|
|
test('successful setup and teardown', {asserts: 3}, function () {
|
|
var setup = false, teardown = false;
|
|
var s = openerp.testing.Stack();
|
|
return s.push(function () {
|
|
return $.Deferred(function (d) {
|
|
setTimeout(function () {
|
|
setup = true;
|
|
d.resolve(2);
|
|
}, 50);
|
|
});
|
|
}, function () {
|
|
return $.Deferred(function (d) {
|
|
setTimeout(function () {
|
|
teardown = true;
|
|
d.resolve(2);
|
|
}, 50);
|
|
});
|
|
}).execute(function () {
|
|
return 42;
|
|
}).then(function (val) {
|
|
ok(setup, "should have executed setup");
|
|
ok(teardown, "should have executed teardown");
|
|
strictEqual(val, 42, "should return executed function value (not setup)");
|
|
});
|
|
});
|
|
|
|
test('multiple setups', {asserts: 2}, function () {
|
|
var setups = 0;
|
|
var s = openerp.testing.Stack();
|
|
return s.push(function () {
|
|
setups++;
|
|
}).push(function () {
|
|
setups++;
|
|
}).push(function () {
|
|
setups++;
|
|
}).push(function () {
|
|
setups++;
|
|
}).execute(function () {
|
|
return 42;
|
|
}).then(function (val) {
|
|
strictEqual(setups, 4, "should have executed all setups of stack");
|
|
strictEqual(val, 42);
|
|
});
|
|
});
|
|
test('multiple teardowns', {asserts: 2}, function () {
|
|
var teardowns = 0;
|
|
var s = openerp.testing.Stack();
|
|
return s.push(null, function () {
|
|
teardowns++;
|
|
}).push(null, function () {
|
|
teardowns++;
|
|
}).push(null, function () {
|
|
teardowns++;
|
|
}).push(null, function () {
|
|
teardowns++;
|
|
}).execute(function () {
|
|
return 42;
|
|
}).then(function (val) {
|
|
strictEqual(teardowns, 4, "should have executed all teardowns of stack");
|
|
strictEqual(val, 42);
|
|
});
|
|
});
|
|
test('holes in setups', {asserts: 2}, function () {
|
|
var setups = [];
|
|
var s = openerp.testing.Stack();
|
|
return s.push(function () {
|
|
setups.push(0);
|
|
}).push().push().push(function () {
|
|
setups.push(3);
|
|
}).push(function () {
|
|
setups.push(4);
|
|
}).push().push(function () {
|
|
setups.push(6);
|
|
}).execute(function () {
|
|
return 42;
|
|
}).then(function (val) {
|
|
deepEqual(setups, [0, 3, 4, 6],
|
|
"should have executed setups in correct order");
|
|
strictEqual(val, 42);
|
|
});
|
|
});
|
|
test('holes in teardowns', {asserts: 2}, function () {
|
|
var teardowns = [];
|
|
var s = openerp.testing.Stack();
|
|
return s.push(null, function () {
|
|
teardowns.push(0);
|
|
}).push().push().push(null, function () {
|
|
teardowns.push(3);
|
|
}).push(null, function () {
|
|
teardowns.push(4);
|
|
}).push().push(null, function () {
|
|
teardowns.push(6);
|
|
}).execute(function () {
|
|
return 42;
|
|
}).then(function (val) {
|
|
deepEqual(teardowns, [6, 4, 3, 0],
|
|
"should have executed teardowns in correct order");
|
|
strictEqual(val, 42);
|
|
});
|
|
|
|
});
|
|
|
|
test('failed setup', {asserts: 5}, function () {
|
|
var setup, teardown, teardown2, code;
|
|
return openerp.testing.Stack().push(function () {
|
|
setup = true;
|
|
}, function () {
|
|
teardown = true;
|
|
}).push(function () {
|
|
return $.Deferred().reject("Fail!");
|
|
}, function () {
|
|
teardown2 = true;
|
|
}).execute(function () {
|
|
code = true;
|
|
return 42;
|
|
}).then(reject, function (m) {
|
|
ok(setup, "should have executed first setup function");
|
|
ok(teardown, "should have executed first teardown function");
|
|
ok(!teardown2, "should not have executed second teardown function");
|
|
strictEqual(m, "Fail!", "should return setup failure message");
|
|
ok(!code, "should not have executed callback");
|
|
return $.when();
|
|
});
|
|
});
|
|
test('failed teardown', {asserts: 2}, function () {
|
|
var teardowns = 0;
|
|
return openerp.testing.Stack().push(null, function () {
|
|
teardowns++;
|
|
return $.Deferred().reject('Fail 1');
|
|
}).push(null, function () {
|
|
teardowns++;
|
|
}).push(null, function () {
|
|
teardowns++;
|
|
return $.Deferred().reject('Fail 3');
|
|
}).execute(function () {
|
|
return 42;
|
|
}).then(reject, function (m) {
|
|
strictEqual(teardowns, 3,
|
|
"should have tried executing all teardowns");
|
|
strictEqual(m, "Fail 3", "should return first failure message");
|
|
return $.when();
|
|
});
|
|
});
|
|
test('failed call + teardown', {asserts: 2}, function () {
|
|
var teardowns = 0;
|
|
return openerp.testing.Stack().push(null, function () {
|
|
teardowns++;
|
|
}).push(null, function () {
|
|
teardowns++;
|
|
return $.Deferred().reject('Fail 2');
|
|
}).execute(function () {
|
|
return $.Deferred().reject("code");
|
|
}).then(reject, function (m) {
|
|
strictEqual(teardowns, 2,
|
|
"should have tried executing all teardowns");
|
|
strictEqual(m, "code", "should return first failure message");
|
|
return $.when();
|
|
});
|
|
});
|
|
|
|
test('arguments passing', {asserts: 9}, function () {
|
|
var asserter = function (a, b, c) {
|
|
strictEqual(a, 1);
|
|
strictEqual(b, "foo");
|
|
deepEqual(c, {bar: "baz", qux: 42});
|
|
};
|
|
|
|
return openerp.testing.Stack()
|
|
.push(asserter, asserter)
|
|
.execute(asserter, 1, "foo", {bar: 'baz', qux: 42});
|
|
});
|
|
});
|