KT-729 Need to support arrays as varargs

This commit is contained in:
Alex Tkachman
2012-04-28 10:43:49 +03:00
parent 7b7987ba0d
commit f076ff027d
4 changed files with 103 additions and 7 deletions
@@ -16,8 +16,10 @@
package org.jetbrains.jet.codegen;
import java.lang.reflect.Array;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Arrays;
/**
* @author alex.tkachman
@@ -94,4 +96,23 @@ public class VarArgTest extends CodegenTestCase {
public void testKt797() {
blackBoxFile("regressions/kt796_797.jet");
}
public void testArrayAsVararg () throws InvocationTargetException, IllegalAccessException {
loadText("private fun asList(vararg elems: String) = elems; fun test(ts: Array<String>) = asList(*ts); ");
//System.out.println(generateToText());
final Method main = generateFunction("test");
String[] args = {"mama", "papa"};
assertTrue(args == main.invoke(null, new Object[]{ args } ));
}
public void testArrayAsVararg2 () throws InvocationTargetException, IllegalAccessException {
loadText("private fun asList(vararg elems: String) = elems; fun test(ts1: Array<String>, ts2: String) = asList(*ts1, ts2); ");
System.out.println(generateToText());
final Method main = generateFunction("test");
Object invoke = main.invoke(null, new Object[] {new String[] {"mama"}, "papa" });
assertInstanceOf(invoke, String[].class);
assertEquals(2, Array.getLength(invoke));
assertEquals("mama", Array.get(invoke, 0));
assertEquals("papa", Array.get(invoke, 1));
}
}