{-# LANGUAGE OverloadedLists #-} module Interpreter.Function.WithSpec where import Helpers main :: IO () main = hspec spec spec :: Spec spec = do let getCatalog x = case pureCatalog x of Left rr -> fail rr Right (y,_) -> pure y describe "should run as" $ do it "should be callable with an argument" $ getCatalog "with ( 12 ) |$x| { file {'/f': content => $x; } }" >>= getResource (RIdentifier "file" "/f") >>= getAttribute "content" >>= (`shouldBe` "12") it "should be callable with two arguments" $ getCatalog "with ( '/tmp/lal', 12 ) |$f, $x| { file {$f: content => $x; } }" >>= getResource (RIdentifier "file" "/tmp/lal") >>= getAttribute "content" >>= (`shouldBe` "12") it "should separate scopes scope" $ do getCatalog "$x='lol' \n with ( 12 ) |$x| { file {'/f': content => $x; } } \n file {'/g': content => $x; }" >>= getResource (RIdentifier "file" "/f") >>= getAttribute "content" >>= (`shouldBe` "12") getCatalog "$x='lol' \n with ( 12 ) |$x| { file {'/f': content => $x; } } \n file {'/g': content => $x; }" >>= getResource (RIdentifier "file" "/g") >>= getAttribute "content" >>= (`shouldBe` "lol") it "should work in value mode" $ getCatalog "$x= with ('a', 'b' ) |$x, $y| { \"${x} and ${y}\" } \n file {'/g': content => $x; }" >>= getResource (RIdentifier "file" "/g") >>= getAttribute "content" >>= (`shouldBe` "a and b")