packages feed

rainbow-0.32.0.0: tests/colorTest.hs

module Main where

import Rainbow
import qualified Data.ByteString as BS
import Data.Function ((&))

colors8 :: [(String, Radiant)]
colors8 =
  [ ("(no color)", mempty)
  , ("black", black)
  , ("red", red)
  , ("green", green)
  , ("yellow", yellow)
  , ("blue", blue)
  , ("magenta", magenta)
  , ("cyan", cyan)
  , ("white", white)
  ]

colors256 :: [(String, Radiant)]
colors256
  = ("(no color)", mempty) : map mkColor [minBound..maxBound]
  where
    mkColor w = (show w, color256 w)

colorChunks8ByForeground :: [[Chunk String]]
colorChunks8ByForeground = do
  (fgColorName, fgColor) <- colors8
  (bgColorName, bgColor) <- colors8
  let lbl = "foreground " <> fgColorName <> " background " <> bgColorName
  return [ chunk lbl & fore fgColor & back bgColor
         , chunk "\n"
         ]

colorChunks8ByBackground :: [[Chunk String]]
colorChunks8ByBackground = do
  (bgColorName, bgColor) <- colors8
  (fgColorName, fgColor) <- colors8
  let lbl = "background " <> bgColorName <> " foreground " <> fgColorName
  return [ chunk lbl & fore fgColor & back bgColor
         , chunk "\n"
         ]

colorChunks256ByForeground :: [[Chunk String]]
colorChunks256ByForeground = do
  (fgColorName, fgColor) <- colors256
  (bgColorName, bgColor) <- colors256
  let lbl = "foreground " <> fgColorName <> " background " <> bgColorName
  return [ chunk lbl & fore fgColor & back bgColor
         , chunk "\n"
         ]

colorChunks256ByBackground :: [[Chunk String]]
colorChunks256ByBackground = do
  (bgColorName, bgColor) <- colors256
  (fgColorName, fgColor) <- colors256
  let lbl = "background " <> bgColorName <> " foreground " <> fgColorName
  return [ chunk lbl & fore fgColor & back bgColor
         , chunk "\n"
         ]

sep :: String -> IO ()
sep s = do
  putStrLn ""
  putStrLn ""
  putStrLn $ replicate 40 '='
  putStrLn s

main :: IO ()
main = do
  sep "8 Colors - sorted by foreground color"
  mapM_ BS.putStr . chunksToByteStrings toByteStringsColors8
    . concat $ colorChunks8ByForeground
  sep "8 Colors - sorted by background color"
  mapM_ BS.putStr . chunksToByteStrings toByteStringsColors8
    . concat $ colorChunks8ByBackground
  sep "256 Colors - sorted by foreground color"
  mapM_ BS.putStr . chunksToByteStrings toByteStringsColors256
    . concat $ colorChunks256ByForeground
  sep "256 Colors - sorted by background color"
  mapM_ BS.putStr . chunksToByteStrings toByteStringsColors256
    . concat $ colorChunks256ByBackground