// React JSX tests var fbTestFixture = { // Taken and adapted from esprima-fb/fbtest.js. 'JSX': { '': { type: "ExpressionStatement", expression: { type: "JSXElement", openingElement: { type: "JSXOpeningElement", name: { type: "JSXIdentifier", name: "a", range: [1, 2], loc: { start: { line: 1, column: 1 }, end: { line: 1, column: 2 } } }, selfClosing: true, attributes: [], range: [0, 5], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 5 } } }, closingElement: null, children: [], range: [0, 5], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 5 } } }, range: [0, 5], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 5 } } }, '': { type: 'ExpressionStatement', expression: { type: 'JSXElement', openingElement: { type: 'JSXOpeningElement', name: { type: 'JSXNamespacedName', namespace: { type: 'JSXIdentifier', name: 'n', range: [1, 2], loc: { start: { line: 1, column: 1 }, end: { line: 1, column: 2 } } }, name: { type: 'JSXIdentifier', name: 'a', range: [3, 4], loc: { start: { line: 1, column: 3 }, end: { line: 1, column: 4 } } }, range: [1, 4], loc: { start: { line: 1, column: 1 }, end: { line: 1, column: 4 } } }, selfClosing: true, attributes: [{ type: 'JSXAttribute', name: { type: 'JSXNamespacedName', namespace: { type: 'JSXIdentifier', name: 'n', range: [5, 6], loc: { start: { line: 1, column: 5 }, end: { line: 1, column: 6 } } }, name: { type: 'JSXIdentifier', name: 'v', range: [7, 8], loc: { start: { line: 1, column: 7 }, end: { line: 1, column: 8 } } }, range: [5, 8], loc: { start: { line: 1, column: 5 }, end: { line: 1, column: 8 } } }, value: null, range: [5, 8], loc: { start: { line: 1, column: 5 }, end: { line: 1, column: 8 } } }], range: [0, 11], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 11 } } }, closingElement: null, children: [], range: [0, 11], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 11 } } }, range: [0, 11], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 11 } } }, ' {value} ': { type: 'ExpressionStatement', expression: { type: 'JSXElement', openingElement: { type: 'JSXOpeningElement', name: { type: 'JSXIdentifier', name: 'a', range: [1, 2], loc: { start: { line: 1, column: 1 }, end: { line: 1, column: 2 } } }, selfClosing: false, attributes: [{ type: 'JSXAttribute', name: { type: 'JSXNamespacedName', namespace: { type: 'JSXIdentifier', name: 'n', range: [3, 4], loc: { start: { line: 1, column: 3 }, end: { line: 1, column: 4 } } }, name: { type: 'JSXIdentifier', name: 'foo', range: [5, 8], loc: { start: { line: 1, column: 5 }, end: { line: 1, column: 8 } } }, range: [3, 8], loc: { start: { line: 1, column: 3 }, end: { line: 1, column: 8 } } }, value: { type: 'Literal', value: 'bar', raw: '"bar"', range: [9, 14], loc: { start: { line: 1, column: 9 }, end: { line: 1, column: 14 } } }, range: [3, 14], loc: { start: { line: 1, column: 3 }, end: { line: 1, column: 14 } } }], range: [0, 15], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 15 } } }, closingElement: { type: 'JSXClosingElement', name: { type: 'JSXIdentifier', name: 'a', range: [38, 39], loc: { start: { line: 1, column: 38 }, end: { line: 1, column: 39 } } }, range: [36, 40], loc: { start: { line: 1, column: 36 }, end: { line: 1, column: 40 } } }, children: [{ type: 'Literal', value: ' ', raw: ' ', range: [15, 16], loc: { start: { line: 1, column: 15 }, end: { line: 1, column: 16 } } }, { type: 'JSXExpressionContainer', expression: { type: 'Identifier', name: 'value', range: [17, 22], loc: { start: { line: 1, column: 17 }, end: { line: 1, column: 22 } } }, range: [16, 23], loc: { start: { line: 1, column: 16 }, end: { line: 1, column: 23 } } }, { type: 'Literal', value: ' ', raw: ' ', range: [23, 24], loc: { start: { line: 1, column: 23 }, end: { line: 1, column: 24 } } }, { type: 'JSXElement', openingElement: { type: 'JSXOpeningElement', name: { type: 'JSXIdentifier', name: 'b', range: [25, 26], loc: { start: { line: 1, column: 25 }, end: { line: 1, column: 26 } } }, selfClosing: false, attributes: [], range: [24, 27], loc: { start: { line: 1, column: 24 }, end: { line: 1, column: 27 } } }, closingElement: { type: 'JSXClosingElement', name: { type: 'JSXIdentifier', name: 'b', range: [34, 35], loc: { start: { line: 1, column: 34 }, end: { line: 1, column: 35 } } }, range: [32, 36], loc: { start: { line: 1, column: 32 }, end: { line: 1, column: 36 } } }, children: [{ type: 'JSXElement', openingElement: { type: 'JSXOpeningElement', name: { type: 'JSXIdentifier', name: 'c', range: [28, 29], loc: { start: { line: 1, column: 28 }, end: { line: 1, column: 29 } } }, selfClosing: true, attributes: [], range: [27, 32], loc: { start: { line: 1, column: 27 }, end: { line: 1, column: 32 } } }, closingElement: null, children: [], range: [27, 32], loc: { start: { line: 1, column: 27 }, end: { line: 1, column: 32 } } }], range: [24, 36], loc: { start: { line: 1, column: 24 }, end: { line: 1, column: 36 } } }], range: [0, 40], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 40 } } }, range: [0, 40], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 40 } } }, '': { type: "ExpressionStatement", expression: { type: "JSXElement", openingElement: { type: "JSXOpeningElement", name: { type: "JSXIdentifier", name: "a", range: [1, 2] }, selfClosing: true, attributes: [ { type: "JSXAttribute", name: { type: "JSXIdentifier", name: "b", range: [3, 4] }, value: { type: "JSXExpressionContainer", expression: { type: "Literal", value: " ", raw: "\" \"", range: [6, 9] }, range: [5, 10] }, range: [3, 10] }, { type: "JSXAttribute", name: { type: "JSXIdentifier", name: "c", range: [11, 12] }, value: { type: "Literal", value: " ", raw: "\" \"", range: [13, 16] }, range: [11, 16] }, { type: "JSXAttribute", name: { type: "JSXIdentifier", name: "d", range: [17, 18] }, value: { type: "Literal", value: "&", raw: "\"&\"", range: [19, 26] }, range: [17, 26] }, { type: "JSXAttribute", name: { type: "JSXIdentifier", name: "e", range: [27, 28] }, value: { type: "Literal", value: "&r;", raw: "\"&r;\"", range: [29, 37] }, range: [27, 37] } ], range: [0, 40] }, closingElement: null, children: [], range: [0, 40] }, range: [0, 40] }, '': { type: "ExpressionStatement", expression: { type: "JSXElement", openingElement: { type: "JSXOpeningElement", name: { type: "JSXIdentifier", name: "a", range: [ 1, 2 ], loc: { start: { line: 1, column: 1 }, end: { line: 1, column: 2 } } }, selfClosing: true, attributes: [], range: [ 0, 5 ], loc: { start: { line: 1, column: 0 }, end: { line: 2, column: 2 } } }, closingElement: null, children: [], range: [ 0, 5 ], loc: { start: { line: 1, column: 0 }, end: { line: 2, column: 2 } } }, range: [ 0, 5 ], loc: { start: { line: 1, column: 0 }, end: { line: 2, column: 2 } } }, '<日本語>': { type: "ExpressionStatement", expression: { type: "JSXElement", openingElement: { type: "JSXOpeningElement", name: { type: "JSXIdentifier", name: "日本語", range: [ 1, 4 ], loc: { start: { line: 1, column: 1 }, end: { line: 1, column: 4 } } }, selfClosing: false, attributes: [], range: [ 0, 5 ], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 5 } } }, closingElement: { type: "JSXClosingElement", name: { type: "JSXIdentifier", name: "日本語", range: [ 7, 10 ], loc: { start: { line: 1, column: 7 }, end: { line: 1, column: 10 } } }, range: [ 5, 11 ], loc: { start: { line: 1, column: 5 }, end: { line: 1, column: 11 } } }, children: [], range: [ 0, 11 ], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 11 } } }, range: [ 0, 11 ], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 11 } } }, '\nbar\nbaz\n': { type: "ExpressionStatement", expression: { type: "JSXElement", openingElement: { type: "JSXOpeningElement", name: { type: "JSXIdentifier", name: "AbC-def", range: [ 1, 8 ], loc: { start: { line: 1, column: 1 }, end: { line: 1, column: 8 } } }, selfClosing: false, attributes: [ { type: "JSXAttribute", name: { type: "JSXIdentifier", name: "test", range: [ 11, 15 ], loc: { start: { line: 2, column: 2 }, end: { line: 2, column: 6 } } }, value: { type: "Literal", value: "&&", raw: "\"&&\"", range: [ 16, 31 ], loc: { start: { line: 2, column: 7 }, end: { line: 2, column: 22 } } }, range: [ 11, 31 ], loc: { start: { line: 2, column: 2 }, end: { line: 2, column: 22 } } } ], range: [ 0, 32 ], loc: { start: { line: 1, column: 0 }, end: { line: 2, column: 23 } } }, closingElement: { type: "JSXClosingElement", name: { type: "JSXIdentifier", name: "AbC-def", range: [ 43, 50 ], loc: { start: { line: 5, column: 2 }, end: { line: 5, column: 9 } } }, range: [ 41, 51 ], loc: { start: { line: 5, column: 0 }, end: { line: 5, column: 10 } } }, children: [ { type: "Literal", value: "\nbar\nbaz\n", raw: "\nbar\nbaz\n", range: [ 32, 41 ], loc: { start: { line: 2, column: 23 }, end: { line: 5, column: 0 } } } ], range: [ 0, 51 ], loc: { start: { line: 1, column: 0 }, end: { line: 5, column: 10 } } }, range: [ 0, 51 ], loc: { start: { line: 1, column: 0 }, end: { line: 5, column: 10 } } }, ' : } />': { type: "ExpressionStatement", expression: { type: "JSXElement", openingElement: { type: "JSXOpeningElement", name: { type: "JSXIdentifier", name: "a", range: [ 1, 2 ], loc: { start: { line: 1, column: 1 }, end: { line: 1, column: 2 } } }, selfClosing: true, attributes: [ { type: "JSXAttribute", name: { type: "JSXIdentifier", name: "b", range: [ 3, 4 ], loc: { start: { line: 1, column: 3 }, end: { line: 1, column: 4 } } }, value: { type: "JSXExpressionContainer", expression: { type: "ConditionalExpression", test: { type: "Identifier", name: "x", range: [ 6, 7 ], loc: { start: { line: 1, column: 6 }, end: { line: 1, column: 7 } } }, consequent: { type: "JSXElement", openingElement: { type: "JSXOpeningElement", name: { type: "JSXIdentifier", name: "c", range: [ 11, 12 ], loc: { start: { line: 1, column: 11 }, end: { line: 1, column: 12 } } }, selfClosing: true, attributes: [], range: [ 10, 15 ], loc: { start: { line: 1, column: 10 }, end: { line: 1, column: 15 } } }, closingElement: null, children: [], range: [ 10, 15 ], loc: { start: { line: 1, column: 10 }, end: { line: 1, column: 15 } } }, alternate: { type: "JSXElement", openingElement: { type: "JSXOpeningElement", name: { type: "JSXIdentifier", name: "d", range: [ 19, 20 ], loc: { start: { line: 1, column: 19 }, end: { line: 1, column: 20 } } }, selfClosing: true, attributes: [], range: [ 18, 23 ], loc: { start: { line: 1, column: 18 }, end: { line: 1, column: 23 } } }, closingElement: null, children: [], range: [ 18, 23 ], loc: { start: { line: 1, column: 18 }, end: { line: 1, column: 23 } } }, range: [ 6, 23 ], loc: { start: { line: 1, column: 6 }, end: { line: 1, column: 23 } } }, range: [ 5, 24 ], loc: { start: { line: 1, column: 5 }, end: { line: 1, column: 24 } } }, range: [ 3, 24 ], loc: { start: { line: 1, column: 3 }, end: { line: 1, column: 24 } } } ], range: [ 0, 27 ], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 27 } } }, closingElement: null, children: [], range: [ 0, 27 ], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 27 } } }, range: [ 0, 27 ], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 27 } } }, '{}': { type: 'ExpressionStatement', expression: { type: 'JSXElement', openingElement: { type: 'JSXOpeningElement', name: { type: 'JSXIdentifier', name: 'a', range: [1, 2], loc: { start: { line: 1, column: 1 }, end: { line: 1, column: 2 } } }, selfClosing: false, attributes: [], range: [0, 3], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 3 } } }, closingElement: { type: 'JSXClosingElement', name: { type: 'JSXIdentifier', name: 'a', range: [7, 8], loc: { start: { line: 1, column: 7 }, end: { line: 1, column: 8 } } }, range: [5, 9], loc: { start: { line: 1, column: 5 }, end: { line: 1, column: 9 } } }, children: [{ type: 'JSXExpressionContainer', expression: { type: 'JSXEmptyExpression', range: [4, 4], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 4 } } }, range: [3, 5], loc: { start: { line: 1, column: 3 }, end: { line: 1, column: 5 } } }], range: [0, 9], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 9 } } }, range: [0, 9], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 9 } } }, '{/* this is a comment */}': { type: 'ExpressionStatement', expression: { type: 'JSXElement', openingElement: { type: 'JSXOpeningElement', name: { type: 'JSXIdentifier', name: 'a', range: [1, 2], loc: { start: { line: 1, column: 1 }, end: { line: 1, column: 2 } } }, selfClosing: false, attributes: [], range: [0, 3], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 3 } } }, closingElement: { type: 'JSXClosingElement', name: { type: 'JSXIdentifier', name: 'a', range: [30, 31], loc: { start: { line: 1, column: 30 }, end: { line: 1, column: 31 } } }, range: [28, 32], loc: { start: { line: 1, column: 28 }, end: { line: 1, column: 32 } } }, children: [{ type: 'JSXExpressionContainer', expression: { type: 'JSXEmptyExpression', range: [4, 27], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 27 } } }, range: [3, 28], loc: { start: { line: 1, column: 3 }, end: { line: 1, column: 28 } } }], range: [0, 32], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 32 } } }, range: [0, 32], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 32 } } }, '
@test content
': { type: 'ExpressionStatement', expression: { type: 'JSXElement', openingElement: { type: 'JSXOpeningElement', name: { type: 'JSXIdentifier', name: 'div', range: [1, 4], loc: { start: { line: 1, column: 1 }, end: { line: 1, column: 4 } } }, selfClosing: false, attributes: [], range: [0, 5], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 5 } } }, closingElement: { type: 'JSXClosingElement', name: { type: 'JSXIdentifier', name: 'div', range: [20, 23], loc: { start: { line: 1, column: 20 }, end: { line: 1, column: 23 } } }, range: [18, 24], loc: { start: { line: 1, column: 18 }, end: { line: 1, column: 24 } } }, children: [{ type: 'Literal', value: '@test content', raw: '@test content', range: [5, 18], loc: { start: { line: 1, column: 5 }, end: { line: 1, column: 18 } } }], range: [0, 24], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 24 } } }, range: [0, 24], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 24 } } }, '

