packages feed

language-hcl-0.1.1.0: test/Data/HCL/PrettyPrintSpec.hs

{-# LANGUAGE FlexibleContexts  #-}
{-# LANGUAGE OverloadedLists   #-}
{-# LANGUAGE OverloadedStrings #-}
module Data.HCL.PrettyPrintSpec where

import           Data.HCL.PrettyPrint
import           Data.HCL.Types
import           Test.Hspec
import           Text.PrettyPrint.HughesPJClass

spec :: Spec
spec =
    describe "pPrint" $
        it "pretty prints an HCL document" $ do
            let input :: HCLDoc
                input =  [ HCLStatementAssignment ( ["hello", "world"]
                                                  , HCLString [HCLStringPlain "Hello World"]
                                                  )
                         , HCLStatementAssignment (["var"], HCLNumber 10)
                         , HCLStatementObject
                           (HCLObject
                             ["resource", "something h"]
                             [ (["something"], HCLString [HCLStringPlain "Here"])
                             ]
                           )
                         ]
            prettyShow input `shouldBe`
                -- We use init because there's no trailing newline
                init (unlines [ "hello.world = \"Hello World\""
                              , "var = 10.0"
                              , "resource \"something h\" {"
                              , "  something = \"Here\""
                              , "}"
                              ])