Home | History | Annotate | Download | only in template
      1 /*
      2  * Copyright (C) 2017 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package com.android.setupwizardlib.template;
     18 
     19 import static org.junit.Assert.assertEquals;
     20 import static org.junit.Assert.assertNull;
     21 import static org.junit.Assert.assertSame;
     22 import static org.mockito.AdditionalAnswers.delegatesTo;
     23 import static org.mockito.Mockito.doReturn;
     24 import static org.mockito.Mockito.mock;
     25 import static org.mockito.Mockito.spy;
     26 
     27 import android.content.Context;
     28 import android.graphics.Rect;
     29 import android.graphics.drawable.Drawable;
     30 import android.graphics.drawable.InsetDrawable;
     31 import android.os.Build.VERSION;
     32 import android.os.Build.VERSION_CODES;
     33 import android.support.test.InstrumentationRegistry;
     34 import android.support.test.filters.SmallTest;
     35 import android.support.test.runner.AndroidJUnit4;
     36 import android.support.v7.widget.RecyclerView;
     37 import android.support.v7.widget.RecyclerView.Adapter;
     38 import android.view.View;
     39 
     40 import com.android.setupwizardlib.TemplateLayout;
     41 import com.android.setupwizardlib.test.R;
     42 
     43 import org.junit.Before;
     44 import org.junit.Test;
     45 import org.junit.runner.RunWith;
     46 import org.mockito.Mock;
     47 import org.mockito.MockitoAnnotations;
     48 
     49 @RunWith(AndroidJUnit4.class)
     50 @SmallTest
     51 public class RecyclerMixinTest {
     52 
     53     private Context mContext;
     54     private TemplateLayout mTemplateLayout;
     55 
     56     private RecyclerView mRecyclerView;
     57 
     58     @Mock
     59     private Adapter mAdapter;
     60 
     61     @Before
     62     public void setUp() {
     63         MockitoAnnotations.initMocks(this);
     64 
     65         mContext = InstrumentationRegistry.getTargetContext();
     66         mTemplateLayout = spy(new TemplateLayout(mContext, R.layout.test_template,
     67                 R.id.suw_layout_content));
     68 
     69         mRecyclerView = mock(RecyclerView.class, delegatesTo(new RecyclerView(mContext)));
     70 
     71         doReturn(true).when(mTemplateLayout).isLayoutDirectionResolved();
     72     }
     73 
     74     @Test
     75     public void testGetRecyclerView() {
     76         RecyclerMixin mixin = new RecyclerMixin(mTemplateLayout, mRecyclerView);
     77         assertSame(mRecyclerView, mixin.getRecyclerView());
     78     }
     79 
     80     @Test
     81     public void testGetAdapter() {
     82         mRecyclerView.setAdapter(mAdapter);
     83 
     84         RecyclerMixin mixin = new RecyclerMixin(mTemplateLayout, mRecyclerView);
     85         assertSame(mAdapter, mixin.getAdapter());
     86     }
     87 
     88     @Test
     89     public void testSetAdapter() {
     90         assertNull(mRecyclerView.getAdapter());
     91 
     92         RecyclerMixin mixin = new RecyclerMixin(mTemplateLayout, mRecyclerView);
     93         mixin.setAdapter(mAdapter);
     94 
     95         assertSame(mAdapter, mRecyclerView.getAdapter());
     96     }
     97 
     98     @Test
     99     public void testDividerLegacyInset() {
    100         RecyclerMixin mixin = new RecyclerMixin(mTemplateLayout, mRecyclerView);
    101         mixin.setDividerInset(123);
    102 
    103         assertEquals(123, mixin.getDividerInset());
    104 
    105         final Drawable divider = mixin.getDivider();
    106         InsetDrawable insetDrawable = (InsetDrawable) divider;
    107         Rect rect = new Rect();
    108         insetDrawable.getPadding(rect);
    109 
    110         assertEquals(new Rect(123, 0, 0, 0), rect);
    111     }
    112 
    113     @Test
    114     public void testDividerInsets() {
    115         RecyclerMixin mixin = new RecyclerMixin(mTemplateLayout, mRecyclerView);
    116         mixin.setDividerInsets(123, 456);
    117 
    118         assertEquals(123, mixin.getDividerInsetStart());
    119         assertEquals(456, mixin.getDividerInsetEnd());
    120 
    121         final Drawable divider = mixin.getDivider();
    122         InsetDrawable insetDrawable = (InsetDrawable) divider;
    123         Rect rect = new Rect();
    124         insetDrawable.getPadding(rect);
    125 
    126         assertEquals(new Rect(123, 0, 456, 0), rect);
    127     }
    128 
    129     @Test
    130     public void testDividerInsetLegacyRtl() {
    131         if (VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN_MR1) {
    132             doReturn(View.LAYOUT_DIRECTION_RTL).when(mTemplateLayout).getLayoutDirection();
    133 
    134             RecyclerMixin mixin = new RecyclerMixin(mTemplateLayout, mRecyclerView);
    135             mixin.setDividerInset(123);
    136 
    137             assertEquals(123, mixin.getDividerInset());
    138 
    139             final Drawable divider = mixin.getDivider();
    140             InsetDrawable insetDrawable = (InsetDrawable) divider;
    141             Rect rect = new Rect();
    142             insetDrawable.getPadding(rect);
    143 
    144             assertEquals(new Rect(0, 0, 123, 0), rect);
    145         }
    146         // else the test passes
    147     }
    148 
    149     @Test
    150     public void testDividerInsetsRtl() {
    151         if (VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN_MR1) {
    152             doReturn(View.LAYOUT_DIRECTION_RTL).when(mTemplateLayout).getLayoutDirection();
    153 
    154             RecyclerMixin mixin = new RecyclerMixin(mTemplateLayout, mRecyclerView);
    155             mixin.setDividerInsets(123, 456);
    156 
    157             assertEquals(123, mixin.getDividerInsetStart());
    158             assertEquals(456, mixin.getDividerInsetEnd());
    159 
    160             final Drawable divider = mixin.getDivider();
    161             InsetDrawable insetDrawable = (InsetDrawable) divider;
    162             Rect rect = new Rect();
    163             insetDrawable.getPadding(rect);
    164 
    165             assertEquals(new Rect(456, 0, 123, 0), rect);
    166         }
    167         // else the test passes
    168     }
    169 }
    170