packages feed

wordify-0.7.0.0: test/Tests/Internationalisation/Spanish/MoveTest.hs

module Tests.Internationalisation.Spanish.MoveTest (playSpanishMoveTest) where

    import Wordify.Rules.LetterBag
    import Wordify.Rules.WordifyError (WordifyError)
    import Wordify.Rules.Dictionary (Dictionary, makeDictionary)
    import qualified System.FilePath as F
    import Wordify.Rules.Game (Game, makeGame)
    import Test.HUnit (Assertion)
    import qualified Data.Map as M
    import Wordify.Rules.Move (GameTransition(..), makeMove, Move (PlaceTiles))
    import Test.HUnit.Base (assertFailure)
    import Wordify.Rules.Tile (Tile(Letter, Blank))
    import Wordify.Rules.Pos (starPos, rightPositions)
    import Wordify.Rules.Player(makePlayer)
    
    testSpanishDictionary :: IO (Either WordifyError Dictionary)
    testSpanishDictionary = makeDictionary $ "Config" ++ [F.pathSeparator] ++ "spanishSet" ++ [F.pathSeparator] ++ "dictionary.txt"

    testSpanishLetterBag :: IO LetterBag
    testSpanishLetterBag = bagFromTiles tiles
        where
            tiles = [Letter "O" 1,Letter "Ñ" 8,Letter "S" 1, Letter "A" 1, Letter "W" 8,Letter "J" 6,Letter "L" 1,Letter "D" 2,Letter "S" 1,Letter "L" 1,
                Letter "F" 4,Letter "U" 1,Letter "R" 1,Letter "L" 1,Letter "C" 2,Letter "I" 1,Letter "T" 1,
                Letter "B" 3,Letter "K" 8,Blank Nothing,Letter "Z" 10,Letter "C" 2,Letter "E" 1,Letter "V" 4,Letter "I" 1,
                Letter "U" 1,Letter "G" 2,Letter "A" 1,Letter "I" 1,Letter "M" 3,Letter "O" 1,Letter "H" 4,
                Letter "O" 1,Letter "M" 3,Letter "L" 1,Letter "Q" 8,Letter "S" 1,Letter "M" 3,Blank Nothing,Letter "T" 1,
                Letter "S" 1,Letter "X" 8,Letter "R" 1,Letter "E" 1,Letter "B" 3,Letter "E" 1,Letter "V" 4,Letter "O" 1,
                Letter "U" 1,Letter "R" 1,Letter "A" 1,Letter "A" 1,Letter "G" 2,Letter "R" 1,Letter "C" 2,Letter "E" 1,Letter "A" 1,
                Letter "A" 1,Letter "S" 1,Letter "B" 3,Letter "P" 3,Letter "O" 1,Letter "N" 1,Letter "I" 1,Letter "E" 1,Letter "A" 1,
                Letter "E" 1,Letter "Y" 4,Letter "A" 1,Letter "I" 1,Letter "O" 1,Letter "J" 6,
                Letter "A" 1,Letter "I" 1,Letter "E" 1,Letter "D" 2,Letter "LL" 8,Letter "C" 2,Letter "F" 4,Letter "O" 1,
                Letter "E" 1,Letter "N" 1,Letter "T" 1,Letter "D" 2,Letter "E" 1,Letter "E" 1,Letter "U" 1,Letter "T" 1,
                Letter "E" 1,Letter "U" 1,Letter "P" 3,Letter "N" 1,Letter "S" 1,Letter "O" 1,Letter "S" 1,Letter "N" 1,
                Letter "U" 1,Letter "RR" 8,Letter "A" 1,Letter "D" 2,Letter "N" 1,Letter "H" 4,Letter "A" 1]

    testGame :: IO (Either WordifyError Game)
    testGame = do
        letterBag <- testSpanishLetterBag
        dictionaryResult <- testSpanishDictionary

        case dictionaryResult of
            Left err -> return $ Left err
            Right dict -> pure $ setupGame letterBag dict

        where
            setupGame :: LetterBag -> Dictionary -> Either WordifyError Game
            setupGame bag dict = makeGame (player1, player2, Nothing) bag dict
                where
                    player1 = makePlayer "player 1"
                    player2 = makePlayer "player 2"

    playSpanishMoveTest :: Assertion
    playSpanishMoveTest = do
        gameResult <- testGame
        case gameResult of
            Left err -> assertFailure $ "Failed to set up game: " ++ show err
            Right game -> do
                let positions = rightPositions starPos 4
                let tiles = [Letter "A" 1, Letter "Ñ" 8, Letter "O" 1, Letter "S" 1]
                let moveMap = M.fromList $ zip positions tiles
                let move = PlaceTiles moveMap
                let result = makeMove game move

                case result of
                    Left err -> assertFailure $ "Failed to make move: " ++ show err
                    Right (MoveTransition _ _ _) -> return ()
                    Right _ -> assertFailure "Unexpected result type"