| /* |
| * Copyright (c) 2012, the Dart project authors. |
| * |
| * Licensed under the Eclipse Public License v1.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.eclipse.org/legal/epl-v10.html |
| * |
| * 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.dart.java2dart; |
| |
| import com.google.common.base.Joiner; |
| import com.google.common.collect.ImmutableMap; |
| import com.google.dart.engine.ast.AstNode; |
| import com.google.dart.engine.ast.CompilationUnit; |
| import com.google.dart.engine.utilities.io.PrintStringWriter; |
| import com.google.dart.java2dart.util.ToFormattedSourceVisitor; |
| |
| import org.apache.commons.lang3.StringUtils; |
| import org.eclipse.jdt.core.JavaCore; |
| import org.eclipse.jdt.core.dom.AST; |
| import org.eclipse.jdt.core.dom.ASTParser; |
| |
| import static org.fest.assertions.Assertions.assertThat; |
| |
| /** |
| * Test for {@link SyntaxTranslator}. |
| */ |
| public class SyntaxTranslatorTest extends AbstractSemanticTest { |
| /** |
| * @return the formatted Dart source dump of the given {@link AstNode}. |
| */ |
| private static String toFormattedSource(AstNode node) { |
| PrintStringWriter writer = new PrintStringWriter(); |
| node.accept(new ToFormattedSourceVisitor(writer)); |
| String result = writer.toString(); |
| return StringUtils.join(StringUtils.split(result, '\n'), "\n"); |
| } |
| |
| private Context context = new Context(); |
| |
| private String javaSource; |
| private org.eclipse.jdt.core.dom.CompilationUnit javaUnit; |
| private com.google.dart.engine.ast.CompilationUnit dartUnit; |
| |
| public void test_annotation_marker() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "public @interface DartOmit {", |
| "}", |
| "public class A {", |
| " @DartOmit", |
| " public void foo() {}", |
| " public void var() {}", |
| "}"); |
| translate(); |
| String actual = context.getNodeAnnotations().toString(); |
| assertEquals("{void foo() {}=[DartOmit{}]}", actual); |
| } |
| |
| public void test_annotation_normal() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "public @interface DartLibrary {", |
| " String name();", |
| " String path();", |
| "}", |
| "public class A {", |
| " @DartLibrary(name = \"my.name\", path = \"my/path\")", |
| " public void foo() {}", |
| " public void var() {}", |
| "}"); |
| translate(); |
| String actual = context.getNodeAnnotations().toString(); |
| assertEquals("{void foo() {}=[DartLibrary{name=my.name, path=my/path}]}", actual); |
| } |
| |
| public void test_annotation_single() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "public @interface DartBlockBody {", |
| " String[] value();", |
| "}", |
| "public class A {", |
| " @DartBlockBody({\"aaa\", \"bbb\", \"ccc\"})", |
| " public void foo() {}", |
| " public void var() {}", |
| "}"); |
| translate(); |
| String actual = context.getNodeAnnotations().toString(); |
| assertEquals("{void foo() {}=[DartBlockBody{value=[aaa, bbb, ccc]}]}", actual); |
| } |
| |
| public void test_classAbstract() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "public abstract class A {", |
| "}"); |
| assertDartSource(// |
| "abstract class A {", |
| "}"); |
| } |
| |
| public void test_classEmpty() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "public class A {", |
| "}"); |
| assertDartSource(// |
| "class A {", |
| "}"); |
| } |
| |
| public void test_classExtends() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "public class A {", |
| "}", |
| "public class B extends A {", |
| "}", |
| ""); |
| assertDartSource(// |
| "class A {", |
| "}", |
| "class B extends A {", |
| "}"); |
| } |
| |
| public void test_classImplements() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "public interface I1 {}", |
| "public interface I2 {}", |
| "public interface I3 {}", |
| "public class B implements I1, I2, I3 {", |
| "}", |
| ""); |
| assertDartSource( |
| "abstract class I1 {", |
| "}", |
| "abstract class I2 {", |
| "}", |
| "abstract class I3 {", |
| "}", |
| "class B implements I1, I2, I3 {", |
| "}"); |
| } |
| |
| public void test_classTypeArguments_Void() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "public class Test<T> {", |
| " void main() {", |
| " new Test<Void>();", |
| " }", |
| "}"); |
| assertDartSource(// |
| "class Test<T> {", |
| " void main() {", |
| " new Test<Object>();", |
| " }", |
| "}"); |
| } |
| |
| public void test_classTypeParameters() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "public class A<K, V extends String> {", |
| " void test(K k, V v) {", |
| " }", |
| "}"); |
| assertDartSource(// |
| "class A<K, V extends String> {", |
| " void test(K k, V v) {", |
| " }", |
| "}"); |
| } |
| |
| public void test_commentDoc_class() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "/**", |
| " * Some comment.", |
| " */", |
| "public class A {", |
| "}"); |
| assertDartSource(// |
| "/**", |
| " * Some comment.", |
| " */", |
| "class A {", |
| "}"); |
| } |
| |
| public void test_commentDoc_escaping() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "/**", |
| " * Some [ident] ignored.", |
| " * Second line.", |
| " */", |
| "public class A {", |
| "}"); |
| assertDartSource("/**", " * Some [ident] ignored.", " * Second line.", " */", "class A {", "}"); |
| } |
| |
| public void test_commentDoc_field() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "public class A {", |
| " /**", |
| " * Some comment.", |
| " */", |
| " int foo;", |
| "}"); |
| assertDartSource(// |
| "class A {", |
| " /**", |
| " * Some comment.", |
| " */", |
| " int foo;", |
| "}"); |
| } |
| |
| public void test_commentDoc_method() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "public class A {", |
| " /**", |
| " * Some comment.", |
| " */", |
| " void foo() {}", |
| "}"); |
| assertDartSource( |
| "class A {", |
| " /**", |
| " * Some comment.", |
| " */", |
| " void foo() {", |
| " }", |
| "}"); |
| } |
| |
| public void test_commentLine_beforeStatement_blockStyle() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "public class A {", |
| " void main() {", |
| " /*", |
| " * aaa", |
| " * bbb", |
| " */", |
| " int v = 0;", |
| " }", |
| "}"); |
| assertDartSource( |
| "class A {", |
| " void main() {", |
| " /*", |
| " * aaa", |
| " * bbb", |
| " */", |
| " int v = 0;", |
| " }", |
| "}"); |
| } |
| |
| public void test_commentLine_beforeStatement_lineStyle() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "public class A {", |
| " void main() {", |
| " // aaa", |
| " // bbb", |
| " int v = 0;", |
| " }", |
| "}"); |
| assertDartSource( |
| "class A {", |
| " void main() {", |
| " // aaa", |
| " // bbb", |
| " int v = 0;", |
| " }", |
| "}"); |
| } |
| |
| public void test_commentLine_endOfBlock_blockStyle() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "public class A {", |
| " void main() {", |
| " // aaa", |
| " int v = 0;", |
| " /*", |
| " * aaa", |
| " * bbb", |
| " */", |
| " }", |
| "}"); |
| assertDartSource( |
| "class A {", |
| " void main() {", |
| " // aaa", |
| " int v = 0;", |
| " /*", |
| " * aaa", |
| " * bbb", |
| " */", |
| " }", |
| "}"); |
| } |
| |
| public void test_commentLine_endOfBlock_lineStyle() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "public class A {", |
| " void main() {", |
| " // aaa", |
| " int v = 0;", |
| " if (true) {", |
| " // bbb", |
| " } else {", |
| " // ccc", |
| " }", |
| " // ddd", |
| " // eee", |
| " }", |
| "}"); |
| assertDartSource( |
| "class A {", |
| " void main() {", |
| " // aaa", |
| " int v = 0;", |
| " if (true) {", |
| " // bbb", |
| " } else {", |
| " // ccc", |
| " }", |
| " // ddd", |
| " // eee", |
| " }", |
| "}"); |
| } |
| |
| public void test_constructor() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "public class A {", |
| " A() {", |
| " print(0);", |
| " }", |
| " A(int p) {", |
| " print(1);", |
| " }", |
| "}"); |
| assertDartSource( |
| "class A {", |
| " A.jtd_constructor_0_decl() {", |
| " print(0);", |
| " }", |
| " A.jtd_constructor_1_decl(int p) {", |
| " print(1);", |
| " }", |
| "}"); |
| } |
| |
| public void test_enum_withImplements() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "public interface I {}", |
| "public enum Direction implements I {", |
| "}"); |
| assertDartSource( |
| "abstract class I {", |
| "}", |
| "class Direction extends Enum<Direction> implements I {", |
| " static const List<Direction> values = const [];", |
| " const Direction.jtd_constructor_0_decl(String name, int ordinal) : super(name, ordinal) {", |
| " }", |
| "}"); |
| } |
| |
| public void test_expression_equals() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "public class A {", |
| " boolean testObject(Object a, Object b) {", |
| " return a == b;", |
| " }", |
| " boolean testNull(Object p) {", |
| " return p == null;", |
| " }", |
| " boolean testBool(Object p) {", |
| " return p == true;", |
| " }", |
| " boolean testChar(Object p) {", |
| " return p == '0';", |
| " }", |
| " boolean testByte(Object p) {", |
| " return p == (byte) 1;", |
| " }", |
| " boolean testInt(Object p) {", |
| " return p == 2;", |
| " }", |
| " boolean testLong(Object p) {", |
| " return p == 3L;", |
| " }", |
| " boolean testFloat(Object p) {", |
| " return p == 4.0f;", |
| " }", |
| " boolean testDouble(Object p) {", |
| " return p == 5.0d;", |
| " }", |
| "}"); |
| assertDartSource( |
| "class A {", |
| " bool testObject(Object a, Object b) => identical(a, b);", |
| " bool testNull(Object p) => p == null;", |
| " bool testBool(Object p) => p == true;", |
| " bool testChar(Object p) => p == 0x30;", |
| " bool testByte(Object p) => p == 1;", |
| " bool testInt(Object p) => p == 2;", |
| " bool testLong(Object p) => p == 3;", |
| " bool testFloat(Object p) => p == 4.0;", |
| " bool testDouble(Object p) => p == 5.0;", |
| "}"); |
| } |
| |
| public void test_expression_instanceOf() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "public class A {", |
| " void test(Object p) {", |
| " boolean b1 = p instanceof String;", |
| " boolean b2 = !(p instanceof String);", |
| " }", |
| "}"); |
| assertDartSource(// |
| "class A {", |
| " void test(Object p) {", |
| " bool b1 = p is String;", |
| " bool b2 = !(p is String);", |
| " }", |
| "}"); |
| } |
| |
| public void test_expression_notEquals() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "public class A {", |
| " boolean testA(Object a, Object b) {", |
| " return a != b;", |
| " }", |
| " boolean testB(Object p) {", |
| " return p != null || p != 1 || p != 2L || p != 3.0f || p != 4.0d;", |
| " }", |
| "}"); |
| assertDartSource( |
| "class A {", |
| " bool testA(Object a, Object b) => !identical(a, b);", |
| " bool testB(Object p) => p != null || p != 1 || p != 2 || p != 3.0 || p != 4.0;", |
| "}"); |
| } |
| |
| public void test_expressionArrayAccess() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "public class A {", |
| " void test(String[] items) {", |
| " print(items[0]);", |
| " }", |
| "}"); |
| assertDartSource(// |
| "class A {", |
| " void test(List<String> items) {", |
| " print(items[0]);", |
| " }", |
| "}"); |
| } |
| |
| public void test_expressionArrayCreation_dimensionOne() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "public class A {", |
| " void test() {", |
| " Object v = new int[] {1, 2, 3};", |
| " }", |
| "}"); |
| assertDartSource(// |
| "class A {", |
| " void test() {", |
| " Object v = <int> [1, 2, 3];", |
| " }", |
| "}"); |
| } |
| |
| public void test_expressionArrayCreation_dimensionTwo() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "public class A {", |
| " void test() {", |
| " Object v = new int[][] {new int[] {1, 2, 3}, new int[] {10, 20, 30}};", |
| " }", |
| "}"); |
| assertDartSource( |
| "class A {", |
| " void test() {", |
| " Object v = <List<int>> [<int> [1, 2, 3], <int> [10, 20, 30]];", |
| " }", |
| "}"); |
| } |
| |
| public void test_expressionArrayCreation_noInitializer() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "public class A {", |
| " void test() {", |
| " String[] v = new String[3];", |
| " }", |
| "}"); |
| assertDartSource(// |
| "class A {", |
| " void test() {", |
| " List<String> v = new List<String>(3);", |
| " }", |
| "}"); |
| } |
| |
| public void test_expressionArrayInitializer() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "public class A {", |
| " void test() {", |
| " int[] v = {1, 2, 3};", |
| " }", |
| "}"); |
| assertDartSource(// |
| "class A {", |
| " void test() {", |
| " List<int> v = [1, 2, 3];", |
| " }", |
| "}"); |
| } |
| |
| public void test_expressionAssignment() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "public class A {", |
| " void test() {", |
| " int v;", |
| " v = 1;", |
| " v += 1;", |
| " v -= 1;", |
| " v *= 1;", |
| " v /= 1;", |
| " v %= 1;", |
| " v ^= 1;", |
| " v |= 1;", |
| " v &= 1;", |
| " v <<= 1;", |
| " v >>= 1;", |
| " }", |
| "}"); |
| assertDartSource( |
| "class A {", |
| " void test() {", |
| " int v;", |
| " v = 1;", |
| " v += 1;", |
| " v -= 1;", |
| " v *= 1;", |
| " v /= 1;", |
| " v %= 1;", |
| " v ^= 1;", |
| " v |= 1;", |
| " v &= 1;", |
| " v <<= 1;", |
| " v >>= 1;", |
| " }", |
| "}"); |
| } |
| |
| public void test_expressionCast() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "public class Test {", |
| " void main(Object p) {", |
| " print((Integer) p);", |
| " }", |
| "}"); |
| assertDartSource(// |
| "class Test {", |
| " void main(Object p) {", |
| " print((p as int));", |
| " }", |
| "}"); |
| } |
| |
| public void test_expressionCast_toByte() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "public class Test {", |
| " void main(Object p) {", |
| " print((byte) p);", |
| " print((byte) 2);", |
| " print((byte) 256);", |
| " print((byte) 257);", |
| " }", |
| "}"); |
| assertDartSource(// |
| "class Test {", |
| " void main(Object p) {", |
| " print(toByte(p));", |
| " print(2);", |
| " print(0);", |
| " print(1);", |
| " }", |
| "}"); |
| } |
| |
| public void test_expressionClassInstanceCreation() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "public class A {", |
| " void test(int p) {", |
| " }", |
| " void foo() {", |
| " new A(123);", |
| " }", |
| "}"); |
| assertDartSource(// |
| "class A {", |
| " void test(int p) {", |
| " }", |
| " void foo() {", |
| " new A(123);", |
| " }", |
| "}"); |
| } |
| |
| public void test_expressionClassInstanceCreation_typeArguments() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "public class A<K, V> {", |
| "}", |
| "public class B {", |
| " void test() {", |
| " new A<String, B>();", |
| " }", |
| "}", |
| ""); |
| assertDartSource(// |
| "class A<K, V> {", |
| "}", |
| "class B {", |
| " void test() {", |
| " new A<String, B>();", |
| " }", |
| "}"); |
| } |
| |
| public void test_expressionConditional() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "public class A {", |
| " void test() {", |
| " int v = true ? 1 : 2;", |
| " }", |
| "}"); |
| assertDartSource(// |
| "class A {", |
| " void test() {", |
| " int v = true ? 1 : 2;", |
| " }", |
| "}"); |
| } |
| |
| public void test_expressionFieldAccess_thisQualifier() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "public class A {", |
| " int field;", |
| " test() {", |
| " print(this.field);", |
| " }", |
| "}"); |
| assertDartSource(// |
| "class A {", |
| " int field;", |
| " test() {", |
| " print(this.field);", |
| " }", |
| "}"); |
| } |
| |
| public void test_expressionInfix() throws Exception { |
| setFileLines( |
| "test/Test.java", |
| toString( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "public class A {", |
| " public void test() {", |
| " int m1 = 0 + 1;", |
| " int m2 = 0 - 1;", |
| " int m3 = 0 * 1;", |
| " int m4 = 0 / 1;", |
| " int m5 = 0.0 / 1;", |
| " int m6 = 0 / 1.0;", |
| " int m7 = 0 % 1;", |
| " int s1 = 0 << 1;", |
| " int s2 = 0 >> 1;", |
| " int s3 = 0 >>> 1;", |
| " boolean c1 = false || true;", |
| " boolean c2 = false && true;", |
| " int b1 = 0 ^ 1;", |
| " int b2 = 0 | 1;", |
| " int b3 = 0 & 1;", |
| " boolean r1 = 0 < 1;", |
| " boolean r2 = 0 > 1;", |
| " boolean r3 = 0 <= 1;", |
| " boolean r4 = 0 >= 1;", |
| " boolean r5 = 0 == 1;", |
| " boolean r6 = 0 != 1;", |
| " }", |
| "}")); |
| Context context = new Context(); |
| context.addSourceFolder(tmpFolder); |
| context.addSourceFiles(tmpFolder); |
| // do translate |
| CompilationUnit unit = context.translate(); |
| assertEquals( |
| toString( |
| "class A {", |
| " void test() {", |
| " int m1 = 0 + 1;", |
| " int m2 = 0 - 1;", |
| " int m3 = 0 * 1;", |
| " int m4 = 0 ~/ 1;", |
| " int m5 = 0.0 / 1;", |
| " int m6 = 0 / 1.0;", |
| " int m7 = 0 % 1;", |
| " int s1 = 0 << 1;", |
| " int s2 = 0 >> 1;", |
| " int s3 = 0 >> 1;", |
| " bool c1 = false || true;", |
| " bool c2 = false && true;", |
| " int b1 = 0 ^ 1;", |
| " int b2 = 0 | 1;", |
| " int b3 = 0 & 1;", |
| " bool r1 = 0 < 1;", |
| " bool r2 = 0 > 1;", |
| " bool r3 = 0 <= 1;", |
| " bool r4 = 0 >= 1;", |
| " bool r5 = 0 == 1;", |
| " bool r6 = 0 != 1;", |
| " }", |
| "}"), |
| getFormattedSource(unit)); |
| } |
| |
| public void test_expressionInfix_multipleOperands() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "public class A {", |
| " void test() {", |
| " int v = 0 + 1 + 2 + 3 + 4;", |
| " }", |
| "}"); |
| assertDartSource(// |
| "class A {", |
| " void test() {", |
| " int v = 0 + 1 + 2 + 3 + 4;", |
| " }", |
| "}"); |
| } |
| |
| public void test_expressionInvocation_qualified() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "public class A {", |
| " void test() {", |
| " this.foo(0);", |
| " }", |
| " void foo(int p) {}", |
| "}"); |
| assertDartSource(// |
| "class A {", |
| " void test() {", |
| " this.foo(0);", |
| " }", |
| " void foo(int p) {", |
| " }", |
| "}"); |
| } |
| |
| public void test_expressionInvocation_unqualified() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "public class A {", |
| " void test() {", |
| " print(0);", |
| " print(1);", |
| " }", |
| "}"); |
| assertDartSource(// |
| "class A {", |
| " void test() {", |
| " print(0);", |
| " print(1);", |
| " }", |
| "}"); |
| } |
| |
| public void test_expressionParenthesized() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "public class A {", |
| " void test() {", |
| " int v = (1 + 3) / 2;", |
| " }", |
| "}"); |
| assertDartSource(// |
| "class A {", |
| " void test() {", |
| " int v = (1 + 3) / 2;", |
| " }", |
| "}"); |
| } |
| |
| public void test_expressionPostfix() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "public class A {", |
| " void test() {", |
| " int v = 0;", |
| " int v1 = v++;", |
| " int v2 = v--;", |
| " }", |
| "}"); |
| assertDartSource(// |
| "class A {", |
| " void test() {", |
| " int v = 0;", |
| " int v1 = v++;", |
| " int v2 = v--;", |
| " }", |
| "}"); |
| } |
| |
| public void test_expressionPrefix() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "public class A {", |
| " void test() {", |
| " int v1 = +0;", |
| " int v2 = -0;", |
| " int v3 = ~0;", |
| " int v4 = !0;", |
| " int v5 = ++v1;", |
| " int v6 = --v1;", |
| " }", |
| "}"); |
| assertDartSource(// |
| "class A {", |
| " void test() {", |
| " int v1 = 0;", |
| " int v2 = -0;", |
| " int v3 = ~0;", |
| " int v4 = !0;", |
| " int v5 = ++v1;", |
| " int v6 = --v1;", |
| " }", |
| "}"); |
| } |
| |
| public void test_expressionQualifiedName_forField() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "public class A {", |
| " int field;", |
| "}", |
| "public class B {", |
| " void test(A a) {", |
| " print(a.field);", |
| " }", |
| "}"); |
| assertDartSource(// |
| "class A {", |
| " int field;", |
| "}", |
| "class B {", |
| " void test(A a) {", |
| " print(a.field);", |
| " }", |
| "}"); |
| } |
| |
| public void test_expressionThis() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "public class A {", |
| " void test() {", |
| " print(this);", |
| " }", |
| "}"); |
| assertDartSource(// |
| "class A {", |
| " void test() {", |
| " print(this);", |
| " }", |
| "}"); |
| } |
| |
| public void test_expressionThrow() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "public class A {", |
| " void test() {", |
| " throw new Exception();", |
| " }", |
| "}"); |
| assertDartSource(// |
| "class A {", |
| " void test() {", |
| " throw new Exception();", |
| " }", |
| "}"); |
| } |
| |
| public void test_expressionTypeLiteral() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "public class A {", |
| " void test() {", |
| " print(A.class);", |
| " print(my.company.project.A.class);", |
| " }", |
| "}"); |
| assertDartSource(// |
| "class A {", |
| " void test() {", |
| " print(A);", |
| " print(my.company.project.A);", |
| " }", |
| "}"); |
| } |
| |
| public void test_field() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "public class A {", |
| " int field;", |
| " int f1 = 1, f2 = 2;", |
| "}"); |
| assertDartSource(// |
| "class A {", |
| " int field;", |
| " int f1 = 1, f2 = 2;", |
| "}"); |
| } |
| |
| public void test_interface() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "interface A {", |
| " int VALUE = 42;", |
| " int foo();", |
| " void bar();", |
| "}"); |
| assertDartSource(// |
| "abstract class A {", |
| " static final int VALUE = 42;", |
| " int foo();", |
| " void bar();", |
| "}"); |
| } |
| |
| public void test_javadoc_code() throws Exception { |
| parseJava(// |
| "/**", |
| " * aaa {@code fooBar} bbb", |
| " */", |
| "public class A {", |
| "}"); |
| assertDartSource(// |
| "/**", |
| " * aaa `fooBar` bbb", |
| " */", |
| "class A {", |
| "}"); |
| } |
| |
| public void test_javadoc_li() throws Exception { |
| parseJava(// |
| "/**", |
| " * <ul>", |
| " * <li>foo bar", |
| " * </ul>", |
| " */", |
| "public class A {", |
| "}"); |
| assertDartSource(// |
| "/**", |
| " * * foo bar", |
| " */", |
| "class A {", |
| "}"); |
| } |
| |
| public void test_javadoc_link() throws Exception { |
| parseJava(// |
| "/**", |
| " * {@link #fooBar()}", |
| " */", |
| "public class A {", |
| "}"); |
| assertDartSource(// |
| "/**", |
| " * [fooBar]", |
| " */", |
| "class A {", |
| "}"); |
| } |
| |
| public void test_javadoc_multiLine() throws Exception { |
| parseJava(// |
| "/**", |
| " * aaa bbb", |
| " * {@link Source} ccc", |
| " * ddd", |
| " */", |
| "public class A {", |
| "}"); |
| assertDartSource(// |
| "/**", |
| " * aaa bbb", |
| " * [Source] ccc", |
| " * ddd", |
| " */", |
| "class A {", |
| "}"); |
| } |
| |
| public void test_javadoc_namedLink() throws Exception { |
| parseJava(// |
| "/**", |
| " * {@link Source source}", |
| " */", |
| "public class A {", |
| "}"); |
| assertDartSource(// |
| "/**", |
| " * [Source]", |
| " */", |
| "class A {", |
| "}"); |
| } |
| |
| public void test_javadoc_para() throws Exception { |
| parseJava(// |
| "/**", |
| " * <p>", |
| " */", |
| "public class A {", |
| "}"); |
| assertDartSource(// |
| "/**", |
| " *", |
| " */", |
| "class A {", |
| "}"); |
| } |
| |
| public void test_literalBoolean() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "public class A {", |
| " void test() {", |
| " print(true);", |
| " print(false);", |
| " }", |
| "}"); |
| assertDartSource(// |
| "class A {", |
| " void test() {", |
| " print(true);", |
| " print(false);", |
| " }", |
| "}"); |
| } |
| |
| public void test_literalCharacter() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "public class A {", |
| " void test() {", |
| " char c = '0';", |
| " }", |
| "}"); |
| assertDartSource(// |
| "class A {", |
| " void test() {", |
| " int c = 0x30;", |
| " }", |
| "}" |
| |
| ); |
| } |
| |
| public void test_literalDouble() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "public class A {", |
| " void test() {", |
| " print(0.0);", |
| " print(1d);", |
| " }", |
| "}"); |
| assertDartSource(// |
| "class A {", |
| " void test() {", |
| " print(0.0);", |
| " print(1.0);", |
| " }", |
| "}"); |
| } |
| |
| public void test_literalInt() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "public class A {", |
| " void test() {", |
| " print(0);", |
| " print(1);", |
| " print(0xDEAD);", |
| " print(0xBEAF);", |
| " }", |
| "}"); |
| assertDartSource(// |
| "class A {", |
| " void test() {", |
| " print(0);", |
| " print(1);", |
| " print(0xDEAD);", |
| " print(0xBEAF);", |
| " }", |
| "}"); |
| } |
| |
| public void test_literalLong() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "public class A {", |
| " void test() {", |
| " print(0l);", |
| " print(1L);", |
| " print(0xDEADl);", |
| " print(0xBEAFL);", |
| " }", |
| "}"); |
| assertDartSource(// |
| "class A {", |
| " void test() {", |
| " print(0);", |
| " print(1);", |
| " print(0xDEAD);", |
| " print(0xBEAF);", |
| " }", |
| "}"); |
| } |
| |
| public void test_literalNull() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "public class A {", |
| " void test() {", |
| " print(null);", |
| " }", |
| "}"); |
| assertDartSource(// |
| "class A {", |
| " void test() {", |
| " print(null);", |
| " }", |
| "}"); |
| } |
| |
| public void test_literalString() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "public class A {", |
| " void test() {", |
| " print(\"abc\");", |
| " print(\"a'b\");", |
| " }", |
| "}"); |
| assertDartSource(// |
| "class A {", |
| " void test() {", |
| " print(\"abc\");", |
| " print(\"a'b\");", |
| " }", |
| "}"); |
| } |
| |
| public void test_literalString_escapeInterpolation() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "public class A {", |
| " void test() {", |
| " print(\"a$b\");", |
| " }", |
| "}"); |
| assertDartSource(// |
| "class A {", |
| " void test() {", |
| " print(\"a\\$b\");", |
| " }", |
| "}"); |
| } |
| |
| public void test_literalString_newLine() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "public class A {", |
| " void test() {", |
| " print(\"A\\nB\");", |
| " }", |
| "}"); |
| assertDartSource(// |
| "class A {", |
| " void test() {", |
| " print(\"A\\nB\");", |
| " }", |
| "}"); |
| } |
| |
| public void test_methodEmpty() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "public class A {", |
| " void test() {", |
| " }", |
| "}"); |
| assertDartSource(// |
| "class A {", |
| " void test() {", |
| " }", |
| "}"); |
| } |
| |
| public void test_methodParameters() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "public class A {", |
| " void test(boolean b, int i, double d, String s) {", |
| " }", |
| "}"); |
| assertDartSource(// |
| "class A {", |
| " void test(bool b, int i, double d, String s) {", |
| " }", |
| "}"); |
| } |
| |
| public void test_methodReturnType() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "public class A {", |
| " void foo() {", |
| " }", |
| "}"); |
| assertDartSource(// |
| "class A {", |
| " void foo() {", |
| " }", |
| "}"); |
| } |
| |
| /** |
| * We don't generate "final" because it is very hard to simulate Java constructors in Dart. |
| */ |
| public void test_modifiers_field() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "public class A {", |
| " public int fPublic;", |
| " protected int fProtected;", |
| " int fDefault;", |
| " private int fPrivate;", |
| " final int fFinal;", |
| " static final int fStaticFinal;", |
| "}"); |
| assertDartSource(// |
| "class A {", |
| " int fPublic;", |
| " int fProtected;", |
| " int fDefault;", |
| " int fPrivate;", |
| " int fFinal;", |
| " static int fStaticFinal;", |
| "}"); |
| } |
| |
| /** |
| * We don't generate modifiers, everything is public! |
| */ |
| public void test_modifiers_method() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "public class A {", |
| " public void mPublic() {}", |
| " protected void mProtected() {}", |
| " void mDefault() {}", |
| " private void mPrivate() {}", |
| " static void mStatic() {}", |
| "}"); |
| assertDartSource(// |
| "class A {", |
| " void mPublic() {", |
| " }", |
| " void mProtected() {", |
| " }", |
| " void mDefault() {", |
| " }", |
| " void mPrivate() {", |
| " }", |
| " static void mStatic() {", |
| " }", |
| "}"); |
| } |
| |
| public void test_statementAssert() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "public class A {", |
| " void test() {", |
| " assert 1 < 2;", |
| " }", |
| "}"); |
| assertDartSource(// |
| "class A {", |
| " void test() {", |
| " assert(1 < 2);", |
| " }", |
| "}"); |
| } |
| |
| public void test_statementBreak() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "public class A {", |
| " void test() {", |
| " while (true) {", |
| " break;", |
| " }", |
| " }", |
| "}"); |
| assertDartSource(// |
| "class A {", |
| " void test() {", |
| " while (true) {", |
| " break;", |
| " }", |
| " }", |
| "}"); |
| } |
| |
| public void test_statementBreak_withLabel() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "public class A {", |
| " void test() {", |
| " L: L2: while (true) {", |
| " break L;", |
| " }", |
| " }", |
| "}"); |
| assertDartSource(// |
| "class A {", |
| " void test() {", |
| " L: L2: while (true) {", |
| " break L;", |
| " }", |
| " }", |
| "}"); |
| } |
| |
| public void test_statementConstructorInvocation() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "public class A {", |
| " public A() {", |
| " this(42);", |
| " }", |
| " public A(int p) {", |
| " print(p);", |
| " }", |
| "}", |
| ""); |
| assertDartSource(// |
| "class A {", |
| " A.jtd_constructor_0_decl() {", |
| " thisConstructorRedirection(42);", |
| " }", |
| " A.jtd_constructor_1_decl(int p) {", |
| " print(p);", |
| " }", |
| "}"); |
| } |
| |
| public void test_statementContinue() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "public class A {", |
| " void test() {", |
| " while (true) {", |
| " continue;", |
| " }", |
| " }", |
| "}"); |
| assertDartSource(// |
| "class A {", |
| " void test() {", |
| " while (true) {", |
| " continue;", |
| " }", |
| " }", |
| "}"); |
| } |
| |
| public void test_statementContinue_withLabel() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "public class A {", |
| " void test() {", |
| " L: L2: while (true) {", |
| " continue L;", |
| " }", |
| " }", |
| "}"); |
| assertDartSource(// |
| "class A {", |
| " void test() {", |
| " L: L2: while (true) {", |
| " continue L;", |
| " }", |
| " }", |
| "}"); |
| } |
| |
| public void test_statementDo() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "public class A {", |
| " void test() {", |
| " do {", |
| " print(0);", |
| " } while (true);", |
| " }", |
| "}"); |
| assertDartSource(// |
| "class A {", |
| " void test() {", |
| " do {", |
| " print(0);", |
| " } while (true);", |
| " }", |
| "}"); |
| } |
| |
| public void test_statementEmpty() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "public class A {", |
| " void test() {", |
| " ;", |
| " ;", |
| " }", |
| "}"); |
| assertDartSource(// |
| "class A {", |
| " void test() {", |
| " ;", |
| " ;", |
| " }", |
| "}"); |
| } |
| |
| public void test_statementFor() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "public class A {", |
| " void test() {", |
| " for (int i = 0; i < 10; i++) {", |
| " print(i);", |
| " }", |
| " }", |
| "}"); |
| assertDartSource(// |
| "class A {", |
| " void test() {", |
| " for (int i = 0; i < 10; i++) {", |
| " print(i);", |
| " }", |
| " }", |
| "}"); |
| } |
| |
| public void test_statementFor_noInitializer() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "public class A {", |
| " void test() {", |
| " int i = 0;", |
| " for (; i < 10; i++) {", |
| " print(i);", |
| " }", |
| " }", |
| "}"); |
| assertDartSource(// |
| "class A {", |
| " void test() {", |
| " int i = 0;", |
| " for (; i < 10; i++) {", |
| " print(i);", |
| " }", |
| " }", |
| "}"); |
| } |
| |
| public void test_statementFor2() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "public class A {", |
| " void test() {", |
| " int i;", |
| " for (i = 0; i < 10; i++) {", |
| " print(i);", |
| " }", |
| " }", |
| "}"); |
| assertDartSource(// |
| "class A {", |
| " void test() {", |
| " int i;", |
| " for (i = 0; i < 10; i++) {", |
| " print(i);", |
| " }", |
| " }", |
| "}"); |
| } |
| |
| public void test_statementForEach() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "public class A {", |
| " void test(Iterable<String> items) {", |
| " for (String item: items) {", |
| " print(item);", |
| " }", |
| " }", |
| "}"); |
| assertDartSource(// |
| "class A {", |
| " void test(Iterable<String> items) {", |
| " for (String item in items) {", |
| " print(item);", |
| " }", |
| " }", |
| "}"); |
| } |
| |
| public void test_statementIf() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "public class A {", |
| " void test() {", |
| " if (1 < 2) {", |
| " print(0);", |
| " }", |
| " }", |
| "}"); |
| assertDartSource(// |
| "class A {", |
| " void test() {", |
| " if (1 < 2) {", |
| " print(0);", |
| " }", |
| " }", |
| "}"); |
| } |
| |
| public void test_statementIfElse() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "public class A {", |
| " void test() {", |
| " if (1 < 2) {", |
| " print(1);", |
| " } else {", |
| " print(2);", |
| " }", |
| " }", |
| "}"); |
| assertDartSource(// |
| "class A {", |
| " void test() {", |
| " if (1 < 2) {", |
| " print(1);", |
| " } else {", |
| " print(2);", |
| " }", |
| " }", |
| "}"); |
| } |
| |
| public void test_statementReturn() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "public class A {", |
| " int foo() {", |
| " return 42;", |
| " }", |
| "}"); |
| assertDartSource(// |
| "class A {", |
| " int foo() => 42;", |
| "}"); |
| } |
| |
| public void test_statementSuperMethodInvocation() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "public class A {", |
| " void test(int p) {}", |
| "}", |
| "public class B extends A {", |
| " void test() {", |
| " print(1);", |
| " super.test(2);", |
| " print(3);", |
| " }", |
| "}", |
| ""); |
| assertDartSource( |
| "class A {", |
| " void test(int p) {", |
| " }", |
| "}", |
| "class B extends A {", |
| " void test() {", |
| " print(1);", |
| " super.test(2);", |
| " print(3);", |
| " }", |
| "}"); |
| } |
| |
| public void test_statementSwitch() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "public class A {", |
| " void main(int p) {", |
| " switch (p) {", |
| " case 1:", |
| " if (0 == 1) {", |
| " print(0);", |
| " break;", |
| " }", |
| " print(1);", |
| " break;", |
| " case 2:", |
| " case 3:", |
| " print(2);", |
| " break;", |
| " default:", |
| " print(3);", |
| " break;", |
| " }", |
| " }", |
| "}"); |
| assertDartSource( |
| "class A {", |
| " void main(int p) {", |
| " while (true) {", |
| " if (p == 1) {", |
| " if (0 == 1) {", |
| " print(0);", |
| " break;", |
| " }", |
| " print(1);", |
| " } else if (p == 2 || p == 3) {", |
| " print(2);", |
| " } else {", |
| " print(3);", |
| " }", |
| " break;", |
| " }", |
| " }", |
| "}"); |
| } |
| |
| public void test_statementSynchronized() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "public class A {", |
| " void test() {", |
| " synchronized (this) {", |
| " print(0);", |
| " }", |
| " }", |
| "}"); |
| assertDartSource(// |
| "class A {", |
| " void test() {", |
| " print(0);", |
| " }", |
| "}"); |
| } |
| |
| public void test_statementTry_catch() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "public class A {", |
| " void test() {", |
| " try {", |
| " print(0);", |
| " } catch (E1 e) {", |
| " print(1);", |
| " } catch (E2 e) {", |
| " print(2);", |
| " }", |
| " }", |
| "}"); |
| assertDartSource(// |
| "class A {", |
| " void test() {", |
| " try {", |
| " print(0);", |
| " } on E1 catch (e) {", |
| " print(1);", |
| " } on E2 catch (e) {", |
| " print(2);", |
| " }", |
| " }", |
| "}"); |
| } |
| |
| public void test_statementTry_finally() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "public class A {", |
| " void test() {", |
| " try {", |
| " print(1);", |
| " } finally {", |
| " print(2);", |
| " }", |
| " }", |
| "}"); |
| assertDartSource(// |
| "class A {", |
| " void test() {", |
| " try {", |
| " print(1);", |
| " } finally {", |
| " print(2);", |
| " }", |
| " }", |
| "}"); |
| } |
| |
| public void test_statementVariableDeclaration() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "public class A {", |
| " void test() {", |
| " int a = 1;", |
| " int b = 2, c = 3;", |
| " }", |
| "}"); |
| assertDartSource(// |
| "class A {", |
| " void test() {", |
| " int a = 1;", |
| " int b = 2, c = 3;", |
| " }", |
| "}"); |
| } |
| |
| public void test_statementWhile() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "public class A {", |
| " void test() {", |
| " while (true) {", |
| " print(0);", |
| " }", |
| " }", |
| "}"); |
| assertDartSource(// |
| "class A {", |
| " void test() {", |
| " while (true) {", |
| " print(0);", |
| " }", |
| " }", |
| "}"); |
| } |
| |
| public void test_typeArray() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "public class A {", |
| " void test(String[] items, String[][] labels) {", |
| " }", |
| "}"); |
| assertDartSource(// |
| "class A {", |
| " void test(List<String> items, List<List<String>> labels) {", |
| " }", |
| "}"); |
| } |
| |
| public void test_typeArray2() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "public class A {", |
| " void test(String items[], String labels[][]) {", |
| " }", |
| "}"); |
| assertDartSource(// |
| "class A {", |
| " void test(List<String> items, List<List<String>> labels) {", |
| " }", |
| "}"); |
| } |
| |
| public void test_typeLiteral_wrapper() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "public class A {", |
| " void test() {", |
| " print(Integer.class);", |
| " print(Double.class);", |
| " }", |
| "}"); |
| assertDartSource(// |
| "class A {", |
| " void test() {", |
| " print(int);", |
| " print(double);", |
| " }", |
| "}"); |
| } |
| |
| public void test_typePrimitive() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "public class A {", |
| " void test() {", |
| " boolean v1;", |
| " byte v2;", |
| " char v3;", |
| " short v4;", |
| " int v5;", |
| " long v6;", |
| " float v7;", |
| " double v8;", |
| " }", |
| "}"); |
| assertDartSource(// |
| "class A {", |
| " void test() {", |
| " bool v1;", |
| " int v2;", |
| " int v3;", |
| " int v4;", |
| " int v5;", |
| " int v6;", |
| " double v7;", |
| " double v8;", |
| " }", |
| "}"); |
| } |
| |
| public void test_typeWildcard() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "import java.util.*;", |
| "public class A {", |
| " void test() {", |
| " List<?> v1;", |
| " List<? extends String> v2;", |
| " Map<?, String> v3;", |
| " Map<?, ?> v4;", |
| " }", |
| "}"); |
| assertDartSource(// |
| "class A {", |
| " void test() {", |
| " List v1;", |
| " List<String> v2;", |
| " Map<dynamic, String> v3;", |
| " Map v4;", |
| " }", |
| "}"); |
| } |
| |
| public void test_typeWrapper() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "public class A {", |
| " Void testVoid() {return null;}", |
| " Boolean testBoolean() {return null;}", |
| " Short testShort() {return null;}", |
| " Integer testInteger() {return null;}", |
| " Long testLong() {return null;}", |
| " Float testFloat() {return null;}", |
| " Double testDouble() {return null;}", |
| " BigInteger testBigInteger() {return null;}", |
| "}"); |
| assertDartSource( |
| "class A {", |
| " Object testVoid() => null;", |
| " bool testBoolean() => null;", |
| " int testShort() => null;", |
| " int testInteger() => null;", |
| " int testLong() => null;", |
| " double testFloat() => null;", |
| " double testDouble() => null;", |
| " int testBigInteger() => null;", |
| "}"); |
| } |
| |
| public void test_unitEmpty() throws Exception { |
| parseJava(); |
| assertDartSource(""); |
| } |
| |
| /** |
| * We can generate <code>List</code> for var-args declaration, but we don't know about them at |
| * invocation point during syntax translation, only at semantic step. |
| */ |
| public void test_varArgs() throws Exception { |
| parseJava( |
| "// filler filler filler filler filler filler filler filler filler filler", |
| "public class A {", |
| " void test(int errorCode, Object ...args) {", |
| " }", |
| " void main() {", |
| " test(-1);", |
| " test(-1, 2, 3.0);", |
| " }", |
| "}"); |
| assertDartSource(// |
| "class A {", |
| " void test(int errorCode, List<Object> args) {", |
| " }", |
| " void main() {", |
| " test(-1);", |
| " test(-1, 2, 3.0);", |
| " }", |
| "}"); |
| } |
| |
| void printFormattedSource() { |
| translate(); |
| String source = toFormattedSource(dartUnit); |
| String[] lines = StringUtils.split(source, '\n'); |
| for (int i = 0; i < lines.length; i++) { |
| String line = lines[i]; |
| System.out.print("\""); |
| line = StringUtils.replace(line, "\"", "\\\""); |
| System.out.print(line); |
| if (i != lines.length - 1) { |
| System.out.println("\","); |
| } else { |
| System.out.println("\""); |
| } |
| } |
| } |
| |
| /** |
| * Translates {@link #javaUnit} into {@link #dartUnit} and check that it produces given Dart |
| * source. |
| */ |
| private void assertDartSource(String... lines) { |
| translate(); |
| String actualDartSource = toFormattedSource(dartUnit); |
| String expectedDartSource = Joiner.on("\n").join(lines); |
| assertEquals(expectedDartSource, actualDartSource); |
| } |
| |
| /** |
| * Parse Java source lines into {@link #javaUnit}. |
| */ |
| private void parseJava(String... lines) { |
| javaSource = Joiner.on("\n").join(lines); |
| ASTParser parser = ASTParser.newParser(AST.JLS4); |
| parser.setCompilerOptions(ImmutableMap.of( |
| JavaCore.COMPILER_SOURCE, |
| JavaCore.VERSION_1_5, |
| JavaCore.COMPILER_DOC_COMMENT_SUPPORT, |
| JavaCore.ENABLED)); |
| parser.setSource(javaSource.toCharArray()); |
| javaUnit = (org.eclipse.jdt.core.dom.CompilationUnit) parser.createAST(null); |
| assertThat(javaUnit.getProblems()).isEmpty(); |
| } |
| |
| private void translate() { |
| dartUnit = SyntaxTranslator.translate(context, javaUnit, javaSource); |
| } |
| } |