/*
* 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.brick;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.util.DisplayMetrics;
import android.util.Log;
import org.catrobat.catroid.ProjectManager;
import org.catrobat.catroid.R;
import org.catrobat.catroid.common.Constants;
import org.catrobat.catroid.common.LookData;
import org.catrobat.catroid.common.ScreenValues;
import org.catrobat.catroid.content.Project;
import org.catrobat.catroid.content.Script;
import org.catrobat.catroid.content.SingleSprite;
import org.catrobat.catroid.content.Sprite;
import org.catrobat.catroid.content.StartScript;
import org.catrobat.catroid.content.bricks.Brick;
import org.catrobat.catroid.content.bricks.SetLookBrick;
import org.catrobat.catroid.content.bricks.SetSizeToBrick;
import org.catrobat.catroid.io.StorageHandler;
import org.catrobat.catroid.stage.StageActivity;
import org.catrobat.catroid.stage.StageListener;
import org.catrobat.catroid.ui.MainMenuActivity;
import org.catrobat.catroid.uitest.util.BaseActivityInstrumentationTestCase;
import org.catrobat.catroid.uitest.util.UiTestUtils;
import org.catrobat.catroid.utils.UtilFile;
import java.io.File;
public class SetSizeToBrickTest extends BaseActivityInstrumentationTestCase<MainMenuActivity> {
private static final int SCREEN_WIDTH = 480;
private static final int SCREEN_HEIGHT = 800;
private static final String TAG = SetSizeToBrickTest.class.getSimpleName();
private String projectName = "SetSizeToBrickTestProject";
private Project project;
private SetSizeToBrick setSizeToBrick;
private SetLookBrick setLookBrick;
private int imageRawId = org.catrobat.catroid.test.R.raw.red_quad;
public SetSizeToBrickTest() {
super(MainMenuActivity.class);
}
@Override
public void setUp() throws Exception {
super.setUp();
createProject();
UiTestUtils.prepareStageForTest();
UiTestUtils.getIntoScriptActivityFromMainMenu(solo, 2);
}
@Override
public void tearDown() throws Exception {
File directory = new File(Constants.DEFAULT_ROOT + "/" + projectName);
if (directory.exists()) {
UtilFile.deleteDirectory(directory);
}
super.tearDown();
}
public void testSetSizeToBrick() {
double newSize = 200;
UiTestUtils.testBrickWithFormulaEditor(solo, ProjectManager.getInstance().getCurrentSprite(),
R.id.brick_set_size_to_edit_text, newSize, Brick.BrickField.SIZE, setSizeToBrick);
DisplayMetrics displayMetrics = new DisplayMetrics();
getActivity().getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
ScreenValues.SCREEN_WIDTH = displayMetrics.widthPixels;
ScreenValues.SCREEN_HEIGHT = displayMetrics.heightPixels;
UiTestUtils.clickOnBottomBar(solo, R.id.button_play);
solo.waitForActivity(StageActivity.class.getSimpleName());
solo.assertCurrentActivity("Not in stage", StageActivity.class);
solo.sleep(400);
solo.goBack();
solo.clickOnText(solo.getString(R.string.stage_dialog_screenshot));
assertTrue("Successful screenshot Toast not found!",
solo.searchText(solo.getString(R.string.notification_screenshot_ok)));
solo.clickOnText(solo.getString(R.string.stage_dialog_resume));
// -------------------------------------------------------------------------------------------------------------
Bitmap screenshot = BitmapFactory.decodeFile(Constants.DEFAULT_ROOT + "/" + projectName + "/"
+ StageListener.SCREENSHOT_MANUAL_FILE_NAME);
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
Bitmap blackQuad = BitmapFactory.decodeFile(setLookBrick.getImagePath());
int blackQuadHeight = blackQuad.getHeight();
int blackQuadWidth = blackQuad.getWidth();
Log.v(TAG, "black_quad.png x: " + blackQuadHeight + " y: " + blackQuadWidth);
Log.v(TAG, "Screenshot height: " + ScreenValues.SCREEN_WIDTH + " width: " + ScreenValues.SCREEN_WIDTH);
Log.v(TAG, (ScreenValues.SCREEN_WIDTH / 2) + (blackQuadHeight / 2) + 5 + "");
//Two times width, because of the quadratically screenshots
int colorInsideSizedQuad = screenshot.getPixel((ScreenValues.SCREEN_WIDTH / 2) + (blackQuadWidth / 2) + 5,
(ScreenValues.SCREEN_WIDTH / 2) + (blackQuadHeight / 2) + 5);
int colorOutsideSizedQuad = screenshot.getPixel(ScreenValues.SCREEN_WIDTH / 2 + blackQuadWidth + 10,
ScreenValues.SCREEN_WIDTH / 2 + blackQuadHeight + 10);
assertEquals("Image was not scaled up even though SetSizeTo was exectuted before!", Color.RED,
colorInsideSizedQuad);
assertEquals("Wrong stage background color!", Color.WHITE, colorOutsideSizedQuad);
}
private void createProject() {
ScreenValues.SCREEN_HEIGHT = SCREEN_HEIGHT;
ScreenValues.SCREEN_WIDTH = SCREEN_WIDTH;
project = new Project(getActivity(), projectName);
Sprite sprite = new SingleSprite("cat");
Script script = new StartScript();
setSizeToBrick = new SetSizeToBrick(100);
setLookBrick = new SetLookBrick();
script.addBrick(setSizeToBrick);
script.addBrick(setLookBrick);
sprite.addScript(script);
project.getDefaultScene().addSprite(sprite);
ProjectManager.getInstance().setProject(project);
ProjectManager.getInstance().setCurrentSprite(sprite);
ProjectManager.getInstance().setCurrentScript(script);
StorageHandler.getInstance().saveProject(project);
File image = UiTestUtils.saveFileToProject(projectName, project.getDefaultScene().getName(), "black_quad.png", imageRawId, getInstrumentation()
.getContext(), UiTestUtils.FileTypes.IMAGE);
Log.v(TAG, image.getName());
LookData lookData = new LookData();
lookData.setLookFilename(image.getName());
lookData.setLookName("image");
setLookBrick.setLook(lookData);
sprite.getLookDataList().add(lookData);
ProjectManager.getInstance().getFileChecksumContainer()
.addChecksum(lookData.getChecksum(), image.getAbsolutePath());
StorageHandler.getInstance().saveProject(project);
}
}