package tv.dyndns.kishibe.qmaclone.server;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;
import java.util.Arrays;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnit;
import org.mockito.junit.MockitoRule;
import tv.dyndns.kishibe.qmaclone.client.constant.Constant;
import tv.dyndns.kishibe.qmaclone.client.game.ProblemType;
import tv.dyndns.kishibe.qmaclone.client.packet.PacketProblem;
import tv.dyndns.kishibe.qmaclone.client.testing.TestDataProvider;
/**
* Test for {@link ComputerPlayer}.
*
* @author nodchip
*/
@RunWith(JUnit4.class)
public class ComputerPlayerTest {
@Rule
public final MockitoRule mocks = MockitoJUnit.rule();
private static final int FAKE_PROBLEM_ID = 12345;
@Mock
private PlayerAnswer.Factory mockPlayerAnswerFactory;
private ComputerPlayer player;
@Before
public void setUp() throws Exception {
player = new ComputerPlayer(mockPlayerAnswerFactory, Arrays.asList(1425));
}
@Test
@Ignore
public void testSelectIconFileName() {
fail("Not yet implemented");
}
@Test
@Ignore
public void testNewPlayer() {
fail("Not yet implemented");
}
@Test
public void getAnswerShouldReturnJunbanAnswer() {
PacketProblem problem = TestDataProvider.getProblem();
problem.type = ProblemType.Junban;
problem.answers = new String[] { "a", "b", "c", "d" };
problem.choices = new String[] {};
problem.prepareShuffledAnswersAndChoices();
player.getAnswer(problem,
Arrays.asList("a" + Constant.DELIMITER_GENERAL + "b" + Constant.DELIMITER_GENERAL + "c"));
// TODO(nodchip):テストを書く
}
@Test
@Ignore
public void testGetGreeting() {
fail("Not yet implemented");
}
@Test
public void getAnswerMojiPanelShouldReturnRandomAnswer() {
PacketProblem problem = TestDataProvider.getProblem();
problem.id = FAKE_PROBLEM_ID;
problem.type = ProblemType.MojiPanel;
problem.shuffledChoices = new String[] { "01234567" };
problem.shuffledAnswers = new String[] { "0123" };
player = spy(player);
doReturn(false).when(player).correct();
doReturn(null).when(player).joke(FAKE_PROBLEM_ID);
String answer = player.getAnswerMojiPanel(problem);
assertEquals(4, answer.length());
}
@Test
public void getAnswerMojiPanelShouldTreatInvalidData() {
PacketProblem problem = TestDataProvider.getProblem();
problem.id = FAKE_PROBLEM_ID;
problem.type = ProblemType.MojiPanel;
problem.shuffledChoices = new String[] { "012" };
problem.shuffledAnswers = new String[] { "0123" };
player = spy(player);
doReturn(false).when(player).correct();
doReturn(null).when(player).joke(FAKE_PROBLEM_ID);
String answer = player.getAnswerMojiPanel(problem);
assertEquals(3, answer.length());
}
}