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 +7/−0
- src/Test/Syd.hs +2/−1
- src/Test/Syd/OptParse.hs +28/−2
- src/Test/Syd/ReRun.hs +181/−0
- src/Test/Syd/SpecForest.hs +1/−1
- sydtest.cabal +3/−2
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