test("module without setup/teardown (default)", function() { expect(1); ok(true); }); test("expect in test", 3, function() { ok(true); ok(true); ok(true); }); test("expect in test", 1, function() { ok(true); }); module("setup test", { setup: function() { ok(true); } }); test("module with setup", function() { expect(2); ok(true); }); test("module with setup, expect in test call", 2, function() { ok(true); }); var state; module("setup/teardown test", { setup: function() { state = true; ok(true); }, teardown: function() { ok(true); } }); test("module with setup/teardown", function() { expect(3); ok(true); }); module("setup/teardown test 2"); test("module without setup/teardown", function() { expect(1); ok(true); }); if (typeof setTimeout !== 'undefined') { state = 'fail'; module("teardown and stop", { teardown: function() { equal(state, "done", "Test teardown."); } }); test("teardown must be called after test ended", function() { expect(1); stop(); setTimeout(function() { state = "done"; start(); }, 13); }); module("async setup test", { setup: function() { stop(); setTimeout(function(){ ok(true); start(); }, 500); } }); asyncTest("module with async setup", function() { expect(2); ok(true); start(); }); module("async teardown test", { teardown: function() { stop(); setTimeout(function(){ ok(true); start(); }, 500); } }); asyncTest("module with async teardown", function() { expect(2); ok(true); start(); }); module("asyncTest"); asyncTest("asyncTest", function() { expect(2); ok(true); setTimeout(function() { state = "done"; ok(true); start(); }, 13); }); asyncTest("asyncTest", 2, function() { ok(true); setTimeout(function() { state = "done"; ok(true); start(); }, 13); }); test("sync", 2, function() { stop(); setTimeout(function() { ok(true); start(); }, 13); stop(); setTimeout(function() { ok(true); start(); }, 125); }); } module("save scope", { setup: function() { this.foo = "bar"; }, teardown: function() { deepEqual(this.foo, "bar"); } }); test("scope check", function() { expect(2); deepEqual(this.foo, "bar"); }); module("simple testEnvironment setup", { foo: "bar", bugid: "#5311" // example of meta-data }); test("scope check", function() { deepEqual(this.foo, "bar"); }); test("modify testEnvironment",function() { this.foo="hamster"; }); test("testEnvironment reset for next test",function() { deepEqual(this.foo, "bar"); }); module("testEnvironment with object", { options:{ recipe:"soup", ingredients:["hamster","onions"] } }); test("scope check", function() { deepEqual(this.options, {recipe:"soup",ingredients:["hamster","onions"]}) ; }); test("modify testEnvironment",function() { // since we do a shallow copy, the testEnvironment can be modified this.options.ingredients.push("carrots"); }); test("testEnvironment reset for next test",function() { deepEqual(this.options, {recipe:"soup",ingredients:["hamster","onions","carrots"]}, "Is this a bug or a feature? Could do a deep copy") ; }); module("testEnvironment tests"); function makeurl() { var testEnv = QUnit.current_testEnvironment; var url = testEnv.url || 'http://example.com/search'; var q = testEnv.q || 'a search test'; return url + '?q='+encodeURIComponent(q); } test("makeurl working",function() { equal( QUnit.current_testEnvironment, this, 'The current testEnvironment is global'); equal( makeurl(), 'http://example.com/search?q=a%20search%20test', 'makeurl returns a default url if nothing specified in the testEnvironment'); }); module("testEnvironment with makeurl settings", { url: 'http://google.com/', q: 'another_search_test' }); test("makeurl working with settings from testEnvironment", function() { equal( makeurl(), 'http://google.com/?q=another_search_test', 'rather than passing arguments, we use test metadata to form the url'); }); test("each test can extend the module testEnvironment", { q:'hamstersoup' }, function() { equal( makeurl(), 'http://google.com/?q=hamstersoup', 'url from module, q from test'); }); module("jsDump"); test("jsDump output", function() { equals( QUnit.jsDump.parse([1, 2]), "[\n 1,\n 2\n]" ); equals( QUnit.jsDump.parse({top: 5, left: 0}), "{\n \"top\": 5,\n \"left\": 0\n}" ); if (typeof document !== 'undefined' && document.getElementById("qunit-header")) { equals( QUnit.jsDump.parse(document.getElementById("qunit-header")), "

" ); equals( QUnit.jsDump.parse(document.getElementsByTagName("h1")), "[\n

\n]" ); } }); module("assertions"); test("raises",function() { function CustomError( message ) { this.message = message; } CustomError.prototype.toString = function() { return this.message; }; raises( function() { throw "error" } ); raises( function() { throw "error" }, 'raises with just a message, no expected' ); raises( function() { throw new CustomError(); }, CustomError, 'raised error is an instance of CustomError' ); raises( function() { throw new CustomError("some error description"); }, /description/, "raised error message contains 'description'" ); raises( function() { throw new CustomError("some error description"); }, function( err ) { if ( (err instanceof CustomError) && /description/.test(err) ) { return true; } }, "custom validation function" ); }); if (typeof document !== "undefined") { module("fixture"); test("setup", function() { document.getElementById("qunit-fixture").innerHTML = "foobar"; }); test("basics", function() { equal( document.getElementById("qunit-fixture").innerHTML, "test markup", "automatically reset" ); }); } module("custom assertions"); (function() { function mod2(value, expected, message) { var actual = value % 2; QUnit.push(actual == expected, actual, expected, message); } test("mod2", function() { mod2(2, 0, "2 % 2 == 0"); mod2(3, 1, "3 % 2 == 1"); }) })(); (function() { var reset = QUnit.reset; function afterTest() { ok( false, "reset should not modify test status" ); } module("reset"); test("reset runs assertions", function() { QUnit.reset = function() { afterTest(); reset.apply( this, arguments ); }; }); test("reset runs assertions2", function() { QUnit.reset = reset; }); })(); module("noglobals", { teardown: function() { delete window.badGlobalVariableIntroducedInTest; } }); test("let teardown clean up globals", function() { // this test will always pass if run without ?noglobals=true window.badGlobalVariableIntroducedInTest = true; });