/*
* 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.BroadcastScript;
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.BroadcastWaitBrick;
import org.catrobat.catroid.content.bricks.PlaceAtBrick;
import org.catrobat.catroid.content.bricks.SetLookBrick;
import org.catrobat.catroid.content.bricks.SetSizeToBrick;
import org.catrobat.catroid.content.bricks.SetTransparencyBrick;
import org.catrobat.catroid.content.bricks.WaitBrick;
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 SingleExecutionWhenBrickTest extends BaseActivityInstrumentationTestCase<MainMenuActivity> {
private static final int SCREEN_WIDTH = 480;
private static final int SCREEN_HEIGHT = 800;
private Project projectWhenBrick;
Sprite yellowSprite;
Sprite greenSprite;
WhenScript yellowWhenScript;
BroadcastScript greenBroadcastScript;
String broadcastMessage = "broadcastMessage";
public SingleExecutionWhenBrickTest() {
super(MainMenuActivity.class);
}
public void testWaitBrickWhenTapped() {
createProjectWhenBrick(SCREEN_HEIGHT, SCREEN_WIDTH);
UiTestUtils.prepareStageForTest();
UiTestUtils.getIntoSpritesFromMainMenu(solo);
UiTestUtils.clickOnBottomBar(solo, R.id.button_play);
solo.waitForActivity(StageActivity.class.getSimpleName());
solo.sleep(500);
for (int i = 1; i <= 10; ++i) {
solo.sleep(100);
assertEquals("Look has wrong AlphaValue.", 0f,
yellowSprite.look.getTransparencyInUserInterfaceDimensionUnit());
solo.clickOnScreen((SCREEN_WIDTH / 2), (SCREEN_HEIGHT / 2));
}
solo.sleep(100);
assertEquals("Look has wrong AlphaValue.", 0f, yellowSprite.look.getTransparencyInUserInterfaceDimensionUnit());
solo.sleep(2000);
assertEquals("Look has wrong AlphaValue.", 50f, yellowSprite.look.getTransparencyInUserInterfaceDimensionUnit());
}
public void testWaitBrickBroadcast() {
createProjectWhenBrick(SCREEN_HEIGHT, SCREEN_WIDTH);
UiTestUtils.prepareStageForTest();
UiTestUtils.getIntoSpritesFromMainMenu(solo);
UiTestUtils.clickOnBottomBar(solo, R.id.button_play);
solo.waitForActivity(StageActivity.class.getSimpleName());
solo.sleep(500);
for (int i = 1; i <= 10; ++i) {
solo.sleep(1000);
assertEquals("Look has wrong AlphaValue.", 0f,
greenSprite.look.getTransparencyInUserInterfaceDimensionUnit());
solo.clickOnScreen((SCREEN_WIDTH / 2) + 100, (SCREEN_HEIGHT / 2) - 200);
}
solo.sleep(1000);
assertEquals("Look has wrong AlphaValue.", 0f, greenSprite.look.getTransparencyInUserInterfaceDimensionUnit());
solo.sleep(2000);
assertEquals("Look has wrong AlphaValue.", 100f, greenSprite.look.getTransparencyInUserInterfaceDimensionUnit());
}
public void testWaitBrickWhenStreched() {
createProjectWhenBrick(SCREEN_WIDTH, SCREEN_WIDTH);
ScreenValues.SCREEN_HEIGHT = SCREEN_HEIGHT;
UiTestUtils.prepareStageForTest();
UiTestUtils.getIntoSpritesFromMainMenu(solo);
UiTestUtils.clickOnBottomBar(solo, R.id.button_play);
solo.waitForActivity(StageActivity.class.getSimpleName());
solo.sleep(500);
for (int i = 1; i <= 10; ++i) {
solo.sleep(1000);
assertEquals("Look has wrong AlphaValue.", 0f,
greenSprite.look.getTransparencyInUserInterfaceDimensionUnit());
solo.clickOnScreen((SCREEN_WIDTH / 2) + 100, (SCREEN_HEIGHT / 2) - 390); //188
}
solo.sleep(1000);
assertEquals("Look has wrong AlphaValue.", 0f, greenSprite.look.getTransparencyInUserInterfaceDimensionUnit());
solo.sleep(2000);
assertEquals("Look has wrong AlphaValue.", 100f, greenSprite.look.getTransparencyInUserInterfaceDimensionUnit());
}
private void createProjectWhenBrick(int screenHeight, int screenWidth) {
ScreenValues.SCREEN_HEIGHT = screenHeight;
ScreenValues.SCREEN_WIDTH = screenWidth;
projectWhenBrick = new Project(null, UiTestUtils.DEFAULT_TEST_PROJECT_NAME);
// yellow Sprite
yellowSprite = new SingleSprite("yellowSprite");
StartScript yellowStartScript = new StartScript();
SetLookBrick yellowLookBrick = new SetLookBrick();
SetSizeToBrick yellowSetSizeToBrick = new SetSizeToBrick(200d);
LookData yellowLookData = new LookData();
String yellowImageName = "yellow_image.bmp";
yellowLookData.setLookName(yellowImageName);
yellowSprite.getLookDataList().add(yellowLookData);
yellowLookBrick.setLook(yellowLookData);
yellowStartScript.addBrick(yellowLookBrick);
yellowStartScript.addBrick(yellowSetSizeToBrick);
yellowSprite.addScript(yellowStartScript);
yellowWhenScript = new WhenScript();
WaitBrick yellowWaitBrick = new WaitBrick(2000);
SetTransparencyBrick yellowSetTransparencyBrick = new SetTransparencyBrick(50d);
yellowWhenScript.addBrick(yellowWaitBrick);
yellowWhenScript.addBrick(yellowSetTransparencyBrick);
yellowSprite.addScript(yellowWhenScript);
// blue Sprite
Sprite blueSprite = new SingleSprite("blueSprite");
StartScript blueStartScript = new StartScript();
SetLookBrick blueLookBrick = new SetLookBrick();
SetSizeToBrick blueSetSizeToBrick = new SetSizeToBrick(200d);
BroadcastWaitBrick broadcastWaitBrick = new BroadcastWaitBrick(broadcastMessage);
LookData blueLookData = new LookData();
String blueImageName = "blue_image.bmp";
blueLookData.setLookName(blueImageName);
blueSprite.getLookDataList().add(blueLookData);
blueLookBrick.setLook(blueLookData);
blueStartScript.addBrick(blueLookBrick);
blueStartScript.addBrick(blueSetSizeToBrick);
blueStartScript.addBrick(new PlaceAtBrick(100, 200));
blueSprite.addScript(blueStartScript);
WhenScript blueWhenScript = new WhenScript();
blueWhenScript.addBrick(broadcastWaitBrick);
blueSprite.addScript(blueWhenScript);
// green Sprite
greenSprite = new SingleSprite("greenSprite");
StartScript greenStartScript = new StartScript();
SetLookBrick greenLookBrick = new SetLookBrick();
SetSizeToBrick greenSetSizeToBrick = new SetSizeToBrick(200d);
LookData greenLookData = new LookData();
String greenImageName = "green_image.bmp";
greenLookData.setLookName(greenImageName);
greenSprite.getLookDataList().add(greenLookData);
greenLookBrick.setLook(greenLookData);
greenStartScript.addBrick(greenLookBrick);
greenStartScript.addBrick(greenSetSizeToBrick);
greenStartScript.addBrick(new PlaceAtBrick(-100, 200));
greenSprite.addScript(greenStartScript);
greenBroadcastScript = new BroadcastScript(broadcastMessage);
WaitBrick waitBrick = new WaitBrick(2000);
SetTransparencyBrick greenSetTransparencyBrick2 = new SetTransparencyBrick(100d);
greenBroadcastScript.addBrick(waitBrick);
greenBroadcastScript.addBrick(greenSetTransparencyBrick2);
greenSprite.addScript(greenBroadcastScript);
projectWhenBrick.getDefaultScene().addSprite(yellowSprite);
projectWhenBrick.getDefaultScene().addSprite(blueSprite);
projectWhenBrick.getDefaultScene().addSprite(greenSprite);
StorageHandler.getInstance().saveProject(projectWhenBrick);
File yellowImageFile = UiTestUtils.saveFileToProject(projectWhenBrick.getName(), projectWhenBrick.getDefaultScene().getName(), yellowImageName,
org.catrobat.catroid.test.R.raw.yellow_image, getInstrumentation().getContext(),
UiTestUtils.FileTypes.IMAGE);
File blueImageFile = UiTestUtils.saveFileToProject(projectWhenBrick.getName(), projectWhenBrick.getDefaultScene().getName(), blueImageName,
org.catrobat.catroid.test.R.raw.blue_image, getInstrumentation().getContext(),
UiTestUtils.FileTypes.IMAGE);
File greenImageFile = UiTestUtils.saveFileToProject(projectWhenBrick.getName(), projectWhenBrick.getDefaultScene().getName(), greenImageName,
org.catrobat.catroid.test.R.raw.green_image, getInstrumentation().getContext(),
UiTestUtils.FileTypes.IMAGE);
yellowLookData.setLookFilename(yellowImageFile.getName());
blueLookData.setLookFilename(blueImageFile.getName());
greenLookData.setLookFilename(greenImageFile.getName());
StorageHandler.getInstance().saveProject(projectWhenBrick);
ProjectManager.getInstance().setProject(projectWhenBrick);
}
}