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