2019-08-31 19:17:27 +02:00
|
|
|
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)
|
2019-09-10 02:54:33 +02:00
|
|
|
import Xanthous.Entities (SomeEntity(SomeEntity))
|
2019-08-31 19:17:27 +02:00
|
|
|
|
|
|
|
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
|
2019-09-02 16:36:15 +02:00
|
|
|
initialGame <- getInitialState
|
|
|
|
let initialPos = initialGame ^. characterPosition
|
2019-08-31 19:17:27 +02:00
|
|
|
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
|
|
|
|
]
|
2019-09-20 18:03:30 +02:00
|
|
|
, testGroup "character"
|
|
|
|
[ testProperty "lens laws" $ isLens character
|
|
|
|
]
|
2019-10-05 22:18:11 +02:00
|
|
|
, localOption (QuickCheckTests 10)
|
|
|
|
$ testGroup "MessageHistory"
|
|
|
|
[ testGroup "MonoComonad laws"
|
|
|
|
[ testProperty "oextend oextract ≡ id"
|
|
|
|
$ \(mh :: MessageHistory) -> oextend oextract mh === mh
|
|
|
|
, testProperty "oextract ∘ oextend f ≡ f"
|
|
|
|
$ \(mh :: MessageHistory) f -> (oextract . oextend f) mh === f mh
|
|
|
|
, testProperty "oextend f ∘ oextend g ≡ oextend (f . oextend g)"
|
|
|
|
$ \(mh :: MessageHistory) f g ->
|
|
|
|
(oextend f . oextend g) mh === oextend (f . oextend g) mh
|
|
|
|
]
|
|
|
|
]
|
2019-08-31 19:17:27 +02:00
|
|
|
]
|