diff --git a/hnix.cabal b/hnix.cabal index 8f6d058..5f8a725 100644 --- a/hnix.cabal +++ b/hnix.cabal @@ -623,6 +623,7 @@ test-suite hnix-tests ParserTests PrettyParseTests PrettyTests + ReduceExprTests TestCommon Paths_hnix hs-source-dirs: diff --git a/tests/Main.hs b/tests/Main.hs index 2169ac4..5bfc094 100644 --- a/tests/Main.hs +++ b/tests/Main.hs @@ -26,6 +26,7 @@ import Nix.Value import qualified NixLanguageTests import qualified ParserTests import qualified PrettyTests +import qualified ReduceExprTests -- import qualified PrettyParseTests import System.Directory import System.Environment @@ -98,7 +99,8 @@ main = do | isJust hpackTestsEnv ] ++ [ ParserTests.tests , EvalTests.tests - , PrettyTests.tests ] ++ + , PrettyTests.tests + , ReduceExprTests.tests] ++ -- [ PrettyParseTests.tests -- (fromIntegral (read (fromMaybe "0" prettyTestsEnv) :: Int)) ] ++ [ evalComparisonTests ] ++ diff --git a/tests/ReduceExprTests.hs b/tests/ReduceExprTests.hs new file mode 100644 index 0000000..f6f74d8 --- /dev/null +++ b/tests/ReduceExprTests.hs @@ -0,0 +1,34 @@ +{-# LANGUAGE OverloadedStrings #-} +{-# OPTIONS_GHC -fno-warn-name-shadowing #-} +module ReduceExprTests (tests) where +import Data.Fix +import Test.Tasty +import Test.Tasty.HUnit + +import Nix.Atoms +import Nix.Expr.Types +import Nix.Expr.Types.Annotated +import Nix.Reduce (reduceExpr) +import Nix.Parser + + +tests :: TestTree +tests = testGroup "Expr Reductions" + [ testCase "Non nested NSelect on set should be reduced" $ + cmpReduceResult nonNestedSelect nonNestedSelectExpect + ] + +cmpReduceResult :: Result NExprLoc -> NExpr -> Assertion +cmpReduceResult r e = do + r <- assertSucc r + r <- stripAnnotation <$> reduceExpr Nothing r + r @?= e + where + assertSucc (Success a) = pure a + assertSucc (Failure d) = assertFailure $ show d + +nonNestedSelect :: Result NExprLoc +nonNestedSelect = parseNixTextLoc "{a=42;}.a" + +nonNestedSelectExpect :: NExpr +nonNestedSelectExpect = Fix . NConstant $ NInt 42