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