directory-layout-0.7.4.1: test/System/Directory/Layout/QQSpec.hs
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE QuasiQuotes #-}
module System.Directory.Layout.QQSpec
( spec
) where
import Data.Text (Text)
import Test.Hspec
import System.Directory.Layout.QQ
spec :: Spec
spec = do
describe "dedent" $ do
it "gives reasonable result for the empty input" $
[dedent||] `shouldBe` ""
it "handles a single line input" $
[dedent|hello|] `shouldBe` "hello"
it "ignores the first line when it consists solely of spaces" $
[dedent|
hello|] `shouldBe` "hello"
it "considers the first line when it has non-space characters" $
[dedent|hello
world|] `shouldBe` "hello\n world"
it "removes the minimum common amount of indentation" $
[dedent|
hello
world
!
|] `shouldBe` "hello\n world\n!\n"
it "can be parsed into any IsString instance" $
[dedent|
hello
world
!
|] `shouldBe` ("hello\n world\n!\n" :: Text)
it "ignores indentation in the last line if it's all spaces" $
[dedent|
hello
world
!
|] `shouldBe` "hello\n world\n!\n"
it "saves empty lines at the beginning of the string" $
[dedent|
hello
world
!
|] `shouldBe` "\n\nhello\n world\n!\n"
it "saves empty lines at the end of the string" $
[dedent|
hello
world
!
|] `shouldBe` "hello\n world\n!\n\n\n"
describe "dedentSubst" $ do
it "is like dedent but also supports variable substitution" $ do
let hello = "bye" :: String
[dedentSubst|
#{hello}
world
!
|] `shouldBe` "bye\n world\n!\n\n\n"
it "is supports escaping" $
[dedentSubst|
\#{hello}
world
!
|] `shouldBe` "#{hello}\n world\n!\n\n\n"
it "can be parsed into any IsString instance" $ do
let hello = "bye" :: String
[dedentSubst|
#{hello}
world
!
|] `shouldBe` ("bye\n world\n!\n" :: Text)