blob: 4e7c2d201cb520dda0b253fb25597e833ef4916b [file] [log] [blame]
/*
* 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.messaging.ui.mediapicker;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageButton;
import com.android.messaging.FakeFactory;
import com.android.messaging.R;
import com.android.messaging.datamodel.FakeDataModel;
import com.android.messaging.datamodel.binding.Binding;
import com.android.messaging.datamodel.binding.BindingBase;
import com.android.messaging.datamodel.data.DraftMessageData;
import com.android.messaging.datamodel.data.MediaPickerData;
import com.android.messaging.ui.FragmentTestCase;
import org.mockito.Matchers;
import org.mockito.Mock;
import org.mockito.Mockito;
public class MediaPickerTest extends FragmentTestCase<MediaPicker> {
@Mock protected MediaPickerData mMockMediaPickerData;
@Mock protected DraftMessageData mMockDraftMessageData;
protected FakeDataModel mFakeDataModel;
public MediaPickerTest() {
super(MediaPicker.class);
}
@Override
protected MediaPicker getFragment() {
if (mFragment == null) {
mFragment = new MediaPicker(getInstrumentation().getTargetContext());
}
return mFragment;
}
@Override
protected void setUp() throws Exception {
super.setUp();
final Context context = getInstrumentation().getTargetContext();
mFakeDataModel = new FakeDataModel(context)
.withMediaPickerData(mMockMediaPickerData);
FakeFactory.register(context)
.withDataModel(mFakeDataModel);
}
/**
* Helper method to initialize the MediaPicker and its data.
*/
private void initFragment(final int supportedMediaTypes, final Integer[] expectedLoaderIds,
final boolean filterTabBeforeAttach) {
Mockito.when(mMockMediaPickerData.isBound(Matchers.anyString()))
.thenReturn(true);
Mockito.when(mMockDraftMessageData.isBound(Matchers.anyString()))
.thenReturn(true);
final Binding<DraftMessageData> draftBinding = BindingBase.createBinding(this);
draftBinding.bind(mMockDraftMessageData);
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
final MediaPicker fragment = getFragment();
if (filterTabBeforeAttach) {
fragment.setSupportedMediaTypes(supportedMediaTypes);
getActivity().setFragment(fragment);
} else {
getActivity().setFragment(fragment);
fragment.setSupportedMediaTypes(supportedMediaTypes);
}
fragment.setDraftMessageDataModel(draftBinding);
Mockito.verify(mMockMediaPickerData,
Mockito.atLeastOnce()).init(
Matchers.eq(fragment.getLoaderManager()));
fragment.open(MediaPicker.MEDIA_TYPE_ALL, false);
}
});
getInstrumentation().waitForIdleSync();
}
public void testDefaultTabs() {
Mockito.when(mMockMediaPickerData.getSelectedChooserIndex()).thenReturn(0);
initFragment(MediaPicker.MEDIA_TYPE_ALL, new Integer[] {
MediaPickerData.GALLERY_MEDIA_LOADER },
false);
final MediaPicker mediaPicker = getFragment();
final View view = mediaPicker.getView();
assertNotNull(view);
final ViewGroup tabStrip = (ViewGroup) view.findViewById(R.id.mediapicker_tabstrip);
assertEquals(tabStrip.getChildCount(), 4);
for (int i = 0; i < tabStrip.getChildCount(); i++) {
final ImageButton tabButton = (ImageButton) tabStrip.getChildAt(i);
assertEquals(View.VISIBLE, tabButton.getVisibility());
assertEquals(i == 0, tabButton.isSelected());
}
}
public void testFilterTabsBeforeAttach() {
Mockito.when(mMockMediaPickerData.getSelectedChooserIndex()).thenReturn(0);
initFragment(MediaPicker.MEDIA_TYPE_IMAGE, new Integer[] {
MediaPickerData.GALLERY_MEDIA_LOADER },
true);
final MediaPicker mediaPicker = getFragment();
final View view = mediaPicker.getView();
assertNotNull(view);
final ViewGroup tabStrip = (ViewGroup) view.findViewById(R.id.mediapicker_tabstrip);
assertEquals(tabStrip.getChildCount(), 4);
for (int i = 0; i < tabStrip.getChildCount(); i++) {
final ImageButton tabButton = (ImageButton) tabStrip.getChildAt(i);
assertEquals(i == 0, tabButton.isSelected());
}
}
}