packages feed

seonbi-0.2.0: test/Text/Seonbi/FacadeSpec.hs

{-# LANGUAGE OverloadedLists #-}
{-# LANGUAGE OverloadedStrings #-}
module Text.Seonbi.FacadeSpec (spec) where

import Control.Monad

import Data.Text.Lazy.IO
import System.Directory
import System.FilePath
import Test.Hspec

import Text.Seonbi.Facade

dataDirPath :: FilePath
dataDirPath = "test" </> "data"

inputExtension :: String
inputExtension = ".ko-Kore.html"

outputExtensions :: Monad m => [(String, Configuration m a)]
outputExtensions =
    [ (".ko-KR.html", ko_KR)
    , (".ko-KP.html", ko_KP)
    ]


spec :: Spec
spec = do
    testData <- runIO $ do
        files <- listDirectory dataDirPath
        let inputFiles = [f | f <- files, inputExtension `isExtensionOf` f]
        testFiles <- filterM
            (\(_, o, _) -> doesFileExist (dataDirPath </> o))
            [ (i, dropExtension i -<.> oExt, oCfg)
            | i <- inputFiles
            , (oExt, oCfg) <- outputExtensions
            ]
        forM testFiles $ \ (input, output, cfg) -> do
            inputData <- Data.Text.Lazy.IO.readFile (dataDirPath </> input)
            outputData <- Data.Text.Lazy.IO.readFile (dataDirPath </> output)
            return (input, output, inputData, outputData, cfg)
    forM_ testData $ \ (iname, oname, input, output, cfg) ->
        specify ("transformHtmlLazyText: " ++ iname ++ " -> " ++ oname) $ do
            transformHtmlLazyText noOp input `shouldBe` Just input
            transformHtmlLazyText cfg input `shouldBe` Just output
  where
    noOp :: Monad m => Configuration m a
    noOp = Configuration
        { quote = Nothing
        , cite = Nothing
        , arrow = Nothing
        , ellipsis = False
        , emDash = False
        , stop = Nothing
        , hanja = Nothing
        , xhtml = False
        , debugLogger = Nothing
        }