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