7x invalid-js-identifier
': { type: 'ExpressionStatement', expression: { type: 'JSXElement', openingElement: { type: 'JSXOpeningElement', name: { type: 'JSXIdentifier', name: 'div', range: [ 1, 4 ], loc: { start: { line: 1, column: 1 }, end: { line: 1, column: 4 } } }, selfClosing: false, attributes: [], range: [ 0, 5 ], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 5 } } }, closingElement: { type: 'JSXClosingElement', name: { type: 'JSXIdentifier', name: 'div', range: [ 37, 40 ], loc: { start: { line: 1, column: 37 }, end: { line: 1, column: 40 } } }, range: [ 35, 41 ], loc: { start: { line: 1, column: 35 }, end: { line: 1, column: 41 } } }, children: [{ type: 'JSXElement', openingElement: { type: 'JSXOpeningElement', name: { type: 'JSXIdentifier', name: 'br', range: [ 6, 8 ], loc: { start: { line: 1, column: 6 }, end: { line: 1, column: 8 } } }, selfClosing: true, attributes: [], range: [ 5, 11 ], loc: { start: { line: 1, column: 5 }, end: { line: 1, column: 11 } } }, closingElement: null, children: [], range: [ 5, 11 ], loc: { start: { line: 1, column: 5 }, end: { line: 1, column: 11 } } }, { type: 'Literal', value: '7x invalid-js-identifier', raw: '7x invalid-js-identifier', range: [ 11, 35 ], loc: { start: { line: 1, column: 11 }, end: { line: 1, column: 35 } } }], range: [ 0, 41 ], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 41 } } }, range: [ 0, 41 ], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 41 } } }, ' right=monkeys /> gorillas />': { "type": "ExpressionStatement", "expression": { "type": "JSXElement", "openingElement": { "type": "JSXOpeningElement", "name": { "type": "JSXIdentifier", "name": "LeftRight", "range": [ 1, 10 ], "loc": { "start": { "line": 1, "column": 1 }, "end": { "line": 1, "column": 10 } } }, "selfClosing": true, "attributes": [ { "type": "JSXAttribute", "name": { "type": "JSXIdentifier", "name": "left", "range": [ 11, 15 ], "loc": { "start": { "line": 1, "column": 11 }, "end": { "line": 1, "column": 15 } } }, "value": { "type": "JSXElement", "openingElement": { "type": "JSXOpeningElement", "name": { "type": "JSXIdentifier", "name": "a", "range": [ 17, 18 ], "loc": { "start": { "line": 1, "column": 17 }, "end": { "line": 1, "column": 18 } } }, "selfClosing": true, "attributes": [], "range": [ 16, 21 ], "loc": { "start": { "line": 1, "column": 16 }, "end": { "line": 1, "column": 21 } } }, closingElement: null, "children": [], "range": [ 16, 21 ], "loc": { "start": { "line": 1, "column": 16 }, "end": { "line": 1, "column": 21 } } }, "range": [ 11, 21 ], "loc": { "start": { "line": 1, "column": 11 }, "end": { "line": 1, "column": 21 } } }, { "type": "JSXAttribute", "name": { "type": "JSXIdentifier", "name": "right", "range": [ 22, 27 ], "loc": { "start": { "line": 1, "column": 22 }, "end": { "line": 1, "column": 27 } } }, "value": { "type": "JSXElement", "openingElement": { "type": "JSXOpeningElement", "name": { "type": "JSXIdentifier", "name": "b", "range": [ 29, 30 ], "loc": { "start": { "line": 1, "column": 29 }, "end": { "line": 1, "column": 30 } } }, "selfClosing": false, "attributes": [], "range": [ 28, 31 ], "loc": { "start": { "line": 1, "column": 28 }, "end": { "line": 1, "column": 31 } } }, "closingElement": { "type": "JSXClosingElement", "name": { "type": "JSXIdentifier", "name": "b", "range": [ 52, 53 ], "loc": { "start": { "line": 1, "column": 52 }, "end": { "line": 1, "column": 53 } } }, "range": [ 50, 54 ], "loc": { "start": { "line": 1, "column": 50 }, "end": { "line": 1, "column": 54 } } }, "children": [ { "type": "Literal", "value": "monkeys /> gorillas", "raw": "monkeys /> gorillas", "range": [ 31, 50 ], "loc": { "start": { "line": 1, "column": 31 }, "end": { "line": 1, "column": 50 } } } ], "range": [ 28, 54 ], "loc": { "start": { "line": 1, "column": 28 }, "end": { "line": 1, "column": 54 } } }, "range": [ 22, 54 ], "loc": { "start": { "line": 1, "column": 22 }, "end": { "line": 1, "column": 54 } } } ], "range": [ 0, 57 ], "loc": { "start": { "line": 1, "column": 0 }, "end": { "line": 1, "column": 57 } } }, closingElement: null, "children": [], "range": [ 0, 57 ], "loc": { "start": { "line": 1, "column": 0 }, "end": { "line": 1, "column": 57 } } }, "range": [ 0, 57 ], "loc": { "start": { "line": 1, "column": 0 }, "end": { "line": 1, "column": 57 } } }, '': { type: 'ExpressionStatement', expression: { type: 'JSXElement', openingElement: { type: 'JSXOpeningElement', name: { type: 'JSXMemberExpression', object: { type: 'JSXIdentifier', name: 'a', range: [1, 2], loc: { start: { line: 1, column: 1 }, end: { line: 1, column: 2 } } }, property: { type: 'JSXIdentifier', name: 'b', range: [3, 4], loc: { start: { line: 1, column: 3 }, end: { line: 1, column: 4 } } }, range: [1, 4], loc: { start: { line: 1, column: 1 }, end: { line: 1, column: 4 } } }, selfClosing: false, attributes: [], range: [0, 5], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 5 } } }, closingElement: { type: 'JSXClosingElement', name: { type: 'JSXMemberExpression', object: { type: 'JSXIdentifier', name: 'a', range: [7, 8], loc: { start: { line: 1, column: 7 }, end: { line: 1, column: 8 } } }, property: { type: 'JSXIdentifier', name: 'b', range: [9, 10], loc: { start: { line: 1, column: 9 }, end: { line: 1, column: 10 } } }, range: [7, 10], loc: { start: { line: 1, column: 7 }, end: { line: 1, column: 10 } } }, range: [5, 11], loc: { start: { line: 1, column: 5 }, end: { line: 1, column: 11 } } }, children: [], range: [0, 11], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 11 } } }, range: [0, 11], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 11 } } }, '': { type: 'ExpressionStatement', expression: { type: 'JSXElement', openingElement: { type: 'JSXOpeningElement', name: { type: 'JSXMemberExpression', object: { type: 'JSXMemberExpression', object: { type: 'JSXIdentifier', name: 'a', range: [1, 2], loc: { start: { line: 1, column: 1 }, end: { line: 1, column: 2 } } }, property: { type: 'JSXIdentifier', name: 'b', range: [3, 4], loc: { start: { line: 1, column: 3 }, end: { line: 1, column: 4 } } }, range: [1, 4], loc: { start: { line: 1, column: 1 }, end: { line: 1, column: 4 } } }, property: { type: 'JSXIdentifier', name: 'c', range: [5, 6], loc: { start: { line: 1, column: 5 }, end: { line: 1, column: 6 } } }, range: [1, 6], loc: { start: { line: 1, column: 1 }, end: { line: 1, column: 6 } } }, selfClosing: false, attributes: [], range: [0, 7], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 7 } } }, closingElement: { type: 'JSXClosingElement', name: { type: 'JSXMemberExpression', object: { type: 'JSXMemberExpression', object: { type: 'JSXIdentifier', name: 'a', range: [9, 10], loc: { start: { line: 1, column: 9 }, end: { line: 1, column: 10 } } }, property: { type: 'JSXIdentifier', name: 'b', range: [11, 12], loc: { start: { line: 1, column: 11 }, end: { line: 1, column: 12 } } }, range: [9, 12], loc: { start: { line: 1, column: 9 }, end: { line: 1, column: 12 } } }, property: { type: 'JSXIdentifier', name: 'c', range: [13, 14], loc: { start: { line: 1, column: 13 }, end: { line: 1, column: 14 } } }, range: [9, 14], loc: { start: { line: 1, column: 9 }, end: { line: 1, column: 14 } } }, range: [7, 15], loc: { start: { line: 1, column: 7 }, end: { line: 1, column: 15 } } }, children: [], 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 } } }, // In order to more useful parse errors, we disallow following an // JSXElement by a less-than symbol. In the rare case that the binary // operator was intended, the tag can be wrapped in parentheses: '(
) < x;': { type: 'ExpressionStatement', expression: { type: 'BinaryExpression', operator: '<', left: { type: 'JSXElement', openingElement: { type: 'JSXOpeningElement', name: { type: 'JSXIdentifier', name: 'div', range: [2, 5], loc: { start: { line: 1, column: 2 }, end: { line: 1, column: 5 } } }, selfClosing: true, attributes: [], range: [1, 8], loc: { start: { line: 1, column: 1 }, end: { line: 1, column: 8 } } }, closingElement: null, children: [], range: [1, 8], loc: { start: { line: 1, column: 1 }, end: { line: 1, column: 8 } } }, right: { type: 'Identifier', name: 'x', range: [12, 13], loc: { start: { line: 1, column: 12 }, end: { line: 1, column: 13 } } }, range: [0, 13], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 13 } } }, range: [0, 14], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 14 } } }, '
': { "type": "ExpressionStatement", "expression": { "type": "JSXElement", "openingElement": { "type": "JSXOpeningElement", "name": { "type": "JSXIdentifier", "name": "div", "range": [ 1, 4 ], "loc": { "start": { "line": 1, "column": 1 }, "end": { "line": 1, "column": 4 } } }, "selfClosing": true, "attributes": [ { "type": "JSXSpreadAttribute", "argument": { "type": "Identifier", "name": "props", "range": [ 9, 14 ], "loc": { "start": { "line": 1, "column": 9 }, "end": { "line": 1, "column": 14 } } }, "range": [ 5, 15 ], "loc": { "start": { "line": 1, "column": 5 }, "end": { "line": 1, "column": 15 } } } ], "range": [ 0, 18 ], "loc": { "start": { "line": 1, "column": 0 }, "end": { "line": 1, "column": 18 } } }, closingElement: null, "children": [], "range": [ 0, 18 ], "loc": { "start": { "line": 1, "column": 0 }, "end": { "line": 1, "column": 18 } } }, "range": [ 0, 18 ], "loc": { "start": { "line": 1, "column": 0 }, "end": { "line": 1, "column": 18 } } }, '
': { "type": "ExpressionStatement", "expression": { "type": "JSXElement", "openingElement": { "type": "JSXOpeningElement", "name": { "type": "JSXIdentifier", "name": "div", "range": [ 1, 4 ], "loc": { "start": { "line": 1, "column": 1 }, "end": { "line": 1, "column": 4 } } }, "selfClosing": true, "attributes": [ { "type": "JSXSpreadAttribute", "argument": { "type": "Identifier", "name": "props", "range": [ 9, 14 ], "loc": { "start": { "line": 1, "column": 9 }, "end": { "line": 1, "column": 14 } } }, "range": [ 5, 15 ], "loc": { "start": { "line": 1, "column": 5 }, "end": { "line": 1, "column": 15 } } }, { "type": "JSXAttribute", "name": { "type": "JSXIdentifier", "name": "post", "range": [ 16, 20 ], "loc": { "start": { "line": 1, "column": 16 }, "end": { "line": 1, "column": 20 } } }, "value": { "type": "Literal", "value": "attribute", "raw": "\"attribute\"", "range": [ 21, 32 ], "loc": { "start": { "line": 1, "column": 21 }, "end": { "line": 1, "column": 32 } } }, "range": [ 16, 32 ], "loc": { "start": { "line": 1, "column": 16 }, "end": { "line": 1, "column": 32 } } } ], "range": [ 0, 35 ], "loc": { "start": { "line": 1, "column": 0 }, "end": { "line": 1, "column": 35 } } }, closingElement: null, "children": [], "range": [ 0, 35 ], "loc": { "start": { "line": 1, "column": 0 }, "end": { "line": 1, "column": 35 } } }, "range": [ 0, 35 ], "loc": { "start": { "line": 1, "column": 0 }, "end": { "line": 1, "column": 35 } } }, '
': { "type": "ExpressionStatement", "expression": { "type": "JSXElement", "openingElement": { "type": "JSXOpeningElement", "name": { "type": "JSXIdentifier", "name": "div", "range": [ 1, 4 ], "loc": { "start": { "line": 1, "column": 1 }, "end": { "line": 1, "column": 4 } } }, "selfClosing": false, "attributes": [ { "type": "JSXAttribute", "name": { "type": "JSXIdentifier", "name": "pre", "range": [ 5, 8 ], "loc": { "start": { "line": 1, "column": 5 }, "end": { "line": 1, "column": 8 } } }, "value": { "type": "Literal", "value": "leading", "raw": "\"leading\"", "range": [ 9, 18 ], "loc": { "start": { "line": 1, "column": 9 }, "end": { "line": 1, "column": 18 } } }, "range": [ 5, 18 ], "loc": { "start": { "line": 1, "column": 5 }, "end": { "line": 1, "column": 18 } } }, { "type": "JSXAttribute", "name": { "type": "JSXIdentifier", "name": "pre2", "range": [ 19, 23 ], "loc": { "start": { "line": 1, "column": 19 }, "end": { "line": 1, "column": 23 } } }, "value": { "type": "Literal", "value": "attribute", "raw": "\"attribute\"", "range": [ 24, 35 ], "loc": { "start": { "line": 1, "column": 24 }, "end": { "line": 1, "column": 35 } } }, "range": [ 19, 35 ], "loc": { "start": { "line": 1, "column": 19 }, "end": { "line": 1, "column": 35 } } }, { "type": "JSXSpreadAttribute", "argument": { "type": "Identifier", "name": "props", "range": [ 40, 45 ], "loc": { "start": { "line": 1, "column": 40 }, "end": { "line": 1, "column": 45 } } }, "range": [ 36, 46 ], "loc": { "start": { "line": 1, "column": 36 }, "end": { "line": 1, "column": 46 } } } ], "range": [ 0, 47 ], "loc": { "start": { "line": 1, "column": 0 }, "end": { "line": 1, "column": 47 } } }, "closingElement": { "type": "JSXClosingElement", "name": { "type": "JSXIdentifier", "name": "div", "range": [ 49, 52 ], "loc": { "start": { "line": 1, "column": 49 }, "end": { "line": 1, "column": 52 } } }, "range": [ 47, 53 ], "loc": { "start": { "line": 1, "column": 47 }, "end": { "line": 1, "column": 53 } } }, "children": [], "range": [ 0, 53 ], "loc": { "start": { "line": 1, "column": 0 }, "end": { "line": 1, "column": 53 } } }, "range": [ 0, 53 ], "loc": { "start": { "line": 1, "column": 0 }, "end": { "line": 1, "column": 53 } } }, '
{aa.b}
': { "type": "ExpressionStatement", "start": 0, "end": 52, "loc": { "start": { "line": 1, "column": 0 }, "end": { "line": 1, "column": 52 } }, "range": [ 0, 52 ], "expression": { "type": "JSXElement", "start": 0, "end": 52, "loc": { "start": { "line": 1, "column": 0 }, "end": { "line": 1, "column": 52 } }, "range": [ 0, 52 ], "openingElement": { "type": "JSXOpeningElement", "start": 0, "end": 31, "loc": { "start": { "line": 1, "column": 0 }, "end": { "line": 1, "column": 31 } }, "range": [ 0, 31 ], "attributes": [ { "type": "JSXAttribute", "start": 3, "end": 16, "loc": { "start": { "line": 1, "column": 3 }, "end": { "line": 1, "column": 16 } }, "range": [ 3, 16 ], "name": { "type": "JSXIdentifier", "start": 3, "end": 5, "loc": { "start": { "line": 1, "column": 3 }, "end": { "line": 1, "column": 5 } }, "range": [ 3, 5 ], "name": "aa" }, "value": { "type": "JSXExpressionContainer", "start": 6, "end": 16, "loc": { "start": { "line": 1, "column": 6 }, "end": { "line": 1, "column": 16 } }, "range": [ 6, 16 ], "expression": { "type": "MemberExpression", "start": 7, "end": 15, "loc": { "start": { "line": 1, "column": 7 }, "end": { "line": 1, "column": 15 } }, "range": [ 7, 15 ], "object": { "type": "MemberExpression", "start": 7, "end": 12, "loc": { "start": { "line": 1, "column": 7 }, "end": { "line": 1, "column": 12 } }, "range": [ 7, 12 ], "object": { "type": "Identifier", "start": 7, "end": 9, "loc": { "start": { "line": 1, "column": 7 }, "end": { "line": 1, "column": 9 } }, "range": [ 7, 9 ], "name": "aa" }, "property": { "type": "Identifier", "start": 10, "end": 12, "loc": { "start": { "line": 1, "column": 10 }, "end": { "line": 1, "column": 12 } }, "range": [ 10, 12 ], "name": "bb" }, "computed": false }, "property": { "type": "Identifier", "start": 13, "end": 15, "loc": { "start": { "line": 1, "column": 13 }, "end": { "line": 1, "column": 15 } }, "range": [ 13, 15 ], "name": "cc" }, "computed": false } } }, { "type": "JSXAttribute", "start": 17, "end": 30, "loc": { "start": { "line": 1, "column": 17 }, "end": { "line": 1, "column": 30 } }, "range": [ 17, 30 ], "name": { "type": "JSXIdentifier", "start": 17, "end": 19, "loc": { "start": { "line": 1, "column": 17 }, "end": { "line": 1, "column": 19 } }, "range": [ 17, 19 ], "name": "bb" }, "value": { "type": "JSXExpressionContainer", "start": 20, "end": 30, "loc": { "start": { "line": 1, "column": 20 }, "end": { "line": 1, "column": 30 } }, "range": [ 20, 30 ], "expression": { "type": "MemberExpression", "start": 21, "end": 29, "loc": { "start": { "line": 1, "column": 21 }, "end": { "line": 1, "column": 29 } }, "range": [ 21, 29 ], "object": { "type": "MemberExpression", "start": 21, "end": 26, "loc": { "start": { "line": 1, "column": 21 }, "end": { "line": 1, "column": 26 } }, "range": [ 21, 26 ], "object": { "type": "Identifier", "start": 21, "end": 23, "loc": { "start": { "line": 1, "column": 21 }, "end": { "line": 1, "column": 23 } }, "range": [ 21, 23 ], "name": "bb" }, "property": { "type": "Identifier", "start": 24, "end": 26, "loc": { "start": { "line": 1, "column": 24 }, "end": { "line": 1, "column": 26 } }, "range": [ 24, 26 ], "name": "cc" }, "computed": false }, "property": { "type": "Identifier", "start": 27, "end": 29, "loc": { "start": { "line": 1, "column": 27 }, "end": { "line": 1, "column": 29 } }, "range": [ 27, 29 ], "name": "dd" }, "computed": false } } } ], "name": { "type": "JSXIdentifier", "start": 1, "end": 2, "loc": { "start": { "line": 1, "column": 1 }, "end": { "line": 1, "column": 2 } }, "range": [ 1, 2 ], "name": "A" }, "selfClosing": false }, "closingElement": { "type": "JSXClosingElement", "start": 48, "end": 52, "loc": { "start": { "line": 1, "column": 48 }, "end": { "line": 1, "column": 52 } }, "range": [ 48, 52 ], "name": { "type": "JSXIdentifier", "start": 50, "end": 51, "loc": { "start": { "line": 1, "column": 50 }, "end": { "line": 1, "column": 51 } }, "range": [ 50, 51 ], "name": "A" } }, "children": [ { "type": "JSXElement", "start": 31, "end": 48, "loc": { "start": { "line": 1, "column": 31 }, "end": { "line": 1, "column": 48 } }, "range": [ 31, 48 ], "openingElement": { "type": "JSXOpeningElement", "start": 31, "end": 36, "loc": { "start": { "line": 1, "column": 31 }, "end": { "line": 1, "column": 36 } }, "range": [ 31, 36 ], "attributes": [], "name": { "type": "JSXIdentifier", "start": 32, "end": 35, "loc": { "start": { "line": 1, "column": 32 }, "end": { "line": 1, "column": 35 } }, "range": [ 32, 35 ], "name": "div" }, "selfClosing": false }, "closingElement": { "type": "JSXClosingElement", "start": 42, "end": 48, "loc": { "start": { "line": 1, "column": 42 }, "end": { "line": 1, "column": 48 } }, "range": [ 42, 48 ], "name": { "type": "JSXIdentifier", "start": 44, "end": 47, "loc": { "start": { "line": 1, "column": 44 }, "end": { "line": 1, "column": 47 } }, "range": [ 44, 47 ], "name": "div" } }, "children": [ { "type": "JSXExpressionContainer", "start": 36, "end": 42, "loc": { "start": { "line": 1, "column": 36 }, "end": { "line": 1, "column": 42 } }, "range": [ 36, 42 ], "expression": { "type": "MemberExpression", "start": 37, "end": 41, "loc": { "start": { "line": 1, "column": 37 }, "end": { "line": 1, "column": 41 } }, "range": [ 37, 41 ], "object": { "type": "Identifier", "start": 37, "end": 39, "loc": { "start": { "line": 1, "column": 37 }, "end": { "line": 1, "column": 39 } }, "range": [ 37, 39 ], "name": "aa" }, "property": { "type": "Identifier", "start": 40, "end": 41, "loc": { "start": { "line": 1, "column": 40 }, "end": { "line": 1, "column": 41 } }, "range": [ 40, 41 ], "name": "b" }, "computed": false } } ] } ] } } }, 'Regression': { '

