132 lines
4.6 KiB
JavaScript
132 lines
4.6 KiB
JavaScript
/*jslint browser:true plusplus:true */
|
|
/*global require:true */
|
|
function runTests() {
|
|
'use strict';
|
|
|
|
function setText(el, str) {
|
|
if (typeof el.innerText === 'string') {
|
|
el.innerText = str;
|
|
} else {
|
|
el.textContent = str;
|
|
}
|
|
}
|
|
|
|
function reportSuccess(code) {
|
|
var report, e;
|
|
report = document.getElementById('report');
|
|
e = document.createElement('pre');
|
|
e.setAttribute('class', 'code');
|
|
setText(e, code);
|
|
report.appendChild(e);
|
|
}
|
|
|
|
function reportFailure(code, expected, actual) {
|
|
var report, e;
|
|
|
|
report = document.getElementById('report');
|
|
|
|
e = document.createElement('pre');
|
|
e.setAttribute('class', 'code');
|
|
setText(e, code);
|
|
report.appendChild(e);
|
|
|
|
e = document.createElement('p');
|
|
setText(e, 'Expected type: ' + expected);
|
|
report.appendChild(e);
|
|
|
|
e = document.createElement('p');
|
|
setText(e, 'Actual type: ' + actual);
|
|
report.appendChild(e);
|
|
}
|
|
|
|
|
|
require(['../esprima'], function (ESParser) {
|
|
var tick, total, failures, obj, variable, variables, i, entry, entries;
|
|
|
|
// We check only the type of some members of ESParser.
|
|
variables = {
|
|
'version': 'string',
|
|
'parse': 'function',
|
|
'Syntax': 'object',
|
|
'Syntax.AssignmentExpression': 'string',
|
|
'Syntax.ArrayExpression': 'string',
|
|
'Syntax.BlockStatement': 'string',
|
|
'Syntax.BinaryExpression': 'string',
|
|
'Syntax.BreakStatement': 'string',
|
|
'Syntax.CallExpression': 'string',
|
|
'Syntax.CatchClause': 'string',
|
|
'Syntax.ConditionalExpression': 'string',
|
|
'Syntax.ContinueStatement': 'string',
|
|
'Syntax.DoWhileStatement': 'string',
|
|
'Syntax.DebuggerStatement': 'string',
|
|
'Syntax.EmptyStatement': 'string',
|
|
'Syntax.ExpressionStatement': 'string',
|
|
'Syntax.ForStatement': 'string',
|
|
'Syntax.ForInStatement': 'string',
|
|
'Syntax.FunctionDeclaration': 'string',
|
|
'Syntax.FunctionExpression': 'string',
|
|
'Syntax.Identifier': 'string',
|
|
'Syntax.IfStatement': 'string',
|
|
'Syntax.Literal': 'string',
|
|
'Syntax.LabeledStatement': 'string',
|
|
'Syntax.LogicalExpression': 'string',
|
|
'Syntax.MemberExpression': 'string',
|
|
'Syntax.NewExpression': 'string',
|
|
'Syntax.ObjectExpression': 'string',
|
|
'Syntax.Program': 'string',
|
|
'Syntax.Property': 'string',
|
|
'Syntax.ReturnStatement': 'string',
|
|
'Syntax.SequenceExpression': 'string',
|
|
'Syntax.SwitchStatement': 'string',
|
|
'Syntax.SwitchCase': 'string',
|
|
'Syntax.ThisExpression': 'string',
|
|
'Syntax.ThrowStatement': 'string',
|
|
'Syntax.TryStatement': 'string',
|
|
'Syntax.UnaryExpression': 'string',
|
|
'Syntax.UpdateExpression': 'string',
|
|
'Syntax.VariableDeclaration': 'string',
|
|
'Syntax.VariableDeclarator': 'string',
|
|
'Syntax.WhileStatement': 'string',
|
|
'Syntax.WithStatement': 'string'
|
|
};
|
|
|
|
total = failures = 0;
|
|
tick = new Date();
|
|
|
|
for (variable in variables) {
|
|
if (variables.hasOwnProperty(variable)) {
|
|
entries = variable.split('.');
|
|
obj = ESParser;
|
|
for (i = 0; i < entries.length; ++i) {
|
|
entry = entries[i];
|
|
if (typeof obj[entry] !== 'undefined') {
|
|
obj = obj[entry];
|
|
} else {
|
|
obj = undefined;
|
|
break;
|
|
}
|
|
}
|
|
total++;
|
|
if (typeof obj === variables[variable]) {
|
|
reportSuccess(variable);
|
|
} else {
|
|
failures++;
|
|
reportFailure(variable, variables[variable], typeof obj);
|
|
}
|
|
}
|
|
}
|
|
|
|
tick = (new Date()) - tick;
|
|
|
|
if (failures > 0) {
|
|
document.getElementById('status').className = 'alert-box alert';
|
|
setText(document.getElementById('status'), total + ' tests. ' +
|
|
'Failures: ' + failures + '. ' + tick + ' ms');
|
|
} else {
|
|
document.getElementById('status').className = 'alert-box success';
|
|
setText(document.getElementById('status'), total + ' tests. ' +
|
|
'No failure. ' + tick + ' ms');
|
|
}
|
|
});
|
|
}
|