1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104
|
{-# Language OverloadedStrings #-}
{-|
Module : Main
Description : Unit tests for config-schema
Copyright : (c) Eric Mertens, 2017
License : ISC
Maintainer : emertens@gmail.com
-}
module Main (main) where
import Config
import Config.Number
import Control.Monad (unless)
import Data.Foldable
import Data.Text (Text)
import qualified Data.Text as Text
parseTest ::
Value () {- ^ expected value -} ->
[Text] {- ^ input lines -} ->
IO ()
parseTest expected txts =
case parse (Text.unlines txts) of
Left e -> fail (show e)
Right v ->
unless ((() <$ v) == expected) (fail (show (expected, () <$ v)))
number :: Number -> Value ()
number = Number ()
atom :: Atom -> Value ()
atom = Atom ()
list :: [Value ()] -> Value ()
list = List ()
text :: Text -> Value ()
text = Text ()
sections :: [(Text, Value ())] -> Value ()
sections xs = Sections () [Section () k v | (k,v) <- xs]
main :: IO ()
main = sequenceA_
[ parseTest (number (MkNumber (Radix10 0) 42)) ["42"]
, parseTest (number (MkNumber (Radix10 56) 42)) ["42e56"]
, parseTest (number (MkNumber (Radix10 56) 42.34)) ["42.34e56"]
, parseTest (number (MkNumber (Radix10 0) 42.34)) ["42.34"]
, parseTest (number (MkNumber (Radix10 0) 42)) ["42."]
, parseTest (number (MkNumber (Radix10 0) 42)) ["042"]
, parseTest (number (MkNumber (Radix16 0) 42)) ["0x2a"]
, parseTest (number (MkNumber (Radix16 56) 42)) ["0x2ap56"]
, parseTest (number (MkNumber (Radix16 56) (0x2a + (0x34 / 16^(2::Int))))) ["0x2a.34p56"]
, parseTest (number (MkNumber (Radix16 0) (0x2a + (0x3f / 16^(2::Int))))) ["0x2a.3f"]
, parseTest (number (MkNumber (Radix16 0) 42)) ["0x2a."]
, parseTest (number (MkNumber (Radix16 0) 42)) ["0x02a"]
, parseTest (number (MkNumber Radix2 42)) ["0b101010"]
, parseTest (number (MkNumber Radix2 4)) ["0b0100"]
, parseTest (number (MkNumber Radix2 4)) ["0b0100."]
, parseTest (number (MkNumber Radix2 (4 + (22 / 2^(6::Int))))) ["0b100.010110"]
, parseTest (number (MkNumber Radix8 55)) ["0o67"]
, parseTest (number (MkNumber Radix8 55)) ["0o67."]
, parseTest (number (MkNumber Radix8 55)) ["0o067"]
, parseTest (number (MkNumber Radix8 (55 + (10 / 64)))) ["0o67.12"]
, parseTest (atom "example") ["example"]
, parseTest (atom "one-two") ["one-two"]
, parseTest (atom "one-1") ["one-1"]
, parseTest (list []) ["[ ]"]
, parseTest (list []) ["[]"]
, parseTest (list [atom "x"]) ["[x]"]
, parseTest (list [atom "x"]) ["* x"]
, parseTest (list [atom "x", atom "y", atom "z"]) ["[x, y, z]"]
, parseTest (list [atom "x", atom "y", atom "z"])
["* x", "* y", "* z"]
, parseTest (list [atom "x", list [atom "y", atom "z"]]) ["[x,[y,z]]"]
, parseTest (list [atom "x", list [atom "y", atom "z"]]) ["* x", "* [y,z]"]
, parseTest (list [atom "x", list [atom "y", atom "z"]]) ["* x", "* * y", " * z"]
, parseTest (text "string") ["\"string\""]
, parseTest (text "\10string\1\2") ["\"\\x0ast\\&r\\ \\ing\\SOH\\^B\""]
, parseTest (text "string") ["\"str\\", " \\ing\""]
, parseTest (sections []) ["{}"]
, parseTest (sections [("x", atom "y")]) ["{x:y}"]
, parseTest (sections [("x", atom "y")]) ["x:y"]
, parseTest (sections [("x", atom "y"), ("z", atom "w")]) ["{x:y,z:w}"]
, parseTest (sections [("x", sections [("y", atom "z")])]) ["x:y:z"]
, parseTest (sections [("x", sections [("y", atom "z")])])
["x:"
," y:"
," z"]
, parseTest (sections [("x", list [atom "y", atom "z"])])
["x: * y"
," * z"]
, parseTest (list [sections [("x", atom "y")], sections [("z", atom "w")]])
["* x: y"
,"* z: w"]
]
|