packages feed

sydtest 0.19.0.0 → 0.20.0.0

raw patch · 6 files changed

+222/−6 lines, 6 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

+ Test.Syd.OptParse: [flagReportFile] :: Flags -> !Maybe (Path Abs File)
+ Test.Syd.OptParse: [flagSkipPassed] :: Flags -> !Bool
+ Test.Syd.OptParse: [settingReportFile] :: Settings -> !Maybe (Path Abs File)
+ Test.Syd.OptParse: [settingSkipPassed] :: Settings -> !Bool
+ Test.Syd.ReRun: instance Autodocodec.Class.HasCodec Test.Syd.ReRun.ReportTree
+ Test.Syd.ReRun: instance GHC.Classes.Eq Test.Syd.ReRun.ReportTree
+ Test.Syd.ReRun: instance GHC.Generics.Generic Test.Syd.ReRun.ReportTree
+ Test.Syd.ReRun: instance GHC.Show.Show Test.Syd.ReRun.ReportTree
+ Test.Syd.ReRun: withRerunByReport :: forall (outers :: [Type]) inner r. Settings -> (TestDefM outers inner r -> IO (Timed ResultForest)) -> TestDefM outers inner r -> IO (Timed ResultForest)
- Test.Syd: SetupFunc :: (forall r. (resource -> IO r) -> IO r) -> SetupFunc resource
+ Test.Syd: SetupFunc :: (forall r. () => (resource -> IO r) -> IO r) -> SetupFunc resource
- Test.Syd: [DefAfterAllNode] :: (HList outers -> IO ()) -> SpecDefForest outers inner extra -> SpecDefTree outers inner extra
+ Test.Syd: [DefAfterAllNode] :: forall (outers :: [Type]) inner extra. (HList outers -> IO ()) -> SpecDefForest outers inner extra -> SpecDefTree outers inner extra
- Test.Syd: [DefAroundAllNode] :: ((outer -> IO ()) -> IO ()) -> SpecDefForest (outer ': otherOuters) inner extra -> SpecDefTree otherOuters inner extra
+ Test.Syd: [DefAroundAllNode] :: forall outer (outers :: [Type]) inner extra. ((outer -> IO ()) -> IO ()) -> SpecDefForest (outer ': outers) inner extra -> SpecDefTree outers inner extra
- Test.Syd: [DefAroundAllWithNode] :: ((newOuter -> IO ()) -> oldOuter -> IO ()) -> SpecDefForest (newOuter ': (oldOuter ': otherOuters)) inner extra -> SpecDefTree (oldOuter ': otherOuters) inner extra
+ Test.Syd: [DefAroundAllWithNode] :: forall newOuter oldOuter (otherOuters :: [Type]) inner extra. ((newOuter -> IO ()) -> oldOuter -> IO ()) -> SpecDefForest (newOuter ': (oldOuter ': otherOuters)) inner extra -> SpecDefTree (oldOuter ': otherOuters) inner extra
- Test.Syd: [DefBeforeAllNode] :: IO outer -> SpecDefForest (outer ': otherOuters) inner extra -> SpecDefTree otherOuters inner extra
+ Test.Syd: [DefBeforeAllNode] :: forall outer (outers :: [Type]) inner extra. IO outer -> SpecDefForest (outer ': outers) inner extra -> SpecDefTree outers inner extra
- Test.Syd: [DefBeforeAllWithNode] :: (oldOuter -> IO newOuter) -> SpecDefForest (newOuter ': (oldOuter ': otherOuters)) inner extra -> SpecDefTree (oldOuter ': otherOuters) inner extra
+ Test.Syd: [DefBeforeAllWithNode] :: forall oldOuter newOuter (otherOuters :: [Type]) inner extra. (oldOuter -> IO newOuter) -> SpecDefForest (newOuter ': (oldOuter ': otherOuters)) inner extra -> SpecDefTree (oldOuter ': otherOuters) inner extra
- Test.Syd: [DefDescribeNode] :: Text -> SpecDefForest outers inner extra -> SpecDefTree outers inner extra
+ Test.Syd: [DefDescribeNode] :: forall (outers :: [Type]) inner extra. Text -> SpecDefForest outers inner extra -> SpecDefTree outers inner extra
- Test.Syd: [DefExpectationNode] :: ExpectationMode -> SpecDefForest outers inner extra -> SpecDefTree outers inner extra
+ Test.Syd: [DefExpectationNode] :: forall (outers :: [Type]) inner extra. ExpectationMode -> SpecDefForest outers inner extra -> SpecDefTree outers inner extra
- Test.Syd: [DefFlakinessNode] :: FlakinessMode -> SpecDefForest outers inner extra -> SpecDefTree outers inner extra
+ Test.Syd: [DefFlakinessNode] :: forall (outers :: [Type]) inner extra. FlakinessMode -> SpecDefForest outers inner extra -> SpecDefTree outers inner extra
- Test.Syd: [DefParallelismNode] :: Parallelism -> SpecDefForest outers inner extra -> SpecDefTree outers inner extra
+ Test.Syd: [DefParallelismNode] :: forall (outers :: [Type]) inner extra. Parallelism -> SpecDefForest outers inner extra -> SpecDefTree outers inner extra
- Test.Syd: [DefPendingNode] :: Text -> Maybe Text -> SpecDefTree outers inner extra
+ Test.Syd: [DefPendingNode] :: forall (outers :: [Type]) inner extra. Text -> Maybe Text -> SpecDefTree outers inner extra
- Test.Syd: [DefRandomisationNode] :: ExecutionOrderRandomisation -> SpecDefForest outers inner extra -> SpecDefTree outers inner extra
+ Test.Syd: [DefRandomisationNode] :: forall (outers :: [Type]) inner extra. ExecutionOrderRandomisation -> SpecDefForest outers inner extra -> SpecDefTree outers inner extra
- Test.Syd: [DefRetriesNode] :: (Word -> Word) -> SpecDefForest outers inner extra -> SpecDefTree outers inner extra
+ Test.Syd: [DefRetriesNode] :: forall (outers :: [Type]) inner extra. (Word -> Word) -> SpecDefForest outers inner extra -> SpecDefTree outers inner extra
- Test.Syd: [DefSetupNode] :: IO () -> SpecDefForest outers inner extra -> SpecDefTree outers inner extra
+ Test.Syd: [DefSetupNode] :: forall (outers :: [Type]) inner extra. IO () -> SpecDefForest outers inner extra -> SpecDefTree outers inner extra
- Test.Syd: [DefSpecifyNode] :: Text -> TDef (ProgressReporter -> ((HList outers -> inner -> IO ()) -> IO ()) -> IO TestRunResult) -> extra -> SpecDefTree outers inner extra
+ Test.Syd: [DefSpecifyNode] :: forall (outers :: [Type]) inner extra. Text -> TDef (ProgressReporter -> ((HList outers -> inner -> IO ()) -> IO ()) -> IO TestRunResult) -> extra -> SpecDefTree outers inner extra
- Test.Syd: [DefTimeoutNode] :: (Timeout -> Timeout) -> SpecDefForest outers inner extra -> SpecDefTree outers inner extra
+ Test.Syd: [DefTimeoutNode] :: forall (outers :: [Type]) inner extra. (Timeout -> Timeout) -> SpecDefForest outers inner extra -> SpecDefTree outers inner extra
- Test.Syd: [DefWrapNode] :: (IO () -> IO ()) -> SpecDefForest outers inner extra -> SpecDefTree outers inner extra
+ Test.Syd: [DefWrapNode] :: forall (outers :: [Type]) inner extra. (IO () -> IO ()) -> SpecDefForest outers inner extra -> SpecDefTree outers inner extra
- Test.Syd: [unSetupFunc] :: SetupFunc resource -> forall r. (resource -> IO r) -> IO r
+ Test.Syd: [unSetupFunc] :: SetupFunc resource -> forall r. () => (resource -> IO r) -> IO r
- Test.Syd: after :: (inner -> IO ()) -> TestDefM outers inner result -> TestDefM outers inner result
+ Test.Syd: after :: forall inner (outers :: [Type]) result. (inner -> IO ()) -> TestDefM outers inner result -> TestDefM outers inner result
- Test.Syd: afterAll :: (outer -> IO ()) -> TestDefM (outer ': otherOuters) inner result -> TestDefM (outer ': otherOuters) inner result
+ Test.Syd: afterAll :: forall outer (otherOuters :: [Type]) inner result. (outer -> IO ()) -> TestDefM (outer ': otherOuters) inner result -> TestDefM (outer ': otherOuters) inner result
- Test.Syd: afterAll' :: (HList outers -> IO ()) -> TestDefM outers inner result -> TestDefM outers inner result
+ Test.Syd: afterAll' :: forall (outers :: [Type]) inner result. (HList outers -> IO ()) -> TestDefM outers inner result -> TestDefM outers inner result
- Test.Syd: afterAll_ :: IO () -> TestDefM outers inner result -> TestDefM outers inner result
+ Test.Syd: afterAll_ :: forall (outers :: [Type]) inner result. IO () -> TestDefM outers inner result -> TestDefM outers inner result
- Test.Syd: after_ :: IO () -> TestDefM outers inner result -> TestDefM outers inner result
+ Test.Syd: after_ :: forall (outers :: [Type]) inner result. IO () -> TestDefM outers inner result -> TestDefM outers inner result
- Test.Syd: around :: ((inner -> IO ()) -> IO ()) -> TestDefM outers inner result -> TestDefM outers () result
+ Test.Syd: around :: forall inner (outers :: [Type]) result. ((inner -> IO ()) -> IO ()) -> TestDefM outers inner result -> TestDefM outers () result
- Test.Syd: aroundAll :: ((outer -> IO ()) -> IO ()) -> TestDefM (outer ': otherOuters) inner result -> TestDefM otherOuters inner result
+ Test.Syd: aroundAll :: forall outer (otherOuters :: [Type]) inner result. ((outer -> IO ()) -> IO ()) -> TestDefM (outer ': otherOuters) inner result -> TestDefM otherOuters inner result
- Test.Syd: aroundAllWith :: forall newOuter oldOuter otherOuters inner result. ((newOuter -> IO ()) -> oldOuter -> IO ()) -> TestDefM (newOuter ': (oldOuter ': otherOuters)) inner result -> TestDefM (oldOuter ': otherOuters) inner result
+ Test.Syd: aroundAllWith :: forall newOuter oldOuter (otherOuters :: [Type]) inner result. ((newOuter -> IO ()) -> oldOuter -> IO ()) -> TestDefM (newOuter ': (oldOuter ': otherOuters)) inner result -> TestDefM (oldOuter ': otherOuters) inner result
- Test.Syd: aroundAll_ :: (IO () -> IO ()) -> TestDefM outers inner result -> TestDefM outers inner result
+ Test.Syd: aroundAll_ :: forall (outers :: [Type]) inner result. (IO () -> IO ()) -> TestDefM outers inner result -> TestDefM outers inner result
- Test.Syd: aroundWith :: forall newInner oldInner outers result. ((newInner -> IO ()) -> oldInner -> IO ()) -> TestDefM outers newInner result -> TestDefM outers oldInner result
+ Test.Syd: aroundWith :: forall newInner oldInner (outers :: [Type]) result. ((newInner -> IO ()) -> oldInner -> IO ()) -> TestDefM outers newInner result -> TestDefM outers oldInner result
- Test.Syd: around_ :: (IO () -> IO ()) -> TestDefM outers inner result -> TestDefM outers inner result
+ Test.Syd: around_ :: forall (outers :: [Type]) inner result. (IO () -> IO ()) -> TestDefM outers inner result -> TestDefM outers inner result
- Test.Syd: before :: IO inner -> TestDefM outers inner result -> TestDefM outers () result
+ Test.Syd: before :: forall inner (outers :: [Type]) result. IO inner -> TestDefM outers inner result -> TestDefM outers () result
- Test.Syd: beforeAll :: IO outer -> TestDefM (outer ': otherOuters) inner result -> TestDefM otherOuters inner result
+ Test.Syd: beforeAll :: forall outer (otherOuters :: [Type]) inner result. IO outer -> TestDefM (outer ': otherOuters) inner result -> TestDefM otherOuters inner result
- Test.Syd: beforeAllWith :: (previousOuter -> IO newOuter) -> TestDefM (newOuter ': (previousOuter ': otherOuters)) inner result -> TestDefM (previousOuter ': otherOuters) inner result
+ Test.Syd: beforeAllWith :: forall previousOuter newOuter (otherOuters :: [Type]) inner result. (previousOuter -> IO newOuter) -> TestDefM (newOuter ': (previousOuter ': otherOuters)) inner result -> TestDefM (previousOuter ': otherOuters) inner result
- Test.Syd: beforeAll_ :: IO () -> TestDefM outers inner result -> TestDefM outers inner result
+ Test.Syd: beforeAll_ :: forall (outers :: [Type]) inner result. IO () -> TestDefM outers inner result -> TestDefM outers inner result
- Test.Syd: before_ :: IO () -> TestDefM outers inner result -> TestDefM outers inner result
+ Test.Syd: before_ :: forall (outers :: [Type]) inner result. IO () -> TestDefM outers inner result -> TestDefM outers inner result
- Test.Syd: describe :: String -> TestDefM outers inner () -> TestDefM outers inner ()
+ Test.Syd: describe :: forall (outers :: [Type]) inner. String -> TestDefM outers inner () -> TestDefM outers inner ()
- Test.Syd: doNotRandomiseExecutionOrder :: TestDefM a b c -> TestDefM a b c
+ Test.Syd: doNotRandomiseExecutionOrder :: forall (a :: [Type]) b c. TestDefM a b c -> TestDefM a b c
- Test.Syd: execTestDefM :: Settings -> TestDefM outers inner result -> IO (TestForest outers inner)
+ Test.Syd: execTestDefM :: forall (outers :: [Type]) inner result. Settings -> TestDefM outers inner result -> IO (TestForest outers inner)
- Test.Syd: expectFailing :: TestDefM a b c -> TestDefM a b c
+ Test.Syd: expectFailing :: forall (a :: [Type]) b c. TestDefM a b c -> TestDefM a b c
- Test.Syd: expectPassing :: TestDefM a b c -> TestDefM a b c
+ Test.Syd: expectPassing :: forall (a :: [Type]) b c. TestDefM a b c -> TestDefM a b c
- Test.Syd: flaky :: Word -> TestDefM a b c -> TestDefM a b c
+ Test.Syd: flaky :: forall (a :: [Type]) b c. Word -> TestDefM a b c -> TestDefM a b c
- Test.Syd: flakyWith :: Word -> String -> TestDefM a b c -> TestDefM a b c
+ Test.Syd: flakyWith :: forall (a :: [Type]) b c. Word -> String -> TestDefM a b c -> TestDefM a b c
- Test.Syd: getTestDescriptionPath :: TestDefM outers inner [Text]
+ Test.Syd: getTestDescriptionPath :: forall (outers :: [Type]) inner. TestDefM outers inner [Text]
- Test.Syd: it :: forall outers inner test. (HasCallStack, IsTest test, Arg1 test ~ (), Arg2 test ~ inner) => String -> test -> TestDefM outers inner ()
+ Test.Syd: it :: forall (outers :: [Type]) inner test. (HasCallStack, IsTest test, Arg1 test ~ (), Arg2 test ~ inner) => String -> test -> TestDefM outers inner ()
- Test.Syd: itWithAll :: (HasCallStack, IsTest test, Arg1 test ~ HList outers, Arg2 test ~ inner) => String -> test -> TestDefM outers inner ()
+ Test.Syd: itWithAll :: forall test (outers :: [Type]) inner. (HasCallStack, IsTest test, Arg1 test ~ HList outers, Arg2 test ~ inner) => String -> test -> TestDefM outers inner ()
- Test.Syd: itWithBoth :: (HasCallStack, IsTest test, Arg1 test ~ outer, Arg2 test ~ inner) => String -> test -> TestDefM (outer ': otherOuters) inner ()
+ Test.Syd: itWithBoth :: forall test outer inner (otherOuters :: [Type]). (HasCallStack, IsTest test, Arg1 test ~ outer, Arg2 test ~ inner) => String -> test -> TestDefM (outer ': otherOuters) inner ()
- Test.Syd: itWithOuter :: (HasCallStack, IsTest test, Arg1 test ~ inner, Arg2 test ~ outer) => String -> test -> TestDefM (outer ': otherOuters) inner ()
+ Test.Syd: itWithOuter :: forall test inner outer (otherOuters :: [Type]). (HasCallStack, IsTest test, Arg1 test ~ inner, Arg2 test ~ outer) => String -> test -> TestDefM (outer ': otherOuters) inner ()
- Test.Syd: modifyMaxDiscardRatio :: (Int -> Int) -> TestDefM a b c -> TestDefM a b c
+ Test.Syd: modifyMaxDiscardRatio :: forall (a :: [Type]) b c. (Int -> Int) -> TestDefM a b c -> TestDefM a b c
- Test.Syd: modifyMaxShrinks :: (Int -> Int) -> TestDefM a b c -> TestDefM a b c
+ Test.Syd: modifyMaxShrinks :: forall (a :: [Type]) b c. (Int -> Int) -> TestDefM a b c -> TestDefM a b c
- Test.Syd: modifyMaxSize :: (Int -> Int) -> TestDefM a b c -> TestDefM a b c
+ Test.Syd: modifyMaxSize :: forall (a :: [Type]) b c. (Int -> Int) -> TestDefM a b c -> TestDefM a b c
- Test.Syd: modifyMaxSuccess :: (Int -> Int) -> TestDefM a b c -> TestDefM a b c
+ Test.Syd: modifyMaxSuccess :: forall (a :: [Type]) b c. (Int -> Int) -> TestDefM a b c -> TestDefM a b c
- Test.Syd: modifyRetries :: (Word -> Word) -> TestDefM a b c -> TestDefM a b c
+ Test.Syd: modifyRetries :: forall (a :: [Type]) b c. (Word -> Word) -> TestDefM a b c -> TestDefM a b c
- Test.Syd: modifyRunSettings :: (TestRunSettings -> TestRunSettings) -> TestDefM a b c -> TestDefM a b c
+ Test.Syd: modifyRunSettings :: forall (a :: [Type]) b c. (TestRunSettings -> TestRunSettings) -> TestDefM a b c -> TestDefM a b c
- Test.Syd: modifyTimeout :: (Timeout -> Timeout) -> TestDefM a b c -> TestDefM a b c
+ Test.Syd: modifyTimeout :: forall (a :: [Type]) b c. (Timeout -> Timeout) -> TestDefM a b c -> TestDefM a b c
- Test.Syd: notFlaky :: TestDefM a b c -> TestDefM a b c
+ Test.Syd: notFlaky :: forall (a :: [Type]) b c. TestDefM a b c -> TestDefM a b c
- Test.Syd: parallel :: TestDefM a b c -> TestDefM a b c
+ Test.Syd: parallel :: forall (a :: [Type]) b c. TestDefM a b c -> TestDefM a b c
- Test.Syd: pending :: String -> TestDefM outers inner ()
+ Test.Syd: pending :: forall (outers :: [Type]) inner. String -> TestDefM outers inner ()
- Test.Syd: pendingWith :: String -> String -> TestDefM outers inner ()
+ Test.Syd: pendingWith :: forall (outers :: [Type]) inner. String -> String -> TestDefM outers inner ()
- Test.Syd: potentiallyFlaky :: TestDefM a b c -> TestDefM a b c
+ Test.Syd: potentiallyFlaky :: forall (a :: [Type]) b c. TestDefM a b c -> TestDefM a b c
- Test.Syd: potentiallyFlakyWith :: String -> TestDefM a b c -> TestDefM a b c
+ Test.Syd: potentiallyFlakyWith :: forall (a :: [Type]) b c. String -> TestDefM a b c -> TestDefM a b c
- Test.Syd: randomiseExecutionOrder :: TestDefM a b c -> TestDefM a b c
+ Test.Syd: randomiseExecutionOrder :: forall (a :: [Type]) b c. TestDefM a b c -> TestDefM a b c
- Test.Syd: runIO :: IO e -> TestDefM a b e
+ Test.Syd: runIO :: forall e (a :: [Type]) b. IO e -> TestDefM a b e
- Test.Syd: runTestDefM :: Settings -> TestDefM outers inner result -> IO (result, TestForest outers inner)
+ Test.Syd: runTestDefM :: forall (outers :: [Type]) inner result. Settings -> TestDefM outers inner result -> IO (result, TestForest outers inner)
- Test.Syd: scenarioDir :: FilePath -> (FilePath -> TestDefM outers inner ()) -> TestDefM outers inner ()
+ Test.Syd: scenarioDir :: forall (outers :: [Type]) inner. FilePath -> (FilePath -> TestDefM outers inner ()) -> TestDefM outers inner ()
- Test.Syd: scenarioDirRecur :: FilePath -> (FilePath -> TestDefM outers inner ()) -> TestDefM outers inner ()
+ Test.Syd: scenarioDirRecur :: forall (outers :: [Type]) inner. FilePath -> (FilePath -> TestDefM outers inner ()) -> TestDefM outers inner ()
- Test.Syd: sequential :: TestDefM a b c -> TestDefM a b c
+ Test.Syd: sequential :: forall (a :: [Type]) b c. TestDefM a b c -> TestDefM a b c
- Test.Syd: setupAround :: SetupFunc inner -> TestDefM outers inner result -> TestDefM outers any result
+ Test.Syd: setupAround :: forall inner (outers :: [Type]) result any. SetupFunc inner -> TestDefM outers inner result -> TestDefM outers any result
- Test.Syd: setupAroundAll :: SetupFunc outer -> TestDefM (outer : outers) inner result -> TestDefM outers inner result
+ Test.Syd: setupAroundAll :: forall outer (outers :: [Type]) inner result. SetupFunc outer -> TestDefM (outer ': outers) inner result -> TestDefM outers inner result
- Test.Syd: setupAroundAllWith :: (oldOuter -> SetupFunc newOuter) -> TestDefM (newOuter ': (oldOuter ': outers)) inner result -> TestDefM (oldOuter ': outers) inner result
+ Test.Syd: setupAroundAllWith :: forall oldOuter newOuter (outers :: [Type]) inner result. (oldOuter -> SetupFunc newOuter) -> TestDefM (newOuter ': (oldOuter ': outers)) inner result -> TestDefM (oldOuter ': outers) inner result
- Test.Syd: setupAroundWith :: (oldInner -> SetupFunc newInner) -> TestDefM outers newInner result -> TestDefM outers oldInner result
+ Test.Syd: setupAroundWith :: forall oldInner newInner (outers :: [Type]) result. (oldInner -> SetupFunc newInner) -> TestDefM outers newInner result -> TestDefM outers oldInner result
- Test.Syd: setupAroundWith' :: HContains outers outer => (outer -> oldInner -> SetupFunc newInner) -> TestDefM outers newInner result -> TestDefM outers oldInner result
+ Test.Syd: setupAroundWith' :: forall (outers :: [Type]) outer oldInner newInner result. HContains outers outer => (outer -> oldInner -> SetupFunc newInner) -> TestDefM outers newInner result -> TestDefM outers oldInner result
- Test.Syd: shouldThrow :: forall e a. (HasCallStack, Exception e) => IO a -> Selector e -> Expectation
+ Test.Syd: shouldThrow :: (HasCallStack, Exception e) => IO a -> Selector e -> Expectation
- Test.Syd: specify :: forall outers inner test. (HasCallStack, IsTest test, Arg1 test ~ (), Arg2 test ~ inner) => String -> test -> TestDefM outers inner ()
+ Test.Syd: specify :: forall (outers :: [Type]) inner test. (HasCallStack, IsTest test, Arg1 test ~ (), Arg2 test ~ inner) => String -> test -> TestDefM outers inner ()
- Test.Syd: specifyWithAll :: (HasCallStack, IsTest test, Arg1 test ~ HList outers, Arg2 test ~ inner) => String -> test -> TestDefM outers inner ()
+ Test.Syd: specifyWithAll :: forall test (outers :: [Type]) inner. (HasCallStack, IsTest test, Arg1 test ~ HList outers, Arg2 test ~ inner) => String -> test -> TestDefM outers inner ()
- Test.Syd: specifyWithBoth :: (HasCallStack, IsTest test, Arg1 test ~ outer, Arg2 test ~ inner) => String -> test -> TestDefM (outer ': otherOuters) inner ()
+ Test.Syd: specifyWithBoth :: forall test outer inner (otherOuters :: [Type]). (HasCallStack, IsTest test, Arg1 test ~ outer, Arg2 test ~ inner) => String -> test -> TestDefM (outer ': otherOuters) inner ()
- Test.Syd: specifyWithOuter :: (HasCallStack, IsTest test, Arg1 test ~ inner, Arg2 test ~ outer) => String -> test -> TestDefM (outer ': otherOuters) inner ()
+ Test.Syd: specifyWithOuter :: forall test inner outer (otherOuters :: [Type]). (HasCallStack, IsTest test, Arg1 test ~ inner, Arg2 test ~ outer) => String -> test -> TestDefM (outer ': otherOuters) inner ()
- Test.Syd: type ResultForest = SpecForest (TDef (Timed TestRunReport))
+ Test.Syd: type ResultForest = SpecForest TDef Timed TestRunReport
- Test.Syd: type ResultTree = SpecTree (TDef (Timed TestRunReport))
+ Test.Syd: type ResultTree = SpecTree TDef Timed TestRunReport
- Test.Syd: type Selector a = (a -> Bool)
+ Test.Syd: type Selector a = a -> Bool
- Test.Syd: type SpecM inner result = TestDefM '[] inner result
+ Test.Syd: type SpecM inner result = TestDefM '[] :: [Type] inner result
- Test.Syd: type TestDef outers inner = TestDefM outers inner ()
+ Test.Syd: type TestDef (outers :: [Type]) inner = TestDefM outers inner ()
- Test.Syd: type TestForest outers inner = SpecDefForest outers inner ()
+ Test.Syd: type TestForest (outers :: [Type]) inner = SpecDefForest outers inner ()
- Test.Syd: type TestTree outers inner = SpecDefTree outers inner ()
+ Test.Syd: type TestTree (outers :: [Type]) inner = SpecDefTree outers inner ()
- Test.Syd: withExecutionOrderRandomisation :: ExecutionOrderRandomisation -> TestDefM a b c -> TestDefM a b c
+ Test.Syd: withExecutionOrderRandomisation :: forall (a :: [Type]) b c. ExecutionOrderRandomisation -> TestDefM a b c -> TestDefM a b c
- Test.Syd: withExpectationMode :: ExpectationMode -> TestDefM a b c -> TestDefM a b c
+ Test.Syd: withExpectationMode :: forall (a :: [Type]) b c. ExpectationMode -> TestDefM a b c -> TestDefM a b c
- Test.Syd: withFlakiness :: FlakinessMode -> TestDefM a b c -> TestDefM a b c
+ Test.Syd: withFlakiness :: forall (a :: [Type]) b c. FlakinessMode -> TestDefM a b c -> TestDefM a b c
- Test.Syd: withParallelism :: Parallelism -> TestDefM a b c -> TestDefM a b c
+ Test.Syd: withParallelism :: forall (a :: [Type]) b c. Parallelism -> TestDefM a b c -> TestDefM a b c
- Test.Syd: withRetries :: Word -> TestDefM a b c -> TestDefM a b c
+ Test.Syd: withRetries :: forall (a :: [Type]) b c. Word -> TestDefM a b c -> TestDefM a b c
- Test.Syd: withTimeout :: Int -> TestDefM a b c -> TestDefM a b c
+ Test.Syd: withTimeout :: forall (a :: [Type]) b c. Int -> TestDefM a b c -> TestDefM a b c
- Test.Syd: withoutRetries :: TestDefM a b c -> TestDefM a b c
+ Test.Syd: withoutRetries :: forall (a :: [Type]) b c. TestDefM a b c -> TestDefM a b c
- Test.Syd: withoutTimeout :: TestDefM a b c -> TestDefM a b c
+ Test.Syd: withoutTimeout :: forall (a :: [Type]) b c. TestDefM a b c -> TestDefM a b c
- Test.Syd: xdescribe :: String -> TestDefM outers inner () -> TestDefM outers inner ()
+ Test.Syd: xdescribe :: forall (outers :: [Type]) inner. String -> TestDefM outers inner () -> TestDefM outers inner ()
- Test.Syd: xit :: forall outers inner test. (HasCallStack, IsTest test, Arg1 test ~ (), Arg2 test ~ inner) => String -> test -> TestDefM outers inner ()
+ Test.Syd: xit :: forall (outers :: [Type]) inner test. (HasCallStack, IsTest test, Arg1 test ~ (), Arg2 test ~ inner) => String -> test -> TestDefM outers inner ()
- Test.Syd: xitWithAll :: (HasCallStack, IsTest test, Arg1 test ~ HList outers, Arg2 test ~ inner) => String -> test -> TestDefM outers inner ()
+ Test.Syd: xitWithAll :: forall test (outers :: [Type]) inner. (HasCallStack, IsTest test, Arg1 test ~ HList outers, Arg2 test ~ inner) => String -> test -> TestDefM outers inner ()
- Test.Syd: xitWithBoth :: (HasCallStack, IsTest test, Arg1 test ~ outer, Arg2 test ~ inner) => String -> test -> TestDefM (outer ': otherOuters) inner ()
+ Test.Syd: xitWithBoth :: forall test outer inner (otherOuters :: [Type]). (HasCallStack, IsTest test, Arg1 test ~ outer, Arg2 test ~ inner) => String -> test -> TestDefM (outer ': otherOuters) inner ()
- Test.Syd: xitWithOuter :: (HasCallStack, IsTest test, Arg1 test ~ inner, Arg2 test ~ outer) => String -> test -> TestDefM (outer ': otherOuters) inner ()
+ Test.Syd: xitWithOuter :: forall test inner outer (otherOuters :: [Type]). (HasCallStack, IsTest test, Arg1 test ~ inner, Arg2 test ~ outer) => String -> test -> TestDefM (outer ': otherOuters) inner ()
- Test.Syd: xspecify :: forall outers inner test. (HasCallStack, IsTest test, Arg1 test ~ (), Arg2 test ~ inner) => String -> test -> TestDefM outers inner ()
+ Test.Syd: xspecify :: forall (outers :: [Type]) inner test. (HasCallStack, IsTest test, Arg1 test ~ (), Arg2 test ~ inner) => String -> test -> TestDefM outers inner ()
- Test.Syd: xspecifyWithAll :: (HasCallStack, IsTest test, Arg1 test ~ HList outers, Arg2 test ~ inner) => String -> test -> TestDefM outers inner ()
+ Test.Syd: xspecifyWithAll :: forall test (outers :: [Type]) inner. (HasCallStack, IsTest test, Arg1 test ~ HList outers, Arg2 test ~ inner) => String -> test -> TestDefM outers inner ()
- Test.Syd: xspecifyWithBoth :: (HasCallStack, IsTest test, Arg1 test ~ outer, Arg2 test ~ inner) => String -> test -> TestDefM (outer ': otherOuters) inner ()
+ Test.Syd: xspecifyWithBoth :: forall test outer inner (otherOuters :: [Type]). (HasCallStack, IsTest test, Arg1 test ~ outer, Arg2 test ~ inner) => String -> test -> TestDefM (outer ': otherOuters) inner ()
- Test.Syd: xspecifyWithOuter :: (HasCallStack, IsTest test, Arg1 test ~ inner, Arg2 test ~ outer) => String -> test -> TestDefM (outer ': otherOuters) inner ()
+ Test.Syd: xspecifyWithOuter :: forall test inner outer (otherOuters :: [Type]). (HasCallStack, IsTest test, Arg1 test ~ inner, Arg2 test ~ outer) => String -> test -> TestDefM (outer ': otherOuters) inner ()
- Test.Syd.Def.Around: after :: (inner -> IO ()) -> TestDefM outers inner result -> TestDefM outers inner result
+ Test.Syd.Def.Around: after :: forall inner (outers :: [Type]) result. (inner -> IO ()) -> TestDefM outers inner result -> TestDefM outers inner result
- Test.Syd.Def.Around: after_ :: IO () -> TestDefM outers inner result -> TestDefM outers inner result
+ Test.Syd.Def.Around: after_ :: forall (outers :: [Type]) inner result. IO () -> TestDefM outers inner result -> TestDefM outers inner result
- Test.Syd.Def.Around: around :: ((inner -> IO ()) -> IO ()) -> TestDefM outers inner result -> TestDefM outers () result
+ Test.Syd.Def.Around: around :: forall inner (outers :: [Type]) result. ((inner -> IO ()) -> IO ()) -> TestDefM outers inner result -> TestDefM outers () result
- Test.Syd.Def.Around: aroundWith :: forall newInner oldInner outers result. ((newInner -> IO ()) -> oldInner -> IO ()) -> TestDefM outers newInner result -> TestDefM outers oldInner result
+ Test.Syd.Def.Around: aroundWith :: forall newInner oldInner (outers :: [Type]) result. ((newInner -> IO ()) -> oldInner -> IO ()) -> TestDefM outers newInner result -> TestDefM outers oldInner result
- Test.Syd.Def.Around: around_ :: (IO () -> IO ()) -> TestDefM outers inner result -> TestDefM outers inner result
+ Test.Syd.Def.Around: around_ :: forall (outers :: [Type]) inner result. (IO () -> IO ()) -> TestDefM outers inner result -> TestDefM outers inner result
- Test.Syd.Def.Around: before :: IO inner -> TestDefM outers inner result -> TestDefM outers () result
+ Test.Syd.Def.Around: before :: forall inner (outers :: [Type]) result. IO inner -> TestDefM outers inner result -> TestDefM outers () result
- Test.Syd.Def.Around: beforeWith :: forall outers oldInner newInner result. (oldInner -> IO newInner) -> TestDefM outers newInner result -> TestDefM outers oldInner result
+ Test.Syd.Def.Around: beforeWith :: forall (outers :: [Type]) oldInner newInner result. (oldInner -> IO newInner) -> TestDefM outers newInner result -> TestDefM outers oldInner result
- Test.Syd.Def.Around: beforeWith' :: HContains outers outer => (outer -> oldInner -> IO newInner) -> TestDefM outers newInner result -> TestDefM outers oldInner result
+ Test.Syd.Def.Around: beforeWith' :: forall (outers :: [Type]) outer oldInner newInner result. HContains outers outer => (outer -> oldInner -> IO newInner) -> TestDefM outers newInner result -> TestDefM outers oldInner result
- Test.Syd.Def.Around: before_ :: IO () -> TestDefM outers inner result -> TestDefM outers inner result
+ Test.Syd.Def.Around: before_ :: forall (outers :: [Type]) inner result. IO () -> TestDefM outers inner result -> TestDefM outers inner result
- Test.Syd.Def.AroundAll: afterAll :: (outer -> IO ()) -> TestDefM (outer ': otherOuters) inner result -> TestDefM (outer ': otherOuters) inner result
+ Test.Syd.Def.AroundAll: afterAll :: forall outer (otherOuters :: [Type]) inner result. (outer -> IO ()) -> TestDefM (outer ': otherOuters) inner result -> TestDefM (outer ': otherOuters) inner result
- Test.Syd.Def.AroundAll: afterAll' :: (HList outers -> IO ()) -> TestDefM outers inner result -> TestDefM outers inner result
+ Test.Syd.Def.AroundAll: afterAll' :: forall (outers :: [Type]) inner result. (HList outers -> IO ()) -> TestDefM outers inner result -> TestDefM outers inner result
- Test.Syd.Def.AroundAll: afterAll_ :: IO () -> TestDefM outers inner result -> TestDefM outers inner result
+ Test.Syd.Def.AroundAll: afterAll_ :: forall (outers :: [Type]) inner result. IO () -> TestDefM outers inner result -> TestDefM outers inner result
- Test.Syd.Def.AroundAll: aroundAll :: ((outer -> IO ()) -> IO ()) -> TestDefM (outer ': otherOuters) inner result -> TestDefM otherOuters inner result
+ Test.Syd.Def.AroundAll: aroundAll :: forall outer (otherOuters :: [Type]) inner result. ((outer -> IO ()) -> IO ()) -> TestDefM (outer ': otherOuters) inner result -> TestDefM otherOuters inner result
- Test.Syd.Def.AroundAll: aroundAllWith :: forall newOuter oldOuter otherOuters inner result. ((newOuter -> IO ()) -> oldOuter -> IO ()) -> TestDefM (newOuter ': (oldOuter ': otherOuters)) inner result -> TestDefM (oldOuter ': otherOuters) inner result
+ Test.Syd.Def.AroundAll: aroundAllWith :: forall newOuter oldOuter (otherOuters :: [Type]) inner result. ((newOuter -> IO ()) -> oldOuter -> IO ()) -> TestDefM (newOuter ': (oldOuter ': otherOuters)) inner result -> TestDefM (oldOuter ': otherOuters) inner result
- Test.Syd.Def.AroundAll: aroundAll_ :: (IO () -> IO ()) -> TestDefM outers inner result -> TestDefM outers inner result
+ Test.Syd.Def.AroundAll: aroundAll_ :: forall (outers :: [Type]) inner result. (IO () -> IO ()) -> TestDefM outers inner result -> TestDefM outers inner result
- Test.Syd.Def.AroundAll: beforeAll :: IO outer -> TestDefM (outer ': otherOuters) inner result -> TestDefM otherOuters inner result
+ Test.Syd.Def.AroundAll: beforeAll :: forall outer (otherOuters :: [Type]) inner result. IO outer -> TestDefM (outer ': otherOuters) inner result -> TestDefM otherOuters inner result
- Test.Syd.Def.AroundAll: beforeAllWith :: (previousOuter -> IO newOuter) -> TestDefM (newOuter ': (previousOuter ': otherOuters)) inner result -> TestDefM (previousOuter ': otherOuters) inner result
+ Test.Syd.Def.AroundAll: beforeAllWith :: forall previousOuter newOuter (otherOuters :: [Type]) inner result. (previousOuter -> IO newOuter) -> TestDefM (newOuter ': (previousOuter ': otherOuters)) inner result -> TestDefM (previousOuter ': otherOuters) inner result
- Test.Syd.Def.AroundAll: beforeAll_ :: IO () -> TestDefM outers inner result -> TestDefM outers inner result
+ Test.Syd.Def.AroundAll: beforeAll_ :: forall (outers :: [Type]) inner result. IO () -> TestDefM outers inner result -> TestDefM outers inner result
- Test.Syd.Def.AroundAll: wrapForest :: (TestForest outers1 inner1 -> TestTree outers2 inner2) -> TestDefM outers1 inner1 result -> TestDefM outers2 inner2 result
+ Test.Syd.Def.AroundAll: wrapForest :: forall (outers1 :: [Type]) inner1 (outers2 :: [Type]) inner2 result. (TestForest outers1 inner1 -> TestTree outers2 inner2) -> TestDefM outers1 inner1 result -> TestDefM outers2 inner2 result
- Test.Syd.Def.Scenario: scenarioDir :: FilePath -> (FilePath -> TestDefM outers inner ()) -> TestDefM outers inner ()
+ Test.Syd.Def.Scenario: scenarioDir :: forall (outers :: [Type]) inner. FilePath -> (FilePath -> TestDefM outers inner ()) -> TestDefM outers inner ()
- Test.Syd.Def.Scenario: scenarioDirRecur :: FilePath -> (FilePath -> TestDefM outers inner ()) -> TestDefM outers inner ()
+ Test.Syd.Def.Scenario: scenarioDirRecur :: forall (outers :: [Type]) inner. FilePath -> (FilePath -> TestDefM outers inner ()) -> TestDefM outers inner ()
- Test.Syd.Def.SetupFunc: SetupFunc :: (forall r. (resource -> IO r) -> IO r) -> SetupFunc resource
+ Test.Syd.Def.SetupFunc: SetupFunc :: (forall r. () => (resource -> IO r) -> IO r) -> SetupFunc resource
- Test.Syd.Def.SetupFunc: [unSetupFunc] :: SetupFunc resource -> forall r. (resource -> IO r) -> IO r
+ Test.Syd.Def.SetupFunc: [unSetupFunc] :: SetupFunc resource -> forall r. () => (resource -> IO r) -> IO r
- Test.Syd.Def.SetupFunc: setupAround :: SetupFunc inner -> TestDefM outers inner result -> TestDefM outers any result
+ Test.Syd.Def.SetupFunc: setupAround :: forall inner (outers :: [Type]) result any. SetupFunc inner -> TestDefM outers inner result -> TestDefM outers any result
- Test.Syd.Def.SetupFunc: setupAroundAll :: SetupFunc outer -> TestDefM (outer : outers) inner result -> TestDefM outers inner result
+ Test.Syd.Def.SetupFunc: setupAroundAll :: forall outer (outers :: [Type]) inner result. SetupFunc outer -> TestDefM (outer ': outers) inner result -> TestDefM outers inner result
- Test.Syd.Def.SetupFunc: setupAroundAllWith :: (oldOuter -> SetupFunc newOuter) -> TestDefM (newOuter ': (oldOuter ': outers)) inner result -> TestDefM (oldOuter ': outers) inner result
+ Test.Syd.Def.SetupFunc: setupAroundAllWith :: forall oldOuter newOuter (outers :: [Type]) inner result. (oldOuter -> SetupFunc newOuter) -> TestDefM (newOuter ': (oldOuter ': outers)) inner result -> TestDefM (oldOuter ': outers) inner result
- Test.Syd.Def.SetupFunc: setupAroundWith :: (oldInner -> SetupFunc newInner) -> TestDefM outers newInner result -> TestDefM outers oldInner result
+ Test.Syd.Def.SetupFunc: setupAroundWith :: forall oldInner newInner (outers :: [Type]) result. (oldInner -> SetupFunc newInner) -> TestDefM outers newInner result -> TestDefM outers oldInner result
- Test.Syd.Def.SetupFunc: setupAroundWith' :: HContains outers outer => (outer -> oldInner -> SetupFunc newInner) -> TestDefM outers newInner result -> TestDefM outers oldInner result
+ Test.Syd.Def.SetupFunc: setupAroundWith' :: forall (outers :: [Type]) outer oldInner newInner result. HContains outers outer => (outer -> oldInner -> SetupFunc newInner) -> TestDefM outers newInner result -> TestDefM outers oldInner result
- Test.Syd.Def.SetupFunc: setupAroundWithAll :: (HList outers -> oldInner -> SetupFunc newInner) -> TestDefM outers newInner result -> TestDefM outers oldInner result
+ Test.Syd.Def.SetupFunc: setupAroundWithAll :: forall (outers :: [Type]) oldInner newInner result. (HList outers -> oldInner -> SetupFunc newInner) -> TestDefM outers newInner result -> TestDefM outers oldInner result
- Test.Syd.Def.Specify: describe :: String -> TestDefM outers inner () -> TestDefM outers inner ()
+ Test.Syd.Def.Specify: describe :: forall (outers :: [Type]) inner. String -> TestDefM outers inner () -> TestDefM outers inner ()
- Test.Syd.Def.Specify: it :: forall outers inner test. (HasCallStack, IsTest test, Arg1 test ~ (), Arg2 test ~ inner) => String -> test -> TestDefM outers inner ()
+ Test.Syd.Def.Specify: it :: forall (outers :: [Type]) inner test. (HasCallStack, IsTest test, Arg1 test ~ (), Arg2 test ~ inner) => String -> test -> TestDefM outers inner ()
- Test.Syd.Def.Specify: itWithAll :: (HasCallStack, IsTest test, Arg1 test ~ HList outers, Arg2 test ~ inner) => String -> test -> TestDefM outers inner ()
+ Test.Syd.Def.Specify: itWithAll :: forall test (outers :: [Type]) inner. (HasCallStack, IsTest test, Arg1 test ~ HList outers, Arg2 test ~ inner) => String -> test -> TestDefM outers inner ()
- Test.Syd.Def.Specify: itWithBoth :: (HasCallStack, IsTest test, Arg1 test ~ outer, Arg2 test ~ inner) => String -> test -> TestDefM (outer ': otherOuters) inner ()
+ Test.Syd.Def.Specify: itWithBoth :: forall test outer inner (otherOuters :: [Type]). (HasCallStack, IsTest test, Arg1 test ~ outer, Arg2 test ~ inner) => String -> test -> TestDefM (outer ': otherOuters) inner ()
- Test.Syd.Def.Specify: itWithOuter :: (HasCallStack, IsTest test, Arg1 test ~ inner, Arg2 test ~ outer) => String -> test -> TestDefM (outer ': otherOuters) inner ()
+ Test.Syd.Def.Specify: itWithOuter :: forall test inner outer (otherOuters :: [Type]). (HasCallStack, IsTest test, Arg1 test ~ inner, Arg2 test ~ outer) => String -> test -> TestDefM (outer ': otherOuters) inner ()
- Test.Syd.Def.Specify: pending :: String -> TestDefM outers inner ()
+ Test.Syd.Def.Specify: pending :: forall (outers :: [Type]) inner. String -> TestDefM outers inner ()
- Test.Syd.Def.Specify: pendingWith :: String -> String -> TestDefM outers inner ()
+ Test.Syd.Def.Specify: pendingWith :: forall (outers :: [Type]) inner. String -> String -> TestDefM outers inner ()
- Test.Syd.Def.Specify: specify :: forall outers inner test. (HasCallStack, IsTest test, Arg1 test ~ (), Arg2 test ~ inner) => String -> test -> TestDefM outers inner ()
+ Test.Syd.Def.Specify: specify :: forall (outers :: [Type]) inner test. (HasCallStack, IsTest test, Arg1 test ~ (), Arg2 test ~ inner) => String -> test -> TestDefM outers inner ()
- Test.Syd.Def.Specify: specifyWithAll :: (HasCallStack, IsTest test, Arg1 test ~ HList outers, Arg2 test ~ inner) => String -> test -> TestDefM outers inner ()
+ Test.Syd.Def.Specify: specifyWithAll :: forall test (outers :: [Type]) inner. (HasCallStack, IsTest test, Arg1 test ~ HList outers, Arg2 test ~ inner) => String -> test -> TestDefM outers inner ()
- Test.Syd.Def.Specify: specifyWithBoth :: (HasCallStack, IsTest test, Arg1 test ~ outer, Arg2 test ~ inner) => String -> test -> TestDefM (outer ': otherOuters) inner ()
+ Test.Syd.Def.Specify: specifyWithBoth :: forall test outer inner (otherOuters :: [Type]). (HasCallStack, IsTest test, Arg1 test ~ outer, Arg2 test ~ inner) => String -> test -> TestDefM (outer ': otherOuters) inner ()
- Test.Syd.Def.Specify: specifyWithOuter :: (HasCallStack, IsTest test, Arg1 test ~ inner, Arg2 test ~ outer) => String -> test -> TestDefM (outer ': otherOuters) inner ()
+ Test.Syd.Def.Specify: specifyWithOuter :: forall test inner outer (otherOuters :: [Type]). (HasCallStack, IsTest test, Arg1 test ~ inner, Arg2 test ~ outer) => String -> test -> TestDefM (outer ': otherOuters) inner ()
- Test.Syd.Def.Specify: xdescribe :: String -> TestDefM outers inner () -> TestDefM outers inner ()
+ Test.Syd.Def.Specify: xdescribe :: forall (outers :: [Type]) inner. String -> TestDefM outers inner () -> TestDefM outers inner ()
- Test.Syd.Def.Specify: xit :: forall outers inner test. (HasCallStack, IsTest test, Arg1 test ~ (), Arg2 test ~ inner) => String -> test -> TestDefM outers inner ()
+ Test.Syd.Def.Specify: xit :: forall (outers :: [Type]) inner test. (HasCallStack, IsTest test, Arg1 test ~ (), Arg2 test ~ inner) => String -> test -> TestDefM outers inner ()
- Test.Syd.Def.Specify: xitWithAll :: (HasCallStack, IsTest test, Arg1 test ~ HList outers, Arg2 test ~ inner) => String -> test -> TestDefM outers inner ()
+ Test.Syd.Def.Specify: xitWithAll :: forall test (outers :: [Type]) inner. (HasCallStack, IsTest test, Arg1 test ~ HList outers, Arg2 test ~ inner) => String -> test -> TestDefM outers inner ()
- Test.Syd.Def.Specify: xitWithBoth :: (HasCallStack, IsTest test, Arg1 test ~ outer, Arg2 test ~ inner) => String -> test -> TestDefM (outer ': otherOuters) inner ()
+ Test.Syd.Def.Specify: xitWithBoth :: forall test outer inner (otherOuters :: [Type]). (HasCallStack, IsTest test, Arg1 test ~ outer, Arg2 test ~ inner) => String -> test -> TestDefM (outer ': otherOuters) inner ()
- Test.Syd.Def.Specify: xitWithOuter :: (HasCallStack, IsTest test, Arg1 test ~ inner, Arg2 test ~ outer) => String -> test -> TestDefM (outer ': otherOuters) inner ()
+ Test.Syd.Def.Specify: xitWithOuter :: forall test inner outer (otherOuters :: [Type]). (HasCallStack, IsTest test, Arg1 test ~ inner, Arg2 test ~ outer) => String -> test -> TestDefM (outer ': otherOuters) inner ()
- Test.Syd.Def.Specify: xspecify :: forall outers inner test. (HasCallStack, IsTest test, Arg1 test ~ (), Arg2 test ~ inner) => String -> test -> TestDefM outers inner ()
+ Test.Syd.Def.Specify: xspecify :: forall (outers :: [Type]) inner test. (HasCallStack, IsTest test, Arg1 test ~ (), Arg2 test ~ inner) => String -> test -> TestDefM outers inner ()
- Test.Syd.Def.Specify: xspecifyWithAll :: (HasCallStack, IsTest test, Arg1 test ~ HList outers, Arg2 test ~ inner) => String -> test -> TestDefM outers inner ()
+ Test.Syd.Def.Specify: xspecifyWithAll :: forall test (outers :: [Type]) inner. (HasCallStack, IsTest test, Arg1 test ~ HList outers, Arg2 test ~ inner) => String -> test -> TestDefM outers inner ()
- Test.Syd.Def.Specify: xspecifyWithBoth :: (HasCallStack, IsTest test, Arg1 test ~ outer, Arg2 test ~ inner) => String -> test -> TestDefM (outer ': otherOuters) inner ()
+ Test.Syd.Def.Specify: xspecifyWithBoth :: forall test outer inner (otherOuters :: [Type]). (HasCallStack, IsTest test, Arg1 test ~ outer, Arg2 test ~ inner) => String -> test -> TestDefM (outer ': otherOuters) inner ()
- Test.Syd.Def.Specify: xspecifyWithOuter :: (HasCallStack, IsTest test, Arg1 test ~ inner, Arg2 test ~ outer) => String -> test -> TestDefM (outer ': otherOuters) inner ()
+ Test.Syd.Def.Specify: xspecifyWithOuter :: forall test inner outer (otherOuters :: [Type]). (HasCallStack, IsTest test, Arg1 test ~ inner, Arg2 test ~ outer) => String -> test -> TestDefM (outer ': otherOuters) inner ()
- Test.Syd.Def.TestDefM: execTestDefM :: Settings -> TestDefM outers inner result -> IO (TestForest outers inner)
+ Test.Syd.Def.TestDefM: execTestDefM :: forall (outers :: [Type]) inner result. Settings -> TestDefM outers inner result -> IO (TestForest outers inner)
- Test.Syd.Def.TestDefM: getTestDescriptionPath :: TestDefM outers inner [Text]
+ Test.Syd.Def.TestDefM: getTestDescriptionPath :: forall (outers :: [Type]) inner. TestDefM outers inner [Text]
- Test.Syd.Def.TestDefM: runTestDefM :: Settings -> TestDefM outers inner result -> IO (result, TestForest outers inner)
+ Test.Syd.Def.TestDefM: runTestDefM :: forall (outers :: [Type]) inner result. Settings -> TestDefM outers inner result -> IO (result, TestForest outers inner)
- Test.Syd.Def.TestDefM: type SpecM inner result = TestDefM '[] inner result
+ Test.Syd.Def.TestDefM: type SpecM inner result = TestDefM '[] :: [Type] inner result
- Test.Syd.Def.TestDefM: type TestDef outers inner = TestDefM outers inner ()
+ Test.Syd.Def.TestDefM: type TestDef (outers :: [Type]) inner = TestDefM outers inner ()
- Test.Syd.Expectation: shouldThrow :: forall e a. (HasCallStack, Exception e) => IO a -> Selector e -> Expectation
+ Test.Syd.Expectation: shouldThrow :: (HasCallStack, Exception e) => IO a -> Selector e -> Expectation
- Test.Syd.Expectation: type Selector a = (a -> Bool)
+ Test.Syd.Expectation: type Selector a = a -> Bool
- Test.Syd.HList: [HCons] :: e -> HList l -> HList (e ': l)
+ Test.Syd.HList: [HCons] :: forall e (l :: [Type]). e -> HList l -> HList (e ': l)
- Test.Syd.HList: [HNil] :: HList '[]
+ Test.Syd.HList: [HNil] :: HList ('[] :: [Type])
- Test.Syd.Modify: doNotRandomiseExecutionOrder :: TestDefM a b c -> TestDefM a b c
+ Test.Syd.Modify: doNotRandomiseExecutionOrder :: forall (a :: [Type]) b c. TestDefM a b c -> TestDefM a b c
- Test.Syd.Modify: expectFailing :: TestDefM a b c -> TestDefM a b c
+ Test.Syd.Modify: expectFailing :: forall (a :: [Type]) b c. TestDefM a b c -> TestDefM a b c
- Test.Syd.Modify: expectPassing :: TestDefM a b c -> TestDefM a b c
+ Test.Syd.Modify: expectPassing :: forall (a :: [Type]) b c. TestDefM a b c -> TestDefM a b c
- Test.Syd.Modify: flaky :: Word -> TestDefM a b c -> TestDefM a b c
+ Test.Syd.Modify: flaky :: forall (a :: [Type]) b c. Word -> TestDefM a b c -> TestDefM a b c
- Test.Syd.Modify: flakyWith :: Word -> String -> TestDefM a b c -> TestDefM a b c
+ Test.Syd.Modify: flakyWith :: forall (a :: [Type]) b c. Word -> String -> TestDefM a b c -> TestDefM a b c
- Test.Syd.Modify: modifyMaxDiscardRatio :: (Int -> Int) -> TestDefM a b c -> TestDefM a b c
+ Test.Syd.Modify: modifyMaxDiscardRatio :: forall (a :: [Type]) b c. (Int -> Int) -> TestDefM a b c -> TestDefM a b c
- Test.Syd.Modify: modifyMaxShrinks :: (Int -> Int) -> TestDefM a b c -> TestDefM a b c
+ Test.Syd.Modify: modifyMaxShrinks :: forall (a :: [Type]) b c. (Int -> Int) -> TestDefM a b c -> TestDefM a b c
- Test.Syd.Modify: modifyMaxSize :: (Int -> Int) -> TestDefM a b c -> TestDefM a b c
+ Test.Syd.Modify: modifyMaxSize :: forall (a :: [Type]) b c. (Int -> Int) -> TestDefM a b c -> TestDefM a b c
- Test.Syd.Modify: modifyMaxSuccess :: (Int -> Int) -> TestDefM a b c -> TestDefM a b c
+ Test.Syd.Modify: modifyMaxSuccess :: forall (a :: [Type]) b c. (Int -> Int) -> TestDefM a b c -> TestDefM a b c
- Test.Syd.Modify: modifyRetries :: (Word -> Word) -> TestDefM a b c -> TestDefM a b c
+ Test.Syd.Modify: modifyRetries :: forall (a :: [Type]) b c. (Word -> Word) -> TestDefM a b c -> TestDefM a b c
- Test.Syd.Modify: modifyRunSettings :: (TestRunSettings -> TestRunSettings) -> TestDefM a b c -> TestDefM a b c
+ Test.Syd.Modify: modifyRunSettings :: forall (a :: [Type]) b c. (TestRunSettings -> TestRunSettings) -> TestDefM a b c -> TestDefM a b c
- Test.Syd.Modify: modifyTimeout :: (Timeout -> Timeout) -> TestDefM a b c -> TestDefM a b c
+ Test.Syd.Modify: modifyTimeout :: forall (a :: [Type]) b c. (Timeout -> Timeout) -> TestDefM a b c -> TestDefM a b c
- Test.Syd.Modify: notFlaky :: TestDefM a b c -> TestDefM a b c
+ Test.Syd.Modify: notFlaky :: forall (a :: [Type]) b c. TestDefM a b c -> TestDefM a b c
- Test.Syd.Modify: parallel :: TestDefM a b c -> TestDefM a b c
+ Test.Syd.Modify: parallel :: forall (a :: [Type]) b c. TestDefM a b c -> TestDefM a b c
- Test.Syd.Modify: potentiallyFlaky :: TestDefM a b c -> TestDefM a b c
+ Test.Syd.Modify: potentiallyFlaky :: forall (a :: [Type]) b c. TestDefM a b c -> TestDefM a b c
- Test.Syd.Modify: potentiallyFlakyWith :: String -> TestDefM a b c -> TestDefM a b c
+ Test.Syd.Modify: potentiallyFlakyWith :: forall (a :: [Type]) b c. String -> TestDefM a b c -> TestDefM a b c
- Test.Syd.Modify: randomiseExecutionOrder :: TestDefM a b c -> TestDefM a b c
+ Test.Syd.Modify: randomiseExecutionOrder :: forall (a :: [Type]) b c. TestDefM a b c -> TestDefM a b c
- Test.Syd.Modify: sequential :: TestDefM a b c -> TestDefM a b c
+ Test.Syd.Modify: sequential :: forall (a :: [Type]) b c. TestDefM a b c -> TestDefM a b c
- Test.Syd.Modify: withExecutionOrderRandomisation :: ExecutionOrderRandomisation -> TestDefM a b c -> TestDefM a b c
+ Test.Syd.Modify: withExecutionOrderRandomisation :: forall (a :: [Type]) b c. ExecutionOrderRandomisation -> TestDefM a b c -> TestDefM a b c
- Test.Syd.Modify: withExpectationMode :: ExpectationMode -> TestDefM a b c -> TestDefM a b c
+ Test.Syd.Modify: withExpectationMode :: forall (a :: [Type]) b c. ExpectationMode -> TestDefM a b c -> TestDefM a b c
- Test.Syd.Modify: withFlakiness :: FlakinessMode -> TestDefM a b c -> TestDefM a b c
+ Test.Syd.Modify: withFlakiness :: forall (a :: [Type]) b c. FlakinessMode -> TestDefM a b c -> TestDefM a b c
- Test.Syd.Modify: withParallelism :: Parallelism -> TestDefM a b c -> TestDefM a b c
+ Test.Syd.Modify: withParallelism :: forall (a :: [Type]) b c. Parallelism -> TestDefM a b c -> TestDefM a b c
- Test.Syd.Modify: withRetries :: Word -> TestDefM a b c -> TestDefM a b c
+ Test.Syd.Modify: withRetries :: forall (a :: [Type]) b c. Word -> TestDefM a b c -> TestDefM a b c
- Test.Syd.Modify: withTimeout :: Int -> TestDefM a b c -> TestDefM a b c
+ Test.Syd.Modify: withTimeout :: forall (a :: [Type]) b c. Int -> TestDefM a b c -> TestDefM a b c
- Test.Syd.Modify: withoutRetries :: TestDefM a b c -> TestDefM a b c
+ Test.Syd.Modify: withoutRetries :: forall (a :: [Type]) b c. TestDefM a b c -> TestDefM a b c
- Test.Syd.Modify: withoutTimeout :: TestDefM a b c -> TestDefM a b c
+ Test.Syd.Modify: withoutTimeout :: forall (a :: [Type]) b c. TestDefM a b c -> TestDefM a b c
- Test.Syd.OptParse: Flags :: !SeedSetting -> !Maybe Bool -> !Maybe Threads -> !Int -> !Int -> !Int -> !Int -> !Bool -> !Bool -> !Maybe Bool -> ![Text] -> !Maybe Bool -> !Iterations -> !Maybe Word -> !Timeout -> !Bool -> !Maybe ReportProgress -> !Bool -> !Bool -> Flags
+ Test.Syd.OptParse: Flags :: !SeedSetting -> !Maybe Bool -> !Maybe Threads -> !Int -> !Int -> !Int -> !Int -> !Bool -> !Bool -> !Maybe Bool -> ![Text] -> !Maybe Bool -> !Iterations -> !Maybe Word -> !Timeout -> !Bool -> !Bool -> !Maybe (Path Abs File) -> !Maybe ReportProgress -> !Bool -> !Bool -> Flags
- Test.Syd.OptParse: Settings :: !SeedSetting -> !Bool -> !Threads -> !Int -> !Int -> !Int -> !Int -> !Bool -> !Bool -> !Maybe Bool -> ![Text] -> !Bool -> !Iterations -> !Timeout -> !Word -> !Bool -> !ReportProgress -> !Bool -> Settings
+ Test.Syd.OptParse: Settings :: !SeedSetting -> !Bool -> !Threads -> !Int -> !Int -> !Int -> !Int -> !Bool -> !Bool -> !Maybe Bool -> ![Text] -> !Bool -> !Iterations -> !Timeout -> !Word -> !Bool -> !Bool -> !Maybe (Path Abs File) -> !ReportProgress -> !Bool -> Settings
- Test.Syd.Output: specForestWidth :: SpecDefForest a b c -> Int
+ Test.Syd.Output: specForestWidth :: forall (a :: [Type]) b c. SpecDefForest a b c -> Int
- Test.Syd.Path: tempDirSpec :: String -> TestDefM outers (Path Abs Dir) result -> TestDefM outers () result
+ Test.Syd.Path: tempDirSpec :: forall (outers :: [Type]) result. String -> TestDefM outers (Path Abs Dir) result -> TestDefM outers () result
- Test.Syd.Run: runPropertyTestWithArg :: forall outerArgs innerArg. (outerArgs -> innerArg -> Property) -> TestRunSettings -> ProgressReporter -> ((outerArgs -> innerArg -> IO ()) -> IO ()) -> IO TestRunResult
+ Test.Syd.Run: runPropertyTestWithArg :: (outerArgs -> innerArg -> Property) -> TestRunSettings -> ProgressReporter -> ((outerArgs -> innerArg -> IO ()) -> IO ()) -> IO TestRunResult
- Test.Syd.Runner: sydTestIterations :: Maybe Word -> Settings -> TestDefM '[] () r -> IO (Timed ResultForest)
+ Test.Syd.Runner: sydTestIterations :: Maybe Word -> Settings -> TestDefM ('[] :: [Type]) () r -> IO (Timed ResultForest)
- Test.Syd.Runner: sydTestOnce :: Settings -> TestDefM '[] () r -> IO (Timed ResultForest)
+ Test.Syd.Runner: sydTestOnce :: Settings -> TestDefM ('[] :: [Type]) () r -> IO (Timed ResultForest)
- Test.Syd.Runner: sydTestResult :: Settings -> TestDefM '[] () r -> IO (Timed ResultForest)
+ Test.Syd.Runner: sydTestResult :: Settings -> TestDefM ('[] :: [Type]) () r -> IO (Timed ResultForest)
- Test.Syd.Runner.Asynchronous: runSpecForestAsynchronously :: Settings -> Word -> TestForest '[] () -> IO ResultForest
+ Test.Syd.Runner.Asynchronous: runSpecForestAsynchronously :: Settings -> Word -> TestForest ('[] :: [Type]) () -> IO ResultForest
- Test.Syd.Runner.Asynchronous: runSpecForestInterleavedWithOutputAsynchronously :: Settings -> Word -> TestForest '[] () -> IO (Timed ResultForest)
+ Test.Syd.Runner.Asynchronous: runSpecForestInterleavedWithOutputAsynchronously :: Settings -> Word -> TestForest ('[] :: [Type]) () -> IO (Timed ResultForest)
- Test.Syd.Runner.Single: runSingleTestWithFlakinessMode :: forall externalResources t. ProgressReporter -> HList externalResources -> TDef (ProgressReporter -> ((HList externalResources -> () -> t) -> t) -> IO TestRunResult) -> Timeout -> Word -> FlakinessMode -> ExpectationMode -> IO TestRunReport
+ Test.Syd.Runner.Single: runSingleTestWithFlakinessMode :: forall (externalResources :: [Type]) t. ProgressReporter -> HList externalResources -> TDef (ProgressReporter -> ((HList externalResources -> () -> t) -> t) -> IO TestRunResult) -> Timeout -> Word -> FlakinessMode -> ExpectationMode -> IO TestRunReport
- Test.Syd.Runner.Synchronous: runSpecForestInterleavedWithOutputSynchronously :: Settings -> TestForest '[] () -> IO (Timed ResultForest)
+ Test.Syd.Runner.Synchronous: runSpecForestInterleavedWithOutputSynchronously :: Settings -> TestForest ('[] :: [Type]) () -> IO (Timed ResultForest)
- Test.Syd.Runner.Synchronous: runSpecForestSynchronously :: Settings -> TestForest '[] () -> IO ResultForest
+ Test.Syd.Runner.Synchronous: runSpecForestSynchronously :: Settings -> TestForest ('[] :: [Type]) () -> IO ResultForest
- Test.Syd.Runner.Synchronous.Interleaved: runSpecForestInterleavedWithOutputSynchronously :: Settings -> TestForest '[] () -> IO (Timed ResultForest)
+ Test.Syd.Runner.Synchronous.Interleaved: runSpecForestInterleavedWithOutputSynchronously :: Settings -> TestForest ('[] :: [Type]) () -> IO (Timed ResultForest)
- Test.Syd.Runner.Synchronous.Separate: runSpecForestSynchronously :: Settings -> TestForest '[] () -> IO ResultForest
+ Test.Syd.Runner.Synchronous.Separate: runSpecForestSynchronously :: Settings -> TestForest ('[] :: [Type]) () -> IO ResultForest
- Test.Syd.SpecDef: [DefAfterAllNode] :: (HList outers -> IO ()) -> SpecDefForest outers inner extra -> SpecDefTree outers inner extra
+ Test.Syd.SpecDef: [DefAfterAllNode] :: forall (outers :: [Type]) inner extra. (HList outers -> IO ()) -> SpecDefForest outers inner extra -> SpecDefTree outers inner extra
- Test.Syd.SpecDef: [DefAroundAllNode] :: ((outer -> IO ()) -> IO ()) -> SpecDefForest (outer ': otherOuters) inner extra -> SpecDefTree otherOuters inner extra
+ Test.Syd.SpecDef: [DefAroundAllNode] :: forall outer (outers :: [Type]) inner extra. ((outer -> IO ()) -> IO ()) -> SpecDefForest (outer ': outers) inner extra -> SpecDefTree outers inner extra
- Test.Syd.SpecDef: [DefAroundAllWithNode] :: ((newOuter -> IO ()) -> oldOuter -> IO ()) -> SpecDefForest (newOuter ': (oldOuter ': otherOuters)) inner extra -> SpecDefTree (oldOuter ': otherOuters) inner extra
+ Test.Syd.SpecDef: [DefAroundAllWithNode] :: forall newOuter oldOuter (otherOuters :: [Type]) inner extra. ((newOuter -> IO ()) -> oldOuter -> IO ()) -> SpecDefForest (newOuter ': (oldOuter ': otherOuters)) inner extra -> SpecDefTree (oldOuter ': otherOuters) inner extra
- Test.Syd.SpecDef: [DefBeforeAllNode] :: IO outer -> SpecDefForest (outer ': otherOuters) inner extra -> SpecDefTree otherOuters inner extra
+ Test.Syd.SpecDef: [DefBeforeAllNode] :: forall outer (outers :: [Type]) inner extra. IO outer -> SpecDefForest (outer ': outers) inner extra -> SpecDefTree outers inner extra
- Test.Syd.SpecDef: [DefBeforeAllWithNode] :: (oldOuter -> IO newOuter) -> SpecDefForest (newOuter ': (oldOuter ': otherOuters)) inner extra -> SpecDefTree (oldOuter ': otherOuters) inner extra
+ Test.Syd.SpecDef: [DefBeforeAllWithNode] :: forall oldOuter newOuter (otherOuters :: [Type]) inner extra. (oldOuter -> IO newOuter) -> SpecDefForest (newOuter ': (oldOuter ': otherOuters)) inner extra -> SpecDefTree (oldOuter ': otherOuters) inner extra
- Test.Syd.SpecDef: [DefDescribeNode] :: Text -> SpecDefForest outers inner extra -> SpecDefTree outers inner extra
+ Test.Syd.SpecDef: [DefDescribeNode] :: forall (outers :: [Type]) inner extra. Text -> SpecDefForest outers inner extra -> SpecDefTree outers inner extra
- Test.Syd.SpecDef: [DefExpectationNode] :: ExpectationMode -> SpecDefForest outers inner extra -> SpecDefTree outers inner extra
+ Test.Syd.SpecDef: [DefExpectationNode] :: forall (outers :: [Type]) inner extra. ExpectationMode -> SpecDefForest outers inner extra -> SpecDefTree outers inner extra
- Test.Syd.SpecDef: [DefFlakinessNode] :: FlakinessMode -> SpecDefForest outers inner extra -> SpecDefTree outers inner extra
+ Test.Syd.SpecDef: [DefFlakinessNode] :: forall (outers :: [Type]) inner extra. FlakinessMode -> SpecDefForest outers inner extra -> SpecDefTree outers inner extra
- Test.Syd.SpecDef: [DefParallelismNode] :: Parallelism -> SpecDefForest outers inner extra -> SpecDefTree outers inner extra
+ Test.Syd.SpecDef: [DefParallelismNode] :: forall (outers :: [Type]) inner extra. Parallelism -> SpecDefForest outers inner extra -> SpecDefTree outers inner extra
- Test.Syd.SpecDef: [DefPendingNode] :: Text -> Maybe Text -> SpecDefTree outers inner extra
+ Test.Syd.SpecDef: [DefPendingNode] :: forall (outers :: [Type]) inner extra. Text -> Maybe Text -> SpecDefTree outers inner extra
- Test.Syd.SpecDef: [DefRandomisationNode] :: ExecutionOrderRandomisation -> SpecDefForest outers inner extra -> SpecDefTree outers inner extra
+ Test.Syd.SpecDef: [DefRandomisationNode] :: forall (outers :: [Type]) inner extra. ExecutionOrderRandomisation -> SpecDefForest outers inner extra -> SpecDefTree outers inner extra
- Test.Syd.SpecDef: [DefRetriesNode] :: (Word -> Word) -> SpecDefForest outers inner extra -> SpecDefTree outers inner extra
+ Test.Syd.SpecDef: [DefRetriesNode] :: forall (outers :: [Type]) inner extra. (Word -> Word) -> SpecDefForest outers inner extra -> SpecDefTree outers inner extra
- Test.Syd.SpecDef: [DefSetupNode] :: IO () -> SpecDefForest outers inner extra -> SpecDefTree outers inner extra
+ Test.Syd.SpecDef: [DefSetupNode] :: forall (outers :: [Type]) inner extra. IO () -> SpecDefForest outers inner extra -> SpecDefTree outers inner extra
- Test.Syd.SpecDef: [DefSpecifyNode] :: Text -> TDef (ProgressReporter -> ((HList outers -> inner -> IO ()) -> IO ()) -> IO TestRunResult) -> extra -> SpecDefTree outers inner extra
+ Test.Syd.SpecDef: [DefSpecifyNode] :: forall (outers :: [Type]) inner extra. Text -> TDef (ProgressReporter -> ((HList outers -> inner -> IO ()) -> IO ()) -> IO TestRunResult) -> extra -> SpecDefTree outers inner extra
- Test.Syd.SpecDef: [DefTimeoutNode] :: (Timeout -> Timeout) -> SpecDefForest outers inner extra -> SpecDefTree outers inner extra
+ Test.Syd.SpecDef: [DefTimeoutNode] :: forall (outers :: [Type]) inner extra. (Timeout -> Timeout) -> SpecDefForest outers inner extra -> SpecDefTree outers inner extra
- Test.Syd.SpecDef: [DefWrapNode] :: (IO () -> IO ()) -> SpecDefForest outers inner extra -> SpecDefTree outers inner extra
+ Test.Syd.SpecDef: [DefWrapNode] :: forall (outers :: [Type]) inner extra. (IO () -> IO ()) -> SpecDefForest outers inner extra -> SpecDefTree outers inner extra
- Test.Syd.SpecDef: filterTestForest :: [Text] -> SpecDefForest outers inner result -> SpecDefForest outers inner result
+ Test.Syd.SpecDef: filterTestForest :: forall (outers :: [Type]) inner result. [Text] -> SpecDefForest outers inner result -> SpecDefForest outers inner result
- Test.Syd.SpecDef: markSpecForestAsPending :: Maybe Text -> SpecDefForest outers inner result -> SpecDefForest outers inner result
+ Test.Syd.SpecDef: markSpecForestAsPending :: forall (outers :: [Type]) inner result. Maybe Text -> SpecDefForest outers inner result -> SpecDefForest outers inner result
- Test.Syd.SpecDef: randomiseTestForest :: MonadRandom m => SpecDefForest outers inner result -> m (SpecDefForest outers inner result)
+ Test.Syd.SpecDef: randomiseTestForest :: forall m (outers :: [Type]) inner result. MonadRandom m => SpecDefForest outers inner result -> m (SpecDefForest outers inner result)
- Test.Syd.SpecDef: type ResultForest = SpecForest (TDef (Timed TestRunReport))
+ Test.Syd.SpecDef: type ResultForest = SpecForest TDef Timed TestRunReport
- Test.Syd.SpecDef: type ResultTree = SpecTree (TDef (Timed TestRunReport))
+ Test.Syd.SpecDef: type ResultTree = SpecTree TDef Timed TestRunReport
- Test.Syd.SpecDef: type TestForest outers inner = SpecDefForest outers inner ()
+ Test.Syd.SpecDef: type TestForest (outers :: [Type]) inner = SpecDefForest outers inner ()
- Test.Syd.SpecDef: type TestTree outers inner = SpecDefTree outers inner ()
+ Test.Syd.SpecDef: type TestTree (outers :: [Type]) inner = SpecDefTree outers inner ()

Files

CHANGELOG.md view
@@ -1,5 +1,12 @@ # Changelog +## [0.19.0.1] - 2025-05-09++### Added++- `--skip-passed`: Skip passing tests and rerun once the entire suite is+  skipped.+ ## [0.19.0.0] - 2024-11-17  ### Added
src/Test/Syd.hs view
@@ -263,6 +263,7 @@ import Test.Syd.Modify import Test.Syd.OptParse import Test.Syd.Output+import Test.Syd.ReRun import Test.Syd.Run import Test.Syd.Runner import Test.Syd.SVG@@ -283,7 +284,7 @@ -- This function performs no option-parsing. sydTestWith :: Settings -> Spec -> IO () sydTestWith sets spec = do-  resultForest <- sydTestResult sets spec+  resultForest <- withRerunByReport sets (sydTestResult sets) spec    when (settingProfile sets) $ do     p <- resolveFile' "sydtest-profile.html"
src/Test/Syd/OptParse.hs view
@@ -14,6 +14,7 @@ import Data.Text (Text) import GHC.Generics (Generic) import OptEnvConf+import Path import Path.IO import Paths_sydtest (version) import Test.Syd.Run@@ -63,6 +64,10 @@     settingRetries :: !Word,     -- | Whether to fail when any flakiness is detected in tests declared as flaky     settingFailOnFlaky :: !Bool,+    -- | Whether to skip running tests that have already passed.+    settingSkipPassed :: !Bool,+    -- | Where to store the report+    settingReportFile :: !(Maybe (Path Abs File)),     -- | How to report progress     settingReportProgress :: !ReportProgress,     -- | Profiling mode@@ -135,6 +140,8 @@                   )                   flagRetries,               settingFailOnFlaky = flagFailOnFlaky,+              settingSkipPassed = flagSkipPassed,+              settingReportFile = flagReportFile,               settingReportProgress = progress,               settingProfile = flagProfile             }@@ -159,7 +166,9 @@           settingTimeout = TimeoutAfterMicros defaultTimeout,           settingRetries = defaultRetries,           settingFailOnFlaky = False,+          settingSkipPassed = False,           settingReportProgress = ReportNoProgress,+          settingReportFile = Nothing,           settingProfile = False         } @@ -207,6 +216,8 @@     flagRetries :: !(Maybe Word),     flagTimeout :: !Timeout,     flagFailOnFlaky :: !Bool,+    flagSkipPassed :: !Bool,+    flagReportFile :: !(Maybe (Path Abs File)),     flagReportProgress :: !(Maybe ReportProgress),     flagDebug :: !Bool,     flagProfile :: !Bool@@ -318,8 +329,23 @@           name "fail-on-flaky",           value $ settingFailOnFlaky defaultSettings         ]-    flagReportProgress <--      optional settingsParser+    flagSkipPassed <-+      yesNoSwitch+        [ help $+            unlines+              [ "Skip tests that have already passed. When every test has passed, rerun them all.",+                "Note that you have to run with this flag once before it can activate."+              ],+          name "skip-passed",+          value $ settingSkipPassed defaultSettings+        ]+    flagReportFile <-+      optional $+        filePathSetting+          [ help "Where to store the the test report for --skip-passed",+            name "report-file"+          ]+    flagReportProgress <- optional settingsParser     flagDebug <-       yesNoSwitch         [ help "Turn on debug mode",
+ src/Test/Syd/ReRun.hs view
@@ -0,0 +1,181 @@+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE DerivingVia #-}+{-# LANGUAGE GADTs #-}+{-# LANGUAGE LambdaCase #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE QuasiQuotes #-}+{-# LANGUAGE RecordWildCards #-}+{-# OPTIONS_GHC -Wno-unused-pattern-binds -Wno-unused-imports #-}++module Test.Syd.ReRun (withRerunByReport) where++import Autodocodec+import Control.Monad.Writer+import qualified Data.ByteString as SB+import qualified Data.ByteString.Lazy as LB+import Data.Map (Map)+import qualified Data.Map as M+import Data.Monoid+import Data.Text (Text)+import GHC.Generics (Generic)+import Path+import Path.IO+import Test.Syd.Def+import Test.Syd.OptParse+import Test.Syd.Run+import Test.Syd.SpecDef+import Test.Syd.SpecForest++withRerunByReport ::+  Settings ->+  (TestDefM outers inner r -> IO (Timed ResultForest)) ->+  TestDefM outers inner r ->+  IO (Timed ResultForest)+withRerunByReport sets func spec =+  if settingSkipPassed sets+    then do+      mReport <- readReport sets+      resultForest <- func (filterByMReport mReport spec)+      let newReport = collectReport sets resultForest+      let combinedReport = maybe newReport (`combineReport` newReport) mReport+      writeReport sets combinedReport+      pure resultForest+    else func spec++filterByMReport :: Maybe ReportForest -> TestDefM outers inner r -> TestDefM outers inner r+filterByMReport = maybe id filterByReport++filterByReport :: ReportForest -> TestDefM outers inner r -> TestDefM outers inner r+filterByReport report =+  censor+    ( \testForest ->+        -- Don't filter anything if everything was removed because it passed.+        -- This should be the final step that reruns all the tests because+        let (filteredResult, All allPassedOrSkipped) = runWriter (goF report testForest)+         in if allPassedOrSkipped+              then testForest+              else filteredResult+    )+  where+    goF :: ReportForest -> TestForest o i -> Writer All (TestForest o i)+    goF forest = mapM (goT forest)+    goT :: ReportForest -> TestTree o i -> Writer All (TestTree o i)+    goT forest t = case t of+      DefSpecifyNode description _ _ -> do+        case M.lookup description forest of+          Nothing -> do+            -- New test, definitely run it.+            tell $ All False+            pure t+          Just (ReportBranch _) -> do+            -- "it" turned into "describe": new, definitely run.+            tell $ All False+            pure t+          Just (ReportNode passed) -> do+            -- Don't rerun if it's already passed.+            tell $ All passed+            pure $+              if passed+                then DefPendingNode description (Just "Skipped passed test")+                else t+      DefPendingNode {} -> do+        -- Keep the pending node, it doesn't hurt.+        tell $ All True+        pure t+      DefDescribeNode description f ->+        case M.lookup description forest of+          Nothing -> do+            -- New branch, or a branch that wasn't run because of a filter,+            -- definitely run it.+            pure t+          Just (ReportNode _) -> do+            -- "describe" turned into "it": new, definitely run.+            pure t+          Just (ReportBranch deeperForest) ->+            DefDescribeNode description <$> goF deeperForest f+      DefSetupNode func f -> DefSetupNode func <$> goF forest f+      DefBeforeAllNode func f -> DefBeforeAllNode func <$> goF forest f+      DefBeforeAllWithNode func f -> DefBeforeAllWithNode func <$> goF forest f+      DefWrapNode func f -> DefWrapNode func <$> goF forest f+      DefAroundAllNode func f -> DefAroundAllNode func <$> goF forest f+      DefAroundAllWithNode func f -> DefAroundAllWithNode func <$> goF forest f+      DefAfterAllNode func f -> DefAfterAllNode func <$> goF forest f+      DefParallelismNode x f -> DefParallelismNode x <$> goF forest f+      DefRandomisationNode x f -> DefRandomisationNode x <$> goF forest f+      DefTimeoutNode func f -> DefTimeoutNode func <$> goF forest f+      DefRetriesNode func f -> DefRetriesNode func <$> goF forest f+      DefFlakinessNode x f -> DefFlakinessNode x <$> goF forest f+      DefExpectationNode x f -> DefExpectationNode x <$> goF forest f++readReport :: Settings -> IO (Maybe ReportForest)+readReport settings = do+  reportFile <- getReportFile settings+  mContents <- forgivingAbsence $ SB.readFile (fromAbsFile reportFile)+  case mContents of+    Nothing -> pure Nothing+    Just contents ->+      case eitherDecodeJSONViaCodec (LB.fromStrict contents) of+        Left _ ->+          -- If we cant decode the file, just pretend it wasn't there.+          pure Nothing+        Right report -> pure (Just report)++writeReport :: Settings -> ReportForest -> IO ()+writeReport settings report = do+  reportFile <- getReportFile settings+  ensureDir (parent reportFile)+  SB.writeFile (fromAbsFile reportFile) (SB.toStrict (encodeJSONViaCodec report))++getReportFile :: Settings -> IO (Path Abs File)+getReportFile setting = case settingReportFile setting of+  Just fp -> pure fp+  Nothing -> do+    cacheDir <- getXdgDir XdgCache (Just [reldir|sydtest|])+    resolveFile cacheDir "sydtest-report.json"++collectReport :: Settings -> Timed ResultForest -> ReportForest+collectReport settings = goF . timedValue+  where+    goF :: ResultForest -> ReportForest+    goF = M.unions . map goT+    goT :: ResultTree -> Map Text ReportTree+    goT = \case+      DescribeNode description f -> M.singleton description (ReportBranch (goF f))+      SubForestNode f -> goF f+      PendingNode _ _ -> M.empty+      SpecifyNode testReportDescription TDef {..} ->+        let report = timedValue testDefVal+            passed = not $ testRunReportFailed settings report+         in M.singleton testReportDescription (ReportNode passed)++combineReport :: ReportForest -> ReportForest -> ReportForest+combineReport = goF+  where+    goF :: ReportForest -> ReportForest -> ReportForest+    goF = M.unionWith goT+    goT :: ReportTree -> ReportTree -> ReportTree+    goT oldT newT = case (oldT, newT) of+      (ReportNode _, ReportNode newPassed) ->+        -- We could do '||' here but ignoring the old value is more accurate+        -- because the whole point is that we skip passed tests.+        ReportNode newPassed+      (ReportBranch oldForest, ReportBranch newForest) -> ReportBranch $ goF oldForest newForest+      _ -> newT++type ReportForest = Map Text ReportTree++data ReportTree+  = ReportNode !Bool+  | ReportBranch !ReportForest+  deriving stock (Show, Eq, Generic)++instance HasCodec ReportTree where+  codec = named "ReportTree" $ dimapCodec f g $ eitherCodec codec codec+    where+      f = \case+        Left n -> ReportNode n+        Right ts -> ReportBranch ts+      g = \case+        ReportNode n -> Left n+        ReportBranch n -> Right n
src/Test/Syd/SpecForest.hs view
@@ -13,7 +13,7 @@   = SpecifyNode Text a -- A test with its description   | PendingNode Text (Maybe Text)   | DescribeNode Text (SpecForest a) -- A description-  | SubForestNode (SpecForest a) -- A test with its description+  | SubForestNode (SpecForest a)   deriving (Functor)  instance Foldable SpecTree where
sydtest.cabal view
@@ -1,11 +1,11 @@ cabal-version: 1.12 --- This file has been generated from package.yaml by hpack version 0.36.0.+-- This file has been generated from package.yaml by hpack version 0.36.1. -- -- see: https://github.com/sol/hpack  name:           sydtest-version:        0.19.0.0+version:        0.20.0.0 synopsis:       A modern testing framework for Haskell with good defaults and advanced testing features. description:    A modern testing framework for Haskell with good defaults and advanced testing features. Sydtest aims to make the common easy and the hard possible. See https://github.com/NorfairKing/sydtest#readme for more information. category:       Testing@@ -43,6 +43,7 @@       Test.Syd.OptParse       Test.Syd.Output       Test.Syd.Path+      Test.Syd.ReRun       Test.Syd.Run       Test.Syd.Runner       Test.Syd.Runner.Asynchronous