/*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'); } }); }