Merge pull request #30 from anderspapitto/setfix

add some evaluation tests and fix bug
This commit is contained in:
John Wiegley 2015-12-21 14:48:23 -05:00
commit f60f12f9a0
3 changed files with 53 additions and 3 deletions

View file

@ -102,9 +102,9 @@ evalExpr = cata phi
phi (NSet recBind binds) = \env -> case env of
(Fix (NVSet env')) -> do
rec
mergedEnv <- pure $ case recBind of
Rec -> Fix $ NVSet $ evaledBinds `Map.union` env'
NonRec -> env
mergedEnv <- case recBind of
Rec -> pure $ Fix $ NVSet $ evaledBinds `Map.union` env'
NonRec -> fmap (Fix . NVSet) $ evalBinds True env binds
evaledBinds <- evalBinds True mergedEnv binds
pure mergedEnv
_ -> error "invalid evaluation environment"

48
tests/EvalTests.hs Normal file
View file

@ -0,0 +1,48 @@
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE OverloadedStrings #-}
module EvalTests (tests) where
import Data.Fix
import Test.Tasty
import Test.Tasty.HUnit
import Test.Tasty.TH
import Nix.Eval
import Nix.Parser
import Nix.Types
case_basic_sum :: Assertion
case_basic_sum = constantEqualStr "2" "1 + 1"
case_basic_function :: Assertion
case_basic_function = constantEqualStr "2" "(a: a) 2"
case_set_attr :: Assertion
case_set_attr = constantEqualStr "2" "{ a = 2; }.a"
case_function_set_arg :: Assertion
case_function_set_arg = constantEqualStr "2" "({ a }: 2) { a = 1; }"
case_function_set_two_arg :: Assertion
case_function_set_two_arg = constantEqualStr "2" "({ a, b ? 3 }: b - a) { a = 1; }"
-- case_function_set_two_arg_default_scope :: Assertion
-- case_function_set_two_arg_default_scope = constantEqualStr "2" "({ a, b ? a * 3 }: b - a) { a = 1; }"
tests :: TestTree
tests = $testGroupGenerator
-----------------------
constantEqual :: NExpr -> NExpr -> Assertion
constantEqual a b = do
Fix (NVConstant a') <- evalExpr a (Fix (NVSet mempty))
Fix (NVConstant b') <- evalExpr b (Fix (NVSet mempty))
assertEqual "" a' b'
constantEqualStr :: String -> String -> Assertion
constantEqualStr a b =
let Success a' = parseNixString a
Success b' = parseNixString b
in constantEqual a' b'

View file

@ -3,8 +3,10 @@ module Main where
import Test.Tasty
import qualified ParserTests
import qualified EvalTests
main :: IO ()
main = defaultMain $ testGroup "hnix"
[ ParserTests.tests
, EvalTests.tests
]