blob: 3877f497bee81efb40a8ce85523978748ca97154 [file] [log] [blame]
simon.fraser@apple.comecc87ce2010-09-28 03:03:33 +00001<!--
2/*
3 * Copyright (C) 2010 Apple Inc. All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 *
14 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
15 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
16 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
17 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
18 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
19 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
20 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
21 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
22 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
23 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
24 * THE POSSIBILITY OF SUCH DAMAGE.
25 */
26-->
27
28<!DOCTYPE html>
29<html>
30 <head>
31 <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
32 <title>CSS 2.1 Test Harness</title>
33 <link rel="stylesheet" href="harness.css" type="text/css" media="screen" charset="utf-8">
34
35 <script src="http://code.jquery.com/jquery-1.4.2.min.js" type="text/javascript" charset="utf-8"></script>
36 <script src="harness.js" type="text/javascript" charset="utf-8"></script>
37
38 <script type="text/javascript" charset="utf-8">
39 var gTestSuite;
40 function setupTests()
41 {
42 gTestSuite = new TestSuite();
43 }
44
45 window.addEventListener('load', setupTests, false);
46
47 function skipTest()
48 {
49 gTestSuite.skipTest(document.getElementById('skip-reason').value);
50 }
51
52 function invalidTest()
53 {
54 gTestSuite.invalidTest();
55 }
56
57 function failTest()
58 {
59 gTestSuite.failTest();
60 }
61
62 function passTest()
63 {
64 gTestSuite.passTest();
65 }
simon.fraser@apple.com150d08d2010-10-01 03:55:48 +000066
67 function goToNextUntested()
68 {
69 gTestSuite.goToNextIncompleteTest();
70 }
simon.fraser@apple.comecc87ce2010-09-28 03:03:33 +000071
simon.fraser@apple.com7b9c7832010-10-03 05:32:18 +000072 function goToTest()
73 {
74 var testName = prompt('Go to test:', '');
75
76 // This accepts any of the following:
77 // at-charset-010
78 // at-charset-010.xht
79 // xhtml1/at-charset-010
80 // xhtml1/at-charset-010.xht
81 // and will choose the format if specified.
82 if (!gTestSuite.goToTestByName(testName))
83 alert('Failed to find test ' + testName);
84 }
85
simon.fraser@apple.comecc87ce2010-09-28 03:03:33 +000086 function formatChanged()
87 {
88 var newFormat;
89 if (document.harness.format.html4.checked)
90 newFormat = 'html4';
91 else
92 newFormat = 'xhtml1';
93 gTestSuite.formatChanged(newFormat);
94 }
95
96 function testSelected()
97 {
98 var list = document.getElementById('test-list')
simon.fraser@apple.com433c4cf72010-09-28 16:49:00 +000099 if (list.selectedIndex >= 0)
100 gTestSuite.goToTestIndex(list.selectedIndex);
101 else
102 gTestSuite.clearTest();
simon.fraser@apple.comecc87ce2010-09-28 03:03:33 +0000103 }
104
105 function resultsPopupChanged(popup)
106 {
107 gTestSuite.resultsPopupChanged(popup.selectedIndex);
108 }
109
110 function doExport()
111 {
112 gTestSuite.exportResults(document.getElementById('results-popup').selectedIndex);
113 }
simon.fraser@apple.com8439d212010-09-30 04:14:42 +0000114
115 function printTestIframe()
116 {
117 var testFrame = document.getElementById('test-frame');
118 testFrame.contentWindow.print();
119 }
simon.fraser@apple.comecc87ce2010-09-28 03:03:33 +0000120
simon.fraser@apple.com5a58f142010-10-02 06:01:29 +0000121 var gOverlayConfirmCallback;
122 function showOverlay(overlayConfirmCallback)
simon.fraser@apple.comecc87ce2010-09-28 03:03:33 +0000123 {
simon.fraser@apple.com5a58f142010-10-02 06:01:29 +0000124 document.getElementById('overlay-data').value = '';
125 gOverlayConfirmCallback = overlayConfirmCallback;
126 $('#overlay').addClass('visible');
127 }
simon.fraser@apple.comecc87ce2010-09-28 03:03:33 +0000128
simon.fraser@apple.com5a58f142010-10-02 06:01:29 +0000129 function overlayCancel()
130 {
131 $('#overlay').removeClass('visible');
simon.fraser@apple.comecc87ce2010-09-28 03:03:33 +0000132 }
133
simon.fraser@apple.com5a58f142010-10-02 06:01:29 +0000134 function overlayConfirm()
135 {
136 var data = document.getElementById('overlay-data').value;
137 gOverlayConfirmCallback(data);
138 $('#overlay').removeClass('visible');
139 }
140
141 function doImport()
142 {
143 document.getElementById('overlay-action').innerText = 'Enter results to import (in the same format as the exported results):';
144 showOverlay(function(data) {
145 gTestSuite.importResults(data);
146 });
147 }
148
149 function doClear()
150 {
151 document.getElementById('overlay-action').innerText = 'Enter list of tests for which to clear results (so they can be re-tested):';
152 showOverlay(function(data) {
153 gTestSuite.clearResults(data);
154 });
155 }
simon.fraser@apple.comecc87ce2010-09-28 03:03:33 +0000156 </script>
157
158</head>
159<body>
160
161 <div class="controls">
162 <form name="harness" onsubmit="return false;">
163 <select id="chapters">
164 <option>Test category</option>
165 </select>
166 <div class="progress">
167 <div><span id="test-index">1</span> of <span id="chapter-test-count">200</span> unique tests</div>
168 </div>
169 <div class="details">
simon.fraser@apple.com150d08d2010-10-01 03:55:48 +0000170 <div class="name">
simon.fraser@apple.comecc87ce2010-09-28 03:03:33 +0000171 <div class="test-type">
172 <input type="radio" name="format" id="html4" onchange="formatChanged()" checked><label for="html4">HTML4</label><br>
173 <input type="radio" name="format" id="xhtml1" onchange="formatChanged()"><label for="xhtml1">XHTML1</label>
174 </div>
simon.fraser@apple.com150d08d2010-10-01 03:55:48 +0000175 <button onclick="goToNextUntested()" accesskey="n"><strong>N</strong>ext Untested</button>
simon.fraser@apple.com7b9c7832010-10-03 05:32:18 +0000176 <button onclick="goToTest()" accesskey="g">Go to Test...</button>
simon.fraser@apple.comecc87ce2010-09-28 03:03:33 +0000177 </div>
178 </div>
179
180 <div>
181 <select id="test-list" size="40" onchange="testSelected()"></select>
182 </div>
183 </form>
184 </div>
185
186 <div class="actions">
187 <span>Skip reason:</span> <input type="text" id="skip-reason" size="50">
simon.fraser@apple.com8439d212010-09-30 04:14:42 +0000188 <button onclick="skipTest()" accesskey="s"><strong>S</strong>kip</button>
189 <div class="note">Use <i>Control-Option-letter</i> to<br> trigger buttons via the keyboard.</div>
simon.fraser@apple.comecc87ce2010-09-28 03:03:33 +0000190 <div class="action-buttons">
191 <button onclick="invalidTest()" accesskey="i">Invalid</button>
simon.fraser@apple.com8439d212010-09-30 04:14:42 +0000192 <button onclick="failTest()" accesskey="f"><strong>F</strong>ail</button>
193 <button onclick="passTest()" accesskey="p"><strong>P</strong>ass</button>
simon.fraser@apple.comecc87ce2010-09-28 03:03:33 +0000194 </div>
195 </div>
196 <div id="test-content">
197 <div class="info">
198 <div class="title">Title: <span id="test-title"></span></div>
199 <div class="url">URL: <span id="test-url"></span></div>
200 <div class="assertion">Assertion: <span id="test-assertion"></span></div>
simon.fraser@apple.com8439d212010-09-30 04:14:42 +0000201 <div class="flags">Flags: <span id="test-flags"></span>
202 <span id="warning">This test must be run over HTTP.</span>
203 <button id="print-button" onclick="printTestIframe()">Print Preview</button>
204 </div>
simon.fraser@apple.comecc87ce2010-09-28 03:03:33 +0000205 </div>
206
207 <div id="test-wrapper" class="frame-wrapper">
208 <h2>Test</h2>
209 <iframe id="test-frame"></iframe>
210 </div>
211 <div id="ref-wrapper" class="frame-wrapper">
212 <h2>Reference</h2>
213 <iframe id="ref-frame"></iframe>
214 </div>
215 </div>
216
217 <div class="results">
simon.fraser@apple.com5a58f142010-10-02 06:01:29 +0000218
simon.fraser@apple.comecc87ce2010-09-28 03:03:33 +0000219 <div class="output-options">
220 <p>Show results for:</p>
221 <select id="results-popup" onchange="resultsPopupChanged(this)">
222 </select>
simon.fraser@apple.com5a58f142010-10-02 06:01:29 +0000223 <div>
224 <button id="export-button" onclick="doExport()">Export...</button>
225 </div>
226
227 <div class="custom">
228 <button id="import-button" onclick="doImport()">Import...</button>
229 <button id="import-button" onclick="doClear()">Clear Results...</button>
230 </div>
simon.fraser@apple.comecc87ce2010-09-28 03:03:33 +0000231 </div>
simon.fraser@apple.com5a58f142010-10-02 06:01:29 +0000232
simon.fraser@apple.comecc87ce2010-09-28 03:03:33 +0000233 <div id="output"></div>
234 <div class="summary">
235 <table>
236 <tr>
237 <th></th><th>Passed</th><th>Failed</th><th>Skipped</th><th>Invalid</th><th>Tested</th><th>Total</th><th>% done</th>
238 </tr>
239 <tr>
240 <td class="label">HTML4:</td><td id="h-passed"></td><td id="h-failed"></td><td id="h-skipped"></td><td id="h-invalid"></td><td id="h-tested"></td><td id="h-total"></td><td id="h-percent"></td>
241 </tr>
242 <tr>
243 <td class="label">XHTML1:</td><td id="x-passed"></td><td id="x-failed"></td><td id="x-skipped"></td><td id="x-invalid"></td><td id="x-tested"></td><td id="x-total"></td><td id="x-percent"></td>
244 </tr>
245 </table>
246 </div>
247 </div>
248
simon.fraser@apple.com5a58f142010-10-02 06:01:29 +0000249 <div id="overlay">
250
251 <div class="overlay-contents">
252 <p id="overlay-action"></p>
253 <textarea id="overlay-data"></textarea>
254 <p class="note">Pasting many lines of text here can be very slow in Safari 5. You can quit Safari and use a <a href="http://nightly.webkit.org/" title="WebKit Nightly Builds">WebKit nightly build</a> for importing or clearing.</p>
255 <div class="buttons">
256 <button onclick="overlayCancel()">Cancel</button><button onclick="overlayConfirm()">OK</button>
257 </div>
258 </div>
259
260 </div>
simon.fraser@apple.comecc87ce2010-09-28 03:03:33 +0000261</body>
262</html>