about summary refs log tree commit diff
path: root/test/Xanthous/GameSpec.hs
blob: 9319399ac25fbdde7977868bc75f8e2c1e93ca10 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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

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
    ]
  ]