packages feed

sectile-0.1.0.0: test/Data/Sectile/TmuxSpec.hs

module Data.Sectile.TmuxSpec (spec) where

import qualified Data.ByteString.Builder as B
import qualified Data.ByteString.Lazy as BL
import Data.Sectile.Tmux
import Test.Hspec

spec :: Spec
spec = do
  describe "Tmux rendering" $ do
    it "renders unstyled chunk as plain text" $ do
      let chunk = Chunk "hello" noStyle
          res = renderChunksUtf8BSBuilder With24BitColours [chunk]
      BL.toStrict (B.toLazyByteString res) `shouldBe` "hello"

    it "renders fg colour" $ do
      let style = noStyle {chunkStyleForeground = Just (Colour8 Bright Red)}
          chunk = Chunk "hello" style
          res = renderChunksUtf8BSBuilder With24BitColours [chunk]
      BL.toStrict (B.toLazyByteString res) `shouldBe` "#[fg=red]hello#[default]"

    it "renders bg colour and bold" $ do
      let style = noStyle {chunkStyleBackground = Just (Colour24Bit 255 0 255), chunkStyleConsoleIntensity = Just BoldIntensity}
          chunk = Chunk "hello" style
          res = renderChunksUtf8BSBuilder With24BitColours [chunk]
      BL.toStrict (B.toLazyByteString res) `shouldBe` "#[bg=#ff00ff,bold]hello#[default]"

    it "renders multiple chunks" $ do
      let chunk1 = Chunk "hello " (noStyle {chunkStyleForeground = Just (Colour8 Dull Blue)})
          chunk2 = Chunk "world" noStyle
          res = renderChunksUtf8BSBuilder With24BitColours [chunk1, chunk2]
      BL.toStrict (B.toLazyByteString res) `shouldBe` "#[fg=blue]hello #[default]world"

    it "handles WithoutColours capability" $ do
      let style = noStyle {chunkStyleForeground = Just (Colour8 Bright Red)}
          chunk = Chunk "hello" style
          res = renderChunksUtf8BSBuilder WithoutColours [chunk]
      BL.toStrict (B.toLazyByteString res) `shouldBe` "hello"