| /* |
| * Copyright (C) 2015 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package com.android.setupwizardlib.test; |
| |
| import static org.mockito.Matchers.eq; |
| import static org.mockito.Mockito.verify; |
| |
| import android.support.test.InstrumentationRegistry; |
| import android.support.test.filters.SmallTest; |
| import android.support.test.runner.AndroidJUnit4; |
| import android.support.v7.widget.RecyclerView; |
| import android.view.View; |
| import android.view.ViewGroup; |
| |
| import com.android.setupwizardlib.view.HeaderRecyclerView.HeaderAdapter; |
| |
| import org.junit.Before; |
| import org.junit.Test; |
| import org.junit.runner.RunWith; |
| import org.mockito.Mock; |
| import org.mockito.MockitoAnnotations; |
| |
| /** |
| * Test for {@link com.android.setupwizardlib.view.HeaderRecyclerView} |
| */ |
| @RunWith(AndroidJUnit4.class) |
| @SmallTest |
| public class HeaderRecyclerViewTest { |
| |
| private TestAdapter mWrappedAdapter; |
| private HeaderAdapter mHeaderAdapter; |
| |
| @Mock |
| private RecyclerView.AdapterDataObserver mObserver; |
| |
| @Before |
| public void setUp() { |
| MockitoAnnotations.initMocks(this); |
| |
| mWrappedAdapter = new TestAdapter(); |
| |
| mHeaderAdapter = new HeaderAdapter(mWrappedAdapter); |
| mHeaderAdapter.registerAdapterDataObserver(mObserver); |
| } |
| |
| /** |
| * Test that notifyDataSetChanged gets propagated by HeaderRecyclerView's adapter. |
| */ |
| @Test |
| public void testNotifyChanged() { |
| mWrappedAdapter.notifyDataSetChanged(); |
| |
| verify(mObserver).onChanged(); |
| } |
| |
| /** |
| * Test that notifyItemChanged gets propagated by HeaderRecyclerView's adapter. |
| */ |
| @Test |
| public void testNotifyItemChangedNoHeader() { |
| mWrappedAdapter.notifyItemChanged(12); |
| |
| verify(mObserver).onItemRangeChanged(eq(12), eq(1), eq(null)); |
| } |
| |
| /** |
| * Test that notifyItemChanged gets propagated by HeaderRecyclerView's adapter and adds 1 to the |
| * position for the extra header items. |
| */ |
| @Test |
| public void testNotifyItemChangedWithHeader() { |
| mHeaderAdapter.setHeader(new View(InstrumentationRegistry.getTargetContext())); |
| mWrappedAdapter.notifyItemChanged(12); |
| |
| verify(mObserver).onItemRangeChanged(eq(13), eq(1), eq(null)); |
| } |
| |
| /** |
| * Test that notifyItemInserted gets propagated by HeaderRecyclerView's adapter. |
| */ |
| @Test |
| public void testNotifyItemInsertedNoHeader() { |
| mWrappedAdapter.notifyItemInserted(12); |
| |
| verify(mObserver).onItemRangeInserted(eq(12), eq(1)); |
| } |
| |
| /** |
| * Test that notifyItemInserted gets propagated by HeaderRecyclerView's adapter and adds 1 to |
| * the position for the extra header item. |
| */ |
| @Test |
| public void testNotifyItemInsertedWithHeader() { |
| mHeaderAdapter.setHeader(new View(InstrumentationRegistry.getTargetContext())); |
| mWrappedAdapter.notifyItemInserted(12); |
| |
| verify(mObserver).onItemRangeInserted(eq(13), eq(1)); |
| } |
| |
| /** |
| * Test that notifyItemRemoved gets propagated by HeaderRecyclerView's adapter. |
| */ |
| @Test |
| public void testNotifyItemRemovedNoHeader() { |
| mWrappedAdapter.notifyItemRemoved(12); |
| |
| verify(mObserver).onItemRangeRemoved(eq(12), eq(1)); |
| } |
| |
| /** |
| * Test that notifyItemRemoved gets propagated by HeaderRecyclerView's adapter and adds 1 to |
| * the position for the extra header item. |
| */ |
| @Test |
| public void testNotifyItemRemovedWithHeader() { |
| mHeaderAdapter.setHeader(new View(InstrumentationRegistry.getTargetContext())); |
| mWrappedAdapter.notifyItemRemoved(12); |
| |
| verify(mObserver).onItemRangeRemoved(eq(13), eq(1)); |
| } |
| |
| /** |
| * Test that notifyItemMoved gets propagated by HeaderRecyclerView's adapter. |
| */ |
| @Test |
| public void testNotifyItemMovedNoHeader() { |
| mWrappedAdapter.notifyItemMoved(12, 18); |
| |
| verify(mObserver).onItemRangeMoved(eq(12), eq(18), eq(1)); |
| } |
| |
| /** |
| * Test that notifyItemMoved gets propagated by HeaderRecyclerView's adapter and adds 1 to |
| * the position for the extra header item. |
| */ |
| @Test |
| public void testNotifyItemMovedWithHeader() { |
| mHeaderAdapter.setHeader(new View(InstrumentationRegistry.getTargetContext())); |
| mWrappedAdapter.notifyItemMoved(12, 18); |
| |
| verify(mObserver).onItemRangeMoved(eq(13), eq(19), eq(1)); |
| } |
| |
| /** |
| * Test adapter to be wrapped inside {@link HeaderAdapter} to to send item change notifications. |
| */ |
| public static class TestAdapter extends RecyclerView.Adapter { |
| |
| @Override |
| public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { |
| return null; |
| } |
| |
| @Override |
| public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int i) { |
| } |
| |
| @Override |
| public int getItemCount() { |
| return 0; |
| } |
| } |
| } |