Home | History | Annotate | Download | only in conversationlist
      1 /*
      2  * Copyright (C) 2015 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.messaging.ui.conversationlist;
     18 
     19 import android.content.Context;
     20 import android.database.Cursor;
     21 import android.support.v7.widget.RecyclerView;
     22 import android.test.suitebuilder.annotation.LargeTest;
     23 import android.view.View;
     24 import android.widget.ImageView;
     25 import android.widget.ListView;
     26 
     27 import com.android.messaging.FakeFactory;
     28 import com.android.messaging.R;
     29 import com.android.messaging.datamodel.FakeDataModel;
     30 import com.android.messaging.datamodel.data.ConversationListData;
     31 import com.android.messaging.datamodel.data.TestDataFactory;
     32 import com.android.messaging.ui.FragmentTestCase;
     33 import com.android.messaging.ui.UIIntents;
     34 import com.android.messaging.ui.conversationlist.ConversationListFragment;
     35 import com.android.messaging.ui.conversationlist.ConversationListFragment.ConversationListFragmentHost;
     36 
     37 import org.mockito.Matchers;
     38 import org.mockito.Mock;
     39 import org.mockito.Mockito;
     40 
     41 
     42 /**
     43  * Unit tests for {@link ConversationListFragment}.
     44  */
     45 @LargeTest
     46 public class ConversationListFragmentTest
     47     extends FragmentTestCase<ConversationListFragment> {
     48 
     49     @Mock protected ConversationListData mMockConversationListData;
     50     @Mock protected ConversationListFragmentHost mMockConversationHostListHost;
     51     @Mock protected UIIntents mMockUIIntents;
     52     protected FakeDataModel mFakeDataModel;
     53 
     54     public ConversationListFragmentTest() {
     55         super(ConversationListFragment.class);
     56     }
     57 
     58     @Override
     59     protected void setUp() throws Exception {
     60         super.setUp();
     61 
     62         final Context context = getInstrumentation().getTargetContext();
     63         mFakeDataModel = new FakeDataModel(context)
     64             .withConversationListData(mMockConversationListData);
     65         FakeFactory.register(context)
     66                 .withDataModel(mFakeDataModel)
     67                 .withUIIntents(mMockUIIntents);
     68     }
     69 
     70     /**
     71      * Helper that will do the 'binding' of ConversationListFragmentTest with ConversationListData
     72      * and leave fragment in 'ready' state.
     73      * @param cursor
     74      */
     75     private void loadWith(final Cursor cursor) {
     76         Mockito.when(mMockConversationListData.isBound(Matchers.anyString()))
     77             .thenReturn(true);
     78 
     79         final ConversationListFragment fragment = getFragment();
     80         getActivity().runOnUiThread(new Runnable() {
     81             @Override
     82             public void run() {
     83                 fragment.setHost(mMockConversationHostListHost);
     84                 getActivity().setFragment(fragment);
     85                 Mockito.verify(mMockConversationListData).init(fragment.getLoaderManager(),
     86                         fragment.mListBinding);
     87                 fragment.onConversationListCursorUpdated(mMockConversationListData, cursor);
     88             }
     89         });
     90         getInstrumentation().waitForIdleSync();
     91     }
     92 
     93     /**
     94      * Verifies that list view gets correctly populated given a cursor.
     95      */
     96     public void testLoadListView() {
     97         final Cursor cursor = TestDataFactory.getConversationListCursor();
     98         loadWith(cursor);
     99         final RecyclerView listView =
    100                 (RecyclerView) getFragment().getView().findViewById(android.R.id.list);
    101         //assertEquals(cursor.getCount(), listView.getCount());
    102         assertEquals(cursor.getCount(), listView.getChildCount());
    103     }
    104 
    105     /**
    106      * Verifies that 'empty list' promo is rendered with an empty cursor.
    107      */
    108     public void testEmptyView() {
    109         loadWith(TestDataFactory.getEmptyConversationListCursor());
    110         final RecyclerView listView =
    111                 (RecyclerView) getFragment().getView().findViewById(android.R.id.list);
    112         final View emptyMessageView =
    113                 getFragment().getView().findViewById(R.id.no_conversations_view);
    114         assertEquals(View.VISIBLE, emptyMessageView.getVisibility());
    115         assertEquals(0, listView.getChildCount());
    116     }
    117 
    118     /**
    119      * Verifies that the button to start a new conversation works.
    120      */
    121     public void testStartNewConversation() {
    122         final Cursor cursor = TestDataFactory.getConversationListCursor();
    123         loadWith(cursor);
    124         final ImageView startNewConversationButton = (ImageView)
    125                 getFragment().getView().findViewById(R.id.start_new_conversation_button);
    126 
    127         clickButton(startNewConversationButton);
    128         Mockito.verify(mMockConversationHostListHost).onCreateConversationClick();
    129     }
    130 }
    131