Tizen 2.0 Release
[platform/framework/web/web-ui-fw.git] / libs / js / jquery-mobile-1.2.0 / node_modules / grunt-junit / tasks / qunit / qunit.js
1 /*
2  * grunt
3  * https://github.com/cowboy/grunt
4  *
5  * Copyright (c) 2012 "Cowboy" Ben Alman
6  * Licensed under the MIT license.
7  * http://benalman.com/about/license/
8  */
9
10 var testCases = [], failures = [], moduleName, startTime;
11
12 /*global QUnit:true, alert:true*/
13
14 // Don't re-order tests.
15 QUnit.config.reorder = false;
16 // Run tests serially, not in parallel.
17 QUnit.config.autorun = false;
18
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));
23 }
24
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);
31         // Send it.
32         sendMessage('log', obj.result, actual, expected, obj.message, obj.source);
33
34         if (obj.result) {
35                 return;
36         }
37
38         var message = obj.message || "";
39
40         if (obj.expected) {
41                 if (message.length > 0) {
42                         message += ", ";
43                 }
44                 message += "expected: " + obj.expected + ", but was: " + obj.actual;
45         }
46
47         var xml = '\t<failure type="failed" message="' + xmlEncode(message) + '"></failure>\n';
48
49         failures.push(xml);
50 });
51
52 QUnit.testStart = function(obj) {
53         sendMessage('testStart', obj.name);
54         startTime = new Date();
55 };
56
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" ) : "") +
64                 '\t</testcase>\n';
65
66         failures = [];
67         testCases.push(xml);
68 };
69
70 QUnit.moduleStart = function(obj) {
71         sendMessage('moduleStart', obj.name);
72         moduleName = obj.name;
73 };
74
75 QUnit.moduleDone = function(obj) {
76         sendMessage('moduleDone', obj.name, obj.failed, obj.passed, obj.total);
77 };
78
79 QUnit.begin = function() {
80         sendMessage('begin');
81         sendMessage('xml', '<?xml version="1.0" encoding="UTF-8"?>\n' );
82 };
83
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++) {
87                 xml += testCases[i];
88         }
89
90         xml += '</testsuite>\n';
91         sendMessage( "xml", xml );
92         sendMessage( 'done', obj.failed, obj.passed, obj.total, obj.runtime);
93 };
94
95 function xmlEncode(message) {
96         return message.replace(/\&/g,'&amp;').replace(/</g,'&lt;')
97                 .replace(/>/g,'&gt;').replace(/\'/g,'&apos;').replace(/\"/g,'&quot;');
98 }