dhall-1.42.3: tests/Dhall/Test/Tutorial.hs
{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE OverloadedStrings #-}
module Dhall.Test.Tutorial where
import qualified Data.Vector
import qualified Dhall
import qualified Dhall.Test.Substitution as Substitution
import qualified Dhall.Test.Util as Util
import qualified Test.Tasty
import qualified Test.Tasty.HUnit
import Data.Text (Text)
import Dhall (ToDhall)
import GHC.Generics (Generic)
import Numeric.Natural (Natural)
import Test.Tasty (TestTree)
import Test.Tasty.HUnit ((@?=))
tests :: TestTree
tests =
Test.Tasty.testGroup "tutorial"
[ Test.Tasty.testGroup "Interpolation"
[ _Interpolation_0
, _Interpolation_1
]
, Test.Tasty.testGroup "Functions"
[ _Functions_0
, _Functions_1
, _Functions_2
]
, Test.Tasty.testGroup "Unions"
[ example 0 "./tests/tutorial/unions0A.dhall" "./tests/tutorial/unions0B.dhall"
, example 1 "./tests/tutorial/unions1A.dhall" "./tests/tutorial/unions1B.dhall"
, example 3 "./tests/tutorial/unions3A.dhall" "./tests/tutorial/unions3B.dhall"
, example 4 "./tests/tutorial/unions4A.dhall" "./tests/tutorial/unions4B.dhall"
]
, Test.Tasty.testGroup "Substitutions"
[ Test.Tasty.HUnit.testCase "substitution1.dhall" $ do
res <- Substitution.substituteResult "tests/tutorial/substitution1.dhall"
res @?= Substitution.Failure 1
, Test.Tasty.HUnit.testCase "substitution2.dhall" $ do
res <- Substitution.substituteResult "tests/tutorial/substitution2.dhall"
res @?= Substitution.Failure 1
, Test.Tasty.HUnit.testCase "substitution3.dhall" $ do
res <- Substitution.substituteFoo "tests/tutorial/substitution3.dhall"
res @?= True
]
]
_Interpolation_0 :: TestTree
_Interpolation_0 = Test.Tasty.HUnit.testCase "Example #0" (do
e <- Util.code
" let name = \"John Doe\" \n\
\in let age = 21 \n\
\in \"My name is ${name} and my age is ${Natural/show age}\"\n"
Util.assertNormalizesTo e "\"My name is John Doe and my age is 21\"" )
_Interpolation_1 :: TestTree
_Interpolation_1 = Test.Tasty.HUnit.testCase "Example #1" (do
e <- Util.code
"''\n\
\ for file in *; do \n\
\ echo \"Found ''${file}\"\n\
\ done \n\
\'' \n"
Util.assertNormalized e )
_Functions_0 :: TestTree
_Functions_0 = Test.Tasty.HUnit.testCase "Example #0" (do
let text = "\\(n : Bool) -> [ n && True, n && False, n || True, n || False ]"
makeBools <- Dhall.input Dhall.auto text
makeBools True @?= Data.Vector.fromList [True,False,True,True] )
_Functions_1 :: TestTree
_Functions_1 = Test.Tasty.HUnit.testCase "Example #1" (do
let text = "λ(x : Bool) → λ(y : Bool) → x && y"
makeBools <- Dhall.input Dhall.auto text
makeBools True False @?= False )
data Example0 = Example0 { foo :: Bool, bar :: Bool }
deriving (Generic, ToDhall)
_Functions_2 :: TestTree
_Functions_2 = Test.Tasty.HUnit.testCase "Example #2" (do
f <- Dhall.input Dhall.auto "λ(r : { foo : Bool, bar : Bool }) → r.foo && r.bar"
f (Example0 { foo = True, bar = False }) @?= False
f (Example0 { foo = True, bar = True }) @?= True )
example :: Natural -> Text -> Text -> TestTree
example n text0 text1 =
Test.Tasty.HUnit.testCase
("Example #" <> show n)
(Util.equivalent text0 text1)