xmonad-contrib/tests/NoBorders.hs
2021-01-27 20:14:17 +00:00

75 lines
2.6 KiB
Haskell

{-# LANGUAGE RecordWildCards #-}
{-# OPTIONS_GHC -Wall #-}
module NoBorders where
import Test.Hspec
import qualified Data.Map as M
import XMonad hiding (Screen)
import qualified XMonad.Layout.NoBorders as NB
import XMonad.StackSet
spec :: Spec
spec = do
describe "dualhead, fullscreen float on each" $ do
let s1 = differentiate [1]
let s2 = differentiate [2]
let floats = [(1, rrFull), (2, rrFull)]
let ws = wsDualHead s1 s2 floats
context "Ambiguity(Never)" $ do
let amb = NB.Never
it "removes border on current screen" $ do
NB.hiddens amb ws r1 s1 [] `shouldBe` [1]
NB.hiddens amb ws r3 s1 [] `shouldBe` [1]
it "removes border on visible screen" $ do
NB.hiddens amb ws r2 s2 [] `shouldBe` [2]
NB.hiddens amb ws r4 s2 [] `shouldBe` [2]
context "Ambiguity(OnlyScreenFloat)" $ do
let amb = NB.OnlyScreenFloat
it "removes border on current screen" $ do
NB.hiddens amb ws r1 s1 [] `shouldBe` [1]
NB.hiddens amb ws r3 s1 [] `shouldBe` [1]
it "removes border on visible screen" $ do
NB.hiddens amb ws r2 s2 [] `shouldBe` [2]
NB.hiddens amb ws r4 s2 [] `shouldBe` [2]
context "Ambiguity(OnlyLayoutFloat)" $ do
let amb = NB.OnlyLayoutFloat
it "removes border on current screen" $ do
NB.hiddens amb ws r1 s1 [] `shouldBe` [1]
it "removes border on visible screen" $ do
NB.hiddens amb ws r2 s2 [] `shouldBe` [2]
-- +------+------+
-- | r1 | r2 |
-- | | |
-- |+----+|+----+|
-- || r3 ||| r4 ||
-- |+----+|+----+|
-- +------+------+
r1, r2, r3, r4 :: Rectangle
r1 = Rectangle 0 0 100 100
r2 = Rectangle 100 0 100 100
r3 = Rectangle 10 10 80 80
r4 = Rectangle 110 10 80 80
rrFull :: RationalRect
rrFull = RationalRect 0 0 1 1
-- | Current screen @r1@ with window stack @w1@,
-- visible screen @r2@ with ws @w2@,
-- no hidden screens, maybe some floats.
wsDualHead :: Maybe (Stack Window) -> Maybe (Stack Window)
-> [(Window, RationalRect)] -> WindowSet
wsDualHead w1 w2 f = StackSet{..}
where
current = mkScreen 1 r1 w1; visible = [mkScreen 2 r2 w2]; hidden = []
floating = M.fromList f
mkScreen :: ScreenId -> Rectangle -> Maybe (Stack Window)
-> Screen WorkspaceId l Window ScreenId ScreenDetail
mkScreen i r s = Screen{ workspace = w, screen = i, screenDetail = sd }
where
w = Workspace{ tag = show i, layout = undefined, stack = s }
sd = SD{ screenRect = r }