2002/css-validator/autotest/client buildtest.js,NONE,1.1 checktests.js,NONE,1.1 functions.js,NONE,1.1 sample.html,NONE,1.1

Update of /sources/public/2002/css-validator/autotest/client
In directory hutz:/tmp/cvs-serv15220

Added Files:
	buildtest.js checktests.js functions.js sample.html 
Log Message:
pre-pre-pre-pre alpha verison of automated test

--- NEW FILE: sample.html ---
<html>
  <head>
    <style type="text/css">
      .valid { 
	  background-color: #7f7;
      }
      .invalid { 
	  background-color: #f77;
      }
      table {
	  border-width: 2px; 
	  border-color: black;
	  border-style: solid;
	  border-spacing: 0;
	  border-collapse: collapse;
      }
      th, td {
	  border-width: 2px 1px 2px 1px;
	  border-color: black;
	  border-style: solid;
	  margin: 0px;
	  text-align: center;
	  vertical-align: center;
      }
    </style>
    <script type="text/javascript" src="functions.js"></script>
    <script type="text/javascript" src="checktests.js"></script>
    <script type="text/javascript" src="buildtest.js"></script>
  </head>
  <body>
    <div id="tableanchor">
      <p onclick="getTestList('http://jigsaw.w3.org/css-validator/autotest/testsuite/xml/bugs.xml')">Create Test Table for Bugs</p>
      <p onclick="getTestList('http://jigsaw.w3.org/css-validator/autotest/testsuite/xml/general.xml')">Create Test Table for General</p>
      <p onclick="getTestList('http://jigsaw.w3.org/css-validator/autotest/testsuite/xml/propertiesCSS2.xml')">Create Test Table for CSS2</p>
    </div>
    </div>
  </body>
</html>

