/* * Copyright (c) 2013, 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.processor; /** * Test for {@link ObjectSemanticProcessor}. */ public class ObjectSemanticProcessorTest extends SemanticProcessorTest { public void test_BigInteger_ZERO() throws Exception { translateSingleFile( "// filler filler filler filler filler filler filler filler filler filler", "package test;", "import java.math.BigInteger;", "public class Test {", " public BigInteger main() {", " return BigInteger.ZERO;", " }", "}"); runProcessor(); assertFormattedSource(// "class Test {", " int main() => 0;", "}"); } public void test_Boolean_and() throws Exception { translateSingleFile( "// filler filler filler filler filler filler filler filler filler filler", "package test;", "public class Test {", " public boolean testAnd2(boolean a, boolean b) {", " return a & b;", " }", " public boolean testAnd3(boolean a, boolean b, boolean c) {", " return a & b & c;", " }", " public void testAndEq(boolean a, boolean b) {", " a &= b;", " }", "}"); runProcessor(); assertFormattedSource( "class Test {", " bool testAnd2(bool a, bool b) => javaBooleanAnd(a, b);", " bool testAnd3(bool a, bool b, bool c) => javaBooleanAnd(javaBooleanAnd(a, b), c);", " void testAndEq(bool a, bool b) {", " a = javaBooleanAnd(a, b);", " }", "}"); } public void test_Boolean_or() throws Exception { translateSingleFile( "// filler filler filler filler filler filler filler filler filler filler", "package test;", "public class Test {", " public boolean test1(boolean a, boolean b) {", " return a | b;", " }", " public void test2(boolean a, boolean b) {", " a |= b;", " }", "}"); runProcessor(); assertFormattedSource( "class Test {", " bool test1(bool a, bool b) => javaBooleanOr(a, b);", " void test2(bool a, bool b) {", " a = javaBooleanOr(a, b);", " }", "}"); } public void test_Boolean_TRUE() throws Exception { translateSingleFile( "// filler filler filler filler filler filler filler filler filler filler", "package test;", "public class Test {", " public Object testTrue() {", " return Boolean.TRUE;", " }", " public Object testFalse() {", " return Boolean.FALSE;", " }", "}"); runProcessor(); assertFormattedSource( "class Test {", " Object testTrue() => true;", " Object testFalse() => false;", "}"); } public void test_Class() throws Exception { translateSingleFile( "// filler filler filler filler filler filler filler filler filler filler", "package test;", "public class Test {", " public <T> T getAncestor(Class<T> t) {", " if (t.isInstance(this)) {", " return (T) this;", " }", " return null;", " }", "}"); runProcessor(); assertFormattedSource( "class Test {", " Object getAncestor(Type t) {", " if (isInstanceOf(this, t)) {", // from javalib " return (this as Object);", " }", " return null;", " }", "}"); } public void test_Class_getName() throws Exception { translateSingleFile( "// filler filler filler filler filler filler filler filler filler filler", "package test;", "public class Test {", " public <T> T getAncestor(Class<T> t) {", " t.getName();", " t.getSimpleName();", " }", "}"); runProcessor(); assertFormattedSource( "class Test {", " Object getAncestor(Type t) {", " t.toString();", " t.toString();", " }", "}"); } public void test_constructsRuntimeException() throws Exception { translateSingleFile( "// filler filler filler filler filler filler filler filler filler filler", "package test;", "public class Test {", " public void test() throws Exception {", " throw new RuntimeException(\"hello\");", " }", "}"); runProcessor(); assertFormattedSource( "class Test {", " void test() {", " throw new RuntimeException(message: \"hello\");", " }", "}"); } public void test_double_castTo_int() throws Exception { translateSingleFile( "// filler filler filler filler filler filler filler filler filler filler", "package test;", "public class Test {", " public int testA(double p) {", " return (int) p;", " }", " public long testB(double p) {", " return (long) p;", " }", "}"); runProcessor(); assertFormattedSource( "class Test {", " int testA(double p) => p.toInt();", " int testB(double p) => p.toInt();", "}"); } public void test_Double_parseDouble() throws Exception { translateSingleFile( "// filler filler filler filler filler filler filler filler filler filler", "package test;", "public class Test {", " public double foo(String p) {", " return Double.parseDouble(p);", " }", "}"); runProcessor(); assertFormattedSource(// "class Test {", " double foo(String p) => double.parse(p);", "}"); } public void test_Enum_name() throws Exception { setFileLines( "test/MyEnum.java", toString( "// filler filler filler filler filler filler filler filler filler filler", "package test;", "public enum MyEnum {", " ONE, TWO;", "}")); translateSingleFile( "// filler filler filler filler filler filler filler filler filler filler", "package test;", "public class Test {", " public void test() {", " return MyEnum.ONE.name();", " }", "}"); runProcessor(); assertFormattedSource(// "class Test {", " void test() => MyEnum.ONE.name;", "}"); } public void test_Enum_ordinal() throws Exception { setFileLines( "test/MyEnum.java", toString( "// filler filler filler filler filler filler filler filler filler filler", "package test;", "public enum MyEnum {", " ONE, TWO;", "}")); translateSingleFile( "// filler filler filler filler filler filler filler filler filler filler", "package test;", "public class Test {", " public int main(MyEnum p) {", " return p.ordinal();", " }", "}"); runProcessor(); assertFormattedSource(// "class Test {", " int main(MyEnum p) => p.ordinal;", "}"); } public void test_Enum_values() throws Exception { setFileLines( "test/MyEnum.java", toString( "// filler filler filler filler filler filler filler filler filler filler", "package test;", "public enum MyEnum {", " ONE, TWO;", "}")); translateSingleFile( "// filler filler filler filler filler filler filler filler filler filler", "package test;", "public class Test {", " public MyEnum[] foo() {", " return MyEnum.values();", " }", "}"); runProcessor(); assertFormattedSource(// "class Test {", " List<MyEnum> foo() => MyEnum.values;", "}"); } public void test_extendsException() throws Exception { translateSingleFile( "// filler filler filler filler filler filler filler filler filler filler", "package test;", "public class Test extends Exception {", " public Test() {", " }", " public Test(String msg) {", " super(msg);", " }", " public Test(String msg, Throwable e) {", " super(msg, e);", " }", " public Test(Throwable e) {", " super(e);", " }", "}"); runProcessor(); assertFormattedSource( "class Test extends JavaException {", " Test();", " Test.con1(String msg) : super(msg);", " Test.con2(String msg, Exception e) : super(msg, e);", " Test.con3(Exception e) : super.withCause(e);", "}"); } public void test_IndexOutOfBoundsException() throws Exception { translateSingleFile( "// filler filler filler filler filler filler filler filler filler filler", "package test;", "public class Test {", " public void mainA() {", " throw new IndexOutOfBoundsException();", " }", " public void main() {", " try {", " } catch (IndexOutOfBoundsException e) {", " }", " }", "}"); runProcessor(); assertFormattedSource( "class Test {", " void mainA() {", " throw new RangeError();", " }", " void main() {", " try {", " } on RangeError catch (e) {", " }", " }", "}"); } public void test_Integer_intValue() throws Exception { translateSingleFile( "// filler filler filler filler filler filler filler filler filler filler", "package test;", "public class Test {", " public int main(Integer p) {", " return p.intValue();", " }", "}"); runProcessor(); assertFormattedSource(// "class Test {", " int main(int p) => p;", "}"); } public void test_Integer_MAX_VALUE() throws Exception { translateSingleFile( "// filler filler filler filler filler filler filler filler filler filler", "package test;", "public class Test {", " public Object testMin() {", " return Integer.MIN_VALUE;", " }", " public Object testMax() {", " return Integer.MAX_VALUE;", " }", "}"); runProcessor(); assertFormattedSource(// "class Test {", " Object testMin() => -2147483648;", " Object testMax() => 2147483647;", "}"); } public void test_Integer_parseInt() throws Exception { translateSingleFile( "// filler filler filler filler filler filler filler filler filler filler", "package test;", "public class Test {", " public int test(String p) {", " try {", " return Integer.parseInt(p);", " } catch (NumberFormatException e) {", " return 0;", " }", " }", " public int testX(String p) {", " return Integer.parseInt(p, 16);", " }", "}"); runProcessor(); assertFormattedSource( "class Test {", " int test(String p) {", " try {", " return int.parse(p);", " } on FormatException catch (e) {", " return 0;", " }", " }", " int testX(String p) => int.parse(p, radix: 16);", "}"); } public void test_Integer_valueOf() throws Exception { translateSingleFile( "// filler filler filler filler filler filler filler filler filler filler", "package test;", "public class Test {", " public Object foo() {", " return new Object[]{Integer.valueOf(42)};", " }", "}"); runProcessor(); assertFormattedSource(// "class Test {", " Object foo() => <Object> [42];", "}"); } public void test_Long_longValue() throws Exception { translateSingleFile( "// filler filler filler filler filler filler filler filler filler filler", "package test;", "public class Test {", " public long main(Long p) {", " return p.longValue();", " }", "}"); runProcessor(); assertFormattedSource(// "class Test {", " int main(int p) => p;", "}"); } public void test_Long_valueOf() throws Exception { translateSingleFile( "// filler filler filler filler filler filler filler filler filler filler", "package test;", "public class Test {", " public Object foo() {", " return new Object[]{Long.valueOf(42)};", " }", "}"); runProcessor(); assertFormattedSource(// "class Test {", " Object foo() => <Object> [42];", "}"); } /** * In Dart method cannot have type parameters, so we replace them with bound. */ public void test_methodTypeParameter() throws Exception { translateSingleFile( "// filler filler filler filler filler filler filler filler filler filler", "package test;", "public class Test<E> {", " public E testA(E p) {", " return p;", " }", " public static <T extends String> T testB(T p) {", " return p;", " }", " public static <T> T testC(T p) {", " return p;", " }", "}"); runProcessor(); assertFormattedSource( "class Test<E> {", " E testA(E p) => p;", " static String testB(String p) => p;", " static Object testC(Object p) => p;", "}"); } public void test_newBigInteger_fromString() throws Exception { translateSingleFile( "// filler filler filler filler filler filler filler filler filler filler", "package test;", "import java.math.*;", "public class Test {", " public void main(String p) {", " new BigInteger(p);", " new BigInteger(p, 16);", " }", "}"); runProcessor(); assertFormattedSource(// "class Test {", " void main(String p) {", " int.parse(p);", " int.parse(p, radix: 16);", " }", "}"); } public void test_Number_intValue() throws Exception { translateSingleFile( "// filler filler filler filler filler filler filler filler filler filler", "package test;", "public class Test {", " public int main(Number p) {", " return p.intValue();", " }", "}"); runProcessor(); assertFormattedSource(// "class Test {", " int main(num p) => p.toInt();", "}"); } public void test_Object_equals() throws Exception { translateSingleFile( "// filler filler filler filler filler filler filler filler filler filler", "package test;", "public class Test {", " public Object p;", " public boolean equals(Object o) {", " return o instanceof Test && p.equals(((Test) o).p);", " }", "}"); runProcessor(); assertFormattedSource(// "class Test {", " Object p;", " bool operator ==(Object o) => o is Test && p == ((o as Test)).p;", "}"); } public void test_Object_equals_implicitThis() throws Exception { translateSingleFile( "// filler filler filler filler filler filler filler filler filler filler", "package test;", "public class Test {", " public boolean equals(Object o) {", " return equals(o);", " }", "}"); runProcessor(); assertFormattedSource(// "class Test {", " bool operator ==(Object o) => this == o;", "}"); } public void test_Object_equals2() throws Exception { setFileLines( "test/MyInterface.java", toString( "// filler filler filler filler filler filler filler filler filler filler", "package test;", "public interface MyInterface {", " boolean equals(Object o);", "}")); translateSingleFile( "// filler filler filler filler filler filler filler filler filler filler", "package test;", "public class Test {", " public MyInterface o;", " public boolean main(Object p) {", " return 1 == 2 && o.equals(p);", " }", "}"); runProcessor(); assertFormattedSource(// "class Test {", " MyInterface o;", " bool main(Object p) => 1 == 2 && o == p;", "}"); } public void test_Object_getClass() throws Exception { translateSingleFile( "// filler filler filler filler filler filler filler filler filler filler", "package test;", "public class Test {", " public Object o;", " public Class<?> main() {", " return o.getClass();", " }", "}"); runProcessor(); assertFormattedSource(// "class Test {", " Object o;", " Type main() => o.runtimeType;", "}"); } public void test_Object_hashCode() throws Exception { translateSingleFile( "// filler filler filler filler filler filler filler filler filler filler", "package test;", "public class Test {", " public Object o;", " public int hashCode() {", " return o.hashCode();", " }", "}"); runProcessor(); assertFormattedSource(// "class Test {", " Object o;", " int get hashCode => o.hashCode;", "}"); } public void test_PrimitiveWrapper_operations() throws Exception { translateSingleFile( "// filler filler filler filler filler filler filler filler filler filler", "package test;", "import java.math.BigInteger;", "public class Test {", " public void testBoolean(Boolean a, Boolean b) {", " print(a.booleanValue());", " }", " public void testDouble(Double a, Double b) {", " print(Double.valueOf(1.2));", " print(a.doubleValue() + b.doubleValue());", " print(a.equals(b));", " print(!a.equals(b));", " print(Math.floor(3.3 / 2).longValue());", " }", " public void testBigInteger(BigInteger a, BigInteger b) {", " print(BigInteger.valueOf(42));", " print(a.intValue());", " print(a.equals(b));", " print(!a.equals(b));", " print(a.and(b));", " print(a.or(b));", " print(a.xor(b));", " print(a.add(b));", " print(a.subtract(b));", " print(a.multiply(b));", " print(a.divide(b));", " print(a.shiftLeft(b));", " print(a.shiftRight(b));", " print(a.not());", " print(a.negate());", " print(a.doubleValue());", " }", " public void testString(String a, String b) {", " print(a.equals(b));", " print(!a.equals(b));", " }", " public static void print(Object p) {", " }", "}"); runProcessor(); assertFormattedSource( "class Test {", " void testBoolean(bool a, bool b) {", " print(a);", " }", " void testDouble(double a, double b) {", " print(1.2);", " print(a + b);", " print(a == b);", " print(a != b);", " print(3.3 ~/ 2);", " }", " void testBigInteger(int a, int b) {", " print(42);", " print(a);", " print(a == b);", " print(a != b);", " print(a & b);", " print(a | b);", " print(a ^ b);", " print(a + b);", " print(a - b);", " print(a * b);", " print(a ~/ b);", " print(a << b);", " print(a >> b);", " print(~a);", " print(-a);", " print(a.toDouble());", " }", " void testString(String a, String b) {", " print(a == b);", " print(a != b);", " }", " static void print(Object p) {", " }", "}"); } public void test_primitiveWrapper_toString() throws Exception { translateSingleFile( "// filler filler filler filler filler filler filler filler filler filler", "package test;", "public class Test {", " public void mainInteger(int p) {", " Integer.toString(p);", " Integer.toString(p, 16);", " }", " public void mainLong(long p) {", " Long.toString(p);", " Long.toString(p, 16);", " }", " public void mainDouble(double p) {", " Double.toString(p);", " }", " public void mainDouble2(Double p) {", " return p.toString();", " }", "}"); runProcessor(); assertFormattedSource( "class Test {", " void mainInteger(int p) {", " p.toString();", " p.toRadixString(16);", " }", " void mainLong(int p) {", " p.toString();", " p.toRadixString(16);", " }", " void mainDouble(double p) {", " p.toString();", " }", " void mainDouble2(double p) => p.toString();", "}"); } public void test_PrintWriter_char() throws Exception { translateSingleFile( "// filler filler filler filler filler filler filler filler filler filler", "package test;", "import java.io.PrintWriter;", "public class Test {", " public void main(PrintWriter p) {", " p.print('[');", " }", "}"); runProcessor(); assertFormattedSource(// "class Test {", " void main(PrintWriter p) {", " p.print('[');", " }", "}"); } public void test_PrintWriter_println() throws Exception { translateSingleFile( "// filler filler filler filler filler filler filler filler filler filler", "package test;", "import java.io.PrintWriter;", "public class Test {", " public void main(PrintWriter p, String s) {", " p.println();", " p.println(s);", " }", "}"); runProcessor(); assertFormattedSource(// "class Test {", " void main(PrintWriter p, String s) {", " p.newLine();", " p.println(s);", " }", "}"); } public void test_regex_Matcher() throws Exception { translateSingleFile( "// filler filler filler filler filler filler filler filler filler filler", "package test;", "import java.util.regex.*;", "public class Test {", " public void main(Pattern p, String s) {", " Matcher m = p.matcher(s);", " }", "}"); runProcessor(); assertFormattedSource(// "class Test {", " void main(RegExp p, String s) {", " JavaPatternMatcher m = new JavaPatternMatcher(p, s);", " }", "}"); } public void test_regex_Pattern() throws Exception { translateSingleFile( "// filler filler filler filler filler filler filler filler filler filler", "package test;", "import java.util.regex.*;", "public class Test {", " public void main(String s) {", " Pattern.compile(s);", " }", "}"); runProcessor(); assertFormattedSource(// "class Test {", " void main(String s) {", " new RegExp(s);", " }", "}"); } public void test_Set_equals() throws Exception { translateSingleFile( "// filler filler filler filler filler filler filler filler filler filler", "package test;", "import java.util.Set", "public class Test {", " public boolean main(Set a, Set b) {", " return a.equals(b);", " }", "}"); runProcessor(); assertFormattedSource(// "class Test {", " bool main(Set a, Set b) => javaSetEquals(a, b);", "}"); } public void test_String_charAt() throws Exception { translateSingleFile( "// filler filler filler filler filler filler filler filler filler filler", "package test;", "public class Test {", " public char foo(String s) {", " return s.charAt(0);", " }", "}"); runProcessor(); assertFormattedSource(// "class Test {", " int foo(String s) => s.codeUnitAt(0);", "}"); } public void test_String_concat() throws Exception { translateSingleFile( "// filler filler filler filler filler filler filler filler filler filler", "package test;", "public class Test {", " public String test(String a, String b) {", " return a.concat(b);", " }", "}"); runProcessor(); assertFormattedSource(// "class Test {", " String test(String a, String b) => a + b;", "}"); } public void test_String_concat_charString() throws Exception { translateSingleFile( "// filler filler filler filler filler filler filler filler filler filler", "package test;", "public class Test {", " public String test(char c, String rest) {", " return c + rest;", " }", "}"); runProcessor(); assertFormattedSource(// "class Test {", " String test(int c, String rest) => \"${new String.fromCharCode(c)}${rest}\";", "}"); } public void test_String_concat_literals() throws Exception { translateSingleFile( "// filler filler filler filler filler filler filler filler filler filler", "package test;", "public class Test {", " public String testA(String name, int position) {", " return \"Node \" + name + \" \\n at \" + position;", " }", " public String testB(String firstName, String lastName) {", " return firstName + \".\" + lastName;", " }", "}"); runProcessor(); assertFormattedSource( "class Test {", " String testA(String name, int position) => \"Node ${name} \\n at ${position}\";", " String testB(String firstName, String lastName) => \"${firstName}.${lastName}\";", "}"); } public void test_String_concat_rewriteParts() throws Exception { translateSingleFile( "// filler filler filler filler filler filler filler filler filler filler", "package test;", "public class Test {", " public String test(String name, Class<?> type) {", " return name + \" of \" + type.getName();", " }", "}"); runProcessor(); assertFormattedSource(// "class Test {", " String test(String name, Type type) => \"${name} of ${type.toString()}\";", "}"); } public void test_String_concat_stringObjects() throws Exception { translateSingleFile( "// filler filler filler filler filler filler filler filler filler filler", "package test;", "public class Test {", " public String test(String firstName, String lastName) {", " return firstName + '.' + lastName;", " }", "}"); runProcessor(); assertFormattedSource(// "class Test {", " String test(String firstName, String lastName) => \"${firstName}.${lastName}\";", "}"); } public void test_String_contains() throws Exception { translateSingleFile( "// filler filler filler filler filler filler filler filler filler filler", "package test;", "public class Test {", " public String test(String a, String b) {", " return a.contains(b);", " }", "}"); runProcessor(); assertFormattedSource(// "class Test {", " String test(String a, String b) => a.contains(b);", "}"); } public void test_String_equalsIgnoreCase() throws Exception { translateSingleFile( "// filler filler filler filler filler filler filler filler filler filler", "package test;", "public class Test {", " public boolean main(String a, String b) {", " return a.equalsIgnoreCase(b);", " }", "}"); runProcessor(); assertFormattedSource(// "class Test {", " bool main(String a, String b) => javaStringEqualsIgnoreCase(a, b);", "}"); } public void test_String_format() throws Exception { translateSingleFile( "// filler filler filler filler filler filler filler filler filler filler", "package test;", "public class Test {", " public String foo(String fmt, String name, int position) {", " return String.format(fmt, name, position);", " }", "}"); runProcessor(); assertFormattedSource( "class Test {", " String foo(String fmt, String name, int position) => JavaString.format(fmt, [name, position]);", "}"); } public void test_String_indexOf_char() throws Exception { translateSingleFile( "// filler filler filler filler filler filler filler filler filler filler", "package test;", "public class Test {", " public void main(String s) {", " s.indexOf('1');", " s.indexOf('2', 42);", " s.lastIndexOf('1');", " s.lastIndexOf('2', 42);", " }", "}"); runProcessor(); assertFormattedSource(// "class Test {", " void main(String s) {", " s.indexOf('1');", " JavaString.indexOf(s, '2', 42);", " s.lastIndexOf('1');", " JavaString.lastIndexOf(s, '2', 42);", " }", "}"); } /** * In Java using invalid index given {@code -1}, but in Dart - exception. */ public void test_String_indexOf_fromIndex() throws Exception { translateSingleFile( "// filler filler filler filler filler filler filler filler filler filler", "package test;", "public class Test {", " public void main(String s) {", " s.indexOf(\"x\", -1);", " s.indexOf(\"x\", 10);", " s.indexOf('y', 10);", " s.lastIndexOf(\"x\", -1);", " s.lastIndexOf(\"x\", 10);", " s.lastIndexOf('y', 10);", " }", "}"); runProcessor(); assertFormattedSource( "class Test {", " void main(String s) {", " JavaString.indexOf(s, \"x\", -1);", " JavaString.indexOf(s, \"x\", 10);", " JavaString.indexOf(s, 'y', 10);", " JavaString.lastIndexOf(s, \"x\", -1);", " JavaString.lastIndexOf(s, \"x\", 10);", " JavaString.lastIndexOf(s, 'y', 10);", " }", "}"); } public void test_String_length() throws Exception { translateSingleFile( "// filler filler filler filler filler filler filler filler filler filler", "package test;", "public class Test {", " public void main(String s) {", " s.length();", " s.isEmpty();", " }", "}"); runProcessor(); assertFormattedSource(// "class Test {", " void main(String s) {", " s.length;", " s.isEmpty;", " }", "}"); } public void test_String_plusEqualsChar() throws Exception { translateSingleFile( "// filler filler filler filler filler filler filler filler filler filler", "package test;", "public class Test {", " public void test(String s) {", " s += '=';", " }", "}"); runProcessor(); assertFormattedSource(// "class Test {", " void test(String s) {", " s += '=';", " }", "}"); } public void test_String_regionMatches() throws Exception { translateSingleFile( "// filler filler filler filler filler filler filler filler filler filler", "package test;", "public class Test {", " public boolean main(String a, String b) {", " return a.regionMatches(0, b, 2, 3);", " }", "}"); runProcessor(); assertFormattedSource(// "class Test {", " bool main(String a, String b) => javaStringRegionMatches(a, 0, b, 2, 3);", "}"); } public void test_String_replace() throws Exception { translateSingleFile( "// filler filler filler filler filler filler filler filler filler filler", "package test;", "public class Test {", " public String testA(String s, String p, String r) {", " return s.replace(p, r);", " }", " public String testB(String s, String r) {", " return s.replace('/', r);", " }", " public String testC(String s, char r) {", " return s.replace('/', r);", " }", "}"); runProcessor(); assertFormattedSource( "class Test {", " String testA(String s, String p, String r) => s.replaceAll(p, r);", " String testB(String s, String r) => s.replaceAll('/', r);", " String testC(String s, int r) => s.replaceAll('/', new String.fromCharCode(r));", "}"); } public void test_String_startsWith() throws Exception { translateSingleFile( "// filler filler filler filler filler filler filler filler filler filler", "package test;", "public class Test {", " public boolean main(String s, String prefix, int index) {", " return s.startsWith(prefix, index);", " }", "}"); runProcessor(); assertFormattedSource( "class Test {", " bool main(String s, String prefix, int index) => JavaString.startsWithBefore(s, prefix, index);", "}"); } public void test_String_valueOf_char() throws Exception { translateSingleFile( "// filler filler filler filler filler filler filler filler filler filler", "package test;", "public class Test {", " public String test(char c) {", " String.valueOf(c);", " }", "}"); runProcessor(); assertFormattedSource(// "class Test {", " String test(int c) {", " new String.fromCharCode(c);", " }", "}"); } public void test_StringBuilder() throws Exception { translateSingleFile( "// filler filler filler filler filler filler filler filler filler filler", "package test;", "public class Test {", " public String main() {", " StringBuilder sb = new StringBuilder(24);", " sb.append(\"abc\");", " sb.append(42);", " sb.append('0');", " sb.length();", " sb.setLength(0);", " return sb.toString();", " }", "}"); runProcessor(); assertFormattedSource( "class Test {", " String main() {", " JavaStringBuilder sb = new JavaStringBuilder();", " sb.append(\"abc\");", " sb.append(42);", " sb.appendChar(0x30);", " sb.length;", " sb.length = 0;", " return sb.toString();", " }", "}"); } public void test_Throwable_getCause() throws Exception { translateSingleFile( "// filler filler filler filler filler filler filler filler filler filler", "package test;", "public class Test {", " public main(Throwable e) {", " e.getCause();", " }", "}"); runProcessor(); assertFormattedSource(// "class Test {", " main(Exception e) {", " e.cause;", " }", "}"); } public void test_Throwable_getMessage() throws Exception { translateSingleFile( "// filler filler filler filler filler filler filler filler filler filler", "package test;", "public class Test {", " public main(Throwable e) {", " e.getMessage();", " }", "}"); runProcessor(); assertFormattedSource(// "class Test {", " main(Exception e) {", " e.toString();", " }", "}"); } public void test_Throwable_printStackTrace() throws Exception { translateSingleFile( "// filler filler filler filler filler filler filler filler filler filler", "package test;", "public class Test {", " public main(Throwable e) {", " e.printStackTrace();", " }", "}"); runProcessor(); assertFormattedSource(// "class Test {", " main(Exception e) {", " print(e);", " }", "}"); } private void runProcessor() { new ObjectSemanticProcessor(context).process(unit); } }