[css-grid] Scroll reset position when updating inner html on content
[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     // Make WebAudio map to webkitWebAudio for WPT tests
26     if (location.port == 8800 || location.port == 9443) {
27         self.AudioContext = self.webkitAudioContext;
28         self.OfflineAudioContext = self.webkitOfflineAudioContext;
29     }
30 }
31
32 if (self.internals && internals.setICECandidateFiltering)
33     internals.setICECandidateFiltering(false);
34
35 // Function used to convert the test status code into
36 // the corresponding string
37 function convertResult(resultStatus)
38 {
39     if(resultStatus == 0)
40         return("PASS");
41     else if(resultStatus == 1)
42         return("FAIL");
43     else if(resultStatus == 2)
44         return("TIMEOUT");
45     else
46         return("NOTRUN");
47 }
48
49 if (self.testRunner) {
50     /* Disable the default output of testharness.js.  The default output formats
51     *  test results into an HTML table.  When that table is dumped as text, no
52     *  spacing between cells is preserved, and it is therefore not readable. By
53     *  setting output to false, the HTML table will not be created
54     */
55     setup({"output": false, "explicit_timeout": true});
56
57     /*  Using a callback function, test results will be added to the page in a
58     *   manner that allows dumpAsText to produce readable test results
59     */
60     add_completion_callback(function (tests, harness_status) {
61         var results = document.createElement("pre");
62         var resultStr = "\n";
63
64         // Sanitizes the given text for display in test results.
65         function sanitize(text) {
66             if (!text) {
67                 return "";
68             }
69             text = text.replace(/\0/g, "\\0");
70             return text.replace(/\r/g, "\\r");
71         }
72
73         if(harness_status.status != 0)
74             resultStr += "Harness Error (" + convertResult(harness_status.status) + "), message = " + harness_status.message + "\n\n";
75
76         for (var i = 0; i < tests.length; i++) {
77             var message = sanitize(tests[i].message);
78             if (tests[i].status == 1 && !tests[i].dumpStack) {
79                 // Remove stack for failed tests for proper string comparison without file paths.
80                 // For a test to dump the stack set its dumpStack attribute to true.
81                 var stackIndex = message.indexOf("(stack:");
82                 if (stackIndex > 0)
83                     message = message.substr(0, stackIndex);
84             }
85             resultStr += convertResult(tests[i].status) + " " + sanitize(tests[i].name) + " " + message + "\n";
86         }
87
88         results.innerText = resultStr;
89         var log = document.getElementById("log");
90         if (log)
91             log.appendChild(results);
92         else
93             document.body.appendChild(results);
94
95         // Wait for any other completion callbacks, which may eliminate test elements
96         // from the page and therefore reduce the output.
97         setTimeout(function () {
98             testRunner.notifyDone();
99         }, 0);
100     });
101 }