Move helper files for iOS touch gestures into LayoutTests/resources
[WebKit-https.git] / LayoutTests / resources / testharnessreport.js
1 /*
2  * This file is intended for vendors to implement
3  * code needed to integrate testharness.js tests with their own test systems.
4  *
5  * Typically such integration will attach callbacks when each test is
6  * has run, using add_result_callback(callback(test)), or when the whole test file has
7  * completed, using add_completion_callback(callback(tests, harness_status)).
8  *
9  * For more documentation about the callback functions and the
10  * parameters they are called with see testharness.js
11  */
12
13 // Setup for WebKit JavaScript tests
14 if (self.testRunner) {
15     testRunner.dumpAsText();
16     testRunner.waitUntilDone();
17     testRunner.setCanOpenWindows();
18     testRunner.grantWebNotificationPermission("http://localhost:8800");
19     // Let's restrict calling testharness timeout() to wptserve tests for the moment.
20     // That will limit the impact to a small number of tests.
21     // The risk is that testharness timeout() might be called to late on slow bots to finish properly.
22     if (testRunner.timeout && (location.port == 8800 || location.port == 9443))
23         setTimeout(timeout, testRunner.timeout * 0.9);
24 }
25
26 if (self.internals && internals.setICECandidateFiltering)
27     internals.setICECandidateFiltering(false);
28
29 // Function used to convert the test status code into
30 // the corresponding string
31 function convertResult(resultStatus)
32 {
33     if(resultStatus == 0)
34         return("PASS");
35     else if(resultStatus == 1)
36         return("FAIL");
37     else if(resultStatus == 2)
38         return("TIMEOUT");
39     else
40         return("NOTRUN");
41 }
42
43 if (self.testRunner) {
44     /* Disable the default output of testharness.js.  The default output formats
45     *  test results into an HTML table.  When that table is dumped as text, no
46     *  spacing between cells is preserved, and it is therefore not readable. By
47     *  setting output to false, the HTML table will not be created
48     */
49     setup({"output": false, "explicit_timeout": true});
50
51     /*  Using a callback function, test results will be added to the page in a
52     *   manner that allows dumpAsText to produce readable test results
53     */
54     add_completion_callback(function (tests, harness_status) {
55         var results = document.createElement("pre");
56         var resultStr = "\n";
57
58         // Sanitizes the given text for display in test results.
59         function sanitize(text) {
60             if (!text) {
61                 return "";
62             }
63             text = text.replace(/\0/g, "\\0");
64             return text.replace(/\r/g, "\\r");
65         }
66
67         if(harness_status.status != 0)
68             resultStr += "Harness Error (" + convertResult(harness_status.status) + "), message = " + harness_status.message + "\n\n";
69
70         for (var i = 0; i < tests.length; i++) {
71             var message = sanitize(tests[i].message);
72             if (tests[i].status == 1 && !tests[i].dumpStack) {
73                 // Remove stack for failed tests for proper string comparison without file paths.
74                 // For a test to dump the stack set its dumpStack attribute to true.
75                 var stackIndex = message.indexOf("(stack:");
76                 if (stackIndex > 0)
77                     message = message.substr(0, stackIndex);
78             }
79             resultStr += convertResult(tests[i].status) + " " + sanitize(tests[i].name) + " " + message + "\n";
80         }
81
82         results.innerText = resultStr;
83         var log = document.getElementById("log");
84         if (log)
85             log.appendChild(results);
86         else
87             document.body.appendChild(results);
88
89         // Wait for any other completion callbacks, which may eliminate test elements
90         // from the page and therefore reduce the output.
91         setTimeout(function () {
92             testRunner.notifyDone();
93         }, 0);
94     });
95 }