/* * Catroid: An on-device visual programming system for Android devices * Copyright (C) 2010-2016 The Catrobat Team * (<http://developer.catrobat.org/credits>) * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * An additional term exception under section 7 of the GNU Affero * General Public License, version 3, is available at * http://developer.catrobat.org/license_additional_term * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.catrobat.catroid.uitest.web; import android.content.Intent; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.preference.PreferenceManager; import android.test.UiThreadTest; import android.text.InputType; import android.view.View; import android.widget.CheckBox; import android.widget.EditText; import android.widget.TextView; import com.facebook.AccessToken; import com.facebook.login.LoginBehavior; import com.robotium.solo.By; import com.robotium.solo.Solo; import org.catrobat.catroid.R; import org.catrobat.catroid.common.Constants; import org.catrobat.catroid.test.utils.Reflection; import org.catrobat.catroid.transfers.DeleteTestUserTask; import org.catrobat.catroid.ui.MainMenuActivity; import org.catrobat.catroid.uitest.annotation.Device; import org.catrobat.catroid.uitest.util.BaseActivityInstrumentationTestCase; import org.catrobat.catroid.uitest.util.UiTestUtils; import org.catrobat.catroid.utils.UtilDeviceInfo; import org.catrobat.catroid.web.ServerCalls; import java.util.ArrayList; import java.util.Locale; import java.util.Map; //Aborts on emulator public class UserConceptTest extends BaseActivityInstrumentationTestCase<MainMenuActivity> implements DeleteTestUserTask.OnDeleteTestUserCompleteListener { private String saveToken; private String signInDialogTitle; private String uploadDialogTitle; private String login; private String register; private String oauthUsername; private boolean testUserAccountsDeleted; private boolean configFileRead; private Map<String, String> configMap; public UserConceptTest() { super(MainMenuActivity.class); } @Override @UiThreadTest public void setUp() throws Exception { super.setUp(); SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity()); saveToken = prefs.getString(Constants.TOKEN, Constants.NO_TOKEN); signInDialogTitle = solo.getString(R.string.sign_in_dialog_title); login = solo.getString(R.string.login); register = solo.getString(R.string.register); uploadDialogTitle = solo.getString(R.string.upload_project_dialog_title); oauthUsername = solo.getString(R.string.signin_choose_username); testUserAccountsDeleted = false; configFileRead = false; ServerCalls.getInstance().setLoginBehavior(LoginBehavior.WEB_ONLY); solo.waitForActivity(MainMenuActivity.class); UiTestUtils.createEmptyProject(); setActivityInitialTouchMode(true); } @Override public void tearDown() throws Exception { SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity()); prefs.edit().putString(Constants.TOKEN, saveToken).commit(); Reflection.setPrivateField(ServerCalls.getInstance(), "emailForUiTests", null); super.tearDown(); } @Device public void testLicenceLinkPresent() throws Throwable { setTestUrl(); SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity()); prefs.edit().putString(Constants.TOKEN, null).commit(); solo.clickOnText(solo.getString(R.string.main_menu_upload)); solo.waitForText(signInDialogTitle); solo.scrollDown(); assertTrue("Licence text not present", solo.searchText(solo.getString(R.string.register_terms))); assertTrue("Licence link not present", solo.searchText(solo.getString(R.string.register_pocketcode_terms_of_use_text))); } @Device public void testRegisterNewUser() throws Throwable { setTestUrl(); SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity()); prefs.edit().putString(Constants.TOKEN, Constants.NO_TOKEN).commit(); navigateToNativeRegistrationDialog(); fillNativeRegistrationDialog(getTestUserName(), true); assertNotNull("Upload Dialog is not shown.", solo.getText(solo.getString(R.string.upload_project_dialog_title))); } @Device public void testRegisterNewUserFromMenu() throws Throwable { setTestUrl(); SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity()); prefs.edit().putString(Constants.TOKEN, Constants.NO_TOKEN).commit(); navigateToMenuNativeRegistrationDialog(); fillNativeRegistrationDialog(getTestUserName(), true); assertTrue("Not registered!", solo.searchText(solo.getString(R.string .new_user_registered))); assertFalse("Upload Dialog is shown.", solo.searchText(solo.getString(R.string .upload_project_dialog_title))); } @Device public void testRegisterWithValidTokenSaved() throws Throwable { setTestUrl(); UiTestUtils.createValidUser(getActivity()); solo.clickOnText(solo.getString(R.string.main_menu_upload)); solo.waitForText(uploadDialogTitle); assertNotNull("Upload Dialog is not shown.", solo.getText(solo.getString(R.string.upload_project_dialog_title))); } @Device public void testTokenPersistance() throws Throwable { setTestUrl(); SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity()); prefs.edit().putString(Constants.TOKEN, "").commit(); solo.sleep(300); navigateToNativeRegistrationDialog(); fillNativeRegistrationDialog(getTestUserName(), true); solo.waitForText(uploadDialogTitle); assertNotNull("Upload Dialog is not shown.", solo.getText(solo.getString(R.string.upload_project_dialog_title))); solo.waitForDialogToClose(10000); assertNotNull("Upload Dialog is not shown.", solo.getText(solo.getString(R.string.upload_project_dialog_title))); } @Device public void testRegisterWithWrongToken() throws Throwable { setTestUrl(); SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity()); prefs.edit().putString(Constants.TOKEN, "wrong_token").commit(); solo.sleep(300); navigateToNativeRegistrationDialog(); fillNativeRegistrationDialog(getTestUserName(), true); assertNotNull("Upload Dialog is not shown.", uploadDialogTitle); UiTestUtils.goBackToHome(getInstrumentation()); } @Device public void testRegisterWithShortPassword() throws Throwable { setTestUrl(); SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity()); prefs.edit().putString(Constants.TOKEN, null).commit(); solo.sleep(300); navigateToNativeRegistrationDialog(); fillNativeRegistrationDialog(getTestUserName(), false); assertNotNull("no error dialog is shown", solo.getText(solo.getString(R.string.register_error))); solo.clickOnButton(0); assertNotNull("Registration Dialog is not shown.", solo.getText(register)); } @Device public void testRegisterUsernameDifferentCases() throws Throwable { setTestUrl(); clearSharedPreferences(); solo.sleep(300); navigateToNativeRegistrationDialog(); String username = "UpperCaseUser" + System.currentTimeMillis(); fillNativeRegistrationDialog(username, true); solo.waitForText(uploadDialogTitle); String cancel = solo.getString(R.string.cancel); if (solo.searchText(cancel)) { solo.clickOnText(cancel); } clearSharedPreferences(); navigateToNativeLoginDialog(); username = username.toLowerCase(Locale.ENGLISH); fillNativeLoginDialog(username, "topsecret"); solo.waitForText(uploadDialogTitle); TextView uploadProject = (TextView) solo.getView(R.id.dialog_upload_size_of_project); ArrayList<View> currentViews = solo.getCurrentViews(); assertTrue("Cannot login because username is upper or lower case", currentViews.contains(uploadProject)); } @Device public void testRegisterErrors() throws Throwable { setTestUrl(); clearSharedPreferences(); String testUser = "testUser" + System.currentTimeMillis(); String wrongTestUser = "TestÜser"; String testPassword = "pwspws"; String testEmail = testUser + "@gmail.com"; String wrongTestEmail = testUser; solo.clickOnButton(solo.getString(R.string.main_menu_upload)); solo.waitForDialogToOpen(500); solo.sendKey(Solo.ENTER); assertTrue("Signin dialog not shown", solo.searchText(signInDialogTitle)); solo.clickOnButton(register); solo.waitForDialogToOpen(); EditText email = (EditText) solo.getView(R.id.dialog_register_email); EditText username = (EditText) solo.getView(R.id.dialog_register_username); EditText password = (EditText) solo.getView(R.id.dialog_register_password); EditText passwordConfirmation = (EditText) solo .getView(R.id.dialog_register_password_confirm); assertTrue("The device E-Mail address is not proposed", email.getText().toString() .equals(UtilDeviceInfo.getUserEmail(getActivity()))); solo.clickOnButton(register); solo.waitForDialogToOpen(500); assertTrue("No username blank error appeared", solo.searchText("Username must not be blank")); solo.clickOnButton(0); solo.clearEditText(username); solo.enterText(username, wrongTestUser); solo.sendKey(Solo.ENTER); solo.clickOnButton(register); solo.waitForDialogToOpen(500); assertTrue("No username not valid error appeared", solo.searchText("This value is not valid")); solo.clickOnButton(0); solo.clearEditText(username); solo.enterText(username, testUser); solo.sendKey(Solo.ENTER); solo.clearEditText(email); solo.clickOnButton(register); solo.waitForDialogToOpen(500); assertTrue("No email blank error appeared", solo.searchText("email must not be blank")); solo.clickOnButton(0); solo.clearEditText(email); solo.enterText(email, wrongTestEmail); solo.sendKey(Solo.ENTER); solo.clickOnButton(register); solo.waitForDialogToOpen(500); assertTrue("No invalid email error appeared", solo.searchText("Your email seems to be invalid")); solo.clickOnButton(0); solo.clearEditText(email); solo.enterText(email, testEmail); solo.sendKey(Solo.ENTER); solo.clickOnButton(register); solo.waitForDialogToOpen(500); assertTrue("No password missing error appeared", solo.searchText("The password is missing")); solo.clickOnButton(0); solo.clearEditText(password); solo.clearEditText(passwordConfirmation); solo.enterText(password, testPassword); solo.sendKey(Solo.ENTER); solo.enterText(passwordConfirmation, testPassword + "wrong"); solo.sendKey(Solo.ENTER); solo.clickOnButton(register); solo.waitForDialogToOpen(500); assertTrue("No password do not match error appeared", solo.searchText(solo.getString(R.string.register_password_mismatch))); solo.clickOnButton(0); //Check show password is checked and unchecked because solo automatically shows hidden password CheckBox showPassword = (CheckBox) solo.getView(R.id.dialog_register_checkbox_showpassword); solo.clickOnView(showPassword); solo.sleep(300); solo.clickOnView(showPassword); solo.sleep(300); assertTrue("Password should be hidden" + "inputtype:" + password.getInputType(), password.getInputType() == (InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD)); assertTrue( "Password confirmation should be hidden", passwordConfirmation.getInputType() == (InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD)); solo.clickOnView(showPassword); solo.sleep(300); assertTrue("Password should be visible", password.getInputType() == InputType .TYPE_CLASS_TEXT); assertTrue("Password confirmation should be visible", passwordConfirmation.getInputType() == InputType.TYPE_CLASS_TEXT); solo.clearEditText(passwordConfirmation); solo.enterText(passwordConfirmation, testPassword); solo.sendKey(Solo.ENTER); solo.clickOnButton(register); solo.waitForDialogToOpen(2000); assertTrue("No upload dialog shown", solo.waitForText(uploadDialogTitle)); } @Device public void testLoginWithRegisteredUser() throws Throwable { setTestUrl(); String testUser = "testUser" + System.currentTimeMillis(); String testPassword = "pwspws"; String testEmail = testUser + "@gmail.com"; UiTestUtils.createValidUserWithCredentials(getActivity(), testUser, testPassword, testEmail); SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity()); prefs.edit().putString(Constants.TOKEN, Constants.NO_TOKEN).commit(); navigateToNativeLoginDialog(); fillNativeLoginDialog(testUser, testPassword); assertNotNull("Upload Dialog is not shown.", solo.getText(solo.getString(R.string.upload_project_dialog_title))); } @Device public void testLoginFromMenuWithRegisteredUser() throws Throwable { setTestUrl(); String testUser = "testUser" + System.currentTimeMillis(); String testPassword = "pwspws"; String testEmail = testUser + "@gmail.com"; UiTestUtils.createValidUserWithCredentials(getActivity(), testUser, testPassword, testEmail); SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity()); prefs.edit().putString(Constants.TOKEN, Constants.NO_TOKEN).commit(); navigateToMenuLoginDialog(); fillNativeLoginDialog(testUser, testPassword); assertTrue("Not logged in!", solo.searchText(solo.getString(R.string .user_logged_in))); assertFalse("Upload Dialog is shown.", solo.searchText(solo.getString(R.string .upload_project_dialog_title))); } @Device public void testLoginErrors() throws Throwable { setTestUrl(); String wrongTestUser = "TestÜser"; String testUser = "testUser" + System.currentTimeMillis(); String wrongTestPassword = "short"; String testPassword = "pwspws"; String testEmail = testUser + "@gmail.com"; UiTestUtils.createValidUserWithCredentials(getActivity(), testUser, testPassword, testEmail); SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity()); prefs.edit().putString(Constants.TOKEN, Constants.NO_TOKEN).commit(); navigateToNativeLoginDialog(); assertTrue("Signin dialog not shown", solo.searchText(login)); EditText username = (EditText) solo.getView(R.id.dialog_login_username); EditText password = (EditText) solo.getView(R.id.dialog_login_password); CheckBox showPassword = (CheckBox) solo.getView(R.id.dialog_login_checkbox_showpassword); solo.clickOnButton(login); solo.waitForDialogToOpen(500); assertTrue("No username blank error appeared", solo.searchText("Username must not be blank")); solo.clickOnButton(0); solo.sendKey(Solo.ENTER); solo.clearEditText(username); solo.enterText(username, wrongTestUser); solo.sendKey(Solo.ENTER); solo.clickOnButton(login); solo.waitForDialogToOpen(500); assertTrue("No username not valid error appeared", solo.searchText("This value is not valid")); solo.clickOnButton(0); solo.clearEditText(username); solo.enterText(username, testUser); solo.sendKey(Solo.ENTER); solo.clickOnButton(login); solo.waitForDialogToOpen(500); assertTrue("No password missing error appeared", solo.searchText("The password is missing")); solo.clickOnButton(0); solo.clearEditText(password); solo.clickOnView(password); solo.enterText(password, wrongTestPassword); solo.sendKey(Solo.ENTER); solo.clickOnButton(login); solo.waitForDialogToOpen(500); assertTrue("No password too short error appeared", solo.searchText("Your password must have at least 6 " + "characters")); solo.clickOnButton(0); solo.clearEditText(password); solo.clickOnView(password); solo.enterText(password, testPassword); solo.sendKey(Solo.ENTER); solo.clickOnView(showPassword); solo.sleep(300); assertTrue("Password should be hidden" + "input type:" + password.getInputType(), password.getInputType() == (InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD)); solo.clickOnView(showPassword); solo.sleep(300); assertTrue("Password should be visible", password.getInputType() == InputType .TYPE_CLASS_TEXT); solo.clickOnButton(login); assertNotNull("Upload Dialog is not shown.", solo.getText(solo.getString(R.string.upload_project_dialog_title))); } @Device public void testLoginWithNotExistingUser() throws Throwable { setTestUrl(); SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity()); prefs.edit().putString(Constants.TOKEN, Constants.NO_TOKEN).commit(); navigateToNativeLoginDialog(); fillNativeLoginDialog(getTestUserName(), "testpassword"); assertTrue("No username does not exist error appeared", solo.searchText("This username does not exist")); } @Device public void testFacebookSignInWithNewUser() throws Throwable { waitFacebookOrGoogleTestReady(); solo.clickOnText(solo.getString(R.string.main_menu_upload)); solo.waitForText(signInDialogTitle); solo.clickOnView(solo.getView(R.id.dialog_sign_in_facebook_login_button)); solo.sleep(5000); fillFacebookLoginDialogs(true); fillOAuthUsernameDialog(configMap.get(UiTestUtils.CONFIG_FACEBOOK_NAME), true); assertTrue("No upload dialog appeared!", solo.searchText(uploadDialogTitle, 1, true, true)); } @Device public void testFacebookSignInWithoutMailPermission() throws Throwable { waitFacebookOrGoogleTestReady(); solo.clickOnText(solo.getString(R.string.main_menu_upload)); solo.waitForText(signInDialogTitle); solo.clickOnView(solo.getView(R.id.dialog_sign_in_facebook_login_button)); solo.sleep(5000); fillFacebookLoginDialogs(false); fillOAuthUsernameDialog(configMap.get(UiTestUtils.CONFIG_FACEBOOK_NAME), true); assertTrue("No upload dialog appeared!", solo.searchText(uploadDialogTitle, 1, true, true)); } @Device public void testFacebookMultipleSignIn() throws Throwable { waitFacebookOrGoogleTestReady(); solo.clickOnText(solo.getString(R.string.main_menu_upload)); solo.waitForText(signInDialogTitle); solo.clickOnView(solo.getView(R.id.dialog_sign_in_facebook_login_button)); solo.sleep(5000); fillFacebookLoginDialogs(true); fillOAuthUsernameDialog(configMap.get(UiTestUtils.CONFIG_FACEBOOK_NAME), true); assertTrue("No upload dialog appeared!", solo.waitForText(uploadDialogTitle, 0, 10000)); solo.sendKey(Solo.ENTER); solo.hideSoftKeyboard(); solo.sleep(300); Intent intent = new Intent(getActivity(), MainMenuActivity.class); getActivity().startActivity(intent); solo.waitForActivity(MainMenuActivity.class); solo.sleep(300); clearSharedPreferences(); solo.clickOnText(solo.getString(R.string.main_menu_upload)); solo.waitForText(signInDialogTitle); solo.clickOnView(solo.getView(R.id.dialog_sign_in_facebook_login_button)); solo.sleep(3000); solo.clickOnWebElement(By.textContent("OK")); solo.waitForDialogToOpen(); assertTrue("No upload dialog appeared!", solo.searchText(uploadDialogTitle, 1, true, true)); } @Device public void testCancelAndReopenFacebookLoginDialog() throws Throwable { waitFacebookOrGoogleTestReady(); solo.clickOnText(solo.getString(R.string.main_menu_upload)); solo.waitForText(signInDialogTitle); solo.clickOnView(solo.getView(R.id.dialog_sign_in_facebook_login_button)); solo.sleep(5000); solo.goBack(); solo.sleep(500); solo.clickOnView(solo.getView(R.id.dialog_sign_in_facebook_login_button)); solo.sleep(5000); fillFacebookLoginDialogs(true); fillOAuthUsernameDialog(configMap.get(UiTestUtils.CONFIG_FACEBOOK_NAME), true); assertTrue("No upload dialog appeared!", solo.searchText(uploadDialogTitle, 1, true, true)); } @Device public void testGPlusSignInWithNewUser() throws Throwable { waitFacebookOrGoogleTestReady(); solo.clickOnText(solo.getString(R.string.main_menu_upload)); solo.waitForText(signInDialogTitle); solo.clickOnView(solo.getView(R.id.dialog_sign_in_gplus_login_button)); solo.sleep(5000); fillOAuthUsernameDialog(configMap.get(UiTestUtils.CONFIG_GPLUS_NAME), true); assertTrue("No upload dialog appeared!", solo.searchText(uploadDialogTitle, 1, true, true)); } @Device public void testGPlusMultipleSignIn() throws Throwable { waitFacebookOrGoogleTestReady(); solo.clickOnText(solo.getString(R.string.main_menu_upload)); solo.waitForText(signInDialogTitle); solo.clickOnView(solo.getView(R.id.dialog_sign_in_gplus_login_button)); solo.sleep(5000); fillOAuthUsernameDialog(configMap.get(UiTestUtils.CONFIG_GPLUS_NAME), true); assertTrue("No upload dialog appeared!", solo.waitForText(uploadDialogTitle, 0, 10000)); solo.sendKey(Solo.ENTER); solo.hideSoftKeyboard(); solo.sleep(300); Intent intent = new Intent(getActivity(), MainMenuActivity.class); getActivity().startActivity(intent); solo.waitForActivity(MainMenuActivity.class); solo.sleep(300); clearSharedPreferences(); solo.clickOnText(solo.getString(R.string.main_menu_upload)); solo.waitForText(signInDialogTitle); solo.clickOnView(solo.getView(R.id.dialog_sign_in_gplus_login_button)); solo.waitForDialogToOpen(); assertTrue("No upload dialog appeared!", solo.searchText(uploadDialogTitle, 1, true, true)); } private void fillFacebookLoginDialogs(boolean eMailPermission) { solo.waitForWebElement(By.name("login")); if (solo.searchText("Log out")) { solo.clickOnButton(0); solo.waitForDialogToClose(); solo.clickOnView(solo.getView(R.id.dialog_sign_in_facebook_login_button)); solo.waitForWebElement(By.name("login")); } solo.clearTextInWebElement(By.name("email")); solo.clearTextInWebElement(By.name("pass")); solo.enterTextInWebElement(By.name("email"), configMap.get(UiTestUtils.CONFIG_FACEBOOK_MAIL)); solo.enterTextInWebElement(By.name("pass"), configMap.get(UiTestUtils.CONFIG_FACEBOOK_PASSWORD)); solo.clickOnWebElement(By.name("login")); solo.sleep(3000); if (!eMailPermission) { solo.clickOnWebElement(By.id("u_0_9")); //Edit the info you provide solo.sleep(100); solo.clickOnWebElement(By.textContent("Email address")); //unset email permission } solo.clickOnWebElement(By.textContent("OK")); } private void setTestUrl() throws Throwable { runTestOnUiThread(new Runnable() { public void run() { ServerCalls.useTestUrl = true; } }); } private void fillNativeRegistrationDialog(String username, boolean correctPassword) { assertNotNull("Registration Dialog is not shown.", solo.getText(register)); solo.sendKey(Solo.ENTER); // enter a username String testUser = username; EditText userNameEditText = (EditText) solo.getView(R.id.dialog_register_username); solo.clearEditText(userNameEditText); solo.enterText(userNameEditText, testUser); solo.sendKey(Solo.ENTER); // set the email to use. we need a random email because the server does not allow same email with different users String testEmail = testUser + "@gmail.com"; solo.sendKey(Solo.ENTER); EditText eMailEditText = (EditText) solo.getView(R.id.dialog_register_email); String deviceEmail = UtilDeviceInfo.getUserEmail(getActivity()); if (deviceEmail != null) { //Test device should have an account.. assertTrue("The device E-Mail address" + deviceEmail + "is not proposed", eMailEditText.getText().toString().equals(UtilDeviceInfo.getUserEmail(getActivity()))); } solo.clearEditText(eMailEditText); solo.clickOnView(eMailEditText); solo.enterText(eMailEditText, testEmail); solo.sendKey(Solo.ENTER); // enter a password String testPassword; if (correctPassword) { testPassword = "topsecret"; } else { testPassword = "short"; } EditText passwordEditText = (EditText) solo.getView(R.id.dialog_register_password); EditText passwordConfirmEditText = (EditText) solo.getView(R.id.dialog_register_password_confirm); solo.clearEditText(passwordEditText); solo.clickOnView(passwordEditText); solo.enterText(passwordEditText, testPassword); solo.sendKey(Solo.ENTER); solo.clearEditText(passwordConfirmEditText); solo.clickOnView(passwordConfirmEditText); solo.enterText(passwordConfirmEditText, testPassword); solo.sendKey(Solo.ENTER); int buttonId = android.R.id.button1; solo.clickOnView(solo.getView(buttonId)); } private void fillNativeLoginDialog(String username, String password) { assertNotNull("Login Dialog is not shown.", solo.getText(login)); solo.sendKey(Solo.ENTER); // enter a username EditText userNameEditText = (EditText) solo.getView(R.id.dialog_login_username); solo.clearEditText(userNameEditText); solo.enterText(userNameEditText, username); solo.sendKey(Solo.ENTER); // enter a password EditText passwordEditText = (EditText) solo.getView(R.id.dialog_login_password); solo.clearEditText(passwordEditText); solo.clickOnView(passwordEditText); solo.enterText(passwordEditText, password); solo.sendKey(Solo.ENTER); solo.clickOnButton(login); } private void fillOAuthUsernameDialog(String username, boolean proceed) { solo.waitForText(oauthUsername); assertNotNull("Choose OAuth username dialog is not shown.", solo.getText(oauthUsername)); EditText userNameEditText = (EditText) solo.getView(R.id.dialog_signin_oauth_username); solo.clearEditText(userNameEditText); solo.enterText(userNameEditText, username); solo.sendKey(Solo.ENTER); if (proceed) { solo.clickOnButton(solo.getString(R.string.ok)); solo.waitForDialogToClose(); } } private void navigateToNativeRegistrationDialog() { solo.clickOnText(solo.getString(R.string.main_menu_upload)); solo.waitForText(signInDialogTitle); solo.clickOnButton(register); solo.waitForText(solo.getString(R.string.accountName)); } private void navigateToMenuNativeRegistrationDialog() { solo.sendKey(solo.MENU); solo.clickOnMenuItem(solo.getString(R.string.main_menu_login)); solo.waitForText(signInDialogTitle); solo.clickOnButton(register); solo.waitForText(solo.getString(R.string.accountName)); } private void navigateToNativeLoginDialog() { solo.clickOnText(solo.getString(R.string.main_menu_upload)); solo.waitForText(signInDialogTitle); solo.clickOnButton(login); solo.waitForDialogToOpen(); solo.sendKey(Solo.ENTER); solo.waitForText(solo.getString(R.string.username)); } private void navigateToMenuLoginDialog() { solo.sendKey(solo.MENU); solo.clickOnMenuItem(solo.getString(R.string.main_menu_login)); solo.waitForText(signInDialogTitle); solo.clickOnButton(login); solo.waitForDialogToOpen(); solo.sendKey(Solo.ENTER); solo.waitForText(solo.getString(R.string.username)); } private String getTestUserName() { return "testUser" + System.currentTimeMillis(); } private void clearSharedPreferences() { SharedPreferences defaultSharedPreferences = PreferenceManager.getDefaultSharedPreferences(getInstrumentation() .getTargetContext()); Editor edit = defaultSharedPreferences.edit(); edit.clear(); edit.commit(); } private void waitFacebookOrGoogleTestReady() { readConfigFile(); deleteTestUserAccountsOnServer(); clearSharedPreferences(); AccessToken.setCurrentAccessToken(null); while (!configFileRead || !testUserAccountsDeleted) { solo.sleep(200); } } private void readConfigFile() { configMap = UiTestUtils.readConfigFile(getInstrumentation().getContext()); configFileRead = true; } private void deleteTestUserAccountsOnServer() { DeleteTestUserTask deleteTestUserTask = new DeleteTestUserTask(getActivity()); deleteTestUserTask.setOnDeleteTestUserCompleteListener(this); deleteTestUserTask.execute(); } @Override public void onDeleteTestUserComplete(Boolean deleted) { assertTrue("Test user accounts could not be deleted on server!", deleted); testUserAccountsDeleted = true; } }