package com.shootoff.plugins; import static org.junit.Assert.*; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; import java.io.PrintStream; import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.Optional; import org.junit.After; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.slf4j.LoggerFactory; import com.shootoff.camera.CamerasSupervisor; import com.shootoff.camera.Shot; import com.shootoff.camera.shot.ShotColor; import com.shootoff.config.Configuration; import com.shootoff.config.ConfigurationException; import com.shootoff.gui.JavaFXThreadingRule; import com.shootoff.gui.MockCanvasManager; import com.shootoff.gui.controller.MockProjectorArenaController; import com.shootoff.gui.targets.TargetView; import com.shootoff.targets.Hit; import com.shootoff.targets.MockHit; import com.shootoff.targets.Target; import com.shootoff.targets.TargetRegion; import ch.qos.logback.classic.Logger; public class TestBouncingTargets { @Rule public JavaFXThreadingRule javafxRule = new JavaFXThreadingRule(); private PrintStream originalOut; private ByteArrayOutputStream stringOut = new ByteArrayOutputStream(); private PrintStream stringOutStream; private BouncingTargets bt; private Hit shootRegionHit; private Hit dontShootRegionHit; @Before public void setUp() throws ConfigurationException, IOException { stringOutStream = new PrintStream(stringOut, false, "UTF-8"); System.setProperty("shootoff.home", System.getProperty("user.dir")); TextToSpeech.silence(true); TrainingExerciseBase.silence(true); originalOut = System.out; System.setOut(stringOutStream); bt = new BouncingTargets(); Configuration config = new Configuration(new String[0]); config.setDebugMode(true); CamerasSupervisor cs = new CamerasSupervisor(config); MockProjectorArenaController pac = new MockProjectorArenaController(config, new MockCanvasManager(config)); bt.init(config, cs, null, null, pac); bt.init(6, 5, 0); shootRegionHit = new MockHit(bt.getShootTargets().get(0).getTarget(), (TargetRegion) ((TargetView) bt.getShootTargets().get(0).getTarget()).getTargetGroup().getChildren() .get(0), 0, 0); dontShootRegionHit = new MockHit(bt.getDontShootTargets().get(0).getTarget(), (TargetRegion) ((TargetView) bt.getDontShootTargets().get(0).getTarget()).getTargetGroup().getChildren() .get(0), 0, 0); } @After public void tearDown() { TextToSpeech.silence(false); TrainingExerciseBase.silence(false); System.setOut(originalOut); Logger rootLogger = (Logger) LoggerFactory.getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME); rootLogger.detachAndStopAllAppenders(); } @Test public void testShootFourThenDontShoot() throws UnsupportedEncodingException { assertEquals(6, bt.getShootTargets().size()); assertEquals(5, bt.getDontShootTargets().size()); assertEquals("Score: 0\n", stringOut.toString("UTF-8").replace("\r\n", "\n")); stringOut.reset(); bt.shotListener(new Shot(ShotColor.GREEN, 0, 0, 0, 2), Optional.of(shootRegionHit)); assertEquals("Score: 1\n", stringOut.toString("UTF-8").replace("\r\n", "\n")); stringOut.reset(); bt.shotListener(new Shot(ShotColor.GREEN, 0, 0, 0, 2), Optional.of(shootRegionHit)); assertEquals("Score: 2\n", stringOut.toString("UTF-8").replace("\r\n", "\n")); stringOut.reset(); bt.shotListener(new Shot(ShotColor.GREEN, 0, 0, 0, 2), Optional.of(shootRegionHit)); assertEquals("Score: 3\n", stringOut.toString("UTF-8").replace("\r\n", "\n")); stringOut.reset(); bt.shotListener(new Shot(ShotColor.GREEN, 0, 0, 0, 2), Optional.of(shootRegionHit)); assertEquals("Score: 4\n", stringOut.toString("UTF-8").replace("\r\n", "\n")); stringOut.reset(); bt.shotListener(new Shot(ShotColor.GREEN, 0, 0, 0, 2), Optional.of(dontShootRegionHit)); assertEquals("sounds/beep.wav\nYour score was 4\nScore: 0\n", stringOut.toString("UTF-8").replace("\r\n", "\n").replace(File.separatorChar, '/')); stringOut.reset(); } @Test public void testShootThenReset() throws UnsupportedEncodingException { assertEquals(6, bt.getShootTargets().size()); assertEquals(5, bt.getDontShootTargets().size()); assertEquals("Score: 0\n", stringOut.toString("UTF-8").replace("\r\n", "\n")); stringOut.reset(); bt.shotListener(new Shot(ShotColor.GREEN, 0, 0, 0, 2), Optional.of(shootRegionHit)); assertEquals("Score: 1\n", stringOut.toString("UTF-8").replace("\r\n", "\n")); stringOut.reset(); bt.reset(new ArrayList<Target>()); bt.shotListener(new Shot(ShotColor.GREEN, 0, 0, 0, 2), Optional.of(shootRegionHit)); assertEquals("Score: 0\nScore: 1\n", stringOut.toString("UTF-8").replace("\r\n", "\n")); stringOut.reset(); } }