content: {-# LANGUAGE TupleSections, RecordWildCards, ScopedTypeVariables #-}
  
  module Action.Test(actionTest) where
  
  import Query
  import Action.CmdLine
  import Action.Search
  import Action.Server
  import Action.Generate
  import General.Util
  import General.Web
  import Input.Item
  import Input.Haddock
  import System.IO.Extra
  
  import Control.Monad
  import Output.Items
  import Control.DeepSeq
  import Control.Exception
  
  
  actionTest :: CmdLine -> IO ()
  actionTest Test{..} = withBuffering stdout NoBuffering $ withTempFile $ \sample -> do
      putStrLn "Code tests"
      general_util_test
      general_web_test
      input_haddock_test
      query_test
      action_server_test_
      item_test
      putStrLn ""
  
      putStrLn "Sample database tests"
      actionGenerate defaultGenerate{database=sample, local_=["misc/sample-data"]}
      action_search_test True sample
      unless disable_network_tests $ action_server_test True sample
      putStrLn ""
  
      unless disable_network_tests $ do
          putStrLn "Haskell.org database tests"
          action_search_test False database
          action_server_test False database
  
          when deep $ withSearch database $ \store -> do
              putStrLn "Deep tests"
              let xs = map targetItem $ listItems store
              evaluate $ rnf xs
              putStrLn $ "Loaded " ++ show (length xs) ++ " items"
  