148da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor/* 248da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor * Copyright (C) 2008 The Android Open Source Project 348da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor * 448da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor * Licensed under the Apache License, Version 2.0 (the "License"); 548da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor * you may not use this file except in compliance with the License. 648da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor * You may obtain a copy of the License at 748da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor * 848da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor * http://www.apache.org/licenses/LICENSE-2.0 948da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor * 1048da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor * Unless required by applicable law or agreed to in writing, software 1148da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor * distributed under the License is distributed on an "AS IS" BASIS, 1248da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1348da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor * See the License for the specific language governing permissions and 1448da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor * limitations under the License. 1548da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor */ 1648da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor 1732a1dcecca6ed0881431555a4218d0282814326cWink Savillepackage com.android.mms.ui; 1832a1dcecca6ed0881431555a4218d0282814326cWink Saville 1948da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylorimport com.android.mms.R; 204a082ceeba3674fe9f08cd344689443ed70dcf31Xia Wangimport com.android.mms.ui.ComposeMessageActivity; 214a082ceeba3674fe9f08cd344689443ed70dcf31Xia Wangimport com.android.mms.ui.RecipientsEditor; 22e2986af492c30ad92c96bcb7adf8092d4d948565Tom Taylorimport com.android.mms.data.ContactList; 23e2986af492c30ad92c96bcb7adf8092d4d948565Tom Taylorimport com.android.mms.data.Conversation; 24e2986af492c30ad92c96bcb7adf8092d4d948565Tom Taylorimport com.android.mms.data.WorkingMessage; 2548da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylorimport com.android.mms.ui.MessageListAdapter.ColumnsMap; 2648da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor 2748da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylorimport android.content.Context; 2848da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylorimport android.database.Cursor; 2948da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylorimport android.test.ActivityInstrumentationTestCase2; 3048da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylorimport android.test.suitebuilder.annotation.MediumTest; 3132a1dcecca6ed0881431555a4218d0282814326cWink Savilleimport android.test.suitebuilder.annotation.SmallTest; 3232a1dcecca6ed0881431555a4218d0282814326cWink Savilleimport android.test.suitebuilder.annotation.LargeTest; 33e2986af492c30ad92c96bcb7adf8092d4d948565Tom Taylorimport android.util.Log; 3448da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylorimport android.view.View; 354a082ceeba3674fe9f08cd344689443ed70dcf31Xia Wangimport android.view.ViewStub; 3648da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylorimport android.widget.EditText; 3748da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylorimport android.widget.TextView; 3832a1dcecca6ed0881431555a4218d0282814326cWink Savilleimport android.widget.Button; 394a082ceeba3674fe9f08cd344689443ed70dcf31Xia Wangimport android.widget.ImageButton; 4048da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor 4148da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor/** 4232a1dcecca6ed0881431555a4218d0282814326cWink Saville * Various instrumentation tests for ComposeMessageActivity. 4348da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor */ 4432a1dcecca6ed0881431555a4218d0282814326cWink Savillepublic class ComposeMessageActivityTests 454a082ceeba3674fe9f08cd344689443ed70dcf31Xia Wang extends ActivityInstrumentationTestCase2<ComposeMessageActivity> { 4648da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor 474a082ceeba3674fe9f08cd344689443ed70dcf31Xia Wang private static final String TAG = "ComposeMessageActivityTests"; 4848da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor private Context mContext; 494a082ceeba3674fe9f08cd344689443ed70dcf31Xia Wang private RecipientsEditor mRecipientsEditor; 5048da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor private EditText mTextEditor; 5148da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor private MessageListView mMsgListView; 5248da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor private MessageListAdapter mMsgListAdapter; 5348da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor private ColumnsMap mColumnsMap; 544a082ceeba3674fe9f08cd344689443ed70dcf31Xia Wang private ComposeMessageActivity mActivity; 5548da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor 5648da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor public ComposeMessageActivityTests() { 574a082ceeba3674fe9f08cd344689443ed70dcf31Xia Wang super(ComposeMessageActivity.class); 5848da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor } 5948da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor 6048da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor @Override 6148da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor protected void setUp() throws Exception { 6248da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor super.setUp(); 6348da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor mContext = getInstrumentation().getTargetContext(); 6448da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor 654a082ceeba3674fe9f08cd344689443ed70dcf31Xia Wang mActivity = getActivity(); 664a082ceeba3674fe9f08cd344689443ed70dcf31Xia Wang 674a082ceeba3674fe9f08cd344689443ed70dcf31Xia Wang ViewStub stub = (ViewStub)mActivity.findViewById(R.id.recipients_editor_stub); 684a082ceeba3674fe9f08cd344689443ed70dcf31Xia Wang if (stub != null) { 694a082ceeba3674fe9f08cd344689443ed70dcf31Xia Wang View stubView = stub.inflate(); 704a082ceeba3674fe9f08cd344689443ed70dcf31Xia Wang mRecipientsEditor = (RecipientsEditor) stubView.findViewById(R.id.recipients_editor); 714a082ceeba3674fe9f08cd344689443ed70dcf31Xia Wang } else { 724a082ceeba3674fe9f08cd344689443ed70dcf31Xia Wang mRecipientsEditor = (RecipientsEditor)mActivity.findViewById(R.id.recipients_editor); 734a082ceeba3674fe9f08cd344689443ed70dcf31Xia Wang mRecipientsEditor.setVisibility(View.VISIBLE); 744a082ceeba3674fe9f08cd344689443ed70dcf31Xia Wang } 754a082ceeba3674fe9f08cd344689443ed70dcf31Xia Wang mTextEditor = (EditText)mActivity.findViewById(R.id.embedded_text_editor); 764a082ceeba3674fe9f08cd344689443ed70dcf31Xia Wang mMsgListView = (MessageListView)mActivity.findViewById(R.id.history); 7748da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor mMsgListAdapter = (MessageListAdapter)mMsgListView.getAdapter(); 7848da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor } 7948da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor 8048da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor class BoxChecker { 8148da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor private int[] mExpectedBoxStates; 8248da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor private boolean mDone; 8348da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor private String mError; 8467b794480aaad0e1958df2988671b78ea03b76e1Tom Taylor 8548da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor public BoxChecker(int[] expectedBoxStates) { 8648da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor mExpectedBoxStates = expectedBoxStates; 8748da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor mDone = false; 8848da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor mError = null; 8967b794480aaad0e1958df2988671b78ea03b76e1Tom Taylor mMsgListAdapter.setOnDataSetChangedListener(mDataSetChangedListener); 9048da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor } 9167b794480aaad0e1958df2988671b78ea03b76e1Tom Taylor 9248da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor private final MessageListAdapter.OnDataSetChangedListener 9348da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor mDataSetChangedListener = new MessageListAdapter.OnDataSetChangedListener() { 9448da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor public void onDataSetChanged(MessageListAdapter adapter) { 9548da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor int count = adapter.getCount(); 9648da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor if (count > 0) { 9748da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor MessageItem item = getMessageItem(count - 1); // get most recent 9867b794480aaad0e1958df2988671b78ea03b76e1Tom Taylor 9948da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor int boxId = item.getBoxId(); 10067b794480aaad0e1958df2988671b78ea03b76e1Tom Taylor 10148da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor // is boxId a valid box? 10248da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor boolean found = false; 10348da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor boolean isLast = false; 10448da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor for (int i = 0; i < mExpectedBoxStates.length; i++) { 10548da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor if (mExpectedBoxStates[i] == boxId) { 10648da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor found = true; 10767b794480aaad0e1958df2988671b78ea03b76e1Tom Taylor isLast = i == mExpectedBoxStates.length - 1; 10848da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor break; 10948da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor } 11048da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor } 11148da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor if (!found) { 11248da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor setError("Unexpected box state"); 11348da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor return; 11448da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor } 11548da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor if (isLast) { 11648da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor mDone = true; 11748da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor } 11848da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor } 11948da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor } 12067b794480aaad0e1958df2988671b78ea03b76e1Tom Taylor 12167b794480aaad0e1958df2988671b78ea03b76e1Tom Taylor public void onContentChanged(MessageListAdapter adapter) { 12267b794480aaad0e1958df2988671b78ea03b76e1Tom Taylor } 12348da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor }; 12467b794480aaad0e1958df2988671b78ea03b76e1Tom Taylor 12548da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor private void setError(String error) { 12648da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor mError = error; 12748da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor mDone = true; 12848da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor } 12967b794480aaad0e1958df2988671b78ea03b76e1Tom Taylor 13048da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor public String getError() { 13148da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor return mError; 13248da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor } 13367b794480aaad0e1958df2988671b78ea03b76e1Tom Taylor 13448da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor public boolean isDone() { 13548da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor return mDone; 13648da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor } 13767b794480aaad0e1958df2988671b78ea03b76e1Tom Taylor 13848da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor private MessageItem getMessageItem(int index) { 13948da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor Cursor cursor = (Cursor)mMsgListAdapter.getItem(index); 14048da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor 14148da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor mColumnsMap = new MessageListAdapter.ColumnsMap(cursor); 14248da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor String type = cursor.getString(mColumnsMap.mColumnMsgType); 14348da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor long msgId = cursor.getLong(mColumnsMap.mColumnMsgId); 14467b794480aaad0e1958df2988671b78ea03b76e1Tom Taylor 14548da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor MessageItem msgItem = mMsgListAdapter.getCachedMessageItem(type, msgId, cursor); 14667b794480aaad0e1958df2988671b78ea03b76e1Tom Taylor 14748da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor return msgItem; 14848da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor } 14948da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor} 15067b794480aaad0e1958df2988671b78ea03b76e1Tom Taylor 15148da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor /** 15248da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor * Tests that a simple SMS message is successfully sent. 15348da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor */ 15448da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor @LargeTest 15548da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor public void testSendMessage() throws Throwable { 15648da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor runTestOnUiThread(new Runnable() { 15748da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor public void run() { 1584a082ceeba3674fe9f08cd344689443ed70dcf31Xia Wang checkFocused(mRecipientsEditor); 1594a082ceeba3674fe9f08cd344689443ed70dcf31Xia Wang mRecipientsEditor.setText("2012130903"); 16048da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor mTextEditor.setText("This is a test message"); 1614a082ceeba3674fe9f08cd344689443ed70dcf31Xia Wang ImageButton send = (ImageButton)mActivity.findViewById(R.id.send_button_sms); 16248da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor send.performClick(); 16348da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor } 16448da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor }); 16567b794480aaad0e1958df2988671b78ea03b76e1Tom Taylor 16648da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor // Now poll while watching the adapter to see if the message got sent 16748da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor BoxChecker boxChecker = new BoxChecker(new int[] {4, 2}); // outbox, sent 16848da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor long now = System.currentTimeMillis(); 16948da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor boolean success = true; 17048da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor while (!boxChecker.isDone()) { 17167b794480aaad0e1958df2988671b78ea03b76e1Tom Taylor Thread.sleep(1000); 17248da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor if (System.currentTimeMillis() - now > 10000) { 17348da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor // Give up after ten seconds 17448da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor success = false; 17548da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor break; 17648da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor } 17748da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor } 17848da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor assertTrue(success && boxChecker.getError() == null); 17948da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor } 18067b794480aaad0e1958df2988671b78ea03b76e1Tom Taylor 18148da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor /** 18248da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor * Helper method to verify which field has the focus 18348da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor * @param focused The view that should be focused (all others should not have focus) 18448da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor */ 18532a1dcecca6ed0881431555a4218d0282814326cWink Saville @SmallTest 18648da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor private void checkFocused(View focused) { 1874a082ceeba3674fe9f08cd344689443ed70dcf31Xia Wang assertEquals(focused == mRecipientsEditor, mRecipientsEditor.isFocused()); 18848da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor assertEquals(focused == mTextEditor, mTextEditor.isFocused()); 18948da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor } 19048da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor 191e2986af492c30ad92c96bcb7adf8092d4d948565Tom Taylor // Here's how to execute just this one test: 192e2986af492c30ad92c96bcb7adf8092d4d948565Tom Taylor // runtest -m testCreateManyThreads mms -c com.android.mms.ui.ComposeMessageActivityTests 193e2986af492c30ad92c96bcb7adf8092d4d948565Tom Taylor // This test intentionally uses the UI functions to create the threads rather than adding 194e2986af492c30ad92c96bcb7adf8092d4d948565Tom Taylor // the threads directly to the mms provider's threads table. 195e2986af492c30ad92c96bcb7adf8092d4d948565Tom Taylor @LargeTest 196e2986af492c30ad92c96bcb7adf8092d4d948565Tom Taylor public void testCreateManyThreads() { 197b51ea8318ca2e4019b666d938e3e7efdf6e643b3Tom Taylor for (int i = 0; i < 10; i++) { 198e2986af492c30ad92c96bcb7adf8092d4d948565Tom Taylor String phoneNum = String.format("424-123-%04d", i); 199e2986af492c30ad92c96bcb7adf8092d4d948565Tom Taylor ContactList contactList = ContactList.getByNumbers(phoneNum, false, false); 2004a082ceeba3674fe9f08cd344689443ed70dcf31Xia Wang Conversation conv = Conversation.get(mActivity, contactList, false); 201e2986af492c30ad92c96bcb7adf8092d4d948565Tom Taylor 20208712ce9d30d4f28476436b218f2b76c7bdfb89cTom Taylor WorkingMessage workingMsg = WorkingMessage.loadDraft(mActivity, conv, null); 203e2986af492c30ad92c96bcb7adf8092d4d948565Tom Taylor workingMsg.setConversation(conv); 204e2986af492c30ad92c96bcb7adf8092d4d948565Tom Taylor workingMsg.setText("This is test #" + i + " thread id: " + conv.getThreadId()); 205e2986af492c30ad92c96bcb7adf8092d4d948565Tom Taylor 206e2986af492c30ad92c96bcb7adf8092d4d948565Tom Taylor// Log.i(TAG, "[testCreateManyThreads] workingMsg: "); 207e2986af492c30ad92c96bcb7adf8092d4d948565Tom Taylor// workingMsg.dump(); 208e2986af492c30ad92c96bcb7adf8092d4d948565Tom Taylor 209ef3eb49cde359d36f9536dbaffe5c16f3639c1f2Tom Taylor workingMsg.saveDraft(false); 210e2986af492c30ad92c96bcb7adf8092d4d948565Tom Taylor } 211e2986af492c30ad92c96bcb7adf8092d4d948565Tom Taylor } 21248da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor} 213