foo bar baz

;': { type: "ExpressionStatement", start: 0, end: 40, expression: { type: "JSXElement", start: 0, end: 38, openingElement: { type: "JSXOpeningElement", start: 0, end: 3, attributes: [], name: { type: "JSXIdentifier", start: 1, end: 2, name: "p" }, selfClosing: false }, closingElement: { type: "JSXClosingElement", start: 34, end: 38, name: { type: "JSXIdentifier", start: 36, end: 37, name: "p" } }, children: [ { type: "Literal", start: 3, end: 7, value: "foo ", raw: "foo " }, { type: "JSXElement", start: 7, end: 30, openingElement: { type: "JSXOpeningElement", start: 7, end: 22, attributes: [{ type: "JSXAttribute", start: 10, end: 21, name: { type: "JSXIdentifier", start: 10, end: 14, name: "href" }, value: { type: "Literal", start: 15, end: 21, value: "test", raw: "\"test\"" } }], name: { type: "JSXIdentifier", start: 8, end: 9, name: "a" }, selfClosing: false }, closingElement: { type: "JSXClosingElement", start: 26, end: 30, name: { type: "JSXIdentifier", start: 28, end: 29, name: "a" } }, children: [{ type: "Literal", start: 22, end: 26, value: " bar", raw: " bar" }] }, { type: "Literal", start: 30, end: 34, value: " baz", raw: " baz" } ] } }, '
{
}
': { type: 'ExpressionStatement', start: 0, end: 30, expression: { type: 'JSXElement', start: 0, end: 30, openingElement: { type: 'JSXOpeningElement', start: 0, end: 5, attributes: [], name: { type: 'JSXIdentifier', start: 1, end: 4, name: 'div' }, selfClosing: false }, closingElement: { type: 'JSXClosingElement', start: 24, end: 30, name: { type: 'JSXIdentifier', start: 26, end: 29, name: 'div' } }, children: [{ type: 'JSXExpressionContainer', start: 5, end: 24, expression: { type: 'JSXElement', start: 6, end: 23, openingElement: { type: 'JSXOpeningElement', start: 6, end: 23, attributes: [ { type: 'JSXSpreadAttribute', start: 11, end: 20, argument: { type: 'Identifier', start: 15, end: 19, name: 'test' } } ], name: { type: 'JSXIdentifier', start: 7, end: 10, name: 'div' }, selfClosing: true }, closingElement: null, children: [] } }] } }, '
{ {a} }
': { type: "ExpressionStatement", start: 0, end: 18, expression: { type: "JSXElement", start: 0, end: 18, openingElement: { type: "JSXOpeningElement", start: 0, end: 5, attributes: [], name: { type: "JSXIdentifier", start: 1, end: 4, name: "div" }, selfClosing: false }, closingElement: { type: "JSXClosingElement", start: 12, end: 18, name: { type: "JSXIdentifier", start: 14, end: 17, name: "div" } }, children: [{ type: "JSXExpressionContainer", start: 5, end: 12, expression: { type: "ObjectExpression", start: 7, end: 10, properties: [{ type: "Property", start: 8, end: 9, method: false, shorthand: true, computed: false, key: { type: "Identifier", start: 8, end: 9, name: "a" }, kind: "init", value: { type: "Identifier", start: 8, end: 9, name: "a" } }] } }] } }, '
/text
': { type: "ExpressionStatement", start: 0, end: 16, expression: { type: "JSXElement", start: 0, end: 16, openingElement: { type: "JSXOpeningElement", start: 0, end: 5, attributes: [], name: { type: "JSXIdentifier", start: 1, end: 4, name: "div" }, selfClosing: false }, closingElement: { type: "JSXClosingElement", start: 10, end: 16, name: { type: "JSXIdentifier", start: 12, end: 15, name: "div" } }, children: [{ type: "Literal", start: 5, end: 10, value: "/text", raw: "/text" }] } }, '
{a}{b}
': { type: "ExpressionStatement", start: 0, end: 17, expression: { type: "JSXElement", start: 0, end: 17, openingElement: { type: "JSXOpeningElement", start: 0, end: 5, attributes: [], name: { type: "JSXIdentifier", start: 1, end: 4, name: "div" }, selfClosing: false }, closingElement: { type: "JSXClosingElement", start: 11, end: 17, name: { type: "JSXIdentifier", start: 13, end: 16, name: "div" } }, children: [{ type: 'JSXExpressionContainer', expression: { type: 'Identifier', name: 'a', range: [6, 7], loc: { start: { line: 1, column: 6 }, end: { line: 1, column: 7 } } }, range: [5, 8], loc: { start: { line: 1, column: 5 }, end: { line: 1, column: 8 } } }, { type: 'JSXExpressionContainer', expression: { type: 'Identifier', name: 'b', range: [9, 10], loc: { start: { line: 1, column: 9 }, end: { line: 1, column: 10 } } }, range: [8, 11], loc: { start: { line: 1, column: 8 }, end: { line: 1, column: 11 } } } ] } }, '
': { type: "ExpressionStatement", range: [0, 32], expression: { type: "JSXElement", range: [0, 32], openingElement: { type: "JSXOpeningElement", range: [0, 32], attributes: [ { type: "JSXAttribute", range: [5, 18], name: { type: "JSXIdentifier", range: [5, 8], name: "pre" }, value: { type: "Literal", range: [9, 18], value: "leading" } }, { type: "JSXSpreadAttribute", range: [19, 29], argument: { type: "Identifier", range: [23, 28], name: "props" } } ], name: { type: "JSXIdentifier", range: [1, 4], name: "div" }, selfClosing: true }, closingElement: null, children: [] } }, '': { type: "ExpressionStatement", expression: { type: "JSXElement", range: [0, 64], openingElement: { type: "JSXOpeningElement", range: [0, 64], attributes: [ { type: "JSXAttribute", range: [6, 62], name: { type: "JSXIdentifier", range: [6, 7], name: "d" }, value: { type: "Literal", range: [8, 62], value: "M230 80\n\t\tA 45 45, 0, 1, 0, 275 125 \r\n L 275 80 Z", raw: "\"M230 80\n\t\tA 45 45, 0, 1, 0, 275 125 \r\n L 275 80 Z\"" } } ], name: { type: "JSXIdentifier", range: [1, 5], name: "path" }, selfClosing: true }, closingElement: null, children: [] } } } }; if (typeof exports !== "undefined") { var test = require("./driver.js").test; } for (var ns in fbTestFixture) { ns = fbTestFixture[ns]; for (var code in ns) { test(code, { type: 'Program', body: [ns[code]] }, { ecmaVersion: 6, plugins: { jsx: true }, locations: true, ranges: true }); } }