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 package com.android.messaging.ui.mediapicker; 17 18 import android.content.Context; 19 import android.provider.MediaStore.Images.Media; 20 import android.view.View; 21 import android.widget.CheckBox; 22 23 import com.android.messaging.FakeFactory; 24 import com.android.messaging.R; 25 import com.android.messaging.datamodel.FakeCursor; 26 import com.android.messaging.datamodel.FakeDataModel; 27 import com.android.messaging.datamodel.data.GalleryGridItemData; 28 import com.android.messaging.datamodel.data.TestDataFactory; 29 import com.android.messaging.ui.AsyncImageView; 30 import com.android.messaging.ui.ViewTest; 31 import com.android.messaging.util.UriUtil; 32 33 import org.mockito.Matchers; 34 import org.mockito.Mock; 35 import org.mockito.Mockito; 36 37 public class GalleryGridItemViewTest extends ViewTest<GalleryGridItemView> { 38 39 @Mock GalleryGridItemView.HostInterface mockHost; 40 41 @Override 42 protected void setUp() throws Exception { 43 super.setUp(); 44 final Context context = getInstrumentation().getTargetContext(); 45 FakeFactory.register(context) 46 .withDataModel(new FakeDataModel(context)); 47 } 48 49 protected void verifyClickedItem(final View view, final GalleryGridItemData data) { 50 Mockito.verify(mockHost).onItemClicked(view, data, false /* longClick */); 51 } 52 53 protected void verifyContent( 54 final GalleryGridItemView view, 55 final String imageUrl, 56 final boolean showCheckbox, 57 final boolean isSelected) { 58 final AsyncImageView imageView = (AsyncImageView) view.findViewById(R.id.image); 59 final CheckBox checkBox = (CheckBox) view.findViewById(R.id.checkbox); 60 61 assertNotNull(imageView); 62 assertTrue(imageView.mImageRequestBinding.isBound()); 63 assertTrue(imageView.mImageRequestBinding.getData().getKey().startsWith(imageUrl)); 64 assertNotNull(checkBox); 65 if (showCheckbox) { 66 assertEquals(View.VISIBLE, checkBox.getVisibility()); 67 assertEquals(isSelected, checkBox.isChecked()); 68 } else { 69 assertNotSame(View.VISIBLE, checkBox.getVisibility()); 70 } 71 } 72 73 public void testBind() { 74 Mockito.when(mockHost.isMultiSelectEnabled()).thenReturn(false); 75 Mockito.when(mockHost.isItemSelected(Matchers.<GalleryGridItemData>any())) 76 .thenReturn(false); 77 final GalleryGridItemView view = getView(); 78 final FakeCursor cursor = TestDataFactory.getGalleryGridCursor(); 79 cursor.moveToFirst(); 80 final String path = (String) cursor.getAt(Media.DATA, 0); 81 view.bind(cursor, mockHost); 82 verifyContent(view, UriUtil.getUriForResourceFile(path).toString(), 83 false, false); 84 } 85 86 public void testBindMultiSelectUnSelected() { 87 Mockito.when(mockHost.isMultiSelectEnabled()).thenReturn(true); 88 Mockito.when(mockHost.isItemSelected(Matchers.<GalleryGridItemData>any())) 89 .thenReturn(false); 90 final GalleryGridItemView view = getView(); 91 final FakeCursor cursor = TestDataFactory.getGalleryGridCursor(); 92 cursor.moveToFirst(); 93 final String path = (String) cursor.getAt(Media.DATA, 0); 94 view.bind(cursor, mockHost); 95 verifyContent(view, UriUtil.getUriForResourceFile(path).toString(), 96 true, false); 97 } 98 99 public void testBindMultiSelectSelected() { 100 Mockito.when(mockHost.isMultiSelectEnabled()).thenReturn(true); 101 Mockito.when(mockHost.isItemSelected(Matchers.<GalleryGridItemData>any())) 102 .thenReturn(true); 103 final GalleryGridItemView view = getView(); 104 final FakeCursor cursor = TestDataFactory.getGalleryGridCursor(); 105 cursor.moveToFirst(); 106 final String path = (String) cursor.getAt(Media.DATA, 0); 107 view.bind(cursor, mockHost); 108 verifyContent(view, UriUtil.getUriForResourceFile(path).toString(), 109 true, true); 110 } 111 112 public void testClick() { 113 Mockito.when(mockHost.isMultiSelectEnabled()).thenReturn(false); 114 Mockito.when(mockHost.isItemSelected(Matchers.<GalleryGridItemData>any())) 115 .thenReturn(false); 116 final GalleryGridItemView view = getView(); 117 final FakeCursor cursor = TestDataFactory.getGalleryGridCursor(); 118 cursor.moveToFirst(); 119 view.bind(cursor, mockHost); 120 view.performClick(); 121 verifyClickedItem(view, view.mData); 122 } 123 124 public void testBindTwice() { 125 Mockito.when(mockHost.isMultiSelectEnabled()).thenReturn(true); 126 Mockito.when(mockHost.isItemSelected(Matchers.<GalleryGridItemData>any())) 127 .thenReturn(false); 128 final GalleryGridItemView view = getView(); 129 final FakeCursor cursor = TestDataFactory.getGalleryGridCursor(); 130 131 cursor.moveToFirst(); 132 view.bind(cursor, mockHost); 133 134 cursor.moveToNext(); 135 final String path = (String) cursor.getAt(Media.DATA, 1); 136 view.bind(cursor, mockHost); 137 verifyContent(view, UriUtil.getUriForResourceFile(path).toString(), 138 true, false); 139 } 140 141 @Override 142 protected int getLayoutIdForView() { 143 return R.layout.gallery_grid_item_view; 144 } 145 } 146