package poker.domain

import poker.domain._
import poker.domain.Valor._
import poker.domain.Naipe._
import org.testng.annotations._
import org.junit.Assert._
import poker.PokerHelperTest._
import poker.domain._

class RodadaTest {
  
  @Test
  def noComecoDaRodadaExisteUmBaralhoEJogadoresSemCartas() {
    var rodada = new Rodada(1, List(new Jogador("fulano")))
    assertEquals(1, rodada.jogadoresMaos.size)
    
    assertEquals(52, rodada.baralho.quantidadeDeCartas())
    assertEquals(0, rodada.mesa.length)
    assertEquals(0, rodada.jogadoresMaos.values.toList(0).length)
	  // comecao com cartas embaralhadas e sem cartas distribuidas
  }
  
  @Test
  def distribuiCarta() {
    var rodada = new Rodada(1, List(new Jogador("fulano")))
    rodada.distribuiCartas()
    assertEquals(45, rodada.baralho.quantidadeDeCartas())
    assertEquals(5, rodada.mesa.length)
    assertEquals(2, rodada.jogadoresMaos.values.toList(0).quantidadeDeCartas())
  }
  
  @Test
  def vencedor() {
    var jogador1 = new Jogador("fulano")
    var jogador2 = new Jogador("ciclano")
    var rodada = new Rodada(1, List(jogador1, jogador2))
    def mesa = criaMesa((AS, PAUS), (2, PAUS), (3, PAUS), (4, PAUS), (5, PAUS))
    def mao1 = criaMao((AS, COPAS), (AS, OUROS)) // trinca
    def mao2 = criaMao((7, PAUS), (8, PAUS)) // flush
    mesa.foreach { carta:Carta =>
	    rodada.mesa.push(carta)
    }
    mao1.foreach { carta:Carta =>
	    rodada.jogadoresMaos(jogador1).push(carta)
    }
    mao2.foreach { carta:Carta =>
	    rodada.jogadoresMaos(jogador2).push(carta)
    }
    // TODO dificil de testar! aleatoriedade do teste
    assertEquals(1, rodada.vencedores().length)
    assertEquals(jogador2, rodada.vencedores()(0))
  }
  
  @Test
  def rodadaComEmpate_MaisDeUmVencedor() {
    var jogador1 = new Jogador("fulano")
    var jogador2 = new Jogador("ciclano")
    var rodada = new Rodada(1, List(jogador1, jogador2))
    def mesa = criaMesa((AS, PAUS), (2, PAUS), (3, PAUS), (4, PAUS), (5, PAUS))
    def mao1 = criaMao((AS, COPAS), (K, OUROS)) // dupla
    def mao2 = criaMao((AS, OUROS), (K, PAUS)) // dupla
    mesa.foreach { carta:Carta =>
	    rodada.mesa.push(carta)
    }
    mao1.foreach { carta:Carta =>
	    rodada.jogadoresMaos(jogador1).push(carta)
    }
    mao2.foreach { carta:Carta =>
	    rodada.jogadoresMaos(jogador2).push(carta)
    }
    // TODO dificil de testar! aleatoriedade do teste
    assertEquals(2, rodada.vencedores().length)
    assertEquals(jogador2, rodada.vencedores()(0))
    assertEquals(jogador1, rodada.vencedores()(1))
  }
  
}
