packages feed

herringbone-0.0.7: test/TestHerringbone.hs

module TestHerringbone where

import Data.Text (Text)
import qualified Data.Text.Encoding as T
import Data.Monoid
import Network.Wai.Handler.Warp

import Web.Herringbone
import Web.Herringbone.Preprocessor.StdIO
import Web.Herringbone.Preprocessor.CoffeeScript
import Web.Herringbone.Preprocessor.Sass

mkMockPP :: Text -> PP
mkMockPP ext = PP { ppExtension = ext
                  , ppAction = \sourceData -> do
                        return . Right $
                            "Preprocessed as: " <> T.encodeUtf8 ext <> "\n" <>
                            sourceData
                  }

pp1 :: PP
pp1 = mkMockPP "pp1"

pp2 :: PP
pp2 = mkMockPP "pp2"

pp3 :: PP
pp3 = mkMockPP "pp3"

failingPP :: PP
failingPP = PP { ppExtension = "fails"
               , ppAction = const . return . Left $ "Oh snap!"
               }

sed :: PP
sed = makeStdIOPP "sed" "sed" ["-e", "s/e/u/"]

testHB :: Herringbone
testHB = herringbone
    ( addSourceDir  "test/resources/assets"
    . addSourceDir  "test/resources/assets2"
    . setDestDir    "test/resources/compiled_assets"
    . addPreprocessors [ pp1
                       , pp2
                       , pp3
                       , failingPP
                       , coffeeScript
                       , sass
                       , scss
                       , sed
                       ]
    )

runTestHB :: Int -> IO ()
runTestHB port = run port (toApplication testHB)