1d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam/*
2d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam * Copyright (C) 2017 The Android Open Source Project
3d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam *
4d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam * Licensed under the Apache License, Version 2.0 (the "License");
5d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam * you may not use this file except in compliance with the License.
6d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam * You may obtain a copy of the License at
7d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam *
8d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam *      http://www.apache.org/licenses/LICENSE-2.0
9d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam *
10d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam * Unless required by applicable law or agreed to in writing, software
11d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam * distributed under the License is distributed on an "AS IS" BASIS,
12d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam * See the License for the specific language governing permissions and
14d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam * limitations under the License.
15d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam */
16d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam
17d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lampackage com.android.setupwizardlib.template;
18d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam
19d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lamimport static org.junit.Assert.assertEquals;
20d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lamimport static org.junit.Assert.assertNull;
21d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lamimport static org.junit.Assert.assertSame;
2297860ddbfea1075cfd281102b93a3982c2b66537Maurice Lamimport static org.mockito.AdditionalAnswers.delegatesTo;
23d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lamimport static org.mockito.Matchers.eq;
24d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lamimport static org.mockito.Mockito.doReturn;
2597860ddbfea1075cfd281102b93a3982c2b66537Maurice Lamimport static org.mockito.Mockito.mock;
26d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lamimport static org.mockito.Mockito.spy;
27d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lamimport static org.mockito.Mockito.verifyNoMoreInteractions;
28d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam
29d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lamimport android.content.Context;
30d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lamimport android.graphics.Rect;
31d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lamimport android.graphics.drawable.Drawable;
32d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lamimport android.graphics.drawable.InsetDrawable;
33d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lamimport android.os.Build.VERSION;
34d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lamimport android.os.Build.VERSION_CODES;
35d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lamimport android.support.test.InstrumentationRegistry;
36d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lamimport android.support.test.filters.SmallTest;
37d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lamimport android.support.test.runner.AndroidJUnit4;
38d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lamimport android.view.View;
39d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lamimport android.widget.ListAdapter;
40d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lamimport android.widget.ListView;
41d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam
42d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lamimport com.android.setupwizardlib.TemplateLayout;
43d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lamimport com.android.setupwizardlib.test.R;
44d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam
45d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lamimport org.junit.Before;
46d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lamimport org.junit.Test;
47d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lamimport org.junit.runner.RunWith;
48d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lamimport org.mockito.Mock;
49d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lamimport org.mockito.MockitoAnnotations;
50d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam
51d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam@RunWith(AndroidJUnit4.class)
52d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam@SmallTest
53d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lampublic class ListMixinTest {
54d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam
55d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam    private Context mContext;
56d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam    private TemplateLayout mTemplateLayout;
57d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam
58d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam    private ListView mListView;
59d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam
60d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam    @Mock
61d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam    private ListAdapter mAdapter;
62d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam
63d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam    @Before
64d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam    public void setUp() {
65d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam        MockitoAnnotations.initMocks(this);
66d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam
67d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam        mContext = InstrumentationRegistry.getTargetContext();
68d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam        mTemplateLayout = spy(new TemplateLayout(mContext, R.layout.test_template,
69d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam                R.id.suw_layout_content));
70d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam
7197860ddbfea1075cfd281102b93a3982c2b66537Maurice Lam        mListView = mock(ListView.class, delegatesTo(new ListView(mContext)));
72d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam        doReturn(1).when(mAdapter).getViewTypeCount();
73d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam
74d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam        doReturn(mListView).when(mTemplateLayout)
75d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam                .findManagedViewById(eq(android.R.id.list));
76d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam        doReturn(true).when(mTemplateLayout).isLayoutDirectionResolved();
77d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam    }
78d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam
79d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam    @Test
80d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam    public void testGetListView() {
81d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam        ListMixin mixin = new ListMixin(mTemplateLayout, null, 0);
82d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam        assertSame(mListView, mixin.getListView());
83d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam    }
84d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam
85d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam    @Test
86d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam    public void testGetAdapter() {
87d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam        mListView.setAdapter(mAdapter);
88d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam
89d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam        ListMixin mixin = new ListMixin(mTemplateLayout, null, 0);
90d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam        assertSame(mAdapter, mixin.getAdapter());
91d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam    }
92d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam
93d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam    @Test
94d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam    public void testSetAdapter() {
95d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam        assertNull(mListView.getAdapter());
96d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam
97d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam        ListMixin mixin = new ListMixin(mTemplateLayout, null, 0);
98d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam        mixin.setAdapter(mAdapter);
99d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam
100d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam        assertSame(mAdapter, mListView.getAdapter());
101d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam    }
102d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam
103d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam    @Test
1046011b35deae30839cd454e0ec5866487e90860f5Maurice Lam    public void testDividerInsetLegacy() {
105d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam        ListMixin mixin = new ListMixin(mTemplateLayout, null, 0);
106d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam        mixin.setDividerInset(123);
107d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam
108d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam        assertEquals(123, mixin.getDividerInset());
109d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam
110d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam        final Drawable divider = mListView.getDivider();
111d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam        InsetDrawable insetDrawable = (InsetDrawable) divider;
112d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam        Rect rect = new Rect();
113d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam        insetDrawable.getPadding(rect);
114d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam
115d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam        assertEquals(new Rect(123, 0, 0, 0), rect);
116d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam    }
117d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam
118d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam    @Test
1196011b35deae30839cd454e0ec5866487e90860f5Maurice Lam    public void testDividerInsets() {
1206011b35deae30839cd454e0ec5866487e90860f5Maurice Lam        ListMixin mixin = new ListMixin(mTemplateLayout, null, 0);
1216011b35deae30839cd454e0ec5866487e90860f5Maurice Lam        mixin.setDividerInsets(123, 456);
1226011b35deae30839cd454e0ec5866487e90860f5Maurice Lam
1236011b35deae30839cd454e0ec5866487e90860f5Maurice Lam        assertEquals(123, mixin.getDividerInsetStart());
1246011b35deae30839cd454e0ec5866487e90860f5Maurice Lam        assertEquals(456, mixin.getDividerInsetEnd());
1256011b35deae30839cd454e0ec5866487e90860f5Maurice Lam
1266011b35deae30839cd454e0ec5866487e90860f5Maurice Lam        final Drawable divider = mListView.getDivider();
1276011b35deae30839cd454e0ec5866487e90860f5Maurice Lam        InsetDrawable insetDrawable = (InsetDrawable) divider;
1286011b35deae30839cd454e0ec5866487e90860f5Maurice Lam        Rect rect = new Rect();
1296011b35deae30839cd454e0ec5866487e90860f5Maurice Lam        insetDrawable.getPadding(rect);
1306011b35deae30839cd454e0ec5866487e90860f5Maurice Lam
1316011b35deae30839cd454e0ec5866487e90860f5Maurice Lam        assertEquals(new Rect(123, 0, 456, 0), rect);
1326011b35deae30839cd454e0ec5866487e90860f5Maurice Lam    }
1336011b35deae30839cd454e0ec5866487e90860f5Maurice Lam
1346011b35deae30839cd454e0ec5866487e90860f5Maurice Lam    @Test
1356011b35deae30839cd454e0ec5866487e90860f5Maurice Lam    public void testDividerInsetLegacyRtl() {
136d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam        if (VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN_MR1) {
137d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam            doReturn(View.LAYOUT_DIRECTION_RTL).when(mTemplateLayout).getLayoutDirection();
138d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam
139d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam            ListMixin mixin = new ListMixin(mTemplateLayout, null, 0);
140d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam            mixin.setDividerInset(123);
141d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam
142d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam            assertEquals(123, mixin.getDividerInset());
143d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam
144d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam            final Drawable divider = mListView.getDivider();
145d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam            InsetDrawable insetDrawable = (InsetDrawable) divider;
146d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam            Rect rect = new Rect();
147d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam            insetDrawable.getPadding(rect);
148d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam
149d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam            assertEquals(new Rect(0, 0, 123, 0), rect);
150d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam        }
151d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam        // else the test passes
152d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam    }
153d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam
154d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam    @Test
1556011b35deae30839cd454e0ec5866487e90860f5Maurice Lam    public void testDividerInsetsRtl() {
1566011b35deae30839cd454e0ec5866487e90860f5Maurice Lam        if (VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN_MR1) {
1576011b35deae30839cd454e0ec5866487e90860f5Maurice Lam            doReturn(View.LAYOUT_DIRECTION_RTL).when(mTemplateLayout).getLayoutDirection();
1586011b35deae30839cd454e0ec5866487e90860f5Maurice Lam
1596011b35deae30839cd454e0ec5866487e90860f5Maurice Lam            ListMixin mixin = new ListMixin(mTemplateLayout, null, 0);
1606011b35deae30839cd454e0ec5866487e90860f5Maurice Lam            mixin.setDividerInsets(123, 456);
1616011b35deae30839cd454e0ec5866487e90860f5Maurice Lam
1626011b35deae30839cd454e0ec5866487e90860f5Maurice Lam            assertEquals(123, mixin.getDividerInsetStart());
1636011b35deae30839cd454e0ec5866487e90860f5Maurice Lam            assertEquals(456, mixin.getDividerInsetEnd());
1646011b35deae30839cd454e0ec5866487e90860f5Maurice Lam
1656011b35deae30839cd454e0ec5866487e90860f5Maurice Lam            final Drawable divider = mListView.getDivider();
1666011b35deae30839cd454e0ec5866487e90860f5Maurice Lam            InsetDrawable insetDrawable = (InsetDrawable) divider;
1676011b35deae30839cd454e0ec5866487e90860f5Maurice Lam            Rect rect = new Rect();
1686011b35deae30839cd454e0ec5866487e90860f5Maurice Lam            insetDrawable.getPadding(rect);
1696011b35deae30839cd454e0ec5866487e90860f5Maurice Lam
1706011b35deae30839cd454e0ec5866487e90860f5Maurice Lam            assertEquals(new Rect(456, 0, 123, 0), rect);
1716011b35deae30839cd454e0ec5866487e90860f5Maurice Lam        }
1726011b35deae30839cd454e0ec5866487e90860f5Maurice Lam        // else the test passes
1736011b35deae30839cd454e0ec5866487e90860f5Maurice Lam    }
1746011b35deae30839cd454e0ec5866487e90860f5Maurice Lam
1756011b35deae30839cd454e0ec5866487e90860f5Maurice Lam    @Test
176d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam    public void testNoList() {
177d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam        doReturn(null).when(mTemplateLayout).findManagedViewById(eq(android.R.id.list));
178d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam
179d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam        ListMixin mixin = new ListMixin(mTemplateLayout, null, 0);
180d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam
181d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam        mixin.setAdapter(mAdapter);
182d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam        mixin.setDividerInset(123);
183d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam
184d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam        assertNull(mixin.getListView());
185d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam        assertNull(mixin.getAdapter());
186d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam        mixin.getDividerInset(); // Test that it doesn't crash. The return value is not significant.
187d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam        assertNull(mixin.getDivider());
188d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam
189d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam        verifyNoMoreInteractions(mListView);
190d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam    }
191d349adb3941c88ae27ec451acd19641ba03205dfMaurice Lam}
192