/** * 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.util.rule; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; import org.jskat.AbstractJSkatTest; 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.GameType; import org.jskat.util.Player; import org.junit.Before; import org.junit.Test; /** * Tests for NullRule */ public class NullRuleTest extends AbstractJSkatTest { private SkatGameData data; private GameAnnouncementFactory factory; private static SkatRule nullRules = SkatRuleFactory .getSkatRules(GameType.NULL); /** * @see Before */ @Before public void initialize() { data = new SkatGameData(); factory = GameAnnouncement.getFactory(); factory.setGameType(GameType.NULL); data.setDeclarer(Player.FOREHAND); } private void playWinningTricks() { data.addTrick(new Trick(0, Player.FOREHAND)); data.addTrickCard(Card.C7); data.addTrickCard(Card.C8); data.addTrickCard(Card.C9); data.setTrickWinner(0, Player.REARHAND); data.addTrick(new Trick(1, Player.REARHAND)); data.addTrickCard(Card.S8); data.addTrickCard(Card.S7); data.addTrickCard(Card.S9); data.setTrickWinner(1, Player.MIDDLEHAND); } /** * Checks @see NullRule#calcGameWon() */ @Test public void calcGameWon() { data.setAnnouncement(factory.getAnnouncement()); playWinningTricks(); data.calcResult(); assertTrue(data.getResult().isWon()); } /** * Checks @see NullRule#calcGameWon() */ @Test public void calcGameLost() { data.setAnnouncement(factory.getAnnouncement()); playWinningTricks(); playLoosingTrick(); data.calcResult(); assertFalse(data.getResult().isWon()); } /** * Checks @see NullRule#calcGameResult() */ @Test public void calcGameResultGameWon() { factory.setHand(false); data.setAnnouncement(factory.getAnnouncement()); playWinningTricks(); data.calcResult(); assertEquals(23, data.getResult().getGameValue()); } @Test public void calcGameResultGameWonContra() { factory.setHand(false); data.setAnnouncement(factory.getAnnouncement()); data.setContra(true); playWinningTricks(); data.calcResult(); assertThat(data.getResult().getGameValue(), is(46)); } @Test public void calcGameResultGameWonContraRe() { factory.setHand(false); data.setAnnouncement(factory.getAnnouncement()); data.setContra(true); data.setRe(true); playWinningTricks(); data.calcResult(); assertThat(data.getResult().getGameValue(), is(92)); } /** * Checks @see NullRule#calcGameResult() */ @Test public void calcGameResultGameWonHand() { factory.setHand(true); data.setAnnouncement(factory.getAnnouncement()); playWinningTricks(); data.calcResult(); assertEquals(35, data.getResult().getGameValue()); } /** * Checks @see NullRule#calcGameResult() */ @Test public void calcGameResultGameWonOuvert() { factory.setHand(false); factory.setOuvert(Boolean.TRUE); data.setAnnouncement(factory.getAnnouncement()); playWinningTricks(); data.calcResult(); assertEquals(46, data.getResult().getGameValue()); } /** * Checks @see NullRule#calcGameResult() */ @Test public void calcGameResultGameWonHandOuvert() { factory.setHand(true); factory.setOuvert(true); data.setAnnouncement(factory.getAnnouncement()); playWinningTricks(); data.calcResult(); assertEquals(59, data.getResult().getGameValue()); } /** * Checks @see NullRule#calcGameResult() */ @Test public void calcGameResultGameLost() { factory.setHand(false); data.setAnnouncement(factory.getAnnouncement()); playWinningTricks(); playLoosingTrick(); data.calcResult(); assertEquals(-46, data.getResult().getGameValue()); } @Test public void calcGameResultGameLostContra() { factory.setHand(false); data.setAnnouncement(factory.getAnnouncement()); data.setContra(true); playWinningTricks(); playLoosingTrick(); data.calcResult(); assertThat(data.getResult().getGameValue(), is(-92)); } @Test public void calcGameResultGameLostContraRe() { factory.setHand(false); data.setAnnouncement(factory.getAnnouncement()); data.setContra(true); data.setRe(true); playWinningTricks(); playLoosingTrick(); data.calcResult(); assertThat(data.getResult().getGameValue(), is(-184)); } private void playLoosingTrick() { data.addTrick(new Trick(2, Player.MIDDLEHAND)); data.addTrickCard(Card.H7); data.addTrickCard(Card.H8); data.addTrickCard(Card.H9); data.setTrickWinner(2, Player.FOREHAND); data.getGameResult().setWon(nullRules.isGameWon(data)); } /** * Checks @see NullRule#calcGameResult() */ @Test public void calcGameResultGameLostHand() { factory.setHand(true); data.setAnnouncement(factory.getAnnouncement()); playWinningTricks(); playLoosingTrick(); data.calcResult(); assertEquals(-70, nullRules.calcGameResult(data)); } /** * Checks @see NullRule#calcGameResult() */ @Test public void calcGameResultGameLostOuvert() { factory.setHand(false); factory.setOuvert(Boolean.TRUE); data.setAnnouncement(factory.getAnnouncement()); playWinningTricks(); playLoosingTrick(); data.calcResult(); assertEquals(-92, nullRules.calcGameResult(data)); } /** * Checks @see NullRule#calcGameResult() */ @Test public void calcGameResultGameLostHandOuvert() { factory.setHand(true); factory.setOuvert(true); data.setAnnouncement(factory.getAnnouncement()); playWinningTricks(); playLoosingTrick(); data.calcResult(); assertEquals(-118, nullRules.calcGameResult(data)); } /** * Test for overbidding in null games */ @Test public void testOverbid() { data.addPlayerBid(Player.FOREHAND, 24); factory.setHand(false); data.setAnnouncement(factory.getAnnouncement()); playWinningTricks(); data.calcResult(); assertEquals(-46, data.getResult().getGameValue()); } }