90 lines
2.9 KiB
Java
90 lines
2.9 KiB
Java
|
/*
|
||
|
* Copyright 2006 The Closure Compiler Authors.
|
||
|
*
|
||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||
|
* you may not use this file except in compliance with the License.
|
||
|
* You may obtain a copy of the License at
|
||
|
*
|
||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||
|
*
|
||
|
* Unless required by applicable law or agreed to in writing, software
|
||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
|
* See the License for the specific language governing permissions and
|
||
|
* limitations under the License.
|
||
|
*/
|
||
|
|
||
|
package com.google.javascript.jscomp;
|
||
|
|
||
|
/**
|
||
|
* Tests for variable declaration collapsing.
|
||
|
*
|
||
|
*/
|
||
|
public class CollapseVariableDeclarationsTest extends CompilerTestCase {
|
||
|
public void testCollapsing() throws Exception {
|
||
|
// Basic collapsing
|
||
|
test("var a;var b;",
|
||
|
"var a,b;");
|
||
|
// With initial values
|
||
|
test("var a = 1;var b = 1;",
|
||
|
"var a=1,b=1;");
|
||
|
// Already collapsed
|
||
|
test("var a, b;",
|
||
|
"var a,b;");
|
||
|
// Already collapsed with values
|
||
|
test("var a = 1, b = 1;",
|
||
|
"var a=1,b=1;");
|
||
|
// Some already collapsed
|
||
|
test("var a;var b, c;var d;",
|
||
|
"var a,b,c,d;");
|
||
|
// Some already collapsed with values
|
||
|
test("var a = 1;var b = 2, c = 3;var d = 4;",
|
||
|
"var a=1,b=2,c=3,d=4;");
|
||
|
}
|
||
|
|
||
|
public void testIssue820() throws Exception {
|
||
|
// Don't redeclare function parameters, this is incompatible with
|
||
|
// strict mode.
|
||
|
testSame("function f(a){ var b=1; a=2; var c; }");
|
||
|
}
|
||
|
|
||
|
public void testIfElseVarDeclarations() throws Exception {
|
||
|
testSame("if (x) var a = 1; else var b = 2;");
|
||
|
}
|
||
|
|
||
|
public void testAggressiveRedeclaration() {
|
||
|
test("var x = 2; foo(x); x = 3; var y = 2;",
|
||
|
"var x = 2; foo(x); var x = 3, y = 2;");
|
||
|
|
||
|
test("var x = 2; foo(x); x = 3; x = 1; var y = 2;",
|
||
|
"var x = 2; foo(x); var x = 3, x = 1, y = 2;");
|
||
|
|
||
|
test("var x = 2; foo(x); x = 3; x = 1; var y = 2; var z = 4",
|
||
|
"var x = 2; foo(x); var x = 3, x = 1, y = 2, z = 4");
|
||
|
|
||
|
test("var x = 2; foo(x); x = 3; x = 1; var y = 2; var z = 4; x = 5",
|
||
|
"var x = 2; foo(x); var x = 3, x = 1, y = 2, z = 4, x = 5");
|
||
|
}
|
||
|
|
||
|
public void testAggressiveRedeclarationInFor() {
|
||
|
testSame("for(var x = 1; x = 2; x = 3) {x = 4}");
|
||
|
testSame("for(var x = 1; y = 2; z = 3) {var a = 4}");
|
||
|
testSame("var x; for(x = 1; x = 2; z = 3) {x = 4}");
|
||
|
}
|
||
|
|
||
|
public void testIssue397() {
|
||
|
test("var x; var y = 3; x = 5;",
|
||
|
"var x, y = 3; x = 5;");
|
||
|
testSame("var x; x = 5; var z = 7;");
|
||
|
test("var x; var y = 3; x = 5; var z = 7;",
|
||
|
"var x, y = 3; x = 5; var z = 7;");
|
||
|
test("var a = 1; var x; var y = 3; x = 5;",
|
||
|
"var a = 1, x, y = 3; x = 5;");
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
protected CompilerPass getProcessor(Compiler compiler) {
|
||
|
return new CollapseVariableDeclarations(compiler);
|
||
|
}
|
||
|
}
|