blob: 637fbc121d62ebe52aa90c7f1427ce0c50ae6789 [file] [log] [blame]
/*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');
}
});
}