package com.github.donkirkby.vograbulary.ultraghost; import static org.hamcrest.CoreMatchers.*; import static org.junit.Assert.*; import java.util.Arrays; import java.util.List; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameter; import org.junit.runners.Parameterized.Parameters; @RunWith(Parameterized.class) public class PuzzleChallengeTest { @Parameter public String letters; @Parameter(value=1) public int minimumLength; @Parameter(value=2) public String solution; @Parameter(value=3) public String challenge; @Parameter(value=4) public WordResult expectedResult; @Parameter(value=5) public boolean isExpectedToImprove; @Parameters(name="{0} at least {1}: {2}/{3} => {4}") public static List<Object[]> getParameters() { return Arrays.asList(new Object[][] { {"PIE", 4, "PIECE", "", WordResult.NOT_IMPROVED, false}, {"PIE", 4, "piece", "", WordResult.NOT_IMPROVED, false}, {"PIE", 4, "piece", "piece", WordResult.NOT_IMPROVED, false}, {"PIE", 4, "piece", "pipe", WordResult.SHORTER, true}, {"PIE", 5, "piece", "pipe", WordResult.IMPROVEMENT_TOO_SHORT, false}, {"PIE", 4, "price", "piece", WordResult.EARLIER, true}, {"PIE", 4, "piece", "pize", WordResult.IMPROVEMENT_NOT_A_WORD, false}, {"PIE", 4, "piece", "rope", WordResult.IMPROVEMENT_NOT_A_MATCH, false}, {"PIE", 4, "pine", "piece", WordResult.LONGER, false}, {"MIE", 4, "mime", "mine", WordResult.LATER, false}, {"PIE", 4, "", "pipe", WordResult.WORD_FOUND, true}, {"PIE", 5, "", "pipe", WordResult.IMPROVED_SKIP_TOO_SHORT, false}, {"PIE", 4, "", "pize", WordResult.IMPROVED_SKIP_NOT_A_WORD, false}, {"PIE", 4, "", "pzze", WordResult.IMPROVED_SKIP_NOT_A_WORD, false}, {"PIE", 4, "", "rope", WordResult.IMPROVED_SKIP_NOT_A_MATCH, false}, {"PIE", 4, "", "", WordResult.SKIP_NOT_IMPROVED, false}, {"PIE", 4, null, "pipe", WordResult.UNKNOWN, false}, {"PIE", 4, "piece", null, WordResult.VALID, false} }); } private WordList wordList; private Puzzle puzzle; @Before public void setUp() { wordList = new WordList(); wordList.read(Arrays.asList("piece", "pipe", "pine", "rope", "mime", "mine")); puzzle = new Puzzle(letters, new Student("Bob"), wordList); puzzle.setMinimumWordLength(minimumLength); puzzle.setSolution(solution); puzzle.setResponse(challenge); } @Test public void getResult() { WordResult result = puzzle.getResult(); assertThat("result", result, is(expectedResult)); } @Test public void isImproved() { boolean isImproved = puzzle.getResult().isImproved(); assertThat("isImproved", isImproved, is(isExpectedToImprove)); } }