content: module Test.Hspec.Core.Runner.PrintSlowSpecItemsSpec (spec) where
  
  import           Prelude ()
  import           Helper
  
  import           System.IO (stderr)
  
  import           Test.Hspec.Core.Format
  import           Test.Hspec.Core.Runner.PrintSlowSpecItems
  
  location :: Location
  location = Location {
    locationFile = "Foo.hs"
  , locationLine = 23
  , locationColumn = 42
  }
  
  item :: Item
  item = Item {
    itemLocation = Just location
  , itemDuration = 0
  , itemInfo = undefined
  , itemResult = undefined
  }
  
  spec :: Spec
  spec = do
    describe "printSlowSpecItems" $ do
      let
        format = printSlowSpecItems 2 $ \ _ -> pass
        run = hCapture_ [stderr] . format . Done
  
      it "prints slow spec items" $ do
        run [
              ((["foo", "bar"], "one"), item {itemDuration = 0.100})
            , ((["foo", "bar"], "two"), item {itemDuration = 0.500})
            , ((["foo", "bar"], "thr"), item {itemDuration = 0.050})
            ]
        `shouldReturn` unlines [
          ""
        , "Slow spec items:"
        , "  Foo.hs:23:42: /foo/bar/two/ (500ms)"
        , "  Foo.hs:23:42: /foo/bar/one/ (100ms)"
        ]
  
      context "when there are no slow items" $ do
        it "prints nothing" $ do
          run [((["foo", "bar"], "one"), item {itemDuration = 0})]
          `shouldReturn` ""
  