Skip to content
Snippets Groups Projects
GuessingGameTest.java 2.60 KiB
import static org.junit.jupiter.api.Assertions.*;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.PrintStream;

import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

class OutputCapturer {
	private PrintStream origOut;

	private ByteArrayOutputStream outputStream;
	
	public void start()
	{
		this.origOut = System.out;
		this.outputStream = new ByteArrayOutputStream();
		PrintStream ps = new PrintStream(this.outputStream);
		System.setOut(ps);	
	}
	
	public String getOutput() {
		System.out.flush();
		return this.outputStream.toString().replaceAll("\\r\\n", "\n").replaceAll("\\r", "\n");
	}
	public void stop() {
		System.setOut(this.origOut);
	}
}

@DisplayName("Lab 1 part 2")
	class GuessingGameTest {
	OutputCapturer outputHarness;

	@BeforeEach
	public void setup() {
		this.outputHarness = new OutputCapturer();
		this.outputHarness.start();
	}

	@AfterEach
	public void tearDown() {
		this.outputHarness.stop();
	}
	
	@Test
	@DisplayName("Tests when the guess was equal")
	public void testEqual() {
		Integer[] randomNumbers = { new Integer(5) };
		String[] inputs = { new String("5") };
		Toolbox.setTestingData(randomNumbers, inputs);
		
		GuessingGame.main(null);
		
		String out = outputHarness.getOutput();
		assertTrue(out.toLowerCase().contains("right"), "Should say guess was right");
		assertFalse(out.toLowerCase().contains("low"), "Should not say low");
		assertFalse(out.toLowerCase().contains("high"), "Should not say high");
	}

	@Test
	@DisplayName("Tests when the guess was too low")
	public void testLow() {

		Integer[] randomNumbers = { new Integer(5) };
		String[] inputs = { new String("1") };
		Toolbox.setTestingData(randomNumbers, inputs);
		GuessingGame.main(null);
		
		String out = outputHarness.getOutput();
		assertFalse(out.toLowerCase().contains("right"), "Should not say right");
		assertTrue(out.toLowerCase().contains("low"), "Should say low");
		assertFalse(out.toLowerCase().contains("high"), "Should not say high");	}

	@Test
	@DisplayName("Tests when the guess was too high")
	public void testHigh() {

		Integer[] randomNumbers = { new Integer(5) };
		String[] inputs = { new String("10") };
		Toolbox.setTestingData(randomNumbers, inputs);
		GuessingGame.main(null);
		
		String out = outputHarness.getOutput();
		assertFalse(out.toLowerCase().contains("right"), "Should not say right");
		assertFalse(out.toLowerCase().contains("low"), "Should not say low");
		assertTrue(out.toLowerCase().contains("high"), "Should say high");	
	}
}