Skip to content
Snippets Groups Projects
DeckTest.kt 5.5 KiB
Newer Older
reblochor's avatar
reblochor committed
package model

import org.assertj.core.api.Assertions.assertThat
import org.junit.jupiter.api.Test

internal class DeckTest {

    @Test
    fun addBelow() {
        val deck = Deck()
        val card1: Card = HeartCard(false, 2)
        deck.addBelow(card1)
        assertThat(deck.cards).hasSize(1).contains(card1)

        val card2 = DiamondCard(false, 2)
        deck.addBelow(card2)
        assertThat(deck.cards).hasSize(2).first().isEqualTo(card2)
        assertThat(deck.top).isNotNull.isEqualTo(card1)
    }

    @Test
    fun draw() {
        val deck = Deck()
        val card = deck.draw()
        assertThat(card).isNull()
        assertThat(deck.cards).isEmpty()

        val card2 = SpadeCard(true, "2")
        deck += card2
        assertThat(deck.draw()).isNotNull.isEqualTo(card2)
        assertThat(deck.cards).hasSize(0)

        deck += card2
        val card3 = ClubCard(true, 2)
        deck.addBelow(card3)
        assertThat(deck.draw()).isNotNull.isEqualTo(card2)
        assertThat(deck.cards).hasSize(1).contains(card3)
    }

    @Test
    fun testDrawPile() {
        val deck = Deck()

        val card2 = SpadeCard(false, "K")
        deck += card2

        val card3 = HeartCard(true, "Q")
        deck += card3
        val drawn = deck.draw()
        assertThat(drawn).isNotNull.isEqualTo(card3)
        assertThat(deck.top).isNotNull.isEqualTo(card2)
    }

    @Test
    fun plusAssign() {
        val deck = Deck()
        val card1: Card = HeartCard(false, 2)
        deck += card1
        assertThat(deck.cards).hasSize(1).contains(card1)

        val card2 = DiamondCard(false, 2)
        deck += card2
        assertThat(deck.cards).hasSize(2).first().isEqualTo(card1)
        assertThat(deck.top).isNotNull.isEqualTo(card2)
    }

    @Test
    fun flipDeck() {
        val deck = Deck(mutableListOf(HeartCard(true, 5), HeartCard(true, 6)))
        deck.flipDeck()
        assertThat(deck.cards).isEqualTo(mutableListOf(HeartCard(false, 6), HeartCard(false, 5)))
    }

    @Test
    fun testPlusAssign() {
        val deck = Deck()
        val card1: Card = HeartCard(false, 2)
        deck += mutableListOf(card1)
        assertThat(deck.cards).hasSize(1).contains(card1)

        val card2 = DiamondCard(false, 2)
        deck += mutableListOf(card2)
        assertThat(deck.cards).hasSize(2).first().isEqualTo(card1)
        assertThat(deck.top).isNotNull.isEqualTo(card2)
    }

    @Test
    fun plus() {
        val deck = Deck()
        val card1: Card = HeartCard(false, 2)
        val deck1 = deck + mutableListOf(card1)
        assertThat(deck1?.cards).isNotNull.hasSize(1).contains(card1)

        val card2 = DiamondCard(false, 2)
        var deck2 = deck1!! + mutableListOf(card2)
        assertThat(deck2?.cards).isNotNull.hasSize(2).first().isEqualTo(card1)
        assertThat(deck2!!.top).isNotNull.isEqualTo(card2)

        deck2 = deck2 + mutableListOf()
        assertThat(deck2?.cards).isNotNull.hasSize(2).first().isEqualTo(card1)
        assertThat(deck2!!.top).isNotNull.isEqualTo(card2)
    }

    @Test
    fun testPlus() {
        val deck = Deck()
        val card1: Card = HeartCard(false, 2)
        val deck1 = deck + card1
        assertThat(deck1?.cards).isNotNull.hasSize(1).contains(card1)

        val card2 = DiamondCard(false, 2)
        val deck2 = deck1!! + card2
        assertThat(deck2?.cards).isNotNull.hasSize(2).first().isEqualTo(card1)
        assertThat(deck2!!.top).isNotNull.isEqualTo(card2)
    }

    @Test
    fun testPlusKO() {
        val deck = GamePile(mutableListOf(HeartCard(false, 2)))

        val card2 = DiamondCard(false, 2)
        val deck2 = deck + card2
        assertThat(deck2).isNull()
    }

    @Test
    fun plusKO() {
        val card1: Card = HeartCard(false, 2)
        val deck = GamePile(mutableListOf(card1))

        val card2 = DiamondCard(false, 2)
        val deck2 = deck + mutableListOf(card2)
        assertThat(deck2).isNull()

        val deck3 = deck + mutableListOf()
        assertThat(deck3?.cards).isNotNull.hasSize(1).contains(card1)
    }

    @Test
    fun remove() {
        val deck = Deck()
        var cards = deck.remove(1)
        assertThat(cards).isEmpty()

        deck += HeartCard(true, "A")
        cards = deck.remove(2)
        assertThat(cards).hasSize(1)
        assertThat(deck.cards).hasSize(0)

    }

    @Test
    fun testCheckCardStore() {
reblochor's avatar
reblochor committed
        val deck = StoreDeck<Card>()
reblochor's avatar
reblochor committed

        assertThat(deck.checkCardCanGoOnPile(DiamondCard(false, 2))).isFalse
        assertThat(deck.checkCardCanGoOnPile(ClubCard(false, 2))).isFalse
        assertThat(deck.checkCardCanGoOnPile(SpadeCard(false, 2))).isFalse
        assertThat(deck.checkCardCanGoOnPile(SpadeCard(false, "A"))).isTrue
        deck += SpadeCard(false, "A")
        assertThat(deck.checkCardCanGoOnPile(DiamondCard(false, 2))).isFalse
        assertThat(deck.checkCardCanGoOnPile(SpadeCard(false, 2))).isTrue

    }

    @Test
    fun testCheckCardPile() {
        val deck = GamePile(mutableListOf(HeartCard(false, 2)))

reblochor's avatar
reblochor committed
        assertThat(deck.pileCompatibilityCheck(DiamondCard(false, 2))).isFalse
        assertThat(deck.pileCompatibilityCheck(ClubCard(false, 2))).isFalse
        assertThat(deck.pileCompatibilityCheck(SpadeCard(false, 2))).isFalse
        assertThat(deck.pileCompatibilityCheck(SpadeCard(false, "A"))).isTrue
        assertThat(deck.pileCompatibilityCheck(SpadeCard(false, "3"))).isFalse
reblochor's avatar
reblochor committed

        deck.cards.clear()
reblochor's avatar
reblochor committed
        assertThat(deck.pileCompatibilityCheck(DiamondCard(false, 2))).isFalse
        assertThat(deck.pileCompatibilityCheck(DiamondCard(false, "K"))).isTrue
reblochor's avatar
reblochor committed
    }
}