forked from babel/minify
/
transform-merge-sibling-variables-test.js
165 lines (136 loc) · 3.54 KB
/
transform-merge-sibling-variables-test.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
jest.autoMockOff();
const babel = require("babel-core");
const plugin = require("../src/index");
const unpad = require("../../../utils/unpad");
function transform(code) {
return babel.transform(code, {
plugins: [plugin],
}).code;
}
describe("transform-merge-sibling-variables-plugin", () => {
it("concat vars", () => {
const source = unpad(`
var i = 0;
var x = 0;
var y = 0;
`);
const expected = unpad(`
var i = 0,
x = 0,
y = 0;
`);
expect(transform(source)).toBe(expected);
});
it("concat vars in for loops", () => {
const source = unpad(`
var i = 0;
var j = 0;
for (var x = 0; x < 10; x++) console.log(i + x);
`);
const expected = "for (var i = 0, j = 0, x = 0; x < 10; x++) console.log(i + x);";
expect(transform(source).trim()).toBe(expected);
});
it("don't concat block-scoped variables in for loops", () => {
const source = unpad(`
let i = 0;
for (let x = 0; x < 10; x++) console.log(i + x);
`);
expect(transform(source)).toBe(source);
});
it("don't concat constants in for loops", () => {
const source = unpad(`
const j = 0;
for (const x = 0;;) console.log(j + x);
`);
expect(transform(source)).toBe(source);
});
it("concat block-scoped vars next to, but not into for loops", () => {
const source = unpad(`
let i = 0;
let y = 0;
for (let x = 0; x < 10; x++) console.log(i + x);
`);
const expected = unpad(`
let i = 0,
y = 0;
for (let x = 0; x < 10; x++) console.log(i + x);
`);
expect(transform(source)).toBe(expected);
});
it("lift var declarations to loop intializer", () => {
const source = unpad(`
for (var i = 0; i < 0; i++) {
var j = jj();
}
for (var i=0;;) var j = 0;
`);
const expected = unpad(`
for (var i = 0, j; i < 0; i++) {
j = jj();
}
for (var i = 0, j;;) j = 0;
`);
expect(transform(source)).toBe(expected);
});
it("lift let declarations to loop intializer", () => {
const source = unpad(`
for (let i = 0; i < 0; i++) {
let j = jj();
}
`);
const expected = unpad(`
for (let i = 0, j; i < 0; i++) {
j = jj();
}
`);
expect(transform(source)).toBe(expected);
});
it("dont lift declarations on object/array pattern", () => {
const source = unpad(`
for (var i = 0; i < 0; i++) {
var [j] = jj();
}
for (var i = 0; i < 0; i++) {
var { j } = jj();
}
`);
expect(transform(source)).toBe(source);
});
it("dont lift declarations when no body is present", () => {
const source = unpad(`
for (;;) {}
for (;;) var i = 0;
`);
expect(transform(source)).toBe(source);
});
it("dont lift when the declarations are of different kind", () => {
const source = unpad(`
for (let i = 0; i < 0; i++) {
var i = 0;
}
`);
expect(transform(source)).toBe(source);
});
it("dont lift when the declarations are not initialized", () => {
const source = unpad(`
for (var i = 0;;) {
var i;
}
`);
expect(transform(source)).toBe(source);
});
it("dont lift when there are multiple declarations", () => {
const source = unpad(`
for (var i = 0; i < 0; i++) {
var i = 0, k = 0;
}
`);
const expected = unpad(`
for (var i = 0; i < 0; i++) {
var i = 0,
k = 0;
}
`);
expect(transform(source)).toBe(expected);
});
});