--- NEW FILE: functions.js ---
function urlencode(raw) {
    raw = escape(raw);
    raw = raw.replace(/\+/g, '%2B');
    raw = raw.replace(/\*/g, '%2A');
    raw = raw.replace(/\//g, '%2F');
    raw = raw.replace(/@/g, '%40');
    return raw;
}
--- NEW FILE: buildtest.js ---
function getTestList(e) {
    var xmlhttp = new XMLHttpRequest();
//    xmlhttp.open("GET", "/css-validator/autotest/testsuite/xml/"+
//		 "bugs.xml",false);
    xmlhttp.open("GET", e, false);
    //    xmlhttp.setRequestHeader('Accept','application/json')
    //   xmlhttp.onreadystatechange=function() {
    //	if (xmlhttp.readyState==4) {
    //	    checkResults(testrow, resultrow, xmlhttp);
    //	}
    //    }
    xmlhttp.send(null);
    generateTestTable(xmlhttp);
}

// generate the table with the first row
// parameter the id of the table created
// the table is as follow:
// <table id="tableid">
//   <tr>
//     [0] <th>Test Case</th>
//     [1] <th>Profile</th>
//     [2] <th>Validity</th> (expected)
//     [3] <th>Errors</th> (int) (FIXME or "-" ? ) (expected)
//     [4] <th>Warnings</th> (int, expected).
//   </tr>
function createTableFromID(tableid) {
    var table = document.createElement("table");
    table.setAttribute("id", tableid);
    table.setAttribute("border", "2");
    
    var tr = document.createElement("tr");
    // first row
    var cell =  document.createElement("th");
    var tnode =  document.createTextNode("Test Case: "+tableid+" ");
    cell.appendChild(tnode);
    var anc = document.createElement("a");
    anc.setAttribute("href", "javascript:gogo('"+tableid+"')");
    tnode =  document.createTextNode("[check]");
    anc.appendChild(tnode);
    cell.appendChild(anc);
    tnode =  document.createTextNode(" ");
    cell.appendChild(tnode);
    anc = document.createElement("a");
    anc.setAttribute("href", "javascript:resetresults('"+tableid+"')");
    tnode =  document.createTextNode("[reset]");
    anc.appendChild(tnode);
    cell.appendChild(anc);
    tr.appendChild(cell);

    cell =  document.createElement("th");
    tnode =  document.createTextNode("Profile");
    cell.appendChild(tnode);
    tr.appendChild(cell);

    cell =  document.createElement("th");
    tnode =  document.createTextNode("Validity");
    cell.appendChild(tnode);
    tr.appendChild(cell);

    cell =  document.createElement("th");
    tnode =  document.createTextNode("Errors");
    cell.appendChild(tnode);
    tr.appendChild(cell);

    cell =  document.createElement("th");
    tnode =  document.createTextNode("Warnings");
    cell.appendChild(tnode);
    tr.appendChild(cell);
    table.appendChild(tr);

    return table;
}

function getTestTable(typetag) {
    var tableId = "default";
    if (typetag) {
	tableId = typetag.getAttribute("title");
    }
    var table = document.getElementById(tableId);
    if (!table) {
	table = createTableFromID(tableId);
	var tableanchor = document.getElementById("tableanchor");
	tableanchor.appendChild(table);
    }
    // and attach the newly created table at the right place
    return table;
}

function generateTestTable(req) {
    var testxml = req.responseXML;
    var allTypes = testxml.getElementsByTagName("type");
    // for each <type title="foo"> get the table, find test
    // and add them
    for (var i=0; i<allTypes.length; i++) {
	var testTable = getTestTable(allTypes[i]);
	var allTests = allTypes[i].getElementsByTagName("test");
	fillTableWithTests(testxml.documentURI, testTable, allTests);
    }
}

function fillTableWithTests(baseuri, table, allTests) {
    var base_uri = baseuri.substring(0, baseuri.lastIndexOf("css-validator/autotest")) + "css-validator/autotest";
    var validator_uri = baseuri.substring(0, baseuri.lastIndexOf("css-validator/autotest")) + "css-validator/"
    for (var i=0; i<allTests.length; i++) {
	var indivTest = allTests[i];
	// check the profile
	var cssprofile = "css21";
	if (indivTest.hasAttribute("profile")) {
	    cssprofile = indivTest.getAttribute("profile");
	}
	// and the test case local file... or URI.
	var testfile = indivTest.getElementsByTagName("file");
	if (testfile.length != 0) {
	    testfile = base_uri + "/" + testfile[0].firstChild.data;
	} else {
	    testfile = (indivTest.getElementsByTagName("url"))[0].firstChild.data;
	}
	// the description, if any
	var testdesc = indivTest.getElementsByTagName("description");
	if (testdesc.length != 0) {
	    testdesc = testdesc[0].firstChild.data;
	} else {
	    testdesc = "No Description";
	}
	// validity
	var validity = (indivTest.getElementsByTagName("result"))[0].getAttribute("valid");
	// expected errors
	var nberrors = indivTest.getElementsByTagName("errors");
	if (nberrors.length != 0) {
	    nberrors = nberrors[0].firstChild.data;
	} else {
	    nberrors = 0;
	}
	
	// expected warnings.
	var nbwarnings = indivTest.getElementsByTagName("warnings");
	if(nbwarnings.length != 0) {
	    nbwarnings = nbwarnings[0].firstChild.data;
	} else {
	    nbwarnings = 0;
	}
	// now create the TR
	// will be
	// <tr>
	//   [0]<td rowspan="2"> 
	//       <a href="<testcase uri>">[Testcase]</a>
	//       <a href="<result page>">[Results]</a>
	//       <p>description</p>
	//      </td>
	//  [1]<td rowspan="2">profile</td>
	//  [2]<td>validity</td>
	//  [3]<td>errors</td>
	//  [4]<td>warnings</td>
	// </tr>
	var tr = document.createElement("tr");
	tr.setAttribute("class", "expected");
	
	var cell = document.createElement("td");
	cell.setAttribute("rowspan","2");
	var anc =  document.createElement("a");
	anc.setAttribute("href",testfile);
	var text = document.createTextNode("[Testcase]");
	anc.appendChild(text);
	cell.appendChild(anc);

	text = document.createTextNode(" - ");
	cell.appendChild(text);
	
	anc =  document.createElement("a");
	var checkuri = validator_uri+"validator?uri="+
	    urlencode(testfile)+"&profile="+
	    cssprofile+"&usermedium=all&warning=1"; 
	// FIXME medium, warning level
	anc.setAttribute("href",checkuri);
	text = document.createTextNode("[Result]");
	anc.appendChild(text);
	cell.appendChild(anc);
	
	anc =  document.createElement("p");
	anc.innerHTML = testdesc;
	cell.appendChild(anc);
	tr.appendChild(cell);

	cell = document.createElement("td");
	cell.setAttribute("rowspan","2");
	text = document.createTextNode(cssprofile);
	cell.appendChild(text);
	tr.appendChild(cell);

	cell = document.createElement("td");
	text = document.createTextNode(validity);
	cell.appendChild(text);
	tr.appendChild(cell);

	cell = document.createElement("td");
	text = document.createTextNode(nberrors);
	cell.appendChild(text);
	tr.appendChild(cell);

	cell = document.createElement("td");
	text = document.createTextNode(nbwarnings);
	cell.appendChild(text);
	tr.appendChild(cell);

        var result_row = getResultRow();
	table.appendChild(result_row);
	table.insertBefore(tr,result_row);
    }
}

function getResultRow() {
    var tr = document.createElement("tr");
    tr.setAttribute("class", "result");
    var cell = document.createElement("td");
    var text = document.createTextNode("-");
    cell.appendChild(text);
    tr.appendChild(cell);

    cell = document.createElement("td");
    text = document.createTextNode("-");
    cell.appendChild(text);
    tr.appendChild(cell);

    cell = document.createElement("td");
    text = document.createTextNode("-");
    cell.appendChild(text);
    tr.appendChild(cell);

    return tr;
}

--- NEW FILE: checktests.js ---
function checkResults(testrow, resultrow, req) {
    var allTestTds = testrow.getElementsByTagName("td");
    var allTds = resultrow.getElementsByTagName("td");
    
    var validation_res = eval('(' + req.responseText + ')');
    var gotRegression = false;
    
    allTds[0].removeChild(allTds[0].firstChild);
    allTds[0].appendChild(document.createTextNode(validation_res.cssvalidation.validity));
    var isValid = new Boolean(validation_res.cssvalidation.validity);
    var validExpected = (allTestTds[2].innerHTML == "true");
    if (validExpected == validation_res.cssvalidation.validity) {
	allTds[0].setAttribute("class", "valid");
    } else {
	allTds[0].setAttribute("class", "invalid");
	gotRegression = true;
    }

    var errorsExpected = parseInt(allTestTds[3].innerHTML,10);
    allTds[1].innerHTML = validation_res.cssvalidation.result.errorcount;
    if ( errorsExpected == validation_res.cssvalidation.result.errorcount) {
	allTds[1].setAttribute("class", "valid");
    } else {
	allTds[1].setAttribute("class", "invalid");
	gotRegression = true;
    }
    
    var warningsExpected = parseInt(allTestTds[4].innerHTML,10);
    allTds[2].innerHTML = validation_res.cssvalidation.result.warningcount;
    if ( warningsExpected == validation_res.cssvalidation.result.warningcount) {
	allTds[2].setAttribute("class", "valid");
    } else {
	allTds[2].setAttribute("class", "invalid");
	gotRegression = true;
    }
    
    allTestTds[0].setAttribute("class", (gotRegression ? "invalid" : "valid"));
}

function checkURI(testrow, resultrow, encodedURI, cssprofile) {
    var xmlhttp = new XMLHttpRequest();
    xmlhttp.open("GET", "/css-validator/validator?uri="+
		 encodedURI+
		 "&profile="+cssprofile+
		 "&usermedium=all&output=json&warning=1",false);
    xmlhttp.setRequestHeader('Accept','application/json')
 //   xmlhttp.onreadystatechange=function() {
//	if (xmlhttp.readyState==4) {
//	    checkResults(testrow, resultrow, xmlhttp);
//	}
//    }
    xmlhttp.send(null);
    checkResults(testrow, resultrow, xmlhttp);
}    

function checkTest(testrow, resultrow) {
    var allTds = testrow.getElementsByTagName("td");
    var anchor = allTds[0].getElementsByTagName("a");
    var uri    = urlencode(anchor[0].getAttribute("href"));
    var cssprofile = allTds[1].firstChild.data;
    checkURI(testrow, resultrow, uri, cssprofile)
}

function gogo(tableid) {
    var testTable = document.getElementById(tableid);
    if (testTable) {
	var allTests = testTable.getElementsByTagName('tr')
	for (i=0; i< allTests.length; i++) {
	    var cname = allTests[i].className;
	    if (cname == "expected") {
		checkTest(allTests[i], allTests[i+1]);
	    }
	}
    }
}

Received on Tuesday, 3 March 2009 20:13:38 UTC