AccountSetupOutgoingTests.java revision 96c5af40d639d629267794f4f0338a267ff94ce5
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.Account;
2096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport com.android.email.R;
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.
3196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */
3296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project@MediumTest
3396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectpublic class AccountSetupOutgoingTests extends
3496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        ActivityInstrumentationTestCase2<AccountSetupOutgoing> {
3596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
3696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    private AccountSetupOutgoing mActivity;
3796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    private EditText mServerView;
3896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    private Button mNextButton;
3996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
4096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public AccountSetupOutgoingTests() {
4196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        super("com.android.email", AccountSetupOutgoing.class);
4296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
4396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
4496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
4596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Common setup code for all tests.  Sets up a default launch intent, which some tests
4696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * will use (others will override).
4796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
4896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    @Override
4996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    protected void setUp() throws Exception {
5096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        super.setUp();
5196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
5296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        // This sets up a default URI which can be used by any of the test methods below.
5396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        // Individual test methods can replace this with a custom URI if they wish
5496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        // (except those that run on the UI thread - for them, it's too late to change it.)
5596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        Intent i = getTestIntent("smtp://user:password@server.com:999");
5696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        setActivityIntent(i);
5796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
5896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
5996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
6096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Test processing with a complete, good URI -> good fields
6196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
6296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public void testGoodUri() {
6396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        getActivityAndFields();
6496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        assertTrue(mNextButton.isEnabled());
6596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
6696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
6796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
6896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * No user is not OK - not enabled
6996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
7096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public void testBadUriNoUser() {
7196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        Intent i = getTestIntent("smtp://:password@server.com:999");
7296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        setActivityIntent(i);
7396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        getActivityAndFields();
7496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        assertFalse(mNextButton.isEnabled());
7596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
7696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
7796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
7896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * No password is not OK - not enabled
7996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
8096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public void testBadUriNoPassword() {
8196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        Intent i = getTestIntent("smtp://user@server.com:999");
8296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        setActivityIntent(i);
8396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        getActivityAndFields();
8496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        assertFalse(mNextButton.isEnabled());
8596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
8696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
8796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
8896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * No port is OK - still enabled
8996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
9096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public void testGoodUriNoPort() {
9196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        Intent i = getTestIntent("smtp://user:password@server.com");
9296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        setActivityIntent(i);
9396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        getActivityAndFields();
9496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        assertTrue(mNextButton.isEnabled());
9596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
9696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
9796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
9896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Test for non-standard but OK server names
9996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
10096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    @UiThreadTest
10196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public void testGoodServerVariants() {
10296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        getActivityAndFields();
10396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        assertTrue(mNextButton.isEnabled());
10496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
10596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        mServerView.setText("  server.com  ");
10696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        assertTrue(mNextButton.isEnabled());
10796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
10896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
10996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
11096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Test for non-empty but non-OK server names
11196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
11296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    @UiThreadTest
11396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public void testBadServerVariants() {
11496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        getActivityAndFields();
11596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        assertTrue(mNextButton.isEnabled());
11696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
11796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        mServerView.setText("  ");
11896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        assertFalse(mNextButton.isEnabled());
11996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
12096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        mServerView.setText("serv$er.com");
12196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        assertFalse(mNextButton.isEnabled());
12296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
12396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
12496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
12596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * TODO:  A series of tests to explore the logic around security models & ports
12696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
12796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
12896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
12996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Get the activity (which causes it to be started, using our intent) and get the UI fields
13096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
13196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    private void getActivityAndFields() {
13296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        mActivity = getActivity();
13396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        mServerView = (EditText) mActivity.findViewById(R.id.account_server);
13496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        mNextButton = (Button) mActivity.findViewById(R.id.next);
13596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
13696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
13796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    /**
13896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     * Create an intent with the Account in it
13996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     */
14096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    private Intent getTestIntent(String senderUriString) {
14196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        Account account = new Account(this.getInstrumentation().getTargetContext());
14296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        account.setSenderUri(senderUriString);
14396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        Intent i = new Intent(Intent.ACTION_MAIN);
14496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        i.putExtra("account", account);     // AccountSetupNames.EXTRA_ACCOUNT == "account"
14596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        return i;
14696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
14796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
14896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project}
149