package org.robolectric.android;
import android.graphics.Bitmap;
import android.graphics.Paint;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.annotation.Config;
import org.robolectric.annotation.Implementation;
import org.robolectric.annotation.Implements;
import org.robolectric.annotation.internal.Instrument;
import static org.assertj.core.api.Assertions.assertThat;
@RunWith(RobolectricTestRunner.class)
public class AndroidTranslatorClassInstrumentedTest {
@Test
@Config(shadows = ShadowPaintForTests.class)
public void testNativeMethodsAreDelegated() throws Exception {
Paint paint = new Paint();
paint.setColor(1234);
assertThat(paint.getColor()).isEqualTo(1234);
}
@Test
@Config(shadows = ShadowClassWithPrivateConstructor.class)
public void testClassesWithPrivateDefaultConstructorsCanBeShadowed() {
ClassWithPrivateConstructor inst = new ClassWithPrivateConstructor();
assertThat(inst.getInt()).isEqualTo(42);
}
@Test
public void testEnumConstructorsAreNotRewritten() {
// just referencing this enum value would blow up if we rewrite its constructor
Bitmap.Config alpha8 = Bitmap.Config.ALPHA_8;
assertThat(alpha8.toString()).isEqualTo("ALPHA_8");
}
/*
* Test "foreign class" getting its methods shadowed whe it's
* in the SandboxClassLoader CustomClassNames arrayList
*/
@Test
@Config(shadows = {ShadowCustomPaint.class, ShadowPaintForTests.class})
public void testCustomMethodShadowed() throws Exception {
CustomPaint customPaint = new CustomPaint();
assertThat(customPaint.getColor()).isEqualTo(10);
assertThat(customPaint.getColorName()).isEqualTo("rainbow");
}
@Instrument
public static class ClassWithPrivateConstructor {
private ClassWithPrivateConstructor() {
}
public int getInt() {
return 99;
}
}
@Implements(ClassWithPrivateConstructor.class)
public static class ShadowClassWithPrivateConstructor {
@Implementation
public int getInt() {
return 42;
}
}
@Implements(Paint.class)
public static class ShadowPaintForTests {
private int color;
@Implementation
public void setColor(int color) {
this.color = color;
}
@Implementation
public int getColor() {
return color;
}
}
@SuppressWarnings({"UnusedDeclaration"})
@Instrument
public static class CustomPaint extends Paint {
private int customColor;
@Override
public int getColor() {
return customColor;
}
public String getColorName() {
return Integer.toString(customColor);
}
}
@Implements(CustomPaint.class)
public static class ShadowCustomPaint extends ShadowPaintForTests {
@Override
@Implementation
public int getColor() {
return 10;
}
@Implementation
public String getColorName() {
return "rainbow";
}
}
}