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