ReturnsAndArgPassing.testProxyReturns RUNNING
ReturnsAndArgPassing.testProxyReturns PASSED
ReturnsAndArgPassing.testProxyArgPassing RUNNING
ReturnsAndArgPassing.testProxyArgPassing PASSED
Invoke public abstract void Shapes.circle(int)
 0: 3
--- circle 3
Success: method circle res=null
Invoke public abstract int Quads.rectangle(int,int)
 0: 10
 1: 20
--- rectangle 10,20
Success: method rectangle res=4
Invoke public abstract java.lang.String Shapes.blob()
 (no args)
--- blob
Success: method blob res=mix
Invoke public abstract int Quads.rectangle(int,int)
 0: 15
 1: 25
--- rectangle 15,25
Success: method rectangle res=4
Invoke public abstract int Quads.trapezoid(int,double,int)
 0: 6
 1: 81.18
 2: 4
--- trap 6,4,81.18
Success: method trapezoid res=8
Invoke public abstract int Colors.red(float)
 0: 1.0
--- red 1.0
Success: method red res=0
Invoke public abstract double Colors.blue(int)
 0: 777
--- blue 777
Success: method blue res=2.54
Invoke public abstract int Colors.mauve(java.lang.String)
 0: sorry
--- mauve sorry
Success: method mauve res=3
Invoke public abstract java.lang.String Shapes.blob()
 (no args)
--- blob
Success: method blob res=mix
$PROXY_CLASS_NAME0$.getTrace null:-1
Invoke public abstract void Shapes.upChuck()
 (no args)
Got expected ioobe
Invoke public abstract void Shapes.upCheck() throws java.lang.InterruptedException
 (no args)
Got expected ie

Proxy interfaces: [interface Quads, interface Colors, interface Trace]
Proxy methods: [public final java.lang.String $PROXY_CLASS_NAME0$.blob(), public final double $PROXY_CLASS_NAME0$.blue(int), public final R0a $PROXY_CLASS_NAME0$.checkMe(), public final R0aa $PROXY_CLASS_NAME0$.checkMe(), public final R0base $PROXY_CLASS_NAME0$.checkMe(), public final void $PROXY_CLASS_NAME0$.circle(int), public final boolean $PROXY_CLASS_NAME0$.equals(java.lang.Object), public final void $PROXY_CLASS_NAME0$.getTrace(), public final int $PROXY_CLASS_NAME0$.green(double), public final int $PROXY_CLASS_NAME0$.hashCode(), public final int $PROXY_CLASS_NAME0$.mauve(java.lang.String), public final int $PROXY_CLASS_NAME0$.rectangle(int,int), public final int $PROXY_CLASS_NAME0$.red(float), public final int $PROXY_CLASS_NAME0$.square(int,int), public final java.lang.String $PROXY_CLASS_NAME0$.toString(), public final int $PROXY_CLASS_NAME0$.trapezoid(int,double,int), public final void $PROXY_CLASS_NAME0$.upCheck() throws java.lang.InterruptedException, public final void $PROXY_CLASS_NAME0$.upChuck()]
Decl annos: []
Param annos (0) : []
Modifiers: 17
Dupe threw expected exception
Clash threw expected exception
Clash2 threw expected exception
Clash3 threw expected exception
Clash4 threw expected exception
Invoke public abstract void InterfaceW1.throwFunky()
 (no args)
Got expected UTE
Invoke public abstract void InterfaceW1.throwFunky2() throws BaseException,java.lang.NoSuchMethodException,java.io.IOException
 (no args)
Got expected IOE
Invoke public abstract void InterfaceW1.throwFunky2() throws BaseException,java.lang.NoSuchMethodException,java.io.IOException
 (no args)
Got expected IOE
Invoke public abstract void InterfaceW1.throwException() throws BaseException
 (no args)
Got expected UTE
Invoke public abstract void InterfaceW1.throwBase() throws BaseException
 (no args)
Got expected UTE
Invoke public abstract void InterfaceW1.throwSub() throws BaseException
 (no args)
Got expected exception
Invoke public abstract void InterfaceW1.throwSubSub() throws BaseException
 (no args)
Got expected exception
Invoke public abstract void InterfaceW1.bothThrowBase() throws BaseException,SubException,SubSubException
 (no args)
Got expected exception
Proxy methods: [public final boolean $PROXY_CLASS_NAME1$.equals(java.lang.Object), public final java.lang.Object $PROXY_CLASS_NAME1$.foo(), public final java.lang.String $PROXY_CLASS_NAME1$.foo(), public final int $PROXY_CLASS_NAME1$.hashCode(), public final java.lang.String $PROXY_CLASS_NAME1$.toString()]
Invocation of public abstract java.lang.String NarrowingTest$I2.foo()
Invoking foo using I2 type: hello
Invocation of public abstract java.lang.Object NarrowingTest$I1.foo()
Invoking foo using I1 type: 1
Invocation of public abstract java.lang.String NarrowingTest$I2.foo()
Got expected exception
Proxy narrowed invocation return type passed
5.8
JNI_OnLoad called
callback
