tvl-depot/test/Xanthous/GameSpec.hs
Griffin Smith 9ebdc6fbb4 Convert generated levels to walls
Add support for converting generated levels to walls, and merge one into
the entity map at the beginning of the game.

There's nothing here that guarantees the character ends up *inside* the
level though (they almost always don't) so that'll have to be slotted
into the level generation process.
2019-09-09 20:54:33 -04:00

30 lines
1 KiB
Haskell

module Xanthous.GameSpec where
import Test.Prelude hiding (Down)
import Xanthous.Game
import Control.Lens.Properties
import Xanthous.Data (move, Direction(Down))
import Xanthous.Data.EntityMap (atPosition)
import Xanthous.Entities (SomeEntity(SomeEntity))
main :: IO ()
main = defaultMain test
test :: TestTree
test = testGroup "Xanthous.Game"
[ testGroup "positionedCharacter"
[ testProperty "lens laws" $ isLens positionedCharacter
, testCase "updates the position of the character" $ do
initialGame <- getInitialState
let initialPos = initialGame ^. characterPosition
updatedGame = initialGame & characterPosition %~ move Down
updatedPos = updatedGame ^. characterPosition
updatedPos @?= move Down initialPos
updatedGame ^. entities . atPosition initialPos @?= fromList []
updatedGame ^. entities . atPosition updatedPos
@?= fromList [SomeEntity $ initialGame ^. character]
]
, testGroup "characterPosition"
[ testProperty "lens laws" $ isLens characterPosition
]
]