content: --------------------------------------------------------------------------------
  {-# LANGUAGE OverloadedStrings #-}
  module Hakyll.Core.Dependencies.Tests
      ( tests
      ) where
  
  
  --------------------------------------------------------------------------------
  import           Data.List                (delete)
  import qualified Data.Map                 as M
  import qualified Data.Set                 as S
  import           Test.Tasty               (TestTree, testGroup)
  import           Test.Tasty.HUnit         (Assertion, (@=?))
  
  
  --------------------------------------------------------------------------------
  import           Hakyll.Core.Dependencies
  import           Hakyll.Core.Identifier
  import           TestSuite.Util
  
  
  --------------------------------------------------------------------------------
  tests :: TestTree
  tests = testGroup "Hakyll.Core.Dependencies.Tests" $
      fromAssertions "analyze" [case01, case02, case03]
  
  
  --------------------------------------------------------------------------------
  oldUniverse :: [Identifier]
  oldUniverse = M.keys oldFacts
  
  
  --------------------------------------------------------------------------------
  oldFacts :: DependencyFacts
  oldFacts = M.fromList
      [ ("posts/01.md",
          [])
      , ("posts/02.md",
          [])
      , ("index.md",
          [ PatternDependency "posts/*"
              (S.fromList ["posts/01.md", "posts/02.md"])
          , IdentifierDependency "posts/01.md"
          , IdentifierDependency "posts/02.md"
          ])
      ]
  
  
  --------------------------------------------------------------------------------
  -- | posts/02.md has changed
  case01 :: Assertion
  case01 = S.fromList ["posts/02.md", "index.md"] @=? ood
    where
      (ood, _, _) = outOfDate oldUniverse (S.singleton "posts/02.md") oldFacts
  
  
  --------------------------------------------------------------------------------
  -- | about.md was added
  case02 :: Assertion
  case02 = S.singleton "about.md" @=? ood
    where
      (ood, _, _) = outOfDate ("about.md" : oldUniverse) S.empty oldFacts
  
  
  --------------------------------------------------------------------------------
  -- | posts/01.md was removed
  case03 :: Assertion
  case03 = S.singleton "index.md" @=? ood
    where
      (ood, _, _) =
          outOfDate ("posts/01.md" `delete` oldUniverse) S.empty oldFacts
  