1b2ff57b17efb727c24b096ac7b1d7f8870bf1bdeMaurice Lam/* 2b2ff57b17efb727c24b096ac7b1d7f8870bf1bdeMaurice Lam * Copyright (C) 2017 The Android Open Source Project 3b2ff57b17efb727c24b096ac7b1d7f8870bf1bdeMaurice Lam * 4b2ff57b17efb727c24b096ac7b1d7f8870bf1bdeMaurice Lam * Licensed under the Apache License, Version 2.0 (the "License"); 5b2ff57b17efb727c24b096ac7b1d7f8870bf1bdeMaurice Lam * you may not use this file except in compliance with the License. 6b2ff57b17efb727c24b096ac7b1d7f8870bf1bdeMaurice Lam * You may obtain a copy of the License at 7b2ff57b17efb727c24b096ac7b1d7f8870bf1bdeMaurice Lam * 8b2ff57b17efb727c24b096ac7b1d7f8870bf1bdeMaurice Lam * http://www.apache.org/licenses/LICENSE-2.0 9b2ff57b17efb727c24b096ac7b1d7f8870bf1bdeMaurice Lam * 10b2ff57b17efb727c24b096ac7b1d7f8870bf1bdeMaurice Lam * Unless required by applicable law or agreed to in writing, software 11b2ff57b17efb727c24b096ac7b1d7f8870bf1bdeMaurice Lam * distributed under the License is distributed on an "AS IS" BASIS, 12b2ff57b17efb727c24b096ac7b1d7f8870bf1bdeMaurice Lam * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b2ff57b17efb727c24b096ac7b1d7f8870bf1bdeMaurice Lam * See the License for the specific language governing permissions and 14b2ff57b17efb727c24b096ac7b1d7f8870bf1bdeMaurice Lam * limitations under the License. 15b2ff57b17efb727c24b096ac7b1d7f8870bf1bdeMaurice Lam */ 16b2ff57b17efb727c24b096ac7b1d7f8870bf1bdeMaurice Lam 17b2ff57b17efb727c24b096ac7b1d7f8870bf1bdeMaurice Lampackage com.android.setupwizardlib.util; 18b2ff57b17efb727c24b096ac7b1d7f8870bf1bdeMaurice Lam 19b2ff57b17efb727c24b096ac7b1d7f8870bf1bdeMaurice Lamimport static org.junit.Assert.assertEquals; 20b2ff57b17efb727c24b096ac7b1d7f8870bf1bdeMaurice Lamimport static org.robolectric.RuntimeEnvironment.application; 21b2ff57b17efb727c24b096ac7b1d7f8870bf1bdeMaurice Lam 22b2ff57b17efb727c24b096ac7b1d7f8870bf1bdeMaurice Lamimport android.content.Context; 23b2ff57b17efb727c24b096ac7b1d7f8870bf1bdeMaurice Lamimport android.content.res.Resources; 24b2ff57b17efb727c24b096ac7b1d7f8870bf1bdeMaurice Lamimport android.content.res.TypedArray; 258721e6e37afdda2d3aba487334f96e270a57ad19Maurice Lamimport android.util.DisplayMetrics; 268721e6e37afdda2d3aba487334f96e270a57ad19Maurice Lamimport android.util.TypedValue; 27b2ff57b17efb727c24b096ac7b1d7f8870bf1bdeMaurice Lamimport android.view.ContextThemeWrapper; 28b2ff57b17efb727c24b096ac7b1d7f8870bf1bdeMaurice Lam 29b2ff57b17efb727c24b096ac7b1d7f8870bf1bdeMaurice Lamimport com.android.setupwizardlib.BuildConfig; 30b2ff57b17efb727c24b096ac7b1d7f8870bf1bdeMaurice Lamimport com.android.setupwizardlib.R; 31b2ff57b17efb727c24b096ac7b1d7f8870bf1bdeMaurice Lamimport com.android.setupwizardlib.robolectric.SuwLibRobolectricTestRunner; 32b2ff57b17efb727c24b096ac7b1d7f8870bf1bdeMaurice Lam 33b2ff57b17efb727c24b096ac7b1d7f8870bf1bdeMaurice Lamimport org.junit.Before; 34b2ff57b17efb727c24b096ac7b1d7f8870bf1bdeMaurice Lamimport org.junit.Test; 35b2ff57b17efb727c24b096ac7b1d7f8870bf1bdeMaurice Lamimport org.junit.runner.RunWith; 36b2ff57b17efb727c24b096ac7b1d7f8870bf1bdeMaurice Lamimport org.robolectric.annotation.Config; 37b2ff57b17efb727c24b096ac7b1d7f8870bf1bdeMaurice Lam 38b2ff57b17efb727c24b096ac7b1d7f8870bf1bdeMaurice Lam@RunWith(SuwLibRobolectricTestRunner.class) 39b2ff57b17efb727c24b096ac7b1d7f8870bf1bdeMaurice Lam@Config(constants = BuildConfig.class, sdk = Config.ALL_SDKS) 40b2ff57b17efb727c24b096ac7b1d7f8870bf1bdeMaurice Lampublic class GlifDimensionTest { 41b2ff57b17efb727c24b096ac7b1d7f8870bf1bdeMaurice Lam 42b2ff57b17efb727c24b096ac7b1d7f8870bf1bdeMaurice Lam private Context mContext; 43b2ff57b17efb727c24b096ac7b1d7f8870bf1bdeMaurice Lam 44b2ff57b17efb727c24b096ac7b1d7f8870bf1bdeMaurice Lam @Before 45b2ff57b17efb727c24b096ac7b1d7f8870bf1bdeMaurice Lam public void setUp() { 46b2ff57b17efb727c24b096ac7b1d7f8870bf1bdeMaurice Lam mContext = new ContextThemeWrapper(application, R.style.SuwThemeGlif_Light); 47b2ff57b17efb727c24b096ac7b1d7f8870bf1bdeMaurice Lam } 48b2ff57b17efb727c24b096ac7b1d7f8870bf1bdeMaurice Lam 49b2ff57b17efb727c24b096ac7b1d7f8870bf1bdeMaurice Lam @Test 50b2ff57b17efb727c24b096ac7b1d7f8870bf1bdeMaurice Lam public void testDividerInsetPhone() { 51b2ff57b17efb727c24b096ac7b1d7f8870bf1bdeMaurice Lam assertDividerInset(); 52b2ff57b17efb727c24b096ac7b1d7f8870bf1bdeMaurice Lam } 53b2ff57b17efb727c24b096ac7b1d7f8870bf1bdeMaurice Lam 54b2ff57b17efb727c24b096ac7b1d7f8870bf1bdeMaurice Lam @Config(qualifiers = "sw600dp") 55b2ff57b17efb727c24b096ac7b1d7f8870bf1bdeMaurice Lam @Test 56b2ff57b17efb727c24b096ac7b1d7f8870bf1bdeMaurice Lam public void testDividerInsetSw600dp() { 57b2ff57b17efb727c24b096ac7b1d7f8870bf1bdeMaurice Lam assertDividerInset(); 58b2ff57b17efb727c24b096ac7b1d7f8870bf1bdeMaurice Lam } 59b2ff57b17efb727c24b096ac7b1d7f8870bf1bdeMaurice Lam 60b2ff57b17efb727c24b096ac7b1d7f8870bf1bdeMaurice Lam private void assertDividerInset() { 61b2ff57b17efb727c24b096ac7b1d7f8870bf1bdeMaurice Lam final Resources res = mContext.getResources(); 62b2ff57b17efb727c24b096ac7b1d7f8870bf1bdeMaurice Lam 63b2ff57b17efb727c24b096ac7b1d7f8870bf1bdeMaurice Lam final TypedArray a = mContext.obtainStyledAttributes(new int[]{R.attr.suwMarginSides}); 64b2ff57b17efb727c24b096ac7b1d7f8870bf1bdeMaurice Lam final int marginSides = a.getDimensionPixelSize(0, 0); 65b2ff57b17efb727c24b096ac7b1d7f8870bf1bdeMaurice Lam a.recycle(); 66b2ff57b17efb727c24b096ac7b1d7f8870bf1bdeMaurice Lam 67b2ff57b17efb727c24b096ac7b1d7f8870bf1bdeMaurice Lam assertEquals( 68b2ff57b17efb727c24b096ac7b1d7f8870bf1bdeMaurice Lam "Dimensions should satisfy constraint: " 69b2ff57b17efb727c24b096ac7b1d7f8870bf1bdeMaurice Lam + "?attr/suwMarginSides = suw_items_glif_text_divider_inset", 70b2ff57b17efb727c24b096ac7b1d7f8870bf1bdeMaurice Lam marginSides, 71b2ff57b17efb727c24b096ac7b1d7f8870bf1bdeMaurice Lam res.getDimensionPixelSize(R.dimen.suw_items_glif_text_divider_inset)); 72b2ff57b17efb727c24b096ac7b1d7f8870bf1bdeMaurice Lam 73b2ff57b17efb727c24b096ac7b1d7f8870bf1bdeMaurice Lam assertEquals( 74b2ff57b17efb727c24b096ac7b1d7f8870bf1bdeMaurice Lam "Dimensions should satisfy constraint: ?attr/suwMarginSides + " 75b2ff57b17efb727c24b096ac7b1d7f8870bf1bdeMaurice Lam + "suw_items_icon_container_width = suw_items_glif_icon_divider_inset", 76b2ff57b17efb727c24b096ac7b1d7f8870bf1bdeMaurice Lam marginSides + res.getDimensionPixelSize(R.dimen.suw_items_icon_container_width), 77b2ff57b17efb727c24b096ac7b1d7f8870bf1bdeMaurice Lam res.getDimensionPixelSize(R.dimen.suw_items_glif_icon_divider_inset)); 78b2ff57b17efb727c24b096ac7b1d7f8870bf1bdeMaurice Lam } 798721e6e37afdda2d3aba487334f96e270a57ad19Maurice Lam 808721e6e37afdda2d3aba487334f96e270a57ad19Maurice Lam @Test 818721e6e37afdda2d3aba487334f96e270a57ad19Maurice Lam public void testButtonMargin() { 828721e6e37afdda2d3aba487334f96e270a57ad19Maurice Lam assertButtonMargin(); 838721e6e37afdda2d3aba487334f96e270a57ad19Maurice Lam } 848721e6e37afdda2d3aba487334f96e270a57ad19Maurice Lam 858721e6e37afdda2d3aba487334f96e270a57ad19Maurice Lam @Config(qualifiers = "sw600dp") 868721e6e37afdda2d3aba487334f96e270a57ad19Maurice Lam @Test 878721e6e37afdda2d3aba487334f96e270a57ad19Maurice Lam public void testButtonMarginSw600dp() { 888721e6e37afdda2d3aba487334f96e270a57ad19Maurice Lam assertButtonMargin(); 898721e6e37afdda2d3aba487334f96e270a57ad19Maurice Lam } 908721e6e37afdda2d3aba487334f96e270a57ad19Maurice Lam 918721e6e37afdda2d3aba487334f96e270a57ad19Maurice Lam private void assertButtonMargin() { 928721e6e37afdda2d3aba487334f96e270a57ad19Maurice Lam final Resources res = mContext.getResources(); 938721e6e37afdda2d3aba487334f96e270a57ad19Maurice Lam 948721e6e37afdda2d3aba487334f96e270a57ad19Maurice Lam final TypedArray a = mContext.obtainStyledAttributes(new int[]{R.attr.suwMarginSides}); 958721e6e37afdda2d3aba487334f96e270a57ad19Maurice Lam final int marginSides = a.getDimensionPixelSize(0, 0); 968721e6e37afdda2d3aba487334f96e270a57ad19Maurice Lam a.recycle(); 978721e6e37afdda2d3aba487334f96e270a57ad19Maurice Lam 988721e6e37afdda2d3aba487334f96e270a57ad19Maurice Lam assertEquals( 998721e6e37afdda2d3aba487334f96e270a57ad19Maurice Lam "Dimensions should satisfy constraint: ?attr/suwMarginSides - " 1008721e6e37afdda2d3aba487334f96e270a57ad19Maurice Lam + "4dp (internal padding of button) = suw_glif_button_margin_end", 1018721e6e37afdda2d3aba487334f96e270a57ad19Maurice Lam marginSides - dp2Px(4), 1028721e6e37afdda2d3aba487334f96e270a57ad19Maurice Lam res.getDimensionPixelSize(R.dimen.suw_glif_button_margin_end)); 1038721e6e37afdda2d3aba487334f96e270a57ad19Maurice Lam 1048721e6e37afdda2d3aba487334f96e270a57ad19Maurice Lam assertEquals( 1058721e6e37afdda2d3aba487334f96e270a57ad19Maurice Lam "Dimensions should satisfy constraint: ?attr/suwMarginSides - " 1068721e6e37afdda2d3aba487334f96e270a57ad19Maurice Lam + "suw_glif_button_padding = suw_glif_button_margin_start", 1078721e6e37afdda2d3aba487334f96e270a57ad19Maurice Lam marginSides - res.getDimensionPixelSize(R.dimen.suw_glif_button_padding), 1088721e6e37afdda2d3aba487334f96e270a57ad19Maurice Lam res.getDimensionPixelSize(R.dimen.suw_glif_button_margin_start)); 1098721e6e37afdda2d3aba487334f96e270a57ad19Maurice Lam } 1108721e6e37afdda2d3aba487334f96e270a57ad19Maurice Lam 1118721e6e37afdda2d3aba487334f96e270a57ad19Maurice Lam private int dp2Px(float dp) { 1128721e6e37afdda2d3aba487334f96e270a57ad19Maurice Lam DisplayMetrics displayMetrics = mContext.getResources().getDisplayMetrics(); 1138721e6e37afdda2d3aba487334f96e270a57ad19Maurice Lam return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, displayMetrics); 1148721e6e37afdda2d3aba487334f96e270a57ad19Maurice Lam } 115b2ff57b17efb727c24b096ac7b1d7f8870bf1bdeMaurice Lam} 116