aboutsummaryrefslogtreecommitdiff
path: root/tests/Test.hs
diff options
context:
space:
mode:
authorJoris2016-03-13 21:26:03 +0100
committerJoris2016-03-13 21:26:03 +0100
commit47623ec732ec19c765c0a1ebffd9b234f81e0d01 (patch)
treea52969d730e64d1303e62efa8c36b03a7be7f1a5 /tests/Test.hs
Initial commit
Diffstat (limited to 'tests/Test.hs')
-rw-r--r--tests/Test.hs104
1 files changed, 104 insertions, 0 deletions
diff --git a/tests/Test.hs b/tests/Test.hs
new file mode 100644
index 0000000..51ced1f
--- /dev/null
+++ b/tests/Test.hs
@@ -0,0 +1,104 @@
+{-# LANGUAGE OverloadedStrings #-}
+
+module Main
+ ( main
+ ) where
+
+import Prelude hiding (lookup)
+
+import qualified Data.HashMap.Strict as M
+
+import Test.Framework
+import Test.Framework.Providers.HUnit
+import Test.HUnit hiding (Test)
+
+import Data.ConfigManager
+import Data.ConfigManager.Config
+import qualified Data.Text as T
+
+import Helper (forceGetConfig, getConfig)
+
+main :: IO ()
+main = defaultMain tests
+
+tests :: [Test]
+tests =
+ [ testCase "binding" bindingAssertion
+ , testCase "name" nameAssertion
+ , testCase "value" valueAssertion
+ , testCase "skip" skipAssertion
+ ]
+
+bindingAssertion :: Assertion
+bindingAssertion = do
+ empty <- forceGetConfig ""
+ assertEqual "empty" (M.fromList []) (hashMap empty)
+
+ oneBinding <- forceGetConfig "x = \"foo\""
+ assertEqual "one binding present" (Just "foo") (lookup "x" oneBinding :: Maybe String)
+ assertEqual "one binding missing" Nothing (lookup "y" oneBinding :: Maybe String)
+ assertEqual "one binding count" 1 (M.size . hashMap $ oneBinding)
+
+ multipleBindings <- forceGetConfig $ T.unlines
+ [ "x = \"foo\""
+ , "y = \"bar\""
+ , "z = \"baz\""
+ ]
+ assertEqual "multiple bindings count" 3 (M.size . hashMap $ multipleBindings)
+ assertEqual "multiple bindings last" (Just "baz") (lookup "z" multipleBindings :: Maybe String)
+
+ overlappingBindings <- forceGetConfig $ T.unlines
+ [ "x = \"foo\""
+ , "y = \"bar\""
+ , "x = \"baz\""
+ ]
+ assertEqual "overlapping bindings count" 2 (M.size . hashMap $ overlappingBindings)
+ assertEqual "overlapping bindings redefinition" (Just "baz") (lookup "x" overlappingBindings :: Maybe String)
+
+nameAssertion :: Assertion
+nameAssertion = do
+ validNames <- forceGetConfig $ T.unlines
+ [ "validIdent = \"foo\" "
+ , "valid_ident = \"foo\""
+ , "valid-ident = \"foo\""
+ ]
+ assertEqual "validIdent" (Just "foo") (lookup "validIdent" validNames :: Maybe String)
+ assertEqual "valid_ident" (Just "foo") (lookup "valid_ident" validNames :: Maybe String)
+ assertEqual "valid-ident" (Just "foo") (lookup "valid-ident" validNames :: Maybe String)
+
+ invalid1 <- getConfig "-invalid_ident = \"foo\""
+ assertEqual "-invalid" Nothing invalid1
+
+ invalid2 <- getConfig "_invalid = \"foo\""
+ assertEqual "_invalid" Nothing invalid2
+
+valueAssertion :: Assertion
+valueAssertion = do
+ config <- forceGetConfig $ T.unlines
+ [ "a = \"lorem ipsum sir dolor emet\""
+ , "b = 4 "
+ , "c = 5.0 "
+ , " "
+ ]
+ assertEqual "string" (Just "lorem ipsum sir dolor emet") (lookup "a" config :: Maybe String)
+ assertEqual "integer" (Just 4) (lookup "b" config :: Maybe Int)
+ assertEqual "double 1" (Just 4.0) (lookup "b" config :: Maybe Double)
+ assertEqual "double 2" (Just 5.0) (lookup "c" config :: Maybe Double)
+ assertEqual "integer fail" Nothing (lookup "c" config :: Maybe Int)
+ return ()
+
+skipAssertion :: Assertion
+skipAssertion = do
+ config <- forceGetConfig $ T.unlines
+ [ " "
+ , " # Comment "
+ , " x = \"foo\" "
+ , " "
+ , " #### "
+ , " "
+ , " y = \"bar\" # Other comment"
+ , " "
+ ]
+ assertEqual "bindings count" 2 (M.size . hashMap $ config)
+ assertEqual "bindings x" (Just "foo") (lookup "x" config :: Maybe String)
+ assertEqual "bindings y" (Just "bar") (lookup "y" config :: Maybe String)