blob: 5d33b0bf0377d54dde5f7a63a3a82e8cd8023bfd [file] [log] [blame]
/* THIS FILE SHOULD BE BROWSER-COMPATIBLE JS!
* You can use @REMOVE_LINE_FOR_BROWSER to remove code from the browser build.
* Only code on that line will be removed, its mostly to avoid requiring code
* that is node specific
*/
var nodeunit = require('../lib/nodeunit'); // @REMOVE_LINE_FOR_BROWSER
exports.testTestCase = function (test) {
test.expect(7);
var call_order = [];
var s = {
setUp: function (callback) {
call_order.push('setUp');
test.equals(this.one, undefined, 'in setUp, this.one not set');
this.one = 1;
callback();
},
tearDown: function (callback) {
call_order.push('tearDown');
test.ok(true, 'tearDown called');
callback();
},
test1: function (t) {
call_order.push('test1');
test.equals(this.one, 1, 'in test1, this.one is 1');
this.one = 2;
t.done();
},
test2: function (t) {
call_order.push('test2');
test.equals(this.one, 1, 'in test2, this.one is still 1');
t.done();
}
};
nodeunit.runSuite(null, s, {}, function () {
test.same(call_order, [
'setUp', 'test1', 'tearDown',
'setUp', 'test2', 'tearDown'
]);
test.done();
});
};
exports.tearDownAfterError = function (test) {
test.expect(1);
var s = {
tearDown: function (callback) {
test.ok(true, 'tearDown called');
callback();
},
test: function (t) {
throw new Error('some error');
}
};
nodeunit.runSuite(null, s, {}, function () {
test.done();
});
};
exports.catchSetUpError = function (test) {
test.expect(2);
var test_error = new Error('test error');
var s = {
setUp: function (callback) {
throw test_error;
},
test: function (t) {
test.ok(false, 'test function should not be called');
t.done();
}
};
nodeunit.runSuite(null, s, {}, function (err, assertions) {
test.equal(assertions.length, 1);
test.equal(assertions[0].error, test_error);
test.done();
});
};
exports.setUpErrorCallback = function (test) {
test.expect(2);
var test_error = new Error('test error');
var s = {
setUp: function (callback) {
callback(test_error);
},
test: function (t) {
test.ok(false, 'test function should not be called');
t.done();
}
};
nodeunit.runSuite(null, s, {}, function (err, assertions) {
test.equal(assertions.length, 1);
test.equal(assertions[0].error, test_error);
test.done();
});
};
exports.catchTearDownError = function (test) {
test.expect(2);
var test_error = new Error('test error');
var s = {
tearDown: function (callback) {
throw test_error;
},
test: function (t) {
t.done();
}
};
nodeunit.runSuite(null, s, {}, function (err, assertions) {
test.equal(assertions.length, 1);
test.equal(assertions[0].error, test_error);
test.done();
});
};
exports.tearDownErrorCallback = function (test) {
test.expect(2);
var test_error = new Error('test error');
var s = {
tearDown: function (callback) {
callback(test_error);
},
test: function (t) {
t.done();
}
};
nodeunit.runSuite(null, s, {}, function (err, assertions) {
test.equal(assertions.length, 1);
test.equal(assertions[0].error, test_error);
test.done();
});
};
exports.testErrorAndtearDownError = function (test) {
test.expect(3);
var error1 = new Error('test error one');
var error2 = new Error('test error two');
var s = {
tearDown: function (callback) {
callback(error2);
},
test: function (t) {
t.done(error1);
}
};
nodeunit.runSuite(null, s, {}, function (err, assertions) {
test.equal(assertions.length, 2);
test.equal(assertions[0].error, error1);
test.equal(assertions[1].error, error2);
test.done();
});
};
exports.testCaseGroups = function (test) {
var call_order = [];
var s = {
setUp: function (callback) {
call_order.push('setUp');
callback();
},
tearDown: function (callback) {
call_order.push('tearDown');
callback();
},
test1: function (test) {
call_order.push('test1');
test.done();
},
group1: {
test2: function (test) {
call_order.push('group1.test2');
test.done();
}
}
};
nodeunit.runSuite(null, s, {}, function (err, assertions) {
test.same(call_order, [
'setUp',
'test1',
'tearDown',
'setUp',
'group1.test2',
'tearDown'
]);
test.done();
});
};
exports.nestedTestCases = function (test) {
var call_order = [];
var s = {
setUp: function (callback) {
call_order.push('setUp');
callback();
},
tearDown: function (callback) {
call_order.push('tearDown');
callback();
},
test1: function (test) {
call_order.push('test1');
test.done();
},
group1: {
setUp: function (callback) {
call_order.push('group1.setUp');
callback();
},
tearDown: function (callback) {
call_order.push('group1.tearDown');
callback();
},
test2: function (test) {
call_order.push('group1.test2');
test.done();
}
}
};
nodeunit.runSuite(null, s, {}, function (err, assertions) {
test.same(call_order, [
'setUp',
'test1',
'tearDown',
'setUp',
'group1.setUp',
'group1.test2',
'group1.tearDown',
'tearDown'
]);
test.done();
});
};
exports.deepNestedTestCases = function (test) {
var val = 'foo';
var s = {
setUp: function (callback) {
val = 'bar';
callback();
},
group1: {
test: {
test2: function (test) {
test.equal(val, 'bar');
test.done();
}
}
}
};
nodeunit.runSuite(null, s, {}, function (err, assertions) {
test.ok(!assertions[0].failed());
test.equal(assertions.length, 1);
test.done();
});
};