diff --git a/src/Quasar/PreludeExtras.hs b/src/Quasar/PreludeExtras.hs index c1d1edd9d96be88482bf8d5e65792d9903e8ea30..9d9b6ad932c3688dd26264f8388b03b536aab71a 100644 --- a/src/Quasar/PreludeExtras.hs +++ b/src/Quasar/PreludeExtras.hs @@ -16,9 +16,7 @@ import Data.HashSet qualified as HS import Data.Hashable qualified as Hashable import Data.List qualified as List import Data.Maybe qualified as Maybe -import GHC.Records.Compat (HasField, getField, setField) import GHC.Stack.Types qualified -import GHC.TypeLits (Symbol) import Quasar.Utils.ExtraT io :: IO a -> IO a diff --git a/test/Quasar/ResourceManagerSpec.hs b/test/Quasar/ResourceManagerSpec.hs index 6ec68ee910379c7119caf5b043051594dc50430a..ab8445b2769253bd51c3b26afd612504feeb6482 100644 --- a/test/Quasar/ResourceManagerSpec.hs +++ b/test/Quasar/ResourceManagerSpec.hs @@ -65,7 +65,20 @@ spec = parallel $ do liftIO $ throwIO TestException \TestException -> True + it "handles an exception while disposing" $ io do + (`shouldThrow` \(_ :: CombinedException) -> True) do + withRootResourceManager do + registerDisposeAction $ throwIO TestException + liftIO $ threadDelay 100000 + it "passes an exception to the root resource manager" $ io do + (`shouldThrow` \(_ :: CombinedException) -> True) do + withRootResourceManager do + withSubResourceManagerM do + registerDisposeAction $ throwIO TestException + liftIO $ threadDelay 100000 + + it "passes an exception to the root resource manager when closing the inner resource manager first" $ io do (`shouldThrow` \(_ :: CombinedException) -> True) do withRootResourceManager do withSubResourceManagerM do