Bug: 32912773 Test: make checkbuild Change-Id: I252a7e8ae8473f0ce7e177f691aac7dfeb67e7d8
185 lines
8.0 KiB
Java
185 lines
8.0 KiB
Java
/*
|
|
* 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.conversation;
|
|
|
|
import android.content.Context;
|
|
import android.media.MediaPlayer;
|
|
import android.test.suitebuilder.annotation.MediumTest;
|
|
import android.view.View;
|
|
import android.widget.EditText;
|
|
|
|
import com.android.messaging.FakeFactory;
|
|
import com.android.messaging.R;
|
|
import com.android.messaging.datamodel.DataModel;
|
|
import com.android.messaging.datamodel.binding.Binding;
|
|
import com.android.messaging.datamodel.binding.BindingBase;
|
|
import com.android.messaging.datamodel.data.ConversationData;
|
|
import com.android.messaging.datamodel.data.DraftMessageData;
|
|
import com.android.messaging.datamodel.data.DraftMessageData.CheckDraftForSendTask;
|
|
import com.android.messaging.datamodel.data.DraftMessageData.CheckDraftTaskCallback;
|
|
import com.android.messaging.datamodel.data.MessageData;
|
|
import com.android.messaging.datamodel.data.MessagePartData;
|
|
import com.android.messaging.ui.ViewTest;
|
|
import com.android.messaging.ui.conversation.ComposeMessageView.IComposeMessageViewHost;
|
|
import com.android.messaging.util.BugleGservices;
|
|
import com.android.messaging.util.FakeMediaUtil;
|
|
import com.android.messaging.util.ImeUtil;
|
|
|
|
import org.mockito.Matchers;
|
|
import org.mockito.Mock;
|
|
import org.mockito.Mockito;
|
|
import org.mockito.compat.ArgumentMatcher;
|
|
import org.mockito.invocation.InvocationOnMock;
|
|
import org.mockito.stubbing.Answer;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.Collections;
|
|
|
|
@MediumTest
|
|
public class ComposeMessageViewTest extends ViewTest<ComposeMessageView> {
|
|
private Context mContext;
|
|
|
|
@Mock protected DataModel mockDataModel;
|
|
@Mock protected DraftMessageData mockDraftMessageData;
|
|
@Mock protected BugleGservices mockBugleGservices;
|
|
@Mock protected ImeUtil mockImeUtil;
|
|
@Mock protected IComposeMessageViewHost mockIComposeMessageViewHost;
|
|
@Mock protected MediaPlayer mockMediaPlayer;
|
|
@Mock protected ConversationInputManager mockInputManager;
|
|
@Mock protected ConversationData mockConversationData;
|
|
|
|
Binding<ConversationData> mConversationBinding;
|
|
|
|
@Override
|
|
protected void setUp() throws Exception {
|
|
super.setUp();
|
|
mContext = getInstrumentation().getTargetContext();
|
|
FakeFactory.register(mContext)
|
|
.withDataModel(mockDataModel)
|
|
.withBugleGservices(mockBugleGservices)
|
|
.withMediaUtil(new FakeMediaUtil(mockMediaPlayer));
|
|
|
|
Mockito.doReturn(true).when(mockConversationData).isBound(Mockito.anyString());
|
|
mConversationBinding = BindingBase.createBinding(this);
|
|
mConversationBinding.bind(mockConversationData);
|
|
}
|
|
|
|
@Override
|
|
protected ComposeMessageView getView() {
|
|
final ComposeMessageView view = super.getView();
|
|
view.setInputManager(mockInputManager);
|
|
view.setConversationDataModel(BindingBase.createBindingReference(mConversationBinding));
|
|
return view;
|
|
}
|
|
|
|
@Override
|
|
protected int getLayoutIdForView() {
|
|
return R.layout.compose_message_view;
|
|
}
|
|
|
|
public void testSend() {
|
|
Mockito.when(mockDraftMessageData.getReadOnlyAttachments())
|
|
.thenReturn(Collections.unmodifiableList(new ArrayList<MessagePartData>()));
|
|
Mockito.when(mockDraftMessageData.getIsDefaultSmsApp()).thenReturn(true);
|
|
Mockito.when(mockIComposeMessageViewHost.isReadyForAction()).thenReturn(true);
|
|
final ComposeMessageView view = getView();
|
|
|
|
final MessageData message = MessageData.createDraftSmsMessage("fake_id", "just_a_self_id",
|
|
"Sample Message");
|
|
|
|
Mockito.when(mockDraftMessageData.isBound(Matchers.anyString()))
|
|
.thenReturn(true);
|
|
Mockito.when(mockDraftMessageData.getMessageText()).thenReturn(message.getMessageText());
|
|
Mockito.when(mockDraftMessageData.prepareMessageForSending(
|
|
Matchers.<BindingBase<DraftMessageData>>any()))
|
|
.thenReturn(message);
|
|
Mockito.when(mockDraftMessageData.hasPendingAttachments()).thenReturn(false);
|
|
Mockito.doAnswer(new Answer() {
|
|
@Override
|
|
public Object answer(InvocationOnMock invocation) throws Throwable {
|
|
// Synchronously pass the draft check and callback.
|
|
((CheckDraftTaskCallback)invocation.getArguments()[2]).onDraftChecked(
|
|
mockDraftMessageData, CheckDraftForSendTask.RESULT_PASSED);
|
|
return null;
|
|
}
|
|
}).when(mockDraftMessageData).checkDraftForAction(Mockito.anyBoolean(), Mockito.anyInt(),
|
|
Mockito.<CheckDraftTaskCallback>any(),
|
|
Mockito.<Binding<DraftMessageData>>any());
|
|
|
|
view.bind(mockDraftMessageData, mockIComposeMessageViewHost);
|
|
|
|
final EditText composeEditText = (EditText) view.findViewById(R.id.compose_message_text);
|
|
final View sendButton = view.findViewById(R.id.send_message_button);
|
|
|
|
view.requestDraftMessage(false);
|
|
|
|
Mockito.verify(mockDraftMessageData).loadFromStorage(Matchers.any(BindingBase.class),
|
|
Matchers.any(MessageData.class), Mockito.eq(false));
|
|
|
|
view.onDraftChanged(mockDraftMessageData, DraftMessageData.ALL_CHANGED);
|
|
|
|
assertEquals(message.getMessageText(), composeEditText.getText().toString());
|
|
|
|
sendButton.performClick();
|
|
Mockito.verify(mockIComposeMessageViewHost).sendMessage(
|
|
Mockito.argThat(new ArgumentMatcher<MessageData>() {
|
|
@Override
|
|
public boolean matchesObject(final Object o) {
|
|
assertEquals(message.getMessageText(), ((MessageData) o).getMessageText());
|
|
return true;
|
|
}
|
|
}));
|
|
}
|
|
|
|
public void testNotDefaultSms() {
|
|
Mockito.when(mockDraftMessageData.getReadOnlyAttachments())
|
|
.thenReturn(Collections.unmodifiableList(new ArrayList<MessagePartData>()));
|
|
Mockito.when(mockDraftMessageData.getIsDefaultSmsApp()).thenReturn(false);
|
|
Mockito.when(mockIComposeMessageViewHost.isReadyForAction()).thenReturn(false);
|
|
final ComposeMessageView view = getView();
|
|
|
|
final MessageData message = MessageData.createDraftSmsMessage("fake_id", "just_a_self_id",
|
|
"Sample Message");
|
|
|
|
Mockito.when(mockDraftMessageData.isBound(Matchers.anyString()))
|
|
.thenReturn(true);
|
|
Mockito.when(mockDraftMessageData.getMessageText()).thenReturn(message.getMessageText());
|
|
Mockito.when(mockDraftMessageData.prepareMessageForSending(
|
|
Matchers.<BindingBase<DraftMessageData>>any()))
|
|
.thenReturn(message);
|
|
Mockito.when(mockDraftMessageData.hasPendingAttachments()).thenReturn(false);
|
|
|
|
view.bind(mockDraftMessageData, mockIComposeMessageViewHost);
|
|
|
|
final EditText composeEditText = (EditText) view.findViewById(R.id.compose_message_text);
|
|
final View sendButton = view.findViewById(R.id.send_message_button);
|
|
|
|
view.requestDraftMessage(false);
|
|
|
|
Mockito.verify(mockDraftMessageData).loadFromStorage(Matchers.any(BindingBase.class),
|
|
Matchers.any(MessageData.class), Mockito.eq(false));
|
|
|
|
view.onDraftChanged(mockDraftMessageData, DraftMessageData.ALL_CHANGED);
|
|
|
|
assertEquals(message.getMessageText(), composeEditText.getText().toString());
|
|
|
|
sendButton.performClick();
|
|
Mockito.verify(mockIComposeMessageViewHost).warnOfMissingActionConditions(
|
|
Matchers.any(Boolean.class), Matchers.any(Runnable.class));
|
|
}
|
|
}
|