{-# LANGUAGE CPP #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RecordWildCards #-} module Feedback.Test where import Control.Monad import qualified Data.Map as M import Data.Time import Feedback.Common.OptParse import Feedback.Common.Output import Feedback.Common.Process import Feedback.Test.OptParse import GHC.Clock (getMonotonicTimeNSec) import Text.Colour.Capabilities (TerminalCapabilities (..)) #ifdef MIN_VERSION_safe_coloured_text_terminfo import Text.Colour.Capabilities.FromEnv (getTerminalCapabilitiesFromEnv) #endif runFeedbackTest :: IO () runFeedbackTest :: IO () runFeedbackTest = do TestSettings {Map String LoopSettings testSettingLoops :: Map String LoopSettings testSettingLoops :: TestSettings -> Map String LoopSettings ..} <- IO TestSettings getSettings TerminalCapabilities terminalCapabilities <- IO TerminalCapabilities getTermCaps ZonedTime begin <- IO ZonedTime getZonedTime let put :: [Chunk] -> IO () put = TerminalCapabilities -> ZonedTime -> [Chunk] -> IO () putTimedChunks TerminalCapabilities terminalCapabilities ZonedTime begin [(String, LoopSettings)] -> ((String, LoopSettings) -> IO ()) -> IO () forall (t :: * -> *) (m :: * -> *) a b. (Foldable t, Monad m) => t a -> (a -> m b) -> m () forM_ (Map String LoopSettings -> [(String, LoopSettings)] forall k a. Map k a -> [(k, a)] M.toList Map String LoopSettings testSettingLoops) (((String, LoopSettings) -> IO ()) -> IO ()) -> ((String, LoopSettings) -> IO ()) -> IO () forall a b. (a -> b) -> a -> b $ \(String loopName, LoopSettings {HooksSettings OutputSettings FilterSettings RunSettings loopSettingRunSettings :: RunSettings loopSettingFilterSettings :: FilterSettings loopSettingOutputSettings :: OutputSettings loopSettingHooksSettings :: HooksSettings loopSettingRunSettings :: LoopSettings -> RunSettings loopSettingFilterSettings :: LoopSettings -> FilterSettings loopSettingOutputSettings :: LoopSettings -> OutputSettings loopSettingHooksSettings :: LoopSettings -> HooksSettings ..}) -> do [Chunk] -> IO () put [String -> Chunk indicatorChunk String "testing ", Chunk " ", String -> Chunk loopNameChunk String loopName] ([Chunk] -> IO ()) -> [[Chunk]] -> IO () forall (t :: * -> *) (m :: * -> *) a b. (Foldable t, Monad m) => (a -> m b) -> t a -> m () mapM_ [Chunk] -> IO () put ([[Chunk]] -> IO ()) -> [[Chunk]] -> IO () forall a b. (a -> b) -> a -> b $ RunSettings -> [[Chunk]] startingLines RunSettings loopSettingRunSettings Word64 start <- IO Word64 getMonotonicTimeNSec ExitCode ec <- RunSettings -> IO ExitCode startProcessAndWait RunSettings loopSettingRunSettings Word64 end <- IO Word64 getMonotonicTimeNSec [Chunk] -> IO () put ([Chunk] -> IO ()) -> [Chunk] -> IO () forall a b. (a -> b) -> a -> b $ ExitCode -> [Chunk] exitCodeChunks ExitCode ec let duration :: Word64 duration = Word64 end Word64 -> Word64 -> Word64 forall a. Num a => a -> a -> a - Word64 start [Chunk] -> IO () put ([Chunk] -> IO ()) -> [Chunk] -> IO () forall a b. (a -> b) -> a -> b $ Word64 -> [Chunk] durationChunks Word64 duration #ifdef MIN_VERSION_safe_coloured_text_terminfo getTermCaps :: IO TerminalCapabilities getTermCaps :: IO TerminalCapabilities getTermCaps = IO TerminalCapabilities getTerminalCapabilitiesFromEnv #else getTermCaps :: IO TerminalCapabilities getTermCaps = pure WithoutColours #endif