From 5ae7b6a68253806c4251b243bfa48aeaf274e57b Mon Sep 17 00:00:00 2001 From: Jens Nolte <git@queezle.net> Date: Wed, 25 Aug 2021 00:49:39 +0200 Subject: [PATCH] Add tests for Disposable and ResourceManager --- quasar.cabal | 1 + test/Quasar/DisposableSpec.hs | 43 +++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+) create mode 100644 test/Quasar/DisposableSpec.hs diff --git a/quasar.cabal b/quasar.cabal index 07e78f5..3022eef 100644 --- a/quasar.cabal +++ b/quasar.cabal @@ -103,6 +103,7 @@ test-suite quasar-test main-is: Spec.hs other-modules: Quasar.AwaitableSpec + Quasar.DisposableSpec Quasar.ObservableSpec Quasar.Observable.ObservableHashMapSpec Quasar.Observable.ObservablePrioritySpec diff --git a/test/Quasar/DisposableSpec.hs b/test/Quasar/DisposableSpec.hs new file mode 100644 index 0000000..b410e80 --- /dev/null +++ b/test/Quasar/DisposableSpec.hs @@ -0,0 +1,43 @@ +module Quasar.DisposableSpec (spec) where + +import Control.Concurrent +import Control.Monad (void) +import Prelude +import Test.Hspec +import Quasar.Awaitable +import Quasar.Disposable + +spec :: Spec +spec = parallel $ do + describe "Disposable" $ do + describe "noDisposable" $ do + it "can be disposed" $ do + awaitIO =<< dispose noDisposable + + it "can be awaited" $ do + awaitIO (isDisposed noDisposable) + pure () :: IO () + + describe "ResourceManager" $ do + it "can be created" $ do + void newResourceManager + + it "can be created and disposed" $ do + resourceManager <- newResourceManager + awaitIO =<< dispose resourceManager + + it "can be created and disposed" $ do + withResourceManager \_ -> pure () + + it "can \"dispose\" a noDisposable" $ do + withResourceManager \resourceManager -> do + attachDisposable resourceManager noDisposable + + it "can dispose an awaitable that is completed asynchronously" $ do + avar <- newAsyncVar :: IO (AsyncVar ()) + void $ forkIO $ do + threadDelay 100000 + putAsyncVar_ avar () + + withResourceManager \resourceManager -> do + attachDisposable resourceManager (alreadyDisposing avar) -- GitLab