// TODO disable reordering for this suite!


var begin = 0,
	moduleStart = 0,
	moduleDone = 0,
	testStart = 0,
	testDone = 0,
	log = 0,
	moduleContext,
	moduleDoneContext,
	testContext,
	testDoneContext,
	logContext;

QUnit.begin = function() {
	begin++;
};
QUnit.done = function() {
};
QUnit.moduleStart = function(context) {
	moduleStart++;
	moduleContext = context;
};
QUnit.moduleDone = function(context) {
	moduleDone++;
	moduleDoneContext = context;
};
QUnit.testStart = function(context) {
	testStart++;
	testContext = context;
};
QUnit.testDone = function(context) {
	testDone++;
	testDoneContext = context;
};
QUnit.log = function(context) {
	log++;
	logContext = context;
};

var logs = ["begin", "testStart", "testDone", "log", "moduleStart", "moduleDone", "done"];
for (var i = 0; i < logs.length; i++) {
	(function() {
		var log = logs[i],
			logger = QUnit[log];
		QUnit[log] = function() {
			console.log(log, arguments);
			logger.apply(this, arguments);
		};
	})();
}

module("logs1");

test("test1", 13, function() {
	equal(begin, 1);
	equal(moduleStart, 1);
	equal(testStart, 1);
	equal(testDone, 0);
	equal(moduleDone, 0);

	deepEqual(logContext, {
		result: true,
		message: undefined,
		actual: 0,
		expected: 0
	});
	equal("foo", "foo", "msg");
	deepEqual(logContext, {
		result: true,
		message: "msg",
		actual: "foo",
		expected: "foo"
	});
	strictEqual(testDoneContext, undefined);
	deepEqual(testContext, {
		name: "test1"
	});
	strictEqual(moduleDoneContext, undefined);
	deepEqual(moduleContext, {
		name: "logs1"
	});

	equal(log, 12);
});
test("test2", 10, function() {
	equal(begin, 1);
	equal(moduleStart, 1);
	equal(testStart, 2);
	equal(testDone, 1);
	equal(moduleDone, 0);

	deepEqual(testDoneContext, {
		name: "test1",
		failed: 0,
		passed: 13,
		total: 13
	});
	deepEqual(testContext, {
		name: "test2"
	});
	strictEqual(moduleDoneContext, undefined);
	deepEqual(moduleContext, {
		name: "logs1"
	});

	equal(log, 22);
});

module("logs2");

test("test1", 9, function() {
	equal(begin, 1);
	equal(moduleStart, 2);
	equal(testStart, 3);
	equal(testDone, 2);
	equal(moduleDone, 1);

	deepEqual(testContext, {
		name: "test1"
	});
	deepEqual(moduleDoneContext, {
		name: "logs1",
		failed: 0,
		passed: 23,
		total: 23
	});
	deepEqual(moduleContext, {
		name: "logs2"
	});

	equal(log, 31);
});
test("test2", 8, function() {
	equal(begin, 1);
	equal(moduleStart, 2);
	equal(testStart, 4);
	equal(testDone, 3);
	equal(moduleDone, 1);

	deepEqual(testContext, {
		name: "test2"
	});
	deepEqual(moduleContext, {
		name: "logs2"
	});

	equal(log, 39);
});
