packages feed

ribosome-root-0.3.0.0: test/u/SettingSpec.hs

{-# OPTIONS_GHC -F -pgmF htfpp #-}
{-# LANGUAGE TemplateHaskell #-}

module SettingSpec(
  htf_thisModulesTests,
) where

import Control.Monad.DeepError (catchAt)
import Data.DeepPrisms (deepPrisms)
import Data.Default (def)
import Data.Functor (void)
import Test.Framework

import Ribosome.Config.Setting (setting, updateSetting)
import Ribosome.Control.Monad.Ribo (Ribo)
import Ribosome.Data.Setting (Setting(Setting))
import Ribosome.Data.SettingError (SettingError)
import Ribosome.Error.Report.Class (ReportError(..))
import Ribosome.Nvim.Api.RpcCall (RpcError)
import Ribosome.Test.Unit (unitSpec)

data SettingSpecError =
  Sett SettingError
  |
  Rpc RpcError
  deriving Show

instance ReportError SettingSpecError where
  errorReport = undefined

deepPrisms ''SettingSpecError

sett :: Setting Int
sett = Setting "name" True Nothing

settingSuccessSpec :: Ribo s SettingSpecError ()
settingSuccessSpec = do
  updateSetting sett 5
  r <- setting sett
  gassertEqual 5 r

test_settingSuccess :: IO ()
test_settingSuccess =
  unitSpec def () settingSuccessSpec

settingFailSpec :: Ribo s SettingSpecError ()
settingFailSpec = do
  ea <- catchAt catch $ Right <$> result
  void $ gassertLeft ea
  where
    result :: Ribo s SettingSpecError Int
    result = setting sett
    catch :: SettingError -> Ribo s SettingSpecError (Either SettingError Int)
    catch = return . Left

test_settingFail :: IO ()
test_settingFail =
  unitSpec def () settingFailSpec