packages feed

ideas-1.0: src/Documentation/Make.hs

-----------------------------------------------------------------------------
-- Copyright 2011, Open Universiteit Nederland. This file is distributed
-- under the terms of the GNU General Public License. For more information,
-- see the file "LICENSE.txt", which is included in the distribution.
-----------------------------------------------------------------------------
-- |
-- Maintainer  :  bastiaan.heeren@ou.nl
-- Stability   :  provisional
-- Portability :  portable (depends on ghc)
--
-----------------------------------------------------------------------------
module Documentation.Make (DocItem(..), makeDocumentation) where

import Common.Utils (Some(..))
import Common.Utils.TestSuite
import Control.Monad
import Data.Maybe
import Documentation.ExercisePage
import Documentation.OverviewPages
import Documentation.RulePage
import Documentation.SelfCheck
import Documentation.ServicePage
import Documentation.TestsPage
import Documentation.ViewPage
import Service.DomainReasoner

data DocItem = Pages | SelfCheck | BlackBox (Maybe String)
   deriving Eq

makeDocumentation :: String -> String -> DocItem -> DomainReasoner ()
makeDocumentation docDir testDir item =
   case item of
      Pages -> do
         report "Generating overview pages"
         makeOverviewExercises docDir
         makeOverviewServices  docDir
         report "Generating exercise pages"
         exs <- getExercises
         forM_ exs $ \(Some ex) ->
            makeExercisePage docDir ex
         report "Generating view pages"
         makeViewPages docDir
         report "Generating rule pages"
         makeRulePages docDir
         report "Generating service pages"
         getServices >>= mapM_ (makeServicePage docDir)
         report "Running tests"
         makeTestsPage docDir testDir
         {- report "Status hashtable"
         let file = docDir ++ "/hashtable.out"
         liftIO $ do
            putStrLn $ "Generating " ++ show file
            tableStatus >>= writeFile file -}
      SelfCheck -> do
         checks <- selfCheck testDir
         result <- liftIO (runTestSuiteResult checks)
         liftIO (printSummary result)
      BlackBox mdir -> do
         run    <- runWithCurrent
         checks <- liftIO $ blackBoxTests run (fromMaybe testDir mdir)
         result <- liftIO $ runTestSuiteResult checks
         liftIO (printSummary result)

report :: String -> DomainReasoner ()
report s = liftIO $ do
   let line = replicate 75 '-'
   putStrLn line
   putStrLn ("--- " ++ s)
   putStrLn line