/** * Catroid: An on-device visual programming system for Android devices * Copyright (C) 2010-2014 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.html5player.client; //import org.catrobat.html5player.client.bricks.SetLookBrick; //import org.catrobat.html5player.client.scripts.Script; //import org.catrobat.html5player.client.scripts.WhenScript; import java.util.ArrayList; import org.catrobat.html5player.client.bricks.NextLookBrick; import org.catrobat.html5player.client.bricks.SetLookBrick; import org.catrobat.html5player.client.common.Look; import org.catrobat.html5player.client.common.LookData; //import org.catrobat.html5player.client.common.SoundInfo; import org.catrobat.html5player.client.scripts.BroadcastScript; import org.catrobat.html5player.client.scripts.StartScript; import org.catrobat.html5player.client.scripts.WhenScript; import org.catrobat.html5player.client.threading.CatScheduler; import com.google.gwt.canvas.client.Canvas; //import com.google.gwt.canvas.client.Canvas; //import com.google.gwt.canvas.dom.client.Context2d; import com.google.gwt.junit.client.GWTTestCase; public class SpriteTest extends GWTTestCase { // public Canvas rootCanvas; // public Context2d rootContext; // public Sprite sprite; // public Sprite simpleCleanSprite; private Stage stage; private Scene scene; int canvasCoordinateSpaceWidth = 100; int canvasCoordinateSpaceHeight = 100; public SpriteTest() { stage = Stage.getInstance(); scene = Scene.get(); } @Override public String getModuleName() { return "org.catrobat.html5player.html5player"; } public void gwtSetUp() { scene.createScene(canvasCoordinateSpaceWidth, canvasCoordinateSpaceHeight); Canvas canvas = scene.getCanvas(); stage.setCanvas(canvas); } public void gwtTearDown() { stage.setCanvas(null); stage.getSpriteManager().reset(); } //-------------------------------------------------------------------------- /** * Helper * @param name of Look * @return LookData for costume */ private LookData createCostumeData(String name) { LookData data = new LookData(); data.setName(name); return data; } /** * Helper * @param id of SoundInfo * @return LookData for costume */ /*private SoundInfo createSoundInfo(String id, String filename, String name) { SoundInfo info = new SoundInfo(); info.setFileName(filename); info.setTitle(name); info.setId(id); return info; }*/ //-------------------------------------------------------------------------- /** * */ public void testNewSprite() { String newSpriteName = "newSprite"; Sprite newSprite = new Sprite(newSpriteName); Look startCostume = newSprite.getLook(); assertEquals(newSpriteName, newSprite.getName()); assertFalse(newSprite.isBackground()); assertEquals(70.0, newSprite.getVolume()); assertTrue(newSprite.getLooks().isEmpty()); assertTrue(startCostume instanceof Look); assertEquals((double)stage.getStageMiddleX(), startCostume.getXPosition()); assertEquals((double)stage.getStageMiddleY(), startCostume.getYPosition()); assertTrue(startCostume.isVisible()); } /** * */ public void testAddCostumeDataGetCostume() { String newSpriteName = "newSprite"; Sprite newSprite = new Sprite(newSpriteName); String costume1Name = "custome1"; String costume2Name = "custome2"; LookData costumeData1 = createCostumeData(costume1Name); LookData costumeData2 = createCostumeData(costume2Name); newSprite.addLookData(costumeData1); newSprite.addLookData(costumeData2); assertEquals(costumeData1, newSprite.getLook(costume1Name).getLookData()); assertEquals(costumeData2, newSprite.getLook(costume2Name).getLookData()); assertNull(newSprite.getLook("no real name")); assertNull(newSprite.getLook(null)); } /** * */ public void testGetCostumeDataByName() { String newSpriteName = "newSprite"; Sprite newSprite = new Sprite(newSpriteName); String costume1Name = "custome1"; String costume2Name = "custome2"; LookData costumeData1 = createCostumeData(costume1Name); LookData costumeData2 = createCostumeData(costume2Name); newSprite.addLookData(costumeData1); newSprite.addLookData(costumeData2); assertEquals(costumeData1, newSprite.getLookDataByName(costume1Name)); assertEquals(costumeData2, newSprite.getLookDataByName(costume2Name)); assertNull(newSprite.getLookDataByName("no real name")); assertNull(newSprite.getLookDataByName(null)); } /** * */ public void testGetCostumeData() { String newSpriteName = "newSprite"; Sprite newSprite = new Sprite(newSpriteName); String costume1Name = "custome1"; String costume2Name = "custome2"; LookData costumeData1 = createCostumeData(costume1Name); LookData costumeData2 = createCostumeData(costume2Name); //get list ArrayList<LookData> costumeDataList = newSprite.getLookData(); assertTrue(costumeDataList.isEmpty()); //add costume data newSprite.addLookData(costumeData1); newSprite.addLookData(costumeData2); //get list costumeDataList = newSprite.getLookData(); assertFalse(costumeDataList.isEmpty()); assertEquals(2, costumeDataList.size()); assertTrue(costumeDataList.contains(costumeData1)); assertTrue(costumeDataList.contains(costumeData2)); } /** * */ public void testGetCostumeDataNames() { String newSpriteName = "newSprite"; Sprite newSprite = new Sprite(newSpriteName); String costume1Name = "custome1"; String costume2Name = "custome2"; LookData costumeData1 = createCostumeData(costume1Name); LookData costumeData2 = createCostumeData(costume2Name); //get list ArrayList<String> costumeDataList = newSprite.getLookDataNames(); assertTrue(costumeDataList.isEmpty()); //add costume data newSprite.addLookData(costumeData1); newSprite.addLookData(costumeData2); //get list costumeDataList = newSprite.getLookDataNames(); assertFalse(costumeDataList.isEmpty()); assertEquals(2, costumeDataList.size()); assertTrue(costumeDataList.contains(costume1Name)); assertTrue(costumeDataList.contains(costume2Name)); } /** * */ public void testAddCostumeData() { String newSpriteName = "newSprite"; Sprite newSprite = new Sprite(newSpriteName); String costume1Name = "custome1"; String costume2Name = "custome2"; LookData costumeData1 = createCostumeData(costume1Name); LookData costumeData2 = createCostumeData(costume2Name); newSprite.addLookData(costumeData1); newSprite.addLookData(costumeData2); //add costume data which is already in the list newSprite.addLookData(costumeData1); //get list, must have size 2 ArrayList<LookData> costumeDataList = newSprite.getLookData(); assertEquals(2, costumeDataList.size()); //try to add a null pointer newSprite.addLookData(null); //get list, must have size 2 again costumeDataList = newSprite.getLookData(); assertEquals(2, costumeDataList.size()); } /** * */ public void testAddGetScript() { String newSpriteName = "newSprite"; Sprite newSprite = new Sprite(newSpriteName); // scripts (all types) String startScriptName = "startScript"; String whenScriptName = "whenScript"; String broadCastScriptName = "broadCastScript"; StartScript script1 = new StartScript(newSprite, startScriptName); WhenScript script2 = new WhenScript(newSprite, whenScriptName); BroadcastScript script3 = new BroadcastScript(newSprite, broadCastScriptName, ""); // add scripts newSprite.addScript(script1); newSprite.addScript(script2); newSprite.addScript(script3); // get assertTrue(newSprite.getScript(script1.getName()) instanceof StartScript); assertTrue(newSprite.getScript(script2.getName()) instanceof WhenScript); assertTrue(newSprite.getScript(script3.getName()) instanceof BroadcastScript); // add/get null newSprite.addScript(null); assertNull(newSprite.getScript(null)); // enter a not available name assertNull(newSprite.getScript("scriptName")); } /** * TODO Implement sound test */ /** * */ public void testRun() { String newSpriteName = "newSprite"; Sprite newSprite = stage.getSpriteManager().getSprite(newSpriteName, true); // Costumes String costume1Name = "custome1"; String costume2Name = "custome2"; String costume3Name = "custome3"; LookData costumeData1 = createCostumeData(costume1Name); LookData costumeData2 = createCostumeData(costume2Name); LookData costumeData3 = createCostumeData(costume3Name); newSprite.addLookData(costumeData1); newSprite.addLookData(costumeData2); newSprite.addLookData(costumeData3); // Scripts String script1Name = "scriptToSetCoustme"; String script2Name = "scriptToSetNextCoustme"; String script3Name = "scriptShouldDoNothing"; String script4Name = "scriptShouldDoNothing2"; StartScript script1 = new StartScript(newSprite, script1Name); StartScript script2 = new StartScript(newSprite, script2Name); WhenScript script3 = new WhenScript(newSprite, script3Name); BroadcastScript script4 = new BroadcastScript(newSprite, script4Name, ""); // Bricks SetLookBrick setLookBrick = new SetLookBrick(newSpriteName, costume1Name); NextLookBrick nextLookBrick = new NextLookBrick(newSpriteName); // Add Bricks script1.addBrick(setLookBrick); script2.addBrick(nextLookBrick); script2.addBrick(nextLookBrick); script3.addBrick(nextLookBrick); script4.addBrick(nextLookBrick); // Add Scripts newSprite.addScript(script1); newSprite.addScript(script2); newSprite.addScript(script3); newSprite.addScript(script4); // run newSprite.run(); assertEquals(2, CatScheduler.get().getThreadCount()); CatScheduler.get().execute(); CatScheduler.get().execute(); CatScheduler.get().execute(); assertEquals(costume3Name, newSprite.getLook().getLookData().getName()); } /** * */ public void testStartTapScripts() { String newSpriteName = "newSprite"; Sprite newSprite = stage.getSpriteManager().getSprite(newSpriteName, true); // Costumes String costume1Name = "custome1"; String costume2Name = "custome2"; String costume3Name = "custome3"; LookData costumeData1 = createCostumeData(costume1Name); LookData costumeData2 = createCostumeData(costume2Name); LookData costumeData3 = createCostumeData(costume3Name); newSprite.addLookData(costumeData1); newSprite.addLookData(costumeData2); newSprite.addLookData(costumeData3); // Scripts String script1Name = "scriptShouldDoNothing"; String script2Name = "scriptToSetCoustme"; String script3Name = "scriptToSetNextCoustme"; String script4Name = "scriptShouldDoNothing2"; StartScript script1 = new StartScript(newSprite, script1Name); WhenScript script2 = new WhenScript(newSprite, script2Name); WhenScript script3 = new WhenScript(newSprite, script3Name); BroadcastScript script4 = new BroadcastScript(newSprite, script4Name, ""); // Bricks SetLookBrick setLookBrick = new SetLookBrick(newSpriteName, costume1Name); NextLookBrick nextLookBrick = new NextLookBrick(newSpriteName); // Add Bricks script1.addBrick(nextLookBrick); script2.addBrick(setLookBrick); script3.addBrick(nextLookBrick); script3.addBrick(nextLookBrick); script4.addBrick(nextLookBrick); // Add Scripts newSprite.addScript(script1); newSprite.addScript(script2); newSprite.addScript(script3); newSprite.addScript(script4); //run newSprite.startTapScripts(); //important, because of BroadcastScript stage.getMessageContainer().clear(); assertEquals(2, CatScheduler.get().getThreadCount()); CatScheduler.get().execute(); CatScheduler.get().execute(); CatScheduler.get().execute(); assertEquals(costume3Name, newSprite.getLook().getLookData().getName()); } /** * */ public void testShowCostume() { String spriteName = "newSprite"; Sprite sprite = stage.getSpriteManager().getSprite(spriteName, true); //Project-URL: //http://catroid.org/resources/projects/409/projectcode.xml stage.setProjectNumber("409"); String costumeName = "Banzai-Katze"; LookData lookData = createCostumeData(costumeName); lookData.setFilename("416BA8FDFA47432EBF5520B7669D8A95_Banzai-Katze"); lookData.setWidth(0); lookData.setHeight(0); sprite.addLookData(lookData); sprite.getLook().hide(); //TODO es kommt zu einem Fehler: //(SCHWERWIEGEND: Job run failed with unexpected RuntimeException)... //wenn man mit dem rootCanvas in Stage arbeiten will (clearStage()) //bei redrawScreen()! // // // sprite.showCostume(costumeName); stage.setProjectNumber(null); } /** * */ public void testGetScriptWithIndex() { String newSpriteName = "newSprite"; Sprite newSprite = new Sprite(newSpriteName); // scripts (all types) String startScriptName = "startScript"; String whenScriptName = "whenScript"; String broadCastScriptName = "broadCastScript"; StartScript script1 = new StartScript(newSprite, startScriptName); WhenScript script2 = new WhenScript(newSprite, whenScriptName); BroadcastScript script3 = new BroadcastScript(newSprite, broadCastScriptName, ""); // add scripts newSprite.addScript(script1); newSprite.addScript(script2); newSprite.addScript(script3); // get assertTrue(newSprite.getScript(0) instanceof StartScript); assertTrue(newSprite.getScript(1) instanceof WhenScript); assertTrue(newSprite.getScript(2) instanceof BroadcastScript); // wrong index assertNull(newSprite.getScript(5)); } //TODO: tests for playSound(), stopSound(), showCostume(), drawSprite(), // processOnTouch(), // }