ComposeMessageActivityTests.java revision 48da875f1beea835c6771977e5bd8a9aa3d4bc10
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 1748da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylorimport com.android.mms.R; 1848da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylorimport com.android.mms.ui.ComposeMessageActivity; 1948da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylorimport com.android.mms.ui.MessageItem; 2048da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylorimport com.android.mms.ui.MessageListAdapter; 2148da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylorimport com.android.mms.ui.MessageListView; 2248da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylorimport com.android.mms.ui.RecipientsEditor; 2348da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylorimport com.android.mms.ui.MessageListAdapter.ColumnsMap; 2448da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor 2548da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylorimport android.content.ComponentName; 2648da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylorimport android.content.Context; 2748da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylorimport android.content.Intent; 2848da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylorimport android.database.Cursor; 2948da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylorimport android.graphics.drawable.Drawable; 3048da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylorimport android.net.Uri; 3148da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylorimport android.test.ActivityInstrumentationTestCase2; 3248da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylorimport android.test.suitebuilder.annotation.LargeTest; 3348da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylorimport android.test.suitebuilder.annotation.MediumTest; 3448da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylorimport android.test.suitebuilder.annotation.Suppress; 3548da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylorimport android.util.Log; 3648da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylorimport android.view.MenuItem; 3748da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylorimport android.view.SubMenu; 3848da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylorimport android.view.View; 3948da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylorimport android.view.ContextMenu.ContextMenuInfo; 4048da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylorimport android.webkit.WebView; 4148da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylorimport android.widget.Button; 4248da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylorimport android.widget.EditText; 4348da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylorimport android.widget.TextView; 4448da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor 4548da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor/** 4648da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor * Various instrumentation tests for ComposeMessageActivity. 4748da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor * 4848da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor */ 4948da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor@MediumTest 5048da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylorpublic class ComposeMessageActivityTests 5148da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylorextends ActivityInstrumentationTestCase2<ComposeMessageActivity> { 5248da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor 5348da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor private Context mContext; 5448da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor 5548da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor private TextView mRecipientsView; 5648da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor private EditText mTextEditor; 5748da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor private MessageListView mMsgListView; 5848da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor private MessageListAdapter mMsgListAdapter; 5948da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor private ColumnsMap mColumnsMap; 6048da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor 6148da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor public ComposeMessageActivityTests() { 6248da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor super("com.android.mms", ComposeMessageActivity.class); 6348da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor } 6448da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor 6548da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor @Override 6648da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor protected void setUp() throws Exception { 6748da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor super.setUp(); 6848da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor mContext = getInstrumentation().getTargetContext(); 6948da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor 7048da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor ComposeMessageActivity a = getActivity(); 7148da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor mRecipientsView = (TextView)a.findViewById(R.id.recipients_editor); 7248da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor mTextEditor = (EditText)a.findViewById(R.id.embedded_text_editor); 7348da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor mMsgListView = (MessageListView)a.findViewById(R.id.history); 7448da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor mMsgListAdapter = (MessageListAdapter)mMsgListView.getAdapter(); 7548da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor } 7648da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor 7748da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor class BoxChecker { 7848da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor private int[] mExpectedBoxStates; 7948da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor private boolean mDone; 8048da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor private String mError; 8148da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor 8248da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor public BoxChecker(int[] expectedBoxStates) { 8348da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor mExpectedBoxStates = expectedBoxStates; 8448da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor mDone = false; 8548da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor mError = null; 8648da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor mMsgListAdapter.setOnDataSetChangedListener(mDataSetChangedListener); 8748da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor } 8848da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor 8948da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor private final MessageListAdapter.OnDataSetChangedListener 9048da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor mDataSetChangedListener = new MessageListAdapter.OnDataSetChangedListener() { 9148da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor public void onDataSetChanged(MessageListAdapter adapter) { 9248da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor int count = adapter.getCount(); 9348da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor if (count > 0) { 9448da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor MessageItem item = getMessageItem(count - 1); // get most recent 9548da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor 9648da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor int boxId = item.getBoxId(); 9748da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor 9848da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor // is boxId a valid box? 9948da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor boolean found = false; 10048da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor boolean isLast = false; 10148da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor for (int i = 0; i < mExpectedBoxStates.length; i++) { 10248da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor if (mExpectedBoxStates[i] == boxId) { 10348da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor found = true; 10448da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor isLast = i == mExpectedBoxStates.length - 1; 10548da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor break; 10648da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor } 10748da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor } 10848da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor if (!found) { 10948da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor setError("Unexpected box state"); 11048da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor return; 11148da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor } 11248da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor if (isLast) { 11348da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor mDone = true; 11448da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor } 11548da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor } 11648da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor } 11748da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor }; 11848da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor 11948da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor private void setError(String error) { 12048da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor mError = error; 12148da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor mDone = true; 12248da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor } 12348da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor 12448da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor public String getError() { 12548da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor return mError; 12648da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor } 12748da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor 12848da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor public boolean isDone() { 12948da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor return mDone; 13048da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor } 13148da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor 13248da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor private MessageItem getMessageItem(int index) { 13348da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor Cursor cursor = (Cursor)mMsgListAdapter.getItem(index); 13448da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor 13548da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor mColumnsMap = new MessageListAdapter.ColumnsMap(cursor); 13648da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor String type = cursor.getString(mColumnsMap.mColumnMsgType); 13748da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor long msgId = cursor.getLong(mColumnsMap.mColumnMsgId); 13848da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor 13948da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor MessageItem msgItem = mMsgListAdapter.getCachedMessageItem(type, msgId, cursor); 14048da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor 14148da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor return msgItem; 14248da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor } 14348da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor} 14448da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor 14548da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor /** 14648da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor * Tests that a simple SMS message is successfully sent. 14748da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor */ 14848da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor @LargeTest 14948da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor public void testSendMessage() throws Throwable { 15048da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor final ComposeMessageActivity a = getActivity(); 15148da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor 15248da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor runTestOnUiThread(new Runnable() { 15348da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor public void run() { 15448da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor assertEquals("mMsgListAdapter.getCount", 0, mMsgListAdapter.getCount()); 15548da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor checkFocused(mRecipientsView); 15648da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor mRecipientsView.setText("4258365498"); 15748da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor mTextEditor.setText("This is a test message"); 15848da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor Button send = (Button)a.findViewById(R.id.send_button); 15948da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor send.performClick(); 16048da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor } 16148da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor }); 16248da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor 16348da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor // Now poll while watching the adapter to see if the message got sent 16448da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor BoxChecker boxChecker = new BoxChecker(new int[] {4, 2}); // outbox, sent 16548da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor long now = System.currentTimeMillis(); 16648da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor boolean success = true; 16748da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor while (!boxChecker.isDone()) { 16848da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor Thread.sleep(1000); 16948da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor if (System.currentTimeMillis() - now > 10000) { 17048da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor // Give up after ten seconds 17148da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor success = false; 17248da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor break; 17348da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor } 17448da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor } 17548da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor assertTrue(success && boxChecker.getError() == null); 17648da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor } 17748da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor 17848da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor /** 17948da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor * Helper method to verify which field has the focus 18048da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor * @param focused The view that should be focused (all others should not have focus) 18148da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor */ 18248da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor private void checkFocused(View focused) { 18348da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor assertEquals(focused == mRecipientsView, mRecipientsView.isFocused()); 18448da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor assertEquals(focused == mTextEditor, mTextEditor.isFocused()); 18548da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor } 18648da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor 18748da875f1beea835c6771977e5bd8a9aa3d4bc10Tom Taylor} 188