| /* 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(); |
| }); |
| }; |