axel-0.0.13: test/Axel/Test/MacrosSpec.hs
{- HLINT ignore "Redundant do" -}
module Axel.Test.MacrosSpec where
import Axel.Prelude
import Axel.Macros
import Axel.Parse.AST
import qualified Axel.Sourcemap as SM
import Axel.Utils.Zipper
import Data.Generics.Uniplate.Zipper
import Test.Hspec hiding (focus)
import TestUtils
spec_Macros :: Spec
spec_Macros = do
describe "isStatementFocused" $ do
it "returns if a zipper is focused on a statement's expression" $ do
let z =
zipper $
unsafeParseSingle Nothing "(begin (testStatement1) testStatement2)"
let testFocusers ::
Bool
-> [Zipper SM.Expression SM.Expression -> Zipper SM.Expression SM.Expression]
-> Expectation
testFocusers expected =
mapM_
(\focus ->
assertEqual
("Failure at " <>
toAxel (hole $ focus z) <>
"\n\n\t Context:\thole (focus z)\t\t== " <>
toAxel (hole $ focus z) <>
"\n\t\t\thole <$> up (focus z)\t== " <>
showText (toAxel . hole <$> up (focus z)) <>
"\n\t\t\tfromZipper z\t\t== " <> toAxel (fromZipper z))
expected
(isStatementFocused $ focus z))
testFocusers
True
[unsafeRight . unsafeDown, unsafeRight . unsafeRight . unsafeDown]
testFocusers False [id, unsafeDown, unsafeDown . unsafeRight . unsafeDown]