15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)test("module without setup/teardown (default)", function() {
25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	expect(1);
35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	ok(true);
45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)});
55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)test("expect in test", 3, function() {
75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	ok(true);
85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	ok(true);
95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	ok(true);
105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)});
115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)test("expect in test", 1, function() {
135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	ok(true);
145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)});
155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)module("setup test", {
175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	setup: function() {
185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)		ok(true);
195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	}
205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)});
215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)test("module with setup", function() {
235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	expect(2);
245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	ok(true);
255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)});
265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)test("module with setup, expect in test call", 2, function() {
285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	ok(true);
295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)});
305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)var state;
325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)module("setup/teardown test", {
345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	setup: function() {
355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)		state = true;
365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)		ok(true);
375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	},
385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	teardown: function() {
395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)		ok(true);
405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	}
415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)});
425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)test("module with setup/teardown", function() {
445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	expect(3);
455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	ok(true);
465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)});
475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)module("setup/teardown test 2");
495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)test("module without setup/teardown", function() {
515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	expect(1);
525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	ok(true);
535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)});
545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)if (typeof setTimeout !== 'undefined') {
565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)state = 'fail';
575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)module("teardown and stop", {
595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	teardown: function() {
605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)		equal(state, "done", "Test teardown.");
615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	}
625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)});
635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)test("teardown must be called after test ended", function() {
655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	expect(1);
665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	stop();
675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	setTimeout(function() {
685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)		state = "done";
695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)		start();
705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	}, 13);
715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)});
725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)module("async setup test", {
745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	setup: function() {
755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)		stop();
765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)		setTimeout(function(){
775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)			ok(true);
785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)			start();
795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)		}, 500);
805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	}
815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)});
825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)asyncTest("module with async setup", function() {
845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	expect(2);
855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	ok(true);
865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	start();
875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)});
885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)module("async teardown test", {
905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	teardown: function() {
915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)		stop();
925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)		setTimeout(function(){
935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)			ok(true);
945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)			start();
955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)		}, 500);
965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	}
975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)});
985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)asyncTest("module with async teardown", function() {
1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	expect(2);
1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	ok(true);
1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	start();
1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)});
1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)module("asyncTest");
1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)asyncTest("asyncTest", function() {
1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	expect(2);
1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	ok(true);
1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	setTimeout(function() {
1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)		state = "done";
1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)		ok(true);
1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)		start();
1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	}, 13);
1155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)});
1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)asyncTest("asyncTest", 2, function() {
1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	ok(true);
1195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	setTimeout(function() {
1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)		state = "done";
1215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)		ok(true);
1225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)		start();
1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	}, 13);
1245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)});
1255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)test("sync", 2, function() {
1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	stop();
1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	setTimeout(function() {
1295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)		ok(true);
1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)		start();
1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	}, 13);
1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	stop();
1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	setTimeout(function() {
1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)		ok(true);
1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)		start();
1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	}, 125);
1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)});
1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)module("save scope", {
1415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	setup: function() {
1425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)		this.foo = "bar";
1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	},
1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	teardown: function() {
1455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)		deepEqual(this.foo, "bar");
1465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	}
1475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)});
1485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)test("scope check", function() {
1495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	expect(2);
1505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	deepEqual(this.foo, "bar");
1515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)});
1525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)module("simple testEnvironment setup", {
1545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	foo: "bar",
1555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	bugid: "#5311" // example of meta-data
1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)});
1575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)test("scope check", function() {
1585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	deepEqual(this.foo, "bar");
1595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)});
1605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)test("modify testEnvironment",function() {
1615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	this.foo="hamster";
1625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)});
1635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)test("testEnvironment reset for next test",function() {
1645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	deepEqual(this.foo, "bar");
1655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)});
1665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)module("testEnvironment with object", {
1685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	options:{
1695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)		recipe:"soup",
1705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)		ingredients:["hamster","onions"]
1715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	}
1725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)});
1735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)test("scope check", function() {
1745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	deepEqual(this.options, {recipe:"soup",ingredients:["hamster","onions"]}) ;
1755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)});
1765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)test("modify testEnvironment",function() {
1775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	// since we do a shallow copy, the testEnvironment can be modified
1785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	this.options.ingredients.push("carrots");
1795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)});
1805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)test("testEnvironment reset for next test",function() {
1815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	deepEqual(this.options, {recipe:"soup",ingredients:["hamster","onions","carrots"]}, "Is this a bug or a feature? Could do a deep copy") ;
1825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)});
1835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)module("testEnvironment tests");
1865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function makeurl() {
1885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	var testEnv = QUnit.current_testEnvironment;
1895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	var url = testEnv.url || 'http://example.com/search';
1905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	var q   = testEnv.q   || 'a search test';
1915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	return url + '?q='+encodeURIComponent(q);
1925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)test("makeurl working",function() {
1955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	equal( QUnit.current_testEnvironment, this, 'The current testEnvironment is global');
1965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	equal( makeurl(), 'http://example.com/search?q=a%20search%20test', 'makeurl returns a default url if nothing specified in the testEnvironment');
1975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)});
1985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)module("testEnvironment with makeurl settings", {
2005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	url: 'http://google.com/',
2015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	q: 'another_search_test'
2025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)});
2035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)test("makeurl working with settings from testEnvironment", function() {
2045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	equal( makeurl(), 'http://google.com/?q=another_search_test', 'rather than passing arguments, we use test metadata to form the url');
2055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)});
2065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)test("each test can extend the module testEnvironment", {
2075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	q:'hamstersoup'
2085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}, function() {
2095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	equal( makeurl(), 'http://google.com/?q=hamstersoup', 'url from module, q from test');
2105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)});
2115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)module("jsDump");
2135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)test("jsDump output", function() {
2145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	equals( QUnit.jsDump.parse([1, 2]), "[\n  1,\n  2\n]" );
2155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	equals( QUnit.jsDump.parse({top: 5, left: 0}), "{\n  \"top\": 5,\n  \"left\": 0\n}" );
2165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	if (typeof document !== 'undefined' && document.getElementById("qunit-header")) {
2175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)		equals( QUnit.jsDump.parse(document.getElementById("qunit-header")), "<h1 id=\"qunit-header\"></h1>" );
2185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)		equals( QUnit.jsDump.parse(document.getElementsByTagName("h1")), "[\n  <h1 id=\"qunit-header\"></h1>\n]" );
2195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	}
2205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)});
2215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)module("assertions");
2235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)test("raises",function() {
2245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	function CustomError( message ) {
2255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)		this.message = message;
2265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	}
2275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	CustomError.prototype.toString = function() {
2295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)		return this.message;
2305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	};
2315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	raises(
2335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)		function() {
2345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)			throw "error"
2355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)		}
2365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	);
2375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	raises(
2395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)		function() {
2405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)			throw "error"
2415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)		},
2425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)		'raises with just a message, no expected'
2435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	);
2445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	raises(
2465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)		function() {
2475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)			throw new CustomError();
2485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)		},
2495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)		CustomError,
2505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)		'raised error is an instance of CustomError'
2515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	);
2525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	raises(
2545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)		function() {
2555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)			throw new CustomError("some error description");
2565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)		},
2575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)		/description/,
2585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)		"raised error message contains 'description'"
2595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	);
2605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	raises(
2625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)		function() {
2635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)			throw new CustomError("some error description");
2645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)		},
2655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)		function( err ) {
2665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)			if ( (err instanceof CustomError) && /description/.test(err) ) {
2675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)				return true;
2685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)			}
2695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)		},
2705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)		"custom validation function"
2715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	);
2725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)});
2745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)if (typeof document !== "undefined") {
2765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)module("fixture");
2785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)test("setup", function() {
2795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	document.getElementById("qunit-fixture").innerHTML = "foobar";
2805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)});
2815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)test("basics", function() {
2825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	equal( document.getElementById("qunit-fixture").innerHTML, "test markup", "automatically reset" );
2835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)});
2845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
2865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)module("custom assertions");
2885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)(function() {
2895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	function mod2(value, expected, message) {
2905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)		var actual = value % 2;
2915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)		QUnit.push(actual == expected, actual, expected, message);
2925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	}
2935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	test("mod2", function() {
2945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)		mod2(2, 0, "2 % 2 == 0");
2955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)		mod2(3, 1, "3 % 2 == 1");
2965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	})
2975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)})();
2985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)(function() {
3005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	var reset = QUnit.reset;
3015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	function afterTest() {
3025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)		ok( false, "reset should not modify test status" );
3035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	}
3045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	module("reset");
3055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	test("reset runs assertions", function() {
3065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)		QUnit.reset = function() {
3075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)			afterTest();
3085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)			reset.apply( this, arguments );
3095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)		};
3105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	});
3115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	test("reset runs assertions2", function() {
3125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)		QUnit.reset = reset;
3135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	});
3145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)})();
3155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)module("noglobals", {
3175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	teardown: function() {
3185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)		delete window.badGlobalVariableIntroducedInTest;
3195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	}
3205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)});
3215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)test("let teardown clean up globals", function() {
3225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	// this test will always pass if run without ?noglobals=true
3235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	window.badGlobalVariableIntroducedInTest = true;
3245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)});
325