﻿<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
  <head>
    <title>Test</title>
    <script type='text/javascript' language="javascript" src='jquery.js'></script>
    <script type='text/javascript' language="javascript">
    <!--

    function mbox() {
      alert('Javascript OK');
    }


    var totalCount = 10;
    var pendingCount = 0;
    var errorCount = 0;
    var pushCount = 0;
    var allErrorCount = 0;
    var autoTest = false;
    var testType = "cgi";

    function NextTestType() {
      if (testType == "cgi") testType = "lp";
      else if (testType == "lp") testType = "lua";
      else testType = "cgi";
    }

    function runTest(method, isAsync) {

      ++pushCount;
      document.getElementById('start').innerHTML = 'Test: ' + pushCount;
      document.getElementById('resTotal').innerHTML = 'running';

      for (var i = 1; i <= totalCount; ++i) {
        document.getElementById('res'+i).innerHTML = "ready";
      }

      errorCount = 0;
      pendingCount = totalCount;

      for (var i = 1; i <= totalCount; ++i) {

        fetch(i,  method, isAsync);
      }
    }
    
    function runAutoTest() {
      if (autoTest) {
        runTest("POST", true)
        setTimeout("runAutoTest()", 250)
      }
    }


    function fetch(id, method, isAsync) {

      document.getElementById('res'+id).innerHTML = "pending";

      $.ajax({
        async: isAsync,
        url: 'echo.' + testType + '?id=' + id,
        type: method,
        timeout: 2000,
        data: { 'id' : id ,
                'longText1' : "adfsdfasdklkjlgasfdfjkhq345sdafbmkanq3trsdghkjqw4etrjlkabsdfkabvauiregtlkjasdbvabl4btrjawebbfjsdhbjk342r5bjksdbfkljbhasdfbhj234qjhasdg76k11234jhv900adfasddsfmzasdfhjgajsvhgkjhasdf77aefcae4fkjzasdfgukeaf7dkkegasdfigjcvxgui",
                'longText2' : "bsdfsdfasdklkjlgasdfjkhq345sdafbmkanq3trsdghkjqw4etrjlkabsdfkabvauiregtlkjasdbvabl4btrjawebbfjsdhbjk342r5bjksdbfkljbhasdfbhj234qjhasdg76k11234jhv900adfasddsfmzasdfhjgajsvhgkjhasdf77aefcae4fkjzasdfgukeaf7dkkegasdfigjcvxgui",
                'longText3' : "sdfsadagsdklkjlgasdfjkhq345sdafbmkanq3trsdghkjqw4etrjlkabsdfkabvauiregtlkjasdbvabl4btrjawebbfjsdhbjk342r5bjksdbfkljbhasdfbhj234qjhasdg76k11234jhv900adfasddsfmzasdfhjgajsvhgkjhasdf77aefcae4fkjzasdfgukeaf7dkkegasdfigjcvxgui",
                'longText4' : "q34sdfas3fhbkjlgasdfjkhq345sdafbmkanq3trsdghkjqw4etrjlkabsdfkabvauiregtlkjasdbvabl4btrjawebbfjsdhbjk342r5bjksdbfkljbhasdfbhj234qjhasdg76k11234jhv900adfasddsfmzasdfhjgajsvhgkjhasdf77aefcae4fkjzasdfgukeaf7dkkegasdfigjcvxgui",
                'longText5' : "askj2kjcvxychklgasdfjkhq345sdafbmkanq3trsdghkjqw4etrjlkabsdfkabvauiregtlkjasdbvabl4btrjawebbfjsdhbjk342r5bjksdbfkljbhasdfbhj234qjhasdg76k11234jhv900adfasddsfmzasdfhjgajsvhgkjhasdf77aefcae4fkjzasdfgukeaf7dkkegasdfigjcvxgui",
                'longText6' : "asdfjklhlkjhv8öajsdfjkhq345sdafbmkanq3trsdghkjqw4etrjlkabsdfkabvauiregtlkjasdbvabl4btrjawebbfjsdhbjk342r5bjksdbfkljbhasdfbhj234qjhasdg76k11234jhv900adfasddsfmzasdfhjgajsvhgkjhasdf77aefcae4fkjzasdfgukeaf7dkkegasdfigjcvxgui",
                'async' : isAsync
              },
        dataType: 'json',
        succes: function(data) {
        },
        error: function() {
          ++errorCount;
        },
        complete: function(jqXHR, textStatus) {

          --pendingCount;

          document.getElementById('res'+id).innerHTML = textStatus;
          console.log('id: ' + id + ' (' + pendingCount + '/' + totalCount + '), status: ' + textStatus);

          if (pendingCount == 0) {
            document.getElementById('resTotal').innerHTML = 'done';
            console.log('complete, error count: ' + errorCount);
            allErrorCount = allErrorCount + errorCount;
            document.getElementById('resSAll').innerHTML = 'total errors: ' + allErrorCount + "/" + (pushCount*totalCount);
          }
        }
      });

    }


    //-->
    </script>

  </head>
  <body>
    <p>
      <div id="start">Test not started.</div>
    </p>
    <p>
      <table>
        <tr>
          <td>
            <input id="testButton1" type="button" onclick="javascript:runTest('GET', false)" value="sync GET"></input>
          </td>
          <td>
            <input id="testButton2" type="button" onclick="javascript:runTest('POST', false)" value="sync POST"></input>
          </td>
        </tr>
        <tr>
          <td>
            <input id="testButton3" type="button" onclick="javascript:runTest('GET', true)" value="async GET"></input>
          </td>
          <td>
            <input id="testButton4" type="button" onclick="javascript:runTest('POST', true)" value="async POST"></input>
          </td>
        </tr>
        <tr>
          <td>
            <input id="testButton5" type="button" onclick="autoTest=!autoTest; javascript:runAutoTest()" value="automatic test"></input>
          </td>        
          <td>
            <input id="testButton6" type="button" onclick="NextTestType(); this.value=testType" value='cgi'></input>
          </td>        
        </tr>
        
        <tr>
          <td>
            <input id="testButtonReset" type="button" onclick="autoTest=false; javascript:location.reload(true)" value="reset"></input>
          </td>
          <td>
            <input id="testButtonBack" type="button" onclick="history.back()" value="back"></input>
          </td>
        </tr>
        <tr>
          <td>
            <input id="testButtonBox" type="button" onclick="javascript:mbox()" value="MsgBox"></input>            
          </td>
          <td>
          </td>
        </tr>
      </table>
    </p>
    <p>
      <table border="1">
        <tr><th>Test</th><th>Result</th></tr>
        <tr><td>1</td><td><div id="res1">not started</div></td></tr>
        <tr><td>2</td><td><div id="res2">not started</div></td></tr>
        <tr><td>3</td><td><div id="res3">not started</div></td></tr>
        <tr><td>4</td><td><div id="res4">not started</div></td></tr>
        <tr><td>5</td><td><div id="res5">not started</div></td></tr>
        <tr><td>6</td><td><div id="res6">not started</div></td></tr>
        <tr><td>7</td><td><div id="res7">not started</div></td></tr>
        <tr><td>8</td><td><div id="res8">not started</div></td></tr>
        <tr><td>9</td><td><div id="res9">not started</div></td></tr>
        <tr><td>10</td><td><div id="res10">not started</div></td></tr>
      </table>
      <div id="resTotal">Push [Test] to start.</div>
      <div id="resSAll"></div>
    </p>
  </body>
</html>
