diff --git a/package.json b/package.json index 852608eb..ef4e37f1 100644 --- a/package.json +++ b/package.json @@ -45,7 +45,6 @@ "bower-registry-client": "^0.2.1", "chai": "^1.10.0", "commonjs-everywhere": "^0.9.7", - "esprima-moz": "1.0.0-dev-harmony-moz", "gulp": "^3.8.10", "gulp-eslint": "^0.2.0", "gulp-mocha": "^2.0.0", diff --git a/test/moz.js b/test/moz.js deleted file mode 100644 index 0b8aefff..00000000 --- a/test/moz.js +++ /dev/null @@ -1,1276 +0,0 @@ -/* - Copyright (C) 2011-2013 Yusuke Suzuki - Copyright (C) 2012 Ariya Hidayat - Copyright (C) 2012 Joost-Wim Boekesteijn - Copyright (C) 2012 Yusuke Suzuki - Copyright (C) 2012 Arpad Borsos - Copyright (C) 2011 Ariya Hidayat - Copyright (C) 2011 Arpad Borsos - - 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 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. -*/ - -'use strict'; - -var esprima = require('esprima-moz'), - escodegen = require('./loader'), - chai = require('chai'), - expect = chai.expect, - data; - -data = { - 'Yield with starless generator': { - 'function a() { yield* test; }': { - type: 'Program', - body: [{ - type: 'FunctionDeclaration', - id: { - type: 'Identifier', - name: 'a', - range: [10, 11], - loc: { - start: { line: 1, column: 10 }, - end: { line: 1, column: 11 } - } - }, - params: [], - defaults: [], - body: { - type: 'BlockStatement', - body: [{ - type: 'ExpressionStatement', - expression: { - type: 'YieldExpression', - argument: { - type: 'Identifier', - name: 'test', - range: [23, 27], - loc: { - start: { line: 1, column: 23 }, - end: { line: 1, column: 27 } - } - }, - delegate: true, - range: [16, 27], - loc: { - start: { line: 1, column: 16 }, - end: { line: 1, column: 27 } - } - }, - range: [16, 28], - loc: { - start: { line: 1, column: 16 }, - end: { line: 1, column: 28 } - } - }], - range: [14, 30], - loc: { - start: { line: 1, column: 14 }, - end: { line: 1, column: 30 } - } - }, - rest: null, - generator: true, - expression: false, - range: [0, 30], - loc: { - start: { line: 1, column: 0 }, - end: { line: 1, column: 30 } - } - }], - range: [0, 30], - loc: { - start: { line: 1, column: 0 }, - end: { line: 1, column: 30 } - } - }, - - 'function a() { yield* (42,42); }': { - type: 'Program', - body: [{ - type: 'FunctionDeclaration', - id: { - type: 'Identifier', - name: 'a', - range: [10, 11], - loc: { - start: { line: 1, column: 10 }, - end: { line: 1, column: 11 } - } - }, - params: [], - defaults: [], - body: { - type: 'BlockStatement', - body: [{ - type: 'ExpressionStatement', - expression: { - type: 'YieldExpression', - argument: { - type: 'SequenceExpression', - expressions: [{ - type: 'Literal', - value: 42, - raw: '42', - range: [24, 26], - loc: { - start: { line: 1, column: 24 }, - end: { line: 1, column: 26 } - } - }, { - type: 'Literal', - value: 42, - raw: '42', - range: [27, 29], - loc: { - start: { line: 1, column: 27 }, - end: { line: 1, column: 29 } - } - }], - range: [24, 29], - loc: { - start: { line: 1, column: 24 }, - end: { line: 1, column: 29 } - } - }, - delegate: true, - range: [16, 30], - loc: { - start: { line: 1, column: 16 }, - end: { line: 1, column: 30 } - } - }, - range: [16, 31], - loc: { - start: { line: 1, column: 16 }, - end: { line: 1, column: 31 } - } - }], - range: [14, 33], - loc: { - start: { line: 1, column: 14 }, - end: { line: 1, column: 33 } - } - }, - rest: null, - generator: true, - expression: false, - range: [0, 33], - loc: { - start: { line: 1, column: 0 }, - end: { line: 1, column: 33 } - } - }], - range: [0, 33], - loc: { - start: { line: 1, column: 0 }, - end: { line: 1, column: 33 } - } - }, - - 'function a() {\n yield 1;\n}': { - generateFrom: { - type: 'Program', - body: [{ - type: 'FunctionDeclaration', - id: { - type: 'Identifier', - name: 'a', - range: [10, 11], - loc: { - start: { line: 1, column: 10 }, - end: { line: 1, column: 11 } - } - }, - params: [], - defaults: [], - body: { - type: 'BlockStatement', - body: [{ - type: 'ExpressionStatement', - expression: { - type: 'YieldExpression', - argument: { - type: 'Literal', - value: 1, - raw: '1', - range: [21, 22], - loc: { - start: { line: 1, column: 21 }, - end: { line: 1, column: 22 } - } - }, - delegate: false, - range: [15, 22], - loc: { - start: { line: 1, column: 15 }, - end: { line: 1, column: 22 } - } - }, - range: [15, 22], - loc: { - start: { line: 1, column: 15 }, - end: { line: 1, column: 22 } - } - }], - range: [14, 23], - loc: { - start: { line: 1, column: 14 }, - end: { line: 1, column: 23 } - } - }, - rest: null, - generator: true, - expression: false, - range: [0, 23], - loc: { - start: { line: 1, column: 0 }, - end: { line: 1, column: 23 } - } - }], - range: [0, 23], - loc: { - start: { line: 1, column: 0 }, - end: { line: 1, column: 23 } - } - } - } - }, - - 'Array Comprehension with parenthesized ComprehensionBlock': { - - '[x for (x in [])];':{ - generateFrom: { - type: 'Program', - body: [{ - type: 'ExpressionStatement', - expression: { - type: 'ComprehensionExpression', - filter: null, - blocks: [{ - type: 'ComprehensionBlock', - left: { - type: 'Identifier', - name: 'x', - range: [8, 9], - loc: { - start: { line: 1, column: 8 }, - end: { line: 1, column: 9 } - } - }, - right: { - type: 'ArrayExpression', - elements: [], - range: [13, 15], - loc: { - start: { line: 1, column: 13 }, - end: { line: 1, column: 15 } - } - }, - each: false, - of: false - }], - body: { - type: 'Identifier', - name: 'x', - range: [1, 2], - loc: { - start: { line: 1, column: 1 }, - end: { line: 1, column: 2 } - } - }, - range: [0, 17], - loc: { - start: { line: 1, column: 0 }, - end: { line: 1, column: 17 } - } - }, - range: [0, 17], - loc: { - start: { line: 1, column: 0 }, - end: { line: 1, column: 17 } - } - }], - range: [0, 17], - loc: { - start: { line: 1, column: 0 }, - end: { line: 1, column: 17 } - } - } - }, - - '[x for (x of [])];': { - generateFrom: { - type: 'Program', - body: [{ - type: 'ExpressionStatement', - expression: { - type: 'ComprehensionExpression', - filter: null, - blocks: [{ - type: 'ComprehensionBlock', - left: { - type: 'Identifier', - name: 'x', - range: [8, 9], - loc: { - start: { line: 1, column: 8 }, - end: { line: 1, column: 9 } - } - }, - right: { - type: 'ArrayExpression', - elements: [], - range: [13, 15], - loc: { - start: { line: 1, column: 13 }, - end: { line: 1, column: 15 } - } - }, - each: false, - of: true - }], - body: { - type: 'Identifier', - name: 'x', - range: [1, 2], - loc: { - start: { line: 1, column: 1 }, - end: { line: 1, column: 2 } - } - }, - range: [0, 17], - loc: { - start: { line: 1, column: 0 }, - end: { line: 1, column: 17 } - } - }, - range: [0, 17], - loc: { - start: { line: 1, column: 0 }, - end: { line: 1, column: 17 } - } - }], - range: [0, 17], - loc: { - start: { line: 1, column: 0 }, - end: { line: 1, column: 17 } - } - } - }, - - '[1 for (x in y) if (f(x))];': { - generateFrom: { - type: 'Program', - body: [{ - type: 'ExpressionStatement', - expression: { - type: 'ComprehensionExpression', - filter: { - type: 'CallExpression', - callee: { - type: 'Identifier', - name: 'f', - range: [20, 21], - loc: { - start: { line: 1, column: 20 }, - end: { line: 1, column: 21 } - } - }, - 'arguments': [{ - type: 'Identifier', - name: 'x', - range: [22, 23], - loc: { - start: { line: 1, column: 22 }, - end: { line: 1, column: 23 } - } - }], - range: [20, 24], - loc: { - start: { line: 1, column: 20 }, - end: { line: 1, column: 24 } - } - }, - blocks: [{ - type: 'ComprehensionBlock', - left: { - type: 'Identifier', - name: 'x', - range: [8, 9], - loc: { - start: { line: 1, column: 8 }, - end: { line: 1, column: 9 } - } - }, - right: { - type: 'Identifier', - name: 'y', - range: [13, 14], - loc: { - start: { line: 1, column: 13 }, - end: { line: 1, column: 14 } - } - }, - each: false, - of: false - }], - body: { - type: 'Literal', - value: 1, - raw: '1', - range: [1, 2], - loc: { - start: { line: 1, column: 1 }, - end: { line: 1, column: 2 } - } - }, - range: [0, 26], - loc: { - start: { line: 1, column: 0 }, - end: { line: 1, column: 26 } - } - }, - range: [0, 26], - loc: { - start: { line: 1, column: 0 }, - end: { line: 1, column: 26 } - } - }], - range: [0, 26], - loc: { - start: { line: 1, column: 0 }, - end: { line: 1, column: 26 } - } - } - }, - - '[1 for (x of y) if (f(x))];': { - generateFrom: { - type: 'Program', - body: [{ - type: 'ExpressionStatement', - expression: { - type: 'ComprehensionExpression', - filter: { - type: 'CallExpression', - callee: { - type: 'Identifier', - name: 'f', - range: [20, 21], - loc: { - start: { line: 1, column: 20 }, - end: { line: 1, column: 21 } - } - }, - 'arguments': [{ - type: 'Identifier', - name: 'x', - range: [22, 23], - loc: { - start: { line: 1, column: 22 }, - end: { line: 1, column: 23 } - } - }], - range: [20, 24], - loc: { - start: { line: 1, column: 20 }, - end: { line: 1, column: 24 } - } - }, - blocks: [{ - type: 'ComprehensionBlock', - left: { - type: 'Identifier', - name: 'x', - range: [8, 9], - loc: { - start: { line: 1, column: 8 }, - end: { line: 1, column: 9 } - } - }, - right: { - type: 'Identifier', - name: 'y', - range: [13, 14], - loc: { - start: { line: 1, column: 13 }, - end: { line: 1, column: 14 } - } - }, - each: false, - of: true - }], - body: { - type: 'Literal', - value: 1, - raw: '1', - range: [1, 2], - loc: { - start: { line: 1, column: 1 }, - end: { line: 1, column: 2 } - } - }, - range: [0, 26], - loc: { - start: { line: 1, column: 0 }, - end: { line: 1, column: 26 } - } - }, - range: [0, 26], - loc: { - start: { line: 1, column: 0 }, - end: { line: 1, column: 26 } - } - }], - range: [0, 26], - loc: { - start: { line: 1, column: 0 }, - end: { line: 1, column: 26 } - } - } - }, - - '[[\n x,\n b,\n c\n] for (x in []) for (b in []) if (b && c)];': { - generateFrom: { - type: 'Program', - body: [{ - type: 'ExpressionStatement', - expression: { - type: 'ComprehensionExpression', - filter: { - type: 'LogicalExpression', - operator: '&&', - left: { - type: 'Identifier', - name: 'b', - range: [41, 42], - loc: { - start: { line: 1, column: 41 }, - end: { line: 1, column: 42 } - } - }, - right: { - type: 'Identifier', - name: 'c', - range: [46, 47], - loc: { - start: { line: 1, column: 46 }, - end: { line: 1, column: 47 } - } - }, - range: [41, 47], - loc: { - start: { line: 1, column: 41 }, - end: { line: 1, column: 47 } - } - }, - blocks: [{ - type: 'ComprehensionBlock', - left: { - type: 'Identifier', - name: 'x', - range: [14, 15], - loc: { - start: { line: 1, column: 14 }, - end: { line: 1, column: 15 } - } - }, - right: { - type: 'ArrayExpression', - elements: [], - range: [19, 21], - loc: { - start: { line: 1, column: 19 }, - end: { line: 1, column: 21 } - } - }, - each: false, - of: false - }, { - type: 'ComprehensionBlock', - left: { - type: 'Identifier', - name: 'b', - range: [28, 29], - loc: { - start: { line: 1, column: 28 }, - end: { line: 1, column: 29 } - } - }, - right: { - type: 'ArrayExpression', - elements: [], - range: [33, 35], - loc: { - start: { line: 1, column: 33 }, - end: { line: 1, column: 35 } - } - }, - each: false, - of: false - }], - body: { - type: 'ArrayExpression', - elements: [{ - type: 'Identifier', - name: 'x', - range: [2, 3], - loc: { - start: { line: 1, column: 2 }, - end: { line: 1, column: 3 } - } - }, { - type: 'Identifier', - name: 'b', - range: [4, 5], - loc: { - start: { line: 1, column: 4 }, - end: { line: 1, column: 5 } - } - }, { - type: 'Identifier', - name: 'c', - range: [6, 7], - loc: { - start: { line: 1, column: 6 }, - end: { line: 1, column: 7 } - } - }], - range: [1, 8], - loc: { - start: { line: 1, column: 1 }, - end: { line: 1, column: 8 } - } - }, - range: [0, 49], - loc: { - start: { line: 1, column: 0 }, - end: { line: 1, column: 49 } - } - }, - range: [0, 49], - loc: { - start: { line: 1, column: 0 }, - end: { line: 1, column: 49 } - } - }], - range: [0, 49], - loc: { - start: { line: 1, column: 0 }, - end: { line: 1, column: 49 } - } - } - }, - - '[[\n x,\n b,\n c\n] for (x of []) for (b of []) if (b && c)];': { - generateFrom: { - type: 'Program', - body: [{ - type: 'ExpressionStatement', - expression: { - type: 'ComprehensionExpression', - filter: { - type: 'LogicalExpression', - operator: '&&', - left: { - type: 'Identifier', - name: 'b', - range: [41, 42], - loc: { - start: { line: 1, column: 41 }, - end: { line: 1, column: 42 } - } - }, - right: { - type: 'Identifier', - name: 'c', - range: [46, 47], - loc: { - start: { line: 1, column: 46 }, - end: { line: 1, column: 47 } - } - }, - range: [41, 47], - loc: { - start: { line: 1, column: 41 }, - end: { line: 1, column: 47 } - } - }, - blocks: [{ - type: 'ComprehensionBlock', - left: { - type: 'Identifier', - name: 'x', - range: [14, 15], - loc: { - start: { line: 1, column: 14 }, - end: { line: 1, column: 15 } - } - }, - right: { - type: 'ArrayExpression', - elements: [], - range: [19, 21], - loc: { - start: { line: 1, column: 19 }, - end: { line: 1, column: 21 } - } - }, - each: false, - of: true - }, { - type: 'ComprehensionBlock', - left: { - type: 'Identifier', - name: 'b', - range: [28, 29], - loc: { - start: { line: 1, column: 28 }, - end: { line: 1, column: 29 } - } - }, - right: { - type: 'ArrayExpression', - elements: [], - range: [33, 35], - loc: { - start: { line: 1, column: 33 }, - end: { line: 1, column: 35 } - } - }, - each: false, - of: true - }], - body: { - type: 'ArrayExpression', - elements: [{ - type: 'Identifier', - name: 'x', - range: [2, 3], - loc: { - start: { line: 1, column: 2 }, - end: { line: 1, column: 3 } - } - }, { - type: 'Identifier', - name: 'b', - range: [4, 5], - loc: { - start: { line: 1, column: 4 }, - end: { line: 1, column: 5 } - } - }, { - type: 'Identifier', - name: 'c', - range: [6, 7], - loc: { - start: { line: 1, column: 6 }, - end: { line: 1, column: 7 } - } - }], - range: [1, 8], - loc: { - start: { line: 1, column: 1 }, - end: { line: 1, column: 8 } - } - }, - range: [0, 49], - loc: { - start: { line: 1, column: 0 }, - end: { line: 1, column: 49 } - } - }, - range: [0, 49], - loc: { - start: { line: 1, column: 0 }, - end: { line: 1, column: 49 } - } - }], - range: [0, 49], - loc: { - start: { line: 1, column: 0 }, - end: { line: 1, column: 49 } - } - } - } - }, - - 'Expression Closures': { - 'function milky() ({})': { - type: 'Program', - body: [{ - type: 'FunctionDeclaration', - id: { - type: 'Identifier', - name: 'milky', - range: [9, 14], - loc: { - start: { line: 1, column: 9 }, - end: { line: 1, column: 14 } - } - }, - params: [], - defaults: [], - body: { - type: 'ObjectExpression', - properties: [], - range: [18, 20], - loc: { - start: { line: 1, column: 18 }, - end: { line: 1, column: 20 } - } - }, - rest: null, - generator: false, - expression: true, - range: [0, 21], - loc: { - start: { line: 1, column: 0 }, - end: { line: 1, column: 21 } - } - }], - range: [0, 21], - loc: { - start: { line: 1, column: 0 }, - end: { line: 1, column: 21 } - } - }, - - '({ test: function () 42 })': { - type: 'Program', - body: [{ - type: 'ExpressionStatement', - expression: { - type: 'ObjectExpression', - properties: [{ - type: 'Property', - key: { - type: 'Identifier', - name: 'test', - range: [3, 7], - loc: { - start: { line: 1, column: 3 }, - end: { line: 1, column: 7 } - } - }, - value: { - type: 'FunctionExpression', - id: null, - params: [], - defaults: [], - body: { - type: 'Literal', - value: 42, - raw: '42', - range: [21, 23], - loc: { - start: { line: 1, column: 21 }, - end: { line: 1, column: 23 } - } - }, - rest: null, - generator: false, - expression: true, - range: [9, 23], - loc: { - start: { line: 1, column: 9 }, - end: { line: 1, column: 23 } - } - }, - kind: 'init', - range: [3, 23], - loc: { - start: { line: 1, column: 3 }, - end: { line: 1, column: 23 } - } - }], - range: [1, 25], - loc: { - start: { line: 1, column: 1 }, - end: { line: 1, column: 25 } - } - }, - range: [0, 26], - loc: { - start: { line: 1, column: 0 }, - end: { line: 1, column: 26 } - } - }], - range: [0, 26], - loc: { - start: { line: 1, column: 0 }, - end: { line: 1, column: 26 } - } - }, - - 'function a() 1': { - generateFrom: { - type: 'Program', - body: [{ - type: 'FunctionDeclaration', - id: { - type: 'Identifier', - name: 'a', - range: [9, 10], - loc: { - start: { line: 1, column: 9 }, - end: { line: 1, column: 10 } - } - }, - params: [], - defaults: [], - body: { - type: 'Literal', - value: 1, - raw: '1', - range: [13, 14], - loc: { - start: { line: 1, column: 13 }, - end: { line: 1, column: 14 } - } - }, - rest: null, - generator: false, - expression: true, - range: [0, 14], - loc: { - start: { line: 1, column: 0 }, - end: { line: 1, column: 14 } - } - }], - range: [0, 14], - loc: { - start: { line: 1, column: 0 }, - end: { line: 1, column: 14 } - } - } - }, - - 'function a() {\n}': { - generateFrom: { - type: 'Program', - body: [{ - type: 'FunctionDeclaration', - id: { - type: 'Identifier', - name: 'a', - range: [9, 10], - loc: { - start: { line: 1, column: 9 }, - end: { line: 1, column: 10 } - } - }, - params: [], - defaults: [], - body: { - type: 'BlockStatement', - body: [], - range: [13, 15], - loc: { - start: { line: 1, column: 13 }, - end: { line: 1, column: 15 } - } - }, - rest: null, - generator: false, - expression: false, - range: [0, 15], - loc: { - start: { line: 1, column: 0 }, - end: { line: 1, column: 15 } - } - }], - range: [0, 15], - loc: { - start: { line: 1, column: 0 }, - end: { line: 1, column: 15 } - } - } - }, - - 'function a() my()': { - generateFrom: { - type: 'Program', - body: [{ - type: 'FunctionDeclaration', - id: { - type: 'Identifier', - name: 'a', - range: [9, 10], - loc: { - start: { line: 1, column: 9 }, - end: { line: 1, column: 10 } - } - }, - params: [], - defaults: [], - body: { - type: 'CallExpression', - callee: { - type: 'Identifier', - name: 'my', - range: [13, 15], - loc: { - start: { line: 1, column: 13 }, - end: { line: 1, column: 15 } - } - }, - 'arguments': [], - range: [13, 17], - loc: { - start: { line: 1, column: 13 }, - end: { line: 1, column: 17 } - } - }, - rest: null, - generator: false, - expression: true, - range: [0, 17], - loc: { - start: { line: 1, column: 0 }, - end: { line: 1, column: 17 } - } - }], - range: [0, 17], - loc: { - start: { line: 1, column: 0 }, - end: { line: 1, column: 17 } - } - } - }, - - '[function () 1];': { - generateFrom: { - type: 'Program', - body: [{ - type: 'ExpressionStatement', - expression: { - type: 'ArrayExpression', - elements: [{ - type: 'FunctionExpression', - id: null, - params: [], - defaults: [], - body: { - type: 'Literal', - value: 1, - raw: '1', - range: [13, 14], - loc: { - start: { line: 1, column: 13 }, - end: { line: 1, column: 14 } - } - }, - rest: null, - generator: false, - expression: true, - range: [1, 14], - loc: { - start: { line: 1, column: 1 }, - end: { line: 1, column: 14 } - } - }], - range: [0, 15], - loc: { - start: { line: 1, column: 0 }, - end: { line: 1, column: 15 } - } - }, - range: [0, 15], - loc: { - start: { line: 1, column: 0 }, - end: { line: 1, column: 15 } - } - }], - range: [0, 15], - loc: { - start: { line: 1, column: 0 }, - end: { line: 1, column: 15 } - } - } - }, - - '({test: function () (42,42)})': { - type: 'Program', - body: [{ - type: 'ExpressionStatement', - expression: { - type: 'ObjectExpression', - properties: [{ - type: 'Property', - key: { - type: 'Identifier', - name: 'test', - range: [3, 7], - loc: { - start: { line: 1, column: 3 }, - end: { line: 1, column: 7 } - } - }, - value: { - type: 'FunctionExpression', - id: null, - params: [], - defaults: [], - body: { - type: 'SequenceExpression', - expressions: [{ - type: 'Literal', - value: 42, - raw: '42', - range: [22, 24], - loc: { - start: { line: 1, column: 22 }, - end: { line: 1, column: 24 } - } - }, { - type: 'Literal', - value: 42, - raw: '42', - range: [25, 27], - loc: { - start: { line: 1, column: 25 }, - end: { line: 1, column: 27 } - } - }], - range: [22, 27], - loc: { - start: { line: 1, column: 22 }, - end: { line: 1, column: 27 } - } - }, - rest: null, - generator: false, - expression: true, - range: [9, 28], - loc: { - start: { line: 1, column: 9 }, - end: { line: 1, column: 28 } - } - }, - kind: 'init', - range: [3, 28], - loc: { - start: { line: 1, column: 3 }, - end: { line: 1, column: 28 } - } - }], - range: [1, 30], - loc: { - start: { line: 1, column: 1 }, - end: { line: 1, column: 30 } - } - }, - range: [0, 31], - loc: { - start: { line: 1, column: 0 }, - end: { line: 1, column: 31 } - } - }], - range: [0, 31], - loc: { - start: { line: 1, column: 0 }, - end: { line: 1, column: 31 } - } - } - } -}; - -// 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 testIdentity(code, syntax) { - 'use strict'; - var expected, tree, actual, actual2, options, StringObject; - - // alias, so that JSLint does not complain. - StringObject = String; - - options = { - comment: false, - range: false, - loc: false, - tokens: false, - raw: false - }; - - tree = esprima.parse(code, options); - expected = JSON.stringify(tree, adjustRegexLiteral, 4); - tree = esprima.parse(escodegen.generate(tree), options); - actual = JSON.stringify(tree, adjustRegexLiteral, 4); - tree = esprima.parse(escodegen.generate(syntax), options); - actual2 = JSON.stringify(tree, adjustRegexLiteral, 4); - expect(actual).to.be.equal(expected); - expect(actual2).to.be.equal(expected); -} - -function testGenerate(expected, result) { - 'use strict'; - var actual, options; - - options = { - indent: ' ', - parse: esprima.parse, - moz: { - starlessGenerator: true, - comprehensionExpressionStartsWithAssignment: true - } - }; - - actual = escodegen.generate(result.generateFrom, options); - expect(actual).to.be.equal(expected); -} - -function isGeneratorIdentityFixture(result) { - 'use strict'; - return !result.hasOwnProperty('generateFrom') && - !result.hasOwnProperty('result'); -} - -function runTest(code, result) { - 'use strict'; - if (result.hasOwnProperty('generateFrom')) { - testGenerate(code, result); - } else { - testIdentity(code, result); - } -} - -describe('moz test', function () { - Object.keys(data).forEach(function (category) { - Object.keys(data[category]).forEach(function (source) { - it(category, function () { - var expected = data[category][source]; - runTest(source, expected); - }); - }); - }); -}); -/* vim: set sw=4 ts=4 et tw=80 : */