144 lines
4.8 KiB
Java
144 lines
4.8 KiB
Java
/*
|
|
* Copyright 2009 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;
|
|
|
|
|
|
/**
|
|
* {@link IgnoreCajaProperties} tests.
|
|
*
|
|
*/
|
|
public class IgnoreCajaPropertiesTest extends CompilerTestCase {
|
|
|
|
private static final String EXTERNS =
|
|
"var z = {}, " +
|
|
"f = function(y) { z[y] = z[y] ? (z[y]+1) : 1; }, " +
|
|
"x, i;";
|
|
|
|
public IgnoreCajaPropertiesTest() {
|
|
super(EXTERNS);
|
|
}
|
|
|
|
@Override
|
|
public void setUp() {
|
|
super.enableLineNumberCheck(false);
|
|
}
|
|
|
|
@Override
|
|
public int getNumRepetitions() {
|
|
return 1;
|
|
}
|
|
|
|
public void testSimpleKey() {
|
|
// Test a one-statement body.
|
|
test("for (i in x) f(i);",
|
|
"for (var JSCompiler_IgnoreCajaProperties_0 in x)" +
|
|
" if (!JSCompiler_IgnoreCajaProperties_0.match(/___$/)) {" +
|
|
" i = JSCompiler_IgnoreCajaProperties_0;" +
|
|
" { f(i); }" +
|
|
" }");
|
|
// Test a two-statement body.
|
|
test("for (i in x) { f(i); f(i); }",
|
|
"for (var JSCompiler_IgnoreCajaProperties_0 in x)" +
|
|
" if (!JSCompiler_IgnoreCajaProperties_0.match(/___$/)) {" +
|
|
" i = JSCompiler_IgnoreCajaProperties_0;" +
|
|
" { f(i); f(i); }" +
|
|
" }");
|
|
// Check that the counter's incrementing properly and
|
|
// that nested loops work.
|
|
test("for (i in x) for (j in y) f(i,j);",
|
|
"for (var JSCompiler_IgnoreCajaProperties_1 in x)" +
|
|
" if (!JSCompiler_IgnoreCajaProperties_1.match(/___$/)) {" +
|
|
" i = JSCompiler_IgnoreCajaProperties_1;" +
|
|
" {" +
|
|
" for (var JSCompiler_IgnoreCajaProperties_0 in y)" +
|
|
" if (!JSCompiler_IgnoreCajaProperties_0.match(/___$/)) {" +
|
|
" j = JSCompiler_IgnoreCajaProperties_0;" +
|
|
" { f(i,j); }" +
|
|
" }" +
|
|
" }" +
|
|
" }");
|
|
}
|
|
|
|
public void testPropertyKey() {
|
|
test("for (z.i in x) { f(z.i); f(z.i); }",
|
|
"for (var JSCompiler_IgnoreCajaProperties_0 in x) {" +
|
|
" if (!JSCompiler_IgnoreCajaProperties_0.match(/___$/)) {" +
|
|
" z.i = JSCompiler_IgnoreCajaProperties_0;" +
|
|
" { f(z.i); f(z.i); }" +
|
|
" }" +
|
|
"}");
|
|
}
|
|
|
|
public void testFunctionPropertyKey() {
|
|
// Note that both in the original code and the
|
|
// rewritten code, z.j() is invoked on every
|
|
// iteration of the loop.
|
|
test("for (z.j().i in x) { f(z.j().i); f(z.j().i); }",
|
|
"for (var JSCompiler_IgnoreCajaProperties_0 in x) {" +
|
|
" if (!JSCompiler_IgnoreCajaProperties_0.match(/___$/)) {" +
|
|
" z.j().i = JSCompiler_IgnoreCajaProperties_0;" +
|
|
" { f(z.j().i); f(z.j().i); }" +
|
|
" }" +
|
|
"}");
|
|
}
|
|
|
|
public void testVarKey() {
|
|
// Test a one-statement body.
|
|
test("for (var j in x) { f(j); }",
|
|
"for (var JSCompiler_IgnoreCajaProperties_0 in x) {" +
|
|
" if (!JSCompiler_IgnoreCajaProperties_0.match(/___$/)) {" +
|
|
" var j;" +
|
|
" j = JSCompiler_IgnoreCajaProperties_0;" +
|
|
" { f(j); }" +
|
|
" }" +
|
|
"}");
|
|
// Test a two-statement body.
|
|
test("for (var j in x) { f(j); f(j); }",
|
|
"for (var JSCompiler_IgnoreCajaProperties_0 in x) {" +
|
|
" if (!JSCompiler_IgnoreCajaProperties_0.match(/___$/)) {" +
|
|
" var j;" +
|
|
" j = JSCompiler_IgnoreCajaProperties_0;" +
|
|
" { f(j); f(j); }" +
|
|
" }" +
|
|
"}");
|
|
// Test two loops.
|
|
test("for (var i in x) for (var j in y) f(i,j);",
|
|
"for (var JSCompiler_IgnoreCajaProperties_1 in x)" +
|
|
" if (!JSCompiler_IgnoreCajaProperties_1.match(/___$/)) {" +
|
|
" var i;" +
|
|
" i = JSCompiler_IgnoreCajaProperties_1;" +
|
|
" {" +
|
|
" for (var JSCompiler_IgnoreCajaProperties_0 in y)" +
|
|
" if (!JSCompiler_IgnoreCajaProperties_0.match(/___$/)) {" +
|
|
" var j;" +
|
|
" j = JSCompiler_IgnoreCajaProperties_0;" +
|
|
" { f(i,j); }" +
|
|
" }" +
|
|
" }" +
|
|
" }");
|
|
}
|
|
|
|
public void testFourChildFor() {
|
|
test("for (i = 0; i < 10; ++i) { f(i); }",
|
|
"for (i = 0; i < 10; ++i) { f(i); }");
|
|
}
|
|
|
|
@Override
|
|
public CompilerPass getProcessor(Compiler compiler) {
|
|
return new IgnoreCajaProperties(compiler);
|
|
}
|
|
}
|