about summary refs log tree commit diff
path: root/test/Xanthous/Data/EntityMap/GraphicsSpec.hs
diff options
context:
space:
mode:
Diffstat (limited to 'test/Xanthous/Data/EntityMap/GraphicsSpec.hs')
-rw-r--r--test/Xanthous/Data/EntityMap/GraphicsSpec.hs36
1 files changed, 23 insertions, 13 deletions
diff --git a/test/Xanthous/Data/EntityMap/GraphicsSpec.hs b/test/Xanthous/Data/EntityMap/GraphicsSpec.hs
index 9347a1c1b569..55ae0d79dbb8 100644
--- a/test/Xanthous/Data/EntityMap/GraphicsSpec.hs
+++ b/test/Xanthous/Data/EntityMap/GraphicsSpec.hs
@@ -8,6 +8,7 @@ import Xanthous.Game.State
 import Xanthous.Data
 import Xanthous.Data.EntityMap
 import Xanthous.Data.EntityMap.Graphics
+import Xanthous.Entities.Environment (Wall(..))
 --------------------------------------------------------------------------------
 
 main :: IO ()
@@ -16,19 +17,28 @@ main = defaultMain test
 test :: TestTree
 test = testGroup "Xanthous.Data.EntityMap.Graphics"
   [ testGroup "visiblePositions"
-    [ testCase "non-contiguous bug 1" $
-        let charPos = Position 20 20
-            gormlakPos = Position 17 19
-            em = insertAt gormlakPos TestEntity
-               . insertAt charPos TestEntity
-               $ mempty
-            visPositions = visiblePositions charPos 12 em
-        in (gormlakPos `member` visPositions) @?
-          ( "not ("
-          <> show gormlakPos <> " `member` "
-          <> show visPositions
-          <> ")"
-          )
+    [ testProperty "one step in each cardinal direction is always visible"
+      $ \pos (Cardinal dir) (Positive r) (wallPositions :: Set Position)->
+          let em = review _EntityMap . map (, Wall) . toList $ wallPositions
+              em' = em & atPosition (move dir pos) %~ (Wall <|)
+              poss = visiblePositions pos r em'
+          in counterexample ("visiblePositions: " <> show poss)
+             $ move dir pos `member` poss
+    , testGroup "bugs"
+      [ testCase "non-contiguous bug 1"
+        $ let charPos = Position 20 20
+              gormlakPos = Position 17 19
+              em = insertAt gormlakPos TestEntity
+                   . insertAt charPos TestEntity
+                   $ mempty
+              visPositions = visiblePositions charPos 12 em
+          in (gormlakPos `member` visPositions) @?
+             ( "not ("
+             <> show gormlakPos <> " `member` "
+             <> show visPositions
+             <> ")"
+             )
+      ]
     ]
   ]