command-qq-0.1.0.0: tests/EmbeddingSpec.hs
{-# LANGUAGE ExtendedDefaultRules #-}
{-# LANGUAGE QuasiQuotes #-}
{-# OPTIONS_GHC -fno-warn-unused-binds #-}
module EmbeddingSpec where
import System.Command.QQ
import Test.Hspec
spec :: Spec
spec = do
describe "variable embeddings" $ do
it "can embed integers" $
let foo = 7 in [sh|echo #{foo}|] `shouldReturn` "7\n"
it "can embed doubles" $
let foo = 7.0 in [sh|echo #{foo}|] `shouldReturn` "7.0\n"
it "can embed characters" $
let foo = 'z' in [sh|echo #{foo}|] `shouldReturn` "z\n"
it "can embed strings" $
let foo = "hello" in [sh|echo #{foo}|] `shouldReturn` "hello\n"
describe "multi-line embeddings" $ do
it "supports multiline commands" $
[sh|
echo hello
echo world
echo !!!
|] `shouldReturn` "hello\nworld\n!!!\n"
it "supports embeddings in multiline commands" $
let foo = 4
bar = 7
in [sh|
echo #{foo}
echo #{bar}
|] `shouldReturn` "4\n7\n"
describe "escapings" $ do
it "is possible to write #{} in scripts still (as a comment)" $ do
[sh|echo #\{foo}|] `shouldReturn` "\n"
[sh|echo #\\{foo}|] `shouldReturn` "\n"
it "is possible to write #{} in scripts still (as a string)" $ do
[sh|echo "#\{foo}"|] `shouldReturn` "#{foo}\n"
[sh|echo "#\\{foo}"|] `shouldReturn` "#\\{foo}\n"