werewolf-0.5.2.0: test/src/Game/Werewolf/Test/Game.hs
{-|
Module : Game.Werewolf.Test.Game
Copyright : (c) Henry J. Wylde, 2016
License : BSD3
Maintainer : public@hjwylde.com
-}
module Game.Werewolf.Test.Game (
-- * Tests
allGameTests,
) where
import Control.Lens
import Game.Werewolf
import Game.Werewolf.Test.Arbitrary ()
import Prelude hiding (round)
import Test.Tasty
import Test.Tasty.QuickCheck
allGameTests :: [TestTree]
allGameTests =
[ testProperty "new game starts at village's turn when angel in play" prop_newGameStartsAtVillagesTurnWhenAngelInPlay
, testProperty "new game starts at sunset when no angel in play" prop_newGameStartsAtSunsetWhenNoAngelInPlay
, testProperty "new game starts on first round" prop_newGameStartsOnFirstRound
, testProperty "new game uses given players" prop_newGameUsesGivenPlayers
, testProperty "new game starts with events empty" prop_newGameStartsWithEventsEmpty
, testProperty "new game starts with boots empty" prop_newGameStartsWithBootsEmpty
, testProperty "new game starts with allegiance chosen false" prop_newGameStartsWithAllegianceChosenFalse
, testProperty "new game starts with allowed voters full" prop_newGameStartsWithAllowedVotersFull
, testProperty "new game starts with heal false" prop_newGameStartsWithHealFalse
, testProperty "new game starts with heal used false" prop_newGameStartsWithHealUsedFalse
, testProperty "new game starts with hunter retaliated false" prop_newGameStartsWithHunterRetaliatedFalse
, testProperty "new game starts with jester revealed false" prop_newGameStartsWithJesterRevealedFalse
, testProperty "new game starts with passed false" prop_newGameStartsWithPassedFalse
, testProperty "new game starts with no poison" prop_newGameStartsWithNoPoison
, testProperty "new game starts with poison used false" prop_newGameStartsWithPoisonUsedFalse
, testProperty "new game starts with no prior protect" prop_newGameStartsWithNoPriorProtect
, testProperty "new game starts with no protect" prop_newGameStartsWithNoProtect
, testProperty "new game starts with no role model" prop_newGameStartsWithNoRoleModel
, testProperty "new game starts with scapegoat blamed false" prop_newGameStartsWithScapegoatBlamedFalse
, testProperty "new game starts with no see" prop_newGameStartsWithNoSee
, testProperty "new game starts with votes empty" prop_newGameStartsWithVotesEmpty
]
prop_newGameStartsAtVillagesTurnWhenAngelInPlay :: [Player] -> Property
prop_newGameStartsAtVillagesTurnWhenAngelInPlay players =
has angels players
==> has (stage . _VillagesTurn) (newGame players)
prop_newGameStartsAtSunsetWhenNoAngelInPlay :: [Player] -> Property
prop_newGameStartsAtSunsetWhenNoAngelInPlay players =
hasn't angels players
==> has (stage . _Sunset) (newGame players)
prop_newGameStartsOnFirstRound :: [Player] -> Bool
prop_newGameStartsOnFirstRound players = isFirstRound $ newGame players
prop_newGameUsesGivenPlayers :: [Player] -> Bool
prop_newGameUsesGivenPlayers players' = newGame players' ^. players == players'
prop_newGameStartsWithEventsEmpty :: [Player] -> Bool
prop_newGameStartsWithEventsEmpty players = has (events . _Empty) (newGame players)
prop_newGameStartsWithBootsEmpty :: [Player] -> Bool
prop_newGameStartsWithBootsEmpty players = has (boots . _Empty) (newGame players)
prop_newGameStartsWithAllegianceChosenFalse :: [Player] -> Bool
prop_newGameStartsWithAllegianceChosenFalse players = not $ newGame players ^. allegianceChosen
prop_newGameStartsWithAllowedVotersFull :: [Player] -> Property
prop_newGameStartsWithAllowedVotersFull players = newGame players ^. allowedVoters === players ^.. names
prop_newGameStartsWithHealFalse :: [Player] -> Bool
prop_newGameStartsWithHealFalse players = not $ newGame players ^. heal
prop_newGameStartsWithHealUsedFalse :: [Player] -> Bool
prop_newGameStartsWithHealUsedFalse players = not $ newGame players ^. healUsed
prop_newGameStartsWithHunterRetaliatedFalse :: [Player] -> Bool
prop_newGameStartsWithHunterRetaliatedFalse players = not $ newGame players ^. hunterRetaliated
prop_newGameStartsWithJesterRevealedFalse :: [Player] -> Bool
prop_newGameStartsWithJesterRevealedFalse players = not $ newGame players ^. jesterRevealed
prop_newGameStartsWithPassedFalse :: [Player] -> Bool
prop_newGameStartsWithPassedFalse players = not $ newGame players ^. passed
prop_newGameStartsWithNoPoison :: [Player] -> Bool
prop_newGameStartsWithNoPoison players = has (poison . _Nothing) (newGame players)
prop_newGameStartsWithPoisonUsedFalse :: [Player] -> Bool
prop_newGameStartsWithPoisonUsedFalse players = not $ newGame players ^. poisonUsed
prop_newGameStartsWithNoPriorProtect :: [Player] -> Bool
prop_newGameStartsWithNoPriorProtect players = has (priorProtect . _Nothing) (newGame players)
prop_newGameStartsWithNoProtect :: [Player] -> Bool
prop_newGameStartsWithNoProtect players = has (protect . _Nothing) (newGame players)
prop_newGameStartsWithNoRoleModel :: [Player] -> Bool
prop_newGameStartsWithNoRoleModel players = has (roleModel . _Nothing) (newGame players)
prop_newGameStartsWithScapegoatBlamedFalse :: [Player] -> Bool
prop_newGameStartsWithScapegoatBlamedFalse players = not $ newGame players ^. scapegoatBlamed
prop_newGameStartsWithNoSee :: [Player] -> Bool
prop_newGameStartsWithNoSee players = has (see . _Nothing) (newGame players)
prop_newGameStartsWithVotesEmpty :: [Player] -> Bool
prop_newGameStartsWithVotesEmpty players = has (votes . _Empty) (newGame players)