{-# LANGUAGE OverloadedLabels #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE NoImplicitPrelude #-} module Main where import Control.Lens import Lucid import NumHask.Prelude import Test.DocTest import Test.Tasty import Test.Tasty.Hspec import Web.Rep import Web.Rep.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.Rep.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.Rep.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` "

filler

filler
" -- The tests tests :: IO TestTree tests = testGroup "the tests" <$> sequence [ testSpec "Web.Rep.Render" =<< testsRender , testSpec "Web.Rep.Bootstrap" =<< testsBootstrap ] main :: IO () main = do doctest ["src/Web/Rep/SharedReps.hs"] defaultMain =<< tests