1/* 2 * Copyright (C) 2017 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17package com.android.setupwizardlib.util; 18 19import static org.junit.Assert.assertEquals; 20import static org.robolectric.RuntimeEnvironment.application; 21 22import android.content.Context; 23import android.content.res.Resources; 24import android.content.res.TypedArray; 25import android.util.DisplayMetrics; 26import android.util.TypedValue; 27import android.view.ContextThemeWrapper; 28 29import com.android.setupwizardlib.BuildConfig; 30import com.android.setupwizardlib.R; 31import com.android.setupwizardlib.robolectric.SuwLibRobolectricTestRunner; 32 33import org.junit.Before; 34import org.junit.Test; 35import org.junit.runner.RunWith; 36import org.robolectric.annotation.Config; 37 38@RunWith(SuwLibRobolectricTestRunner.class) 39@Config(constants = BuildConfig.class, sdk = Config.ALL_SDKS) 40public class GlifDimensionTest { 41 42 private Context mContext; 43 44 @Before 45 public void setUp() { 46 mContext = new ContextThemeWrapper(application, R.style.SuwThemeGlif_Light); 47 } 48 49 @Test 50 public void testDividerInsetPhone() { 51 assertDividerInset(); 52 } 53 54 @Config(qualifiers = "sw600dp") 55 @Test 56 public void testDividerInsetSw600dp() { 57 assertDividerInset(); 58 } 59 60 private void assertDividerInset() { 61 final Resources res = mContext.getResources(); 62 63 final TypedArray a = mContext.obtainStyledAttributes(new int[]{R.attr.suwMarginSides}); 64 final int marginSides = a.getDimensionPixelSize(0, 0); 65 a.recycle(); 66 67 assertEquals( 68 "Dimensions should satisfy constraint: " 69 + "?attr/suwMarginSides = suw_items_glif_text_divider_inset", 70 marginSides, 71 res.getDimensionPixelSize(R.dimen.suw_items_glif_text_divider_inset)); 72 73 assertEquals( 74 "Dimensions should satisfy constraint: ?attr/suwMarginSides + " 75 + "suw_items_icon_container_width = suw_items_glif_icon_divider_inset", 76 marginSides + res.getDimensionPixelSize(R.dimen.suw_items_icon_container_width), 77 res.getDimensionPixelSize(R.dimen.suw_items_glif_icon_divider_inset)); 78 } 79 80 @Test 81 public void testButtonMargin() { 82 assertButtonMargin(); 83 } 84 85 @Config(qualifiers = "sw600dp") 86 @Test 87 public void testButtonMarginSw600dp() { 88 assertButtonMargin(); 89 } 90 91 private void assertButtonMargin() { 92 final Resources res = mContext.getResources(); 93 94 final TypedArray a = mContext.obtainStyledAttributes(new int[]{R.attr.suwMarginSides}); 95 final int marginSides = a.getDimensionPixelSize(0, 0); 96 a.recycle(); 97 98 assertEquals( 99 "Dimensions should satisfy constraint: ?attr/suwMarginSides - " 100 + "4dp (internal padding of button) = suw_glif_button_margin_end", 101 marginSides - dp2Px(4), 102 res.getDimensionPixelSize(R.dimen.suw_glif_button_margin_end)); 103 104 assertEquals( 105 "Dimensions should satisfy constraint: ?attr/suwMarginSides - " 106 + "suw_glif_button_padding = suw_glif_button_margin_start", 107 marginSides - res.getDimensionPixelSize(R.dimen.suw_glif_button_padding), 108 res.getDimensionPixelSize(R.dimen.suw_glif_button_margin_start)); 109 } 110 111 private int dp2Px(float dp) { 112 DisplayMetrics displayMetrics = mContext.getResources().getDisplayMetrics(); 113 return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, displayMetrics); 114 } 115} 116