From 8aec308ae2030f8bff7bc58ec435b8a610951d0a Mon Sep 17 00:00:00 2001 From: Sibi Prabakaran Date: Sun, 14 Jun 2020 15:40:18 +0530 Subject: Cleanup and add some tests --- src/Xmobar/Plugins/Monitors/Cpu.hs | 12 +++------- test/Xmobar/Plugins/Monitors/CpuSpec.hs | 41 +++++++++++++++++++++++++++++++++ xmobar.cabal | 3 +++ 3 files changed, 47 insertions(+), 9 deletions(-) create mode 100644 test/Xmobar/Plugins/Monitors/CpuSpec.hs diff --git a/src/Xmobar/Plugins/Monitors/Cpu.hs b/src/Xmobar/Plugins/Monitors/Cpu.hs index f234dcf..02d2949 100644 --- a/src/Xmobar/Plugins/Monitors/Cpu.hs +++ b/src/Xmobar/Plugins/Monitors/Cpu.hs @@ -138,12 +138,6 @@ parseCpu cref = percent = map safeDiv dif return $ convertToCpuData percent -conditionalCompute :: [String] -> String -> IO String -> IO String -conditionalCompute allFields field action = if field `elem` allFields - then action - else pure [] - - data Field = Field { fieldName :: !String, fieldCompute :: !ShouldCompute @@ -187,8 +181,8 @@ computeFields (x:xs) inputFields = else (Field {fieldName = x, fieldCompute = Skip}) : (computeFields xs inputFields) formatCpu :: CpuArguments -> CpuData -> IO [String] -formatCpu args@CpuArguments{..} cpuData = do - strs <- mapM (formatField cpuParams cpuOpts cpuData) cpuFields +formatCpu CpuArguments{..} cpuInfo = do + strs <- mapM (formatField cpuParams cpuOpts cpuInfo) cpuFields pure $ filter (not . null) strs getInputFields :: CpuArguments -> [String] @@ -214,7 +208,7 @@ getArguments :: [String] -> IO CpuArguments getArguments cpuArgs = do initCpuData <- cpuData cpuDataRef <- newIORef initCpuData - cpuData <- parseCpu cpuDataRef + void $ parseCpu cpuDataRef cpuParams <- computePureConfig cpuArgs cpuConfig cpuInputTemplate <- runTemplateParser cpuParams cpuAllTemplate <- runExportParser (pExport cpuParams) diff --git a/test/Xmobar/Plugins/Monitors/CpuSpec.hs b/test/Xmobar/Plugins/Monitors/CpuSpec.hs new file mode 100644 index 0000000..449acd5 --- /dev/null +++ b/test/Xmobar/Plugins/Monitors/CpuSpec.hs @@ -0,0 +1,41 @@ +module Xmobar.Plugins.Monitors.CpuSpec + ( + spec, main + ) where + +import Test.Hspec +import Xmobar.Plugins.Monitors.Common +import Xmobar.Plugins.Monitors.Cpu +import Data.List + +main :: IO () +main = hspec spec + +spec :: Spec +spec = + describe "CPU Spec" $ do + it "works with total template" $ + do let args = ["-L","3","-H","50","--normal","green","--high","red", "-t", "Cpu: %"] + cpuArgs <- getArguments args + cpuValue <- runCpu cpuArgs + cpuValue `shouldSatisfy` (\item -> "Cpu:" `isPrefixOf` item) + it "works with bar template" $ + do let args = ["-L","3","-H","50","--normal","green","--high","red", "-t", "Cpu: % "] + cpuArgs <- getArguments args + cpuValue <- runCpu cpuArgs + cpuValue `shouldSatisfy` (\item -> "::" `isSuffixOf` item) + it "works with no icon pattern template" $ + do let args = ["-L","3","-H","50","--normal","green","--high","red", "-t", "Cpu: % ", "--", "--load-icon-pattern", ""] + cpuArgs <- getArguments args + cpuValue <- runCpu cpuArgs + cpuValue `shouldSatisfy` (\item -> not $ "% ", "--", "--load-icon-pattern", ""] + cpuArgs <- getArguments args + cpuValue <- runCpu cpuArgs + cpuValue `shouldSatisfy` (\item -> " "] + cpuArgs <- getArguments args + cpuValue <- runCpu cpuArgs + cpuValue `shouldSatisfy` (\item -> "Cpu:" `isPrefixOf` cpuValue) diff --git a/xmobar.cabal b/xmobar.cabal index faedf51..7bfe85f 100644 --- a/xmobar.cabal +++ b/xmobar.cabal @@ -334,6 +334,8 @@ test-suite XmobarTest Xmobar.Plugins.Monitors.Common.Types Xmobar.Plugins.Monitors.Common.Output Xmobar.Plugins.Monitors.Common.Files + Xmobar.Plugins.Monitors.Cpu + Xmobar.Plugins.Monitors.Common.Run Xmobar.Run.Exec Xmobar.App.Timer Xmobar.System.Signal @@ -345,6 +347,7 @@ test-suite XmobarTest other-modules: Xmobar.Plugins.Monitors.Volume Xmobar.Plugins.Monitors.Alsa Xmobar.Plugins.Monitors.AlsaSpec + Xmobar.Plugins.Monitors.CpuSpec cpp-options: -DALSA -- cgit v1.2.3