{-# LANGUAGE OverloadedLabels #-} {-# LANGUAGE OverloadedStrings #-} module Main where import Control.Lens import Lucid import Prelude import Test.Tasty import Test.Tasty.Hspec import Web.Page import Web.Page.Examples import qualified Data.Text.IO as Text generatePage :: FilePath -> FilePath -> PageConfig -> Page -> IO () generatePage dir stem pc = renderPageToFile dir (#filenames .~ concernNames "" stem $ pc) generatePages :: Traversable t => FilePath -> t (FilePath, PageConfig, Page) -> IO () generatePages dir xs = sequenceA_ $ (\(fp, pc, p) -> generatePage dir fp pc p) <$> xs genTest :: FilePath -> IO () genTest dir = void $ generatePages dir [("default", (defaultPageConfig "default"), page1), ("sep", cfg2, page2)] testVsFile :: FilePath -> FilePath -> PageConfig -> Page -> IO Bool testVsFile dir stem pc p = do (t,t') <- textVsFile dir stem pc p pure (t==t') textVsFile :: FilePath -> FilePath -> PageConfig -> Page -> IO (Concerns Text, Concerns Text) textVsFile dir stem pc p = do let names = concernNames "" stem let pc' = #filenames .~ names $ pc let t = renderPageAsText pc' p case pc ^. #concerns of Inline -> do t' <- Text.readFile (dir <> names ^. #htmlConcern) return (t, Concerns mempty mempty t') Separated -> do t' <- sequenceA $ Text.readFile <$> (dir <>) <$> names return (t, t') testsRender :: IO (SpecWith ()) testsRender = return $ describe "Web.Page.Render" $ do it "run genTest 'test/canned/' to refresh canned files." True it "renderPage mempty" $ renderText (renderPage mempty) `shouldBe` "
" let dir = "test/canned/" it "renderPageToFile, renderPage (compared with default canned file)" $ testVsFile dir "default" (defaultPageConfig "default") page1 `shouldReturn` True it "the various PageConfig's" $ testVsFile dir "sep" cfg2 page2 `shouldReturn` True testsBootstrap :: IO (SpecWith ()) testsBootstrap = return $ describe "Web.Page.Bootstrap" $ do it "bootstrapPage versus canned" $ toText (renderPage bootstrapPage) `shouldBe` "" it "accordion versus canned" $ ( toText . runIdentity . flip evalStateT 0 . accordion "acctest" Nothing $ (\x -> (pack (show x), "filler")) <$> [1..2::Int]) `shouldBe` "