packages feed

cuddle-0.5.0.0: test/Test/Codec/CBOR/Cuddle/CDDL/Examples.hs

module Test.Codec.CBOR.Cuddle.CDDL.Examples (spec) where

import Codec.CBOR.Cuddle.CDDL.Prelude (prependPrelude)
import Codec.CBOR.Cuddle.CDDL.Resolve (fullResolveCDDL)
import Codec.CBOR.Cuddle.Parser (pCDDL)
import Data.Either (isRight)
import Data.Text.IO qualified as T
import Test.Hspec
import Text.Megaparsec (parse)
import Text.Megaparsec.Error (errorBundlePretty)

validateFile :: FilePath -> Spec
validateFile filePath = it ("Successfully validates " <> filePath) $ do
  contents <- T.readFile filePath
  cddl <- case parse pCDDL "" contents of
    Right x -> pure $ prependPrelude x
    Left x -> fail $ "Failed to parse the file:\n" <> errorBundlePretty x
  fullResolveCDDL cddl `shouldSatisfy` isRight

spec :: Spec
spec = do
  validateFile "example/cddl-files/byron.cddl"
  validateFile "example/cddl-files/conway.cddl"
  validateFile "example/cddl-files/shelley.cddl"

-- TODO this one does not seem to terminate
-- validateFile "example/cddl-files/basic_assign.cddl"