aboutsummaryrefslogtreecommitdiffstats
path: root/tests/unit/qunit-composite.js
blob: 2e5454056a4e0a16f4531aed217304b58e1d0879 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
(function( QUnit ) {

QUnit.extend( QUnit, {
	testSuites: function( suites ) {
		QUnit.begin(function() {
			QUnit.initIframe();
		});

		for ( var i = 0; i < suites.length; i++ ) {
			QUnit.runSuite( suites[i] );
		}

		QUnit.done(function() {
			this.iframe.style.display = "none";
		});
	},

	runSuite: function( suite ) {
		var path = suite;

		if ( QUnit.is( "object", suite ) ) {
			path = suite.path;
			suite = suite.name;
		}

		asyncTest( suite, function() {
			QUnit.iframe.setAttribute( "src", path );
		});
	},

	initIframe: function() {
		var body = document.body,
			iframe = this.iframe = document.createElement( "iframe" ),
			iframeWin;

		iframe.className = "qunit-subsuite";
		body.appendChild( iframe );

		function onIframeLoad() {
			var module, test,
				count = 0;

			if (iframe.src === "") {
				return;
			}

			iframeWin.QUnit.moduleStart(function( data ) {
				// capture module name for messages
				module = data.name;
			});

			iframeWin.QUnit.testStart(function( data ) {
				// capture test name for messages
				test = data.name;
			});
			iframeWin.QUnit.testDone(function() {
				test = null;
			});

			iframeWin.QUnit.log(function( data ) {
				if (test === null) {
					return;
				}
				// pass all test details through to the main page
				var message = module + ": " + test + ": " + data.message;
				expect( ++count );
				QUnit.push( data.result, data.actual, data.expected, message );
			});

			iframeWin.QUnit.done(function() {
				// start the wrapper test from the main page
				start();
			});
		}
		QUnit.addEvent( iframe, "load", onIframeLoad );

		iframeWin = iframe.contentWindow;
	}
});

QUnit.testStart(function( data ) {
	// update the test status to show which test suite is running
	QUnit.id( "qunit-testresult" ).innerHTML = "Running " + data.name + "...<br>&nbsp;";
});

QUnit.testDone(function() {
	var i,
		current = QUnit.id( this.config.current.id ),
		children = current.children,
		src = this.iframe.src;

	// undo the auto-expansion of failed tests
	for ( i = 0; i < children.length; i++ ) {
		if ( children[i].nodeName === "OL" ) {
			children[i].style.display = "none";
		}
	}

	QUnit.addEvent(current, "dblclick", function( e ) {
		var target = e && e.target ? e.target : window.event.srcElement;
		if ( target.nodeName.toLowerCase() === "span" || target.nodeName.toLowerCase() === "b" ) {
			target = target.parentNode;
		}
		if ( window.location && target.nodeName.toLowerCase() === "strong" ) {
			window.location = src;
		}
	});

	current.getElementsByTagName("a")[0].href = src;
});

}( QUnit ) );