Skip to content

Commit 677e080

Browse files
author
Yui T
committed
Add tests
1 parent cabe1d6 commit 677e080

17 files changed

Lines changed: 541 additions & 4 deletions

src/compiler/emitter.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3848,7 +3848,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi
38483848
// We create a synthetic copy of the identifier in order to avoid the rewriting that might
38493849
// otherwise occur when the identifier is emitted.
38503850
index = <Identifier | LiteralExpression>createSynthesizedNode(propName.kind);
3851-
(<Identifier | LiteralExpression>index).text = (<Identifier | LiteralExpression>propName).text;
3851+
(<Identifier | LiteralExpression>index).text = unescapeIdentifier((<Identifier | LiteralExpression>propName).text);
38523852
}
38533853

38543854
return !nameIsComputed && index.kind === SyntaxKind.Identifier

src/compiler/utilities.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -238,11 +238,10 @@ namespace ts {
238238
return identifier.charCodeAt(0) === CharacterCodes._ && identifier.charCodeAt(1) === CharacterCodes._ ? true : false;
239239
}
240240
}
241-
241+
242242
// Add an extra underscore to identifiers that start with two underscores to avoid issues with magic names like '__proto__'
243-
// TODO(yuisu): comment
244243
export function escapeIdentifier(identifier: string): string {
245-
return prefixWithUnderscoreUnderscore(identifier)? "_" + identifier : identifier;
244+
return prefixWithUnderscoreUnderscore(identifier) ? "_" + identifier : identifier;
246245
}
247246

