packages feed

key-state-0.0.0: tests/KeyStateSpec.hs

{-# LANGUAGE LambdaCase #-}
module KeyStateSpec where

import Test.Hspec
import KeyState

spec :: Spec
spec = do
  describe "updateKeyState" $ do
    context "Not touching" $ do
      it "Untouched key state (init)" $ do
        let ks = initKeyState :: KeyState Int
        let expected = KeyState KeyStatus'Untouched (Just 1)
        updateKeyState 1 ks False `shouldBe` expected

      it "Untouched key state" $ do
        let ks = initKeyState { ksCounter = Just 10 } :: KeyState Int
        let expected = KeyState KeyStatus'Untouched (Just 11)
        updateKeyState 1 ks False `shouldBe` expected

      it "Pressed key state (init)" $ do
        let ks = initKeyState { ksStatus = KeyStatus'Pressed } :: KeyState Int
        let expected = KeyState KeyStatus'Released Nothing
        updateKeyState 1 ks False `shouldBe` expected

      it "Pressed key state" $ do
        let ks = KeyState KeyStatus'Pressed (Just 10) :: KeyState Int
        let expected = KeyState KeyStatus'Released Nothing
        updateKeyState 1 ks False `shouldBe` expected

      it "Held key state" $ do
        let ks = KeyState KeyStatus'Held (Just 10) :: KeyState Int
        let expected = KeyState KeyStatus'Released Nothing
        updateKeyState 1 ks False `shouldBe` expected

      it "Released key state" $ do
        let ks = KeyState KeyStatus'Released (Just 10) :: KeyState Int
        let expected = KeyState KeyStatus'Untouched Nothing
        updateKeyState 1 ks False `shouldBe` expected

    context "Touching" $ do
      it "Untouched key state (init)" $ do
        let ks = initKeyState :: KeyState Int
        let expected = KeyState KeyStatus'Pressed Nothing
        updateKeyState 1 ks True `shouldBe` expected

      it "Untouched key state" $ do
        let ks = initKeyState { ksCounter = Just 10 } :: KeyState Int
        let expected = KeyState KeyStatus'Pressed Nothing
        updateKeyState 1 ks True `shouldBe` expected

      it "Pressed key state (init)" $ do
        let ks = initKeyState { ksStatus = KeyStatus'Pressed } :: KeyState Int
        let expected = KeyState KeyStatus'Held Nothing
        updateKeyState 1 ks True `shouldBe` expected

      it "Pressed key state" $ do
        let ks = KeyState KeyStatus'Pressed (Just 10) :: KeyState Int
        let expected = KeyState KeyStatus'Held Nothing
        updateKeyState 1 ks True `shouldBe` expected

      it "Held key state" $ do
        let ks = KeyState KeyStatus'Held (Just 10) :: KeyState Int
        let expected = KeyState KeyStatus'Held (Just 11)
        updateKeyState 1 ks True `shouldBe` expected

      it "Released key state" $ do
        let ks = KeyState KeyStatus'Released (Just 10) :: KeyState Int
        let expected = KeyState KeyStatus'Pressed Nothing
        updateKeyState 1 ks True `shouldBe` expected