123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239 |
- var runTests;
- function getContext(esprima, reportCase, reportFailure) {
- 'use strict';
- var Reflect, Pattern;
-
- Reflect = {
- parse: function (code) {
- var result;
- reportCase(code);
- try {
- result = esprima.parse(code);
- } catch (error) {
- result = error;
- }
- return result;
- }
- };
-
- Pattern = function (obj) {
- var pattern;
-
- pattern = JSON.parse(JSON.stringify(obj));
-
-
-
- if (obj.type && obj.type === 'Literal') {
- if (obj.value instanceof RegExp) {
- pattern = {
- type: obj.type,
- value: obj.value.toString()
- };
- }
- }
-
-
- if (obj.type && obj.type === 'IfStatement') {
- pattern = {
- type: pattern.type,
- test: pattern.test,
- consequent: pattern.consequent,
- alternate: pattern.alternate
- };
- }
-
-
- if (obj.type && obj.type === 'DoWhileStatement') {
- pattern = {
- type: pattern.type,
- body: pattern.body,
- test: pattern.test
- };
- }
- function adjustRegexLiteralAndRaw(key, value) {
- if (key === 'value' && value instanceof RegExp) {
- value = value.toString();
- } else if (key === 'raw' && typeof value === "string") {
-
- return undefined;
- }
- return value;
- }
- if (obj.type && (obj.type === 'Program')) {
- pattern.assert = function (tree) {
- var actual, expected;
- actual = JSON.stringify(tree, adjustRegexLiteralAndRaw, 4);
- expected = JSON.stringify(obj, null, 4);
- if (expected !== actual) {
- reportFailure(expected, actual);
- }
- };
- }
- return pattern;
- };
- return {
- Reflect: Reflect,
- Pattern: Pattern
- };
- }
- if (typeof window !== 'undefined') {
-
- runTests = function () {
- 'use strict';
- var total = 0,
- failures = 0;
- function setText(el, str) {
- if (typeof el.innerText === 'string') {
- el.innerText = str;
- } else {
- el.textContent = str;
- }
- }
- function reportCase(code) {
- var report, e;
- report = document.getElementById('report');
- e = document.createElement('pre');
- e.setAttribute('class', 'code');
- setText(e, code);
- report.appendChild(e);
- total += 1;
- }
- function reportFailure(expected, actual) {
- var report, e;
- failures += 1;
- report = document.getElementById('report');
- e = document.createElement('p');
- setText(e, 'Expected');
- report.appendChild(e);
- e = document.createElement('pre');
- e.setAttribute('class', 'expected');
- setText(e, expected);
- report.appendChild(e);
- e = document.createElement('p');
- setText(e, 'Actual');
- report.appendChild(e);
- e = document.createElement('pre');
- e.setAttribute('class', 'actual');
- setText(e, actual);
- report.appendChild(e);
- }
- setText(document.getElementById('version'), esprima.version);
- window.setTimeout(function () {
- var tick, context = getContext(esprima, reportCase, reportFailure);
- tick = new Date();
- testReflect(context.Reflect, context.Pattern);
- tick = (new Date()) - tick;
- if (failures > 0) {
- setText(document.getElementById('status'), total + ' tests. ' +
- 'Failures: ' + failures + '. ' + tick + ' ms');
- } else {
- setText(document.getElementById('status'), total + ' tests. ' +
- 'No failure. ' + tick + ' ms');
- }
- }, 513);
- };
- } else {
- (function (global) {
- 'use strict';
- var esprima = require('../esprima'),
- tick,
- total = 0,
- failures = [],
- header,
- current,
- context;
- function reportCase(code) {
- total += 1;
- current = code;
- }
- function reportFailure(expected, actual) {
- failures.push({
- source: current,
- expected: expected.toString(),
- actual: actual.toString()
- });
- }
- context = getContext(esprima, reportCase, reportFailure);
- tick = new Date();
- require('./reflect').testReflect(context.Reflect, context.Pattern);
- tick = (new Date()) - tick;
- header = total + ' tests. ' + failures.length + ' failures. ' +
- tick + ' ms';
- if (failures.length) {
- console.error(header);
- failures.forEach(function (failure) {
- console.error(failure.source + ': Expected\n ' +
- failure.expected.split('\n').join('\n ') +
- '\nto match\n ' + failure.actual);
- });
- } else {
- console.log(header);
- }
- process.exit(failures.length === 0 ? 0 : 1);
- }(this));
- }
|