Index: node_modules/vulcanize/node_modules/update-notifier/node_modules/configstore/node_modules/js-yaml/node_modules/esprima/test/runner.js |
diff --git a/node_modules/vulcanize/node_modules/update-notifier/node_modules/configstore/node_modules/js-yaml/node_modules/esprima/test/runner.js b/node_modules/vulcanize/node_modules/update-notifier/node_modules/configstore/node_modules/js-yaml/node_modules/esprima/test/runner.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..c1a3fc9bf05d489efa7ba13c00b6ba21756120db |
--- /dev/null |
+++ b/node_modules/vulcanize/node_modules/update-notifier/node_modules/configstore/node_modules/js-yaml/node_modules/esprima/test/runner.js |
@@ -0,0 +1,387 @@ |
+/* |
+ Copyright (C) 2012 Ariya Hidayat <ariya.hidayat@gmail.com> |
+ Copyright (C) 2012 Joost-Wim Boekesteijn <joost-wim@boekesteijn.nl> |
+ Copyright (C) 2012 Yusuke Suzuki <utatane.tea@gmail.com> |
+ Copyright (C) 2012 Arpad Borsos <arpad.borsos@googlemail.com> |
+ Copyright (C) 2011 Ariya Hidayat <ariya.hidayat@gmail.com> |
+ Copyright (C) 2011 Yusuke Suzuki <utatane.tea@gmail.com> |
+ Copyright (C) 2011 Arpad Borsos <arpad.borsos@googlemail.com> |
+ |
+ Redistribution and use in source and binary forms, with or without |
+ modification, are permitted provided that the following conditions are met: |
+ |
+ * Redistributions of source code must retain the above copyright |
+ notice, this list of conditions and the following disclaimer. |
+ * Redistributions in binary form must reproduce the above copyright |
+ notice, this list of conditions and the following disclaimer in the |
+ documentation and/or other materials provided with the distribution. |
+ |
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
+ ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY |
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND |
+ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
+ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
+*/ |
+ |
+/*jslint browser:true node:true */ |
+/*global esprima:true, testFixture:true */ |
+ |
+var runTests; |
+ |
+// Special handling for regular expression literal since we need to |
+// convert it to a string literal, otherwise it will be decoded |
+// as object "{}" and the regular expression would be lost. |
+function adjustRegexLiteral(key, value) { |
+ 'use strict'; |
+ if (key === 'value' && value instanceof RegExp) { |
+ value = value.toString(); |
+ } |
+ return value; |
+} |
+ |
+function NotMatchingError(expected, actual) { |
+ 'use strict'; |
+ Error.call(this, 'Expected '); |
+ this.expected = expected; |
+ this.actual = actual; |
+} |
+NotMatchingError.prototype = new Error(); |
+ |
+function errorToObject(e) { |
+ 'use strict'; |
+ var msg = e.toString(); |
+ |
+ // Opera 9.64 produces an non-standard string in toString(). |
+ if (msg.substr(0, 6) !== 'Error:') { |
+ if (typeof e.message === 'string') { |
+ msg = 'Error: ' + e.message; |
+ } |
+ } |
+ |
+ return { |
+ index: e.index, |
+ lineNumber: e.lineNumber, |
+ column: e.column, |
+ message: msg |
+ }; |
+} |
+ |
+function testParse(esprima, code, syntax) { |
+ 'use strict'; |
+ var expected, tree, actual, options, StringObject, i, len, err; |
+ |
+ // alias, so that JSLint does not complain. |
+ StringObject = String; |
+ |
+ options = { |
+ comment: (typeof syntax.comments !== 'undefined'), |
+ range: true, |
+ loc: true, |
+ tokens: (typeof syntax.tokens !== 'undefined'), |
+ raw: true, |
+ tolerant: (typeof syntax.errors !== 'undefined') |
+ }; |
+ |
+ if (typeof syntax.tokens !== 'undefined') { |
+ if (syntax.tokens.length > 0) { |
+ options.range = (typeof syntax.tokens[0].range !== 'undefined'); |
+ options.loc = (typeof syntax.tokens[0].loc !== 'undefined'); |
+ } |
+ } |
+ |
+ if (typeof syntax.comments !== 'undefined') { |
+ if (syntax.comments.length > 0) { |
+ options.range = (typeof syntax.comments[0].range !== 'undefined'); |
+ options.loc = (typeof syntax.comments[0].loc !== 'undefined'); |
+ } |
+ } |
+ |
+ expected = JSON.stringify(syntax, null, 4); |
+ try { |
+ tree = esprima.parse(code, options); |
+ tree = (options.comment || options.tokens || options.tolerant) ? tree : tree.body[0]; |
+ |
+ if (options.tolerant) { |
+ for (i = 0, len = tree.errors.length; i < len; i += 1) { |
+ tree.errors[i] = errorToObject(tree.errors[i]); |
+ } |
+ } |
+ |
+ actual = JSON.stringify(tree, adjustRegexLiteral, 4); |
+ |
+ // Only to ensure that there is no error when using string object. |
+ esprima.parse(new StringObject(code), options); |
+ |
+ } catch (e) { |
+ throw new NotMatchingError(expected, e.toString()); |
+ } |
+ if (expected !== actual) { |
+ throw new NotMatchingError(expected, actual); |
+ } |
+ |
+ function filter(key, value) { |
+ if (key === 'value' && value instanceof RegExp) { |
+ value = value.toString(); |
+ } |
+ return (key === 'loc' || key === 'range') ? undefined : value; |
+ } |
+ |
+ if (options.tolerant) { |
+ return; |
+ } |
+ |
+ |
+ // Check again without any location info. |
+ options.range = false; |
+ options.loc = false; |
+ expected = JSON.stringify(syntax, filter, 4); |
+ try { |
+ tree = esprima.parse(code, options); |
+ tree = (options.comment || options.tokens) ? tree : tree.body[0]; |
+ |
+ if (options.tolerant) { |
+ for (i = 0, len = tree.errors.length; i < len; i += 1) { |
+ tree.errors[i] = errorToObject(tree.errors[i]); |
+ } |
+ } |
+ |
+ actual = JSON.stringify(tree, filter, 4); |
+ } catch (e) { |
+ throw new NotMatchingError(expected, e.toString()); |
+ } |
+ if (expected !== actual) { |
+ throw new NotMatchingError(expected, actual); |
+ } |
+} |
+ |
+function testError(esprima, code, exception) { |
+ 'use strict'; |
+ var i, options, expected, actual, handleInvalidRegexFlag; |
+ |
+ // Different parsing options should give the same error. |
+ options = [ |
+ {}, |
+ { comment: true }, |
+ { raw: true }, |
+ { raw: true, comment: true } |
+ ]; |
+ |
+ // If handleInvalidRegexFlag is true, an invalid flag in a regular expression |
+ // will throw an exception. In some old version V8, this is not the case |
+ // and hence handleInvalidRegexFlag is false. |
+ handleInvalidRegexFlag = false; |
+ try { |
+ 'test'.match(new RegExp('[a-z]', 'x')); |
+ } catch (e) { |
+ handleInvalidRegexFlag = true; |
+ } |
+ |
+ expected = JSON.stringify(exception); |
+ |
+ for (i = 0; i < options.length; i += 1) { |
+ |
+ try { |
+ esprima.parse(code, options[i]); |
+ } catch (e) { |
+ actual = JSON.stringify(errorToObject(e)); |
+ } |
+ |
+ if (expected !== actual) { |
+ |
+ // Compensate for old V8 which does not handle invalid flag. |
+ if (exception.message.indexOf('Invalid regular expression') > 0) { |
+ if (typeof actual === 'undefined' && !handleInvalidRegexFlag) { |
+ return; |
+ } |
+ } |
+ |
+ throw new NotMatchingError(expected, actual); |
+ } |
+ |
+ } |
+} |
+ |
+function testAPI(esprima, code, result) { |
+ 'use strict'; |
+ var expected, res, actual; |
+ |
+ expected = JSON.stringify(result.result, null, 4); |
+ try { |
+ if (typeof result.property !== 'undefined') { |
+ res = esprima[result.property]; |
+ } else { |
+ res = esprima[result.call].apply(esprima, result.args); |
+ } |
+ actual = JSON.stringify(res, adjustRegexLiteral, 4); |
+ } catch (e) { |
+ throw new NotMatchingError(expected, e.toString()); |
+ } |
+ if (expected !== actual) { |
+ throw new NotMatchingError(expected, actual); |
+ } |
+} |
+ |
+function runTest(esprima, code, result) { |
+ 'use strict'; |
+ if (result.hasOwnProperty('lineNumber')) { |
+ testError(esprima, code, result); |
+ } else if (result.hasOwnProperty('result')) { |
+ testAPI(esprima, code, result); |
+ } else { |
+ testParse(esprima, code, result); |
+ } |
+} |
+ |
+if (typeof window !== 'undefined') { |
+ // Run all tests in a browser environment. |
+ runTests = function () { |
+ 'use strict'; |
+ var total = 0, |
+ failures = 0, |
+ category, |
+ fixture, |
+ source, |
+ tick, |
+ expected, |
+ index, |
+ len; |
+ |
+ function setText(el, str) { |
+ if (typeof el.innerText === 'string') { |
+ el.innerText = str; |
+ } else { |
+ el.textContent = str; |
+ } |
+ } |
+ |
+ function startCategory(category) { |
+ var report, e; |
+ report = document.getElementById('report'); |
+ e = document.createElement('h4'); |
+ setText(e, category); |
+ report.appendChild(e); |
+ } |
+ |
+ 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('p'); |
+ setText(e, 'Code:'); |
+ report.appendChild(e); |
+ |
+ e = document.createElement('pre'); |
+ e.setAttribute('class', 'code'); |
+ setText(e, code); |
+ report.appendChild(e); |
+ |
+ 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); |
+ |
+ tick = new Date(); |
+ for (category in testFixture) { |
+ if (testFixture.hasOwnProperty(category)) { |
+ startCategory(category); |
+ fixture = testFixture[category]; |
+ for (source in fixture) { |
+ if (fixture.hasOwnProperty(source)) { |
+ expected = fixture[source]; |
+ total += 1; |
+ try { |
+ runTest(esprima, source, expected); |
+ reportSuccess(source, JSON.stringify(expected, null, 4)); |
+ } catch (e) { |
+ failures += 1; |
+ reportFailure(source, e.expected, e.actual); |
+ } |
+ } |
+ } |
+ } |
+ } |
+ 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'); |
+ } |
+ }; |
+} else { |
+ (function () { |
+ 'use strict'; |
+ |
+ var esprima = require('../esprima'), |
+ vm = require('vm'), |
+ fs = require('fs'), |
+ total = 0, |
+ failures = [], |
+ tick = new Date(), |
+ expected, |
+ header; |
+ |
+ vm.runInThisContext(fs.readFileSync(__dirname + '/test.js', 'utf-8')); |
+ |
+ Object.keys(testFixture).forEach(function (category) { |
+ Object.keys(testFixture[category]).forEach(function (source) { |
+ total += 1; |
+ expected = testFixture[category][source]; |
+ try { |
+ runTest(esprima, source, expected); |
+ } catch (e) { |
+ e.source = source; |
+ failures.push(e); |
+ } |
+ }); |
+ }); |
+ 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); |
+ }()); |
+} |