Added support for namespaces and member expressions in tag names.
This commit is contained in:
@@ -4,6 +4,7 @@
|
||||
<title>Acorn test suite</title>
|
||||
<script src="../acorn.js"></script>
|
||||
<script src="driver.js"></script>
|
||||
<script src="tests-jsx.js" charset="utf-8"></script>
|
||||
<script src="tests.js" charset="utf-8"></script>
|
||||
<script src="tests-harmony.js" charset="utf-8"></script>
|
||||
</head>
|
||||
|
||||
@@ -6,10 +6,10 @@ if (typeof exports != "undefined") {
|
||||
var testAssert = require("./driver.js").testAssert;
|
||||
}
|
||||
|
||||
test('<a />', {
|
||||
type: 'Program',
|
||||
body: [
|
||||
{
|
||||
// Simply taken from esprima-fb/fbtest.js
|
||||
var fbTestFixture = {
|
||||
'XJS': {
|
||||
'<a />': {
|
||||
type: "ExpressionStatement",
|
||||
expression: {
|
||||
type: "XJSElement",
|
||||
@@ -18,8 +18,7 @@ test('<a />', {
|
||||
name: {
|
||||
type: "XJSIdentifier",
|
||||
name: "a",
|
||||
start: 1,
|
||||
end: 2,
|
||||
range: [1, 2],
|
||||
loc: {
|
||||
start: { line: 1, column: 1 },
|
||||
end: { line: 1, column: 2 }
|
||||
@@ -27,27 +26,234 @@ test('<a />', {
|
||||
},
|
||||
selfClosing: true,
|
||||
attributes: [],
|
||||
start: 0,
|
||||
end: 5,
|
||||
range: [0, 5],
|
||||
loc: {
|
||||
start: { line: 1, column: 0 },
|
||||
end: { line: 1, column: 5 }
|
||||
}
|
||||
},
|
||||
children: [],
|
||||
start: 0,
|
||||
end: 5,
|
||||
range: [0, 5],
|
||||
loc: {
|
||||
start: { line: 1, column: 0 },
|
||||
end: { line: 1, column: 5 }
|
||||
}
|
||||
},
|
||||
start: 0,
|
||||
end: 5,
|
||||
range: [0, 5],
|
||||
loc: {
|
||||
start: { line: 1, column: 0 },
|
||||
end: { line: 1, column: 5 }
|
||||
}
|
||||
},
|
||||
'<a\n/>': {
|
||||
type: "ExpressionStatement",
|
||||
expression: {
|
||||
type: "XJSElement",
|
||||
openingElement: {
|
||||
type: "XJSOpeningElement",
|
||||
name: {
|
||||
type: "XJSIdentifier",
|
||||
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
|
||||
}
|
||||
}
|
||||
},
|
||||
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: "XJSElement",
|
||||
openingElement: {
|
||||
type: "XJSOpeningElement",
|
||||
name: {
|
||||
type: "XJSIdentifier",
|
||||
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: "XJSClosingElement",
|
||||
name: {
|
||||
type: "XJSIdentifier",
|
||||
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
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}, {locations: true});
|
||||
}
|
||||
};
|
||||
|
||||
// patching test data to match acorn-specific format instead of esprima-specific one
|
||||
function esprima2acorn(ast, isTopLevel) {
|
||||
if ('range' in ast) {
|
||||
ast.start = ast.range[0];
|
||||
ast.end = ast.range[1];
|
||||
delete ast.range;
|
||||
}
|
||||
|
||||
for (var subPropName in ast) {
|
||||
var subProp = ast[subPropName];
|
||||
if (typeof subProp === 'object' && subProp !== null) {
|
||||
ast[subPropName] = esprima2acorn(subProp);
|
||||
}
|
||||
}
|
||||
|
||||
if (isTopLevel) {
|
||||
ast = {
|
||||
type: 'Program',
|
||||
body: [ast],
|
||||
start: ast.start,
|
||||
end: ast.end
|
||||
};
|
||||
}
|
||||
|
||||
return ast;
|
||||
}
|
||||
|
||||
for (var code in fbTestFixture.XJS) {
|
||||
test(code, esprima2acorn(fbTestFixture.XJS[code], true), {locations: true});
|
||||
}
|
||||
Reference in New Issue
Block a user