/* * 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.fragment; import android.content.SharedPreferences; import android.preference.PreferenceManager; import android.provider.Settings; import android.util.Log; import android.view.View; import android.widget.CheckBox; import android.widget.EditText; import android.widget.ListView; import android.widget.TextView; import com.robotium.solo.Solo; import org.catrobat.catroid.ProjectManager; import org.catrobat.catroid.R; import org.catrobat.catroid.common.DefaultProjectHandler; import org.catrobat.catroid.content.BroadcastScript; import org.catrobat.catroid.content.Project; import org.catrobat.catroid.content.Script; import org.catrobat.catroid.content.Sprite; import org.catrobat.catroid.content.StartScript; import org.catrobat.catroid.content.bricks.AddItemToUserListBrick; import org.catrobat.catroid.content.bricks.Brick; import org.catrobat.catroid.content.bricks.ChangeVariableBrick; import org.catrobat.catroid.content.bricks.ForeverBrick; import org.catrobat.catroid.content.bricks.LoopEndBrick; import org.catrobat.catroid.content.bricks.SetVariableBrick; import org.catrobat.catroid.content.bricks.ShowBrick; import org.catrobat.catroid.content.bricks.UserBrick; import org.catrobat.catroid.formulaeditor.DataContainer; import org.catrobat.catroid.formulaeditor.UserList; import org.catrobat.catroid.formulaeditor.UserVariable; import org.catrobat.catroid.io.StorageHandler; import org.catrobat.catroid.test.utils.TestUtils; import org.catrobat.catroid.ui.BackPackActivity; import org.catrobat.catroid.ui.MainMenuActivity; import org.catrobat.catroid.ui.ScriptActivity; import org.catrobat.catroid.ui.SettingsActivity; import org.catrobat.catroid.ui.adapter.BackPackScriptListAdapter; import org.catrobat.catroid.ui.controller.BackPackListManager; import org.catrobat.catroid.ui.fragment.BackPackScriptListFragment; import org.catrobat.catroid.ui.fragment.FormulaEditorFragment; import org.catrobat.catroid.ui.fragment.ScriptFragment; import org.catrobat.catroid.uitest.util.BaseActivityInstrumentationTestCase; import org.catrobat.catroid.uitest.util.UiTestUtils; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Locale; public class ScriptFragmentTest extends BaseActivityInstrumentationTestCase<MainMenuActivity> { private static final String TAG = ScriptFragmentTest.class.getSimpleName(); private static final int TIME_TO_WAIT_BACKPACK = 800; private static final String DEFAULT_SCRIPT_GROUP_NAME = "Cat"; private static final String SECOND_SCRIPT_GROUP_NAME = "Dog"; private static final java.lang.String SECOND_SPRITE_NAME = "second_sprite"; private static final String TEST_LOOK_NAME = "testLook"; private static final String TEST_SOUND_NAME = "testSound"; private static final int VISIBLE = View.VISIBLE; private static final int INVISIBLE = View.INVISIBLE; private String unpack; private String backpack; private String backpackAdd; private String backpackTitle; private String delete; private String deleteDialogTitle; public ScriptFragmentTest() { super(MainMenuActivity.class); } @Override public void tearDown() throws Exception { // disable mindstorms bricks, if enabled in test SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getActivity()); if (sharedPreferences.getBoolean(SettingsActivity.SETTINGS_MINDSTORMS_NXT_BRICKS_ENABLED, false)) { sharedPreferences.edit().putBoolean(SettingsActivity.SETTINGS_MINDSTORMS_NXT_BRICKS_ENABLED, false).commit(); } super.tearDown(); } @Override public void setUp() throws Exception { super.setUp(); unpack = solo.getString(R.string.unpack); backpack = solo.getString(R.string.backpack); backpackAdd = solo.getString(R.string.backpack_add); backpackTitle = solo.getString(R.string.backpack_title); delete = solo.getString(R.string.delete); deleteDialogTitle = solo.getString(R.string.dialog_confirm_delete_backpack_group_title); UiTestUtils.clearBackPack(true); } public void testCopyScript() { List<Brick> brickList = UiTestUtils.createTestProject(); UiTestUtils.getIntoScriptActivityFromMainMenu(solo); UiTestUtils.openActionMode(solo, solo.getString(R.string.copy), R.id.copy); assertTrue("Bottom bar is visible", solo.getView(R.id.bottom_bar).getVisibility() == View.GONE); solo.clickOnCheckBox(0); String expectedTitle = getActivity().getResources().getQuantityString(R.plurals.number_of_bricks_to_copy, brickList.size() + 1, brickList.size() + 1); assertTrue("Title not as expected", solo.waitForText(expectedTitle, 0, 300, false, true)); UiTestUtils.acceptAndCloseActionMode(solo); int numberOfBricks = ProjectManager.getInstance().getCurrentProject().getDefaultScene().getSpriteList().get(0) .getNumberOfBricks(); assertEquals("No brick has been copied!", 12, numberOfBricks); } public void testCopyMultipleBricks() { UiTestUtils.createTestProject(); UiTestUtils.getIntoScriptActivityFromMainMenu(solo); UiTestUtils.openActionMode(solo, solo.getString(R.string.copy), R.id.copy); assertTrue("Bottom bar is visible", solo.getView(R.id.bottom_bar).getVisibility() == View.GONE); solo.clickOnCheckBox(1); solo.clickOnCheckBox(2); UiTestUtils.acceptAndCloseActionMode(solo); solo.waitForText(solo.getString(R.string.brick_hide)); int numberOfBricks = ProjectManager.getInstance().getCurrentProject().getDefaultScene().getSpriteList().get(0) .getNumberOfBricks(); assertEquals("No brick has been copied!", 8, numberOfBricks); } public void testCopyActionMode() { UiTestUtils.createTestProject(); UiTestUtils.getIntoScriptActivityFromMainMenu(solo); UiTestUtils.openActionMode(solo, solo.getString(R.string.copy), R.id.copy); assertTrue("Bottom bar is visible", solo.getView(R.id.bottom_bar).getVisibility() == View.GONE); String expectedTitle = getActivity().getResources().getQuantityString(R.plurals.number_of_bricks_to_copy, 0, 0); assertTrue("Title not as expected", solo.waitForText(expectedTitle, 0, 300, false, true)); solo.clickOnCheckBox(1); expectedTitle = getActivity().getResources().getQuantityString(R.plurals.number_of_bricks_to_copy, 1, 1); assertTrue("Title not as expected", solo.waitForText(expectedTitle, 0, 300, false, true)); UiTestUtils.acceptAndCloseActionMode(solo); solo.waitForText(solo.getString(R.string.brick_hide)); int numberOfBricks = ProjectManager.getInstance().getCurrentProject().getDefaultScene().getSpriteList().get(0) .getNumberOfBricks(); assertEquals("No brick has been copied!", 7, numberOfBricks); } public void testCopyAddedBrickWithoutAddedScript() { UiTestUtils.createTestProject(); UiTestUtils.getIntoScriptActivityFromMainMenu(solo); UiTestUtils.openActionMode(solo, solo.getString(R.string.delete), R.id.delete); solo.clickOnCheckBox(0); UiTestUtils.acceptAndCloseActionMode(solo); solo.clickOnButton(solo.getString(R.string.yes)); UiTestUtils.addNewBrick(solo, R.string.brick_wait); solo.sleep(500); UiTestUtils.dragFloatingBrickDownwards(solo); solo.sleep(500); UiTestUtils.openActionMode(solo, solo.getString(R.string.copy), R.id.copy); solo.clickOnCheckBox(1); UiTestUtils.acceptAndCloseActionMode(solo); int numberOfBricks = ProjectManager.getInstance().getCurrentProject().getDefaultScene().getSpriteList().get(0) .getNumberOfBricks(); assertEquals("No brick has been copied!", 2, numberOfBricks); } public void testCopyFromContextDialog() { UiTestUtils.createTestProject(); for (int index = 0; index < 5; ++index) { ProjectManager.getInstance().getCurrentProject().getDefaultScene().getSpriteList().get(0).getScript(0) .addBrick(new ShowBrick()); } UiTestUtils.getIntoScriptActivityFromMainMenu(solo); int numberOfBricks = ProjectManager.getInstance().getCurrentProject().getDefaultScene().getSpriteList().get(0) .getNumberOfBricks(); solo.clickOnText(solo.getString(R.string.brick_hide)); solo.sleep(200); solo.clickOnText(solo.getString(R.string.brick_context_dialog_copy_brick)); solo.sleep(200); ArrayList<Integer> yPosition = UiTestUtils.getListItemYPositions(solo, 0); int addedYPosition = UiTestUtils.getAddedListItemYPosition(solo); solo.drag(20, 20, addedYPosition, yPosition.get(yPosition.size() - 1) + 20, 20); solo.sleep(200); assertEquals("Brick was not copied", numberOfBricks + 1, ProjectManager.getInstance().getCurrentProject() .getDefaultScene().getSpriteList().get(0).getNumberOfBricks()); } public void testCopyCopiedBrick() { UiTestUtils.createTestProject(); UiTestUtils.getIntoScriptActivityFromMainMenu(solo); UiTestUtils.openActionMode(solo, solo.getString(R.string.delete), R.id.delete); solo.clickOnText(solo.getString(R.string.select_all).toUpperCase(Locale.getDefault())); UiTestUtils.acceptAndCloseActionMode(solo); solo.clickOnButton(solo.getString(R.string.yes)); UiTestUtils.addNewBrick(solo, R.string.brick_wait); solo.sleep(500); UiTestUtils.dragFloatingBrickDownwards(solo); solo.sleep(500); UiTestUtils.openActionMode(solo, solo.getString(R.string.copy), R.id.copy); solo.clickOnCheckBox(1); UiTestUtils.acceptAndCloseActionMode(solo); int numberOfBricks = ProjectManager.getInstance().getCurrentProject().getDefaultScene().getSpriteList().get(0) .getNumberOfBricks(); assertEquals("No brick has been copied!", 2, numberOfBricks); UiTestUtils.openActionMode(solo, solo.getString(R.string.copy), R.id.copy); solo.clickOnCheckBox(2); UiTestUtils.acceptAndCloseActionMode(solo); numberOfBricks = ProjectManager.getInstance().getCurrentProject().getDefaultScene().getSpriteList().get(0).getNumberOfBricks(); assertEquals("No brick has been copied!", 3, numberOfBricks); } public void testCreateNewBrickButton() { List<Brick> brickListToCheck = UiTestUtils.createTestProject(); UiTestUtils.getIntoScriptActivityFromMainMenu(solo); int brickCountInView = UiTestUtils.getScriptListView(solo).getCount(); int brickCountInList = brickListToCheck.size(); UiTestUtils.addNewBrick(solo, R.string.brick_wait); UiTestUtils.dragFloatingBrick(solo, 1); solo.sleep(100); assertTrue("Wait brick is not in List", solo.searchText(solo.getString(R.string.brick_wait))); assertEquals("Brick count in list view not correct", brickCountInView + 1, UiTestUtils.getScriptListView(solo) .getCount()); assertEquals("Brick count in brick list not correct", brickCountInList + 1, ProjectManager.getInstance() .getCurrentScript().getBrickList().size()); } public void testBrickCategoryDialog() { UiTestUtils.createTestProject(); UiTestUtils.getIntoScriptActivityFromMainMenu(solo); SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getActivity()); // enable mindstorms bricks, if disabled if (!sharedPreferences.getBoolean(SettingsActivity.SETTINGS_MINDSTORMS_NXT_BRICKS_ENABLED, false)) { sharedPreferences.edit().putBoolean(SettingsActivity.SETTINGS_MINDSTORMS_NXT_BRICKS_ENABLED, true).commit(); } UiTestUtils.clickOnBottomBar(solo, R.id.button_add); String categorySoundLabel = solo.getString(R.string.category_sound); String categoryLegoNXTLabel = solo.getString(R.string.category_lego_nxt); String categoryControlLabel = solo.getString(R.string.category_control); String categoryLooksLabel = solo.getString(R.string.category_looks); String categoryMotionLabel = solo.getString(R.string.category_motion); String categoryDataLabel = solo.getString(R.string.category_data); // Test if all Categories are present assertTrue("A category was not visible after opening BrickCategoryDialog", solo.searchText(categoryMotionLabel)); assertTrue("A category was not visible after opening BrickCategoryDialog", solo.searchText(categoryLooksLabel)); assertTrue("A category was not visible after opening BrickCategoryDialog", solo.searchText(categorySoundLabel)); assertTrue("A category was not visible after opening BrickCategoryDialog", solo.searchText(categoryControlLabel)); ListView fragmentListView = solo.getCurrentViews(ListView.class).get( solo.getCurrentViews(ListView.class).size() - 1); solo.scrollListToBottom(fragmentListView); assertTrue("A category was not visible after opening BrickCategoryDialog", solo.searchText(categoryDataLabel)); assertTrue("A category was not visible after opening BrickCategoryDialog", solo.searchText(categoryLegoNXTLabel)); // Test if the correct category opens when clicked String brickPlaceAtText = solo.getString(R.string.brick_place_at); String brickSetLook = solo.getString(R.string.brick_set_look); String brickPlaySound = solo.getString(R.string.brick_play_sound); String brickWhenStarted = solo.getString(R.string.brick_when_started); String brickLegoStopMotor = solo.getString(R.string.nxt_motor_stop); String brickSetVariable = solo.getString(R.string.brick_set_variable); solo.scrollListToTop(fragmentListView); solo.clickOnText(categoryMotionLabel); assertTrue("AddBrickDialog was not opened after selecting a category", solo.waitForText(brickPlaceAtText, 0, 2000)); solo.goBack(); solo.clickOnText(categoryLooksLabel); assertTrue("AddBrickDialog was not opened after selecting a category", solo.waitForText(brickSetLook, 0, 2000)); solo.goBack(); solo.clickOnText(categorySoundLabel); assertTrue("AddBrickDialog was not opened after selecting a category", solo.waitForText(brickPlaySound, 0, 2000)); solo.goBack(); solo.clickOnText(categoryControlLabel); assertTrue("AddBrickDialog was not opened after selecting a category", solo.waitForText(brickWhenStarted, 0, 2000)); solo.goBack(); fragmentListView = solo.getCurrentViews(ListView.class).get(solo.getCurrentViews(ListView.class).size() - 1); solo.scrollListToBottom(fragmentListView); solo.clickOnText(categoryDataLabel); assertTrue("AddBrickDialog was not opened after selecting a category", solo.waitForText(brickSetVariable, 0, 2000)); solo.goBack(); solo.clickOnText(categoryLegoNXTLabel); assertTrue("AddBrickDialog was not opened after selecting a category", solo.waitForText(brickLegoStopMotor, 0, 2000)); } /** * Tests issue#54. https://github.com/Catrobat/Catroid/issues/54 */ public void testOnlyAddControlBricks() { UiTestUtils.createEmptyProject(); UiTestUtils.getIntoScriptActivityFromMainMenu(solo); Sprite sprite = ProjectManager.getInstance().getCurrentSprite(); assertEquals("Project should contain only one script.", 1, sprite.getNumberOfScripts()); Script script = sprite.getScript(0); assertTrue("Single script isn't empty.", script.getBrickList().isEmpty()); List<Integer> yPositionList = UiTestUtils.getListItemYPositions(solo, 0); UiTestUtils.addNewBrick(solo, R.string.brick_broadcast_receive); solo.clickOnScreen(20, yPositionList.get(0) + 20); solo.sleep(200); assertEquals("Two control bricks should be added.", 2, sprite.getNumberOfScripts()); assertTrue("First script isn't a start script.", sprite.getScript(0) instanceof StartScript); assertTrue("Second script isn't a broadcast script.", sprite.getScript(1) instanceof BroadcastScript); } public void testCopyButtonNotVisibleScriptCategory() { UiTestUtils.createTestProject(); UiTestUtils.getIntoScriptActivityFromMainMenu(solo); UiTestUtils.clickOnBottomBar(solo, R.id.button_add); assertFalse("Copy Button visible!", UiTestUtils.menuButtonVisible(solo, R.id.copy)); String categoryLooksLabel = solo.getString(R.string.category_looks); solo.clickOnText(categoryLooksLabel); assertFalse("Copy Button visible!", UiTestUtils.menuButtonVisible(solo, R.id.copy)); } public void testSimpleDragNDrop() { List<Brick> brickListToCheck = UiTestUtils.createTestProject(); UiTestUtils.getIntoScriptActivityFromMainMenu(solo); ArrayList<Integer> yPositionList = UiTestUtils.getListItemYPositions(solo, 0); assertTrue("Test project brick list smaller than expected", yPositionList.size() >= 6); UiTestUtils.longClickAndDrag(solo, 10, yPositionList.get(4), 10, yPositionList.get(2) - 3, 20); ArrayList<Brick> brickList = ProjectManager.getInstance().getCurrentScript().getBrickList(); assertEquals("Brick count not equal before and after dragging & dropping", brickListToCheck.size(), brickList.size()); assertEquals("Incorrect brick order after dragging & dropping", brickListToCheck.get(0), brickList.get(0)); assertEquals("Incorrect brick order after dragging & dropping", brickListToCheck.get(3), brickList.get(1)); assertEquals("Incorrect brick order after dragging & dropping", brickListToCheck.get(1), brickList.get(2)); assertEquals("Incorrect brick order after dragging & dropping", brickListToCheck.get(2), brickList.get(3)); assertEquals("Incorrect brick order after dragging & dropping", brickListToCheck.get(4), brickList.get(4)); } public void testDragNDropNestedBrick() { List<Brick> brickListToCheck = UiTestUtils.createTestProjectNestedBricks(); UiTestUtils.getIntoScriptActivityFromMainMenu(solo); ArrayList<Integer> yPositionList = UiTestUtils.getListItemYPositions(solo, 0); assertTrue("Test project brick list smaller than expected", yPositionList.size() == 8); UiTestUtils.longClickAndDrag(solo, 10, yPositionList.get(1), 10, yPositionList.get(6) - 3, 20); ArrayList<Brick> brickList = ProjectManager.getInstance().getCurrentScript().getBrickList(); assertEquals("Incorrect brick order after dragging & dropping", brickListToCheck.get(5), brickList.get(0)); assertEquals("Incorrect brick order after dragging & dropping", brickListToCheck.get(0), brickList.get(1)); assertEquals("Incorrect brick order after dragging & dropping", brickListToCheck.get(1), brickList.get(2)); assertEquals("Incorrect brick order after dragging & dropping", brickListToCheck.get(2), brickList.get(3)); assertEquals("Incorrect brick order after dragging & dropping", brickListToCheck.get(3), brickList.get(4)); assertEquals("Incorrect brick order after dragging & dropping", brickListToCheck.get(4), brickList.get(5)); assertEquals("Incorrect brick order after dragging & dropping", brickListToCheck.get(6), brickList.get(6)); assertEquals("Incorrect brick order after dragging & dropping", brickListToCheck.get(7), brickList.get(7)); } public void testDeleteActionMode() { List<Brick> brickListToCheck = UiTestUtils.createTestProject(); UiTestUtils.getIntoScriptActivityFromMainMenu(solo); UiTestUtils.openActionMode(solo, solo.getString(R.string.delete), R.id.delete); assertTrue("Bottom bar is visible", solo.getView(R.id.bottom_bar).getVisibility() == View.GONE); String expectedTitle = getActivity().getResources().getQuantityString(R.plurals.number_of_bricks_to_delete, 0, 0); assertTrue("Title not as expected", solo.waitForText(expectedTitle, 0, 300, false, true)); solo.clickOnCheckBox(0); expectedTitle = getActivity().getResources().getQuantityString(R.plurals.number_of_bricks_to_delete, brickListToCheck.size() + 1, brickListToCheck.size() + 1); assertTrue("Title not as expected", solo.waitForText(expectedTitle, 0, 300, false, true)); UiTestUtils.acceptAndCloseActionMode(solo); solo.clickOnButton(solo.getString(R.string.yes)); assertFalse("ActionMode didn't disappear", solo.waitForText(solo.getString(R.string.delete), 0, 50)); int numberOfBricks = ProjectManager.getInstance().getCurrentProject().getDefaultScene().getSpriteList().get(0) .getNumberOfBricks(); assertEquals("Not all Bricks have been deleted!", 0, numberOfBricks); } public void testCheckboxActionModeEntireLine() { UiTestUtils.createTestProject(); UiTestUtils.getIntoScriptActivityFromMainMenu(solo); UiTestUtils.openActionMode(solo, solo.getString(R.string.delete), R.id.delete); assertTrue("Bottom bar is visible", solo.getView(R.id.bottom_bar).getVisibility() == View.GONE); String expectedTitle = getActivity().getResources().getQuantityString(R.plurals.number_of_bricks_to_delete, 0, 0); assertTrue("Title not as expected", solo.waitForText(expectedTitle, 0, 300, false, true)); UiTestUtils.clickOnCheckBox(solo, 1); expectedTitle = getActivity().getResources().getQuantityString(R.plurals.number_of_bricks_to_delete, 1, 1); assertTrue("Title not as expected" + expectedTitle, solo.waitForText(expectedTitle, 0, 300, false, true)); UiTestUtils.acceptAndCloseActionMode(solo); solo.clickOnButton(solo.getString(R.string.yes)); assertFalse("ActionMode didn't disappear", solo.waitForText(solo.getString(R.string.delete), 0, 50)); } public void testDeleteActionModeSelectAll() { UiTestUtils.createTestProject(); UiTestUtils.getIntoScriptActivityFromMainMenu(solo); UiTestUtils.openActionMode(solo, solo.getString(R.string.delete), R.id.delete); assertTrue("Bottom bar is visible", solo.getView(R.id.bottom_bar).getVisibility() == View.GONE); String selectAll = solo.getString(R.string.select_all).toUpperCase(Locale.getDefault()); UiTestUtils.clickOnText(solo, selectAll); for (CheckBox checkBox : solo.getCurrentViews(CheckBox.class)) { assertTrue("CheckBox is not Checked!", checkBox.isChecked()); } assertFalse("Select All is still shown", solo.waitForText(selectAll, 1, 200, false, true)); UiTestUtils.acceptAndCloseActionMode(solo); String yes = solo.getString(R.string.yes); UiTestUtils.clickOnText(solo, yes); int numberOfBricks = ProjectManager.getInstance().getCurrentProject().getDefaultScene().getSpriteList().get(0) .getNumberOfBricks(); assertEquals("Not all Bricks have been deleted!", 0, numberOfBricks); } public void testDeleteActionModeBack() { List<Brick> brickListToCheck = UiTestUtils.createTestProject(); UiTestUtils.getIntoScriptActivityFromMainMenu(solo); UiTestUtils.openActionMode(solo, solo.getString(R.string.delete), R.id.delete); assertTrue("Bottom bar is visible", solo.getView(R.id.bottom_bar).getVisibility() == View.GONE); solo.clickOnCheckBox(0); solo.goBack(); int numberOfBricks = ProjectManager.getInstance().getCurrentProject().getDefaultScene().getSpriteList().get(0) .getNumberOfBricks(); assertEquals("No Brick should have been deleted!", brickListToCheck.size(), numberOfBricks); } public void testIfLogicReferences() { UiTestUtils.createTestProject(UiTestUtils.PROJECTNAME1); UiTestUtils.createTestProjectIfBricks(); UiTestUtils.getIntoScriptActivityFromMainMenu(solo); backPackFirstScriptWithContextMenu(DEFAULT_SCRIPT_GROUP_NAME); assertTrue("Script wasn't backpacked!", solo.waitForText(DEFAULT_SCRIPT_GROUP_NAME, 0, TIME_TO_WAIT_BACKPACK)); solo.sleep(TIME_TO_WAIT_BACKPACK); clickOnContextMenuItem(DEFAULT_SCRIPT_GROUP_NAME, unpack); solo.waitForDialogToClose(TIME_TO_WAIT_BACKPACK); solo.sleep(TIME_TO_WAIT_BACKPACK); Script unpackedScript = ProjectManager.getInstance().getCurrentScene().getSpriteList().get(0).getScript(1); assertTrue("if bricks have wrong or no references after unpacking", ProjectManager.getInstance() .checkCurrentScript(unpackedScript, false)); } public void testDeleteActionModeAllBricks() { UiTestUtils.createTestProjectWithEveryBrick(); UiTestUtils.getIntoScriptActivityFromMainMenu(solo); UiTestUtils.openActionMode(solo, solo.getString(R.string.delete), R.id.delete); assertTrue("Bottom bar is visible", solo.getView(R.id.bottom_bar).getVisibility() == View.GONE); solo.clickOnCheckBox(0); UiTestUtils.acceptAndCloseActionMode(solo); solo.clickOnButton(solo.getString(R.string.yes)); assertFalse("ActionMode didn't disappear", solo.waitForText(solo.getString(R.string.delete), 0, 50)); int numberOfBricks = ProjectManager.getInstance().getCurrentProject().getDefaultScene().getSpriteList().get(0) .getNumberOfBricks(); assertEquals("Not all Bricks have been deleted!", 0, numberOfBricks); } public void testDeleteActionModeTwoScripts() { UiTestUtils.createTestProjectWithTwoScripts(); UiTestUtils.getIntoScriptActivityFromMainMenu(solo); UiTestUtils.openActionMode(solo, solo.getString(R.string.delete), R.id.delete); assertTrue("Bottom bar is visible", solo.getView(R.id.bottom_bar).getVisibility() == View.GONE); solo.clickOnCheckBox(1); solo.clickOnCheckBox(2); solo.clickOnCheckBox(4); solo.clickOnCheckBox(5); UiTestUtils.acceptAndCloseActionMode(solo); solo.clickOnButton(solo.getString(R.string.yes)); assertFalse("ActionMode didn't disappear", solo.waitForText(solo.getString(R.string.delete), 0, 50)); int numberOfBricks = ProjectManager.getInstance().getCurrentProject().getDefaultScene().getSpriteList().get(0) .getNumberOfBricks(); int numberOfScripts = ProjectManager.getInstance().getCurrentProject().getDefaultScene().getSpriteList().get(0) .getNumberOfScripts(); assertEquals("There should be no bricks", 0, numberOfBricks); assertEquals("Expected two ScriptBricks", 2, numberOfScripts); } public void testDeleteActionModeNestedLoops() { UiTestUtils.createTestProjectNestedLoops(); UiTestUtils.getIntoScriptActivityFromMainMenu(solo); UiTestUtils.openActionMode(solo, solo.getString(R.string.delete), R.id.delete); assertTrue("Bottom bar is visible", solo.getView(R.id.bottom_bar).getVisibility() == View.GONE); UiTestUtils.clickOnCheckBox(solo, 3); String expectedTitle = getActivity().getResources().getQuantityString(R.plurals.number_of_bricks_to_delete, 2, 2); assertTrue("Title not as expected", solo.waitForText(expectedTitle, 0, 300, false, true)); UiTestUtils.clickOnCheckBox(solo, 4); assertEquals("Fourth checkbox should be checked", true, solo.getCurrentViews(CheckBox.class).get(4).isChecked()); solo.sleep(500); UiTestUtils.clickOnCheckBox(solo, 1); expectedTitle = getActivity().getResources().getQuantityString(R.plurals.number_of_bricks_to_delete, 5, 5); assertTrue("Title not as expected", solo.waitForText(expectedTitle, 0, 300, false, true)); UiTestUtils.clickOnCheckBox(solo, 1); UiTestUtils.acceptAndCloseActionMode(solo); solo.clickOnButton(solo.getString(R.string.yes)); assertFalse("ActionMode didn't disappear", solo.waitForText(solo.getString(R.string.delete), 0, 50)); int numberOfBricks = ProjectManager.getInstance().getCurrentProject().getDefaultScene().getSpriteList().get(0) .getNumberOfBricks(); int numberOfForeverBricks = 0; int numberOfEndBricks = 0; ListView dragAndDropListView = solo.getCurrentViews(ListView.class).get(0); List<Brick> currentBrickList = new ArrayList<Brick>(); for (int position = 0; position < dragAndDropListView.getChildCount(); position++) { currentBrickList.add((Brick) dragAndDropListView.getItemAtPosition(position)); } for (Brick currentBrick : currentBrickList) { if (currentBrick instanceof ForeverBrick) { numberOfForeverBricks++; } if (currentBrick instanceof LoopEndBrick) { numberOfEndBricks++; } } assertEquals("There should be only 1 ForeverBrick", 1, numberOfForeverBricks); assertEquals("There should be only 1 LoopEndBrick", 1, numberOfEndBricks); assertEquals("Wrong number of bricks left", 3, numberOfBricks); } public void testDeleteActionModeIfBricks() { UiTestUtils.createTestProjectIfBricks(); UiTestUtils.getIntoScriptActivityFromMainMenu(solo); UiTestUtils.openActionMode(solo, solo.getString(R.string.delete), R.id.delete); assertTrue("Bottom bar is visible", solo.getView(R.id.bottom_bar).getVisibility() == View.GONE); solo.clickOnCheckBox(2); solo.clickOnCheckBox(5); String expectedTitle = getActivity().getResources().getQuantityString(R.plurals.number_of_bricks_to_delete, 4, 4); assertTrue("Title not as expected", solo.waitForText(expectedTitle, 0, 300, false, true)); solo.sleep(500); solo.clickOnCheckBox(5); solo.clickOnCheckBox(2); expectedTitle = getActivity().getResources().getQuantityString(R.plurals.number_of_bricks_to_delete, 0, 0); assertTrue("Title not as expected", solo.waitForText(expectedTitle, 0, 300, false, true)); solo.sleep(300); solo.clickOnCheckBox(3); expectedTitle = getActivity().getResources().getQuantityString(R.plurals.number_of_bricks_to_delete, 3, 3); assertTrue("Title not as expected", solo.waitForText(expectedTitle, 0, 300, false, true)); UiTestUtils.acceptAndCloseActionMode(solo); solo.clickOnButton(solo.getString(R.string.yes)); assertFalse("ActionMode didn't disappear", solo.waitForText(solo.getString(R.string.delete), 0, 50)); int numberOfBricks = ProjectManager.getInstance().getCurrentProject().getDefaultScene().getSpriteList().get(0) .getNumberOfBricks(); ListView dragAndDropListView = solo.getCurrentViews(ListView.class).get(0); List<Brick> currentBrickList = new ArrayList<Brick>(); for (int position = 0; position < dragAndDropListView.getChildCount(); position++) { currentBrickList.add((Brick) dragAndDropListView.getItemAtPosition(position)); } assertEquals("Wrong number of bricks left", 2, numberOfBricks); } public void testDeleteItem() { List<Brick> brickListToCheck = UiTestUtils.createTestProject(); UiTestUtils.getIntoScriptActivityFromMainMenu(solo); ArrayList<Integer> yPositionList = UiTestUtils.getListItemYPositions(solo, 0); assertTrue("Test project brick list smaller than expected", yPositionList.size() >= 6); solo.waitForText(solo.getString(R.string.brick_when_started)); solo.clickOnText(solo.getString(R.string.brick_when_started)); solo.waitForText(solo.getString(R.string.brick_context_dialog_delete_script)); solo.clickOnText(solo.getString(R.string.brick_context_dialog_delete_script)); solo.waitForText(solo.getString(R.string.no)); solo.clickOnButton(solo.getString(R.string.no)); solo.sleep(500); ArrayList<Brick> brickList = ProjectManager.getInstance().getCurrentScript().getBrickList(); solo.clickOnText(solo.getString(R.string.brick_show)); solo.waitForText(solo.getString(R.string.brick_context_dialog_delete_brick)); solo.clickOnText(solo.getString(R.string.brick_context_dialog_delete_brick)); solo.waitForText(solo.getString(R.string.yes)); solo.clickOnButton(solo.getString(R.string.yes)); if (!solo.waitForView(ListView.class, 0, 5000)) { fail("Dialog does not close in 5 sec!"); } brickList = ProjectManager.getInstance().getCurrentScript().getBrickList(); assertEquals("Wrong size of BrickList - one item should be removed", brickListToCheck.size() - 1, brickList.size()); assertEquals("Incorrect brick order after deleting a brick", brickListToCheck.get(0), brickList.get(0)); assertEquals("Incorrect brick order after deleting a brick", brickListToCheck.get(2), brickList.get(1)); assertEquals("Incorrect brick order after deleting a brick", brickListToCheck.get(3), brickList.get(2)); assertEquals("Incorrect brick order after deleting a brick", brickListToCheck.get(4), brickList.get(3)); } public void testEmptyView() { UiTestUtils.createTestProject(); UiTestUtils.getIntoScriptActivityFromMainMenu(solo); int numberOfBricks = ProjectManager.getInstance().getCurrentProject().getDefaultScene().getSpriteList().get(0) .getNumberOfBricks(); assertTrue("There are no bricks!", numberOfBricks > 0); TextView emptyViewHeading = (TextView) solo.getCurrentActivity() .findViewById(R.id.fragment_script_text_heading); TextView emptyViewDescription = (TextView) solo.getCurrentActivity().findViewById( R.id.fragment_script_text_description); // The Views are gone, we can still make assumptions about them assertEquals("Empty View heading is not correct", solo.getString(R.string.scripts), emptyViewHeading.getText() .toString()); assertEquals("Empty View description is not correct", solo.getString(R.string.fragment_script_text_description), emptyViewDescription.getText().toString()); assertEquals("Empty View shown although there are items in the list!", View.GONE, solo.getView(android.R.id.empty).getVisibility()); UiTestUtils.openActionMode(solo, solo.getString(R.string.delete), R.id.delete); UiTestUtils.clickOnCheckBox(solo, 0); UiTestUtils.acceptAndCloseActionMode(solo); solo.clickOnButton(solo.getString(R.string.yes)); solo.sleep(500); numberOfBricks = ProjectManager.getInstance().getCurrentProject().getDefaultScene().getSpriteList().get(0).getNumberOfBricks(); assertEquals("Not all Bricks have been deleted!", 0, numberOfBricks); assertEquals("Empty View not shown although there are items in the list!", View.VISIBLE, solo.getView(android.R.id.empty).getVisibility()); } public void testBackgroundBricks() { TestUtils.clearProject(solo.getString(R.string.default_project_name)); Project defaultProject = null; try { defaultProject = DefaultProjectHandler.createAndSaveDefaultProject( UiTestUtils.DEFAULT_TEST_PROJECT_NAME, getInstrumentation().getTargetContext()); } catch (IOException e) { Log.e(TAG, "Could not create default project", e); fail("Could not create default project"); } if (defaultProject == null) { fail("Could not create default project"); } ProjectManager.getInstance().setProject(defaultProject); StorageHandler.getInstance().saveProject(defaultProject); UiTestUtils.getIntoScriptActivityFromMainMenu(solo); String categoryLooks = solo.getString(R.string.category_looks); String categoryMotion = solo.getString(R.string.category_motion); String setBackground = solo.getString(R.string.brick_set_background); String nextBackground = solo.getString(R.string.brick_next_background); String comeToFront = solo.getString(R.string.brick_come_to_front); String ifOnEdgeBounce = solo.getString(R.string.brick_if_on_edge_bounce); UiTestUtils.clickOnBottomBar(solo, R.id.button_add); solo.clickOnText(categoryLooks); assertTrue("SetLookBrick was not renamed for background sprite", solo.searchText(setBackground)); solo.clickOnText(setBackground); solo.sleep(500); UiTestUtils.dragFloatingBrickDownwards(solo); solo.sleep(500); assertTrue("SetLookBrick was not renamed for background sprite", solo.searchText(setBackground)); UiTestUtils.clickOnBottomBar(solo, R.id.button_add); solo.clickOnText(categoryLooks); assertTrue("NextLookBrick was not renamed for background sprite", solo.searchText(nextBackground)); solo.clickOnText(nextBackground); solo.sleep(500); UiTestUtils.dragFloatingBrickDownwards(solo); solo.sleep(500); assertTrue("NextLookBrick was not renamed for background sprite", solo.searchText(nextBackground)); UiTestUtils.clickOnBottomBar(solo, R.id.button_add); solo.clickOnText(categoryMotion); assertFalse("ComeToFrontBrick is in the brick list!", solo.searchText(comeToFront)); assertFalse("IfOnEdgeBounceBrick is in the brick list!", solo.searchText(ifOnEdgeBounce)); } public void testOptionsMenuItems() { UiTestUtils.createTestProject(); UiTestUtils.getIntoScriptActivityFromMainMenu(solo); int timeToWait = 200; String rename = solo.getString(R.string.rename); String showDetails = solo.getString(R.string.show_details); //String delete = solo.getString(R.string.delete); UiTestUtils.openOptionsMenu(solo); //TODO: refactor this assertion //this works with the current Jenkins devices. On other devices with a different screen //size "delete" can also be an options menu item and should be asserted. //assertFalse("Found menu item '" + delete + "'", solo.waitForText(delete, 1, timeToWait, false, true)); assertFalse("Found menu item '" + rename + "'", solo.waitForText(rename, 1, timeToWait, false, true)); assertFalse("Found menu item '" + showDetails + "'", solo.waitForText(showDetails, 1, timeToWait, false, true)); } public void testBottombarElementsVisibilty() { UiTestUtils.getIntoScriptActivityFromMainMenu(solo); assertTrue("Bottombar is not visible", solo.getView(R.id.bottom_bar).getVisibility() == View.VISIBLE); assertTrue("Add button is not visible", solo.getView(R.id.button_add).getVisibility() == View.VISIBLE); assertTrue("Play button is not visible", solo.getView(R.id.button_play).getVisibility() == View.VISIBLE); assertTrue("Bottombar separator is not visible", solo.getView(R.id.bottom_bar_separator).getVisibility() == View.VISIBLE); } @SuppressWarnings("deprecation") public void testReturnFromStageAfterInvokingFormulaEditor() { if (Settings.System.getInt(getActivity().getContentResolver(), Settings.System.ALWAYS_FINISH_ACTIVITIES, 0) == 0) { Log.i(TAG, "Developer option 'Don't keep activities' is not set."); return; } UiTestUtils.createTestProject(); UiTestUtils.getIntoScriptActivityFromMainMenu(solo); solo.clickOnView(solo.getView(R.id.brick_set_size_to_edit_text)); solo.waitForFragmentByTag(FormulaEditorFragment.FORMULA_EDITOR_FRAGMENT_TAG); solo.goBack(); UiTestUtils.clickOnBottomBar(solo, R.id.button_play); solo.goBack(); solo.goBack(); solo.assertCurrentActivity("Wrong Activity", ScriptActivity.class); } public void testSelectAllActionModeButton() { UiTestUtils.createTestProject(); UiTestUtils.getIntoScriptActivityFromMainMenu(solo); String selectAll = solo.getString(R.string.select_all).toUpperCase(Locale.getDefault()); UiTestUtils.openActionMode(solo, solo.getString(R.string.copy), R.id.copy); assertTrue("Select All is not shown", solo.getView(R.id.select_all).isShown()); UiTestUtils.clickOnText(solo, selectAll); assertFalse("Select All is still shown", solo.getView(R.id.select_all).isShown()); UiTestUtils.clickOnListItem(solo, 0); assertTrue("Select All is not shown", solo.getView(R.id.select_all).isShown()); UiTestUtils.clickOnListItem(solo, 1); assertTrue("Select All is not shown", solo.getView(R.id.select_all).isShown()); UiTestUtils.clickOnListItem(solo, 0); assertFalse("Select All is still shown", solo.getView(R.id.select_all).isShown()); solo.goBack(); UiTestUtils.openActionMode(solo, solo.getString(R.string.delete), R.id.delete); assertTrue("Select All is not shown", solo.getView(R.id.select_all).isShown()); UiTestUtils.clickOnText(solo, selectAll); assertFalse("Select All is still shown", solo.getView(R.id.select_all).isShown()); UiTestUtils.clickOnListItem(solo, 0); assertTrue("Select All is not shown", solo.getView(R.id.select_all).isShown()); UiTestUtils.clickOnListItem(solo, 1); assertTrue("Select All is not shown", solo.getView(R.id.select_all).isShown()); UiTestUtils.clickOnListItem(solo, 0); assertFalse("Select All is still shown", solo.getView(R.id.select_all).isShown()); } public void testBackpackScriptsContextMenu() { UiTestUtils.createTestProject(); UiTestUtils.getIntoScriptActivityFromMainMenu(solo); backPackFirstScriptWithContextMenu(DEFAULT_SCRIPT_GROUP_NAME); assertTrue("BackPack title didn't show up", solo.waitForText(backpackTitle, 0, TIME_TO_WAIT_BACKPACK)); assertTrue("Script wasn't backpacked!", solo.waitForText(DEFAULT_SCRIPT_GROUP_NAME, 0, TIME_TO_WAIT_BACKPACK)); } public void testBackpackScriptsDoubleContextMenu() { UiTestUtils.createTestProject(); UiTestUtils.getIntoScriptActivityFromMainMenu(solo); backPackFirstScriptWithContextMenu(DEFAULT_SCRIPT_GROUP_NAME); solo.goBack(); backPackFirstScriptWithContextMenu(SECOND_SCRIPT_GROUP_NAME); assertTrue("BackPack title didn't show up", solo.waitForText(backpackTitle, 0, TIME_TO_WAIT_BACKPACK)); assertTrue("Script wasn't backpacked!", solo.waitForText(DEFAULT_SCRIPT_GROUP_NAME, 0, TIME_TO_WAIT_BACKPACK)); assertTrue("Script wasn't backpacked!", solo.waitForText(SECOND_SCRIPT_GROUP_NAME, 0, TIME_TO_WAIT_BACKPACK)); } public void testBackPackScriptsSimpleUnpackingContextMenu() { UiTestUtils.createTestProjectWithEveryBrick(); UiTestUtils.getIntoScriptActivityFromMainMenu(solo); int brickCountInView = UiTestUtils.getScriptListView(solo).getCount(); int numberOfBricksInBrickList = ProjectManager.getInstance().getCurrentSprite().getNumberOfBricks(); backPackFirstScriptWithContextMenu(DEFAULT_SCRIPT_GROUP_NAME); assertTrue("Script wasn't backpacked!", solo.waitForText(DEFAULT_SCRIPT_GROUP_NAME, 0, TIME_TO_WAIT_BACKPACK)); unpackScriptGroup(DEFAULT_SCRIPT_GROUP_NAME, unpack); solo.waitForFragmentByTag(ScriptFragment.TAG); solo.sleep(500); assertEquals("Brick count in list view not correct", brickCountInView + 7, UiTestUtils.getScriptListView(solo) .getCount()); assertEquals("Brick count in current sprite not correct", numberOfBricksInBrickList + 6, ProjectManager.getInstance().getCurrentSprite().getNumberOfBricks()); UiTestUtils.openBackPack(solo); assertTrue("Script wasn't kept in backpack!", solo.waitForText(DEFAULT_SCRIPT_GROUP_NAME, 0, TIME_TO_WAIT_BACKPACK)); } public void testBackPackMultipleUnpackingVariablesWithSameName() { UiTestUtils.createTestProjectWithUserVariablesAndUserBrick(); UiTestUtils.getIntoScriptActivityFromMainMenu(solo); checkNumberOfElementsInDataContainer(); backPackFirstScriptWithContextMenu(DEFAULT_SCRIPT_GROUP_NAME); assertTrue("Script wasn't backpacked!", solo.waitForText(DEFAULT_SCRIPT_GROUP_NAME, 0, TIME_TO_WAIT_BACKPACK)); unpackScriptGroup(DEFAULT_SCRIPT_GROUP_NAME, unpack); solo.waitForFragmentByTag(ScriptFragment.TAG); solo.sleep(500); checkNumberOfElementsInDataContainer(); } public void testBackPackAndUnPackFromDifferentProgrammes() { UiTestUtils.createTestProject(UiTestUtils.PROJECTNAME1); UiTestUtils.createTestProject(); UiTestUtils.getIntoScriptActivityFromMainMenu(solo); backPackFirstScriptWithContextMenu(DEFAULT_SCRIPT_GROUP_NAME); assertTrue("Script wasn't backpacked!", solo.waitForText(DEFAULT_SCRIPT_GROUP_NAME, 0, TIME_TO_WAIT_BACKPACK)); UiTestUtils.switchToProgrammesBackground(solo, UiTestUtils.PROJECTNAME1, "cat"); solo.clickOnText(solo.getString(R.string.scripts)); solo.sleep(TIME_TO_WAIT_BACKPACK); int brickCountInView = UiTestUtils.getScriptListView(solo).getCount(); int numberOfBricksInBrickList = ProjectManager.getInstance().getCurrentSprite().getNumberOfBricks(); UiTestUtils.openBackPack(solo); solo.sleep(TIME_TO_WAIT_BACKPACK); clickOnContextMenuItem(DEFAULT_SCRIPT_GROUP_NAME, unpack); solo.waitForDialogToClose(TIME_TO_WAIT_BACKPACK); solo.sleep(TIME_TO_WAIT_BACKPACK); assertEquals("Brick count in list view not correct", brickCountInView + 7, UiTestUtils.getScriptListView(solo) .getCount()); assertEquals("Brick count in current sprite not correct", numberOfBricksInBrickList + 6, ProjectManager.getInstance().getCurrentSprite().getNumberOfBricks()); } public void testBackPackAndUnPackFromDifferentSprites() { UiTestUtils.createTestProjectWithTwoSprites(UiTestUtils.DEFAULT_TEST_PROJECT_NAME); UiTestUtils.getIntoScriptActivityFromMainMenu(solo); backPackFirstScriptWithContextMenu(DEFAULT_SCRIPT_GROUP_NAME); assertTrue("Script wasn't backpacked!", solo.waitForText(DEFAULT_SCRIPT_GROUP_NAME, 0, TIME_TO_WAIT_BACKPACK)); solo.goBack(); solo.goBack(); solo.goBack(); solo.clickOnText(SECOND_SPRITE_NAME); solo.clickOnText(solo.getString(R.string.scripts)); solo.sleep(TIME_TO_WAIT_BACKPACK); int brickCountInView = UiTestUtils.getScriptListView(solo).getCount(); int numberOfBricksInBrickList = ProjectManager.getInstance().getCurrentSprite().getNumberOfBricks(); UiTestUtils.openBackPackFromEmptyAdapter(solo); solo.sleep(TIME_TO_WAIT_BACKPACK); clickOnContextMenuItem(DEFAULT_SCRIPT_GROUP_NAME, unpack); solo.waitForDialogToClose(TIME_TO_WAIT_BACKPACK); solo.sleep(TIME_TO_WAIT_BACKPACK); assertEquals("Brick count in list view not correct", brickCountInView + 7, UiTestUtils.getScriptListView(solo) .getCount()); assertEquals("Brick count in current sprite not correct", numberOfBricksInBrickList + 6, ProjectManager.getInstance().getCurrentSprite().getNumberOfBricks()); } public void testBackPackActionModeCheckingAndTitle() { UiTestUtils.createTestProjectWithTwoScripts(); UiTestUtils.getIntoScriptActivityFromMainMenu(solo); UiTestUtils.openBackPackActionModeWhenEmpty(solo); assertTrue("Bottom bar is visible", solo.getView(R.id.bottom_bar).getVisibility() == View.GONE); int timeToWaitForTitle = 300; String expectedBricksFirstScript = getActivity().getResources().getQuantityString(R.plurals.number_of_bricks_to_backpack, 3, 3); String expectedBricksSecondScript = getActivity().getResources().getQuantityString(R.plurals .number_of_bricks_to_backpack, 6, 6); assertFalse("Bricks should not be displayed in title", solo.waitForText(expectedBricksFirstScript, 3, 300, false, true)); checkIfCheckboxesAreCorrectlyCheckedAndVisible(false, false); String expectedTitle = expectedBricksFirstScript; solo.clickOnCheckBox(0); checkIfCheckboxesAreCorrectlyCheckedAndVisible(true, false); assertTrue("Title not as expected:" + expectedTitle, solo.waitForText(expectedTitle, 0, timeToWaitForTitle, false, true)); expectedTitle = expectedBricksSecondScript; // Check if multiple-selection is possible solo.clickOnCheckBox(1); checkIfCheckboxesAreCorrectlyCheckedAndVisible(true, true); assertTrue("Title not as aspected", solo.waitForText(expectedTitle, 0, timeToWaitForTitle, false, true)); expectedTitle = expectedBricksFirstScript; solo.clickOnCheckBox(0); checkIfCheckboxesAreCorrectlyCheckedAndVisible(false, true); assertTrue("Title not as expected", solo.waitForText(expectedTitle, 0, timeToWaitForTitle, false, true)); expectedTitle = backpack; solo.clickOnCheckBox(1); checkIfCheckboxesAreCorrectlyCheckedAndVisible(false, false); assertTrue("Title not as expected", solo.waitForText(expectedTitle, 0, timeToWaitForTitle, false, true)); } public void testBackPackActionModeIfNothingSelected() { UiTestUtils.createTestProjectWithTwoScripts(); UiTestUtils.getIntoScriptActivityFromMainMenu(solo); UiTestUtils.openBackPackActionModeWhenEmpty(solo); int expectedNumberOfBricks = ProjectManager.getInstance().getCurrentSprite().getNumberOfBricks(); assertTrue("Bottom bar is visible", solo.getView(R.id.bottom_bar).getVisibility() == View.GONE); checkIfCheckboxesAreCorrectlyCheckedAndVisible(false, false); UiTestUtils.acceptAndCloseActionMode(solo); assertFalse("ActionMode didn't disappear", solo.waitForText(backpack, 0, TIME_TO_WAIT_BACKPACK)); checkIfNumberOfBricksIsEqual(expectedNumberOfBricks); UiTestUtils.openBackPackActionModeWhenEmpty(solo); assertTrue("Bottom bar is visible", solo.getView(R.id.bottom_bar).getVisibility() == View.GONE); checkIfCheckboxesAreCorrectlyCheckedAndVisible(false, false); solo.goBack(); assertFalse("ActionMode didn't disappear", solo.waitForText(backpack, 0, TIME_TO_WAIT_BACKPACK)); checkIfNumberOfBricksIsEqual(expectedNumberOfBricks); } public void testBackPackActionModeIfSomethingSelectedAndPressingBack() { UiTestUtils.createTestProjectWithTwoScripts(); UiTestUtils.getIntoScriptActivityFromMainMenu(solo); UiTestUtils.openBackPackActionModeWhenEmpty(solo); assertTrue("Bottom bar is visible", solo.getView(R.id.bottom_bar).getVisibility() == View.GONE); solo.clickOnCheckBox(0); solo.sleep(TIME_TO_WAIT_BACKPACK); solo.clickOnCheckBox(1); solo.sleep(800); checkIfCheckboxesAreCorrectlyCheckedAndVisible(true, true); solo.goBack(); assertFalse("ActionMode didn't disappear", solo.waitForText(backpack, 0, TIME_TO_WAIT_BACKPACK)); assertFalse("Backpack was opened, but shouldn't be!", solo.waitForText(backpackTitle, 0, TIME_TO_WAIT_BACKPACK)); } public void testBackPackSelectAll() { UiTestUtils.createTestProject(); UiTestUtils.getIntoScriptActivityFromMainMenu(solo); UiTestUtils.openBackPackActionModeWhenEmpty(solo); solo.waitForActivity("ScriptActivity"); String selectAll = solo.getString(R.string.select_all).toUpperCase(Locale.getDefault()); UiTestUtils.clickOnText(solo, selectAll); for (Brick brick : ProjectManager.getInstance().getCurrentSprite().getListWithAllBricks()) { assertTrue("CheckBox is not Checked!", brick.getCheckBox().isChecked()); } assertFalse("Select All is still shown", solo.waitForText(selectAll, 1, 200, false, true)); UiTestUtils.acceptAndCloseActionMode(solo); fillNewScriptGroupDialog(DEFAULT_SCRIPT_GROUP_NAME); assertTrue("BackPack title didn't show up", solo.waitForText(backpackTitle, 0, TIME_TO_WAIT_BACKPACK)); assertTrue("Script wasn't backpacked!", solo.waitForText(DEFAULT_SCRIPT_GROUP_NAME, 0, TIME_TO_WAIT_BACKPACK)); } public void testBackPackScriptsDeleteContextMenu() { UiTestUtils.createTestProject(); UiTestUtils.getIntoScriptActivityFromMainMenu(solo); backPackFirstScriptWithContextMenu(DEFAULT_SCRIPT_GROUP_NAME); BackPackScriptListAdapter adapter = getBackPackScriptListAdapter(); int oldCount = adapter.getCount(); clickOnContextMenuItem(DEFAULT_SCRIPT_GROUP_NAME, delete); solo.waitForText(deleteDialogTitle); solo.clickOnButton(solo.getString(R.string.yes)); solo.waitForDialogToClose(TIME_TO_WAIT_BACKPACK); int newCount = adapter.getCount(); solo.sleep(500); assertEquals("Not all scripts were backpacked", 1, oldCount); assertEquals("Script group wasn't deleted in backpack", 0, newCount); assertEquals("Count of the backpack scriptGroupList is not correct", newCount, BackPackListManager.getInstance().getBackPackedScriptGroups().size()); } public void testBackPackScriptsDeleteActionMode() { UiTestUtils.createTestProject(); UiTestUtils.getIntoScriptActivityFromMainMenu(solo); backPackFirstScriptWithContextMenu(DEFAULT_SCRIPT_GROUP_NAME); solo.goBack(); backPackFirstScriptWithContextMenu(SECOND_SCRIPT_GROUP_NAME); solo.waitForActivity(BackPackActivity.class); solo.waitForFragmentByTag(BackPackScriptListFragment.TAG); BackPackScriptListAdapter adapter = getBackPackScriptListAdapter(); int oldCount = adapter.getCount(); UiTestUtils.deleteAllItems(solo); int newCount = adapter.getCount(); solo.sleep(500); assertTrue("No backpack is emtpy text appeared", solo.searchText(backpack)); assertTrue("No backpack is emtpy text appeared", solo.searchText(solo.getString(R.string.is_empty))); assertEquals("Not all scripts were backpacked", 2, oldCount); assertEquals("Script Groups were not deleted in backpack", 0, newCount); assertEquals("Count of the backpack scriptGroupList is not correct", newCount, BackPackListManager.getInstance().getBackPackedScriptGroups().size()); } public void testBackPackScriptsActionModeDifferentProgrammes() { UiTestUtils.createTestProject(UiTestUtils.PROJECTNAME1); UiTestUtils.createTestProject(); UiTestUtils.getIntoScriptActivityFromMainMenu(solo); backPackAllScripts(DEFAULT_SCRIPT_GROUP_NAME); UiTestUtils.switchToProgrammesBackground(solo, UiTestUtils.PROJECTNAME1, "cat"); solo.clickOnText(solo.getString(R.string.scripts)); solo.sleep(TIME_TO_WAIT_BACKPACK); int brickCountInView = UiTestUtils.getScriptListView(solo).getCount(); int numberOfBricksInBrickList = ProjectManager.getInstance().getCurrentSprite().getNumberOfBricks(); UiTestUtils.openBackPack(solo); solo.sleep(TIME_TO_WAIT_BACKPACK); UiTestUtils.openActionMode(solo, unpack, R.id.unpacking); String selectAll = solo.getString(R.string.select_all).toUpperCase(Locale.getDefault()); UiTestUtils.clickOnText(solo, selectAll); UiTestUtils.acceptAndCloseActionMode(solo); solo.waitForActivity(ScriptActivity.class); solo.sleep(1000); assertEquals("Brick count in list view not correct", brickCountInView + 7, UiTestUtils.getScriptListView(solo) .getCount()); assertEquals("Brick count in current sprite not correct", numberOfBricksInBrickList + 6, ProjectManager.getInstance().getCurrentSprite().getNumberOfBricks()); UiTestUtils.deleteAllItems(solo); solo.sleep(TIME_TO_WAIT_BACKPACK); assertEquals("Brick count in list view not correct", 0, UiTestUtils.getScriptListView(solo) .getCount()); assertEquals("Brick count in current sprite not correct", 0, ProjectManager.getInstance().getCurrentSprite().getNumberOfBricks()); UiTestUtils.openBackPackActionModeWhenEmpty(solo); assertTrue("Backpack items were cleared!", solo.waitForText(backpackTitle, 1, 1000)); } public void testBackPackDeleteActionModeCheckingAndTitle() { UiTestUtils.createTestProjectWithTwoScripts(); UiTestUtils.getIntoScriptActivityFromMainMenu(solo); backPackFirstScriptWithContextMenu(DEFAULT_SCRIPT_GROUP_NAME); solo.goBack(); backPackFirstScriptWithContextMenu(SECOND_SCRIPT_GROUP_NAME); solo.sleep(TIME_TO_WAIT_BACKPACK); UiTestUtils.openActionMode(solo, delete, R.id.delete); assertTrue("Bottom bar is visible", solo.getView(R.id.bottom_bar).getVisibility() == View.GONE); int timeToWaitForTitle = 300; String expectedTitleOneScriptGroup = delete + " 1 " + solo.getString(R.string.script_group); String expectedTitleTwoScriptGroups = delete + " 2 " + solo.getString(R.string.script_groups); assertFalse("Script Group should not be displayed in title", solo.waitForText(solo.getString(R.string.script_group), 3, 300, false, true)); checkIfCheckboxesAreCorrectlyCheckedInBackPack(false, false); String expectedTitle = expectedTitleOneScriptGroup; solo.clickOnCheckBox(0); checkIfCheckboxesAreCorrectlyCheckedInBackPack(true, false); assertTrue("Title not as expected:" + expectedTitle, solo.waitForText(expectedTitle, 0, timeToWaitForTitle, false, true)); expectedTitle = expectedTitleTwoScriptGroups; // Check if multiple-selection is possible solo.clickOnCheckBox(1); checkIfCheckboxesAreCorrectlyCheckedInBackPack(true, true); assertTrue("Title not as aspected", solo.waitForText(expectedTitle, 0, timeToWaitForTitle, false, true)); expectedTitle = expectedTitleOneScriptGroup; solo.clickOnCheckBox(0); checkIfCheckboxesAreCorrectlyCheckedInBackPack(false, true); assertTrue("Title not as expected", solo.waitForText(expectedTitle, 0, timeToWaitForTitle, false, true)); expectedTitle = delete; solo.clickOnCheckBox(1); checkIfCheckboxesAreCorrectlyCheckedInBackPack(false, false); assertTrue("Title not as expected", solo.waitForText(expectedTitle, 0, timeToWaitForTitle, false, true)); } public void testBackPackDeleteActionModeIfNothingSelected() { UiTestUtils.createTestProjectWithTwoScripts(); UiTestUtils.getIntoScriptActivityFromMainMenu(solo); backPackFirstScriptWithContextMenu(DEFAULT_SCRIPT_GROUP_NAME); solo.goBack(); backPackFirstScriptWithContextMenu(SECOND_SCRIPT_GROUP_NAME); solo.sleep(TIME_TO_WAIT_BACKPACK); UiTestUtils.openActionMode(solo, delete, R.id.delete); int expectedNumberOfScriptGroups = BackPackListManager.getInstance().getBackPackedScriptGroups().size(); assertTrue("Bottom bar is visible", solo.getView(R.id.bottom_bar).getVisibility() == View.GONE); checkIfCheckboxesAreCorrectlyCheckedInBackPack(false, false); UiTestUtils.acceptAndCloseActionMode(solo); assertFalse("ActionMode didn't disappear", solo.waitForText(delete, 0, TIME_TO_WAIT_BACKPACK)); checkIfNumberOfBricksIsEqualInBackPack(expectedNumberOfScriptGroups); UiTestUtils.openActionMode(solo, delete, R.id.delete); assertTrue("Bottom bar is visible", solo.getView(R.id.bottom_bar).getVisibility() == View.GONE); checkIfCheckboxesAreCorrectlyCheckedInBackPack(false, false); solo.goBack(); assertFalse("ActionMode didn't disappear", solo.waitForText(delete, 0, TIME_TO_WAIT_BACKPACK)); checkIfNumberOfBricksIsEqualInBackPack(expectedNumberOfScriptGroups); } public void testBackPackDeleteActionModeIfSomethingSelectedAndPressingBack() { UiTestUtils.createTestProjectWithTwoScripts(); UiTestUtils.getIntoScriptActivityFromMainMenu(solo); backPackFirstScriptWithContextMenu(DEFAULT_SCRIPT_GROUP_NAME); solo.goBack(); backPackFirstScriptWithContextMenu(SECOND_SCRIPT_GROUP_NAME); solo.sleep(TIME_TO_WAIT_BACKPACK); UiTestUtils.openActionMode(solo, delete, R.id.delete); int expectedNumberOfScriptGroups = BackPackListManager.getInstance().getBackPackedScriptGroups().size(); assertTrue("Bottom bar is visible", solo.getView(R.id.bottom_bar).getVisibility() == View.GONE); solo.clickOnCheckBox(0); solo.sleep(TIME_TO_WAIT_BACKPACK); solo.clickOnCheckBox(1); solo.sleep(800); checkIfCheckboxesAreCorrectlyCheckedInBackPack(true, true); solo.goBack(); assertFalse("ActionMode didn't disappear", solo.waitForText(delete, 0, TIME_TO_WAIT_BACKPACK)); checkIfNumberOfBricksIsEqualInBackPack(expectedNumberOfScriptGroups); } public void testBackPackDeleteSelectAll() { UiTestUtils.createTestProjectWithTwoScripts(); UiTestUtils.getIntoScriptActivityFromMainMenu(solo); backPackFirstScriptWithContextMenu(DEFAULT_SCRIPT_GROUP_NAME); solo.goBack(); backPackFirstScriptWithContextMenu(SECOND_SCRIPT_GROUP_NAME); solo.sleep(TIME_TO_WAIT_BACKPACK); UiTestUtils.openActionMode(solo, delete, R.id.delete); String selectAll = solo.getString(R.string.select_all).toUpperCase(Locale.getDefault()); UiTestUtils.clickOnText(solo, selectAll); for (CheckBox checkBox : solo.getCurrentViews(CheckBox.class)) { assertTrue("CheckBox is not Checked!", checkBox.isChecked()); } assertFalse("Select All is still shown", solo.waitForText(selectAll, 1, 200, false, true)); UiTestUtils.acceptAndCloseActionMode(solo); solo.waitForText(deleteDialogTitle); solo.clickOnButton(solo.getString(R.string.yes)); solo.waitForDialogToClose(TIME_TO_WAIT_BACKPACK); assertFalse("Script group wasn't deleted!", solo.waitForText(DEFAULT_SCRIPT_GROUP_NAME, 0, TIME_TO_WAIT_BACKPACK)); assertFalse("Script group wasn't deleted!", solo.waitForText(SECOND_SCRIPT_GROUP_NAME, 0, TIME_TO_WAIT_BACKPACK)); assertTrue("No empty bg found!", solo.waitForText(solo.getString(R.string.is_empty), 0, TIME_TO_WAIT_BACKPACK)); } public void testBackPackSpecialBricks() { UiTestUtils.createEmptyProjectWithoutScript(); UiTestUtils.createTestProjectWithSpecialBricksForBackPack(UiTestUtils.DEFAULT_TEST_PROJECT_NAME); UiTestUtils.getIntoScriptActivityFromMainMenu(solo); backPackFirstScriptWithContextMenu(DEFAULT_SCRIPT_GROUP_NAME); assertTrue("Script wasn't backpacked!", solo.waitForText(DEFAULT_SCRIPT_GROUP_NAME, 1, TIME_TO_WAIT_BACKPACK)); solo.goBack(); solo.goBack(); solo.clickOnText(solo.getString(R.string.backgrounds)); solo.sleep(TIME_TO_WAIT_BACKPACK); UiTestUtils.openBackPackActionModeWhenEmpty(solo); assertFalse("Visible Backpack was opened despite look should be in hidden backpack", solo.waitForText(unpack, 1, TIME_TO_WAIT_BACKPACK)); assertFalse("Visible Backpack was opened despite look should be in hidden backpack", solo.waitForText(TEST_LOOK_NAME + "1", 1, TIME_TO_WAIT_BACKPACK)); assertTrue("Look is not in hidden backpack!", BackPackListManager.getInstance().getHiddenBackpackedLooks().size() == 1); solo.goBack(); solo.goBack(); solo.clickOnText(solo.getString(R.string.sounds)); solo.sleep(TIME_TO_WAIT_BACKPACK); UiTestUtils.openBackPackActionModeWhenEmpty(solo); assertFalse("Visible Backpack was opened despite sound should be in hidden backpack", solo.waitForText(unpack, 1, TIME_TO_WAIT_BACKPACK)); assertFalse("Visible Backpack was opened despite sound should be in hidden backpack", solo.waitForText(TEST_SOUND_NAME + "1", 1, TIME_TO_WAIT_BACKPACK)); assertTrue("Sound is not in hidden backpack!", BackPackListManager.getInstance().getHiddenBackpackedSounds().size() == 1); solo.goBack(); solo.goBack(); solo.goBack(); UiTestUtils.openBackPackActionModeWhenEmpty(solo); assertFalse("Visible Backpack was opened despite sprite should be in hidden backpack", solo.waitForText(unpack, 1, TIME_TO_WAIT_BACKPACK)); assertTrue("Sprite is not in hidden backpack!", BackPackListManager.getInstance().getHiddenBackpackedSprites().size() == 1); assertTrue("Wrong sprite was backpacked!", BackPackListManager.getInstance().getHiddenBackpackedSprites().get(0).getName().equals("dog")); UiTestUtils.switchToProgrammesBackground(solo, UiTestUtils.PROJECTNAME3, "cat"); solo.clickOnText(solo.getString(R.string.scripts)); solo.sleep(TIME_TO_WAIT_BACKPACK); ListView listView = solo.getCurrentViews(ListView.class).get(solo.getCurrentViews(ListView.class).size() - 1); int brickCountInView = listView.getCount(); int numberOfBricksInBrickList = ProjectManager.getInstance().getCurrentSprite().getNumberOfBricks(); UiTestUtils.openBackPackFromEmptyAdapter(solo); solo.sleep(TIME_TO_WAIT_BACKPACK); clickOnContextMenuItem(DEFAULT_SCRIPT_GROUP_NAME, unpack); solo.waitForDialogToClose(TIME_TO_WAIT_BACKPACK); solo.waitForActivity(ScriptActivity.class); solo.waitForFragmentByTag(ScriptFragment.TAG); solo.sleep(TIME_TO_WAIT_BACKPACK); listView = solo.getCurrentViews(ListView.class).get(solo.getCurrentViews(ListView.class).size() - 1); assertEquals("Brick count in list view not correct", brickCountInView + 9, listView.getCount()); assertEquals("Brick count in current sprite not correct", numberOfBricksInBrickList + 8, ProjectManager.getInstance().getCurrentSprite().getNumberOfBricks()); ProjectManager projectManager = ProjectManager.getInstance(); DataContainer dataContainer = projectManager.getCurrentProject().getDefaultScene().getDataContainer(); UserList projectUserList = projectManager.getCurrentProject().getDefaultScene().getDataContainer().getUserList("global_list", null); UserList spriteUserList = ProjectManager.getInstance().getCurrentProject().getDefaultScene().getDataContainer() .getSpriteListOfLists(projectManager.getCurrentSprite()).get(0); UserVariable spriteUserVariable = dataContainer.getUserVariable("sprite_var", projectManager.getCurrentSprite()); UserVariable projectUserVariable = dataContainer.getProjectVariables().get(0); assertTrue("Project user list was not unpacked", projectUserList.getName().equals("global_list")); assertTrue("Sprite user list was not unpacked", spriteUserList.getName().equals("sprite_list")); assertTrue("Project user list was not unpacked", projectUserVariable.getName().equals("global_var")); assertTrue("Project user list was not unpacked", spriteUserVariable.getName().equals("sprite_var")); List<Brick> unpackedBricks = projectManager.getCurrentSprite().getListWithAllBricks(); assertTrue("Brick does not contain sprite user list", ((AddItemToUserListBrick) unpackedBricks.get(4)) .getUserList().getName().equals("sprite_list")); assertTrue("Brick does not contain project user list", ((AddItemToUserListBrick) unpackedBricks.get(5)) .getUserList().getName().equals("global_list")); assertTrue("Brick does not contain sprite user variable", ((SetVariableBrick) unpackedBricks.get(6)) .getUserVariable().getName().equals("sprite_var")); assertTrue("Brick does not contain project user variable", ((ChangeVariableBrick) unpackedBricks.get(7)) .getUserVariable().getName().equals("global_var")); solo.goBack(); solo.clickOnText(solo.getString(R.string.backgrounds)); solo.sleep(TIME_TO_WAIT_BACKPACK); assertTrue("Look was not unpacked!", solo.waitForText(TEST_LOOK_NAME, 1, TIME_TO_WAIT_BACKPACK)); solo.goBack(); solo.clickOnText(solo.getString(R.string.sounds)); solo.sleep(TIME_TO_WAIT_BACKPACK); assertTrue("Sound was not unpacked!", solo.waitForText(TEST_SOUND_NAME, 1, TIME_TO_WAIT_BACKPACK)); solo.goBack(); solo.goBack(); assertTrue("Sprite was not unpacked!", solo.waitForText("dog", 1, TIME_TO_WAIT_BACKPACK)); } public void testBackPackScriptWithUserBrick() { UiTestUtils.createTestProjectWithUserBrick(); UiTestUtils.getIntoScriptActivityFromMainMenu(solo); backPackFirstScriptWithContextMenu(DEFAULT_SCRIPT_GROUP_NAME); assertTrue("Script wasn't backpacked!", solo.waitForText(DEFAULT_SCRIPT_GROUP_NAME, 0, TIME_TO_WAIT_BACKPACK)); solo.goBack(); solo.goBack(); solo.goBack(); solo.clickOnText(SECOND_SPRITE_NAME); solo.clickOnText(solo.getString(R.string.scripts)); solo.sleep(TIME_TO_WAIT_BACKPACK); int numberOfBricksInBrickList = ProjectManager.getInstance().getCurrentSprite().getNumberOfBricks(); UiTestUtils.openBackPackFromEmptyAdapter(solo); solo.sleep(TIME_TO_WAIT_BACKPACK); clickOnContextMenuItem(DEFAULT_SCRIPT_GROUP_NAME, unpack); solo.waitForDialogToClose(TIME_TO_WAIT_BACKPACK); solo.sleep(TIME_TO_WAIT_BACKPACK); assertEquals("Brick count in current sprite not correct", numberOfBricksInBrickList + 7, ProjectManager.getInstance().getCurrentSprite().getNumberOfBricks()); assertEquals("UserBrick prototype count in current sprite not correct", 1, ProjectManager.getInstance().getCurrentSprite().getUserBrickList().size()); UiTestUtils.getIntoUserBrickOverView(solo); assertTrue("No UserBrick was unpacked!", solo.waitForText(UiTestUtils.TEST_USER_BRICK_NAME, 0, TIME_TO_WAIT_BACKPACK, false, true)); } public void testBackPackScriptGroupWithSameName() { UiTestUtils.createTestProject(); UiTestUtils.getIntoScriptActivityFromMainMenu(solo); backPackFirstScriptWithContextMenu(DEFAULT_SCRIPT_GROUP_NAME); assertTrue("Script wasn't backpacked!", solo.waitForText(DEFAULT_SCRIPT_GROUP_NAME, 0, TIME_TO_WAIT_BACKPACK)); solo.goBack(); solo.waitForActivity(ScriptActivity.class); solo.waitForFragmentByTag(ScriptFragment.TAG); backPackFirstScriptWithContextMenu(DEFAULT_SCRIPT_GROUP_NAME); assertTrue("No script group already existing warning appeared!", solo.waitForText(solo.getString(R.string.script_group_name_given), 0, TIME_TO_WAIT_BACKPACK)); } public void testEmptyActionModeDialogs() { UiTestUtils.createEmptyProjectWithoutScript(); UiTestUtils.getIntoScriptActivityFromMainMenu(solo); UiTestUtils.openBackPackActionModeWhenEmpty(solo); solo.waitForDialogToOpen(); assertTrue("Nothing to backpack dialog not shown", solo.waitForText(solo.getString(R.string .nothing_to_backpack_and_unpack))); solo.clickOnButton(0); solo.waitForDialogToClose(); UiTestUtils.openActionMode(solo, delete, R.id.delete); solo.waitForDialogToOpen(); assertTrue("Nothing to delete dialog not shown", solo.waitForText(solo.getString(R.string .nothing_to_delete))); } public void testEmptyActionModeDialogsInBackPack() { UiTestUtils.createTestProject(); UiTestUtils.getIntoScriptActivityFromMainMenu(solo); backPackAllScripts(DEFAULT_SCRIPT_GROUP_NAME); UiTestUtils.deleteAllItems(solo); UiTestUtils.openActionMode(solo, solo.getString(R.string.delete), R.id.delete); solo.waitForDialogToOpen(); assertTrue("Nothing to delete dialog not shown", solo.waitForText(solo.getString(R.string .nothing_to_delete))); solo.clickOnButton(0); solo.waitForDialogToClose(); UiTestUtils.openActionMode(solo, unpack, R.id.unpacking); solo.waitForDialogToOpen(); assertTrue("Nothing to unpack dialog not shown", solo.waitForText(solo.getString(R.string .nothing_to_unpack))); } public void testOpenBackPackWhenScriptListEmptyButSomethingInBackPack() { UiTestUtils.createTestProject(); UiTestUtils.getIntoScriptActivityFromMainMenu(solo); backPackAllScripts(DEFAULT_SCRIPT_GROUP_NAME); solo.goBack(); UiTestUtils.deleteAllItems(solo); UiTestUtils.openActionMode(solo, backpack, R.id.backpack); solo.waitForActivity(BackPackActivity.class); assertTrue("Backpack wasn't opened", solo.waitForText(backpackTitle)); } private BackPackScriptListFragment getBackPackScriptFragment() { BackPackActivity activity = (BackPackActivity) solo.getCurrentActivity(); return (BackPackScriptListFragment) activity.getFragment(BackPackActivity.FRAGMENT_BACKPACK_SCRIPTS); } private BackPackScriptListAdapter getBackPackScriptListAdapter() { return (BackPackScriptListAdapter) getBackPackScriptFragment().getListAdapter(); } private void backPackFirstScriptWithContextMenu(String scriptGroupName) { String brickWhenStarted = solo.getString(R.string.brick_when_started); solo.waitForText(brickWhenStarted); solo.clickOnText(brickWhenStarted); solo.waitForDialogToOpen(); solo.waitForText(backpackAdd); solo.clickOnText(backpackAdd); fillNewScriptGroupDialog(scriptGroupName); } private void backPackAllScripts(String defaultScriptGroupName) { UiTestUtils.openBackPackActionModeWhenEmpty(solo); solo.waitForActivity("ScriptActivity"); String selectAll = solo.getString(R.string.select_all).toUpperCase(Locale.getDefault()); UiTestUtils.clickOnText(solo, selectAll); UiTestUtils.acceptAndCloseActionMode(solo); fillNewScriptGroupDialog(defaultScriptGroupName); } private void fillNewScriptGroupDialog(String scriptGroupName) { solo.waitForDialogToOpen(); EditText scriptGroupEditText = (EditText) solo.getView(R.id.new_group_dialog_group_name); solo.clearEditText(scriptGroupEditText); solo.enterText(scriptGroupEditText, scriptGroupName); solo.sleep(200); solo.sendKey(Solo.ENTER); solo.sleep(200); solo.clickOnText(solo.getString(R.string.ok)); solo.waitForDialogToClose(); } private void clickOnContextMenuItem(String scriptGroupName, String menuItemName) { solo.clickLongOnText(scriptGroupName); solo.waitForText(menuItemName); solo.clickOnText(menuItemName); } private void unpackScriptGroup(String scriptGroupName, String menuItemName) { clickOnContextMenuItem(scriptGroupName, menuItemName); solo.waitForDialogToClose(TIME_TO_WAIT_BACKPACK); solo.waitForActivity(ScriptActivity.class); solo.sleep(400); } private void checkIfCheckboxesAreCorrectlyCheckedAndVisible(boolean firstCheckboxExpectedChecked, boolean secondCheckboxExpectedChecked) { solo.sleep(500); CheckBox firstCheckBox = solo.getCurrentViews(CheckBox.class).get(0); CheckBox secondCheckBox = solo.getCurrentViews(CheckBox.class).get(3); assertEquals("First checkbox not correctly checked", firstCheckboxExpectedChecked, firstCheckBox.isChecked()); assertEquals("Second checkbox not correctly checked", secondCheckboxExpectedChecked, secondCheckBox.isChecked()); assertTrue("Script checkbox is not visible", firstCheckBox.getVisibility() == VISIBLE); assertTrue("Script checkbox is not visible", secondCheckBox.getVisibility() == VISIBLE); assertTrue("Non-Script checkbox is visible", solo.getCurrentViews(CheckBox.class).get(1).getVisibility() == INVISIBLE); assertTrue("Non-Script checkbox is visible", solo.getCurrentViews(CheckBox.class).get(2).getVisibility() == INVISIBLE); assertTrue("Non-Script checkbox is visible", solo.getCurrentViews(CheckBox.class).get(4).getVisibility() == INVISIBLE); assertTrue("Non-Script checkbox is visible", solo.getCurrentViews(CheckBox.class).get(5).getVisibility() == INVISIBLE); } private void checkIfCheckboxesAreCorrectlyCheckedInBackPack(boolean firstCheckboxExpectedChecked, boolean secondCheckboxExpectedChecked) { solo.sleep(500); int start = 0; if (solo.getCurrentViews(CheckBox.class).size() > 2) { start++; } CheckBox firstCheckBox = solo.getCurrentViews(CheckBox.class).get(start); CheckBox secondCheckBox = solo.getCurrentViews(CheckBox.class).get(start + 1); assertEquals("First checkbox not correctly checked", firstCheckboxExpectedChecked, firstCheckBox.isChecked()); assertEquals("Second checkbox not correctly checked", secondCheckboxExpectedChecked, secondCheckBox.isChecked()); } private void checkIfNumberOfBricksIsEqual(int expectedNumber) { int currentNumberOfBricks = ProjectManager.getInstance().getCurrentSprite().getNumberOfBricks(); assertEquals("Number of bricks is not as expected", expectedNumber, currentNumberOfBricks); } private void checkIfNumberOfBricksIsEqualInBackPack(int expectedNumber) { int currentNumberOfScriptGroups = BackPackListManager.getInstance().getBackPackedScriptGroups().size(); assertEquals("Number of script groups is not as expected", expectedNumber, currentNumberOfScriptGroups); } private void checkNumberOfElementsInDataContainer() { DataContainer dataContainer = ProjectManager.getInstance().getCurrentScene().getDataContainer(); Sprite sprite = ProjectManager.getInstance().getCurrentSprite(); UserBrick userBrick = ProjectManager.getInstance().getCurrentUserBrick(); assertTrue("There is not exactly one global variable in the data container!", dataContainer.getProjectVariables().size() == 1); assertTrue("There is not exactly one sprite variable in the data container!", dataContainer.getVariableListForSprite(sprite).size() == 1); assertTrue("There is not exactly one userbrick variable in the data container!", dataContainer.getOrCreateVariableListForUserBrick(userBrick).size() == 1); } }