<!DOCTYPE html>
<!--

Licensed under the Apache License, Version 2.0 (the "License"); you may not use
this file except in compliance with the License. You may obtain a copy of the
License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed
under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
CONDITIONS OF ANY KIND, either express or implied. See the License for the
specific language governing permissions and limitations under the License.

-->
<html lang="en">
  <head>
    <title>Test Suite</title>
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
    <link rel="stylesheet" href="style/layout.css?0.9.0" type="text/css">
    <script src="script/json2.js"></script>
    <script src="script/jquery.js?1.3.1"></script>
    <script src="script/jquery.cookies.js?0.9.0"></script>
    <script src="script/jquery.couch.js?0.9.0"></script>
    <script src="script/couch.js?0.9.0"></script>
    <script src="script/futon.js?0.9.0"></script>
    <script src="script/couch_test_runner.js"></script>
    <script>
      $(function() {
        updateTestsListing();
        $("#toolbar button.run").click(runAllTests);
        $("#toolbar button.load").click(function() {
          location.reload(true);
        });
        $("#toolbar button.add").click(function() {
          location = "custom_test.html";
        });
      });
      var testsPath = document.location.toString().split('?')[1];
      loadScript(testsPath||"script/couch_tests.js")
    </script>
  </head>
  <body><div id="wrap">
    <h1>
      <a href="index.html">Overview</a>
      <strong>Test Suite</strong>
    </h1>
    <div id="content">
      <ul id="toolbar">
        <li><button class="run">Run All</button></li>
        <li><button class="load">Reload</button></li>
        <li><button class="add">Custom Test</button></li>
      </ul>
      <p class="help">
        <strong>Note:</strong> Each of the tests will block the browser. If the
        connection to your CouchDB server is slow, running the tests will take
        some time, and you'll not be able to do much with your browser while
        a test is being executed.
      </p>

      <table class="listing" id="tests" cellspacing="0">
        <caption>Tests</caption>
        <thead>
          <tr>
            <th class="name">Name</th>
            <th class="status">Status</th>
            <th class="duration">Elapsed Time</th>
            <th class="details">Details</th>
          </tr>
        </thead>
        <tbody class="content">
        </tbody>
        <tbody class="footer">
          <tr>
            <td colspan="4"></td>
          </tr>
        </tbody>
      </table>

    </div>
  </div></body>
</html>
