| <!-- |
| /* |
| * Copyright (C) 2010 Apple Inc. All rights reserved. |
| * |
| * Redistribution and use in source and binary forms, with or without |
| * modification, are permitted provided that the following conditions |
| * are met: |
| * 1. Redistributions of source code must retain the above copyright |
| * notice, this list of conditions and the following disclaimer. |
| * 2. Redistributions in binary form must reproduce the above copyright |
| * notice, this list of conditions and the following disclaimer in the |
| * documentation and/or other materials provided with the distribution. |
| * |
| * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' |
| * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, |
| * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
| * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS |
| * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
| * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
| * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
| * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
| * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
| * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF |
| * THE POSSIBILITY OF SUCH DAMAGE. |
| */ |
| --> |
| |
| <!DOCTYPE html> |
| <html> |
| <head> |
| <meta http-equiv="content-type" content="text/html; charset=UTF-8" /> |
| <title>CSS 2.1 Test Harness</title> |
| <link rel="stylesheet" href="harness.css" type="text/css" media="screen" charset="utf-8"> |
| |
| <script src="http://code.jquery.com/jquery-1.4.2.min.js" type="text/javascript" charset="utf-8"></script> |
| <script src="harness.js" type="text/javascript" charset="utf-8"></script> |
| |
| <script type="text/javascript" charset="utf-8"> |
| var gTestSuite; |
| function setupTests() |
| { |
| gTestSuite = new TestSuite(); |
| } |
| |
| window.addEventListener('load', setupTests, false); |
| |
| function skipTest() |
| { |
| gTestSuite.skipTest(document.getElementById('skip-reason').value); |
| } |
| |
| function invalidTest() |
| { |
| gTestSuite.invalidTest(); |
| } |
| |
| function failTest() |
| { |
| gTestSuite.failTest(); |
| } |
| |
| function passTest() |
| { |
| gTestSuite.passTest(); |
| } |
| |
| function goToNextUntested() |
| { |
| gTestSuite.goToNextIncompleteTest(); |
| } |
| |
| function goToTest() |
| { |
| var testName = prompt('Go to test:', ''); |
| |
| // This accepts any of the following: |
| // at-charset-010 |
| // at-charset-010.xht |
| // xhtml1/at-charset-010 |
| // xhtml1/at-charset-010.xht |
| // and will choose the format if specified. |
| if (!gTestSuite.goToTestByName(testName)) |
| alert('Failed to find test ' + testName); |
| } |
| |
| function formatChanged() |
| { |
| var newFormat; |
| if (document.harness.format.html4.checked) |
| newFormat = 'html4'; |
| else |
| newFormat = 'xhtml1'; |
| gTestSuite.formatChanged(newFormat); |
| } |
| |
| function testSelected() |
| { |
| var list = document.getElementById('test-list') |
| if (list.selectedIndex >= 0) |
| gTestSuite.goToTestIndex(list.selectedIndex); |
| else |
| gTestSuite.clearTest(); |
| } |
| |
| function resultsPopupChanged(popup) |
| { |
| gTestSuite.resultsPopupChanged(popup.selectedIndex); |
| } |
| |
| function doExport() |
| { |
| gTestSuite.exportResults(document.getElementById('results-popup').selectedIndex); |
| } |
| |
| function printTestIframe() |
| { |
| var testFrame = document.getElementById('test-frame'); |
| testFrame.contentWindow.print(); |
| } |
| |
| var gOverlayConfirmCallback; |
| function showOverlay(overlayConfirmCallback) |
| { |
| document.getElementById('overlay-data').value = ''; |
| gOverlayConfirmCallback = overlayConfirmCallback; |
| $('#overlay').addClass('visible'); |
| } |
| |
| function overlayCancel() |
| { |
| $('#overlay').removeClass('visible'); |
| } |
| |
| function overlayConfirm() |
| { |
| var data = document.getElementById('overlay-data').value; |
| gOverlayConfirmCallback(data); |
| $('#overlay').removeClass('visible'); |
| } |
| |
| function doImport() |
| { |
| document.getElementById('overlay-action').innerText = 'Enter results to import (in the same format as the exported results):'; |
| showOverlay(function(data) { |
| gTestSuite.importResults(data); |
| }); |
| } |
| |
| function doClear() |
| { |
| document.getElementById('overlay-action').innerText = 'Enter list of tests for which to clear results (so they can be re-tested):'; |
| showOverlay(function(data) { |
| gTestSuite.clearResults(data); |
| }); |
| } |
| </script> |
| |
| </head> |
| <body> |
| |
| <div class="controls"> |
| <form name="harness" onsubmit="return false;"> |
| <select id="chapters"> |
| <option>Test category</option> |
| </select> |
| <div class="progress"> |
| <div><span id="test-index">1</span> of <span id="chapter-test-count">200</span> unique tests</div> |
| </div> |
| <div class="details"> |
| <div class="name"> |
| <div class="test-type"> |
| <input type="radio" name="format" id="html4" onchange="formatChanged()" checked><label for="html4">HTML4</label><br> |
| <input type="radio" name="format" id="xhtml1" onchange="formatChanged()"><label for="xhtml1">XHTML1</label> |
| </div> |
| <button onclick="goToNextUntested()" accesskey="n"><strong>N</strong>ext Untested</button> |
| <button onclick="goToTest()" accesskey="g">Go to Test...</button> |
| </div> |
| </div> |
| |
| <div> |
| <select id="test-list" size="40" onchange="testSelected()"></select> |
| </div> |
| </form> |
| </div> |
| |
| <div class="actions"> |
| <span>Skip reason:</span> <input type="text" id="skip-reason" size="50"> |
| <button onclick="skipTest()" accesskey="s"><strong>S</strong>kip</button> |
| <div class="note">Use <i>Control-Option-letter</i> to<br> trigger buttons via the keyboard.</div> |
| <div class="action-buttons"> |
| <button onclick="invalidTest()" accesskey="i">Invalid</button> |
| <button onclick="failTest()" accesskey="f"><strong>F</strong>ail</button> |
| <button onclick="passTest()" accesskey="p"><strong>P</strong>ass</button> |
| </div> |
| </div> |
| <div id="test-content"> |
| <div class="info"> |
| <div class="title">Title: <span id="test-title"></span></div> |
| <div class="url">URL: <span id="test-url"></span></div> |
| <div class="assertion">Assertion: <span id="test-assertion"></span></div> |
| <div class="flags">Flags: <span id="test-flags"></span> |
| <span id="warning">This test must be run over HTTP.</span> |
| <button id="print-button" onclick="printTestIframe()">Print Preview</button> |
| </div> |
| </div> |
| |
| <div id="test-wrapper" class="frame-wrapper"> |
| <h2>Test</h2> |
| <iframe id="test-frame"></iframe> |
| </div> |
| <div id="ref-wrapper" class="frame-wrapper"> |
| <h2>Reference</h2> |
| <iframe id="ref-frame"></iframe> |
| </div> |
| </div> |
| |
| <div class="results"> |
| |
| <div class="output-options"> |
| <p>Show results for:</p> |
| <select id="results-popup" onchange="resultsPopupChanged(this)"> |
| </select> |
| <div> |
| <button id="export-button" onclick="doExport()">Export...</button> |
| </div> |
| |
| <div class="custom"> |
| <button id="import-button" onclick="doImport()">Import...</button> |
| <button id="import-button" onclick="doClear()">Clear Results...</button> |
| </div> |
| </div> |
| |
| <div id="output"></div> |
| <div class="summary"> |
| <table> |
| <tr> |
| <th></th><th>Passed</th><th>Failed</th><th>Skipped</th><th>Invalid</th><th>Tested</th><th>Total</th><th>% done</th> |
| </tr> |
| <tr> |
| <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> |
| </tr> |
| <tr> |
| <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> |
| </tr> |
| </table> |
| </div> |
| </div> |
| |
| <div id="overlay"> |
| |
| <div class="overlay-contents"> |
| <p id="overlay-action"></p> |
| <textarea id="overlay-data"></textarea> |
| <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> |
| <div class="buttons"> |
| <button onclick="overlayCancel()">Cancel</button><button onclick="overlayConfirm()">OK</button> |
| </div> |
| </div> |
| |
| </div> |
| </body> |
| </html> |