3 * https://github.com/cowboy/grunt
5 * Copyright (c) 2012 "Cowboy" Ben Alman
6 * Licensed under the MIT license.
7 * http://benalman.com/about/license/
10 var testCases = [], failures = [], moduleName, startTime;
12 /*global QUnit:true, alert:true*/
14 // Don't re-order tests.
15 QUnit.config.reorder = false;
16 // Run tests serially, not in parallel.
17 QUnit.config.autorun = false;
19 // Send messages to the parent zombie.js process via alert! Good times!!
20 function sendMessage() {
21 var args = [].slice.call(arguments);
22 alert(JSON.stringify(args));
25 QUnit.log(function(obj) {
26 // What is this I don’t even
27 if (obj.message === '[object Object], undefined:undefined') { return; }
28 // Parse some stuff before sending it.
29 var actual = QUnit.jsDump.parse(obj.actual);
30 var expected = QUnit.jsDump.parse(obj.expected);
32 sendMessage('log', obj.result, actual, expected, obj.message, obj.source);
38 var message = obj.message || "";
41 if (message.length > 0) {
44 message += "expected: " + obj.expected + ", but was: " + obj.actual;
47 var xml = '\t<failure type="failed" message="' + xmlEncode(message) + '"></failure>\n';
52 QUnit.testStart = function(obj) {
53 sendMessage('testStart', obj.name);
54 startTime = new Date();
57 QUnit.testDone = function(obj) {
58 sendMessage('testDone', obj.name, obj.failed, obj.passed, obj.total);
59 var xml = '\t<testcase classname="' + (moduleName || "jquery.mobile") + '" ' +
60 'name="' + xmlEncode(obj.name) + '" ' +
61 'time="' + ((new Date()) - startTime)/1000 + '" ' +
62 'assertions="' + obj.total + '">\n' +
63 (failures.length ? '\t\t' + failures.join( "\n\t\t" ) : "") +
70 QUnit.moduleStart = function(obj) {
71 sendMessage('moduleStart', obj.name);
72 moduleName = obj.name;
75 QUnit.moduleDone = function(obj) {
76 sendMessage('moduleDone', obj.name, obj.failed, obj.passed, obj.total);
79 QUnit.begin = function() {
81 sendMessage('xml', '<?xml version="1.0" encoding="UTF-8"?>\n' );
84 QUnit.done = function(obj) {
85 var xml = '<testsuite name="'+ obj.name +'" errors="0" failures="'+obj.failed+'" tests="'+obj.total+'" time="'+(new Date() - new Date())/1000+'" >\n';
86 for (var i=0; i<testCases.length; i++) {
90 xml += '</testsuite>\n';
91 sendMessage( "xml", xml );
92 sendMessage( 'done', obj.failed, obj.passed, obj.total, obj.runtime);
95 function xmlEncode(message) {
96 return message.replace(/\&/g,'&').replace(/</g,'<')
97 .replace(/>/g,'>').replace(/\'/g,''').replace(/\"/g,'"');