diff --git a/test_apks/reflection/java/classes/com/example/theseus/reflection/ChildReflectee.java b/test_apks/reflection/java/classes/com/example/theseus/reflection/ChildReflectee.java new file mode 100644 index 0000000..05f9b05 --- /dev/null +++ b/test_apks/reflection/java/classes/com/example/theseus/reflection/ChildReflectee.java @@ -0,0 +1,10 @@ +package com.example.theseus.reflection; + +public class ChildReflectee extends Reflectee { + public static String staticOverridenTransfer(String data) { + return "Static Overrided Transfer ChildReflectee: " + data; + } + public String overridenTransfer(String data) { + return "Inherited Overrided Transfer ChildReflectee: " + data; + } +} diff --git a/test_apks/reflection/java/classes/com/example/theseus/reflection/MainActivity.java b/test_apks/reflection/java/classes/com/example/theseus/reflection/MainActivity.java index f7dd2ef..ae38423 100644 --- a/test_apks/reflection/java/classes/com/example/theseus/reflection/MainActivity.java +++ b/test_apks/reflection/java/classes/com/example/theseus/reflection/MainActivity.java @@ -5,6 +5,7 @@ import android.os.Bundle; import android.util.Log; import android.widget.RelativeLayout; +import android.widget.ScrollView; import android.widget.LinearLayout; import android.view.ViewGroup; import android.view.View; @@ -27,6 +28,9 @@ public class MainActivity extends Activity { RelativeLayout relLayout = new RelativeLayout(this); relLayout.generateViewId(); + ScrollView scrollView = new ScrollView(this); + scrollView.generateViewId(); + RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams( ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT @@ -75,7 +79,16 @@ public class MainActivity extends Activity { b9.generateViewId(); linLayout.addView(b9); - relLayout.addView(linLayout); + Button b10 = new Button(this); + b10.generateViewId(); + linLayout.addView(b10); + + Button b11 = new Button(this); + b11.generateViewId(); + linLayout.addView(b11); + + scrollView.addView(linLayout); + relLayout.addView(scrollView); setContentView(relLayout); b1.setText("Virtual control"); @@ -177,12 +190,40 @@ public class MainActivity extends Activity { } } }); + + b10.setText("Extends control"); + b10.setOnClickListener(new View.OnClickListener() { + public void onClick(View v) { + try { + callVirtualInherited(); + callVirtualOverriden(); + callStaticInherited(); + callStaticOverriden(); + } catch(Exception e) { + Log.e("THESEUS", "Error: ", e); + } + } + }); + + b11.setText("Extends rflct"); + b11.setOnClickListener(new View.OnClickListener() { + public void onClick(View v) { + try { + callVirtualInheritedReflect(); + callVirtualOverridenReflect(); + callStaticInheritedReflect(); + callStaticOverridenReflect(); + } catch(Exception e) { + Log.e("THESEUS", "Error: ", e); + } + } + }); } // A normal virtual method call public void callVirtualMethod() { String data = Utils.source("no reflect virt call"); - Reflectee r = new Reflectee("R1"); + Reflectee r = new Reflectee("T1"); String newData = r.transfer(data); Utils.sink(this, newData); } @@ -195,7 +236,7 @@ public class MainActivity extends Activity { InvocationTargetException { String data = Utils.source("reflect virt call"); - Reflectee r = new Reflectee("R2"); + Reflectee r = new Reflectee("R1"); ClassLoader cl = MainActivity.class.getClassLoader(); Class clz = cl.loadClass("com.example.theseus.reflection.Reflectee"); Method mth = clz.getMethod("transfer", String.class); @@ -208,7 +249,7 @@ public class MainActivity extends Activity { public void callVirtualMethodCallAllScalar() { String data = Utils.source("no reflect virt call all scalars"); - Reflectee r = new Reflectee("R3"); + Reflectee r = new Reflectee("T2"); String newData = r.transfer(true, (byte)42, (short)666, '*', 0xDEAD_BEEF, 0xD1AB011C_5EAF00DL, 0.99f, 3.1415926535897932384626433d, data); Utils.testIsReflectee(this, r); Utils.sink(this, newData); @@ -222,7 +263,7 @@ public class MainActivity extends Activity { InvocationTargetException { String data = Utils.source("reflect virt call all scalars"); - Reflectee r = new Reflectee("R4"); + Reflectee r = new Reflectee("R2"); ClassLoader cl = MainActivity.class.getClassLoader(); Class clz = cl.loadClass("com.example.theseus.reflection.Reflectee"); Method mth = clz.getMethod("transfer", boolean.class, byte.class, short.class, char.class, int.class, long.class, float.class, double.class, String.class); @@ -235,7 +276,7 @@ public class MainActivity extends Activity { public void callVirtualMethodCallVarArg() { String data = Utils.source("no reflect virt call variable arg numb"); - Reflectee r = new Reflectee("R5"); + Reflectee r = new Reflectee("T3"); String newData = r.transfer("aa", "bb", data, "cc"); Utils.testIsReflectee(this, r); Utils.sink(this, newData); @@ -249,7 +290,7 @@ public class MainActivity extends Activity { InvocationTargetException { String data = Utils.source("reflect virt call variable arg numb"); - Reflectee r = new Reflectee("R6"); + Reflectee r = new Reflectee("R3"); ClassLoader cl = MainActivity.class.getClassLoader(); Class clz = cl.loadClass("com.example.theseus.reflection.Reflectee"); Method mth = clz.getMethod("transfer", String.class, String[].class); @@ -299,7 +340,7 @@ public class MainActivity extends Activity { // A normal virtual method call public void callStaticMethod() { - String data = Utils.source("R7 no reflect"); + String data = Utils.source("T4 control static"); String newData = Reflectee.staticTransfer(data); Utils.sink(this, newData); } @@ -311,7 +352,7 @@ public class MainActivity extends Activity { IllegalAccessException, InvocationTargetException { - String data = Utils.source("R8 reflect"); + String data = Utils.source("R4 reflect static"); ClassLoader cl = MainActivity.class.getClassLoader(); Class clz = cl.loadClass("com.example.theseus.reflection.Reflectee"); Method mth = clz.getMethod("staticTransfer", String.class); @@ -319,7 +360,87 @@ public class MainActivity extends Activity { Utils.sink(this, newData); } - // TODO: Interface, Inheritance + public void callVirtualInherited() { + String data = Utils.source("T5 control extend virt"); + String newData = new ChildReflectee().inheritedTransfer(data); + Utils.sink(this, newData); + } + public void callVirtualOverriden() { + String data = Utils.source("T6 control extend virt override"); + String newData = new ChildReflectee().overridenTransfer(data); + Utils.sink(this, newData); + } + public void callStaticInherited() { + String data = Utils.source("T7 control extend static"); + String newData = ChildReflectee.staticInheritedTransfer(data); + Utils.sink(this, newData); + } + public void callStaticOverriden() { + String data = Utils.source("T8 control extend static override"); + String newData = ChildReflectee.staticOverridenTransfer(data); + Utils.sink(this, newData); + } + + public void callVirtualInheritedReflect() throws + ClassNotFoundException, + NoSuchMethodException, + IllegalAccessException, + InvocationTargetException + { + String data = Utils.source("R5 reflect extend virt"); + ChildReflectee obj = new ChildReflectee(); + ClassLoader cl = MainActivity.class.getClassLoader(); + Class clz = cl.loadClass("com.example.theseus.reflection.ChildReflectee"); + Method mth = clz.getMethod("inheritedTransfer", String.class); + String newData = (String) mth.invoke(obj, data); + Utils.testIsChildReflectee(this, obj); + Utils.sink(this, newData); + } + + public void callVirtualOverridenReflect() throws + ClassNotFoundException, + NoSuchMethodException, + IllegalAccessException, + InvocationTargetException + { + String data = Utils.source("R6 reflect extend virt override"); + ChildReflectee obj = new ChildReflectee(); + ClassLoader cl = MainActivity.class.getClassLoader(); + Class clz = cl.loadClass("com.example.theseus.reflection.ChildReflectee"); + Method mth = clz.getMethod("overridenTransfer", String.class); + String newData = (String) mth.invoke(obj, data); + Utils.testIsChildReflectee(this, obj); + Utils.sink(this, newData); + } + + public void callStaticInheritedReflect() throws + ClassNotFoundException, + NoSuchMethodException, + IllegalAccessException, + InvocationTargetException + { + String data = Utils.source("R7 reflect extend static"); + ClassLoader cl = MainActivity.class.getClassLoader(); + Class clz = cl.loadClass("com.example.theseus.reflection.ChildReflectee"); + Method mth = clz.getMethod("staticInheritedTransfer", String.class); + String newData = (String) mth.invoke(null, data); + Utils.sink(this, newData); + } + public void callStaticOverridenReflect() throws + ClassNotFoundException, + NoSuchMethodException, + IllegalAccessException, + InvocationTargetException + { + String data = Utils.source("R8 reflect extend static override"); + ClassLoader cl = MainActivity.class.getClassLoader(); + Class clz = cl.loadClass("com.example.theseus.reflection.ChildReflectee"); + Method mth = clz.getMethod("staticOverridenTransfer", String.class); + String newData = (String) mth.invoke(null, data); + Utils.sink(this, newData); + } + + // TODO: Interface // TODO: many argument methods // TODO: factory patern } diff --git a/test_apks/reflection/java/classes/com/example/theseus/reflection/Reflectee.java b/test_apks/reflection/java/classes/com/example/theseus/reflection/Reflectee.java index e8480ef..1705b06 100644 --- a/test_apks/reflection/java/classes/com/example/theseus/reflection/Reflectee.java +++ b/test_apks/reflection/java/classes/com/example/theseus/reflection/Reflectee.java @@ -46,4 +46,20 @@ public class Reflectee { ) { return "Static Transfer: " + data; } + + public static String staticInheritedTransfer(String data) { + return "Static Inherited Transfer Reflectee: " + data; + } + + public static String staticOverridenTransfer(String data) { + return "Static Inherited Transfer Reflectee: " + data; + } + + public String inheritedTransfer(String data) { + return "Inherited Transfer Reflectee: " + data; + } + + public String overridenTransfer(String data) { + return "Inherited Transfer Reflectee: " + data; + } } diff --git a/test_apks/reflection/java/classes/com/example/theseus/reflection/Utils.java b/test_apks/reflection/java/classes/com/example/theseus/reflection/Utils.java index b84aef5..2d4aa7a 100644 --- a/test_apks/reflection/java/classes/com/example/theseus/reflection/Utils.java +++ b/test_apks/reflection/java/classes/com/example/theseus/reflection/Utils.java @@ -3,6 +3,7 @@ package com.example.theseus; import android.app.Activity; import android.app.AlertDialog; import com.example.theseus.reflection.Reflectee; +import com.example.theseus.reflection.ChildReflectee; public class Utils { @@ -26,9 +27,12 @@ public class Utils { } public static void testIsObject(Activity ac, Object obj) { - popup(ac, "Object", "Object was expected and found"); + //popup(ac, "Object", "Object was expected and found"); } public static void testIsReflectee(Activity ac, Reflectee ref) { - popup(ac, "Reflectee", "Reflectee was expected and found"); + //popup(ac, "Reflectee", "Reflectee was expected and found"); + } + public static void testIsChildReflectee(Activity ac, ChildReflectee ref) { + //popup(ac, "ChildReflectee", "ChildReflectee was expected and found"); } } diff --git a/test_apks/tests/java/classes/com/example/theseus/tests/MainActivity.java b/test_apks/tests/java/classes/com/example/theseus/tests/MainActivity.java index 7239cd0..05c2395 100644 --- a/test_apks/tests/java/classes/com/example/theseus/tests/MainActivity.java +++ b/test_apks/tests/java/classes/com/example/theseus/tests/MainActivity.java @@ -13,12 +13,39 @@ import java.util.Arrays; import android.util.Log; +import java.util.Random; + import com.example.theseus.Utils; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { + + boolean t = (new Random().nextInt(1000)) < 500; + if (t) { + Log.i("THESEUS", "OK"); + } else { + Log.i("THESEUS", "NOP"); + } + boolean t0 = (new Random().nextInt(1000)) < 500; + boolean t1 = (new Random().nextInt(1000)) < 500; + boolean t2 = (new Random().nextInt(1000)) < 500; + boolean t3 = (new Random().nextInt(1000)) < 500; + boolean t4 = (new Random().nextInt(1000)) < 500; + boolean t5 = (new Random().nextInt(1000)) < 500; + boolean t6 = (new Random().nextInt(1000)) < 500; + boolean t7 = (new Random().nextInt(1000)) < 500; + boolean t8 = (new Random().nextInt(1000)) < 500; + boolean t9 = (new Random().nextInt(1000)) < 500; + boolean t10 = (new Random().nextInt(1000)) < 500; + boolean t11 = (new Random().nextInt(1000)) < 500; + boolean t12 = (new Random().nextInt(1000)) < 500; + boolean t13 = (new Random().nextInt(1000)) < 500; + boolean t14 = (new Random().nextInt(1000)) < 500; + boolean t15 = (new Random().nextInt(1000)) < 500; + Log.i("THESEUS", "" + t0+t1+t2+t3+t4+t5+t6+t7+t8+t9+t10+t11+t12+t13+t14+t15); + super.onCreate(savedInstanceState); try { //callVirtualMethod();