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