packages feed

kdl-hs-1.0.0: test/KDL/RenderSpec.hs

{-# LANGUAGE DisambiguateRecordFields #-}
{-# LANGUAGE OverloadedStrings #-}

module KDL.RenderSpec (spec) where

import KDL qualified
import Skeletest
import Skeletest.Predicate qualified as P

spec :: Spec
spec = do
  describe "render" $ do
    describe "default formatting" $ do
      let ident s = KDL.Identifier{value = s, ext = KDL.def}
          fooAnn =
            KDL.Ann
              { identifier = ident "Foo"
              , ext = KDL.def
              }
          doc =
            KDL.NodeList
              { nodes =
                  [ KDL.Node
                      { ann = Just fooAnn
                      , name = ident "foo"
                      , entries =
                          [ KDL.Entry
                              { name = Nothing
                              , value =
                                  KDL.Value
                                    { ann = Just fooAnn
                                    , data_ = KDL.Number 123
                                    , ext = KDL.def
                                    }
                              , ext = KDL.def
                              }
                          , KDL.Entry
                              { name = Just $ ident "a"
                              , value =
                                  KDL.Value
                                    { ann = Just fooAnn
                                    , data_ = KDL.Number 123
                                    , ext = KDL.def
                                    }
                              , ext = KDL.def
                              }
                          , KDL.Entry
                              { name = Nothing
                              , value =
                                  KDL.Value
                                    { ann = Nothing
                                    , data_ = KDL.String "test"
                                    , ext = KDL.def
                                    }
                              , ext = KDL.def
                              }
                          , KDL.Entry
                              { name = Just $ ident "b"
                              , value =
                                  KDL.Value
                                    { ann = Nothing
                                    , data_ = KDL.String "test"
                                    , ext = KDL.def
                                    }
                              , ext = KDL.def
                              }
                          ]
                      , children =
                          Just
                            KDL.NodeList
                              { nodes =
                                  [ KDL.Node
                                      { ann = Nothing
                                      , name = ident "bar"
                                      , entries = []
                                      , children =
                                          Just
                                            KDL.NodeList
                                              { nodes =
                                                  [ KDL.Node
                                                      { ann = Nothing
                                                      , name = ident "baz"
                                                      , entries = []
                                                      , children = Nothing
                                                      , ext = KDL.def
                                                      }
                                                  ]
                                              , ext = KDL.def
                                              }
                                      , ext = KDL.def
                                      }
                                  ]
                              , ext = KDL.def
                              }
                      , ext = KDL.def
                      }
                  , KDL.Node
                      { ann = Just fooAnn
                      , name = ident "foo"
                      , entries = []
                      , children =
                          Just
                            KDL.NodeList
                              { nodes = []
                              , ext = KDL.def
                              }
                      , ext = KDL.def
                      }
                  ]
              , ext = KDL.def
              }

      it "renders correctly" $ do
        KDL.render doc `shouldSatisfy` P.matchesSnapshot

      it "can be parsed" $ do
        (KDL.parse . KDL.render) doc `shouldSatisfy` P.right P.anything