/*
* 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.devtools.j2objc.translate;
import com.google.devtools.j2objc.GenerationTest;
import java.io.IOException;
/**
* Unit tests for {@link Rewriter}.
*
* @author Keith Stanger
*/
public class GwtConverterTest extends GenerationTest {
@Override
protected void setUp() throws IOException {
super.setUp();
addSourceFile(
"package com.google.gwt.core.client;"
+ "public class GWT { public static <T> T create(Class<T> classLiteral) { return null; } "
+ " public static boolean isClient() { return false; }"
+ " public static boolean isScript() { return false; } }",
"com/google/gwt/core/client/GWT.java");
addSourceFile(
"package com.google.common.annotations; "
+ "import java.lang.annotation.*; "
+ "@Retention(RetentionPolicy.CLASS) "
+ "@Target({ ElementType.METHOD }) "
+ "public @interface GwtIncompatible { "
+ " String value(); }",
"com/google/common/annotations/GwtIncompatible.java");
}
public void testGwtCreate() throws IOException {
String translation = translateSourceFile(
"import com.google.gwt.core.client.GWT;"
+ "class Test { "
+ " Test INSTANCE = GWT.create(Test.class);"
+ " String FOO = foo();" // Regression requires subsequent non-mapped method invocation.
+ " static String foo() { return \"foo\"; } }", "Test", "Test.m");
assertTranslation(translation,
"JreStrongAssign(&self->INSTANCE_, [Test_class_() newInstance]);");
}
public void testGwtIsScript() throws IOException {
String translation = translateSourceFile(
"import com.google.gwt.core.client.GWT;"
+ "class Test { boolean test() { "
+ " if (GWT.isClient() || GWT.isScript()) { return true; } return false; }}",
"Test", "Test.m");
assertTranslatedLines(translation, "- (jboolean)test {", "return false;", "}");
}
// Verify GwtIncompatible method is not stripped by default.
public void testGwtIncompatibleStrip() throws IOException {
options.setStripGwtIncompatibleMethods(true);
String translation = translateSourceFile(
"import com.google.common.annotations.GwtIncompatible;"
+ "class Test { "
+ " @GwtIncompatible(\"don't use\") boolean test() { return false; }}",
"Test", "Test.h");
assertNotInTranslation(translation, "- (BOOL)test;");
}
// Verify GwtIncompatible method is stripped with flag.
public void testGwtIncompatibleNoStrip() throws IOException {
String translation = translateSourceFile(
"import com.google.common.annotations.GwtIncompatible;"
+ "class Test { "
+ " @GwtIncompatible(\"don't use\") boolean test() { return false; }}",
"Test", "Test.h");
assertTranslation(translation, "- (jboolean)test;");
}
// Verify GwtIncompatible method is not stripped with flag, if
// value is in GwtConverter.compatibleAPIs list.
public void testGwtIncompatibleNoStripKnownValue() throws IOException {
options.setStripGwtIncompatibleMethods(true);
String translation = translateSourceFile(
"import com.google.common.annotations.GwtIncompatible;"
+ "class Test { "
+ " @GwtIncompatible(\"reflection\") boolean test() { return false; }}",
"Test", "Test.h");
assertTranslation(translation, "- (jboolean)test;");
}
// Regression test: GwtConverter.visit(IfStatement) threw an NPE.
public void testGwtIsScriptElseBlock() throws IOException {
String translation = translateSourceFile("import com.google.gwt.core.client.GWT;"
+ "class Test { String test() { "
+ " if (GWT.isScript()) { "
+ " return \"one\"; "
+ " } else { "
+ " return \"two\"; "
+ " }}}", "Test", "Test.m");
assertNotInTranslation(translation, "return @\"one\";");
assertTranslation(translation, "return @\"two\";");
}
}