1 // Copyright 2019 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 package org.chromium.chrome.browser.feed.library.piet.ui; 6 7 import static com.google.common.truth.Truth.assertThat; 8 9 import android.app.Activity; 10 import android.content.Context; 11 import android.graphics.Paint; 12 import android.graphics.Rect; 13 14 import org.junit.Before; 15 import org.junit.Test; 16 import org.junit.runner.RunWith; 17 import org.robolectric.Robolectric; 18 import org.robolectric.annotation.Config; 19 20 import org.chromium.chrome.browser.feed.library.common.ui.LayoutUtils; 21 import org.chromium.components.feed.core.proto.ui.piet.StylesProto.Borders; 22 import org.chromium.components.feed.core.proto.ui.piet.StylesProto.Borders.Edges; 23 import org.chromium.testing.local.LocalRobolectricTestRunner; 24 25 /** Tests for the {@link BorderDrawable}. */ 26 @RunWith(LocalRobolectricTestRunner.class) 27 @Config(manifest = Config.NONE) 28 public class BorderDrawableTest { 29 private static final float[] ZERO_RADII = new float[] {0, 0, 0, 0, 0, 0, 0, 0}; 30 private static final boolean LEFT_TO_RIGHT = false; 31 private static final boolean RIGHT_TO_LEFT = true; 32 33 private static final int COLOR = 0xFFFF0000; 34 private static final int WIDTH_DP = 8; 35 private int mWidthPx; 36 37 private static final Borders DEFAULT_BORDER = 38 Borders.newBuilder().setWidth(WIDTH_DP).setColor(COLOR).build(); 39 40 private Context mContext; 41 42 @Before setUp()43 public void setUp() { 44 mContext = Robolectric.buildActivity(Activity.class).get(); 45 mWidthPx = (int) LayoutUtils.dpToPx(WIDTH_DP, mContext); 46 } 47 48 @Test testBorders_setsPaintParams()49 public void testBorders_setsPaintParams() { 50 BorderDrawable borderDrawable = 51 new BorderDrawable(mContext, DEFAULT_BORDER, ZERO_RADII, LEFT_TO_RIGHT); 52 53 assertThat(borderDrawable.getPaint().getStyle()).isEqualTo(Paint.Style.STROKE); 54 assertThat(borderDrawable.getPaint().getStrokeWidth()).isEqualTo((float) mWidthPx * 2); 55 assertThat(borderDrawable.getPaint().getColor()).isEqualTo(COLOR); 56 } 57 58 @Test testBorders_allSides_default()59 public void testBorders_allSides_default() { 60 BorderDrawable borderDrawable = 61 new BorderDrawable(mContext, DEFAULT_BORDER, ZERO_RADII, LEFT_TO_RIGHT); 62 63 assertThat(borderDrawable.getPaint().getStyle()).isEqualTo(Paint.Style.STROKE); 64 assertThat(borderDrawable.getPaint().getStrokeWidth()).isEqualTo((float) mWidthPx * 2); 65 assertThat(borderDrawable.getPaint().getColor()).isEqualTo(COLOR); 66 67 borderDrawable.setBounds(1, 2, 3, 4); 68 Rect bounds = borderDrawable.getBounds(); 69 assertThat(bounds).isEqualTo(new Rect(1, 2, 3, 4)); 70 } 71 72 @Test testBorders_allSides_explicit()73 public void testBorders_allSides_explicit() { 74 BorderDrawable borderDrawable = new BorderDrawable(mContext, 75 DEFAULT_BORDER.toBuilder() 76 .setBitmask(Edges.BOTTOM.getNumber() | Edges.TOP.getNumber() 77 | Edges.START.getNumber() | Edges.END.getNumber()) 78 .build(), 79 ZERO_RADII, LEFT_TO_RIGHT); 80 81 borderDrawable.setBounds(1, 2, 3, 4); 82 Rect bounds = borderDrawable.getBounds(); 83 assertThat(bounds).isEqualTo(new Rect(1, 2, 3, 4)); 84 } 85 86 @Test testBorders_topLeft()87 public void testBorders_topLeft() { 88 BorderDrawable borderDrawable = new BorderDrawable(mContext, 89 DEFAULT_BORDER.toBuilder() 90 .setBitmask(Edges.TOP.getNumber() | Edges.START.getNumber()) 91 .build(), 92 ZERO_RADII, LEFT_TO_RIGHT); 93 94 borderDrawable.setBounds(1, 2, 3, 4); 95 Rect bounds = borderDrawable.getBounds(); 96 assertThat(bounds).isEqualTo(new Rect(1, 2, 3 + mWidthPx, 4 + mWidthPx)); 97 } 98 99 @Test testBorders_bottomRight()100 public void testBorders_bottomRight() { 101 BorderDrawable borderDrawable = new BorderDrawable(mContext, 102 DEFAULT_BORDER.toBuilder() 103 .setBitmask(Edges.BOTTOM.getNumber() | Edges.END.getNumber()) 104 .build(), 105 ZERO_RADII, LEFT_TO_RIGHT); 106 107 borderDrawable.setBounds(1, 2, 3, 4); 108 Rect bounds = borderDrawable.getBounds(); 109 assertThat(bounds).isEqualTo(new Rect(1 - mWidthPx, 2 - mWidthPx, 3, 4)); 110 } 111 112 @Test testBorders_someSides_RtL()113 public void testBorders_someSides_RtL() { 114 BorderDrawable borderDrawable = new BorderDrawable(mContext, 115 DEFAULT_BORDER.toBuilder() 116 .setBitmask(Edges.TOP.getNumber() | Edges.BOTTOM.getNumber() 117 | Edges.END.getNumber()) 118 .build(), 119 ZERO_RADII, RIGHT_TO_LEFT); 120 121 borderDrawable.setBounds(1, 2, 3, 4); 122 Rect bounds = borderDrawable.getBounds(); 123 assertThat(bounds).isEqualTo(new Rect(1, 2, 3 + mWidthPx, 4)); 124 125 borderDrawable = new BorderDrawable(mContext, 126 DEFAULT_BORDER.toBuilder() 127 .setBitmask(Edges.TOP.getNumber() | Edges.BOTTOM.getNumber() 128 | Edges.START.getNumber()) 129 .build(), 130 ZERO_RADII, RIGHT_TO_LEFT); 131 132 borderDrawable.setBounds(1, 2, 3, 4); 133 bounds = borderDrawable.getBounds(); 134 assertThat(bounds).isEqualTo(new Rect(1 - mWidthPx, 2, 3, 4)); 135 } 136 137 @Test testSetBoundsRect()138 public void testSetBoundsRect() { 139 BorderDrawable borderDrawable = new BorderDrawable(mContext, 140 DEFAULT_BORDER.toBuilder() 141 .setBitmask(Edges.TOP.getNumber() | Edges.END.getNumber()) 142 .build(), 143 ZERO_RADII, LEFT_TO_RIGHT); 144 145 borderDrawable.setBounds(new Rect(1, 2, 3, 4)); 146 Rect bounds = borderDrawable.getBounds(); 147 assertThat(bounds).isEqualTo(new Rect(1 - mWidthPx, 2, 3, 4 + mWidthPx)); 148 } 149 } 150