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 19040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedyimport android.content.Context; 2096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport android.content.Intent; 2196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport android.test.ActivityInstrumentationTestCase2; 2296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport android.test.UiThreadTest; 2396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport android.test.suitebuilder.annotation.MediumTest; 2496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport android.widget.EditText; 2596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 26515d830e8755d3674e04bcc60d7f85b4fa7fb202Jerry Xieimport com.android.email.R; 27515d830e8755d3674e04bcc60d7f85b4fa7fb202Jerry Xieimport com.android.email.activity.setup.AccountSetupOutgoing; 28515d830e8755d3674e04bcc60d7f85b4fa7fb202Jerry Xieimport com.android.email.activity.setup.AccountSetupOutgoingFragment; 29515d830e8755d3674e04bcc60d7f85b4fa7fb202Jerry Xieimport com.android.email.activity.setup.SetupData; 30515d830e8755d3674e04bcc60d7f85b4fa7fb202Jerry Xieimport com.android.emailcommon.provider.Account; 31515d830e8755d3674e04bcc60d7f85b4fa7fb202Jerry Xieimport com.android.emailcommon.provider.HostAuth; 32515d830e8755d3674e04bcc60d7f85b4fa7fb202Jerry Xie 33fb4333b3a5051b08d3a255000bb1b8331e2a1d43Andrew Stadlerimport java.net.URISyntaxException; 34fb4333b3a5051b08d3a255000bb1b8331e2a1d43Andrew Stadler 3596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project/** 3696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Tests of the basic UI logic in the Account Setup Outgoing (SMTP) screen. 37e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank * You can run this entire test case with: 38e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank * runtest -c com.android.email.activity.setup.AccountSetupOutgoingTests email 3996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 4096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project@MediumTest 41040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedypublic class AccountSetupOutgoingTests extends 4296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project ActivityInstrumentationTestCase2<AccountSetupOutgoing> { 4396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 4496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project private AccountSetupOutgoing mActivity; 45fb4333b3a5051b08d3a255000bb1b8331e2a1d43Andrew Stadler private AccountSetupOutgoingFragment mFragment; 4696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project private EditText mServerView; 47fb4333b3a5051b08d3a255000bb1b8331e2a1d43Andrew Stadler private EditText mPasswordView; 48040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy 4996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public AccountSetupOutgoingTests() { 5083457b0235b8a13e2d885d5b7550784ad470bb9cMakoto Onuki super(AccountSetupOutgoing.class); 5196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 5296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 5396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 5496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Common setup code for all tests. Sets up a default launch intent, which some tests 5596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * will use (others will override). 5696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 5796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project @Override 5896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project protected void setUp() throws Exception { 5996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project super.setUp(); 6096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 6196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project // This sets up a default URI which can be used by any of the test methods below. 6296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project // Individual test methods can replace this with a custom URI if they wish 6396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project // (except those that run on the UI thread - for them, it's too late to change it.) 6496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project Intent i = getTestIntent("smtp://user:password@server.com:999"); 6596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project setActivityIntent(i); 6696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 67040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy 6896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 6996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Test processing with a complete, good URI -> good fields 7096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 7196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public void testGoodUri() { 7296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project getActivityAndFields(); 734c3a8ede019f8683a7d15defd995790c4b5ebdacAndrew Stadler assertTrue(mActivity.mNextButtonEnabled); 7496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 75040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy 7696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 7796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * No user is not OK - not enabled 7896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 79040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy public void testBadUriNoUser() 80040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy throws URISyntaxException { 8196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project Intent i = getTestIntent("smtp://:password@server.com:999"); 8296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project setActivityIntent(i); 8396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project getActivityAndFields(); 844c3a8ede019f8683a7d15defd995790c4b5ebdacAndrew Stadler assertFalse(mActivity.mNextButtonEnabled); 8596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 86040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy 8796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 8896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * No password is not OK - not enabled 8996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 90040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy public void testBadUriNoPassword() 91040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy throws URISyntaxException { 9296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project Intent i = getTestIntent("smtp://user@server.com:999"); 9396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project setActivityIntent(i); 9496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project getActivityAndFields(); 954c3a8ede019f8683a7d15defd995790c4b5ebdacAndrew Stadler assertFalse(mActivity.mNextButtonEnabled); 9696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 97040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy 9896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 9996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * No port is OK - still enabled 10096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 101040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy public void testGoodUriNoPort() 102040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy throws URISyntaxException { 10396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project Intent i = getTestIntent("smtp://user:password@server.com"); 10496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project setActivityIntent(i); 10596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project getActivityAndFields(); 1064c3a8ede019f8683a7d15defd995790c4b5ebdacAndrew Stadler assertTrue(mActivity.mNextButtonEnabled); 10796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 108040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy 10996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 11096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Test for non-standard but OK server names 11196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 11296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project @UiThreadTest 11396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public void testGoodServerVariants() { 11496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project getActivityAndFields(); 1154c3a8ede019f8683a7d15defd995790c4b5ebdacAndrew Stadler assertTrue(mActivity.mNextButtonEnabled); 116040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy 11796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project mServerView.setText(" server.com "); 1184c3a8ede019f8683a7d15defd995790c4b5ebdacAndrew Stadler assertTrue(mActivity.mNextButtonEnabled); 11996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 120040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy 12196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 12296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Test for non-empty but non-OK server names 12396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 12496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project @UiThreadTest 12596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public void testBadServerVariants() { 12696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project getActivityAndFields(); 1274c3a8ede019f8683a7d15defd995790c4b5ebdacAndrew Stadler assertTrue(mActivity.mNextButtonEnabled); 128040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy 12996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project mServerView.setText(" "); 1304c3a8ede019f8683a7d15defd995790c4b5ebdacAndrew Stadler assertFalse(mActivity.mNextButtonEnabled); 131040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy 13296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project mServerView.setText("serv$er.com"); 1334c3a8ede019f8683a7d15defd995790c4b5ebdacAndrew Stadler assertFalse(mActivity.mNextButtonEnabled); 13496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 135fb4333b3a5051b08d3a255000bb1b8331e2a1d43Andrew Stadler 136fb4333b3a5051b08d3a255000bb1b8331e2a1d43Andrew Stadler /** 137fb4333b3a5051b08d3a255000bb1b8331e2a1d43Andrew Stadler * Test to confirm that passwords with leading or trailing spaces are accepted verbatim. 138fb4333b3a5051b08d3a255000bb1b8331e2a1d43Andrew Stadler */ 139fb4333b3a5051b08d3a255000bb1b8331e2a1d43Andrew Stadler @UiThreadTest 140fb4333b3a5051b08d3a255000bb1b8331e2a1d43Andrew Stadler public void testPasswordNoTrim() throws URISyntaxException { 141fb4333b3a5051b08d3a255000bb1b8331e2a1d43Andrew Stadler getActivityAndFields(); 142fb4333b3a5051b08d3a255000bb1b8331e2a1d43Andrew Stadler 143fb4333b3a5051b08d3a255000bb1b8331e2a1d43Andrew Stadler // Clear the password - should disable 144fb4333b3a5051b08d3a255000bb1b8331e2a1d43Andrew Stadler checkPassword(null, false); 145fb4333b3a5051b08d3a255000bb1b8331e2a1d43Andrew Stadler 146fb4333b3a5051b08d3a255000bb1b8331e2a1d43Andrew Stadler // Various combinations of spaces should be OK 147fb4333b3a5051b08d3a255000bb1b8331e2a1d43Andrew Stadler checkPassword(" leading", true); 148fb4333b3a5051b08d3a255000bb1b8331e2a1d43Andrew Stadler checkPassword("trailing ", true); 14989b8fdca1841efd832e05cee877ab3eaf3780aaeJerry Xie// TODO: need to fix this part of the test 15089b8fdca1841efd832e05cee877ab3eaf3780aaeJerry Xie// checkPassword("em bedded", true); 15189b8fdca1841efd832e05cee877ab3eaf3780aaeJerry Xie// checkPassword(" ", true); 152fb4333b3a5051b08d3a255000bb1b8331e2a1d43Andrew Stadler } 153fb4333b3a5051b08d3a255000bb1b8331e2a1d43Andrew Stadler 154fb4333b3a5051b08d3a255000bb1b8331e2a1d43Andrew Stadler /** 155fb4333b3a5051b08d3a255000bb1b8331e2a1d43Andrew Stadler * Check password field for a given password. Should be called in UI thread. Confirms that 156fb4333b3a5051b08d3a255000bb1b8331e2a1d43Andrew Stadler * the password has not been trimmed. 157fb4333b3a5051b08d3a255000bb1b8331e2a1d43Andrew Stadler * 158fb4333b3a5051b08d3a255000bb1b8331e2a1d43Andrew Stadler * @param password the password to test with 159fb4333b3a5051b08d3a255000bb1b8331e2a1d43Andrew Stadler * @param expectNext true if expected that this password will enable the "next" button 160fb4333b3a5051b08d3a255000bb1b8331e2a1d43Andrew Stadler */ 161fb4333b3a5051b08d3a255000bb1b8331e2a1d43Andrew Stadler private void checkPassword(String password, boolean expectNext) throws URISyntaxException { 162fb4333b3a5051b08d3a255000bb1b8331e2a1d43Andrew Stadler mPasswordView.setText(password); 163fb4333b3a5051b08d3a255000bb1b8331e2a1d43Andrew Stadler if (expectNext) { 164fb4333b3a5051b08d3a255000bb1b8331e2a1d43Andrew Stadler assertTrue(mActivity.mNextButtonEnabled); 165fb4333b3a5051b08d3a255000bb1b8331e2a1d43Andrew Stadler } else { 166fb4333b3a5051b08d3a255000bb1b8331e2a1d43Andrew Stadler assertFalse(mActivity.mNextButtonEnabled); 167fb4333b3a5051b08d3a255000bb1b8331e2a1d43Andrew Stadler } 168fb4333b3a5051b08d3a255000bb1b8331e2a1d43Andrew Stadler } 169fb4333b3a5051b08d3a255000bb1b8331e2a1d43Andrew Stadler 17096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 17196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * TODO: A series of tests to explore the logic around security models & ports 17296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 173040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy 17496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 17596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Get the activity (which causes it to be started, using our intent) and get the UI fields 17696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 17796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project private void getActivityAndFields() { 17896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project mActivity = getActivity(); 179fb4333b3a5051b08d3a255000bb1b8331e2a1d43Andrew Stadler mFragment = mActivity.mFragment; 18096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project mServerView = (EditText) mActivity.findViewById(R.id.account_server); 181515d830e8755d3674e04bcc60d7f85b4fa7fb202Jerry Xie mPasswordView = (EditText) mActivity.findViewById(R.id.account_server); 18296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 183040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy 18496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /** 18596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Create an intent with the Account in it 18696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 187040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy private Intent getTestIntent(String senderUriString) 188040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy throws URISyntaxException { 189f5418f1f93b02e7fab9f15eb201800b65510998eMarc Blank Account account = new Account(); 190040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy Context context = getInstrumentation().getTargetContext(); 191040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy HostAuth auth = account.getOrCreateHostAuthSend(context); 192313586c8eb4e23ceec068b82f3dc0be1c8a7045fBen Komalo HostAuth.setHostAuthFromString(auth, senderUriString); 193515d830e8755d3674e04bcc60d7f85b4fa7fb202Jerry Xie // TODO: we need to do something with this SetupData, add it as an extra in the intent? 194515d830e8755d3674e04bcc60d7f85b4fa7fb202Jerry Xie SetupData setupData = new SetupData(SetupData.FLOW_MODE_NORMAL, account); 195e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank return new Intent(Intent.ACTION_MAIN); 19696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 19796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 19896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project} 199