1b9116a1018de7bd622d18742d589eca4b5a12983Kathy Linpackage com.xtremelabs.robolectric.bytecode; 2b9116a1018de7bd622d18742d589eca4b5a12983Kathy Lin 3f567a9e68c435fa0a98191c8ccda08add2f37566Rick Kawala & Ryan Richardimport android.graphics.Bitmap; 4b9116a1018de7bd622d18742d589eca4b5a12983Kathy Linimport android.graphics.Paint; 5b9116a1018de7bd622d18742d589eca4b5a12983Kathy Linimport com.xtremelabs.robolectric.Robolectric; 6b9116a1018de7bd622d18742d589eca4b5a12983Kathy Linimport com.xtremelabs.robolectric.WithCustomClassListTestRunner; 7b9116a1018de7bd622d18742d589eca4b5a12983Kathy Linimport com.xtremelabs.robolectric.internal.Implementation; 8b9116a1018de7bd622d18742d589eca4b5a12983Kathy Linimport com.xtremelabs.robolectric.internal.Implements; 9f567a9e68c435fa0a98191c8ccda08add2f37566Rick Kawala & Ryan Richardimport org.junit.Test; 10f567a9e68c435fa0a98191c8ccda08add2f37566Rick Kawala & Ryan Richardimport org.junit.runner.RunWith; 11f567a9e68c435fa0a98191c8ccda08add2f37566Rick Kawala & Ryan Richard 12f567a9e68c435fa0a98191c8ccda08add2f37566Rick Kawala & Ryan Richardimport static org.hamcrest.CoreMatchers.equalTo; 13f567a9e68c435fa0a98191c8ccda08add2f37566Rick Kawala & Ryan Richardimport static org.hamcrest.CoreMatchers.is; 14f567a9e68c435fa0a98191c8ccda08add2f37566Rick Kawala & Ryan Richardimport static org.junit.Assert.assertThat; 15b9116a1018de7bd622d18742d589eca4b5a12983Kathy Lin 16b9116a1018de7bd622d18742d589eca4b5a12983Kathy Lin@RunWith(WithCustomClassListTestRunner.class) 17b9116a1018de7bd622d18742d589eca4b5a12983Kathy Linpublic class AndroidTranslatorClassIntrumentedTest { 18b9116a1018de7bd622d18742d589eca4b5a12983Kathy Lin 19b9116a1018de7bd622d18742d589eca4b5a12983Kathy Lin @Test 20b9116a1018de7bd622d18742d589eca4b5a12983Kathy Lin public void testNativeMethodsAreDelegated() throws Exception { 21b9116a1018de7bd622d18742d589eca4b5a12983Kathy Lin Robolectric.bindShadowClass(ShadowPaintForTests.class); 22b9116a1018de7bd622d18742d589eca4b5a12983Kathy Lin 23b9116a1018de7bd622d18742d589eca4b5a12983Kathy Lin Paint paint = new Paint(); 24b9116a1018de7bd622d18742d589eca4b5a12983Kathy Lin paint.setColor(1234); 25b9116a1018de7bd622d18742d589eca4b5a12983Kathy Lin 26b9116a1018de7bd622d18742d589eca4b5a12983Kathy Lin assertThat(paint.getColor(), is(1234)); 27b9116a1018de7bd622d18742d589eca4b5a12983Kathy Lin } 28f567a9e68c435fa0a98191c8ccda08add2f37566Rick Kawala & Ryan Richard 29f567a9e68c435fa0a98191c8ccda08add2f37566Rick Kawala & Ryan Richard @Test 30f567a9e68c435fa0a98191c8ccda08add2f37566Rick Kawala & Ryan Richard public void testClassesWithPrivateDefaultConstructorsCanBeShadowed() { 31f567a9e68c435fa0a98191c8ccda08add2f37566Rick Kawala & Ryan Richard Robolectric.bindShadowClass(ShadowClassWithPrivateConstructor.class); 32f567a9e68c435fa0a98191c8ccda08add2f37566Rick Kawala & Ryan Richard 33f567a9e68c435fa0a98191c8ccda08add2f37566Rick Kawala & Ryan Richard ClassWithPrivateConstructor inst = new ClassWithPrivateConstructor(); 34f567a9e68c435fa0a98191c8ccda08add2f37566Rick Kawala & Ryan Richard assertThat(inst.getInt(), is(42)); 35f567a9e68c435fa0a98191c8ccda08add2f37566Rick Kawala & Ryan Richard } 36f567a9e68c435fa0a98191c8ccda08add2f37566Rick Kawala & Ryan Richard 37f567a9e68c435fa0a98191c8ccda08add2f37566Rick Kawala & Ryan Richard @Test 38f567a9e68c435fa0a98191c8ccda08add2f37566Rick Kawala & Ryan Richard public void testEnumConstructorsAreNotRewritten() { 39f567a9e68c435fa0a98191c8ccda08add2f37566Rick Kawala & Ryan Richard // just referencing this enum value would blow up if we rewrite its constructor 40f567a9e68c435fa0a98191c8ccda08add2f37566Rick Kawala & Ryan Richard Bitmap.Config alpha8 = Bitmap.Config.ALPHA_8; 41f567a9e68c435fa0a98191c8ccda08add2f37566Rick Kawala & Ryan Richard assertThat(alpha8.toString(), equalTo("ALPHA_8")); 42f567a9e68c435fa0a98191c8ccda08add2f37566Rick Kawala & Ryan Richard } 43f567a9e68c435fa0a98191c8ccda08add2f37566Rick Kawala & Ryan Richard 44b9116a1018de7bd622d18742d589eca4b5a12983Kathy Lin /* 45b9116a1018de7bd622d18742d589eca4b5a12983Kathy Lin * Test "foreign class" getting its methods shadowed whe it's 46b9116a1018de7bd622d18742d589eca4b5a12983Kathy Lin * in the RobolectricClassLoader CustomClassNames arrayList 47b9116a1018de7bd622d18742d589eca4b5a12983Kathy Lin */ 487598f0c0b1cce3bf1902772ea09139ef98083864Ryan Richard & Tyler Schultz @Test 49b9116a1018de7bd622d18742d589eca4b5a12983Kathy Lin public void testCustomMethodShadowed() throws Exception { 50f567a9e68c435fa0a98191c8ccda08add2f37566Rick Kawala & Ryan Richard Robolectric.bindShadowClass(ShadowCustomPaint.class); 51f567a9e68c435fa0a98191c8ccda08add2f37566Rick Kawala & Ryan Richard 52f567a9e68c435fa0a98191c8ccda08add2f37566Rick Kawala & Ryan Richard CustomPaint customPaint = new CustomPaint(); 53f567a9e68c435fa0a98191c8ccda08add2f37566Rick Kawala & Ryan Richard assertThat(customPaint.getColor(), equalTo(10)); 54f567a9e68c435fa0a98191c8ccda08add2f37566Rick Kawala & Ryan Richard assertThat(customPaint.getColorName(), equalTo("rainbow")); 55b9116a1018de7bd622d18742d589eca4b5a12983Kathy Lin } 56f567a9e68c435fa0a98191c8ccda08add2f37566Rick Kawala & Ryan Richard 57b9116a1018de7bd622d18742d589eca4b5a12983Kathy Lin /* 58b9116a1018de7bd622d18742d589eca4b5a12983Kathy Lin * Test "foreign class" not getting its methods shadowed when it's 59b9116a1018de7bd622d18742d589eca4b5a12983Kathy Lin * not in the RobolectricClassLoader CustomClassNames arrayList 60b9116a1018de7bd622d18742d589eca4b5a12983Kathy Lin */ 617598f0c0b1cce3bf1902772ea09139ef98083864Ryan Richard & Tyler Schultz @Test 62b9116a1018de7bd622d18742d589eca4b5a12983Kathy Lin public void testCustomMethodNotShadowed() throws Exception { 63f567a9e68c435fa0a98191c8ccda08add2f37566Rick Kawala & Ryan Richard Robolectric.bindShadowClass(ShadowCustomXmasPaint.class); 64f567a9e68c435fa0a98191c8ccda08add2f37566Rick Kawala & Ryan Richard 65f567a9e68c435fa0a98191c8ccda08add2f37566Rick Kawala & Ryan Richard CustomXmasPaint customXmasPaint = new CustomXmasPaint(); 66f567a9e68c435fa0a98191c8ccda08add2f37566Rick Kawala & Ryan Richard assertThat(customXmasPaint.getColor(), equalTo(999)); 67f567a9e68c435fa0a98191c8ccda08add2f37566Rick Kawala & Ryan Richard assertThat(customXmasPaint.getColorName(), equalTo("XMAS")); 68f567a9e68c435fa0a98191c8ccda08add2f37566Rick Kawala & Ryan Richard } 69f567a9e68c435fa0a98191c8ccda08add2f37566Rick Kawala & Ryan Richard 70f567a9e68c435fa0a98191c8ccda08add2f37566Rick Kawala & Ryan Richard public static class ClassWithPrivateConstructor { 71f567a9e68c435fa0a98191c8ccda08add2f37566Rick Kawala & Ryan Richard private ClassWithPrivateConstructor() { 72f567a9e68c435fa0a98191c8ccda08add2f37566Rick Kawala & Ryan Richard } 73f567a9e68c435fa0a98191c8ccda08add2f37566Rick Kawala & Ryan Richard 74f567a9e68c435fa0a98191c8ccda08add2f37566Rick Kawala & Ryan Richard public int getInt() { 75f567a9e68c435fa0a98191c8ccda08add2f37566Rick Kawala & Ryan Richard return 99; 76f567a9e68c435fa0a98191c8ccda08add2f37566Rick Kawala & Ryan Richard } 77f567a9e68c435fa0a98191c8ccda08add2f37566Rick Kawala & Ryan Richard } 78f567a9e68c435fa0a98191c8ccda08add2f37566Rick Kawala & Ryan Richard 79f567a9e68c435fa0a98191c8ccda08add2f37566Rick Kawala & Ryan Richard @Implements(ClassWithPrivateConstructor.class) 80f567a9e68c435fa0a98191c8ccda08add2f37566Rick Kawala & Ryan Richard public static class ShadowClassWithPrivateConstructor { 81f567a9e68c435fa0a98191c8ccda08add2f37566Rick Kawala & Ryan Richard @Implementation 82f567a9e68c435fa0a98191c8ccda08add2f37566Rick Kawala & Ryan Richard public int getInt() { 83f567a9e68c435fa0a98191c8ccda08add2f37566Rick Kawala & Ryan Richard return 42; 84f567a9e68c435fa0a98191c8ccda08add2f37566Rick Kawala & Ryan Richard } 85b9116a1018de7bd622d18742d589eca4b5a12983Kathy Lin } 86b9116a1018de7bd622d18742d589eca4b5a12983Kathy Lin 87b9116a1018de7bd622d18742d589eca4b5a12983Kathy Lin @Implements(Paint.class) 88b9116a1018de7bd622d18742d589eca4b5a12983Kathy Lin public static class ShadowPaintForTests { 89b9116a1018de7bd622d18742d589eca4b5a12983Kathy Lin private int color; 90b9116a1018de7bd622d18742d589eca4b5a12983Kathy Lin 91b9116a1018de7bd622d18742d589eca4b5a12983Kathy Lin @Implementation 92b9116a1018de7bd622d18742d589eca4b5a12983Kathy Lin public void setColor(int color) { 93b9116a1018de7bd622d18742d589eca4b5a12983Kathy Lin this.color = color; 94b9116a1018de7bd622d18742d589eca4b5a12983Kathy Lin } 95b9116a1018de7bd622d18742d589eca4b5a12983Kathy Lin 96b9116a1018de7bd622d18742d589eca4b5a12983Kathy Lin @Implementation 97b9116a1018de7bd622d18742d589eca4b5a12983Kathy Lin public int getColor() { 98b9116a1018de7bd622d18742d589eca4b5a12983Kathy Lin return color; 99b9116a1018de7bd622d18742d589eca4b5a12983Kathy Lin } 100b9116a1018de7bd622d18742d589eca4b5a12983Kathy Lin } 101f567a9e68c435fa0a98191c8ccda08add2f37566Rick Kawala & Ryan Richard 102b9116a1018de7bd622d18742d589eca4b5a12983Kathy Lin @SuppressWarnings({"UnusedDeclaration"}) 103b9116a1018de7bd622d18742d589eca4b5a12983Kathy Lin public static class CustomPaint extends Paint { 104f567a9e68c435fa0a98191c8ccda08add2f37566Rick Kawala & Ryan Richard private int customColor; 105b9116a1018de7bd622d18742d589eca4b5a12983Kathy Lin 106b9116a1018de7bd622d18742d589eca4b5a12983Kathy Lin @Override 107b9116a1018de7bd622d18742d589eca4b5a12983Kathy Lin public int getColor() { 108b9116a1018de7bd622d18742d589eca4b5a12983Kathy Lin return customColor; 109b9116a1018de7bd622d18742d589eca4b5a12983Kathy Lin } 110f567a9e68c435fa0a98191c8ccda08add2f37566Rick Kawala & Ryan Richard 111b9116a1018de7bd622d18742d589eca4b5a12983Kathy Lin public String getColorName() { 112f567a9e68c435fa0a98191c8ccda08add2f37566Rick Kawala & Ryan Richard return Integer.toString(customColor); 113b9116a1018de7bd622d18742d589eca4b5a12983Kathy Lin } 114b9116a1018de7bd622d18742d589eca4b5a12983Kathy Lin } 115f567a9e68c435fa0a98191c8ccda08add2f37566Rick Kawala & Ryan Richard 116f567a9e68c435fa0a98191c8ccda08add2f37566Rick Kawala & Ryan Richard @Implements(CustomPaint.class) 117f567a9e68c435fa0a98191c8ccda08add2f37566Rick Kawala & Ryan Richard public static class ShadowCustomPaint { 118f567a9e68c435fa0a98191c8ccda08add2f37566Rick Kawala & Ryan Richard 119b9116a1018de7bd622d18742d589eca4b5a12983Kathy Lin @Implementation 120b9116a1018de7bd622d18742d589eca4b5a12983Kathy Lin public int getColor() { 121b9116a1018de7bd622d18742d589eca4b5a12983Kathy Lin return 10; 122b9116a1018de7bd622d18742d589eca4b5a12983Kathy Lin } 123f567a9e68c435fa0a98191c8ccda08add2f37566Rick Kawala & Ryan Richard 124b9116a1018de7bd622d18742d589eca4b5a12983Kathy Lin @Implementation 125b9116a1018de7bd622d18742d589eca4b5a12983Kathy Lin public String getColorName() { 126f567a9e68c435fa0a98191c8ccda08add2f37566Rick Kawala & Ryan Richard return "rainbow"; 127f567a9e68c435fa0a98191c8ccda08add2f37566Rick Kawala & Ryan Richard } 128b9116a1018de7bd622d18742d589eca4b5a12983Kathy Lin } 129f567a9e68c435fa0a98191c8ccda08add2f37566Rick Kawala & Ryan Richard 130b9116a1018de7bd622d18742d589eca4b5a12983Kathy Lin @SuppressWarnings({"UnusedDeclaration"}) 131b9116a1018de7bd622d18742d589eca4b5a12983Kathy Lin public static class CustomXmasPaint extends Paint { 132b9116a1018de7bd622d18742d589eca4b5a12983Kathy Lin 133b9116a1018de7bd622d18742d589eca4b5a12983Kathy Lin @Override 134b9116a1018de7bd622d18742d589eca4b5a12983Kathy Lin public int getColor() { 135b9116a1018de7bd622d18742d589eca4b5a12983Kathy Lin return 999; 136b9116a1018de7bd622d18742d589eca4b5a12983Kathy Lin } 137f567a9e68c435fa0a98191c8ccda08add2f37566Rick Kawala & Ryan Richard 138b9116a1018de7bd622d18742d589eca4b5a12983Kathy Lin public String getColorName() { 139f567a9e68c435fa0a98191c8ccda08add2f37566Rick Kawala & Ryan Richard return "XMAS"; 140b9116a1018de7bd622d18742d589eca4b5a12983Kathy Lin } 141f567a9e68c435fa0a98191c8ccda08add2f37566Rick Kawala & Ryan Richard } 142f567a9e68c435fa0a98191c8ccda08add2f37566Rick Kawala & Ryan Richard 143f567a9e68c435fa0a98191c8ccda08add2f37566Rick Kawala & Ryan Richard @Implements(CustomXmasPaint.class) 144f567a9e68c435fa0a98191c8ccda08add2f37566Rick Kawala & Ryan Richard public static class ShadowCustomXmasPaint { 145f567a9e68c435fa0a98191c8ccda08add2f37566Rick Kawala & Ryan Richard 146b9116a1018de7bd622d18742d589eca4b5a12983Kathy Lin @Implementation 147b9116a1018de7bd622d18742d589eca4b5a12983Kathy Lin public int getColor() { 148b9116a1018de7bd622d18742d589eca4b5a12983Kathy Lin return -999; 149b9116a1018de7bd622d18742d589eca4b5a12983Kathy Lin } 150f567a9e68c435fa0a98191c8ccda08add2f37566Rick Kawala & Ryan Richard 151b9116a1018de7bd622d18742d589eca4b5a12983Kathy Lin @Implementation 152b9116a1018de7bd622d18742d589eca4b5a12983Kathy Lin public String getColorName() { 153f567a9e68c435fa0a98191c8ccda08add2f37566Rick Kawala & Ryan Richard return "XMAS Color Test"; 154f567a9e68c435fa0a98191c8ccda08add2f37566Rick Kawala & Ryan Richard } 155b9116a1018de7bd622d18742d589eca4b5a12983Kathy Lin } 156b9116a1018de7bd622d18742d589eca4b5a12983Kathy Lin} 157