packages feed

find-conduit-0.2.2: test/main.hs

{-# LANGUAGE OverloadedStrings #-}

module Main where

import Conduit
import Control.Arrow
import Data.Conduit.Find
import Test.Hspec

main :: IO ()
main = hspec $ do
    describe "basic tests" $ do
        it "file passes a test" $ do
            res <- test (regular >>> not_ executable) "README.md"
            res `shouldBe` True

        it "file fails a test" $ do
            res <- test (not_ regular) "README.md"
            res `shouldBe` False

        it "file fails another test" $ do
            res <- test (regular >>> executable) "README.md"
            res `shouldBe` False

        it "finds files" $ do
            xs <- runResourceT $
                find "."
                    (    ignoreVcs
                     >>> prune (filename_ (== "dist"))
                     >>> glob "*.hs"
                     >>> not_ (glob "Setup*")
                     >>> regular
                     >>> not_ executable
                    )
                    $$ sinkList

            "./Data/Conduit/Find.hs" `elem` xs `shouldBe` True
            "./dist/setup-config" `elem` xs `shouldBe` False
            "./Setup.hs" `elem` xs `shouldBe` False
            "./.git/config" `elem` xs `shouldBe` False

        it "finds files with a different ordering" $ do
            xs <- runResourceT $
                find "."
                    (    ignoreVcs
                     >>> glob "*.hs"
                     >>> not_ (glob "Setup*")
                     -- This prune only applies to .hs files now, so it won't
                     -- match anything, thus having no effect but burning CPU!
                     >>> prune (filename_ (== "dist"))
                     >>> regular
                     >>> not_ executable
                    )
                    $$ sinkList

            "./Data/Conduit/Find.hs" `elem` xs `shouldBe` True
            "./dist/setup-config" `elem` xs `shouldBe` False
            "./Setup.hs" `elem` xs `shouldBe` False
            "./.git/config" `elem` xs `shouldBe` False

        it "finds files using a pre-pass filter" $ do
            xs <- runResourceT $
                findWithPreFilter "." True
                    (    ignoreVcs
                     >>> prune (filename_ (== "dist"))
                     >>> glob "*.hs"
                     >>> not_ (glob "Setup*")
                    )
                    (    regular
                     >>> not_ executable
                    )
                    =$ mapC entryPath $$ sinkList

            "./Data/Conduit/Find.hs" `elem` xs `shouldBe` True
            "./dist/setup-config" `elem` xs `shouldBe` False
            "./Setup.hs" `elem` xs `shouldBe` False
            "./.git/config" `elem` xs `shouldBe` False

        it "properly applies post-pass pruning" $ do
            xs <- runResourceT $
                findWithPreFilter "." True
                    (    ignoreVcs
                     >>> prune (depth (>=1))
                     >>> prune (filename_ (== "dist"))
                     >>> glob "*.hs"
                     >>> not_ (glob "Setup*")
                    )
                    (    regular
                     >>> not_ executable
                    )
                    =$ mapC entryPath $$ sinkList

            "./Data/Conduit/Find.hs" `elem` xs `shouldBe` False
            "./dist/setup-config" `elem` xs `shouldBe` False
            "./Setup.hs" `elem` xs `shouldBe` False
            "./.git/config" `elem` xs `shouldBe` False