mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-11-11 13:48:23 +02:00
--HG-- extra : commitid : AHmjTpVmCOP extra : rebase_source : 0034d884816464bff4677afbe96c52fa9dca9072
179 lines
4.6 KiB
JavaScript
179 lines
4.6 KiB
JavaScript
/*!
|
|
testrunner
|
|
Used by http://localhost:3000/testrunner.html
|
|
Copyright (C) 2010 - 2015 Glenn Jones. All Rights Reserved.
|
|
MIT License: https://raw.github.com/glennjones/microformat-shiv/master/license.txt
|
|
*/
|
|
|
|
var options = {
|
|
'baseUrl': 'http://example.com',
|
|
'dateFormat': 'html5',
|
|
'parseLatLonGeo': false
|
|
};
|
|
|
|
window.onload = function() {
|
|
var test = testData.data[0],
|
|
versionElt = document.querySelector('#version');
|
|
|
|
versionElt.innerHTML = 'v' + testData.version;
|
|
|
|
buildTest( test );
|
|
buildList( testData );
|
|
}
|
|
|
|
|
|
function displayTest(e){
|
|
var label = e.target.innerHTML;
|
|
var i = testData.data.length;
|
|
while (i--) {
|
|
if(testData.data[i].name === label){
|
|
buildTest( testData.data[i] );
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
function buildTest( test ){
|
|
var testDetailElt = document.querySelector('.test-detail'),
|
|
nameElt = document.querySelector('#test-name'),
|
|
htmlElt = document.querySelector('#test-html pre code'),
|
|
jsonElt = document.querySelector('#test-json pre code'),
|
|
parserElt = document.querySelector('#parser-json pre code'),
|
|
diffElt = document.querySelector('#test-diff pre code');
|
|
|
|
nameElt.innerHTML = test.name;
|
|
htmlElt.innerHTML = htmlEscape( test.html );
|
|
jsonElt.innerHTML = htmlEscape( test.json );
|
|
|
|
var dom = new DOMParser();
|
|
doc = dom.parseFromString( test.html, 'text/html' );
|
|
|
|
options.node = doc;
|
|
var mfJSON = Microformats.get( options );
|
|
parserElt.innerHTML = htmlEscape( js_beautify( JSON.stringify(mfJSON) ) );
|
|
|
|
// diff json
|
|
var diff = DeepDiff(JSON.parse(test.json), mfJSON);
|
|
if(diff !== undefined){
|
|
diffElt.innerHTML = htmlEscape( js_beautify( JSON.stringify(diff) ) );
|
|
}else{
|
|
diffElt.innerHTML = '';
|
|
}
|
|
|
|
console.log(diff)
|
|
if(diff !== undefined){
|
|
addClass(nameElt, 'failed');
|
|
addClass(testDetailElt, 'test-failed');
|
|
removeClass(testDetailElt, 'test-passed');
|
|
}else{
|
|
removeClass(nameElt, 'failed');
|
|
removeClass(testDetailElt, 'test-failed');
|
|
addClass(testDetailElt, 'test-passed');
|
|
}
|
|
|
|
testDetailElt.style.display = 'block';
|
|
|
|
//prettyPrint();
|
|
}
|
|
|
|
|
|
|
|
function passTest( test ){
|
|
var dom = new DOMParser(),
|
|
doc = dom.parseFromString( test.html, 'text/html' );
|
|
|
|
options.node = doc;
|
|
var mfJSON = Microformats.get( options );
|
|
|
|
// diff json
|
|
var diff = DeepDiff(JSON.parse(test.json), mfJSON);
|
|
return (diff === undefined);
|
|
}
|
|
|
|
|
|
|
|
|
|
function buildList( tests ){
|
|
var total = tests.data.length,
|
|
passed = 0,
|
|
testResultListElt = document.querySelector('.test-result-list');
|
|
|
|
tests.data.forEach(function(item){
|
|
var li = document.createElement('li');
|
|
li.innerHTML = item.name;
|
|
testResultListElt.appendChild(li);
|
|
|
|
if( passTest( item ) === false ){
|
|
//li.classList.add('failed')
|
|
addClass(li, 'failed');
|
|
}else{
|
|
passed ++;
|
|
}
|
|
|
|
li.addEventListener('click', function(e){
|
|
e.preventDefault();
|
|
displayTest(e);
|
|
});
|
|
|
|
});
|
|
updateCounts( {
|
|
'total': total,
|
|
'passed': passed,
|
|
'percentPassed': ((100/total) * passed).toFixed(1)
|
|
} )
|
|
}
|
|
|
|
|
|
function updateCounts( data ){
|
|
var testCountsElt = document.querySelector('.test-counts');
|
|
testCountsElt.innerHTML = 'Passed: ' + data.passed + '/' + data.total + ' - ' + data.percentPassed + '% of microformats tests';
|
|
}
|
|
|
|
|
|
function htmlEscape(str) {
|
|
return String(str)
|
|
.replace(/&/g, '&')
|
|
.replace(/"/g, '"')
|
|
.replace(/'/g, ''')
|
|
.replace(/</g, '<')
|
|
.replace(/>/g, '>');
|
|
}
|
|
|
|
// I needed the opposite function today, so adding here too:
|
|
function htmlUnescape(value){
|
|
return String(value)
|
|
.replace(/"/g, '"')
|
|
.replace(/'/g, "'")
|
|
.replace(/</g, '<')
|
|
.replace(/>/g, '>')
|
|
.replace(/&/g, '&');
|
|
}
|
|
|
|
|
|
// Does the node have a class
|
|
function hasClass(node, className) {
|
|
if (node.className) {
|
|
return node.className.match(
|
|
new RegExp('(\\s|^)' + className + '(\\s|$)'));
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
|
|
// Add a class to an node
|
|
function addClass(node, className) {
|
|
if (!hasClass(node, className)) {
|
|
node.className += " " + className;
|
|
}
|
|
}
|
|
|
|
|
|
// Removes a class from an node
|
|
function removeClass(node, className) {
|
|
if (hasClass(node, className)) {
|
|
var reg = new RegExp('(\\s|^)' + className + '(\\s|$)');
|
|
node.className = node.className.replace(reg, ' ');
|
|
}
|
|
}
|