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