<!-- /* * 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>