hnix/tests/ShorthandTests.hs

40 lines
1 KiB
Haskell
Raw Normal View History

{-# LANGUAGE TemplateHaskell, OverloadedStrings #-}
module ShorthandTests (tests) where
import Prelude
import Test.Tasty
import Test.Tasty.HUnit
import Test.Tasty.TH
import Control.Monad (forM_)
import Data.Monoid ((<>))
import Data.Fix
import Nix.Expr
case_mkDotsSymbolEscaping :: Assertion
case_mkDotsSymbolEscaping = do
let check xs errmsg assert =
forM_ xs $ \x -> assertBool (errmsg <> ": " <> show x) $ assert x
check plain "not a plain value" $ assertIsSingle
check nonPlain "not a non-plain value" $ not . assertIsSingle
where
plain = [ "abc09", "_A_'-", "AbC" ]
nonPlain = [ "abc def", "\\", "'abc", "\"", "-foo", "a.b.c" ]
assertIsSingle = isPlainSingle . getKey . mkDot "dummy"
getKey (Fix (NSelect _ [key] _)) = key
getKey _ = error "invalid"
isPlainSingle (StaticKey _) = True
isPlainSingle (DynamicKey (Plain (DoubleQuoted [Plain _]))) = False
isPlainSingle _ = error "invalid"
---------------------------
tests :: TestTree
tests = $(testGroupGenerator)