packages feed

shikensu-0.3.4: tests/Test/Example.hs

module Test.Example
    ( exampleTests
    ) where

import Data.ByteString (ByteString)
import Data.Monoid ((<>))
import Data.Text (Text)
import Flow
import Prelude hiding (read)
import Shikensu (Definition(..), Dictionary(..), list, makeDefinition)
import Shikensu.Contrib (clone, copyPropsToMetadata, permalink, renameExt, renderContent)
import Shikensu.Contrib.IO (read, write)
import System.Directory (canonicalizePath)
import Test.Helpers
import Test.Tasty
import Test.Tasty.HUnit

import qualified Data.Text.Encoding as Text (decodeUtf8, encodeUtf8)


exampleTests :: TestTree
exampleTests =
    testCase "Example test" $ dictionaries >>= uncurry assertEq


dictionaries :: IO (Dictionary, Dictionary)
dictionaries = do
    root            <- canonicalizePath "./tests"
    dictA           <- dictionary_io root

    let absolute    = root <> "/fixtures/example.md"
    let dictB       = [Shikensu.makeDefinition root "fixtures/*.md" absolute]

    dictB_Read      <- read dictB
    dictB_Final     <- flow dictB_Read

    return (dictA, dictB_Final)



-- Setup


dictionary_io :: String -> IO Dictionary
dictionary_io absolutePathToCwd =
    Shikensu.list ["fixtures/*.md"] absolutePathToCwd
        >>= read
        >>= flow
        >>= write "./build"


flow :: Dictionary -> IO Dictionary
flow =
       renameExt ".md" ".html"
    .> permalink "index"
    .> clone "index.html" "200.html"
    .> copyPropsToMetadata
    .> renderContent markdownRenderer
    .> return


markdownRenderer :: Definition -> Maybe ByteString
markdownRenderer def =
    content def
        |> fmap Text.decodeUtf8
        |> fmap renderMarkdown
        |> fmap Text.encodeUtf8


renderMarkdown :: Text -> Text
renderMarkdown text =
    text