blob: 56107e93e166730f48594edff9decc5ffe53e6f0 [file] [log] [blame]
/*
* Copyright 2015 Google Inc.
*
* 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.gwt.dev.jjs.optimized;
import com.google.gwt.junit.DoNotRunWith;
import com.google.gwt.junit.Platform;
import java.util.ArrayList;
/**
* Tests for ArrayList checks are optimized out when checking is disabled.
*/
@DoNotRunWith(Platform.Devel)
public class ArrayListOptimizationTest extends OptimizationTestBase {
private static ArrayList<String> arrayListField = new ArrayList<String>();
public static String getFromArrayList() {
return arrayListField.get(0);
}
private static native String getGeneratedFunctionDefinitionForGet() /*-{
return function() {
tmp = @ArrayListOptimizationTest::getFromArrayList()();
}.toString();
}-*/;
public void testArrayListGetChecksAreRemoved() throws Exception {
String functionDef = getGeneratedFunctionDefinitionForGet();
assertFunctionMatches(functionDef, "tmp=<obf>.<obf>[0]");
}
private static native String getGeneratedFunctionDefinitionForGetIgnoredReturn()/*-{
return function() {
@ArrayListOptimizationTest::getFromArrayList()();
}.toString();
}-*/;
public void testArrayListCallRemoved() throws Exception {
String functionDef = getGeneratedFunctionDefinitionForGetIgnoredReturn();
assertFunctionMatches(functionDef, "");
}
// The compiler will not inline unless arrayListField is a parameter.
public static void setArrayList(ArrayList<String> arrayListField) {
arrayListField.set(0, "abc");
}
private static native String getGeneratedFunctionDefinitionForAdd() /*-{
return function() {
@ArrayListOptimizationTest::setArrayList(*)(@ArrayListOptimizationTest::arrayListField);
}.toString();
}-*/;
public void testArrayListSetChecksAreRemoved() throws Exception {
String functionDef = getGeneratedFunctionDefinitionForAdd();
assertFunctionMatches(functionDef, "<obf>.<obf>[0]='abc'");
}
private static void iterateArrayList() {
for (String s : arrayListField) {
// empty
}
}
private static native String getGeneratedFunctionDefinitionForIterate() /*-{
return @ArrayListOptimizationTest::iterateArrayList().toString();
}-*/;
// Disabled as resulting snippet is too complex for assertion
public void _disabled_testArrayListIterationChecksAreRemoved() throws Exception {
String functionDef = getGeneratedFunctionDefinitionForIterate();
assertFunctionMatches(
functionDef,
"function <obf>(){"
+ " var <obf>;"
+ " for(<obf> = new <obf>(<obf>);<obf>.<obf> < <obf>.<obf>.<obf>.length;){"
+ " <obf>.<obf>=<obf>.<obf>++;"
+ " }"
+ "}");
}
}