/*
* 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.jdt;
import com.google.devtools.j2objc.GenerationTest;
import com.google.devtools.j2objc.util.UnicodeUtils;
import java.io.IOException;
/**
* Tests for {@link TreeConverter}.
*/
public class TreeConverterTest extends GenerationTest {
// Issue 470: ClassCastException converting annotation with simple members.
public void testAnnotationTypeMemberConversion() throws IOException {
String headers = "import java.lang.annotation.*; "
+ "import static java.lang.annotation.ElementType.*; "
+ "import static java.lang.annotation.RetentionPolicy.*; ";
addSourceFile(headers
+ "@Retention(RUNTIME) @Target({TYPE, METHOD, FIELD}) public @interface Simple { "
+ "String value() default \"default_value\"; }", "Simple.java");
String translation = translateSourceFile(headers
+ "@Retention(RUNTIME) @Target({TYPE, METHOD, FIELD}) public @interface Complex { "
+ "Simple member() default @Simple; }", "Complex", "Complex.m");
assertTranslatedLines(translation,
"+ (id<Simple>)memberDefault {", "return create_Simple(@\"default_value\");", "}");
}
// Issue 471: ClassCastException converting annotation with array members.
public void testAnnotationTypeArrayMemberConversion() throws IOException {
String headers = "import java.lang.annotation.*; "
+ "import static java.lang.annotation.ElementType.*; "
+ "import static java.lang.annotation.RetentionPolicy.*; ";
addSourceFile(headers
+ "@Retention(RUNTIME) @Target({TYPE, METHOD, FIELD}) public @interface Simple { "
+ "String value() default \"default_value\"; }", "Simple.java");
String translation = translateSourceFile(headers
+ "@Retention(RUNTIME) @Target({FIELD, METHOD}) public @interface Elements { "
+ "Simple[] value(); }", "Elements", "Elements.h");
assertTranslation(translation, "@property (readonly) IOSObjectArray *value;");
}
public void testVeryDeeplyNextedExpression() throws IOException {
StringBuilder sb = new StringBuilder("return i == -1");
// Create a 2000 node deep infix expression.
for (int i = 0; i < 2000; i++) {
sb.append(" || i == " + i);
}
sb.append(";");
String exprStr = sb.toString();
String translation = translateSourceFile(UnicodeUtils.format(
"class Test { boolean test(int i) { %s } }", exprStr), "Test", "Test.m");
assertTranslation(translation, exprStr);
}
}