60 lines
1.9 KiB
Haskell
60 lines
1.9 KiB
Haskell
|
module Terminal.Game.PlaneSpec where
|
||
|
|
||
|
import Test.Hspec
|
||
|
import Terminal.Game.Plane
|
||
|
import Terminal.Game.Draw
|
||
|
|
||
|
import qualified Control.Exception as E
|
||
|
|
||
|
|
||
|
spec :: Spec
|
||
|
spec = do
|
||
|
|
||
|
let testPlane = blankPlane 2 2 &
|
||
|
(1,1) % box 2 2 '.' &
|
||
|
(1,2) % cell ' '
|
||
|
|
||
|
describe "listPlane" $ do
|
||
|
it "creates a plane from string" $
|
||
|
listPlane (2,2) (map creaCell ". ..") `shouldBe` testPlane
|
||
|
it "ignores extra characters" $
|
||
|
listPlane (2,2) (map creaCell ". ..abc") `shouldBe` testPlane
|
||
|
|
||
|
describe "pastePlane" $ do
|
||
|
it "pastes a simple plane onto another" $
|
||
|
pastePlane (cell 'a') (cell 'b') (1,1) `shouldBe` cell 'a'
|
||
|
|
||
|
describe "stringPlane" $ do
|
||
|
it "creates plane from spec" $
|
||
|
stringPlane ".\n.." `shouldBe` testPlane
|
||
|
|
||
|
describe "stringPlaneTrans" $ do
|
||
|
it "allows transparency" $
|
||
|
stringPlaneTrans '.' ".\n.." `shouldBe` makeTransparent '.' testPlane
|
||
|
|
||
|
describe "updatePlane" $ do
|
||
|
let ma = listPlane (2,1) (map creaCell "ab")
|
||
|
mb = listPlane (2,1) (map creaCell "xb")
|
||
|
it "updates a Plane" $
|
||
|
updatePlane ma [((1,1), creaCell 'x')] `shouldBe` mb
|
||
|
|
||
|
describe "subPlane" $ do
|
||
|
let pa = word "prova" === word "fol"
|
||
|
it "cuts out a plane" $
|
||
|
planePaper (subPlane pa (1, 1) (2, 1)) `shouldBe` "p\nf\n"
|
||
|
it "does not crash on OOB" $
|
||
|
planeSize (subPlane pa (1, 1) (10, 10)) `shouldBe` (5, 2)
|
||
|
it "errs on emptycell" $
|
||
|
E.evaluate (subPlane pa (2, 3) (1, 1)) `shouldThrow`
|
||
|
errorCall "subPlane: top-left point (2,3) > bottom-right point (1,1)."
|
||
|
it "but not on a single cell" $
|
||
|
subPlane pa (2, 3) (2, 3) `shouldBe` cell 'l'
|
||
|
|
||
|
describe "hcat/vcat" $ do
|
||
|
let pa = blankPlane 2 1
|
||
|
pb = blankPlane 3 4
|
||
|
it "concats planes horizontally with hcat" $
|
||
|
planeSize (hcat [pa, pb]) `shouldBe` (5, 4)
|
||
|
it "concats planes horizontally with vcat" $
|
||
|
planeSize (vcat [pa, pb]) `shouldBe` (3, 5)
|