AccountSetupOutgoingTests.java revision e6cc662abc0b5fffe223cda5e980b4f05a4e91dd
196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project/*
296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project
396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project *
496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * you may not use this file except in compliance with the License.
696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * You may obtain a copy of the License at
796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project *
896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project *
1096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
1196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
1296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * See the License for the specific language governing permissions and
1496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * limitations under the License.
1596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */
1696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
1796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectpackage com.android.email.activity.setup;
1896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
1996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport com.android.email.R;
20a290f503f14432163f74548a5e5d1dc5003ad049Marc Blankimport com.android.email.provider.EmailContent;
2196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
2296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport android.content.Intent;
2396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport android.test.ActivityInstrumentationTestCase2;
2496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport android.test.UiThreadTest;
2596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport android.test.suitebuilder.annotation.MediumTest;
2696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport android.widget.Button;
2796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport android.widget.EditText;
2896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
2996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project/**
3096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Tests of the basic UI logic in the Account Setup Outgoing (SMTP) screen.
31e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank * You can run this entire test case with:
32e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank *   runtest -c com.android.email.activity.setup.AccountSetupOutgoingTests email
3396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */
3496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project@MediumTest
3596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectpublic class AccountSetupOutgoingTests extends
3696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        ActivityInstrumentationTestCase2<AccountSetupOutgoing> {
3796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
3896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    private AccountSetupOutgoing mActivity;
3996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    private EditText mServerView;
4096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    private Button mNextButton;
4196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
4296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public AccountSetupOutgoingTests() {
4383457b0235b8a13e2d885d5b7550784ad470bb9cMakoto Onuki        super(AccountSetupOutgoing.class);
4496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
4596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
4696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
4796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Common setup code for all tests.  Sets up a default launch intent, which some tests
4896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * will use (others will override).
4996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
5096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    @Override
5196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    protected void setUp() throws Exception {
5296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        super.setUp();
5396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
5496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        // This sets up a default URI which can be used by any of the test methods below.
5596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        // Individual test methods can replace this with a custom URI if they wish
5696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        // (except those that run on the UI thread - for them, it's too late to change it.)
5796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        Intent i = getTestIntent("smtp://user:password@server.com:999");
5896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        setActivityIntent(i);
5996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
6096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
6196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
6296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Test processing with a complete, good URI -> good fields
6396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
6496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public void testGoodUri() {
6596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        getActivityAndFields();
6696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        assertTrue(mNextButton.isEnabled());
6796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
6896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
6996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
7096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * No user is not OK - not enabled
7196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
7296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public void testBadUriNoUser() {
7396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        Intent i = getTestIntent("smtp://:password@server.com:999");
7496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        setActivityIntent(i);
7596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        getActivityAndFields();
7696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        assertFalse(mNextButton.isEnabled());
7796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
7896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
7996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
8096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * No password is not OK - not enabled
8196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
8296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public void testBadUriNoPassword() {
8396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        Intent i = getTestIntent("smtp://user@server.com:999");
8496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        setActivityIntent(i);
8596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        getActivityAndFields();
8696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        assertFalse(mNextButton.isEnabled());
8796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
8896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
8996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
9096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * No port is OK - still enabled
9196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
9296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public void testGoodUriNoPort() {
9396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        Intent i = getTestIntent("smtp://user:password@server.com");
9496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        setActivityIntent(i);
9596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        getActivityAndFields();
9696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        assertTrue(mNextButton.isEnabled());
9796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
9896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
9996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
10096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Test for non-standard but OK server names
10196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
10296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    @UiThreadTest
10396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public void testGoodServerVariants() {
10496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        getActivityAndFields();
10596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        assertTrue(mNextButton.isEnabled());
10696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
10796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        mServerView.setText("  server.com  ");
10896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        assertTrue(mNextButton.isEnabled());
10996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
11096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
11196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
11296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Test for non-empty but non-OK server names
11396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
11496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    @UiThreadTest
11596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public void testBadServerVariants() {
11696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        getActivityAndFields();
11796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        assertTrue(mNextButton.isEnabled());
11896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
11996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        mServerView.setText("  ");
12096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        assertFalse(mNextButton.isEnabled());
12196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
12296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        mServerView.setText("serv$er.com");
12396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        assertFalse(mNextButton.isEnabled());
12496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
12596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
12696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
12796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * TODO:  A series of tests to explore the logic around security models & ports
12896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
12996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
13096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
13196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Get the activity (which causes it to be started, using our intent) and get the UI fields
13296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
13396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    private void getActivityAndFields() {
13496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        mActivity = getActivity();
13596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        mServerView = (EditText) mActivity.findViewById(R.id.account_server);
13696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        mNextButton = (Button) mActivity.findViewById(R.id.next);
13796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
13896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
13996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
14096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Create an intent with the Account in it
14196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
14296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    private Intent getTestIntent(String senderUriString) {
143a290f503f14432163f74548a5e5d1dc5003ad049Marc Blank        EmailContent.Account account = new EmailContent.Account();
144d2b0efa2f591f883eaad3d9f8996bbacdcec5c34Andrew Stadler        account.setSenderUri(this.getInstrumentation().getTargetContext(), senderUriString);
145e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        SetupData.init(SetupData.FLOW_MODE_NORMAL, account);
146e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        return new Intent(Intent.ACTION_MAIN);
14796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
14896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
14996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project}
150