1fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam/*
2fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam * Copyright (C) 2015 The Android Open Source Project
3fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam *
4fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam * Licensed under the Apache License, Version 2.0 (the "License");
5fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam * you may not use this file except in compliance with the License.
6fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam * You may obtain a copy of the License at
7fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam *
8fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam *      http://www.apache.org/licenses/LICENSE-2.0
9fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam *
10fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam * Unless required by applicable law or agreed to in writing, software
11fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam * distributed under the License is distributed on an "AS IS" BASIS,
12fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam * See the License for the specific language governing permissions and
14fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam * limitations under the License.
15fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam */
16fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam
17fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lampackage com.android.setupwizardlib.test;
18fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam
19fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lamimport android.content.Context;
20ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lamimport android.content.res.ColorStateList;
21ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lamimport android.graphics.Color;
22d6fe3672c84594bf53882eb5ac5c26bbd6b714e7Maurice Lamimport android.os.Build;
23fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lamimport android.test.InstrumentationTestCase;
24fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lamimport android.test.suitebuilder.annotation.SmallTest;
25fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lamimport android.view.ContextThemeWrapper;
2699586481628659cd2982a0248bc0d09a6ec4590eMaurice Lamimport android.view.InflateException;
27fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lamimport android.view.LayoutInflater;
28fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lamimport android.view.View;
29ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lamimport android.widget.ProgressBar;
30fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lamimport android.widget.ScrollView;
31fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lamimport android.widget.TextView;
32fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam
33fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lamimport com.android.setupwizardlib.GlifLayout;
34fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam
35fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lampublic class GlifLayoutTest extends InstrumentationTestCase {
36fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam
37fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    private Context mContext;
38fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam
39fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    @Override
40fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    protected void setUp() throws Exception {
41fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        super.setUp();
42fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        mContext = new ContextThemeWrapper(getInstrumentation().getContext(),
43fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam                R.style.SuwThemeGlif_Light);
44fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    }
45fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam
46fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    @SmallTest
47fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    public void testDefaultTemplate() {
48fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        GlifLayout layout = new GlifLayout(mContext);
49fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        assertDefaultTemplateInflated(layout);
50fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    }
51fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam
52fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    @SmallTest
53fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    public void testSetHeaderText() {
54fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        GlifLayout layout = new GlifLayout(mContext);
55fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        TextView title = (TextView) layout.findViewById(R.id.suw_layout_title);
56fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        layout.setHeaderText("Abracadabra");
57fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        assertEquals("Header text should be \"Abracadabra\"", "Abracadabra", title.getText());
58fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    }
59fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam
60fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    @SmallTest
61fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    public void testAddView() {
62fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        GlifLayout layout = new GlifLayout(mContext);
63fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        TextView tv = new TextView(mContext);
64fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        tv.setId(R.id.test_view_id);
65fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        layout.addView(tv);
66fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        assertDefaultTemplateInflated(layout);
67fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        View view = layout.findViewById(R.id.test_view_id);
68fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        assertSame("The view added should be the same text view", tv, view);
69fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    }
70fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam
71fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    @SmallTest
72fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    public void testInflateFromXml() {
73fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        LayoutInflater inflater = LayoutInflater.from(mContext);
74fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        GlifLayout layout = (GlifLayout) inflater.inflate(R.layout.test_glif_layout, null);
75fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        assertDefaultTemplateInflated(layout);
76fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        View content = layout.findViewById(R.id.test_content);
77fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        assertTrue("@id/test_content should be a TextView", content instanceof TextView);
78fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    }
79fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam
80fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    @SmallTest
81fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    public void testGetScrollView() {
82fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        GlifLayout layout = new GlifLayout(mContext);
83fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        assertNotNull("Get scroll view should not be null with default template",
84fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam                layout.getScrollView());
85fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    }
86fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam
87ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lam    @SmallTest
88ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lam    public void testSetPrimaryColor() {
89ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lam        GlifLayout layout = new GlifLayout(mContext);
90d6fe3672c84594bf53882eb5ac5c26bbd6b714e7Maurice Lam        layout.setProgressBarShown(true);
91ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lam        layout.setPrimaryColor(ColorStateList.valueOf(Color.RED));
92ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lam        assertEquals("Primary color should be red",
93ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lam                ColorStateList.valueOf(Color.RED), layout.getPrimaryColor());
94ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lam
95d6fe3672c84594bf53882eb5ac5c26bbd6b714e7Maurice Lam        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
96d6fe3672c84594bf53882eb5ac5c26bbd6b714e7Maurice Lam            ProgressBar progressBar = (ProgressBar) layout.findViewById(R.id.suw_layout_progress);
97d6fe3672c84594bf53882eb5ac5c26bbd6b714e7Maurice Lam            assertEquals("Progress bar should be tinted red",
98d6fe3672c84594bf53882eb5ac5c26bbd6b714e7Maurice Lam                    ColorStateList.valueOf(Color.RED), progressBar.getIndeterminateTintList());
99d6fe3672c84594bf53882eb5ac5c26bbd6b714e7Maurice Lam        }
100ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lam    }
101ac40f3676511e1c7c09a948f5cb8481e5ea12d57Maurice Lam
10299586481628659cd2982a0248bc0d09a6ec4590eMaurice Lam    @SmallTest
10399586481628659cd2982a0248bc0d09a6ec4590eMaurice Lam    public void testWrongTheme() {
10499586481628659cd2982a0248bc0d09a6ec4590eMaurice Lam        // Test the error message when using the wrong theme
10599586481628659cd2982a0248bc0d09a6ec4590eMaurice Lam        mContext = new ContextThemeWrapper(getInstrumentation().getContext(),
10699586481628659cd2982a0248bc0d09a6ec4590eMaurice Lam                android.R.style.Theme);
10799586481628659cd2982a0248bc0d09a6ec4590eMaurice Lam        try {
10899586481628659cd2982a0248bc0d09a6ec4590eMaurice Lam            new GlifLayout(mContext);
10999586481628659cd2982a0248bc0d09a6ec4590eMaurice Lam            fail("Should have thrown InflateException");
11099586481628659cd2982a0248bc0d09a6ec4590eMaurice Lam        } catch (InflateException e) {
11199586481628659cd2982a0248bc0d09a6ec4590eMaurice Lam            assertEquals("Exception message should mention correct theme to use",
11299586481628659cd2982a0248bc0d09a6ec4590eMaurice Lam                    "Unable to inflate layout. Are you using @style/SuwThemeGlif "
11399586481628659cd2982a0248bc0d09a6ec4590eMaurice Lam                            + "(or its descendant) as your theme?", e.getMessage());
11499586481628659cd2982a0248bc0d09a6ec4590eMaurice Lam        }
11599586481628659cd2982a0248bc0d09a6ec4590eMaurice Lam    }
11699586481628659cd2982a0248bc0d09a6ec4590eMaurice Lam
117fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    private void assertDefaultTemplateInflated(GlifLayout layout) {
118fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        View title = layout.findViewById(R.id.suw_layout_title);
119fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        assertNotNull("@id/suw_layout_title should not be null", title);
120fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam
121fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        View icon = layout.findViewById(R.id.suw_layout_icon);
122fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        assertNotNull("@id/suw_layout_icon should not be null", icon);
123fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam
124fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        View scrollView = layout.findViewById(R.id.suw_scroll_view);
125fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam        assertTrue("@id/suw_scroll_view should be a ScrollView", scrollView instanceof ScrollView);
126fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam    }
127fce4cf6161b2a1644ad21034f0afe4087d659ab4Maurice Lam}
128