123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- {-# LANGUAGE TemplateHaskell, QuasiQuotes, OverloadedStrings #-}
- module FileGeneratorTests (fileGenSpecs) where
- import Control.Exception
- import Control.Monad (forM_)
- import GeneratorTestUtil
- import Test.Hspec
- import Test.HUnit (assertFailure, assertEqual)
- import Yesod.EmbeddedStatic.Generators
- import qualified Data.ByteString.Lazy as BL
- -- | Embeds the LICENSE file
- license :: GenTestResult
- license = $(embedFile "LICENSE" >>=
- testOneEntry (Just "_LICENSE") "LICENSE" (BL.readFile "LICENSE")
- )
- licenseAt :: GenTestResult
- licenseAt = $(embedFileAt "abc.txt" "LICENSE" >>=
- testOneEntry (Just "abc_txt") "abc.txt" (BL.readFile "LICENSE")
- )
- embDir :: [GenTestResult]
- embDir = $(embedDir "test/embed-dir" >>=
- testEntries
- [ (Just "abc_def_txt", "abc/def.txt", BL.readFile "test/embed-dir/abc/def.txt")
- , (Just "lorem_txt", "lorem.txt", BL.readFile "test/embed-dir/lorem.txt")
- , (Just "foo", "foo", BL.readFile "test/embed-dir/foo")
- ]
- )
- embDirAt :: [GenTestResult]
- embDirAt = $(embedDirAt "xxx" "test/embed-dir" >>=
- testEntries
- [ (Just "xxx_abc_def_txt", "xxx/abc/def.txt", BL.readFile "test/embed-dir/abc/def.txt")
- , (Just "xxx_lorem_txt", "xxx/lorem.txt", BL.readFile "test/embed-dir/lorem.txt")
- , (Just "xxx_foo", "xxx/foo", BL.readFile "test/embed-dir/foo")
- ]
- )
- concatR :: GenTestResult
- concatR = $(concatFiles "out.txt" [ "test/embed-dir/abc/def.txt", "test/embed-dir/foo"] >>=
- testOneEntry (Just "out_txt") "out.txt" (return "Yesod Rocks\nBar\n")
- )
- -- The transform function should only run at compile for the production content
- concatWithR :: GenTestResult
- concatWithR = $(concatFilesWith "out2.txt"
- (\x -> return $ x `BL.append` "Extra")
- [ "test/embed-dir/abc/def.txt", "test/embed-dir/foo"] >>=
- testOneEntry (Just "out2_txt") "out2.txt" (return "Yesod Rocks\nBar\nExtra")
- )
-
- fileGenSpecs :: Spec
- fileGenSpecs = do
- describe "Embed File" $ do
- it "embeds a single file" $
- assertGenResult (BL.readFile "LICENSE") license
- it "embeds a single file at a location" $
- assertGenResult (BL.readFile "LICENSE") licenseAt
- describe "Embed Directory" $ do
- it "embeds a directory" $
- forM_ [embDir, embDirAt] $ \d -> case d of
- [GenError e] -> assertFailure e
- [def, foo, lorem] -> do
- assertGenResult (BL.readFile "test/embed-dir/abc/def.txt") def
- assertGenResult (BL.readFile "test/embed-dir/foo") foo
- assertGenResult (BL.readFile "test/embed-dir/lorem.txt") lorem
- _ -> assertFailure "Bad directory list"
- describe "Concat Files" $ do
- it "simple concat" $
- assertGenResult (return "Yesod Rocks\nBar\n") concatR
- it "concat with processing function" $
- assertGenResult (return "Yesod Rocks\nBar\n") concatWithR -- no Extra since this is development
- describe "Compress" $ do
- it "compress tool function" $ do
- out <- compressTool "runhaskell" [] "main = putStrLn \"Hello World\""
- assertEqual "" "Hello World\n" out
- it "tryCompressTools" $ do
- out <- flip tryCompressTools "abcdef"
- [ const $ throwIO $ ErrorCall "An expected error"
- , const $ return "foo"
- , const $ return "bar"
- ]
- assertEqual "" "foo" out
- out2 <- flip tryCompressTools "abcdef"
- [ const $ throwIO $ ErrorCall "An expected error"]
- assertEqual "" "abcdef" out2
|