1package com.android.settingslib.graph;
2
3import android.content.Context;
4import android.content.res.Resources;
5import android.graphics.Canvas;
6import android.graphics.Rect;
7import android.support.test.InstrumentationRegistry;
8import android.support.test.filters.SmallTest;
9import android.support.test.runner.AndroidJUnit4;
10import com.android.settingslib.R;
11import org.junit.Before;
12import org.junit.Test;
13import org.junit.runner.RunWith;
14
15import static com.google.common.truth.Truth.assertThat;
16import static junit.framework.Assert.assertTrue;
17import static org.mockito.Matchers.any;
18import static org.mockito.Matchers.anyFloat;
19import static org.mockito.Matchers.anyString;
20import static org.mockito.Mockito.mock;
21import static org.mockito.Mockito.never;
22import static org.mockito.Mockito.verify;
23
24@SmallTest
25@RunWith(AndroidJUnit4.class)
26public class BatteryMeterDrawableBaseTest {
27    private Context mContext;
28    private Resources mResources;
29    private BatteryMeterDrawableBase mBatteryDrawable;
30
31    @Before
32    public void setUp() throws Exception {
33        mContext = InstrumentationRegistry.getTargetContext();
34        mResources = mContext.getResources();
35        mBatteryDrawable = new BatteryMeterDrawableBase(mContext, 0);
36    }
37
38    @Test
39    public void testGetIntrinsicSize() {
40        assertThat(mBatteryDrawable.getIntrinsicWidth()).
41                isEqualTo(mResources.getDimensionPixelSize(R.dimen.battery_width));
42        assertThat(mBatteryDrawable.getIntrinsicHeight()).
43                isEqualTo(mResources.getDimensionPixelSize(R.dimen.battery_height));
44    }
45
46    @Test
47    public void testDrawNothingBeforeOnBatteryLevelChanged() {
48        final Canvas canvas = mock(Canvas.class);
49        mBatteryDrawable.draw(canvas);
50        verify(canvas, never()).drawPath(any(), any());
51        verify(canvas, never()).drawText(anyString(), anyFloat(), anyFloat(), any());
52    }
53
54    @Test
55    public void testDrawingForTypicalValues() {
56        final Canvas canvas = mock(Canvas.class);
57        final int levels[] = { 0, 1, 5, 10, 25, 50, 75, 90, 95, 99, 100 };
58        final boolean bools[] = { false, true };
59        for (int l : levels) {
60            for (boolean charging : bools) {
61                for (boolean saver : bools) {
62                    for (boolean percent : bools) {
63                        mBatteryDrawable.setBatteryLevel(l);
64                        mBatteryDrawable.setPowerSave(saver);
65                        mBatteryDrawable.setCharging(charging);
66                        mBatteryDrawable.setShowPercent(percent);
67                        mBatteryDrawable.draw(canvas);
68                    }
69                }
70            }
71        }
72    }
73
74    @Test
75    public void testPadding_returnsCorrectValues() {
76        // different pads on each side to differentiate
77        final int left = 1;
78        final int top = 2;
79        final int right = 3;
80        final int bottom = 4;
81
82        final Rect expected = new Rect(left, top, right, bottom);
83        final Rect padding = new Rect();
84
85        mBatteryDrawable.setPadding(left, top, right, bottom);
86
87        assertThat(mBatteryDrawable.getPadding(padding)).isEqualTo(true);
88        assertThat(padding).isEqualTo(expected);
89    }
90
91    @Test
92    public void testPadding_falseIfUnsetOrZero() {
93        final Rect padding = new Rect();
94        assertThat(mBatteryDrawable.getPadding(padding)).isEqualTo(false);
95        assertThat(isRectZero(padding)).isEqualTo(true);
96
97        mBatteryDrawable.setPadding(0, 0, 0, 0);
98        assertThat(mBatteryDrawable.getPadding(padding)).isEqualTo(false);
99        assertThat(isRectZero(padding)).isEqualTo(true);
100    }
101
102    private boolean isRectZero(Rect r) {
103        return r.left == 0 && r.top == 0 && r.right == 0 && r.bottom == 0;
104    }
105
106    @Test
107    public void testPlusPaint_isEqualToBoltPaint() {
108        // Before setting color
109        assertTrue(mBatteryDrawable.mPlusPaint.hasEqualAttributes(mBatteryDrawable.mBoltPaint));
110
111        final int fakeFillColor = 123;
112        final int fakeBackgrundColor = 456;
113
114        // After
115        mBatteryDrawable.setColors(fakeFillColor, fakeBackgrundColor);
116        assertTrue(mBatteryDrawable.mPlusPaint.hasEqualAttributes(mBatteryDrawable.mBoltPaint));
117    }
118}
119