/*
* 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.stage;
import org.catrobat.catroid.ProjectManager;
import org.catrobat.catroid.R;
import org.catrobat.catroid.common.LookData;
import org.catrobat.catroid.common.ScreenValues;
import org.catrobat.catroid.content.Project;
import org.catrobat.catroid.content.SingleSprite;
import org.catrobat.catroid.content.Sprite;
import org.catrobat.catroid.content.StartScript;
import org.catrobat.catroid.content.WhenScript;
import org.catrobat.catroid.content.bricks.Brick;
import org.catrobat.catroid.content.bricks.PlaceAtBrick;
import org.catrobat.catroid.content.bricks.SetLookBrick;
import org.catrobat.catroid.content.bricks.SetTransparencyBrick;
import org.catrobat.catroid.formulaeditor.Formula;
import org.catrobat.catroid.io.StorageHandler;
import org.catrobat.catroid.stage.StageActivity;
import org.catrobat.catroid.ui.MainMenuActivity;
import org.catrobat.catroid.uitest.util.BaseActivityInstrumentationTestCase;
import org.catrobat.catroid.uitest.util.UiTestUtils;
import java.io.File;
public class TransparentWhenBrickTest extends BaseActivityInstrumentationTestCase<MainMenuActivity> {
private final int screenWidth = 480;
private final int screenHeight = 800;
private final String catFilename = "catroid_sunglasses.png";
private final String fishFilename = "fish.jpg";
SetTransparencyBrick setTransparencyBrick;
private int catXPosition = 60;
private int catYPosition = 150;
private int fishXPosition = -60;
private int fishYPosition = -150;
private Sprite cat;
private Sprite fish;
public TransparentWhenBrickTest() {
super(MainMenuActivity.class);
}
@Override
public void setUp() throws Exception {
super.setUp();
createProject();
UiTestUtils.prepareStageForTest();
UiTestUtils.getIntoSpritesFromMainMenu(solo);
UiTestUtils.clickOnBottomBar(solo, R.id.button_play);
}
public void testTapOnSideAreaOfForegroundSprite() {
solo.waitForActivity(StageActivity.class.getSimpleName());
solo.sleep(2000);
assertTrue("Sprite cat is not at x=0 and y=0",
cat.look.getXInUserInterfaceDimensionUnit() == 0 && cat.look.getYInUserInterfaceDimensionUnit() == 0);
assertTrue("Sprite fish is not at x=0 and y=0",
fish.look.getXInUserInterfaceDimensionUnit() == 0 && fish.look.getYInUserInterfaceDimensionUnit() == 0);
assertTrue("Sprite fish is not the foreground sprite", fish.look.getZIndex() > cat.look.getZIndex());
UiTestUtils.clickOnStageCoordinates(solo, 22, 45, screenWidth, screenHeight);
solo.sleep(1000);
assertTrue("Sprite cat is at false position", cat.look.getXInUserInterfaceDimensionUnit() == catXPosition
&& cat.look.getYInUserInterfaceDimensionUnit() == catYPosition);
assertTrue("Sprite fish has moved",
fish.look.getXInUserInterfaceDimensionUnit() == 0 && fish.look.getYInUserInterfaceDimensionUnit() == 0);
UiTestUtils.clickOnStageCoordinates(solo, 0, 0, screenWidth, screenHeight);
solo.sleep(1000);
assertTrue("Sprite cat is at false position", cat.look.getXInUserInterfaceDimensionUnit() == catXPosition
&& cat.look.getYInUserInterfaceDimensionUnit() == catYPosition);
assertTrue(
"Sprite fish has moved",
fish.look.getXInUserInterfaceDimensionUnit() == fishXPosition
&& fish.look.getYInUserInterfaceDimensionUnit() == fishYPosition
);
}
public void testTapOnHalfTransparentAreaOfForegroundSprite() {
setTransparencyBrick.setFormulaWithBrickField(Brick.BrickField.TRANSPARENCY, new Formula(50.0));
solo.waitForActivity(StageActivity.class.getSimpleName());
solo.sleep(2000);
assertTrue("Sprite cat is not at x=0 and y=0",
cat.look.getXInUserInterfaceDimensionUnit() == 0 && cat.look.getYInUserInterfaceDimensionUnit() == 0);
assertTrue("Sprite fish is not at x=0 and y=0",
fish.look.getXInUserInterfaceDimensionUnit() == 0 && fish.look.getYInUserInterfaceDimensionUnit() == 0);
assertTrue("Sprite fish is not the foreground sprite", fish.look.getZIndex() > cat.look.getZIndex());
UiTestUtils.clickOnStageCoordinates(solo, 22, 45, screenWidth, screenHeight);
solo.sleep(1000);
assertTrue("Sprite cat is at false position", cat.look.getXInUserInterfaceDimensionUnit() == catXPosition
&& cat.look.getYInUserInterfaceDimensionUnit() == catYPosition);
assertTrue("Sprite fish has moved",
fish.look.getXInUserInterfaceDimensionUnit() == 0 && fish.look.getYInUserInterfaceDimensionUnit() == 0);
UiTestUtils.clickOnStageCoordinates(solo, 0, 0, screenWidth, screenHeight);
solo.sleep(1000);
assertTrue("Sprite cat is at false position", cat.look.getXInUserInterfaceDimensionUnit() == catXPosition
&& cat.look.getYInUserInterfaceDimensionUnit() == catYPosition);
assertTrue(
"Sprite fish has moved",
fish.look.getXInUserInterfaceDimensionUnit() == fishXPosition
&& fish.look.getYInUserInterfaceDimensionUnit() == fishYPosition
);
}
public void testTapOnFullTransparentAreaOfForegroundSprite() {
setTransparencyBrick.setFormulaWithBrickField(Brick.BrickField.TRANSPARENCY, new Formula(100.0));
solo.waitForActivity(StageActivity.class.getSimpleName());
solo.sleep(2000);
assertTrue("Sprite cat is not at x=0 and y=0",
cat.look.getXInUserInterfaceDimensionUnit() == 0 && cat.look.getYInUserInterfaceDimensionUnit() == 0);
assertTrue("Sprite fish is not at x=0 and y=0",
fish.look.getXInUserInterfaceDimensionUnit() == 0 && fish.look.getYInUserInterfaceDimensionUnit() == 0);
assertTrue("Sprite fish is not the foreground sprite", fish.look.getZIndex() > cat.look.getZIndex());
UiTestUtils.clickOnStageCoordinates(solo, 0, 0, screenWidth, screenHeight);
solo.sleep(1000);
assertEquals("Sprite cat is at false position", catXPosition, (int) cat.look.getXInUserInterfaceDimensionUnit());
assertEquals("Sprite cat is at false position", catYPosition, (int) cat.look.getYInUserInterfaceDimensionUnit());
assertEquals("Sprite fish has moved", 0, (int) fish.look.getXInUserInterfaceDimensionUnit());
assertEquals("Sprite fish has moved", 0, (int) fish.look.getYInUserInterfaceDimensionUnit());
}
private void createProject() {
ScreenValues.SCREEN_WIDTH = screenWidth;
ScreenValues.SCREEN_HEIGHT = screenHeight;
Project project = new Project(null, UiTestUtils.PROJECTNAME1);
cat = new SingleSprite("cat");
StartScript startScriptCat = new StartScript();
SetLookBrick setLookCat = new SetLookBrick();
LookData lookDataCat = new LookData();
lookDataCat.setLookName(catFilename);
cat.getLookDataList().add(lookDataCat);
setLookCat.setLook(lookDataCat);
startScriptCat.addBrick(setLookCat);
cat.addScript(startScriptCat);
WhenScript whenScriptCat = new WhenScript();
PlaceAtBrick placeAtCat = new PlaceAtBrick(catXPosition, catYPosition);
whenScriptCat.addBrick(placeAtCat);
cat.addScript(whenScriptCat);
project.getDefaultScene().addSprite(cat);
fish = new SingleSprite("fish");
StartScript startScriptFish = new StartScript();
SetLookBrick setLookFish = new SetLookBrick();
setTransparencyBrick = new SetTransparencyBrick(0.0);
LookData lookDataFish = new LookData();
lookDataFish.setLookName(fishFilename);
fish.getLookDataList().add(lookDataFish);
setLookFish.setLook(lookDataFish);
startScriptFish.addBrick(setLookFish);
startScriptFish.addBrick(setTransparencyBrick);
fish.addScript(startScriptFish);
WhenScript whenScriptFish = new WhenScript();
PlaceAtBrick placeAtFish = new PlaceAtBrick(fishXPosition, fishYPosition);
whenScriptFish.addBrick(placeAtFish);
fish.addScript(whenScriptFish);
project.getDefaultScene().addSprite(fish);
StorageHandler.getInstance().saveProject(project);
File catImageFile = UiTestUtils.saveFileToProject(project.getName(), project.getDefaultScene().getName(), catFilename,
org.catrobat.catroid.test.R.drawable.catroid_sunglasses, getInstrumentation().getContext(),
UiTestUtils.FileTypes.IMAGE);
File fishImageFile = UiTestUtils.saveFileToProject(project.getName(), project.getDefaultScene().getName(), fishFilename,
org.catrobat.catroid.test.R.drawable.fish, getInstrumentation().getContext(),
UiTestUtils.FileTypes.IMAGE);
lookDataCat.setLookFilename(catImageFile.getName());
lookDataFish.setLookFilename(fishImageFile.getName());
ProjectManager.getInstance().setProject(project);
StorageHandler.getInstance().saveProject(project);
}
}