1test("module without setup/teardown (default)", function() { 2 expect(1); 3 ok(true); 4}); 5 6test("expect in test", 3, function() { 7 ok(true); 8 ok(true); 9 ok(true); 10}); 11 12test("expect in test", 1, function() { 13 ok(true); 14}); 15 16module("setup test", { 17 setup: function() { 18 ok(true); 19 } 20}); 21 22test("module with setup", function() { 23 expect(2); 24 ok(true); 25}); 26 27test("module with setup, expect in test call", 2, function() { 28 ok(true); 29}); 30 31var state; 32 33module("setup/teardown test", { 34 setup: function() { 35 state = true; 36 ok(true); 37 }, 38 teardown: function() { 39 ok(true); 40 } 41}); 42 43test("module with setup/teardown", function() { 44 expect(3); 45 ok(true); 46}); 47 48module("setup/teardown test 2"); 49 50test("module without setup/teardown", function() { 51 expect(1); 52 ok(true); 53}); 54 55if (typeof setTimeout !== 'undefined') { 56state = 'fail'; 57 58module("teardown and stop", { 59 teardown: function() { 60 equal(state, "done", "Test teardown."); 61 } 62}); 63 64test("teardown must be called after test ended", function() { 65 expect(1); 66 stop(); 67 setTimeout(function() { 68 state = "done"; 69 start(); 70 }, 13); 71}); 72 73module("async setup test", { 74 setup: function() { 75 stop(); 76 setTimeout(function(){ 77 ok(true); 78 start(); 79 }, 500); 80 } 81}); 82 83asyncTest("module with async setup", function() { 84 expect(2); 85 ok(true); 86 start(); 87}); 88 89module("async teardown test", { 90 teardown: function() { 91 stop(); 92 setTimeout(function(){ 93 ok(true); 94 start(); 95 }, 500); 96 } 97}); 98 99asyncTest("module with async teardown", function() { 100 expect(2); 101 ok(true); 102 start(); 103}); 104 105module("asyncTest"); 106 107asyncTest("asyncTest", function() { 108 expect(2); 109 ok(true); 110 setTimeout(function() { 111 state = "done"; 112 ok(true); 113 start(); 114 }, 13); 115}); 116 117asyncTest("asyncTest", 2, function() { 118 ok(true); 119 setTimeout(function() { 120 state = "done"; 121 ok(true); 122 start(); 123 }, 13); 124}); 125 126test("sync", 2, function() { 127 stop(); 128 setTimeout(function() { 129 ok(true); 130 start(); 131 }, 13); 132 stop(); 133 setTimeout(function() { 134 ok(true); 135 start(); 136 }, 125); 137}); 138} 139 140module("save scope", { 141 setup: function() { 142 this.foo = "bar"; 143 }, 144 teardown: function() { 145 deepEqual(this.foo, "bar"); 146 } 147}); 148test("scope check", function() { 149 expect(2); 150 deepEqual(this.foo, "bar"); 151}); 152 153module("simple testEnvironment setup", { 154 foo: "bar", 155 bugid: "#5311" // example of meta-data 156}); 157test("scope check", function() { 158 deepEqual(this.foo, "bar"); 159}); 160test("modify testEnvironment",function() { 161 this.foo="hamster"; 162}); 163test("testEnvironment reset for next test",function() { 164 deepEqual(this.foo, "bar"); 165}); 166 167module("testEnvironment with object", { 168 options:{ 169 recipe:"soup", 170 ingredients:["hamster","onions"] 171 } 172}); 173test("scope check", function() { 174 deepEqual(this.options, {recipe:"soup",ingredients:["hamster","onions"]}) ; 175}); 176test("modify testEnvironment",function() { 177 // since we do a shallow copy, the testEnvironment can be modified 178 this.options.ingredients.push("carrots"); 179}); 180test("testEnvironment reset for next test",function() { 181 deepEqual(this.options, {recipe:"soup",ingredients:["hamster","onions","carrots"]}, "Is this a bug or a feature? Could do a deep copy") ; 182}); 183 184 185module("testEnvironment tests"); 186 187function makeurl() { 188 var testEnv = QUnit.current_testEnvironment; 189 var url = testEnv.url || 'http://example.com/search'; 190 var q = testEnv.q || 'a search test'; 191 return url + '?q='+encodeURIComponent(q); 192} 193 194test("makeurl working",function() { 195 equal( QUnit.current_testEnvironment, this, 'The current testEnvironment is global'); 196 equal( makeurl(), 'http://example.com/search?q=a%20search%20test', 'makeurl returns a default url if nothing specified in the testEnvironment'); 197}); 198 199module("testEnvironment with makeurl settings", { 200 url: 'http://google.com/', 201 q: 'another_search_test' 202}); 203test("makeurl working with settings from testEnvironment", function() { 204 equal( makeurl(), 'http://google.com/?q=another_search_test', 'rather than passing arguments, we use test metadata to form the url'); 205}); 206test("each test can extend the module testEnvironment", { 207 q:'hamstersoup' 208}, function() { 209 equal( makeurl(), 'http://google.com/?q=hamstersoup', 'url from module, q from test'); 210}); 211 212module("jsDump"); 213test("jsDump output", function() { 214 equals( QUnit.jsDump.parse([1, 2]), "[\n 1,\n 2\n]" ); 215 equals( QUnit.jsDump.parse({top: 5, left: 0}), "{\n \"top\": 5,\n \"left\": 0\n}" ); 216 if (typeof document !== 'undefined' && document.getElementById("qunit-header")) { 217 equals( QUnit.jsDump.parse(document.getElementById("qunit-header")), "<h1 id=\"qunit-header\"></h1>" ); 218 equals( QUnit.jsDump.parse(document.getElementsByTagName("h1")), "[\n <h1 id=\"qunit-header\"></h1>\n]" ); 219 } 220}); 221 222module("assertions"); 223test("raises",function() { 224 function CustomError( message ) { 225 this.message = message; 226 } 227 228 CustomError.prototype.toString = function() { 229 return this.message; 230 }; 231 232 raises( 233 function() { 234 throw "error" 235 } 236 ); 237 238 raises( 239 function() { 240 throw "error" 241 }, 242 'raises with just a message, no expected' 243 ); 244 245 raises( 246 function() { 247 throw new CustomError(); 248 }, 249 CustomError, 250 'raised error is an instance of CustomError' 251 ); 252 253 raises( 254 function() { 255 throw new CustomError("some error description"); 256 }, 257 /description/, 258 "raised error message contains 'description'" 259 ); 260 261 raises( 262 function() { 263 throw new CustomError("some error description"); 264 }, 265 function( err ) { 266 if ( (err instanceof CustomError) && /description/.test(err) ) { 267 return true; 268 } 269 }, 270 "custom validation function" 271 ); 272 273}); 274 275if (typeof document !== "undefined") { 276 277module("fixture"); 278test("setup", function() { 279 document.getElementById("qunit-fixture").innerHTML = "foobar"; 280}); 281test("basics", function() { 282 equal( document.getElementById("qunit-fixture").innerHTML, "test markup", "automatically reset" ); 283}); 284 285} 286 287module("custom assertions"); 288(function() { 289 function mod2(value, expected, message) { 290 var actual = value % 2; 291 QUnit.push(actual == expected, actual, expected, message); 292 } 293 test("mod2", function() { 294 mod2(2, 0, "2 % 2 == 0"); 295 mod2(3, 1, "3 % 2 == 1"); 296 }) 297})(); 298 299(function() { 300 var reset = QUnit.reset; 301 function afterTest() { 302 ok( false, "reset should not modify test status" ); 303 } 304 module("reset"); 305 test("reset runs assertions", function() { 306 QUnit.reset = function() { 307 afterTest(); 308 reset.apply( this, arguments ); 309 }; 310 }); 311 test("reset runs assertions2", function() { 312 QUnit.reset = reset; 313 }); 314})(); 315 316module("noglobals", { 317 teardown: function() { 318 delete window.badGlobalVariableIntroducedInTest; 319 } 320}); 321test("let teardown clean up globals", function() { 322 // this test will always pass if run without ?noglobals=true 323 window.badGlobalVariableIntroducedInTest = true; 324}); 325