This repository has been archived on 2023-06-18. You can view files and clone it, but cannot push or open issues or pull requests.
ima02/resources/defects4j-checkout-closure-1f/test/com/google/javascript/jscomp/IgnoreCajaPropertiesTest.java
github-classroom[bot] e42e547e48
Initial commit
2023-04-25 11:33:41 +00:00

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);
}
}