17514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam/* 27514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam * Copyright (C) 2017 The Android Open Source Project 37514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam * 47514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam * Licensed under the Apache License, Version 2.0 (the "License"); 57514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam * you may not use this file except in compliance with the License. 67514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam * You may obtain a copy of the License at 77514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam * 87514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam * http://www.apache.org/licenses/LICENSE-2.0 97514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam * 107514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam * Unless required by applicable law or agreed to in writing, software 117514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam * distributed under the License is distributed on an "AS IS" BASIS, 127514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 137514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam * See the License for the specific language governing permissions and 147514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam * limitations under the License. 157514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam */ 167514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam 177514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lampackage com.android.setupwizardlib.template; 187514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam 1997d3a11d5e6a2bf9ec3f50de7b77ef94333110d3Maurice Lamimport static com.google.common.truth.Truth.assertThat; 2097d3a11d5e6a2bf9ec3f50de7b77ef94333110d3Maurice Lam 217514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lamimport static org.junit.Assert.assertEquals; 227514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lamimport static org.junit.Assert.assertSame; 237514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lamimport static org.mockito.Matchers.eq; 247514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lamimport static org.mockito.Mockito.doReturn; 257514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lamimport static org.mockito.Mockito.spy; 267514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam 277514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lamimport android.content.Context; 287514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lamimport android.content.res.XmlResourceParser; 297514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lamimport android.graphics.Color; 307514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lamimport android.graphics.drawable.BitmapDrawable; 317514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lamimport android.graphics.drawable.ColorDrawable; 3297d3a11d5e6a2bf9ec3f50de7b77ef94333110d3Maurice Lamimport android.graphics.drawable.Drawable; 337514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lamimport android.support.test.InstrumentationRegistry; 347514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lamimport android.support.test.filters.SmallTest; 357514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lamimport android.support.test.runner.AndroidJUnit4; 367514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lamimport android.util.Xml; 3758195c5316855122593366bd867ed51a91bd5c11Maurice Lamimport android.view.View; 387514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lamimport android.widget.ImageView; 397514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam 407514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lamimport com.android.setupwizardlib.TemplateLayout; 417514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lamimport com.android.setupwizardlib.test.R; 427514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam 437514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lamimport org.junit.Before; 447514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lamimport org.junit.Test; 457514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lamimport org.junit.runner.RunWith; 467514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lamimport org.xmlpull.v1.XmlPullParserException; 477514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam 487514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lamimport java.io.IOException; 497514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam 507514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam@RunWith(AndroidJUnit4.class) 517514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam@SmallTest 527514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lampublic class IconMixinTest { 537514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam 547514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam private Context mContext; 557514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam private TemplateLayout mTemplateLayout; 567514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam private ImageView mIconView; 577514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam 587514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam @Before 597514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam public void setUp() { 607514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam mContext = InstrumentationRegistry.getContext(); 617514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam mTemplateLayout = spy(new TemplateLayout(mContext, R.layout.test_template, 627514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam R.id.suw_layout_content)); 637514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam 647514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam mIconView = new ImageView(mContext); 657514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam doReturn(mIconView).when(mTemplateLayout).findManagedViewById(eq(R.id.suw_layout_icon)); 667514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam } 677514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam 687514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam @Test 697514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam public void testGetIconView() { 707514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam IconMixin mixin = new IconMixin(mTemplateLayout, null, 0); 717514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam assertSame(mIconView, mixin.getView()); 727514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam } 737514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam 747514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam @Test 757514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam public void testSetIcon() { 767514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam final ColorDrawable drawable = new ColorDrawable(Color.CYAN); 777514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam IconMixin mixin = new IconMixin(mTemplateLayout, null, 0); 787514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam mixin.setIcon(drawable); 797514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam 807514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam assertSame(drawable, mIconView.getDrawable()); 8158195c5316855122593366bd867ed51a91bd5c11Maurice Lam assertEquals(View.VISIBLE, mIconView.getVisibility()); 8258195c5316855122593366bd867ed51a91bd5c11Maurice Lam } 8358195c5316855122593366bd867ed51a91bd5c11Maurice Lam 8458195c5316855122593366bd867ed51a91bd5c11Maurice Lam @Test 8597d3a11d5e6a2bf9ec3f50de7b77ef94333110d3Maurice Lam public void setIcon_resourceId_shouldSetIcon() { 8697d3a11d5e6a2bf9ec3f50de7b77ef94333110d3Maurice Lam int icon = android.R.drawable.ic_menu_add; 8797d3a11d5e6a2bf9ec3f50de7b77ef94333110d3Maurice Lam IconMixin mixin = new IconMixin(mTemplateLayout, null, 0); 8897d3a11d5e6a2bf9ec3f50de7b77ef94333110d3Maurice Lam mixin.setIcon(icon); 8997d3a11d5e6a2bf9ec3f50de7b77ef94333110d3Maurice Lam 9097d3a11d5e6a2bf9ec3f50de7b77ef94333110d3Maurice Lam Drawable drawable = mIconView.getDrawable(); 9197d3a11d5e6a2bf9ec3f50de7b77ef94333110d3Maurice Lam assertThat(drawable).isInstanceOf(BitmapDrawable.class); 9297d3a11d5e6a2bf9ec3f50de7b77ef94333110d3Maurice Lam assertEquals(View.VISIBLE, mIconView.getVisibility()); 9397d3a11d5e6a2bf9ec3f50de7b77ef94333110d3Maurice Lam } 9497d3a11d5e6a2bf9ec3f50de7b77ef94333110d3Maurice Lam 9597d3a11d5e6a2bf9ec3f50de7b77ef94333110d3Maurice Lam @Test 9658195c5316855122593366bd867ed51a91bd5c11Maurice Lam public void setIcon_shouldSetVisibilityToGone_whenIconIsNull() { 9758195c5316855122593366bd867ed51a91bd5c11Maurice Lam IconMixin mixin = new IconMixin(mTemplateLayout, null, 0); 9858195c5316855122593366bd867ed51a91bd5c11Maurice Lam mixin.setIcon(null); 9958195c5316855122593366bd867ed51a91bd5c11Maurice Lam 10058195c5316855122593366bd867ed51a91bd5c11Maurice Lam assertEquals(View.GONE, mIconView.getVisibility()); 1017514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam } 1027514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam 1037514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam @Test 1047514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam public void testGetIcon() { 1057514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam final ColorDrawable drawable = new ColorDrawable(Color.BLUE); 1067514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam mIconView.setImageDrawable(drawable); 1077514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam 1087514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam IconMixin mixin = new IconMixin(mTemplateLayout, null, 0); 1097514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam assertSame(drawable, mixin.getIcon()); 1107514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam } 1117514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam 1127514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam @SuppressWarnings("ResourceType") // Needed to create attribute set from layout XML. 1137514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam @Test 1147514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam public void testSetIconFromXml() throws IOException, XmlPullParserException { 1157514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam final XmlResourceParser parser = 1167514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam mContext.getResources().getXml(R.layout.test_mixin_attributes); 1177514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam while (!TemplateLayout.class.getName().equals(parser.getName())) { 1187514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam parser.next(); 1197514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam } 1207514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam new IconMixin(mTemplateLayout, Xml.asAttributeSet(parser), 0); 1217514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam 1227514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam // Check that the bitmaps themselves are equal because BitmapDrawable does not implement 1237514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam // equals() 1247514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam final BitmapDrawable expected = (BitmapDrawable) mContext.getResources() 1257514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam .getDrawable(android.R.drawable.ic_menu_add); 1267514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam final BitmapDrawable actual = (BitmapDrawable) mIconView.getDrawable(); 1277514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam assertEquals(expected.getBitmap(), actual.getBitmap()); 12858195c5316855122593366bd867ed51a91bd5c11Maurice Lam assertEquals(View.VISIBLE, mIconView.getVisibility()); 1297514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam } 1303514ad526af3d95f61383ec374ea4c384ba9b540Maurice Lam 1313514ad526af3d95f61383ec374ea4c384ba9b540Maurice Lam @Test 1323514ad526af3d95f61383ec374ea4c384ba9b540Maurice Lam public void setContentDescription_shouldSetContentDescriptionOnIconView() { 1333514ad526af3d95f61383ec374ea4c384ba9b540Maurice Lam IconMixin mixin = new IconMixin(mTemplateLayout, null, 0); 1343514ad526af3d95f61383ec374ea4c384ba9b540Maurice Lam mixin.setContentDescription("hello world"); 1353514ad526af3d95f61383ec374ea4c384ba9b540Maurice Lam assertThat(mIconView.getContentDescription()).isEqualTo("hello world"); 1363514ad526af3d95f61383ec374ea4c384ba9b540Maurice Lam } 1373514ad526af3d95f61383ec374ea4c384ba9b540Maurice Lam 1383514ad526af3d95f61383ec374ea4c384ba9b540Maurice Lam @Test 1393514ad526af3d95f61383ec374ea4c384ba9b540Maurice Lam public void getContentDescription_shouldReturnContentDescriptionFromView() { 1403514ad526af3d95f61383ec374ea4c384ba9b540Maurice Lam IconMixin mixin = new IconMixin(mTemplateLayout, null, 0); 1413514ad526af3d95f61383ec374ea4c384ba9b540Maurice Lam mIconView.setContentDescription("aloha"); 1423514ad526af3d95f61383ec374ea4c384ba9b540Maurice Lam assertThat(mixin.getContentDescription()).isEqualTo("aloha"); 1433514ad526af3d95f61383ec374ea4c384ba9b540Maurice Lam } 1447514f1cee29b3feb4822ce16945c1c312057d24fMaurice Lam} 145