1 package com.android.settingslib.graph; 2 3 import android.content.Context; 4 import android.content.res.Resources; 5 import android.graphics.Canvas; 6 import android.graphics.Rect; 7 import android.support.test.InstrumentationRegistry; 8 import android.support.test.filters.SmallTest; 9 import android.support.test.runner.AndroidJUnit4; 10 import com.android.settingslib.R; 11 import org.junit.Before; 12 import org.junit.Test; 13 import org.junit.runner.RunWith; 14 15 import static com.google.common.truth.Truth.assertThat; 16 import static junit.framework.Assert.assertTrue; 17 import static org.mockito.Matchers.any; 18 import static org.mockito.Matchers.anyFloat; 19 import static org.mockito.Matchers.anyString; 20 import static org.mockito.Mockito.mock; 21 import static org.mockito.Mockito.never; 22 import static org.mockito.Mockito.verify; 23 24 @SmallTest 25 @RunWith(AndroidJUnit4.class) 26 public 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