headroom-0.3.0.0: test/Headroom/Ext/Haskell/HaddockSpec.hs
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TypeApplications #-}
module Headroom.Ext.Haskell.HaddockSpec
( spec
)
where
import Headroom.Configuration.Types ( LicenseType(..) )
import Headroom.Data.TextExtra ( fromLines )
import Headroom.Embedded ( licenseTemplate )
import Headroom.Ext.Haskell.Haddock
import Headroom.FileSystem ( loadFile )
import Headroom.FileType.Types ( FileType(..) )
import Headroom.Template ( Template(..) )
import Headroom.Template.Mustache ( Mustache(..) )
import Headroom.Types ( HaddockFieldOffsets(..) )
import RIO
import RIO.FilePath ( (</>) )
import Test.Hspec
spec :: Spec
spec = do
let codeSamples = "test-data" </> "code-samples"
describe "extractFieldOffsets" $ do
it "extract offsets for selected fields of module header" $ do
template <- parseTemplate @Mustache Nothing $ licenseTemplate BSD3 Haskell
let expected = HaddockFieldOffsets { hfoCopyright = Just 14 }
extractFieldOffsets template `shouldBe` expected
describe "extractModuleHeader" $ do
it "extracts fields from Haddock module header" $ do
let
expected = HaddockModuleHeader
{ hmhCopyright = Just
"(c) Some Guy, 2013\n Someone Else, 2014"
, hmhLicense = Just "GPL-3"
, hmhMaintainer = Just "sample@email.com"
, hmhPortability = Just "POSIX"
, hmhStability = Just "experimental"
, hmhShortDesc = Just "Short description"
, hmhLongDesc =
Just
"Here is a longer description of this module, containing some\n\
\commentary with @some markup@."
}
sample <- loadFile $ codeSamples </> "haskell" </> "header.hs"
extractModuleHeader sample Nothing `shouldBe` expected
describe "stripCommentSyntax" $ do
it "strips single-line or block comment syntax from input" $ do
let sample1 = fromLines ["{-|", "Hello1", "foo", "-}"]
sample2 = fromLines ["{- |", "Hello2", "foo", "-}"]
sample3 = fromLines ["-- | Hello3", "-- foo"]
stripCommentSyntax sample1 `shouldBe` fromLines ["", "Hello1", "foo", ""]
stripCommentSyntax sample2 `shouldBe` fromLines ["", "Hello2", "foo", ""]
stripCommentSyntax sample3 `shouldBe` fromLines [" Hello3", " foo"]
describe "indentField" $ do
it "does nothing with single line text" $ do
let sample = fromLines ["hello"]
offset = Just 2
indentField offset sample `shouldBe` sample
it "indents all but first line using given offset" $ do
let sample = fromLines ["first", "second", "third"]
expected = fromLines ["first", " second", " third"]
offset = Just 2
indentField offset sample `shouldBe` expected
it "intents correctly previously indented text" $ do
let sample = fromLines ["first", "second", " third"]
expected = fromLines ["first", " second", " third"]
offset = Just 2
indentField offset sample `shouldBe` expected