packages feed

hocon-0.1.0.2: test/Text/Parser/HOCONSpec.hs

module Text.Parser.HOCONSpec where

import Data.HOCON
import Test.Hspec
import Text.Parser.HOCON (parseHOCON)

isLeft :: Either a b -> Bool
isLeft (Left _) = True
isLeft _        = False

spec :: Spec
spec = describe "parseHOCON" $ do
  it "works" $ do
    parseHOCON "foo = bar" `shouldBe` Right (HOCONNode [("foo", HOCONString "bar")])
    parseHOCON "foo = bar\nbar = 123\nbaz = \"nani?!\""
      `shouldBe` Right (HOCONNode [("bar", HOCONNumber 123), ("baz", HOCONString "nani?!"), ("foo", HOCONString "bar")])
    parseHOCON "{\n  \"foo\": \"bar\"\n}" `shouldBe` Right (HOCONNode [("foo", HOCONString "bar")])
    parseHOCON
        "foo = bar\nbar = true\nsomeObject {\n  someField = [\n    foo,\n    bar,\n    baz\n  ]\n  someOtherField = [\n    {\n      foo = bar\n    }\n  ]\n}"
      `shouldBe` Right
                   (HOCONNode
                     [ ("bar", HOCONBool True)
                     , ("foo", HOCONString "bar")
                     , ( "someObject"
                       , HOCONNode
                         [ ("someField"     , HOCONList [HOCONString "foo", HOCONString "bar", HOCONString "baz"])
                         , ("someOtherField", HOCONList [HOCONNode [("foo", HOCONString "bar")]])
                         ]
                       )
                     ]
                   )
  it "fails" $ do
    parseHOCON "foo = bar\n{\n  foo = bar\n}" `shouldSatisfy` isLeft
    parseHOCON "{" `shouldSatisfy` isLeft