/* * 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.content.interaction; import android.widget.ListView; import org.catrobat.catroid.ProjectManager; import org.catrobat.catroid.R; import org.catrobat.catroid.common.ScreenValues; import org.catrobat.catroid.content.bricks.Brick; import org.catrobat.catroid.content.bricks.SetXBrick; import org.catrobat.catroid.content.bricks.StopAllSoundsBrick; import org.catrobat.catroid.content.bricks.WaitBrick; import org.catrobat.catroid.ui.MainMenuActivity; import org.catrobat.catroid.ui.adapter.BrickAdapter; import org.catrobat.catroid.ui.fragment.ScriptFragment; import org.catrobat.catroid.uitest.util.BaseActivityInstrumentationTestCase; import org.catrobat.catroid.uitest.util.UiTestUtils; import org.catrobat.catroid.utils.UtilUi; import java.util.ArrayList; import java.util.List; public class BrickDragAndDropTest extends BaseActivityInstrumentationTestCase<MainMenuActivity> { public BrickDragAndDropTest() { super(MainMenuActivity.class); } @Override protected void setUp() throws Exception { super.setUp(); UiTestUtils.createEmptyProject(); solo.waitForActivity(MainMenuActivity.class); solo.sleep(300); UiTestUtils.getIntoScriptActivityFromMainMenu(solo); } public void testClickOnEmptySpace() { solo.clickOnScreen(20, ScreenValues.SCREEN_HEIGHT - 150); solo.sleep(2000); assertFalse("Brickcategories should not be shown", solo.searchText(solo.getString(R.string.categories))); } public void testPutHoveringBrickDown() { // clicks on spriteName needed to get focus on listview for solo without adding hovering brick ListView view = UiTestUtils.getScriptListView(solo); solo.waitForFragmentByTag(ScriptFragment.TAG); solo.sleep(300); BrickAdapter adapter = (BrickAdapter) view.getAdapter(); UiTestUtils.addNewBrick(solo, R.string.brick_set_x); assertEquals("Wrong number of Bricks", 2, adapter.getCount()); UiTestUtils.clickOnBottomBar(solo, R.id.button_add); solo.sleep(500); assertFalse("Categories shouldn't be shown", solo.searchText(solo.getString(R.string.categories))); UiTestUtils.dragFloatingBrickDownwards(solo); solo.sleep(500); UiTestUtils.addNewBrick(solo, R.string.brick_stop_all_sounds); List<Brick> brickListToCheck = ProjectManager.getInstance().getCurrentScript().getBrickList(); assertEquals("One Brick should be in bricklist, one hovering and therefore not in project yet", 1, brickListToCheck.size()); assertEquals("Both bricks (plus ScriptBrick) should be present in the adapter", 3, adapter.getCount()); assertTrue("Set brick should be instance of SetXBrick", brickListToCheck.get(0) instanceof SetXBrick); assertTrue("Set brick should be instance of SetXBrick", adapter.getItem(2) instanceof SetXBrick); assertTrue("Hovering brick should be instance of StopAllSoundsBrick", adapter.getItem(1) instanceof StopAllSoundsBrick); solo.sleep(500); UiTestUtils.dragFloatingBrickDownwards(solo); solo.sleep(500); assertEquals("Two Bricks should be in bricklist/project", 2, brickListToCheck.size()); assertTrue("First brick should be instance of SetXBrick", brickListToCheck.get(0) instanceof SetXBrick); assertTrue("Second brick should be instance of StopAllSoundsBrick", brickListToCheck.get(1) instanceof StopAllSoundsBrick); UiTestUtils.addNewBrick(solo, R.string.brick_wait); solo.sleep(500); UiTestUtils.dragFloatingBrickUpwards(solo, 2); solo.sleep(500); if (solo.searchText(solo.getString(R.string.brick_context_dialog_move_brick), true)) { solo.goBack(); } ArrayList<Integer> yPositionList = UiTestUtils.getListItemYPositions(solo, 0); //just to gain focus solo.clickOnScreen(20, yPositionList.get(0)); solo.goBack(); solo.clickOnScreen(20, yPositionList.get(1)); solo.clickOnText(solo.getString(R.string.brick_context_dialog_move_brick)); UtilUi.updateScreenWidthAndHeight(solo.getCurrentActivity()); int height = ScreenValues.SCREEN_HEIGHT; solo.sleep(2000); solo.drag(20, 20, 300, height - 20, 100); solo.sleep(2000); assertTrue("Last Brick should now be WaitBrick", adapter.getItem(3) instanceof WaitBrick); } public void testAddNewBrickFromAnotherCategory() { int categoryStringId = UiTestUtils.getBrickCategory(solo, R.string.brick_set_x); UiTestUtils.clickOnBottomBar(solo, R.id.button_add); solo.clickOnText(solo.getString(categoryStringId)); solo.goBack(); categoryStringId = UiTestUtils.getBrickCategory(solo, R.string.brick_stop_all_sounds); solo.clickOnText(solo.getString(categoryStringId)); solo.clickOnText(solo.getString(R.string.brick_stop_all_sounds)); solo.sleep(500); UiTestUtils.dragFloatingBrickDownwards(solo); solo.sleep(500); BrickAdapter adapter = (BrickAdapter) UiTestUtils.getScriptListView(solo).getAdapter(); assertEquals("Brick was not added.", 2, adapter.getCount()); } }