packages feed

monomer-1.0.0.0: test/unit/Monomer/Widgets/Singles/SeparatorLineSpec.hs

{-|
Module      : Monomer.Widgets.Singles.SeparatorLineSpec
Copyright   : (c) 2018 Francisco Vallarino
License     : BSD-3-Clause (see the LICENSE file)
Maintainer  : fjvallarino@gmail.com
Stability   : experimental
Portability : non-portable

Unit tests for Separator Line widget.
-}
module Monomer.Widgets.Singles.SeparatorLineSpec (spec) where

import Control.Lens ((&), (^.), (.~))
import Data.Text (Text)
import Test.Hspec

import qualified Data.Sequence as Seq
import qualified Data.Text as T

import Monomer.Core
import Monomer.Core.Combinators
import Monomer.Core.Themes.SampleThemes
import Monomer.TestUtil
import Monomer.Widgets.Containers.Box
import Monomer.Widgets.Containers.Grid
import Monomer.Widgets.Containers.Stack
import Monomer.Widgets.Singles.SeparatorLine

import qualified Monomer.Lens as L

spec :: Spec
spec = describe "SeparatorLine" $ do
  separatorLineSizeReqBox
  separatorLineSizeReqGrid
  separatorLineSizeReqStack

separatorLineSizeReqBox :: Spec
separatorLineSizeReqBox = describe "separatorLineSizeReqBox" $ do
  it "should return (Fixed 1, Fixed 1)" $ do
    sizeReqW1 `shouldBe` fixedSize 1
    sizeReqH1 `shouldBe` fixedSize 1

  where
    wenv = mockWenvEvtUnit ()
    (sizeReqW1, sizeReqH1) = nodeGetSizeReq wenv (box separatorLine)

separatorLineSizeReqGrid :: Spec
separatorLineSizeReqGrid = describe "separatorLineSizeReqGrid" $ do
  it "should return (Fixed 1, Flex 10 0.5) for horizontal" $ do
    sizeReqW1 `shouldBe` fixedSize 1
    sizeReqH1 `shouldBe` flexSize 10 0.5

  it "should return (Flex 10 0.5, Fixed 1) for vertical" $ do
    sizeReqW2 `shouldBe` flexSize 10 0.5
    sizeReqH2 `shouldBe` fixedSize 1

  where
    wenv = mockWenvEvtUnit ()
      & L.theme .~ darkTheme
    (sizeReqW1, sizeReqH1) = nodeGetSizeReq wenv (hgrid [separatorLine])
    (sizeReqW2, sizeReqH2) = nodeGetSizeReq wenv (vgrid [separatorLine])

separatorLineSizeReqStack :: Spec
separatorLineSizeReqStack = describe "separatorLineSizeReqStack" $ do
  it "should return (Fixed 5, Flex 10 0.5) for horizontal" $ do
    sizeReqW1 `shouldBe` fixedSize 5
    sizeReqH1 `shouldBe` flexSize 10 0.5

  it "should return (Flex 10 0.5, Fixed 5) for vertical" $ do
    sizeReqW2 `shouldBe` flexSize 10 0.5
    sizeReqH2 `shouldBe` fixedSize 5

  where
    wenv = mockWenv ()
    (sizeReqW1, sizeReqH1) = nodeGetSizeReq wenv (hstack [separatorLine_ [width 5]])
    (sizeReqW2, sizeReqH2) = nodeGetSizeReq wenv (vstack [separatorLine_ [width 5]])