module Main where import Data.List import Data.Ini.Config.Raw import Data.Sequence (Seq) import Data.Text (Text) import qualified Data.Text as T import qualified Data.Text.IO as T import System.Directory import System.Exit dir :: FilePath dir = "test/prewritten/cases" main :: IO () main = do files <- getDirectoryContents dir let inis = [ f | f <- files , ".ini" `isSuffixOf` f ] mapM_ runTest inis type IniSeq = Seq (Text, Seq (Text, Text)) toMaps :: RawIni -> IniSeq toMaps (RawIni m) = fmap sectionToPair m where sectionToPair (name, section) = (normalizedText name, fmap valueToPair (isVals section)) valueToPair (name, value) = (normalizedText name, T.strip (vValue value)) runTest :: FilePath -> IO () runTest iniF = do let hsF = take (length iniF - 4) iniF ++ ".hs" ini <- T.readFile (dir ++ "/" ++ iniF) hs <- readFile (dir ++ "/" ++ hsF) case parseRawIni ini of Left err -> do putStrLn ("Error parsing " ++ iniF) putStrLn err exitFailure Right x | toMaps x == read hs -> do putStrLn ("Passed: " ++ iniF) | otherwise -> do putStrLn ("Parses do not match for " ++ iniF) putStrLn ("Expected: " ++ hs) putStrLn ("Actual: " ++ show (toMaps x)) exitFailure