/** * 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.event; import static org.hamcrest.CoreMatchers.hasItems; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertThat; import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; import java.util.List; import org.jskat.AbstractJSkatTest; import org.jskat.control.event.skatgame.TrickCardPlayedEvent; import org.jskat.data.GameAnnouncement; import org.jskat.data.GameAnnouncement.GameAnnouncementFactory; import org.jskat.data.SkatGameData; import org.jskat.data.Trick; import org.jskat.util.Card; import org.jskat.util.CardList; import org.jskat.util.GameType; import org.jskat.util.Player; import org.junit.Before; import org.junit.Test; public class TrickCardPlayedEventTest extends AbstractJSkatTest { private SkatGameData data; private List<TrickCardPlayedEvent> eventList; @Before public void setUp() { data = new SkatGameData(); GameAnnouncementFactory factory = GameAnnouncement.getFactory(); factory.setGameType(GameType.CLUBS); data.setAnnouncement(factory.getAnnouncement()); data.addPlayerCard(Player.FOREHAND, Card.CJ); data.addPlayerCard(Player.FOREHAND, Card.CA); data.addPlayerCard(Player.FOREHAND, Card.C7); data.addPlayerCard(Player.MIDDLEHAND, Card.SJ); data.addPlayerCard(Player.MIDDLEHAND, Card.SA); data.addPlayerCard(Player.MIDDLEHAND, Card.C8); data.addPlayerCard(Player.REARHAND, Card.HJ); data.addPlayerCard(Player.REARHAND, Card.HA); data.addPlayerCard(Player.REARHAND, Card.C9); eventList = new ArrayList<>(); eventList.add(new TrickCardPlayedEvent(Player.FOREHAND, Card.CJ)); eventList.add(new TrickCardPlayedEvent(Player.MIDDLEHAND, Card.SJ)); eventList.add(new TrickCardPlayedEvent(Player.REARHAND, Card.HJ)); eventList.add(new TrickCardPlayedEvent(Player.FOREHAND, Card.C7)); eventList.add(new TrickCardPlayedEvent(Player.MIDDLEHAND, Card.C8)); eventList.add(new TrickCardPlayedEvent(Player.REARHAND, Card.C9)); eventList.add(new TrickCardPlayedEvent(Player.REARHAND, Card.HA)); eventList.add(new TrickCardPlayedEvent(Player.FOREHAND, Card.CA)); eventList.add(new TrickCardPlayedEvent(Player.MIDDLEHAND, Card.SA)); } @Test public void skatGameDataAfterEvent() { Iterator<TrickCardPlayedEvent> events = eventList.iterator(); assertHand(data.getPlayerCards(Player.FOREHAND), Card.CJ, Card.CA, Card.C7); assertHand(data.getPlayerCards(Player.MIDDLEHAND), Card.SJ, Card.SA, Card.C8); assertHand(data.getPlayerCards(Player.REARHAND), Card.HJ, Card.HA, Card.C9); assertNull(data.getCurrentTrick()); events.next().processForward(data); assertHand(data.getPlayerCards(Player.FOREHAND), Card.CA, Card.C7); assertHand(data.getPlayerCards(Player.MIDDLEHAND), Card.SJ, Card.SA, Card.C8); assertHand(data.getPlayerCards(Player.REARHAND), Card.HJ, Card.HA, Card.C9); assertTrick(data.getCurrentTrick(), Card.CJ, null, null, null); events.next().processForward(data); assertHand(data.getPlayerCards(Player.FOREHAND), Card.CA, Card.C7); assertHand(data.getPlayerCards(Player.MIDDLEHAND), Card.SA, Card.C8); assertHand(data.getPlayerCards(Player.REARHAND), Card.HJ, Card.HA, Card.C9); assertTrick(data.getCurrentTrick(), Card.CJ, Card.SJ, null, null); events.next().processForward(data); assertHand(data.getPlayerCards(Player.FOREHAND), Card.CA, Card.C7); assertHand(data.getPlayerCards(Player.MIDDLEHAND), Card.SA, Card.C8); assertHand(data.getPlayerCards(Player.REARHAND), Card.HA, Card.C9); assertTrick(data.getLastCompletedTrick(), Card.CJ, Card.SJ, Card.HJ, Player.FOREHAND); assertEmptyTrick(data.getCurrentTrick()); events.next().processForward(data); assertHand(data.getPlayerCards(Player.FOREHAND), Card.CA); assertHand(data.getPlayerCards(Player.MIDDLEHAND), Card.SA, Card.C8); assertHand(data.getPlayerCards(Player.REARHAND), Card.HA, Card.C9); assertTrick(data.getCurrentTrick(), Card.C7, null, null, null); events.next().processForward(data); assertHand(data.getPlayerCards(Player.FOREHAND), Card.CA); assertHand(data.getPlayerCards(Player.MIDDLEHAND), Card.SA); assertHand(data.getPlayerCards(Player.REARHAND), Card.HA, Card.C9); assertTrick(data.getCurrentTrick(), Card.C7, Card.C8, null, null); events.next().processForward(data); assertHand(data.getPlayerCards(Player.FOREHAND), Card.CA); assertHand(data.getPlayerCards(Player.MIDDLEHAND), Card.SA); assertHand(data.getPlayerCards(Player.REARHAND), Card.HA); assertTrick(data.getLastCompletedTrick(), Card.C7, Card.C8, Card.C9, Player.REARHAND); assertEmptyTrick(data.getCurrentTrick()); events.next().processForward(data); assertHand(data.getPlayerCards(Player.FOREHAND), Card.CA); assertHand(data.getPlayerCards(Player.MIDDLEHAND), Card.SA); assertHand(data.getPlayerCards(Player.REARHAND)); assertTrick(data.getCurrentTrick(), Card.HA, null, null, null); events.next().processForward(data); assertHand(data.getPlayerCards(Player.FOREHAND)); assertHand(data.getPlayerCards(Player.MIDDLEHAND), Card.SA); assertHand(data.getPlayerCards(Player.REARHAND)); assertTrick(data.getCurrentTrick(), Card.HA, Card.CA, null, null); events.next().processForward(data); assertHand(data.getPlayerCards(Player.FOREHAND)); assertHand(data.getPlayerCards(Player.MIDDLEHAND)); assertHand(data.getPlayerCards(Player.REARHAND)); assertTrick(data.getLastCompletedTrick(), Card.HA, Card.CA, Card.SA, Player.FOREHAND); assertEmptyTrick(data.getCurrentTrick()); } private void assertEmptyTrick(Trick trick) { assertNull(trick.getFirstCard()); assertNull(trick.getSecondCard()); assertNull(trick.getThirdCard()); assertNull(trick.getTrickWinner()); } private void assertHand(CardList hand, Card... cards) { assertThat(hand.size(), is(cards.length)); assertThat(hand, hasItems(cards)); } @Test public void skatGameDataBeforeEvent() { for (TrickCardPlayedEvent event : eventList) { event.processForward(data); } List<TrickCardPlayedEvent> reverseEventList = new ArrayList<TrickCardPlayedEvent>( eventList); Collections.reverse(reverseEventList); Iterator<TrickCardPlayedEvent> events = reverseEventList.iterator(); assertHand(data.getPlayerCards(Player.FOREHAND)); assertHand(data.getPlayerCards(Player.MIDDLEHAND)); assertHand(data.getPlayerCards(Player.REARHAND)); assertEmptyTrick(data.getCurrentTrick()); assertTrick(data.getLastCompletedTrick(), Card.HA, Card.CA, Card.SA, Player.FOREHAND); events.next().processBackward(data); assertHand(data.getPlayerCards(Player.FOREHAND)); assertHand(data.getPlayerCards(Player.MIDDLEHAND), Card.SA); assertHand(data.getPlayerCards(Player.REARHAND)); assertTrick(data.getCurrentTrick(), Card.HA, Card.CA, null, null); events.next().processBackward(data); assertHand(data.getPlayerCards(Player.FOREHAND), Card.CA); assertHand(data.getPlayerCards(Player.MIDDLEHAND), Card.SA); assertHand(data.getPlayerCards(Player.REARHAND)); assertTrick(data.getCurrentTrick(), Card.HA, null, null, null); events.next().processBackward(data); assertHand(data.getPlayerCards(Player.FOREHAND), Card.CA); assertHand(data.getPlayerCards(Player.MIDDLEHAND), Card.SA); assertHand(data.getPlayerCards(Player.REARHAND), Card.HA); assertEmptyTrick(data.getCurrentTrick()); assertTrick(data.getLastCompletedTrick(), Card.C7, Card.C8, Card.C9, Player.REARHAND); } private void assertTrick(Trick trick, Card firstCard, Card secondCard, Card thirdCard, Player trickWinner) { assertThat(trick.getFirstCard(), is(firstCard)); assertThat(trick.getSecondCard(), is(secondCard)); assertThat(trick.getThirdCard(), is(thirdCard)); assertThat(trick.getTrickWinner(), is(trickWinner)); } }