module HaddockBackend.Api (
DocTest(..)
, Interaction(..)
, getDocTests
) where
import Module (moduleName, moduleNameString)
import HaddockBackend.Markup (examplesFromInterface)
import Documentation.Haddock(
Interface(ifaceMod, ifaceOrigFilename)
, exampleExpression
, exampleResult
, createInterfaces
, Flag
)
data DocTest = DocExample {
source :: String
, module_ :: String
, interactions :: [Interaction]
} deriving (Show)
data Interaction = Interaction {
expression :: String
, result :: [String]
} deriving (Show)
getDocTests :: [Flag]
-> [String]
-> IO [DocTest]
getDocTests flags modules = do
interfaces <- createInterfaces flags modules
return $ concat $ map docTestsFromInterface interfaces
moduleNameFromInterface :: Interface -> String
moduleNameFromInterface = moduleNameString . moduleName . ifaceMod
docTestsFromInterface :: Interface -> [DocTest]
docTestsFromInterface interface = map docTestFromExamples listOfExamples
where
listOfExamples = examplesFromInterface interface
moduleName' = moduleNameFromInterface interface
fileName = ifaceOrigFilename interface
docTestFromExamples examples =
DocExample fileName moduleName' $ map interactionFromExample examples
where
interactionFromExample e =
Interaction (exampleExpression e) (exampleResult e)