This repository has been archived on 2025-03-02. You can view files and clone it, but cannot push or open issues or pull requests.
JRummikub/test/jrummikub/model/HandTest.java
Jannis Harder d5a8b2204c Test if initial melds are possible
git-svn-id: svn://sunsvr01.isp.uni-luebeck.de/swproj13/trunk@265 72836036-5685-4462-b002-a69064685172
2011-05-24 01:51:58 +02:00

242 lines
7.2 KiB
Java

package jrummikub.model;
import static jrummikub.model.StoneColor.BLACK;
import static jrummikub.model.StoneColor.BLUE;
import static jrummikub.model.StoneColor.ORANGE;
import static jrummikub.model.StoneColor.RED;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
/**
* Test class for {@link Hand}
*/
public class HandTest {
IHand hand;
/** */
@Before
public void setUp() {
hand = new Hand(new GameSettings());
}
/** */
@Test
public void testSimpleDrop() {
Stone stone1 = new Stone(1, RED);
Stone stone2 = new Stone(5, RED);
Stone stone3 = new Stone(2, RED);
hand.drop(stone1, new Position(2, 0));
hand.drop(stone2, new Position(3, 0));
hand.drop(stone3, new Position(2.5f, 0));
assertEquals(new Position(1.5f, 0), hand.getPosition(stone1));
assertEquals(new Position(3.5f, 0), hand.getPosition(stone2));
assertEquals(new Position(2.5f, 0), hand.getPosition(stone3));
}
/** */
@Test
public void testSingleEdgeDrop() {
Stone stone1 = new Stone(2, RED);
Stone stone2 = new Stone(4, RED);
hand.drop(stone1, new Position(0, 0));
hand.drop(stone2, new Position(0.5f, 0));
assertEquals(new Position(0, 0), hand.getPosition(stone1));
assertEquals(new Position(1, 0), hand.getPosition(stone2));
}
/** */
@Test
public void testNearEdgeDrop() {
Stone stone1 = new Stone(2, RED);
Stone stone2 = new Stone(4, RED);
hand.drop(stone1, new Position(0.25f, 0));
hand.drop(stone2, new Position(0.5f, 0));
assertEquals(new Position(0, 0), hand.getPosition(stone1));
assertEquals(new Position(1, 0), hand.getPosition(stone2));
}
/** */
@Test
public void testNearEdgeMiddleDrop() {
Stone stone1 = new Stone(1, RED);
Stone stone2 = new Stone(5, RED);
Stone stone3 = new Stone(2, RED);
hand.drop(stone1, new Position(0.25f, 0));
hand.drop(stone2, new Position(1.25f, 0));
hand.drop(stone3, new Position(0.5f, 0));
assertEquals(new Position(0, 0), hand.getPosition(stone1));
assertEquals(new Position(2, 0), hand.getPosition(stone2));
assertEquals(new Position(1, 0), hand.getPosition(stone3));
}
/** */
@Test
public void testNearRightEdgeDrop() {
Stone stone1 = new Stone(2, BLUE);
Stone stone2 = new Stone(4, BLUE);
hand.drop(stone1, new Position(12.75f, 1));
hand.drop(stone2, new Position(12.5f, 1));
assertEquals(new Position(13, 1), hand.getPosition(stone1));
assertEquals(new Position(12, 1), hand.getPosition(stone2));
}
/** */
@Test
public void testFullWrapDrop() {
List<Stone> rowStones = new ArrayList<Stone>();
for (int i = 0; i < 14; i++) {
Stone stone = new Stone(i % 9, BLUE);
rowStones.add(stone);
hand.drop(stone, new Position(i, 1));
}
Stone newStone = new Stone(RED);
hand.drop(newStone, new Position(12.5f, 1));
for (int i = 0; i < 13; i++) {
assertEquals(new Position(i, 1), hand.getPosition(rowStones.get(i)));
}
assertEquals(new Position(13, 1), hand.getPosition(newStone));
assertEquals(new Position(0, 2), hand.getPosition(rowStones.get(13)));
}
/** */
@Test
public void testCountPoints() {
Stone stone1 = new Stone(2, BLUE);
Stone stone2 = new Stone(4, BLUE);
Stone stone3 = new Stone(RED);
hand.drop(stone1, new Position(0, 0));
hand.drop(stone2, new Position(0, 0));
hand.drop(stone3, new Position(0, 0));
assertEquals(56, hand.getStonePoints());
}
private void testInitialMeld(boolean possible, List<Stone> handStones) {
for (Stone stone : handStones) {
hand.drop(stone, new Position(0, 0));
}
assertTrue(possible == hand.isInitialMeldPossible());
}
/** */
@Test
public void testNoValid() {
testInitialMeld(false, Arrays.asList(new Stone(8, RED), new Stone(9,
RED), new Stone(10, RED), new Stone(12, RED),
new Stone(13, RED)));
testInitialMeld(false, Arrays.asList(new Stone(10, RED), new Stone(10,
BLACK), new Stone(11, RED), new Stone(11, BLACK)));
testInitialMeld(false, Arrays.asList(new Stone(10, RED), new Stone(10,
RED), new Stone(10, BLACK), new Stone(11, RED), new Stone(11,
BLACK)));
testInitialMeld(false, Arrays.asList(new Stone(10, RED), new Stone(11,
BLACK), new Stone(12, RED)));
}
/** */
@Test
public void testNotEnoughPoints() {
testInitialMeld(false, Arrays.asList(new Stone(8, RED), new Stone(9,
RED), new Stone(10, RED)));
testInitialMeld(false, Arrays.asList(new Stone(1, RED), new Stone(2,
RED), new Stone(3, RED), new Stone(4, RED)));
testInitialMeld(false, Arrays.asList(new Stone(1, RED), new Stone(2,
RED), new Stone(3, RED), new Stone(1, BLACK), new Stone(2,
BLACK), new Stone(3, BLACK)));
}
/** */
@Test
public void testNotEnoughPointsWithJoker() {
testInitialMeld(false, Arrays.asList(new Stone(8, RED), new Stone(9,
RED), new Stone(RED), new Stone(3, BLACK)));
testInitialMeld(false, Arrays.asList(new Stone(4, RED), new Stone(5,
RED), new Stone(4, BLACK), new Stone(5, BLACK), new Stone(RED)));
}
/** */
@Test
public void testNotEnoughPointsWithTwoJokers() {
testInitialMeld(false, Arrays.asList(new Stone(1, RED), new Stone(2,
BLUE), new Stone(3, BLACK), new Stone(RED), new Stone(BLACK)));
testInitialMeld(false, Arrays.asList(new Stone(8, RED), new Stone(RED),
new Stone(BLACK)));
}
/** */
@Test
public void testValid() {
testInitialMeld(true, Arrays.asList(new Stone(11, RED), new Stone(12,
RED), new Stone(13, RED)));
testInitialMeld(true, Arrays.asList(new Stone(4, RED),
new Stone(5, RED), new Stone(6, RED), new Stone(5, ORANGE),
new Stone(5, BLACK), new Stone(5, BLUE)));
testInitialMeld(true, Arrays.asList(new Stone(10, RED), new Stone(10,
BLACK), new Stone(10, ORANGE)));
}
/** */
@Test
public void testValidWithJoker() {
testInitialMeld(true, Arrays.asList(new Stone(11, RED), new Stone(RED),
new Stone(13, RED)));
testInitialMeld(true, Arrays.asList(new Stone(10, RED),
new Stone(BLACK), new Stone(10, ORANGE)));
testInitialMeld(true, Arrays.asList(new Stone(4, RED),
new Stone(5, RED), new Stone(6, RED), new Stone(5, BLACK),
new Stone(5, BLUE), new Stone(RED)));
}
/** */
@Test
public void testValidWithTwoJokers() {
testInitialMeld(true, Arrays.asList(new Stone(9, RED), new Stone(RED),
new Stone(BLACK)));
}
/** */
@Test
public void testValidHuge() {
List<Stone> stones = new ArrayList<Stone>();
for (int i = 1; i <= 10; i++) {
stones.add(new Stone(i, RED));
stones.add(new Stone(i, BLACK));
}
testInitialMeld(true, stones);
}
/** */
@Test
public void testInvalidHuge() {
testInitialMeld(false, Arrays.asList(new Stone(1, RED), new Stone(2,
RED), new Stone(4, RED), new Stone(6, RED), new Stone(8, RED),
new Stone(10, RED), new Stone(13, RED), new Stone(1, BLACK),
new Stone(2, BLACK), new Stone(4, BLACK), new Stone(5, BLACK),
new Stone(8, BLACK), new Stone(9, BLACK), new Stone(12, BLACK),
new Stone(3, BLUE), new Stone(5, BLUE), new Stone(7, BLUE),
new Stone(11, BLUE), new Stone(RED)));
}
}