packages feed

dhall-to-cabal-1.3.1.0: tests/DhallToCabal/Tests.hs

{-# language OverloadedStrings #-}

module DhallToCabal.Tests
  ( versionSpec
  )
  where

import Data.Maybe ( fromMaybe )
import Dhall.Core ( Const(..), Expr(..), Chunks(..) )

import qualified Data.Text as StrictText
import qualified Dhall
import qualified Dhall.Core
import qualified Dhall.Parser
import qualified Dhall.TypeCheck
import qualified DhallToCabal
import qualified Distribution.Text as Cabal ( simpleParse )
import qualified Test.Tasty
import qualified Test.Tasty.HUnit


versionSpec :: Test.Tasty.TestTree
versionSpec =
  Test.Tasty.testGroup
    "version"
    [ testExtraction
        "version"
        DhallToCabal.version
        ( Lam
            "Version"
            ( Const Type )
            ( Lam
                "v"
                ( Pi "_" ( Const Type ) ( Pi "_" Text "Version" ) )
                ( App "v" ( TextLit ( Chunks [] "1.0.0" ) ) )
            )
        )
        ( fromMaybe
            ( error "Could not parse version" )
            ( Cabal.simpleParse ( StrictText.unpack "1.0.0" ) )
        ) ]


testExtraction
  :: ( Eq a, Show a )
  => Test.Tasty.TestName
  -> Dhall.Type a
  -> Dhall.Core.Expr Dhall.Parser.Src Dhall.TypeCheck.X
  -> a
  -> Test.Tasty.TestTree
testExtraction testName t expr expected =
  Test.Tasty.testGroup
    testName
    [ Test.Tasty.HUnit.testCase
        "original"
        ( Just expected Test.Tasty.HUnit.@=? Dhall.extract t expr )
    , Test.Tasty.HUnit.testCase
        "alphaNormalize"
        ( Just expected
            Test.Tasty.HUnit.@=?
              Dhall.extract t ( Dhall.Core.alphaNormalize expr )
        )
    , Test.Tasty.HUnit.testCase
        "betaNormalize"
        ( Just expected
            Test.Tasty.HUnit.@=?
              Dhall.extract t ( Dhall.Core.normalize expr )
        )
    ]