/*
* 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.test.common;
import android.test.AndroidTestCase;
import org.catrobat.catroid.BuildConfig;
import org.catrobat.catroid.ProjectManager;
import org.catrobat.catroid.R;
import org.catrobat.catroid.common.Constants;
import org.catrobat.catroid.common.DefaultProjectHandler;
import org.catrobat.catroid.common.defaultprojectcreators.DefaultProjectCreator;
import org.catrobat.catroid.content.Project;
import org.catrobat.catroid.content.Scene;
import org.catrobat.catroid.content.Sprite;
import org.catrobat.catroid.io.StorageHandler;
import org.catrobat.catroid.stage.StageListener;
import org.catrobat.catroid.test.utils.Reflection;
import org.catrobat.catroid.test.utils.TestUtils;
import java.io.File;
import java.io.IOException;
import java.util.List;
public class DefaultProjectHandlerTest extends AndroidTestCase {
private static final String TEST_PROJECT_NAME = "testStandardProject";
public DefaultProjectHandlerTest() throws IOException {
}
@Override
public void tearDown() throws Exception {
TestUtils.clearProject(TEST_PROJECT_NAME);
super.tearDown();
}
@Override
public void setUp() {
TestUtils.clearProject(TEST_PROJECT_NAME);
DefaultProjectHandler.getInstance().setDefaultProjectCreator(DefaultProjectHandler
.ProjectCreatorType.PROJECT_CREATOR_DEFAULT);
}
public void testCreateScaledDefaultProject() throws IOException {
ProjectManager projectManager = ProjectManager.getInstance();
projectManager.setProject(DefaultProjectHandler.createAndSaveDefaultProject(TEST_PROJECT_NAME, getContext()));
Project currentProject = projectManager.getCurrentProject();
Scene currentScene = currentProject.getDefaultScene();
List<Sprite> spriteList = currentScene.getSpriteList();
assertEquals("Number of Sprites in defaultProject is incorrect.", 4, spriteList.size());
assertEquals("Number of Scripts in cloudSprite1 is incorrect.", 1, spriteList.get(1).getNumberOfScripts());
assertEquals("Number of Scripts in cloudSprite2 is incorrect.", 1, spriteList.get(2).getNumberOfScripts());
assertEquals("Number of Scripts in birdSprite is incorrect.", 3, spriteList.get(3).getNumberOfScripts());
assertEquals("Number of Looks in background is incorrect.", 1, spriteList.get(0).getLookDataList().size());
assertEquals("Number of Looks in cloudSprite1 is incorrect.", 1, spriteList.get(1).getLookDataList().size());
assertEquals("Number of Looks in cloudSprite2 is incorrect.", 1, spriteList.get(2).getLookDataList().size());
assertEquals("Number of Looks in birdSprite is incorrect.", 2, spriteList.get(3).getLookDataList().size());
}
public void testDefaultProjectScreenshot() throws IOException {
DefaultProjectHandler.createAndSaveDefaultProject(TEST_PROJECT_NAME, getContext());
String projectPath = Constants.DEFAULT_ROOT + "/" + TEST_PROJECT_NAME;
String scenePath = projectPath + "/" + ProjectManager.getInstance().getCurrentScene().getName();
File file = new File(scenePath + "/" + StageListener.SCREENSHOT_MANUAL_FILE_NAME);
assertFalse("Manual screenshot shouldn't exist in default project", file.exists());
file = new File(scenePath + "/" + StageListener.SCREENSHOT_AUTOMATIC_FILE_NAME);
assertTrue("Automatic screenshot should exist in default project", file.exists());
}
public void testCreateAllDefaultProjects() throws IOException {
TestUtils.clearProject(getContext().getString(R.string.default_project_name));
TestUtils.clearProject(getContext().getString(R.string.default_drone_project_name));
TestUtils.clearProject(getContext().getString(R.string.default_project_name_physics));
Project defaultDefaultProject = DefaultProjectHandler.createAndSaveDefaultProject(getContext());
DefaultProjectHandler defaultProjectHandler = DefaultProjectHandler.getInstance();
assertEquals("default project name not as expected", getContext().getString(R.string.default_project_name),
defaultDefaultProject.getName());
assertTrue("default project does not exist.", StorageHandler.getInstance().projectExists(defaultDefaultProject
.getName()));
defaultProjectHandler.setDefaultProjectCreator(DefaultProjectHandler.ProjectCreatorType
.PROJECT_CREATOR_DRONE);
if (BuildConfig.FEATURE_PARROT_AR_DRONE_ENABLED) {
Project droneDefaultProject = DefaultProjectHandler.createAndSaveDefaultProject(getContext());
assertEquals("default drone project name not as expected", getContext().getString(
R.string.default_drone_project_name), droneDefaultProject.getName());
assertTrue("default drone project does not exist.", StorageHandler.getInstance().projectExists(
droneDefaultProject.getName()));
} else {
assertTrue("standard default project creator must be initialized", Reflection.getPrivateField(
defaultProjectHandler, "DefaultProjectCreator") instanceof DefaultProjectCreator);
}
defaultProjectHandler.setDefaultProjectCreator(DefaultProjectHandler.ProjectCreatorType
.PROJECT_CREATOR_PHYSICS);
Project physicsDefaultProject = DefaultProjectHandler.createAndSaveDefaultProject(getContext());
assertEquals("default physics project name not as expected", getContext().getString(
R.string.default_project_name_physics), physicsDefaultProject.getName());
assertTrue("default physics project does not exist.", StorageHandler.getInstance().projectExists(
physicsDefaultProject.getName()));
TestUtils.clearProject(getContext().getString(R.string.default_drone_project_name));
TestUtils.clearProject(getContext().getString(R.string.default_project_name_physics));
}
}