248247
// Remove extra underscore from escaped identifier
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
tests/cases/conformance/es6/modules/m1.ts(6,5): error TS1005: ',' expected.
2+
3+
4+
==== tests/cases/conformance/es6/modules/m1.ts (1 errors) ====
5+
6+
var R: any
7+
export default R = {
8+
"__": 20,
9+
"_": 10
10+
"___": 30
11+
~~~~~
12+
!!! error TS1005: ',' expected.
13+
}
14+
15+
==== tests/cases/conformance/es6/modules/m2.ts (0 errors) ====
16+
import R from "./m1";
17+
const { __, _, ___ } = R;
18+
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
//// [tests/cases/conformance/es6/modules/exportsAndImportsWithUnderscores1.ts] ////
2+
3+
//// [m1.ts]
4+
5+
var R: any
6+
export default R = {
7+
"__": 20,
8+
"_": 10
9+
"___": 30
10+
}
11+
12+
//// [m2.ts]
13+
import R from "./m1";
14+
const { __, _, ___ } = R;
15+
16+
17+
//// [m1.js]
18+
"use strict";
19+
var R;
20+
exports.__esModule = true;
21+
exports["default"] = R = {
22+
"__": 20,
23+
"_": 10,
24+
"___": 30
25+
};
26+
//// [m2.js]
27+
"use strict";
28+
var m1_1 = require("./m1");
29+
var __ = m1_1["default"].__, _ = m1_1["default"]._, ___ = m1_1["default"].___;
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
//// [tests/cases/conformance/es6/modules/exportsAndImportsWithUnderscores2.ts] ////
2+
3+
//// [m1.ts]
4+
5+
var R: any
6+
export default R = {
7+
"__esmodule": true,
8+
"__proto__": {}
9+
}
10+
11+
//// [m2.ts]
12+
import R from "./m1";
13+
const { __esmodule, __proto__ } = R;
14+
15+
16+
//// [m1.js]
17+
"use strict";
18+
var R;
19+
exports.__esModule = true;
20+
exports["default"] = R = {
21+
"__esmodule": true,
22+
"__proto__": {}
23+
};
24+
//// [m2.js]
25+
"use strict";
26+
var m1_1 = require("./m1");
27+
var __esmodule = m1_1["default"].__esmodule, __proto__ = m1_1["default"].__proto__;
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
=== tests/cases/conformance/es6/modules/m1.ts ===
2+
3+
var R: any
4+
>R : Symbol(R, Decl(m1.ts, 1, 3))
5+
6+
export default R = {
7+
>R : Symbol(R, Decl(m1.ts, 1, 3))
8+
9+
"__esmodule": true,
10+
"__proto__": {}
11+
}
12+
13+
=== tests/cases/conformance/es6/modules/m2.ts ===
14+
import R from "./m1";
15+
>R : Symbol(R, Decl(m2.ts, 0, 6))
16+
17+
const { __esmodule, __proto__ } = R;
18+
>__esmodule : Symbol(__esmodule, Decl(m2.ts, 1, 7))
19+
>__proto__ : Symbol(__proto__, Decl(m2.ts, 1, 19))
20+
>R : Symbol(R, Decl(m2.ts, 0, 6))
21+
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
=== tests/cases/conformance/es6/modules/m1.ts ===
2+
3+
var R: any
4+
>R : any
5+
6+
export default R = {
7+
>R = { "__esmodule": true, "__proto__": {}} : { "__esmodule": boolean; "__proto__": {}; }
8+
>R : any
9+
>{ "__esmodule": true, "__proto__": {}} : { "__esmodule": boolean; "__proto__": {}; }
10+
11+
"__esmodule": true,
12+
>true : boolean
13+
14+
"__proto__": {}
15+
>{} : {}
16+
}
17+
18+
=== tests/cases/conformance/es6/modules/m2.ts ===
19+
import R from "./m1";
20+
>R : { "__esmodule": boolean; "__proto__": {}; }
21+
22+
const { __esmodule, __proto__ } = R;
23+
>__esmodule : boolean
24+
>__proto__ : {}
25+
>R : { "__esmodule": boolean; "__proto__": {}; }
26+
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
//// [tests/cases/conformance/es6/modules/exportsAndImportsWithUnderscores3.ts] ////
2+
3+
//// [m1.ts]
4+
5+
var R: any
6+
export default R = {
7+
"___": 30,
8+
"___hello": 21,
9+
"_hi": 40,
10+
}
11+
12+
//// [m2.ts]
13+
import R from "./m1";
14+
const { ___, ___hello, _hi } = R;
15+
16+
17+
//// [m1.js]
18+
"use strict";
19+
var R;
20+
exports.__esModule = true;
21+
exports["default"] = R = {
22+
"___": 30,
23+
"___hello": 21,
24+
"_hi": 40
25+
};
26+
//// [m2.js]
27+
"use strict";
28+
var m1_1 = require("./m1");
29+
var ___ = m1_1["default"].___, ___hello = m1_1["default"].___hello, _hi = m1_1["default"]._hi;
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
=== tests/cases/conformance/es6/modules/m1.ts ===
2+
3+
var R: any
4+
>R : Symbol(R, Decl(m1.ts, 1, 3))
5+
6+
export default R = {
7+
>R : Symbol(R, Decl(m1.ts, 1, 3))
8+
9+
"___": 30,
10+
"___hello": 21,
11+
"_hi": 40,
12+
}
13+
14+
=== tests/cases/conformance/es6/modules/m2.ts ===
15+
import R from "./m1";
16+
>R : Symbol(R, Decl(m2.ts, 0, 6))
17+
18+
const { ___, ___hello, _hi } = R;
19+
>___ : Symbol(___, Decl(m2.ts, 1, 7))
20+
>___hello : Symbol(___hello, Decl(m2.ts, 1, 12))
21+
>_hi : Symbol(_hi, Decl(m2.ts, 1, 22))
22+
>R : Symbol(R, Decl(m2.ts, 0, 6))
23+
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
=== tests/cases/conformance/es6/modules/m1.ts ===
2+
3+
var R: any
4+
>R : any
5+
6+
export default R = {
7+
>R = { "___": 30, "___hello": 21, "_hi": 40,} : { "___": number; "___hello": number; "_hi": number; }
8+
>R : any
9+
>{ "___": 30, "___hello": 21, "_hi": 40,} : { "___": number; "___hello": number; "_hi": number; }
10+
11+
"___": 30,
12+
>30 : number
13+
14+
"___hello": 21,
15+
>21 : number
16+
17+
"_hi": 40,
18+
>40 : number
19+
}
20+
21+
=== tests/cases/conformance/es6/modules/m2.ts ===
22+
import R from "./m1";
23+
>R : { "___": number; "___hello": number; "_hi": number; }
24+
25+
const { ___, ___hello, _hi } = R;
26+
>___ : number
27+
>___hello : number
28+
>_hi : number
29+
>R : { "___": number; "___hello": number; "_hi": number; }
30+

0 commit comments

Comments
 (0)