packages feed

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

{-|
Module      : Monomer.Widgets.Singles.SpacerSpec
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 Spacer widget.
-}
module Monomer.Widgets.Singles.SpacerSpec (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.TestUtil
import Monomer.Widgets.Containers.Box
import Monomer.Widgets.Containers.Grid
import Monomer.Widgets.Containers.Stack
import Monomer.Widgets.Singles.Spacer

import qualified Monomer.Lens as L

spec :: Spec
spec = describe "Spacer/Filler" $ do
  spacerSpec
  fillerSpec

spacerSpec :: Spec
spacerSpec = describe "Spacer" $ do
  spacerSizeReqBox
  spacerSizeReqGrid
  spacerSizeReqStack

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

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

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

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

  where
    wenv = mockWenvEvtUnit ()
    (sizeReqW1, sizeReqH1) = nodeGetSizeReq wenv (hgrid [spacer])
    (sizeReqW2, sizeReqH2) = nodeGetSizeReq wenv (vgrid [spacer])

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

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

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

fillerSpec :: Spec
fillerSpec = describe "Filler" $ do
  fillerSizeReqBox
  fillerSizeReqGrid
  fillerSizeReqStack

fillerSizeReqBox :: Spec
fillerSizeReqBox = describe "fillerSizeReqBox" $ do
  it "should return (Expand 5 0.5, Expand 5 0.5)" $ do
    sizeReqW1 `shouldBe` expandSize 5 0.5
    sizeReqH1 `shouldBe` expandSize 5 0.5

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

fillerSizeReqGrid :: Spec
fillerSizeReqGrid = describe "fillerSizeReqGrid" $ do
  it "should return (Expand 5 0.5, Flex 5 0.5) for horizontal" $ do
    sizeReqW1 `shouldBe` expandSize 5 0.5
    sizeReqH1 `shouldBe` flexSize 5 0.5

  it "should return (Flex 5 0.5, Expand 5 0.5) for vertical" $ do
    sizeReqW2 `shouldBe` flexSize 5 0.5
    sizeReqH2 `shouldBe` expandSize 5 0.5

  where
    wenv = mockWenvEvtUnit ()
    (sizeReqW1, sizeReqH1) = nodeGetSizeReq wenv (hgrid [filler])
    (sizeReqW2, sizeReqH2) = nodeGetSizeReq wenv (vgrid [filler])

fillerSizeReqStack :: Spec
fillerSizeReqStack = describe "fillerSizeReqStack" $ do
  it "should return (Expand 5 0.5, Flex 5 0.5) for horizontal" $ do
    sizeReqW1 `shouldBe` expandSize 5 0.5
    sizeReqH1 `shouldBe` flexSize 5 0.5

  it "should return (Flex 5 0.5, Expand 5 0.5) for vertical" $ do
    sizeReqW2 `shouldBe` flexSize 5 0.5
    sizeReqH2 `shouldBe` expandSize 5 0.5

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