/*
* 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.Context;
import android.content.res.Resources;
import android.graphics.drawable.Drawable;
import android.net.wifi.WifiManager;
import android.view.View;
import android.widget.CheckBox;
import android.widget.ListView;
import com.robotium.solo.By;
import com.robotium.solo.WebElement;
import org.catrobat.catroid.ProjectManager;
import org.catrobat.catroid.R;
import org.catrobat.catroid.content.GroupItemSprite;
import org.catrobat.catroid.content.GroupSprite;
import org.catrobat.catroid.content.Project;
import org.catrobat.catroid.content.SingleSprite;
import org.catrobat.catroid.content.Sprite;
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.SetVariableBrick;
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.ui.BackPackActivity;
import org.catrobat.catroid.ui.MainMenuActivity;
import org.catrobat.catroid.ui.ProjectActivity;
import org.catrobat.catroid.ui.ScriptActivity;
import org.catrobat.catroid.ui.WebViewActivity;
import org.catrobat.catroid.ui.adapter.SpriteAdapter;
import org.catrobat.catroid.ui.adapter.SpriteListAdapter;
import org.catrobat.catroid.ui.controller.BackPackListManager;
import org.catrobat.catroid.ui.fragment.BackPackSpriteListFragment;
import org.catrobat.catroid.ui.fragment.ScriptFragment;
import org.catrobat.catroid.ui.fragment.SpritesListFragment;
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.Utils;
import org.catrobat.catroid.web.ServerCalls;
import java.io.File;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Locale;
import java.util.Set;
import static org.catrobat.catroid.common.Constants.BACKPACK_DIRECTORY;
import static org.catrobat.catroid.common.Constants.DEFAULT_ROOT;
import static org.catrobat.catroid.utils.Utils.buildPath;
public class SpritesListFragmentTest extends BaseActivityInstrumentationTestCase<MainMenuActivity> {
private static final String OLD_SPRITE_PROJECT = "OldSpriteProject";
public SpritesListFragmentTest() {
super(MainMenuActivity.class);
}
private static final int RESOURCE_IMAGE = org.catrobat.catroid.test.R.drawable.catroid_sunglasses;
private static final int RESOURCE_SOUND = org.catrobat.catroid.test.R.raw.longsound;
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 GONE = View.GONE;
private static final String LOCAL_VARIABLE_NAME = "test_local";
private static final double LOCAL_VARIABLE_VALUE = 0xDEADBEEF;
private static final String GLOBAL_VARIABLE_NAME = "test_global";
private static final double GLOBAL_VARIABLE_VALUE = 0xC0FFEE;
private static final String SPRITE_NAME = "testSprite1";
private static final String SPRITE_NAME2 = "testSprite2";
private static final String SPRITE_NAME_UNPACKED = "testSprite11";
private static final String SPRITE_NAME2_UNPACKED = "testSprite21";
private static final String SPRITE_NAME_BACKGROUND = "cat";
private static final int TIME_TO_WAIT_BACKPACK = 1000;
private static final int TIME_TO_WAIT = 400;
private static final int DRAG_AND_DROP_Y_OFFSET = 100;
private Sprite sprite;
private Sprite sprite2;
private Project project;
private String continueMenu;
private String rename;
private String delete;
private String copy;
private String unpack;
private String unpackAsObject;
private String unpackAsBackGround;
private String backpack;
private String backpackAdd;
private String backpackTitle;
private String backpackReplaceDialogMultiple;
private String upload;
private String next;
private String showProgram;
@Override
protected void setUp() throws Exception {
super.setUp();
UiTestUtils.createOldTestProjectWithSprites(OLD_SPRITE_PROJECT);
UiTestUtils.createTestProject(UiTestUtils.PROJECTNAME1);
UiTestUtils.createTestProject();
project = ProjectManager.getInstance().getCurrentProject();
sprite = new SingleSprite(SPRITE_NAME);
sprite2 = new SingleSprite(SPRITE_NAME2);
project.getDefaultScene().addSprite(sprite);
project.getDefaultScene().addSprite(sprite2);
project.getDefaultScene().getDataContainer().addSpriteUserVariableToSprite(sprite, LOCAL_VARIABLE_NAME);
project.getDefaultScene().getDataContainer().getUserVariable(LOCAL_VARIABLE_NAME, sprite).setValue(LOCAL_VARIABLE_VALUE);
project.getDefaultScene().getDataContainer().addProjectUserVariable(GLOBAL_VARIABLE_NAME);
project.getDefaultScene().getDataContainer().getUserVariable(GLOBAL_VARIABLE_NAME, null).setValue(GLOBAL_VARIABLE_VALUE);
ProjectManager.getInstance().setProject(project);
continueMenu = solo.getString(R.string.main_menu_continue);
rename = solo.getString(R.string.rename);
backpackTitle = solo.getString(R.string.backpack_title);
delete = solo.getString(R.string.delete);
copy = solo.getString(R.string.copy);
unpack = solo.getString(R.string.unpack);
unpackAsObject = solo.getString(R.string.unpack_object);
unpackAsBackGround = solo.getString(R.string.unpack_bg);
backpack = solo.getString(R.string.backpack);
backpackAdd = solo.getString(R.string.packing);
backpackReplaceDialogMultiple = solo.getString(R.string.backpack_replace_object_multiple);
upload = solo.getString(R.string.upload_button);
next = solo.getString(R.string.next);
showProgram = solo.getString(R.string.progress_upload_dialog_show_program);
UiTestUtils.clearBackPack(true);
solo.clickOnText(solo.getString(R.string.main_menu_continue));
SpriteAdapter adapter = getSpriteAdapter();
if (adapter != null && adapter.getShowDetails()) {
solo.clickOnMenuItem(solo.getString(R.string.hide_details), true);
solo.sleep(TIME_TO_WAIT);
}
}
public void testLocalVariablesWhenSpriteCopiedFromSpritesListFragment() {
clickOnActionModeSingleItem(SPRITE_NAME, R.string.copy, R.id.copy);
String copiedSpriteName = SPRITE_NAME + solo.getString(R.string.copy_sprite_name_suffix);
solo.waitForText(copiedSpriteName);
assertTrue(copiedSpriteName + " not found!", solo.searchText(copiedSpriteName));
Sprite clonedSprite = null;
for (Sprite tempSprite : project.getDefaultScene().getSpriteList()) {
if (tempSprite.getName().equals(copiedSpriteName)) {
clonedSprite = tempSprite;
}
}
if (clonedSprite == null) {
fail("no cloned sprite in project");
}
List<UserVariable> userVariableList = project.getDefaultScene().getDataContainer().getOrCreateVariableListForSprite(clonedSprite);
Set<String> hashSet = new HashSet<>();
for (UserVariable userVariable : userVariableList) {
assertTrue("Variable already exists", hashSet.add(userVariable.getName()));
}
}
public void testSelectAllActionModeButton() {
String selectAll = solo.getString(R.string.select_all).toUpperCase(Locale.getDefault());
String deselectAll = solo.getString(R.string.deselect_all).toUpperCase(Locale.getDefault());
solo.sleep(TIME_TO_WAIT);
UiTestUtils.openActionMode(solo, solo.getString(R.string.copy), R.id.copy);
assertTrue("Select All is not shown", UiTestUtils.waitForShownState(solo, solo.getView(R.id.select_all), true));
UiTestUtils.clickOnText(solo, selectAll);
for (CheckBox checkBox : solo.getCurrentViews(CheckBox.class)) {
if (checkBox.isShown()) {
assertTrue("CheckBox is not checked!", checkBox.isChecked());
}
}
assertTrue("Deselect All is not shown", solo.searchText(deselectAll, 1, false, true));
UiTestUtils.clickOnText(solo, deselectAll);
for (CheckBox checkBox : solo.getCurrentViews(CheckBox.class)) {
if (checkBox.isShown()) {
assertFalse("CheckBox is checked!", checkBox.isChecked());
}
}
assertFalse("Deselect All is still shown", solo.searchText(deselectAll, 1, false, true));
solo.clickOnCheckBox(0);
assertTrue("Select All is not shown", UiTestUtils.waitForShownState(solo, solo.getView(R.id.select_all), true));
solo.clickOnCheckBox(0);
assertTrue("Select All is not shown", UiTestUtils.waitForShownState(solo, solo.getView(R.id.select_all), true));
solo.goBack();
UiTestUtils.openActionMode(solo, solo.getString(R.string.delete), R.id.delete);
assertTrue("Select All is not shown", UiTestUtils.waitForShownState(solo, solo.getView(R.id.select_all), true));
UiTestUtils.clickOnText(solo, selectAll);
assertTrue("Deselect All is not shown", solo.searchText(deselectAll, 1, false, true));
solo.clickOnCheckBox(0);
assertTrue("Deselect All is not shown", solo.searchText(selectAll, 1, false, true));
solo.clickOnCheckBox(0);
assertTrue("Deselect All is not shown", solo.searchText(deselectAll, 1, false, true));
}
public void testDragAndDropUp() {
for (int i = 0; i < 2; i++) {
addSpriteWithName("TestSprite" + i);
}
solo.goBack();
solo.clickOnText(solo.getString(R.string.main_menu_continue));
List<Sprite> list = ProjectManager.getInstance().getCurrentScene().getSpriteList();
assertEquals("Wrong List before DragAndDropTest", list.get(1).getName(), SPRITE_NAME);
assertEquals("Wrong List before DragAndDropTest", list.get(2).getName(), SPRITE_NAME2);
assertEquals("Wrong List before DragAndDropTest", list.get(3).getName(), "TestSprite0");
assertEquals("Wrong List before DragAndDropTest", list.get(4).getName(), "TestSprite1");
solo.sleep(200);
ArrayList<Integer> yPositionList = UiTestUtils.getListItemYPositions(solo, 0);
UiTestUtils.longClickAndDrag(solo, 10, yPositionList.get(4), 10, yPositionList.get(3) - DRAG_AND_DROP_Y_OFFSET, 20);
list = ProjectManager.getInstance().getCurrentScene().getSpriteList();
assertEquals("Wrong List after DragAndDropTest", list.get(1).getName(), SPRITE_NAME);
assertEquals("Wrong List after DragAndDropTest", list.get(2).getName(), SPRITE_NAME2);
assertEquals("Wrong List after DragAndDropTest", list.get(3).getName(), "TestSprite1");
assertEquals("Wrong List after DragAndDropTest", list.get(4).getName(), "TestSprite0");
}
public void testDragAndDropDown() {
for (int i = 0; i < 2; i++) {
addSpriteWithName("TestSprite" + i);
}
solo.goBack();
solo.clickOnText(solo.getString(R.string.main_menu_continue));
List<Sprite> list = ProjectManager.getInstance().getCurrentScene().getSpriteList();
assertEquals("Wrong List before DragAndDropTest", list.get(1).getName(), SPRITE_NAME);
assertEquals("Wrong List before DragAndDropTest", list.get(2).getName(), SPRITE_NAME2);
assertEquals("Wrong List before DragAndDropTest", list.get(3).getName(), "TestSprite0");
assertEquals("Wrong List before DragAndDropTest", list.get(4).getName(), "TestSprite1");
ArrayList<Integer> yPositionList = UiTestUtils.getListItemYPositions(solo, 0);
UiTestUtils.longClickAndDrag(solo, 10, yPositionList.get(1), 10, yPositionList.get(2) + DRAG_AND_DROP_Y_OFFSET, 20);
list = ProjectManager.getInstance().getCurrentScene().getSpriteList();
assertEquals("Wrong List after DragAndDropTest", list.get(1).getName(), SPRITE_NAME2);
assertEquals("Wrong List after DragAndDropTest", list.get(2).getName(), SPRITE_NAME);
assertEquals("Wrong List after DragAndDropTest", list.get(3).getName(), "TestSprite0");
assertEquals("Wrong List after DragAndDropTest", list.get(4).getName(), "TestSprite1");
}
public void testDragAndDropWithBackground() {
List<Sprite> list = ProjectManager.getInstance().getCurrentScene().getSpriteList();
assertEquals("Wrong List before DragAndDropTest", list.get(0).getName(), SPRITE_NAME_BACKGROUND);
assertEquals("Wrong List before DragAndDropTest", list.get(1).getName(), SPRITE_NAME);
assertEquals("Wrong List before DragAndDropTest", list.get(2).getName(), SPRITE_NAME2);
ArrayList<Integer> yPositionList = UiTestUtils.getListItemYPositions(solo, 0);
UiTestUtils.longClickAndDrag(solo, 10, yPositionList.get(0), 10, yPositionList.get(2) + DRAG_AND_DROP_Y_OFFSET, 20);
solo.waitForText(solo.getString(R.string.backpack_add));
solo.clickInList(0);
UiTestUtils.longClickAndDrag(solo, 10, yPositionList.get(2), 10, 20, 20);
assertEquals("Wrong List before DragAndDropTest", list.get(0).getName(), SPRITE_NAME_BACKGROUND);
assertEquals("Wrong List before DragAndDropTest", list.get(1).getName(), SPRITE_NAME2);
assertEquals("Wrong List before DragAndDropTest", list.get(2).getName(), SPRITE_NAME);
}
public void testEmptyActionModeDialogs() {
solo.goBack();
UiTestUtils.createEmptyProject();
solo.clickOnText(continueMenu);
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)));
solo.clickOnButton(0);
solo.waitForDialogToClose();
UiTestUtils.openActionMode(solo, copy, R.id.copy);
solo.waitForDialogToOpen();
assertTrue("Nothing to backpack dialog not shown", solo.waitForText(solo.getString(R.string
.nothing_to_copy)));
solo.clickOnButton(0);
solo.waitForDialogToClose();
UiTestUtils.openActionMode(solo, rename, R.id.rename);
solo.waitForDialogToOpen();
assertTrue("Nothing to backpack dialog not shown", solo.waitForText(solo.getString(R.string
.nothing_to_rename)));
solo.clickOnButton(0);
solo.waitForDialogToClose();
UiTestUtils.openBackPackActionModeWhenEmpty(solo);
solo.waitForDialogToOpen();
assertFalse("Nothing to backpack dialog shown, but it should be possible to backpack the background", solo
.waitForText(solo.getString(R.string.nothing_to_backpack_and_unpack), 1, TIME_TO_WAIT_BACKPACK));
}
public void testEmptyActionModeDialogsInBackPack() {
UiTestUtils.backPackAllItems(solo, getActivity(), "cat", null);
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, unpackAsObject, R.id.unpacking_object);
solo.waitForDialogToOpen();
assertTrue("Nothing to unpack dialog not shown", solo.waitForText(solo.getString(R.string
.nothing_to_unpack)));
}
public void testGetSpriteFromMediaLibrary() {
String mediaLibraryText = solo.getString(R.string.add_look_media_library);
int numberSpritesBefore = ProjectManager.getInstance().getCurrentProject().getDefaultScene().getSpriteList().size();
UiTestUtils.clickOnBottomBar(solo, R.id.button_add);
solo.waitForText(mediaLibraryText);
solo.clickOnText(mediaLibraryText);
solo.waitForWebElement(By.className("programs"));
solo.sleep(200);
ArrayList<WebElement> webElements = solo.getCurrentWebElements();
for (WebElement webElement : webElements) {
if (webElement.getClassName().contains("program mediafile-")) {
solo.clickOnWebElement(webElement);
break;
}
}
solo.waitForFragmentByTag(SpritesListFragment.TAG);
UiTestUtils.enterText(solo, 0, "testSpriteMediaLibrary");
solo.waitForText(solo.getString(R.string.ok));
solo.clickOnText(solo.getString(R.string.ok));
solo.waitForDialogToClose();
solo.sleep(TIME_TO_WAIT);
int numberSpritesAfter = ProjectManager.getInstance().getCurrentProject().getDefaultScene().getSpriteList().size();
assertEquals("No Sprite was added!", numberSpritesBefore + 1, numberSpritesAfter);
}
@Device
public void testAddSpriteFromMediaLibraryWithNoInternet() {
String mediaLibraryText = solo.getString(R.string.add_look_media_library);
int retryCounter = 0;
WifiManager wifiManager = (WifiManager) this.getActivity().getSystemService(Context.WIFI_SERVICE);
wifiManager.setWifiEnabled(false);
while (Utils.isNetworkAvailable(getActivity())) {
solo.sleep(2000);
if (retryCounter > 30) {
break;
}
retryCounter++;
}
retryCounter = 0;
UiTestUtils.clickOnBottomBar(solo, R.id.button_add);
solo.waitForText(mediaLibraryText);
solo.clickOnText(mediaLibraryText);
assertTrue("Should be in Sprites Fragment", solo.waitForText(SPRITE_NAME));
wifiManager.setWifiEnabled(true);
while (!Utils.isNetworkAvailable(getActivity())) {
solo.sleep(2000);
if (retryCounter > 30) {
break;
}
retryCounter++;
}
}
public void testBackPackSpriteContextMenu() {
packSingleItem(SPRITE_NAME2, true);
solo.waitForDialogToClose(TIME_TO_WAIT_BACKPACK);
assertTrue("BackPack title didn't show up",
solo.waitForText(backpackTitle, 0, TIME_TO_WAIT_BACKPACK));
assertTrue("Sprite wasn't backpacked!", solo.waitForText(SPRITE_NAME2, 0, TIME_TO_WAIT));
}
public void testBackPackSpriteDoubleContextMenu() {
packSingleItem(SPRITE_NAME, true);
solo.waitForDialogToClose(TIME_TO_WAIT_BACKPACK);
solo.goBack();
packSingleItem(SPRITE_NAME2, false);
solo.waitForDialogToClose(TIME_TO_WAIT_BACKPACK);
assertTrue("BackPack title didn't show up",
solo.waitForText(backpackTitle, 0, TIME_TO_WAIT_BACKPACK));
assertTrue("Sprite wasn't backpacked!", solo.waitForText(SPRITE_NAME, 0, TIME_TO_WAIT));
assertTrue("Sprite wasn't backpacked!", solo.waitForText(SPRITE_NAME2, 0, TIME_TO_WAIT));
}
public void testBackPackSpriteSimpleUnpackingContextMenu() {
packSingleItem(SPRITE_NAME, true);
solo.sleep(TIME_TO_WAIT_BACKPACK);
assertTrue("Sprite wasn't backpacked!", solo.waitForText(SPRITE_NAME, 0, TIME_TO_WAIT));
clickOnBackPackItem(SPRITE_NAME, unpackAsObject);
solo.waitForDialogToClose(TIME_TO_WAIT_BACKPACK);
assertTrue("Sprite wasn't unpacked!", solo.waitForText(SPRITE_NAME_UNPACKED, 0, TIME_TO_WAIT));
}
public void testBackPackSpriteSimpleUnpackingAndDelete() {
solo.sleep(TIME_TO_WAIT_BACKPACK);
SpriteAdapter adapter = getSpriteAdapter();
assertNotNull("Could not get Adapter", adapter);
int oldCount = adapter.getGroupCount();
packSingleItem(SPRITE_NAME2, true);
solo.sleep(TIME_TO_WAIT_BACKPACK);
solo.goBack();
deleteSprite(SPRITE_NAME2);
solo.sleep(TIME_TO_WAIT);
UiTestUtils.openBackPack(solo);
clickOnBackPackItem(SPRITE_NAME2, unpackAsObject);
solo.waitForDialogToClose(TIME_TO_WAIT_BACKPACK);
assertTrue("Sprite wasn't unpacked!", solo.waitForText(SPRITE_NAME2, 0, TIME_TO_WAIT));
int newCount = adapter.getGroupCount();
assertEquals("Counts have to be equal", oldCount, newCount);
}
public void testBackPackSpriteMultipleUnpacking() {
solo.sleep(TIME_TO_WAIT_BACKPACK);
SpriteAdapter adapter = getSpriteAdapter();
int oldCount = adapter.getGroupCount();
assertNotNull("Could not get Adapter", adapter);
packSingleItem(SPRITE_NAME, true);
solo.sleep(TIME_TO_WAIT_BACKPACK);
clickOnBackPackItem(SPRITE_NAME, unpackAsObject);
solo.waitForDialogToClose(TIME_TO_WAIT_BACKPACK);
solo.sleep(TIME_TO_WAIT_BACKPACK);
assertTrue("Sprite wasn't unpacked!", solo.waitForText(SPRITE_NAME_UNPACKED, 0, TIME_TO_WAIT));
packSingleItem(SPRITE_NAME2, false);
solo.sleep(TIME_TO_WAIT_BACKPACK);
clickOnBackPackItem(SPRITE_NAME2, unpackAsObject);
solo.waitForDialogToClose(TIME_TO_WAIT_BACKPACK);
solo.sleep(TIME_TO_WAIT_BACKPACK);
solo.scrollDown();
solo.sleep(TIME_TO_WAIT);
assertTrue("Sprite wasn't unpacked!", solo.waitForText(SPRITE_NAME2_UNPACKED, 0, TIME_TO_WAIT));
int newCount = adapter.getGroupCount();
assertEquals("There are sprites missing", oldCount + 2, newCount);
}
public void testBackPackAndUnPackFromDifferentProgrammes() {
solo.sleep(TIME_TO_WAIT_BACKPACK);
SpriteAdapter adapter = getSpriteAdapter();
assertNotNull("Could not get Adapter", adapter);
packSingleItem(SPRITE_NAME, true);
solo.sleep(TIME_TO_WAIT_BACKPACK);
switchToProgrammeBackgroundFromBackpack(UiTestUtils.PROJECTNAME1);
UiTestUtils.openBackPack(solo);
solo.sleep(TIME_TO_WAIT_BACKPACK);
clickOnBackPackItem(SPRITE_NAME, unpackAsObject);
solo.waitForDialogToClose(TIME_TO_WAIT_BACKPACK);
assertTrue("Sprite wasn't unpacked!", solo.waitForText(SPRITE_NAME, 1, 3000));
}
public void testBackPackBackgroundSprite() {
solo.sleep(TIME_TO_WAIT_BACKPACK);
UiTestUtils.backPackAllItems(solo, getActivity(), SPRITE_NAME_BACKGROUND, SPRITE_NAME);
clickOnBackPackItem(SPRITE_NAME_BACKGROUND, unpackAsBackGround);
solo.waitForDialogToOpen(TIME_TO_WAIT_BACKPACK);
assertTrue("No replace background dialog was shown", solo.waitForText(solo.getString(R.string.unpack_background)));
solo.clickOnText(solo.getString(R.string.ok));
solo.waitForDialogToClose(TIME_TO_WAIT_BACKPACK);
assertTrue("Background sprite was not unpacked or renamed to background",
solo.waitForText(solo.getString(R.string.background)));
}
public void testBackPackActionModeCheckingAndTitle() {
UiTestUtils.openBackPackActionModeWhenEmpty(solo);
assertTrue("Bottom bar is visible", solo.getView(R.id.bottom_bar).getVisibility() == View.GONE);
int timeToWaitForTitle = 300;
String sprite = solo.getString(R.string.sprite);
String sprites = solo.getString(R.string.sprites);
assertFalse("Sprite should not be displayed in title", solo.waitForText(sprite, 3, 300, false, true));
// Check if checkboxes are visible
checkVisibilityOfViews(VISIBLE, VISIBLE, GONE, VISIBLE);
checkIfCheckboxesAreCorrectlyChecked(false, false, false);
int expectedNumberOfSelectedSprites = 1;
String expectedTitle = backpack + " " + expectedNumberOfSelectedSprites + " " + sprite;
solo.clickOnCheckBox(1);
checkIfCheckboxesAreCorrectlyChecked(false, true, false);
assertTrue("Title not as expected", solo.waitForText(expectedTitle, 0, timeToWaitForTitle, false, true));
expectedNumberOfSelectedSprites = 2;
expectedTitle = backpack + " " + expectedNumberOfSelectedSprites + " " + sprites;
// Check if multiple-selection is possible
solo.clickOnCheckBox(2);
checkIfCheckboxesAreCorrectlyChecked(false, true, true);
assertTrue("Title not as aspected", solo.waitForText(expectedTitle, 0, timeToWaitForTitle, false, true));
expectedNumberOfSelectedSprites = 1;
expectedTitle = backpack + " " + expectedNumberOfSelectedSprites + " " + sprite;
solo.clickOnCheckBox(1);
checkIfCheckboxesAreCorrectlyChecked(false, false, true);
assertTrue("Title not as expected", solo.waitForText(expectedTitle, 0, timeToWaitForTitle, false, true));
expectedTitle = backpack;
solo.clickOnCheckBox(2);
checkIfCheckboxesAreCorrectlyChecked(false, false, false);
assertTrue("Title not as expected", solo.waitForText(expectedTitle, 0, timeToWaitForTitle, false, true));
}
public void testBackPackActionModeIfNothingSelected() {
UiTestUtils.openBackPackActionModeWhenEmpty(solo);
int expectedNumberOfSprites = ProjectManager.getInstance().getCurrentProject().getDefaultScene().getSpriteList().size();
assertTrue("Bottom bar is visible", solo.getView(R.id.bottom_bar).getVisibility() == View.GONE);
checkIfCheckboxesAreCorrectlyChecked(false, false, false);
UiTestUtils.acceptAndCloseActionMode(solo);
assertFalse("ActionMode didn't disappear", solo.waitForText(backpack, 1, TIME_TO_WAIT, false, true));
checkIfNumberOfSpritesIsEqual(expectedNumberOfSprites);
UiTestUtils.openBackPackActionModeWhenEmpty(solo);
assertTrue("Bottom bar is visible", solo.getView(R.id.bottom_bar).getVisibility() == View.GONE);
checkIfCheckboxesAreCorrectlyChecked(false, false, false);
solo.goBack();
assertFalse("ActionMode didn't disappear", solo.waitForText(backpack, 1, TIME_TO_WAIT, false, true));
checkIfNumberOfSpritesIsEqual(expectedNumberOfSprites);
}
public void testBackPackActionModeIfSomethingSelectedAndPressingBack() {
UiTestUtils.openBackPackActionModeWhenEmpty(solo);
assertTrue("Bottom bar is visible", solo.getView(R.id.bottom_bar).getVisibility() == View.GONE);
solo.clickOnCheckBox(1);
solo.clickOnCheckBox(2);
checkIfCheckboxesAreCorrectlyChecked(false, true, true);
solo.goBack();
assertFalse("ActionMode didn't disappear", solo.waitForText(backpack, 1, TIME_TO_WAIT, false, true));
solo.sleep(TIME_TO_WAIT);
assertFalse("Backpack was opened, but shouldn't be!", solo.waitForText(backpackTitle, 1, TIME_TO_WAIT, false, true));
}
public void testBackPackSelectAll() {
UiTestUtils.openBackPackActionModeWhenEmpty(solo);
solo.waitForActivity("ProjectActivity");
String selectAll = solo.getString(R.string.select_all).toUpperCase(Locale.getDefault());
String deselectAll = solo.getString(R.string.deselect_all).toUpperCase(Locale.getDefault());
UiTestUtils.clickOnText(solo, selectAll);
for (CheckBox checkBox : solo.getCurrentViews(CheckBox.class)) {
assertTrue("CheckBox is not Checked!", checkBox.isChecked());
}
assertTrue("Deselect All is not shown", solo.waitForText(deselectAll, 1, 200, false, true));
UiTestUtils.acceptAndCloseActionMode(solo);
assertTrue("Backpack didn't appear", solo.waitForText(backpackTitle));
assertTrue("Sprite wasn't backpacked!", solo.waitForText(SPRITE_NAME_BACKGROUND, 0, TIME_TO_WAIT));
assertTrue("Sprite wasn't backpacked!", solo.waitForText(SPRITE_NAME, 0, TIME_TO_WAIT));
}
public void testBackPackSpriteDeleteContextMenu() {
UiTestUtils.backPackAllItems(solo, getActivity(), SPRITE_NAME_BACKGROUND, SPRITE_NAME);
SpriteListAdapter adapter = getSpriteListAdapter();
int oldCount = adapter.getCount();
List<Sprite> backPackSpriteList = BackPackListManager.getInstance().getBackPackedSprites();
clickOnBackPackItem(SPRITE_NAME, delete);
solo.sleep(TIME_TO_WAIT_BACKPACK);
int newCount = adapter.getCount();
solo.sleep(500);
assertEquals("Not all sprites were backpacked", 3, oldCount);
assertEquals("Sprite wasn't deleted in backpack", 2, newCount);
assertEquals("Count of the backpack spriteList is not correct", newCount, backPackSpriteList.size());
}
public void testBackPackSpriteDeleteActionMode() {
UiTestUtils.backPackAllItems(solo, getActivity(), SPRITE_NAME_BACKGROUND, SPRITE_NAME);
SpriteListAdapter adapter = getSpriteListAdapter();
int oldCount = adapter.getCount();
List<Sprite> backPackSpriteList = BackPackListManager.getInstance().getBackPackedSprites();
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 sprites were backpacked", 3, oldCount);
assertEquals("Sprite wasn't deleted in backpack", 0, newCount);
assertEquals("Count of the backpack spritlist is not correct", newCount, backPackSpriteList.size());
}
public void testBackPackSpriteActionModeDifferentProgrammes() {
UiTestUtils.backPackAllItems(solo, getActivity(), SPRITE_NAME_BACKGROUND, SPRITE_NAME);
switchToProgrammeBackgroundFromBackpack(UiTestUtils.PROJECTNAME1);
UiTestUtils.openBackPack(solo);
UiTestUtils.openActionMode(solo, unpackAsObject, R.id.unpacking_object);
String selectAll = solo.getString(R.string.select_all).toUpperCase(Locale.getDefault());
UiTestUtils.clickOnText(solo, selectAll);
UiTestUtils.acceptAndCloseActionMode(solo);
solo.waitForActivity(ProjectActivity.class);
assertTrue("Background sprite wasn't unpacked, but should be!", solo.waitForText(SPRITE_NAME_BACKGROUND, 1,
1000));
assertTrue("Sprite wasn't unpacked!", solo.waitForText(SPRITE_NAME, 1, 1000));
UiTestUtils.deleteAllItems(solo);
assertFalse("Sprite wasn't deleted!", solo.waitForText(SPRITE_NAME, 1, 1000));
assertFalse("Sprite wasn't deleted!", solo.waitForText(SPRITE_NAME2, 1, 1000));
}
public void testBackPackDeleteActionModeCheckingAndTitle() {
solo.sleep(TIME_TO_WAIT_BACKPACK);
UiTestUtils.backPackAllItems(solo, getActivity(), SPRITE_NAME_BACKGROUND, SPRITE_NAME);
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 sprite = solo.getString(R.string.sprite);
String sprites = solo.getString(R.string.sprites);
assertFalse("Sprite should not be displayed in title", solo.waitForText(sprite, 3, 300, false, true));
// Check if checkboxes are visible
checkVisibilityOfViews(VISIBLE, VISIBLE, GONE, VISIBLE);
checkIfCheckboxesAreCorrectlyChecked(false, false, false);
int expectedNumberOfSelectedSprites = 1;
String expectedTitle = delete + " " + expectedNumberOfSelectedSprites + " " + sprite;
solo.sleep(TIME_TO_WAIT_BACKPACK);
solo.clickOnCheckBox(0);
solo.sleep(TIME_TO_WAIT_BACKPACK);
checkIfCheckboxesAreCorrectlyChecked(true, false, false);
assertTrue("Title not as expected" + expectedTitle, solo.waitForText(expectedTitle, 0, timeToWaitForTitle, false, true));
expectedNumberOfSelectedSprites = 2;
expectedTitle = delete + " " + expectedNumberOfSelectedSprites + " " + sprites;
// Check if multiple-selection is possible
solo.clickOnCheckBox(1);
checkIfCheckboxesAreCorrectlyChecked(true, true, false);
assertTrue("Title not as aspected", solo.waitForText(expectedTitle, 0, timeToWaitForTitle, false, true));
expectedNumberOfSelectedSprites = 1;
expectedTitle = delete + " " + expectedNumberOfSelectedSprites + " " + sprite;
solo.clickOnCheckBox(0);
checkIfCheckboxesAreCorrectlyChecked(false, true, false);
assertTrue("Title not as expected", solo.waitForText(expectedTitle, 0, timeToWaitForTitle, false, true));
expectedTitle = delete;
solo.clickOnCheckBox(1);
checkIfCheckboxesAreCorrectlyChecked(false, false, false);
assertTrue("Title not as expected", solo.waitForText(expectedTitle, 0, timeToWaitForTitle, false, true));
}
public void testBackPackDeleteActionModeIfNothingSelected() {
UiTestUtils.backPackAllItems(solo, getActivity(), SPRITE_NAME_BACKGROUND, SPRITE_NAME);
UiTestUtils.openActionMode(solo, delete, R.id.delete);
int expectedNumberOfSprites = BackPackListManager.getInstance().getBackPackedSprites().size();
assertTrue("Bottom bar is visible", solo.getView(R.id.bottom_bar).getVisibility() == View.GONE);
checkIfCheckboxesAreCorrectlyChecked(false, false, false);
UiTestUtils.acceptAndCloseActionMode(solo);
assertFalse("ActionMode didn't disappear", solo.waitForText(delete, 1, TIME_TO_WAIT, false, true));
checkIfNumberOfSpritesIsEqual(expectedNumberOfSprites);
UiTestUtils.openActionMode(solo, delete, R.id.delete);
assertTrue("Bottom bar is visible", solo.getView(R.id.bottom_bar).getVisibility() == View.GONE);
checkIfCheckboxesAreCorrectlyChecked(false, false, false);
solo.goBack();
assertFalse("ActionMode didn't disappear", solo.waitForText(delete, 1, TIME_TO_WAIT, false, true));
checkIfNumberOfSpritesIsEqual(expectedNumberOfSprites);
}
public void testBackPackDeleteActionModeIfSomethingSelectedAndPressingBack() {
UiTestUtils.backPackAllItems(solo, getActivity(), SPRITE_NAME_BACKGROUND, SPRITE_NAME);
UiTestUtils.openActionMode(solo, delete, R.id.delete);
assertTrue("Bottom bar is visible", solo.getView(R.id.bottom_bar).getVisibility() == View.GONE);
solo.clickOnCheckBox(1);
solo.clickOnCheckBox(2);
checkIfCheckboxesAreCorrectlyChecked(false, true, true);
solo.goBack();
assertFalse("ActionMode didn't disappear", solo.waitForText(delete, 1, TIME_TO_WAIT, false, true));
}
public void testBackPackDeleteSelectAll() {
UiTestUtils.backPackAllItems(solo, getActivity(), SPRITE_NAME_BACKGROUND, SPRITE_NAME);
UiTestUtils.openActionMode(solo, delete, R.id.delete);
solo.waitForActivity("BackPackActivity");
String selectAll = solo.getString(R.string.select_all).toUpperCase(Locale.getDefault());
UiTestUtils.clickOnText(solo, selectAll);
checkIfCheckboxesAreCorrectlyChecked(true, true, true);
assertFalse("Select All is still shown", solo.waitForText(selectAll, 1, 200, false, true));
UiTestUtils.acceptAndCloseActionMode(solo);
solo.sleep(TIME_TO_WAIT_BACKPACK);
assertFalse("Sprite wasn't deleted!", solo.waitForText(SPRITE_NAME_BACKGROUND, 0, TIME_TO_WAIT, false, true));
assertFalse("Sprite wasn't deleted!", solo.waitForText(SPRITE_NAME, 0, TIME_TO_WAIT, false, true));
assertFalse("Sprite wasn't deleted!", solo.waitForText(SPRITE_NAME2, 0, TIME_TO_WAIT, false, true));
assertTrue("No empty bg found!", solo.waitForText(solo.getString(R.string.is_empty), 0, TIME_TO_WAIT));
}
public void testBackPackShowAndHideDetails() {
UiTestUtils.backPackAllItems(solo, getActivity(), SPRITE_NAME_BACKGROUND, SPRITE_NAME);
int timeToWait = 500;
solo.sleep(timeToWait);
checkVisibilityOfViews(VISIBLE, VISIBLE, GONE, GONE);
solo.clickOnMenuItem(solo.getString(R.string.show_details));
solo.sleep(timeToWait);
checkVisibilityOfViews(VISIBLE, VISIBLE, VISIBLE, GONE);
// Test if showDetails is remembered after pressing back
solo.goBack();
solo.waitForActivity(ProjectActivity.class.getSimpleName());
UiTestUtils.openBackPack(solo);
solo.waitForActivity(BackPackActivity.class.getSimpleName());
solo.sleep(timeToWait);
checkVisibilityOfViews(VISIBLE, VISIBLE, VISIBLE, GONE);
solo.sleep(timeToWait);
solo.clickOnMenuItem(solo.getString(R.string.hide_details));
solo.sleep(timeToWait);
checkVisibilityOfViews(VISIBLE, VISIBLE, GONE, GONE);
}
public void testBackPackSpriteWithLooksSoundsAndScripts() {
solo.goBack();
UiTestUtils.createEmptyProjectWithoutScript();
UiTestUtils.createTestProjectWithSpecialBricksForBackPack(UiTestUtils.DEFAULT_TEST_PROJECT_NAME);
UiTestUtils.prepareForSpecialBricksTest(getInstrumentation().getContext(), RESOURCE_IMAGE,
RESOURCE_SOUND, TEST_LOOK_NAME, TEST_SOUND_NAME);
solo.clickOnText(continueMenu);
solo.sleep(TIME_TO_WAIT);
packSingleItem(SPRITE_NAME_BACKGROUND, true);
solo.waitForDialogToClose(TIME_TO_WAIT_BACKPACK);
assertTrue("BackPack title didn't show up",
solo.waitForText(backpackTitle, 0, TIME_TO_WAIT_BACKPACK));
assertTrue("Sprite wasn't backpacked!", solo.waitForText(SPRITE_NAME_BACKGROUND, 0, TIME_TO_WAIT));
solo.goBack();
solo.sleep(TIME_TO_WAIT);
solo.clickOnText(SPRITE_NAME_BACKGROUND);
solo.sleep(TIME_TO_WAIT_BACKPACK);
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.clickOnText(solo.getString(R.string.scripts));
solo.sleep(TIME_TO_WAIT_BACKPACK);
UiTestUtils.openBackPackActionModeWhenEmpty(solo);
assertFalse("Visible Backpack was opened despite script should be in hidden backpack", solo.waitForText(unpack, 1, TIME_TO_WAIT_BACKPACK));
assertTrue("Scripts are not in hidden backpack!", BackPackListManager.getInstance().getHiddenBackpackedScripts().size() == 2);
solo.goBack();
switchToProgrammeBackgroundFromSpritesList(UiTestUtils.PROJECTNAME3);
solo.waitForText(solo.getString(R.string.background));
solo.clickOnText(solo.getString(R.string.background));
solo.waitForText(solo.getString(R.string.scripts));
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();
solo.goBack();
solo.goBack();
UiTestUtils.openBackPack(solo);
solo.sleep(TIME_TO_WAIT_BACKPACK);
clickOnBackPackItem(SPRITE_NAME_BACKGROUND, unpackAsBackGround);
solo.waitForDialogToOpen();
solo.waitForText(solo.getString(R.string.unpack_background));
solo.clickOnText(solo.getString(R.string.ok));
solo.waitForDialogToClose();
solo.waitForDialogToClose(TIME_TO_WAIT_BACKPACK);
solo.sleep(TIME_TO_WAIT_BACKPACK);
solo.clickOnText(solo.getString(R.string.background));
solo.clickOnText(solo.getString(R.string.scripts));
solo.sleep(TIME_TO_WAIT_BACKPACK);
assertEquals("Brick count in current sprite not correct", numberOfBricksInBrickList + 8,
ProjectManager.getInstance().getCurrentSprite().getNumberOfBricks());
listView = solo.getCurrentViews(ListView.class).get(solo.getCurrentViews(ListView.class).size() - 1);
assertEquals("Brick count in list view not correct", brickCountInView + 9, listView.getCount());
ProjectManager projectManager = ProjectManager.getInstance();
solo.sleep(TIME_TO_WAIT_BACKPACK);
DataContainer dataContainer = projectManager.getCurrentProject().getDefaultScene().getDataContainer();
UserVariable spriteUserVariable = dataContainer.getUserVariable("sprite_var", projectManager.getCurrentSprite());
UserVariable projectUserVariable = dataContainer.getProjectVariables().get(0);
UserList projectUserList = dataContainer.getUserList("global_list", null);
UserList spriteUserList = dataContainer.getSpriteListOfLists(projectManager.getCurrentSprite()).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 variable was not unpacked", projectUserVariable.getName().equals("global_var"));
assertTrue("Project user variable 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 from PointToBrick was not unpacked!", solo.waitForText("dog", 1, TIME_TO_WAIT_BACKPACK));
}
public void testBackPackSpriteWithUserBrick() {
solo.goBack();
UiTestUtils.createTestProjectWithUserBrick();
solo.clickOnText(continueMenu);
solo.waitForActivity(ProjectActivity.class);
solo.waitForFragmentByTag(SpritesListFragment.TAG);
SpriteAdapter adapter = getSpriteAdapter();
assertNotNull("Could not get Adapter", adapter);
clickOnActionModeSingleItem(SPRITE_NAME_BACKGROUND, R.string.backpack, R.id.backpack);
solo.sleep(TIME_TO_WAIT_BACKPACK);
switchToProgrammeBackgroundFromBackpack(UiTestUtils.PROJECTNAME1);
UiTestUtils.openBackPack(solo);
solo.sleep(TIME_TO_WAIT_BACKPACK);
clickOnBackPackItem(SPRITE_NAME_BACKGROUND, unpackAsObject);
solo.waitForDialogToClose(TIME_TO_WAIT_BACKPACK);
assertTrue("Sprite wasn't unpacked!", solo.waitForText(SPRITE_NAME_BACKGROUND, 0,
TIME_TO_WAIT_BACKPACK, false, true));
solo.clickOnText(SPRITE_NAME_BACKGROUND);
solo.clickOnText(solo.getString(R.string.scripts));
solo.waitForActivity(ScriptActivity.class);
solo.waitForFragmentByTag(ScriptFragment.TAG);
UiTestUtils.getIntoUserBrickOverView(solo);
assertTrue("No UserBrick was unpacked!", solo.waitForText(UiTestUtils.TEST_USER_BRICK_NAME, 0,
TIME_TO_WAIT_BACKPACK, false, true));
}
public void testBackPackAlreadyPackedDialogSingleItem() {
packSingleItem(SPRITE_NAME, true);
solo.sleep(TIME_TO_WAIT_BACKPACK);
assertTrue("Sprite wasn't backpacked!", solo.waitForText(SPRITE_NAME, 0, TIME_TO_WAIT, false, true));
solo.goBack();
solo.waitForActivity(ScriptActivity.class.getSimpleName());
packSingleItem(SPRITE_NAME, false);
solo.waitForDialogToOpen();
assertTrue("Sprite already exists backpack dialog not shown!", solo.waitForText(backpackReplaceDialogMultiple, 0,
TIME_TO_WAIT, false, true));
solo.clickOnButton(solo.getString(R.string.yes));
solo.waitForDialogToClose();
solo.waitForActivity(BackPackActivity.class);
solo.waitForFragmentByTag(SpritesListFragment.TAG);
solo.sleep(200);
assertTrue("Should be in backpack!", solo.waitForText(backpackTitle, 0, TIME_TO_WAIT, false, true));
assertTrue("Sprite wasn't backpacked!", solo.waitForText(SPRITE_NAME, 0, TIME_TO_WAIT, false, true));
assertTrue("Sprite was not replaced!", BackPackListManager.getInstance().getBackPackedSprites().size() == 1);
}
public void testBackPackAlreadyPackedDialogMultipleItems() {
UiTestUtils.backPackAllItems(solo, getActivity(), SPRITE_NAME, SPRITE_NAME2);
assertTrue("Sprite wasn't backpacked!", solo.waitForText(SPRITE_NAME, 0, TIME_TO_WAIT));
solo.goBack();
solo.waitForActivity(ScriptActivity.class.getSimpleName());
UiTestUtils.openBackPackActionMode(solo);
String selectAll = solo.getString(R.string.select_all).toUpperCase(Locale.getDefault());
UiTestUtils.clickOnText(solo, selectAll);
UiTestUtils.acceptAndCloseActionMode(solo);
solo.waitForDialogToOpen();
assertTrue("Sprite already exists backpack dialog not shown!", solo.waitForText(backpackReplaceDialogMultiple, 0,
TIME_TO_WAIT));
solo.clickOnButton(solo.getString(R.string.yes));
solo.waitForDialogToClose();
solo.waitForActivity(BackPackActivity.class);
solo.waitForFragmentByTag(SpritesListFragment.TAG);
solo.sleep(200);
assertTrue("Should be in backpack!", solo.waitForText(backpackTitle, 0, TIME_TO_WAIT));
assertTrue("Sprite wasn't backpacked!", solo.waitForText(SPRITE_NAME_BACKGROUND, 0, TIME_TO_WAIT));
assertTrue("Sprite wasn't backpacked!", solo.waitForText(SPRITE_NAME, 0, TIME_TO_WAIT));
assertTrue("Sprite wasn't backpacked!", solo.waitForText(SPRITE_NAME2, 0, TIME_TO_WAIT));
assertTrue("Sprite was not replaced!", BackPackListManager.getInstance().getBackPackedSprites().size() == 3);
}
public void testBackPackSerializationAndDeserialization() {
File backPackFile = new File(buildPath(DEFAULT_ROOT, BACKPACK_DIRECTORY, StorageHandler.BACKPACK_FILENAME));
assertFalse("Backpack.json should not exist!", backPackFile.exists());
UiTestUtils.backPackAllItems(solo, getActivity(), SPRITE_NAME_BACKGROUND, SPRITE_NAME);
solo.goBack();
solo.sleep(TIME_TO_WAIT_BACKPACK);
assertTrue("No items have been backpacked!", !BackPackListManager.getInstance().getBackpack()
.backpackedSprites.isEmpty());
backPackFile = new File(buildPath(DEFAULT_ROOT, BACKPACK_DIRECTORY, StorageHandler.BACKPACK_FILENAME));
assertTrue("Backpack.json has not been saved!", backPackFile.exists());
UiTestUtils.clearBackPack(false);
solo.sleep(TIME_TO_WAIT);
assertTrue("Backpacked items not deleted!", BackPackListManager.getInstance().getBackpack()
.backpackedSprites.isEmpty());
BackPackListManager.getInstance().loadBackpack();
solo.sleep(TIME_TO_WAIT_BACKPACK);
assertTrue("Backpacked items haven't been restored from backpack.json!", !BackPackListManager.getInstance()
.getBackpack().backpackedSprites.isEmpty());
}
public void testBackPackWithGroups() {
String firstTestItemNamePacked = SPRITE_NAME_BACKGROUND;
String secondTestItemNamePacked = "third_sprite";
prepareGroupingTest(true);
SpriteAdapter adapter = getSpriteAdapter();
assertNotNull("Could not get Adapter", adapter);
UiTestUtils.checkAllItemsForBackpack(solo, getActivity());
assertEquals("It should not be possible to backpack group items, but more or less items are checked", 6, adapter
.getAmountOfCheckedItems());
UiTestUtils.backpackAllCheckedItems(solo, firstTestItemNamePacked, secondTestItemNamePacked);
SpriteListAdapter spriteListAdapter = getSpriteListAdapter();
assertNotNull("Could not get Adapter", spriteListAdapter);
assertEquals("Wrong number of items in backpack", 6, spriteListAdapter.getCount());
clickOnBackPackItem(firstTestItemNamePacked, unpackAsObject);
solo.waitForDialogToClose(TIME_TO_WAIT_BACKPACK);
assertEquals("Item was not unpacked from backpack", 5, adapter.getGroupCount());
assertEquals("Item was unpacked as GroupItem instead of as a SingleSprite", 3, adapter.getChildrenCount(2));
}
public void testCopyWithGroups() {
prepareGroupingTest(true);
SpriteAdapter adapter = getSpriteAdapter();
assertNotNull("Could not get Adapter", adapter);
UiTestUtils.openActionMode(solo, solo.getString(R.string.copy), R.id.copy);
UiTestUtils.selectAllItems(solo);
assertEquals("It should not be possible to copy GroupSprites and the background sprite, but more or less "
+ "items are checked", 5, adapter.getAmountOfCheckedItems());
UiTestUtils.acceptAndCloseActionMode(solo);
solo.sleep(TIME_TO_WAIT_BACKPACK);
assertEquals("Items were not copied as groups", 9, adapter.getGroupCount());
for (int copiedGroupPosition = 4; copiedGroupPosition < 9; copiedGroupPosition++) {
assertTrue("Item not copied as SingleSprite at position " + copiedGroupPosition,
adapter.getGroup(copiedGroupPosition) instanceof SingleSprite);
}
}
public void testDeleteWithGroups() {
prepareGroupingTest(true);
SpriteAdapter adapter = getSpriteAdapter();
assertNotNull("Could not get Adapter", adapter);
UiTestUtils.openActionMode(solo, solo.getString(R.string.delete), R.id.delete);
UiTestUtils.selectAllItems(solo);
solo.sleep(TIME_TO_WAIT);
assertEquals("It should not be possible to delete the background sprite, but it seems to be checked", 7, adapter
.getAmountOfCheckedItems());
UiTestUtils.acceptAndCloseActionMode(solo);
solo.waitForDialogToOpen();
if (solo.waitForText(solo.getString(R.string.yes), 1, 800)) {
solo.clickOnButton(solo.getString(R.string.yes));
}
solo.sleep(TIME_TO_WAIT);
assertEquals("Probably group items have been deleted", 1, adapter.getGroupCount());
assertEquals("The wrong number of items is in the spritelist", 1, ProjectManager.getInstance()
.getCurrentScene().getSpriteList().size());
}
public void testShowAndHideDetails() {
prepareGroupingTest(true);
int timeToWait = 500;
solo.sleep(timeToWait);
checkVisibilityOfViews(VISIBLE, VISIBLE, GONE, GONE);
solo.clickOnMenuItem(solo.getString(R.string.show_details));
solo.sleep(timeToWait);
checkVisibilityOfViews(VISIBLE, VISIBLE, VISIBLE, GONE);
assertFalse("Object detail text is shown, but shouldn't", solo.searchText(solo.getString(R.string
.number_of_objects), 0, false, true));
// Test if showDetails is remembered after pressing back
solo.goBack();
solo.waitForActivity(MainMenuActivity.class.getSimpleName());
solo.waitForText(continueMenu);
solo.clickOnText(continueMenu);
solo.waitForActivity(ProjectActivity.class.getSimpleName());
solo.sleep(timeToWait);
checkVisibilityOfViews(VISIBLE, VISIBLE, VISIBLE, GONE);
solo.sleep(timeToWait);
solo.clickOnMenuItem(solo.getString(R.string.hide_details));
solo.sleep(timeToWait);
checkVisibilityOfViews(VISIBLE, VISIBLE, GONE, GONE);
}
public void testGroupAddRenameAndDeleteActions() {
prepareGroupingTest(true);
String defaultGroupName = solo.getString(R.string.group) + " 3";
String renamedGroupName = solo.getString(R.string.group) + " 4";
String firstGroupName = "second_sprite";
String secondGroupName = "fourth_sprite";
String create = solo.getString(R.string.groups_create);
SpriteAdapter adapter = getSpriteAdapter();
assertNotNull("Could not get Adapter", adapter);
UiTestUtils.openActionMode(solo, create, R.id.groups_create);
solo.waitForDialogToOpen();
assertTrue("Wrong or no default text appeared for new group", solo.searchText(defaultGroupName, 0, false, true));
solo.clickOnButton(solo.getString(R.string.ok));
solo.waitForDialogToClose();
solo.sleep(TIME_TO_WAIT);
assertTrue("Group has not been added", solo.searchText(defaultGroupName, 0, false, true));
assertEquals("Wrong group count", 5, adapter.getGroupCount());
UiTestUtils.openActionMode(solo, rename, R.id.rename);
solo.clickOnText(defaultGroupName);
UiTestUtils.acceptAndCloseActionMode(solo);
renameGroup(renamedGroupName, true, secondGroupName);
UiTestUtils.openActionMode(solo, rename, R.id.rename);
solo.clickOnText(renamedGroupName);
UiTestUtils.acceptAndCloseActionMode(solo);
renameGroup(defaultGroupName, false, null);
UiTestUtils.openActionMode(solo, delete, R.id.delete);
solo.scrollUp();
solo.clickOnText(firstGroupName);
UiTestUtils.acceptAndCloseActionMode(solo);
deleteGroup(true);
assertEquals("Group has not been deleted or GroupItemSprite not been converted to SingleSprite", 5, adapter.getGroupCount());
assertEquals("Group has not been deleted", 2, adapter.getGroupNames().size());
assertTrue("Group item has not been converted to SingleSprite", ProjectManager.getInstance().getCurrentScene().getSpriteList()
.get(1) instanceof SingleSprite);
UiTestUtils.openActionMode(solo, delete, R.id.delete);
solo.clickOnText(secondGroupName);
UiTestUtils.acceptAndCloseActionMode(solo);
deleteGroup(false);
assertEquals("Group and GroupItemSprites have not been deleted", 4, adapter.getGroupCount());
assertEquals("Group has not been deleted", 1, adapter.getGroupNames().size());
assertEquals("Number of spriteList items is wrong", 4, ProjectManager.getInstance().getCurrentScene().getSpriteList().size());
}
public void testLoadOldProjectAndConvertSpritesForGrouping() {
prepareGroupingTest(false);
assertTrue("Sprite has not been converted to SingleSprite and is therefore not visible",
solo.searchText(SPRITE_NAME, 0, false, true));
for (int spritePosition = 0; spritePosition < ProjectManager.getInstance().getCurrentScene().getSpriteList().size();
spritePosition++) {
assertTrue("Group item has not been converted to SingleSprite",
ProjectManager.getInstance().getCurrentScene().getSpriteList().get(spritePosition) instanceof SingleSprite);
}
}
public void testExpandAndCollapseGroup() {
prepareGroupingTest(true);
String firstGroupName = "second_sprite";
String groupItemNameOfFirstGroup = "third_sprite";
checkGroupIndicatorVisibility(false);
assertFalse("Group is expanded", solo.searchText(groupItemNameOfFirstGroup, 0, false, true));
solo.clickOnText(firstGroupName);
checkGroupIndicatorVisibility(true);
assertTrue("Group is not expanded", solo.searchText(groupItemNameOfFirstGroup, 0, false, true));
solo.clickOnText(firstGroupName);
checkGroupIndicatorVisibility(false);
assertFalse("Group is expanded", solo.searchText(groupItemNameOfFirstGroup, 0, false, true));
}
public void testDragAndDropSingleSpritesAndGroupItemSprites() {
prepareGroupingTest(true);
String secondSpriteName = "second_sprite";
String thirdSpriteName = "third_sprite";
String fourthSpriteName = "fourth_sprite";
String fifthSpriteName = "fifth_sprite";
String sixthSpriteName = "sixth_sprite";
String seventhSpriteName = "seventh_sprite";
String eightSpriteName = "eight_sprite";
solo.clickOnText(secondSpriteName);
List<Sprite> spriteList = ProjectManager.getInstance().getCurrentScene().getSpriteList();
ArrayList<Integer> yPositionList = UiTestUtils.getListItemYPositions(solo, 0);
UiTestUtils.longClickAndDrag(solo, 10, yPositionList.get(2), 10, yPositionList.get(1) - DRAG_AND_DROP_Y_OFFSET, 20);
assertEquals("Wrong list order after DragAndDrop", thirdSpriteName, spriteList.get(1).getName());
assertEquals("Wrong list order after DragAndDrop", secondSpriteName, spriteList.get(2).getName());
assertTrue("Sprite has incorrect instance after DragAndDrop", spriteList.get(1) instanceof SingleSprite);
assertTrue("Sprite has incorrect instance after DragAndDrop", spriteList.get(2) instanceof GroupSprite);
yPositionList = UiTestUtils.getListItemYPositions(solo, 0);
UiTestUtils.longClickAndDrag(solo, 10, yPositionList.get(1), 10, yPositionList.get(2) + DRAG_AND_DROP_Y_OFFSET, 20);
assertEquals("Wrong list order after DragAndDrop", secondSpriteName, spriteList.get(1).getName());
assertEquals("Wrong list order after DragAndDrop", thirdSpriteName, spriteList.get(2).getName());
assertTrue("Sprite has incorrect instance after DragAndDrop", spriteList.get(1) instanceof GroupSprite);
assertTrue("Sprite has incorrect instance after DragAndDrop", spriteList.get(2) instanceof GroupItemSprite);
solo.clickOnText(fourthSpriteName);
yPositionList = UiTestUtils.getListItemYPositions(solo, 0);
UiTestUtils.longClickAndDrag(solo, 10, yPositionList.get(4), 10, yPositionList.get(5) + DRAG_AND_DROP_Y_OFFSET, 20);
assertEquals("Wrong list order after DragAndDrop", sixthSpriteName, spriteList.get(4).getName());
assertEquals("Wrong list order after DragAndDrop", fifthSpriteName, spriteList.get(5).getName());
assertTrue("Sprite has incorrect instance after DragAndDrop", spriteList.get(4) instanceof GroupItemSprite);
assertTrue("Sprite has incorrect instance after DragAndDrop", spriteList.get(5) instanceof GroupItemSprite);
yPositionList = UiTestUtils.getListItemYPositions(solo, 0);
UiTestUtils.longClickAndDrag(solo, 10, yPositionList.get(4), 10, yPositionList.get(3) - DRAG_AND_DROP_Y_OFFSET, 20);
assertEquals("Wrong list order after DragAndDrop", sixthSpriteName, spriteList.get(3).getName());
assertEquals("Wrong list order after DragAndDrop", fourthSpriteName, spriteList.get(4).getName());
assertTrue("Sprite has incorrect instance after DragAndDrop", spriteList.get(3) instanceof SingleSprite);
assertTrue("Sprite has incorrect instance after DragAndDrop", spriteList.get(4) instanceof GroupSprite);
solo.clickOnText(fourthSpriteName);
yPositionList = UiTestUtils.getListItemYPositions(solo, 0);
UiTestUtils.longClickAndDrag(solo, 10, yPositionList.get(3), 10, yPositionList.get(4) + DRAG_AND_DROP_Y_OFFSET, 20);
solo.clickOnText(fourthSpriteName);
assertEquals("Wrong list order after DragAndDrop", fourthSpriteName, spriteList.get(3).getName());
assertEquals("Wrong list order after DragAndDrop", fifthSpriteName, spriteList.get(4).getName());
assertEquals("Wrong list order after DragAndDrop", seventhSpriteName, spriteList.get(5).getName());
assertEquals("Wrong list order after DragAndDrop", sixthSpriteName, spriteList.get(6).getName());
assertTrue("Sprite has incorrect instance after DragAndDrop", spriteList.get(3) instanceof GroupSprite);
assertTrue("Sprite has incorrect instance after DragAndDrop", spriteList.get(4) instanceof GroupItemSprite);
assertTrue("Sprite has incorrect instance after DragAndDrop", spriteList.get(5) instanceof GroupItemSprite);
assertTrue("Sprite has incorrect instance after DragAndDrop", spriteList.get(6) instanceof GroupItemSprite);
assertTrue("Sprite has incorrect instance after DragAndDrop", spriteList.get(7) instanceof SingleSprite);
solo.clickOnText(fourthSpriteName);
yPositionList = UiTestUtils.getListItemYPositions(solo, 0);
UiTestUtils.longClickAndDrag(solo, 10, yPositionList.get(4), 10, yPositionList.get(3) - DRAG_AND_DROP_Y_OFFSET, 20);
assertEquals("Wrong list order after DragAndDrop", fourthSpriteName, spriteList.get(3).getName());
assertEquals("Wrong list order after DragAndDrop", fifthSpriteName, spriteList.get(4).getName());
assertEquals("Wrong list order after DragAndDrop", seventhSpriteName, spriteList.get(5).getName());
assertEquals("Wrong list order after DragAndDrop", sixthSpriteName, spriteList.get(6).getName());
assertEquals("Wrong list order after DragAndDrop", eightSpriteName, spriteList.get(7).getName());
assertTrue("Sprite has incorrect instance after DragAndDrop", spriteList.get(3) instanceof GroupSprite);
assertTrue("Sprite has incorrect instance after DragAndDrop", spriteList.get(4) instanceof GroupItemSprite);
assertTrue("Sprite has incorrect instance after DragAndDrop", spriteList.get(5) instanceof GroupItemSprite);
assertTrue("Sprite has incorrect instance after DragAndDrop", spriteList.get(6) instanceof GroupItemSprite);
assertTrue("Sprite has incorrect instance after DragAndDrop", spriteList.get(7) instanceof GroupItemSprite);
}
public void testDragAndDropGroupSprites() {
prepareGroupingTest(true);
String secondSpriteName = "second_sprite";
String thirdSpriteName = "third_sprite";
String fourthSpriteName = "fourth_sprite";
String fifthSpriteName = "fifth_sprite";
String sixthSpriteName = "sixth_sprite";
String seventhSpriteName = "seventh_sprite";
String eightSpriteName = "eight_sprite";
List<Sprite> spriteList = ProjectManager.getInstance().getCurrentScene().getSpriteList();
ArrayList<Integer> yPositionList = UiTestUtils.getListItemYPositions(solo, 0);
UiTestUtils.longClickAndDrag(solo, 10, yPositionList.get(1), 10, yPositionList.get(2) + DRAG_AND_DROP_Y_OFFSET, 20);
assertEquals("Wrong list order after DragAndDrop", fourthSpriteName, spriteList.get(1).getName());
assertEquals("Wrong list order after DragAndDrop", fifthSpriteName, spriteList.get(2).getName());
assertEquals("Wrong list order after DragAndDrop", sixthSpriteName, spriteList.get(3).getName());
assertEquals("Wrong list order after DragAndDrop", seventhSpriteName, spriteList.get(4).getName());
assertEquals("Wrong list order after DragAndDrop", secondSpriteName, spriteList.get(5).getName());
assertTrue("Sprite has incorrect instance after DragAndDrop", spriteList.get(1) instanceof GroupSprite);
assertTrue("Sprite has incorrect instance after DragAndDrop", spriteList.get(2) instanceof GroupItemSprite);
assertTrue("Sprite has incorrect instance after DragAndDrop", spriteList.get(3) instanceof GroupItemSprite);
assertTrue("Sprite has incorrect instance after DragAndDrop", spriteList.get(4) instanceof GroupItemSprite);
assertTrue("Sprite has incorrect instance after DragAndDrop", spriteList.get(5) instanceof GroupSprite);
yPositionList = UiTestUtils.getListItemYPositions(solo, 0);
UiTestUtils.longClickAndDrag(solo, 10, yPositionList.get(2), 10, yPositionList.get(1) - DRAG_AND_DROP_Y_OFFSET, 20);
assertEquals("Wrong list order after DragAndDrop", secondSpriteName, spriteList.get(1).getName());
assertEquals("Wrong list order after DragAndDrop", thirdSpriteName, spriteList.get(2).getName());
assertEquals("Wrong list order after DragAndDrop", fourthSpriteName, spriteList.get(3).getName());
assertEquals("Wrong list order after DragAndDrop", fifthSpriteName, spriteList.get(4).getName());
assertTrue("Sprite has incorrect instance after DragAndDrop", spriteList.get(1) instanceof GroupSprite);
assertTrue("Sprite has incorrect instance after DragAndDrop", spriteList.get(2) instanceof GroupItemSprite);
assertTrue("Sprite has incorrect instance after DragAndDrop", spriteList.get(3) instanceof GroupSprite);
assertTrue("Sprite has incorrect instance after DragAndDrop", spriteList.get(4) instanceof GroupItemSprite);
yPositionList = UiTestUtils.getListItemYPositions(solo, 0);
UiTestUtils.longClickAndDrag(solo, 10, yPositionList.get(2), 10, yPositionList.get(3) + DRAG_AND_DROP_Y_OFFSET, 20);
assertEquals("Wrong list order after DragAndDrop", eightSpriteName, spriteList.get(3).getName());
assertEquals("Wrong list order after DragAndDrop", fourthSpriteName, spriteList.get(4).getName());
assertEquals("Wrong list order after DragAndDrop", fifthSpriteName, spriteList.get(5).getName());
assertTrue("Sprite has incorrect instance after DragAndDrop", spriteList.get(3) instanceof SingleSprite);
assertTrue("Sprite has incorrect instance after DragAndDrop", spriteList.get(4) instanceof GroupSprite);
assertTrue("Sprite has incorrect instance after DragAndDrop", spriteList.get(5) instanceof GroupItemSprite);
yPositionList = UiTestUtils.getListItemYPositions(solo, 0);
UiTestUtils.longClickAndDrag(solo, 10, yPositionList.get(3), 10, yPositionList.get(2) - DRAG_AND_DROP_Y_OFFSET, 20);
assertEquals("Wrong list order after DragAndDrop", fourthSpriteName, spriteList.get(3).getName());
assertEquals("Wrong list order after DragAndDrop", fifthSpriteName, spriteList.get(4).getName());
assertEquals("Wrong list order after DragAndDrop", sixthSpriteName, spriteList.get(5).getName());
assertEquals("Wrong list order after DragAndDrop", seventhSpriteName, spriteList.get(6).getName());
assertEquals("Wrong list order after DragAndDrop", eightSpriteName, spriteList.get(7).getName());
assertTrue("Sprite has incorrect instance after DragAndDrop", spriteList.get(3) instanceof GroupSprite);
assertTrue("Sprite has incorrect instance after DragAndDrop", spriteList.get(4) instanceof GroupItemSprite);
assertTrue("Sprite has incorrect instance after DragAndDrop", spriteList.get(5) instanceof GroupItemSprite);
assertTrue("Sprite has incorrect instance after DragAndDrop", spriteList.get(6) instanceof GroupItemSprite);
assertTrue("Sprite has incorrect instance after DragAndDrop", spriteList.get(7) instanceof SingleSprite);
}
public void testUploadProjectGoToWebViewActivityAndReturnToSpritesListFragment() throws Throwable {
String newProjectName = "newName";
setServerURLToTestUrl();
UiTestUtils.createValidUser(getActivity());
UiTestUtils.openActionMode(solo, upload, R.id.upload);
solo.waitForDialogToOpen();
solo.clearEditText(0);
solo.enterText(0, newProjectName);
solo.clickOnText(next);
solo.waitForText(solo.getString(R.string.upload_tag_dialog_title));
solo.clickOnText(next);
if (solo.searchText(solo.getString(R.string.rating_dialog_title))) {
solo.clickOnText(solo.getString(R.string.rating_dialog_rate_later));
}
solo.waitForText(showProgram);
solo.clickOnText(showProgram);
solo.waitForActivity(WebViewActivity.class);
solo.sleep(1000);
solo.goBack();
solo.waitForActivity(ScriptActivity.class);
solo.waitForFragmentByTag(SpritesListFragment.TAG);
assertTrue("Project was renamed correctly after return from WebView!", solo.searchText(newProjectName, 0, false, true));
}
private void clickOnActionModeSingleItem(String spriteName, int menuItem, int menuItemId) {
String menuItemName = solo.getString(menuItem);
UiTestUtils.openActionMode(solo, menuItemName, menuItemId);
solo.clickOnText(spriteName);
solo.sleep(TIME_TO_WAIT);
UiTestUtils.acceptAndCloseActionMode(solo);
}
private void packSingleItem(String spriteName, boolean backPackEmpty) {
UiTestUtils.openActionMode(solo, backpack, R.string.backpack);
if (!backPackEmpty) {
solo.waitForDialogToOpen();
solo.clickOnText(backpackAdd);
solo.sleep(TIME_TO_WAIT_BACKPACK);
}
solo.clickOnText(spriteName);
solo.sleep(TIME_TO_WAIT);
UiTestUtils.acceptAndCloseActionMode(solo);
}
private void clickOnBackPackItem(String spriteName, String menuItemName) {
solo.clickOnText(spriteName);
solo.sleep(TIME_TO_WAIT);
solo.clickOnText(menuItemName);
solo.sleep(TIME_TO_WAIT);
}
private BackPackSpriteListFragment getBackPackSpriteFragment() {
BackPackActivity activity = (BackPackActivity) solo.getCurrentActivity();
return (BackPackSpriteListFragment) activity.getFragment(BackPackActivity.FRAGMENT_BACKPACK_SPRITES);
}
private SpritesListFragment getSpritesListFragment() {
ProjectActivity activity = (ProjectActivity) solo.getCurrentActivity();
return activity.getSpritesListFragment();
}
private SpriteAdapter getSpriteAdapter() {
solo.waitForActivity(ProjectActivity.class);
solo.waitForFragmentByTag(SpritesListFragment.TAG);
return getSpritesListFragment().getSpriteAdapter();
}
private SpriteListAdapter getSpriteListAdapter() {
return (SpriteListAdapter) getBackPackSpriteFragment().getListAdapter();
}
private void checkVisibilityOfViews(int imageVisibility, int lookNameVisibility, int lookDetailsVisibility,
int checkBoxVisibility) {
solo.sleep(200);
assertTrue("Sprite image " + getAssertMessageAffix(imageVisibility),
solo.getView(R.id.sprite_img).getVisibility() == imageVisibility);
assertTrue("Sprite name " + getAssertMessageAffix(lookNameVisibility),
solo.getView(R.id.project_activity_sprite_title).getVisibility() == lookNameVisibility);
assertTrue("Sprite details " + getAssertMessageAffix(lookDetailsVisibility),
solo.getView(R.id.project_activity_sprite_details).getVisibility() == lookDetailsVisibility);
assertTrue("Checkboxes " + getAssertMessageAffix(checkBoxVisibility),
solo.getView(R.id.sprite_checkbox).getVisibility() == checkBoxVisibility);
}
private String getAssertMessageAffix(int visibility) {
String assertMessageAffix = "";
switch (visibility) {
case View.VISIBLE:
assertMessageAffix = "not visible";
break;
case View.GONE:
assertMessageAffix = "not gone";
break;
default:
break;
}
return assertMessageAffix;
}
private void checkIfCheckboxesAreCorrectlyChecked(boolean firstCheckboxExpectedChecked,
boolean secondCheckboxExpectedChecked, boolean thirdCheckboxExpectedChecked) {
solo.sleep(300);
CheckBox firstCheckBox = solo.getCurrentViews(CheckBox.class).get(0);
CheckBox secondCheckBox = solo.getCurrentViews(CheckBox.class).get(1);
CheckBox thirdCheckBox = solo.getCurrentViews(CheckBox.class).get(2);
if (solo.getCurrentViews(CheckBox.class).size() > 3) {
firstCheckBox = solo.getCurrentViews(CheckBox.class).get(3);
secondCheckBox = solo.getCurrentViews(CheckBox.class).get(4);
thirdCheckBox = solo.getCurrentViews(CheckBox.class).get(5);
}
assertEquals("First checkbox not correctly checked", firstCheckboxExpectedChecked, firstCheckBox.isChecked());
assertEquals("Second checkbox not correctly checked", secondCheckboxExpectedChecked, secondCheckBox.isChecked());
assertEquals("Third checkbox not correctly checked", thirdCheckboxExpectedChecked, thirdCheckBox.isChecked());
}
private void deleteSprite(String spriteName) {
clickOnActionModeSingleItem(spriteName, R.string.delete, R.id.delete);
solo.waitForDialogToOpen();
solo.waitForText(solo.getString(R.string.yes));
solo.clickOnText(solo.getString(R.string.yes));
}
private void checkIfNumberOfSpritesIsEqual(int expectedNumber) {
List<Sprite> spriteList = ProjectManager.getInstance().getCurrentProject().getDefaultScene().getSpriteList();
assertEquals("Number of sprites is not as expected", expectedNumber, spriteList.size());
}
private void addSpriteWithName(String spriteName) {
Sprite spriteToAdd = sprite.clone();
spriteToAdd.setName(spriteName);
ProjectManager.getInstance().getCurrentScene().addSprite(spriteToAdd);
}
private void switchToProgrammeBackgroundFromBackpack(String programmeName) {
solo.waitForText(solo.getString(R.string.backpack_title));
solo.goBack();
solo.goBack();
solo.waitForText(solo.getString(R.string.programs));
solo.clickOnText(solo.getString(R.string.programs));
solo.waitForText(programmeName);
solo.clickOnText(programmeName);
solo.waitForText(solo.getString(R.string.background));
}
private void switchToProgrammeBackgroundFromSpritesList(String programmeName) {
solo.goBack();
solo.goBack();
solo.goBack();
solo.waitForText(solo.getString(R.string.programs));
solo.clickOnText(solo.getString(R.string.programs));
solo.waitForText(programmeName);
solo.clickOnText(programmeName);
solo.waitForText(solo.getString(R.string.background));
}
private void prepareGroupingTest(boolean createProjectWithGroups) {
solo.goBack();
if (createProjectWithGroups) {
UiTestUtils.createTestProjectWithGroups();
solo.clickOnText(continueMenu);
} else {
solo.clickOnText(solo.getString(R.string.programs));
solo.waitForText(OLD_SPRITE_PROJECT);
solo.clickOnText(OLD_SPRITE_PROJECT);
}
project = ProjectManager.getInstance().getCurrentProject();
solo.waitForActivity(ProjectActivity.class);
solo.waitForFragmentByTag(SpritesListFragment.TAG);
}
private void renameGroup(String newName, boolean checkGivenName, String givenName) {
solo.waitForDialogToOpen();
if (checkGivenName) {
solo.clearEditText(0);
solo.enterText(0, givenName);
solo.clickOnButton(solo.getString(R.string.ok));
assertTrue("Group was not renamed", solo.searchText(solo.getString(R.string.spritename_already_exists), 0, false, true));
solo.clickOnButton(solo.getString(R.string.close));
solo.waitForDialogToClose();
}
solo.clearEditText(0);
solo.enterText(0, newName);
solo.clickOnButton(solo.getString(R.string.ok));
solo.waitForDialogToClose();
solo.scrollDown();
assertTrue("Group was not renamed", solo.searchText(newName, 0, false, true));
}
private void deleteGroup(boolean onlyGroup) {
String deleteGroupOnly = solo.getString(R.string.ungroup);
String deleteGroupAndObjects = solo.getString(R.string.group_objects_delete);
solo.waitForDialogToOpen();
solo.waitForText(solo.getString(R.string.yes));
solo.clickOnText(solo.getString(R.string.yes));
solo.waitForDialogToOpen();
if (onlyGroup) {
solo.waitForText(deleteGroupOnly);
solo.clickOnText(deleteGroupOnly);
} else {
solo.waitForText(deleteGroupAndObjects);
solo.clickOnText(deleteGroupAndObjects);
}
solo.waitForDialogToClose();
solo.sleep(TIME_TO_WAIT);
}
private void checkGroupIndicatorVisibility(boolean isExpanded) {
solo.sleep(200);
Resources resources = solo.getCurrentActivity().getResources();
Drawable expandedDrawable = resources.getDrawable(R.drawable.ic_play_down);
Drawable collapsedDrawable = resources.getDrawable(R.drawable.ic_play);
if (isExpanded) {
assertTrue("expandedIndicator not shown", expandedDrawable != null && expandedDrawable.isVisible());
} else {
assertTrue("collapsedIndicator not shown", collapsedDrawable != null && collapsedDrawable.isVisible());
}
}
private void setServerURLToTestUrl() throws Throwable {
runTestOnUiThread(new Runnable() {
public void run() {
ServerCalls.useTestUrl = true;
}
});
}
}