/tests/hearts/game/TestPlayerManager.java

https://github.com/muadibbm/Hearts · Java · 515 lines · 402 code · 100 blank · 13 comment · 4 complexity · af46b028d1f132867dd54a39ce68b03c MD5 · raw file

  1. package hearts.game;
  2. import static org.junit.Assert.assertEquals;
  3. import static org.junit.Assert.assertFalse;
  4. import static org.junit.Assert.assertTrue;
  5. import static org.junit.Assert.assertSame;
  6. import static org.junit.Assert.assertNull;
  7. import static org.junit.Assert.assertNotSame;
  8. import java.util.HashMap;
  9. import java.util.Iterator;
  10. import java.util.ArrayList;
  11. import java.util.List;
  12. import java.util.Map;
  13. import java.util.Map.Entry;
  14. import hearts.model.Game;
  15. import hearts.model.ImmutableGameWrapper;
  16. import hearts.model.Player;
  17. import hearts.model.ModelException;
  18. import hearts.game.GameEngine.PassingDirection;
  19. import hearts.robots.IRobot;
  20. import hearts.robots.PredictableRobot;
  21. import hearts.robots.RandomRobot;
  22. import hearts.robots.HardSmartRobot;
  23. import hearts.util.AllCards;
  24. import hearts.util.Card;
  25. import hearts.util.CardList;
  26. import hearts.util.Constants;
  27. import org.junit.Test;
  28. public class TestPlayerManager
  29. {
  30. PlayerManager testThis;
  31. @org.junit.Before public void setUp() {
  32. testThis = new PlayerManager();
  33. }
  34. @Test
  35. public void testReset()
  36. {
  37. testThis.addPlayer("Player");
  38. Iterator<String> names = testThis.iterator();
  39. assertTrue(names.hasNext());
  40. testThis.reset();
  41. names = testThis.iterator();
  42. assertFalse(names.hasNext());
  43. }
  44. @Test
  45. public void testAddPlayer()
  46. {
  47. Iterator<String> names = testThis.iterator();
  48. assertFalse(names.hasNext());
  49. testThis.addPlayer("Player");
  50. names = testThis.iterator();
  51. assertTrue(names.hasNext());
  52. assertTrue(names.next().equals("Player"));
  53. }
  54. @Test (expected = GameException.class)
  55. public void testAddPlayerException()
  56. {
  57. Iterator<String> names = testThis.iterator();
  58. assertFalse(names.hasNext());
  59. testThis.addPlayer("Player1");
  60. testThis.addPlayer("Player2");
  61. testThis.addPlayer("Player3");
  62. testThis.addPlayer("Player4");
  63. testThis.addPlayer("5sACroud!");
  64. }
  65. @Test
  66. public void testSetAssociation()
  67. {
  68. ArrayList<String> playerList = new ArrayList<String>();
  69. Iterator<String> names = testThis.iterator();
  70. assertFalse(names.hasNext());
  71. testThis.addPlayer("Player1");
  72. testThis.addPlayer("Player2");
  73. testThis.addPlayer("Player3");
  74. testThis.addPlayer("Player4");
  75. names = testThis.iterator();
  76. while (names.hasNext())
  77. {
  78. playerList.add(names.next());
  79. }
  80. assertEquals(playerList.get(0), "Player1");
  81. testThis.setAssociation(GameEngine.PassingDirection.LEFT, playerList);
  82. Map<String, Player> associates = testThis.getAssociates();
  83. Iterator<Entry<String, Player>> it = associates.entrySet().iterator();
  84. Entry<String, Player> pair = (Entry<String, Player>) it.next();
  85. String lplayerName = (String) pair.getKey();
  86. String lassociateName = (String) pair.getValue().toString();
  87. assertEquals(lplayerName,"Player4");
  88. assertEquals(lassociateName,"Player3");
  89. pair = (Entry<String, Player>) it.next();
  90. String lplayer2Name = (String) pair.getKey();
  91. String lassociate2Name = (String) pair.getValue().toString();
  92. assertEquals(lplayer2Name,"Player3");
  93. assertEquals(lassociate2Name,"Player2");
  94. pair = (Entry<String, Player>) it.next();
  95. String lplayer3Name = (String) pair.getKey();
  96. String lassociate3Name = (String) pair.getValue().toString();
  97. assertEquals(lplayer3Name,"Player2");
  98. assertEquals(lassociate3Name,"Player1");
  99. pair = (Entry<String, Player>) it.next();
  100. String lplayer4Name = (String) pair.getKey();
  101. String lassociate4Name = (String) pair.getValue().toString();
  102. assertEquals(lplayer4Name,"Player1");
  103. assertEquals(lassociate4Name,"Player4");
  104. testThis.setAssociation(GameEngine.PassingDirection.RIGHT, playerList);
  105. associates = testThis.getAssociates();
  106. it = associates.entrySet().iterator();
  107. pair = (Entry<String, Player>) it.next();
  108. String rplayerName = (String) pair.getKey();
  109. String rassociateName = (String) pair.getValue().toString();
  110. assertEquals(rplayerName,"Player4");
  111. assertEquals(rassociateName,"Player1");
  112. pair = (Entry<String, Player>) it.next();
  113. String rplayer2Name = (String) pair.getKey();
  114. String rassociate2Name = (String) pair.getValue().toString();
  115. assertEquals(rplayer2Name,"Player3");
  116. assertEquals(rassociate2Name,"Player4");
  117. pair = (Entry<String, Player>) it.next();
  118. String rplayer3Name = (String) pair.getKey();
  119. String rassociate3Name = (String) pair.getValue().toString();
  120. assertEquals(rplayer3Name,"Player2");
  121. assertEquals(rassociate3Name,"Player3");
  122. pair = (Entry<String, Player>) it.next();
  123. String rplayer4Name = (String) pair.getKey();
  124. String rassociate4Name = (String) pair.getValue().toString();
  125. assertEquals(rplayer4Name,"Player1");
  126. assertEquals(rassociate4Name,"Player2");
  127. testThis.setAssociation(GameEngine.PassingDirection.ACROSS, playerList);
  128. associates = testThis.getAssociates();
  129. it = associates.entrySet().iterator();
  130. pair = (Entry<String, Player>) it.next();
  131. String aplayerName = (String) pair.getKey();
  132. String aassociateName = (String) pair.getValue().toString();
  133. assertEquals(aplayerName,"Player4");
  134. assertEquals(aassociateName,"Player2");
  135. pair = (Entry<String, Player>) it.next();
  136. String aplayer2Name = (String) pair.getKey();
  137. String aassociate2Name = (String) pair.getValue().toString();
  138. assertEquals(aplayer2Name,"Player3");
  139. assertEquals(aassociate2Name,"Player1");
  140. pair = (Entry<String, Player>) it.next();
  141. String aplayer3Name = (String) pair.getKey();
  142. String aassociate3Name = (String) pair.getValue().toString();
  143. assertEquals(aplayer3Name,"Player2");
  144. assertEquals(aassociate3Name,"Player4");
  145. pair = (Entry<String, Player>) it.next();
  146. String aplayer4Name = (String) pair.getKey();
  147. String aassociate4Name = (String) pair.getValue().toString();
  148. assertEquals(aplayer4Name,"Player1");
  149. assertEquals(aassociate4Name,"Player3");
  150. /**TODO: Still have to study your
  151. * code better to know how to test it.
  152. * Ill get back to it!
  153. */
  154. }
  155. @Test
  156. public void testSetHand()
  157. {
  158. Map<String, Player> players = new HashMap<String, Player>();
  159. String name = "Player1";
  160. CardList hand = new CardList(10);
  161. hand.add(AllCards.C2C);
  162. hand.add(AllCards.C5C);
  163. testThis.addPlayer(name);
  164. testThis.setHand(name, hand);
  165. players = testThis.getPlayers();
  166. assertEquals(players.get(name).getHand(), hand);
  167. assertNotSame(players.get(name).getHand(), hand);
  168. }
  169. @Test
  170. public void testClearHands()
  171. {
  172. Map<String, Player> players = new HashMap<String, Player>();
  173. String name = "Player1";
  174. CardList hand = new CardList(10);
  175. hand.add(AllCards.C2C);
  176. testThis.addPlayer(name);
  177. testThis.setHand(name, hand);
  178. testThis.clearHands();
  179. players = testThis.getPlayers();
  180. assertTrue(players.get(name).getHand().isEmpty());
  181. }
  182. @Test
  183. public void testSetScore()
  184. {
  185. Map<String, Player> players = new HashMap<String, Player>();
  186. String name = "Player1";
  187. CardList hand = new CardList(4);
  188. hand.add(AllCards.C2C);
  189. hand.add(AllCards.C2H);
  190. hand.add(AllCards.C3H);
  191. hand.add(AllCards.C4H);
  192. testThis.addPlayer(name);
  193. testThis.setScore(name, hand);
  194. players = testThis.getPlayers();
  195. assertEquals(players.get(name).getScore(), 3);
  196. CardList hand2 = new CardList(4);
  197. hand2.add(AllCards.C3D);
  198. hand2.add(AllCards.C8H);
  199. hand2.add(AllCards.C9H);
  200. hand2.add(AllCards.CQS);
  201. testThis.setScore(name, hand2);
  202. players = testThis.getPlayers();
  203. assertEquals(players.get(name).getScore(), 18);
  204. }
  205. @Test
  206. public void testGetScore()
  207. {
  208. String name = "Player1";
  209. CardList hand = new CardList(4);
  210. hand.add(AllCards.C2C);
  211. hand.add(AllCards.C2H);
  212. hand.add(AllCards.C3H);
  213. hand.add(AllCards.C4H);
  214. testThis.addPlayer(name);
  215. testThis.setScore(name, hand);
  216. assertEquals(testThis.getScore(name), 3);
  217. CardList hand2 = new CardList(4);
  218. hand2.add(AllCards.C3D);
  219. hand2.add(AllCards.C8H);
  220. hand2.add(AllCards.C9H);
  221. hand2.add(AllCards.CQS);
  222. testThis.setScore(name, hand2);
  223. assertEquals(testThis.getScore(name), 18);
  224. }
  225. @Test
  226. public void testPassCards()
  227. {
  228. /**
  229. * TODO: need to do proper checks. i.e. what if the name is not actual in the game, also if the player doesn't have those cards etc
  230. */
  231. Map<String, Player> players = new HashMap<String, Player>();
  232. testThis.addPlayer("Player1");
  233. testThis.addPlayer("Player2");
  234. ArrayList<String> playerList = new ArrayList<String>();
  235. Iterator<String> names = testThis.iterator();
  236. names = testThis.iterator();
  237. while (names.hasNext())
  238. {
  239. playerList.add(names.next());
  240. }
  241. testThis.setAssociation(GameEngine.PassingDirection.LEFT, playerList);
  242. CardList hand = new CardList(Constants.NUMBER_OF_PLAYERS);
  243. CardList cards = new CardList(10);
  244. hand.add(AllCards.C2C);
  245. hand.add(AllCards.C2H);
  246. hand.add(AllCards.C2D);
  247. hand.add(AllCards.C2S);
  248. testThis.setHand("Player1", hand);
  249. hand.clear();
  250. hand.add(AllCards.C3C);
  251. hand.add(AllCards.C3H);
  252. hand.add(AllCards.C3D);
  253. hand.add(AllCards.C3S);
  254. testThis.setHand("Player2", hand);
  255. hand.clear();
  256. hand.add(AllCards.C2C);
  257. hand.add(AllCards.C2H);
  258. hand.add(AllCards.C2D);
  259. testThis.passCards("Player1", hand);
  260. hand.clear();
  261. cards.add(AllCards.C3C);
  262. cards.add(AllCards.C3H);
  263. cards.add(AllCards.C3D);
  264. cards.add(AllCards.C3S);
  265. cards.add(AllCards.C2C);
  266. cards.add(AllCards.C2H);
  267. cards.add(AllCards.C2D);
  268. players = testThis.getPlayers();
  269. assertEquals(players.get("Player2").getHand(), cards);
  270. cards.clear();
  271. cards.add(AllCards.C2S);
  272. assertEquals(players.get("Player1").getHand(), cards);
  273. cards.clear();
  274. hand.add(AllCards.C3C);
  275. hand.add(AllCards.C3H);
  276. hand.add(AllCards.C3D);
  277. testThis.passCards("Player2", hand);
  278. cards.add(AllCards.C3S);
  279. cards.add(AllCards.C2C);
  280. cards.add(AllCards.C2H);
  281. cards.add(AllCards.C2D);
  282. players = testThis.getPlayers();
  283. assertEquals(players.get("Player2").getHand(), cards);
  284. cards.clear();
  285. cards.add(AllCards.C2S);
  286. cards.add(AllCards.C3C);
  287. cards.add(AllCards.C3H);
  288. cards.add(AllCards.C3D);
  289. assertEquals(players.get("Player1").getHand(), cards);
  290. cards.clear();
  291. }
  292. @Test
  293. public void testPassCardsRobot()
  294. {
  295. Map<String, Player> players = new HashMap<String, Player>();
  296. CardList hand = new CardList(Constants.NUMBER_OF_PLAYERS);
  297. hand.add(AllCards.C2C);
  298. hand.add(AllCards.C2H);
  299. hand.add(AllCards.C2D);
  300. IRobot robot = new PredictableRobot();
  301. testThis.addPlayer("Player1");
  302. testThis.addPlayer("Player2");
  303. ArrayList<String> playerList = new ArrayList<String>();
  304. Iterator<String> names = testThis.iterator();
  305. names = testThis.iterator();
  306. while (names.hasNext())
  307. {
  308. playerList.add(names.next());
  309. }
  310. testThis.setAssociation(GameEngine.PassingDirection.LEFT, playerList);
  311. testThis.setHand("Player1", hand);
  312. testThis.passCards("Player1", robot);
  313. players = testThis.getPlayers();
  314. CardList compare1 = new CardList(Constants.NUMBER_OF_PLAYERS);
  315. compare1 = players.get("Player2").getHand();
  316. compare1.sort();
  317. hand.sort();
  318. assertEquals(compare1, hand);
  319. hand.clear();
  320. assertEquals(players.get("Player1").getHand(), hand);
  321. }
  322. @Test
  323. public void testFirstPlayer()
  324. {
  325. CardList hand = new CardList(13);
  326. testThis.addPlayer("Player1");
  327. testThis.addPlayer("Player2");
  328. testThis.addPlayer("Player3");
  329. testThis.addPlayer("Player4");
  330. hand.add(AllCards.C2C);
  331. hand.add(AllCards.C2D);
  332. hand.add(AllCards.C2S);
  333. hand.add(AllCards.C2H);
  334. hand.add(AllCards.C3C);
  335. testThis.setHand("Player1", hand);
  336. hand.clear();
  337. hand.add(AllCards.C4C);
  338. hand.add(AllCards.C4D);
  339. testThis.setHand("Player2", hand);
  340. hand.clear();
  341. hand.add(AllCards.C4S);
  342. hand.add(AllCards.C4H);
  343. testThis.setHand("Player3", hand);
  344. hand.clear();
  345. hand.add(AllCards.C5S);
  346. hand.add(AllCards.C5H);
  347. testThis.setHand("Player4", hand);
  348. hand.clear();
  349. String first = testThis.firstPlayer();
  350. assertEquals(first, "Player1");
  351. testThis.clearHands();
  352. hand.add(AllCards.C2C);
  353. hand.add(AllCards.C2D);
  354. hand.add(AllCards.C2S);
  355. hand.add(AllCards.C2H);
  356. hand.add(AllCards.C3C);
  357. testThis.setHand("Player4", hand);
  358. hand.clear();
  359. String first2 = testThis.firstPlayer();
  360. assertEquals(first2, "Player4");
  361. }
  362. @Test
  363. public void testPlay()
  364. {
  365. /**
  366. * TODO: again check if player exists and if he has the cards he wishes to play
  367. */
  368. Map<String, Player> players = new HashMap<String, Player>();
  369. CardList hand = new CardList(4);
  370. hand.add(AllCards.C2C);
  371. hand.add(AllCards.C2H);
  372. hand.add(AllCards.C3H);
  373. hand.add(AllCards.C4H);
  374. testThis.addPlayer("Player1");
  375. testThis.setHand("Player1", hand);
  376. players = testThis.getPlayers();
  377. assertEquals(players.get("Player1").getHand(), hand);
  378. testThis.play("Player1", AllCards.C2C);
  379. hand.remove(AllCards.C2C);
  380. assertEquals(players.get("Player1").getHand(), hand);
  381. }
  382. @Test
  383. public void testPlayRobot()
  384. {
  385. Game game = new Game();
  386. game.newTrick();
  387. ImmutableGameWrapper iGame = new ImmutableGameWrapper(game);
  388. IRobot robot = new PredictableRobot();
  389. Map<String, Player> players = new HashMap<String, Player>();
  390. CardList hand = new CardList(4);
  391. hand.add(AllCards.C2C);
  392. hand.add(AllCards.C2H);
  393. hand.add(AllCards.C3H);
  394. hand.add(AllCards.C4H);
  395. testThis.addPlayer("Player1");
  396. testThis.addPlayer("Player2");
  397. ArrayList<String> playerList = new ArrayList<String>();
  398. Iterator<String> names = testThis.iterator();
  399. names = testThis.iterator();
  400. while (names.hasNext())
  401. {
  402. playerList.add(names.next());
  403. }
  404. /**
  405. * TODO: fix various check errors
  406. */
  407. testThis.setHand("Player1", hand);
  408. testThis.setAssociation(GameEngine.PassingDirection.LEFT, playerList);
  409. players = testThis.getPlayers();
  410. assertEquals(players.get("Player1").getHand(), hand);
  411. testThis.play("Player1", robot, iGame);
  412. hand.remove(AllCards.C2C);
  413. assertEquals(players.get("Player1").getHand(), hand);
  414. }
  415. }