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