/**
* Copyright (C) 2017 Jan Schäfer (jansch@users.sourceforge.net)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jskat.control.iss;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.StringTokenizer;
import org.jskat.AbstractJSkatTest;
import org.jskat.data.GameAnnouncement;
import org.jskat.data.SkatGameData;
import org.jskat.data.Trick;
import org.jskat.data.iss.MoveInformation;
import org.jskat.data.iss.MoveType;
import org.jskat.data.iss.PlayerStatus;
import org.jskat.data.iss.TablePanelStatus;
import org.jskat.util.Card;
import org.jskat.util.CardList;
import org.jskat.util.GameType;
import org.jskat.util.Player;
import org.junit.Ignore;
import org.junit.Test;
/**
* Tests the parsing of the ISS messages
*/
public class MessageParserTest extends AbstractJSkatTest {
/**
* Test the parsing of the game summary
*/
@Test
public void testParseGameSummary() {
final String gameSummary = "(;GM[Skat]PC[International Skat Server]CO[]SE[24072]ID[541932]DT[2010-12-06/18:59:24/UTC]P0[zoot]P1[kermit]P2[foo]R0[]R1[]R2[0.0]MV[w HA.SK.SJ.SA.CQ.S8.C9.H7.H9.DQ.CJ.S9.DJ.S7.D9.SQ.C8.HQ.DK.CA.D8.D7.DT.CT.ST.C7.HK.DA.HT.HJ.H8.CK 1 p 2 18 0 p 2 s w H8.CK 2 D.ST.H8 0 SA 1 S7 2 DA 2 HJ 0 SJ 1 D9 0 DQ 1 DJ 2 D7 1 CJ 2 D8 0 CQ 1 CA 2 C7 0 C9 1 S9 2 DT 0 S8 2 CT 0 H7 1 C8 2 CK 0 H9 1 HQ 2 HK 0 HA 1 SQ 0 SK 1 DK 2 HT ]R[d:2 loss v:-54 m:-2 bidok p:59 t:4 s:0 z:0 p0:0 p1:0 p2:0 l:-1 to:-1 r:0] ;)"; //$NON-NLS-1$
final SkatGameData gameData = MessageParser
.parseGameSummary(gameSummary);
assertEquals("zoot", gameData.getPlayerName(Player.FOREHAND)); //$NON-NLS-1$
assertEquals("kermit", gameData.getPlayerName(Player.MIDDLEHAND)); //$NON-NLS-1$
assertEquals("foo", gameData.getPlayerName(Player.REARHAND)); //$NON-NLS-1$
assertEquals(10, gameData.getDealtCards().get(Player.FOREHAND).size());
for (final Card card : Arrays.asList(Card.HA, Card.SK, Card.SJ,
Card.SA, Card.CQ, Card.S8, Card.C9, Card.H7, Card.H9, Card.DQ)) {
assertTrue(gameData.getDealtCards().get(Player.FOREHAND)
.contains(card));
}
assertEquals(10, gameData.getDealtCards().get(Player.MIDDLEHAND).size());
for (final Card card : Arrays.asList(Card.CJ, Card.S9, Card.DJ,
Card.S7, Card.D9, Card.SQ, Card.C8, Card.HQ, Card.DK, Card.CA)) {
assertTrue(gameData.getDealtCards().get(Player.MIDDLEHAND)
.contains(card));
}
assertEquals(10, gameData.getDealtCards().get(Player.REARHAND).size());
for (final Card card : Arrays.asList(Card.D8, Card.D7, Card.DT,
Card.CT, Card.ST, Card.C7, Card.HK, Card.DA, Card.HT, Card.HJ)) {
assertTrue(gameData.getDealtCards().get(Player.REARHAND)
.contains(card));
}
assertTrue(gameData.getDealtSkat().contains(Card.H8));
assertTrue(gameData.getDealtSkat().contains(Card.CK));
assertTrue(gameData.getSkat().contains(Card.ST));
assertTrue(gameData.getSkat().contains(Card.H8));
assertEquals(0, gameData.getMaxPlayerBid(Player.FOREHAND));
assertEquals(0, gameData.getMaxPlayerBid(Player.MIDDLEHAND));
assertEquals(18, gameData.getMaxPlayerBid(Player.REARHAND));
assertThat(gameData.getMaxBidValue(), is(equalTo(18)));
assertEquals(Player.REARHAND, gameData.getDeclarer());
assertTrue(gameData.getDealtSkat().contains(Card.H8));
assertTrue(gameData.getDealtSkat().contains(Card.CK));
assertEquals(GameType.DIAMONDS, gameData.getGameType());
assertFalse(gameData.isHand());
assertFalse(gameData.isOuvert());
assertFalse(gameData.isSchneider());
assertFalse(gameData.isSchneiderAnnounced());
assertFalse(gameData.isSchwarz());
assertFalse(gameData.isSchwarzAnnounced());
assertEquals(10, gameData.getTricks().size());
final List<Trick> tricks = gameData.getTricks();
checkTrick(tricks.get(0), Player.FOREHAND, Card.SA, Card.S7, Card.DA,
Player.REARHAND);
checkTrick(tricks.get(1), Player.REARHAND, Card.HJ, Card.SJ, Card.D9,
Player.FOREHAND);
checkTrick(tricks.get(2), Player.FOREHAND, Card.DQ, Card.DJ, Card.D7,
Player.MIDDLEHAND);
checkTrick(tricks.get(3), Player.MIDDLEHAND, Card.CJ, Card.D8, Card.CQ,
Player.MIDDLEHAND);
checkTrick(tricks.get(4), Player.MIDDLEHAND, Card.CA, Card.C7, Card.C9,
Player.MIDDLEHAND);
checkTrick(tricks.get(5), Player.MIDDLEHAND, Card.S9, Card.DT, Card.S8,
Player.REARHAND);
checkTrick(tricks.get(6), Player.REARHAND, Card.CT, Card.H7, Card.C8,
Player.REARHAND);
checkTrick(tricks.get(7), Player.REARHAND, Card.CK, Card.H9, Card.HQ,
Player.REARHAND);
checkTrick(tricks.get(8), Player.REARHAND, Card.HK, Card.HA, Card.SQ,
Player.FOREHAND);
checkTrick(tricks.get(9), Player.FOREHAND, Card.SK, Card.DK, Card.HT,
Player.MIDDLEHAND);
assertFalse(gameData.isGameWon());
assertEquals(-54, gameData.getResult().getGameValue());
assertEquals(59, gameData.getDeclarerScore());
assertEquals(61, gameData.getOpponentScore());
assertFalse(gameData.isSchneider());
assertFalse(gameData.isSchwarz());
assertFalse(gameData.isOverBidded());
}
private static void checkTrick(final Trick trick,
final Player trickForeHand, final Card firstCard,
final Card secondCard, final Card thirdCard,
final Player trickWinner) {
final int trickNo = trick.getTrickNumberInGame();
assertEquals(
"Wrong trick fore hand for trick " + trickNo, trickForeHand, trick.getForeHand()); //$NON-NLS-1$
assertEquals(
"Wrong first card for trick " + trickNo, firstCard, trick.getFirstCard()); //$NON-NLS-1$
assertEquals(
"Wrong second card for trick " + trickNo, secondCard, trick.getSecondCard()); //$NON-NLS-1$
assertEquals(
"Wrong third card for trick " + trickNo, thirdCard, trick.getThirdCard()); //$NON-NLS-1$
assertEquals(
"Wrong trick winner for trick " + trickNo, trickWinner, trick.getTrickWinner()); //$NON-NLS-1$
}
/**
* Test the parsing of the game summary
*/
@Test
public void testParseGameSummary002() {
final String gameSummary = "(;GM[Skat]PC[International Skat Server]CO[]SE[29859]ID[684159]DT[2011-04-05/20:35:55/UTC]P0[foo]P1[xskat:2]P2[xskat]R0[0.0]R1[]R2[]MV[w SQ.DK.ST.S7.CT.HK.S9.SK.H7.C7.DT.CA.CQ.CK.DJ.DA.H8.SA.D7.C8.SJ.HA.CJ.S8.C9.DQ.HJ.HQ.D9.D8.HT.H9 1 18 0 y 1 20 0 y 1 22 0 y 1 23 0 y 1 24 0 y 1 p 2 27 0 p 2 s w HT.H9 2 G.S8.C9 0 DK 1 DA 2 D8 1 DT 2 D9 0 ST 1 SA 2 CJ 0 S7 2 HJ 0 CT 1 DJ 2 DQ 0 C7 1 D7 2 HA 0 H7 1 H8 2 HT 0 HK 1 C8 2 HQ 0 S9 1 CQ 2 H9 0 SQ 1 CK 2 SJ 0 SK 1 CA ]R[d:2 win v:96 m:3 bidok p:85 t:8 s:0 z:0 p0:0 p1:0 p2:0 l:-1 to:-1 r:0] ;)"; //$NON-NLS-1$
final SkatGameData gameData = MessageParser
.parseGameSummary(gameSummary);
assertEquals("foo", gameData.getPlayerName(Player.FOREHAND)); //$NON-NLS-1$
assertEquals("xskat:2", gameData.getPlayerName(Player.MIDDLEHAND)); //$NON-NLS-1$
assertEquals("xskat", gameData.getPlayerName(Player.REARHAND)); //$NON-NLS-1$
assertEquals(24, gameData.getMaxPlayerBid(Player.FOREHAND));
assertEquals(24, gameData.getMaxPlayerBid(Player.MIDDLEHAND));
assertEquals(27, gameData.getMaxPlayerBid(Player.REARHAND));
assertThat(gameData.getMaxBidValue(), is(equalTo(27)));
assertEquals(Player.REARHAND, gameData.getDeclarer());
assertTrue(gameData.getDealtSkat().contains(Card.HT));
assertTrue(gameData.getDealtSkat().contains(Card.H9));
assertEquals(GameType.GRAND, gameData.getGameType());
assertFalse(gameData.isHand());
assertFalse(gameData.isOuvert());
assertFalse(gameData.isSchneider());
assertFalse(gameData.isSchneiderAnnounced());
assertFalse(gameData.isSchwarz());
assertFalse(gameData.isSchwarzAnnounced());
assertEquals(10, gameData.getTricks().size());
final List<Trick> tricks = gameData.getTricks();
checkTrick(tricks.get(0), Player.FOREHAND, Card.DK, Card.DA, Card.D8,
Player.MIDDLEHAND);
checkTrick(tricks.get(1), Player.MIDDLEHAND, Card.DT, Card.D9, Card.ST,
Player.MIDDLEHAND);
checkTrick(tricks.get(2), Player.MIDDLEHAND, Card.SA, Card.CJ, Card.S7,
Player.REARHAND);
checkTrick(tricks.get(3), Player.REARHAND, Card.HJ, Card.CT, Card.DJ,
Player.REARHAND);
checkTrick(tricks.get(4), Player.REARHAND, Card.DQ, Card.C7, Card.D7,
Player.REARHAND);
checkTrick(tricks.get(5), Player.REARHAND, Card.HA, Card.H7, Card.H8,
Player.REARHAND);
checkTrick(tricks.get(6), Player.REARHAND, Card.HT, Card.HK, Card.C8,
Player.REARHAND);
checkTrick(tricks.get(7), Player.REARHAND, Card.HQ, Card.S9, Card.CQ,
Player.REARHAND);
checkTrick(tricks.get(8), Player.REARHAND, Card.H9, Card.SQ, Card.CK,
Player.REARHAND);
checkTrick(tricks.get(9), Player.REARHAND, Card.SJ, Card.SK, Card.CA,
Player.REARHAND);
assertTrue(gameData.isGameWon());
assertEquals(96, gameData.getResult().getGameValue());
assertEquals(85, gameData.getDeclarerScore());
assertEquals(35, gameData.getOpponentScore());
assertFalse(gameData.isSchneider());
assertFalse(gameData.isSchwarz());
assertFalse(gameData.isOverBidded());
}
@Test
public void testParseGameSummary_IncompleteGrandOuvertAnnouncement() {
final String gameSummary = "(;GM[Skat]PC[Internet Skat Server]SE[1265]ID[727]DT[2007-11-19/23:42:26/UTC]P0[bonsai]P1[mic]P2[Legolaus]R0[0.0]R1[0.0]R2[0.0]MV[w HJ.HA.DJ.HQ.SA.H7.CA.CJ.HT.H8.H9.D7.DT.C7.ST.CK.C9.SK.S9.CT.C8.SQ.HK.S8.D9.DK.SJ.D8.CQ.DA.DQ.S7 1 p 2 p 0 18 0 GO 0 CJ 0 SC 1 RE 1 H9 2 RE ]R[d:0 win v:192 m:1 bidok p:120 t:10 s:1 z:1 p0:0 p1:0 p2:0 l:-1 to:-1] ;)"; //$NON-NLS-1$
final SkatGameData gameData = MessageParser
.parseGameSummary(gameSummary);
}
@Test
public void testParseGameSummary_IncompleteHandSchneiderSchwarzAnnouncement() {
final String gameSummary = "(;GM[Skat]PC[Internet Skat Server]CO[]SE[2511]ID[26496]DT[2008-06-22/11:14:12/UTC]P0[Madmax]P1[kermit1]P2[kermit2]R0[0.0]R1[0.0]R2[0.0]MV[w C7.SA.SJ.CJ.CK.HJ.S7.SK.C9.ST.DQ.C8.DA.SQ.D7.S8.DT.H7.DK.DJ.S9.HA.HT.D9.HK.CT.CA.H8.HQ.H9.CQ.D8 1 18 0 y 1 20 0 y 1 22 0 y 1 23 0 y 1 p 2 24 0 y 2 27 0 y 2 30 0 y 2 33 0 y 2 35 0 y 2 36 0 y 2 40 0 y 2 p 0 CHZ 0 CJ 1 C8 2 CT 0 SJ 1 DJ 2 CA 0 HJ 1 H7 2 H8 0 CK 1 S8 2 D9 0 C9 1 DQ 2 H9 0 C7 1 SQ 2 S9 0 SA 1 D7 2 HQ 0 ST 1 DK 2 HA 0 SK 1 DA 2 HT 0 S7 1 DT 2 HK ]R[d:0 win v:108 m:3 bidok p:120 t:10 s:1 z:1 p0:0 p1:0 p2:0 l:-1 to:-1] ;)"; //$NON-NLS-1$
final SkatGameData gameData = MessageParser
.parseGameSummary(gameSummary);
}
@Test
@Ignore
public void testParseGameSummary_IndexOutOfBoundsException() {
final String gameSummary = "(;GM[Skat]PC[International Skat Server]CO[]SE[26702]ID[596891]DT[2011-02-02/18:10:12/UTC]P0[xskat]P1[Knesebec]P2[bernie]R0[]R1[0.0]R2[]MV[w SJ.D8.D7.DA.HT.CT.DT.CK.DJ.S8.H9.HA.HQ.SK.C8.C7.H8.S7.S9.C9.D9.DQ.CQ.HJ.SQ.SA.CJ.H7.CA.ST.DK.HK 1 18 0 y 1 20 0 p 2 22 1 y 2 23 1 y 2 24 1 y 2 27 1 y 2 30 1 y 2 33 1 y 2 35 1 y 2 36 1 p 2 s w DK.HK 2 D 2 D9.DQ 0 S8 1 S9 2 SA 2 ST 0 DA 1 SK 0 CK 1 C7 2 CQ 0 D7 1 S7 2 DK 2 CA 0 CT 1 C8 2 CJ 0 D8 1 C9 2 SQ 0 DT 1 HA 0 SJ 1 HQ 2 HJ 0 DJ 1 H9 2 HK 0 HT 1 H8 2 H7 ]R[d:2 loss v:-72 m:1 overbid p:41 t:4 s:0 z:0 p0:0 p1:0 p2:0 l:-1 to:-1 r:0] ;)"; //$NON-NLS-1$
final SkatGameData gameData = MessageParser
.parseGameSummary(gameSummary);
}
/**
* Test the parsing of the game summary<br>
* Passed game
*/
@Test
public void testParseGameSummary_PassedGame() {
final String gameSummary = "(;GM[Skat]PC[International Skat Server]CO[]SE[32407]ID[756788]DT[2011-05-28/08:46:19/UTC]P0[xskat]P1[bonsai]P2[bernie]R0[]R1[0.0]R2[]MV[w C8.DQ.DJ.HK.S9.SK.SQ.HQ.CK.D9.S8.DT.SJ.C9.CQ.SA.DK.HT.D7.H7.ST.HJ.C7.H8.S7.DA.CJ.CT.D8.H9.CA.HA 1 p 2 p 0 p ]R[passed] ;)"; //$NON-NLS-1$
final SkatGameData gameData = MessageParser
.parseGameSummary(gameSummary);
assertTrue(gameData.isGamePassed());
assertEquals(0, gameData.getResult().getGameValue());
assertEquals("xskat", gameData.getPlayerName(Player.FOREHAND)); //$NON-NLS-1$
assertEquals("bonsai", gameData.getPlayerName(Player.MIDDLEHAND)); //$NON-NLS-1$
assertEquals("bernie", gameData.getPlayerName(Player.REARHAND)); //$NON-NLS-1$
assertEquals(0, gameData.getMaxPlayerBid(Player.FOREHAND));
assertEquals(0, gameData.getMaxPlayerBid(Player.MIDDLEHAND));
assertEquals(0, gameData.getMaxPlayerBid(Player.REARHAND));
assertThat(gameData.getMaxBidValue(), is(equalTo(0)));
assertEquals(null, gameData.getDeclarer());
assertTrue(gameData.getDealtSkat().contains(Card.CA));
assertTrue(gameData.getDealtSkat().contains(Card.HA));
assertEquals(GameType.PASSED_IN, gameData.getGameType());
assertFalse(gameData.isHand());
assertFalse(gameData.isOuvert());
assertFalse(gameData.isSchneider());
assertFalse(gameData.isSchneiderAnnounced());
assertFalse(gameData.isSchwarz());
assertFalse(gameData.isSchwarzAnnounced());
assertEquals(0, gameData.getTricks().size());
assertFalse(gameData.isGameWon());
assertEquals(0, gameData.getResult().getGameValue());
assertEquals(0, gameData.getDeclarerScore());
assertEquals(0, gameData.getOpponentScore());
assertFalse(gameData.isSchneider());
assertFalse(gameData.isSchwarz());
assertFalse(gameData.isOverBidded());
}
/**
* Test the parsing of the game summary<br>
* Declarer shows cards and plays last card directly afterwards
*/
@Test
public void testParseGameSummary_ShowingCards() {
final String gameSummary = "(;GM[Skat]PC[International Skat Server]CO[]SE[43795]ID[1039093]DT[2012-01-17/00:07:25/UTC]P0[SkatCLE]P1[SkatKCT]P2[xskat]R0[0.0]R1[0.0]R2[]MV[w DA.S7.DK.CA.D9.CQ.CK.H9.S8.C7.HJ.DT.HA.CT.S9.C9.ST.H8.D7.DJ.HQ.DQ.SK.HK.SQ.H7.C8.D8.SJ.HT.SA.CJ 1 18 0 p 2 p 1 s w SA.CJ 1 G.CT.DT 0 CA 1 C9 2 C8 0 CK 1 D7 2 HT 0 CQ 1 DJ 2 SJ 2 H7 0 H9 1 H8 0 S8 1 S9 2 SK 2 D8 0 DA 1 SC 1 HJ 2 RE 0 RE ]R[d:1 win v:48 m:1 bidok p:84 t:5 s:0 z:0 p0:0 p1:0 p2:0 l:-1 to:-1 r:1] ;)"; //$NON-NLS-1$
final SkatGameData gameData = MessageParser
.parseGameSummary(gameSummary);
assertEquals(GameType.GRAND, gameData.getGameType());
}
/**
* Test the parsing of the game summary<br>
* Declarer plays Null Ouvert and the opponents resign
*/
@Test
public void testParseGameSummary_NullOuvertTwoResigns() {
final String gameSummary = "(;GM[Skat]PC[International Skat Server]CO[]SE[60842]ID[1390253]DT[2012-09-26/17:30:29/UTC]P0[kermit]P1[bonsai]P2[zoot]R0[]R1[0.0]R2[]MV[w HK.SK.HJ.CA.SA.C9.S8.H7.ST.HT.C7.HA.CJ.DK.HQ.D7.C8.DA.DT.D9.SQ.DQ.H8.S9.CK.S7.SJ.CT.H9.CQ.DJ.D8 1 18 0 y 1 20 0 y 1 22 0 y 1 23 0 y 1 24 0 y 1 27 0 y 1 30 0 y 1 33 0 y 1 35 0 p 2 p 1 s w DJ.D8 1 NO.HA.HQ 2 RE 0 RE ]R[d:1 win v:46 m:0 bidok p:14 t:0 s:0 z:0 p0:0 p1:0 p2:0 l:-1 to:-1 r:1] ;)";
final SkatGameData gameData = MessageParser
.parseGameSummary(gameSummary);
assertEquals(GameType.NULL, gameData.getGameType());
assertTrue(gameData.isGameWon());
}
/**
* Test the parsing of the game summary<br>
*
*/
@Test
public void testParseGameSummary_PlayerLeft() {
final String gameSummary = "(;GM[Skat]PC[Internet Skat Server]SE[146]ID[30]DT[2007-11-04/15:39:49/UTC]P0[bonsai]P1[bar]P2[foo]R0[0.0]R1[0.0]R2[null]MV[w SJ.D9.CA.DJ.SA.CJ.C8.SQ.HT.H8.ST.S8.DA.D7.S9.D8.C7.H7.DT.S7.CT.HJ.C9.SK.H9.HA.HK.DQ.CK.HQ.DK.CQ 1 18 0 p w LE.2 ]R[d:-1 penalty v:0 m:0 bidok p:0 t:0 s:0 z:0 p0:0 p1:0 p2:1 l:2 to:-1] ;)"; //$NON-NLS-1$
final SkatGameData gameData = MessageParser
.parseGameSummary(gameSummary);
}
/**
* Test the parsing of the game summary<br>
*
*/
@Test
@Ignore
public void testParseGameSummary_CorruptData() {
final String gameSummary = "(;GM[Skat]PC[Internet Skat Server]SE[2171]ID[18358]DT[2008-05-25/17:57:24/UTC]P0[kermit2]P1[kermit1]P2[mic]R0[0.0]R1[null]R2[0.0]MV[w C9.D7.HT.HA.SA.HQ.SJ.S7.C8.HJ.H7.CQ.DQ.D9.H9.S8.H8.CT.HK.SQ.CA.CK.SK.CJ.D8.DT.DK.C7.DJ.S9.ST.DA 1 18 0 p 2 20 1 p 2 s w ST.DA 2 G.DT.ST 0 ?? w LE.1 ]R[d:2 win v:96 m:1 bidok p:120 t:10 s:1 z:1 p0:0 p1:0 p2:0 l:1 to:-1] ;)";
final SkatGameData gameData = MessageParser
.parseGameSummary(gameSummary);
}
/**
* Test the leaving of a player
*/
@Test
public void testParseTableUpdatePlayerLeft() {
final String tableUpdate = "table .4 foo state 3 foo . . . foo . 0 0 0 0 0 0 1 0 xskat $ 2 1 83 157 0 0 1 0 xskat:2 $ 0 0 0 0 0 0 1 0 . . 0 0 0 0 0 0 0 0 false 0"; //$NON-NLS-1$
final StringTokenizer token = new StringTokenizer(tableUpdate);
token.nextToken(); // table
token.nextToken(); // .4
final String creator = token.nextToken(); // foo
token.nextToken(); // state
final List<String> detailParams = new ArrayList<String>();
while (token.hasMoreTokens()) {
detailParams.add(token.nextToken());
}
final TablePanelStatus status = MessageParser.getTableStatus(creator,
detailParams);
assertEquals(3, status.getMaxPlayers());
assertEquals(3, status.getPlayerInformations().size());
final PlayerStatus playerStatus = status.getPlayerInformation("xskat"); //$NON-NLS-1$
assertNotNull(playerStatus);
assertEquals(2, playerStatus.getGamesPlayed());
assertEquals(1, playerStatus.getGamesWon());
assertEquals(83, playerStatus.getLastGameResult());
assertEquals(157, playerStatus.getTotalPoints());
assertTrue(playerStatus.isPlayerLeft());
assertFalse(playerStatus.isReadyToPlay());
assertTrue(playerStatus.isTalkEnabled());
}
/**
* Tests the resigning of a player
*/
@Test
public void testParseTableUpdatePlayerResign() {
final String playerResign = "table .4 foo play 1 RE 124.1 173.9 177.8"; //$NON-NLS-1$
final StringTokenizer token = new StringTokenizer(playerResign);
token.nextToken(); // table
token.nextToken(); // .4
final String creator = token.nextToken(); // foo
token.nextToken(); // play
final List<String> detailParams = new ArrayList<String>();
while (token.hasMoreTokens()) {
detailParams.add(token.nextToken());
}
final MoveInformation moveInfo = MessageParser
.getMoveInformation(detailParams);
assertEquals(MoveType.RESIGN, moveInfo.getType());
}
/**
* Tests showing cards
*/
@Test
public void testParseTableUpdatePlayerShowCards() {
final String playerResign = "table .3 foo play 2 SC.HT.HA.SJ.SQ.SK.CJ 164.1 177.0 156.4"; //$NON-NLS-1$
final StringTokenizer token = new StringTokenizer(playerResign);
token.nextToken(); // table
token.nextToken(); // .3
final String creator = token.nextToken(); // foo
token.nextToken(); // play
final List<String> detailParams = new ArrayList<String>();
while (token.hasMoreTokens()) {
detailParams.add(token.nextToken());
}
final MoveInformation moveInfo = MessageParser
.getMoveInformation(detailParams);
assertEquals(MoveType.SHOW_CARDS, moveInfo.getType());
final CardList ouvertCards = moveInfo.getOuvertCards();
assertEquals(6, ouvertCards.size());
assertTrue(ouvertCards.contains(Card.HT));
assertTrue(ouvertCards.contains(Card.HA));
assertTrue(ouvertCards.contains(Card.SJ));
assertTrue(ouvertCards.contains(Card.SQ));
assertTrue(ouvertCards.contains(Card.SK));
assertTrue(ouvertCards.contains(Card.CJ));
}
/**
* Tests the announcing of an null ouvert game
*/
@Test
public void testParseTableUpdateNullOuvertGame_JSkatUser() {
final String ouvertGame = "table .0 foo play 1 NO.DJ.SA.D8.D9.DQ.H8.HT.HQ.C7.C8.CK.CA 237.6 225.8 237.7"; //$NON-NLS-1$
final StringTokenizer token = new StringTokenizer(ouvertGame);
token.nextToken(); // table
token.nextToken(); // .1
final String creator = token.nextToken(); // foo
token.nextToken(); // play
final List<String> detailParams = new ArrayList<String>();
while (token.hasMoreTokens()) {
detailParams.add(token.nextToken());
}
final MoveInformation moveInfo = MessageParser
.getMoveInformation(detailParams);
assertEquals(MoveType.GAME_ANNOUNCEMENT, moveInfo.getType());
final GameAnnouncement announcement = moveInfo.getGameAnnouncement();
assertEquals(GameType.NULL, announcement.getGameType());
assertTrue(announcement.isOuvert());
final CardList ouvertCards = moveInfo.getOuvertCards();
assertEquals(10, ouvertCards.size());
assertTrue(ouvertCards.contains(Card.D8));
assertTrue(ouvertCards.contains(Card.D9));
assertTrue(ouvertCards.contains(Card.DQ));
assertTrue(ouvertCards.contains(Card.H8));
assertTrue(ouvertCards.contains(Card.HT));
assertTrue(ouvertCards.contains(Card.HQ));
assertTrue(ouvertCards.contains(Card.C7));
assertTrue(ouvertCards.contains(Card.C8));
assertTrue(ouvertCards.contains(Card.CK));
assertTrue(ouvertCards.contains(Card.CA));
}
/**
* Tests the announcing of an null ouvert game
*/
@Test
public void testParseTableUpdateNullOuvertGame_OtherPlayer() {
final String ouvertGame = "table .0 foo play 1 NO.??.??.D8.D9.DQ.H8.HT.HQ.C7.C8.CK.CA 237.6 225.8 237.7"; //$NON-NLS-1$
final StringTokenizer token = new StringTokenizer(ouvertGame);
token.nextToken(); // table
token.nextToken(); // .1
final String creator = token.nextToken(); // foo
token.nextToken(); // play
final List<String> detailParams = new ArrayList<String>();
while (token.hasMoreTokens()) {
detailParams.add(token.nextToken());
}
final MoveInformation moveInfo = MessageParser
.getMoveInformation(detailParams);
assertEquals(MoveType.GAME_ANNOUNCEMENT, moveInfo.getType());
final GameAnnouncement announcement = moveInfo.getGameAnnouncement();
assertEquals(GameType.NULL, announcement.getGameType());
assertTrue(announcement.isOuvert());
final CardList ouvertCards = moveInfo.getOuvertCards();
assertEquals(10, ouvertCards.size());
assertTrue(ouvertCards.contains(Card.D8));
assertTrue(ouvertCards.contains(Card.D9));
assertTrue(ouvertCards.contains(Card.DQ));
assertTrue(ouvertCards.contains(Card.H8));
assertTrue(ouvertCards.contains(Card.HT));
assertTrue(ouvertCards.contains(Card.HQ));
assertTrue(ouvertCards.contains(Card.C7));
assertTrue(ouvertCards.contains(Card.C8));
assertTrue(ouvertCards.contains(Card.CK));
assertTrue(ouvertCards.contains(Card.CA));
}
/**
* Tests the announcing of an null ouvert game
*/
@Test
public void testParseTableUpdateSuitHandOuvertGame_JSkatUser() {
final String ouvertGame = "table .0 foo play 1 SHO.D8.D9.DQ.H8.HT.HQ.C7.C8.CK.CA 237.6 225.8 237.7"; //$NON-NLS-1$
final StringTokenizer token = new StringTokenizer(ouvertGame);
token.nextToken(); // table
token.nextToken(); // .1
final String creator = token.nextToken(); // foo
token.nextToken(); // play
final List<String> detailParams = new ArrayList<String>();
while (token.hasMoreTokens()) {
detailParams.add(token.nextToken());
}
final MoveInformation moveInfo = MessageParser
.getMoveInformation(detailParams);
assertEquals(MoveType.GAME_ANNOUNCEMENT, moveInfo.getType());
final GameAnnouncement announcement = moveInfo.getGameAnnouncement();
assertEquals(GameType.SPADES, announcement.getGameType());
assertTrue(announcement.isHand());
assertTrue(announcement.isOuvert());
final CardList ouvertCards = moveInfo.getOuvertCards();
assertEquals(10, ouvertCards.size());
assertTrue(ouvertCards.contains(Card.D8));
assertTrue(ouvertCards.contains(Card.D9));
assertTrue(ouvertCards.contains(Card.DQ));
assertTrue(ouvertCards.contains(Card.H8));
assertTrue(ouvertCards.contains(Card.HT));
assertTrue(ouvertCards.contains(Card.HQ));
assertTrue(ouvertCards.contains(Card.C7));
assertTrue(ouvertCards.contains(Card.C8));
assertTrue(ouvertCards.contains(Card.CK));
assertTrue(ouvertCards.contains(Card.CA));
}
/**
* Tests the announcing of an null ouvert game
*/
@Test
public void testParseTableUpdateSuitHandOuvertGame_OtherPlayer() {
final String ouvertGame = "table .0 foo play 1 SHO.D8.D9.DQ.H8.HT.HQ.C7.C8.CK.CA 237.6 225.8 237.7"; //$NON-NLS-1$
final StringTokenizer token = new StringTokenizer(ouvertGame);
token.nextToken(); // table
token.nextToken(); // .1
final String creator = token.nextToken(); // foo
token.nextToken(); // play
final List<String> detailParams = new ArrayList<String>();
while (token.hasMoreTokens()) {
detailParams.add(token.nextToken());
}
final MoveInformation moveInfo = MessageParser
.getMoveInformation(detailParams);
assertEquals(MoveType.GAME_ANNOUNCEMENT, moveInfo.getType());
final GameAnnouncement announcement = moveInfo.getGameAnnouncement();
assertEquals(GameType.SPADES, announcement.getGameType());
assertTrue(announcement.isHand());
assertTrue(announcement.isOuvert());
final CardList ouvertCards = moveInfo.getOuvertCards();
assertEquals(10, ouvertCards.size());
assertTrue(ouvertCards.contains(Card.D8));
assertTrue(ouvertCards.contains(Card.D9));
assertTrue(ouvertCards.contains(Card.DQ));
assertTrue(ouvertCards.contains(Card.H8));
assertTrue(ouvertCards.contains(Card.HT));
assertTrue(ouvertCards.contains(Card.HQ));
assertTrue(ouvertCards.contains(Card.C7));
assertTrue(ouvertCards.contains(Card.C8));
assertTrue(ouvertCards.contains(Card.CK));
assertTrue(ouvertCards.contains(Card.CA));
}
/**
* Tests the announcing of an null ouvert game
*/
@Test
public void testParseTableUpdateGrandHandOuvertGame_JSkatUser() {
final String ouvertGame = "table .0 foo play 1 GHO.D8.D9.DQ.H8.HT.HQ.C7.C8.CK.CA 237.6 225.8 237.7"; //$NON-NLS-1$
final StringTokenizer token = new StringTokenizer(ouvertGame);
token.nextToken(); // table
token.nextToken(); // .1
final String creator = token.nextToken(); // foo
token.nextToken(); // play
final List<String> detailParams = new ArrayList<String>();
while (token.hasMoreTokens()) {
detailParams.add(token.nextToken());
}
final MoveInformation moveInfo = MessageParser
.getMoveInformation(detailParams);
assertEquals(MoveType.GAME_ANNOUNCEMENT, moveInfo.getType());
final GameAnnouncement announcement = moveInfo.getGameAnnouncement();
assertEquals(GameType.GRAND, announcement.getGameType());
assertTrue(announcement.isHand());
assertTrue(announcement.isOuvert());
final CardList ouvertCards = moveInfo.getOuvertCards();
assertEquals(10, ouvertCards.size());
assertTrue(ouvertCards.contains(Card.D8));
assertTrue(ouvertCards.contains(Card.D9));
assertTrue(ouvertCards.contains(Card.DQ));
assertTrue(ouvertCards.contains(Card.H8));
assertTrue(ouvertCards.contains(Card.HT));
assertTrue(ouvertCards.contains(Card.HQ));
assertTrue(ouvertCards.contains(Card.C7));
assertTrue(ouvertCards.contains(Card.C8));
assertTrue(ouvertCards.contains(Card.CK));
assertTrue(ouvertCards.contains(Card.CA));
}
/**
* Tests the announcing of an null ouvert game
*/
@Test
public void testParseTableUpdateGrandHandOuvertGame_OtherPlayer() {
final String ouvertGame = "table .0 foo play 1 GHO.D8.D9.DQ.H8.HT.HQ.C7.C8.CK.CA 237.6 225.8 237.7"; //$NON-NLS-1$
final StringTokenizer token = new StringTokenizer(ouvertGame);
token.nextToken(); // table
token.nextToken(); // .1
final String creator = token.nextToken(); // foo
token.nextToken(); // play
final List<String> detailParams = new ArrayList<String>();
while (token.hasMoreTokens()) {
detailParams.add(token.nextToken());
}
final MoveInformation moveInfo = MessageParser
.getMoveInformation(detailParams);
assertEquals(MoveType.GAME_ANNOUNCEMENT, moveInfo.getType());
final GameAnnouncement announcement = moveInfo.getGameAnnouncement();
assertEquals(GameType.GRAND, announcement.getGameType());
assertTrue(announcement.isHand());
assertTrue(announcement.isOuvert());
final CardList ouvertCards = moveInfo.getOuvertCards();
assertEquals(10, ouvertCards.size());
assertTrue(ouvertCards.contains(Card.D8));
assertTrue(ouvertCards.contains(Card.D9));
assertTrue(ouvertCards.contains(Card.DQ));
assertTrue(ouvertCards.contains(Card.H8));
assertTrue(ouvertCards.contains(Card.HT));
assertTrue(ouvertCards.contains(Card.HQ));
assertTrue(ouvertCards.contains(Card.C7));
assertTrue(ouvertCards.contains(Card.C8));
assertTrue(ouvertCards.contains(Card.CK));
assertTrue(ouvertCards.contains(Card.CA));
}
}