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