/* * 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.ui.dialog; import android.widget.Button; import android.widget.EditText; import org.catrobat.catroid.ProjectManager; import org.catrobat.catroid.R; import org.catrobat.catroid.content.Project; import org.catrobat.catroid.ui.MainMenuActivity; import org.catrobat.catroid.ui.ProjectActivity; import org.catrobat.catroid.uitest.util.BaseActivityInstrumentationTestCase; import org.catrobat.catroid.uitest.util.UiTestUtils; import org.catrobat.catroid.utils.UtilFile; import org.catrobat.catroid.utils.Utils; import java.io.File; public class NewProjectDialogTest extends BaseActivityInstrumentationTestCase<MainMenuActivity> { private String testingproject = UiTestUtils.PROJECTNAME1; private String testingProjectJustSpecialChars = UiTestUtils.JUST_SPECIAL_CHAR_PROJECT_NAME; private String testingProjectJustSpecialChars2 = UiTestUtils.JUST_SPECIAL_CHAR_PROJECT_NAME2; private String testingProjectWithNormalAndSpecialChars = UiTestUtils.NORMAL_AND_SPECIAL_CHAR_PROJECT_NAME2; private String testingProjectJustOneDot = UiTestUtils.JUST_ONE_DOT_PROJECT_NAME; private String testingProjectJustTwoDots = UiTestUtils.JUST_TWO_DOTS_PROJECT_NAME; public NewProjectDialogTest() { super(MainMenuActivity.class); } @Override protected void tearDown() throws Exception { UtilFile.deleteDirectory(new File(Utils.buildProjectPath(testingProjectJustSpecialChars))); UtilFile.deleteDirectory(new File(Utils.buildProjectPath(testingProjectJustSpecialChars2))); UtilFile.deleteDirectory(new File(Utils.buildProjectPath(testingProjectWithNormalAndSpecialChars))); UtilFile.deleteDirectory(new File(Utils.buildProjectPath(testingProjectJustOneDot))); UtilFile.deleteDirectory(new File(Utils.buildProjectPath(testingProjectJustTwoDots))); super.tearDown(); } public void testNewProjectDialog() { String buttonOkText = solo.getString(R.string.ok); solo.clickOnButton(solo.getString(R.string.main_menu_new)); assertTrue("dialog not loaded in 5 seconds", solo.waitForText(solo.getString(R.string.new_project_dialog_title), 0, 5000)); EditText newProject = (EditText) solo.getView(R.id.project_name_edittext); solo.enterText(newProject, testingproject); solo.clickOnButton(buttonOkText); assertTrue("dialog not loaded in 5 seconds", solo.waitForText(solo.getString(R.string.project_orientation_title), 0, 5000)); solo.clickOnButton(buttonOkText); solo.waitForActivity(ProjectActivity.class.getSimpleName()); assertEquals("New Project is not testingproject!", UiTestUtils.PROJECTNAME1, ProjectManager.getInstance().getCurrentProject().getName()); } public void testNewProjectJustSpecialChars() { String buttonOkText = solo.getString(R.string.ok); solo.clickOnButton(solo.getString(R.string.main_menu_new)); assertTrue("dialog not loaded in 5 seconds", solo.waitForText(solo.getString(R.string.new_project_dialog_title), 0, 5000)); EditText newProjectOne = (EditText) solo.getView(R.id.project_name_edittext); solo.enterText(newProjectOne, testingProjectJustSpecialChars); solo.clickOnButton(buttonOkText); assertTrue("dialog not loaded in 5 seconds", solo.waitForText(solo.getString(R.string.project_orientation_title), 0, 5000)); solo.clickOnButton(buttonOkText); solo.waitForActivity(ProjectActivity.class.getSimpleName()); assertEquals("New Project is not testingProjectJustSpecialChars!", UiTestUtils.JUST_SPECIAL_CHAR_PROJECT_NAME, ProjectManager.getInstance().getCurrentProject().getName()); } public void testNewProjectJustSpecialCharsTwo() { String buttonOkText = solo.getString(R.string.ok); solo.clickOnButton(solo.getString(R.string.main_menu_new)); assertTrue("dialog not loaded in 5 seconds", solo.waitForText(solo.getString(R.string.new_project_dialog_title), 0, 5000)); EditText newProjectTwo = (EditText) solo.getView(R.id.project_name_edittext); solo.enterText(newProjectTwo, testingProjectJustSpecialChars2); solo.clickOnButton(buttonOkText); assertTrue("dialog not loaded in 5 seconds", solo.waitForText(solo.getString(R.string.project_orientation_title), 0, 5000)); solo.clickOnButton(buttonOkText); solo.waitForActivity(ProjectActivity.class.getSimpleName()); assertEquals("New Project is not testingProjectJustSpecialChars2!", UiTestUtils.JUST_SPECIAL_CHAR_PROJECT_NAME2, ProjectManager.getInstance().getCurrentProject().getName()); } public void testNewProjectWithNormalAndSpecialCharacters() { String buttonOkText = solo.getString(R.string.ok); solo.clickOnButton(solo.getString(R.string.main_menu_new)); assertTrue("dialog not loaded in 5 seconds", solo.waitForText(solo.getString(R.string.new_project_dialog_title), 0, 5000)); EditText newProjectThree = (EditText) solo.getView(R.id.project_name_edittext); solo.enterText(newProjectThree, testingProjectWithNormalAndSpecialChars); solo.clickOnButton(buttonOkText); assertTrue("dialog not loaded in 5 seconds", solo.waitForText(solo.getString(R.string.project_orientation_title), 0, 5000)); solo.clickOnButton(buttonOkText); solo.waitForActivity(ProjectActivity.class.getSimpleName()); assertEquals("New Project is not testingProjectWithNormalAndSpecialChars!", UiTestUtils.NORMAL_AND_SPECIAL_CHAR_PROJECT_NAME2, ProjectManager.getInstance().getCurrentProject().getName()); } public void testNewProjectJustDot() { String buttonOkText = solo.getString(R.string.ok); solo.clickOnButton(solo.getString(R.string.main_menu_new)); assertTrue("dialog not loaded in 5 seconds", solo.waitForText(solo.getString(R.string.new_project_dialog_title), 0, 5000)); EditText newProjectOne = (EditText) solo.getView(R.id.project_name_edittext); solo.enterText(newProjectOne, testingProjectJustOneDot); solo.clickOnButton(buttonOkText); assertTrue("dialog not loaded in 5 seconds", solo.waitForText(solo.getString(R.string.project_orientation_title), 0, 5000)); solo.clickOnButton(buttonOkText); solo.waitForActivity(ProjectActivity.class.getSimpleName()); assertEquals("New Project is not testingProjectJustOneDot!", UiTestUtils.JUST_ONE_DOT_PROJECT_NAME, ProjectManager.getInstance().getCurrentProject().getName()); } public void testNewProjectJustDots() { String buttonOkText = solo.getString(R.string.ok); solo.clickOnButton(solo.getString(R.string.main_menu_new)); assertTrue("dialog not loaded in 5 seconds", solo.waitForText(solo.getString(R.string.new_project_dialog_title), 0, 5000)); EditText newProjectTwo = (EditText) solo.getView(R.id.project_name_edittext); solo.enterText(newProjectTwo, testingProjectJustTwoDots); solo.clickOnButton(buttonOkText); assertTrue("dialog not loaded in 5 seconds", solo.waitForText(solo.getString(R.string.project_orientation_title), 0, 5000)); solo.clickOnButton(buttonOkText); solo.waitForActivity(ProjectActivity.class.getSimpleName()); assertEquals("New Project is not testingProjectJustTwoDots!", UiTestUtils.JUST_TWO_DOTS_PROJECT_NAME, ProjectManager.getInstance().getCurrentProject().getName()); } public void testPositiveButtonDisabledOnCreate() { solo.clickOnButton(solo.getString(R.string.main_menu_new)); solo.sleep(500); Button okButton = solo.getButton(getActivity().getString(R.string.ok)); assertFalse("New project ok button is enabled!", okButton.isEnabled()); } public void testPositiveButtonChangesState() { solo.clickOnButton(solo.getString(R.string.main_menu_new)); solo.sleep(1000); Button okButton = solo.getButton(getActivity().getString(R.string.ok)); EditText editText = (EditText) solo.getView(R.id.project_name_edittext); assertTrue("EditText was not empty", editText.length() == 0); final String projectName = "MyTestProject"; UiTestUtils.enterText(solo, 0, projectName); assertEquals("Wrong projectname in EditText - should be MyTestProject", projectName, editText.getText() .toString()); assertTrue("New project ok button not enabled!", okButton.isEnabled()); UiTestUtils.enterText(solo, 0, ""); assertEquals("EditText was not empty", "", editText.getText().toString()); assertFalse("New project ok button not disabled!", okButton.isEnabled()); } public void testNewProjectDialogHeight() { solo.clickOnButton(solo.getString(R.string.main_menu_new)); solo.sleep(2000); EditText newProjectName = (EditText) solo.getView(R.id.project_name_edittext); int newProjectInputType = newProjectName.getInputType(); int newProjectInputTypeReference = android.text.InputType.TYPE_CLASS_TEXT | android.text.InputType.TYPE_TEXT_VARIATION_NORMAL; solo.sleep(2000); assertEquals("New project name field is not a text field", newProjectInputTypeReference, newProjectInputType); int projectNameNumberOfLines = newProjectName.getLineCount(); assertEquals("Project name field is not a text field", 1, projectNameNumberOfLines); } public void testCreateEmptyProject() { solo.clickOnButton(solo.getString(R.string.main_menu_new)); UiTestUtils.waitForText(solo, solo.getString(R.string.new_project_dialog_title)); solo.enterText(0, UiTestUtils.DEFAULT_TEST_PROJECT_NAME); solo.clickOnButton(solo.getString(R.string.ok)); assertTrue("dialog not loaded in 5 seconds", solo.waitForText(solo.getString(R.string.project_orientation_title), 0, 5000)); solo.clickOnButton(solo.getString(R.string.ok)); UiTestUtils.waitForText(solo, solo.getString(R.string.background)); Project project = ProjectManager.getInstance().getCurrentProject(); assertNotNull("Empty project shouldn't be null", project); assertEquals("Just background object should exist", 1, project.getDefaultScene().getSpriteList().size()); assertEquals("Just background object should exist", solo.getString(R.string.background), project.getDefaultScene() .getSpriteList().get(0).getName()); } }