{-# 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