{-# LANGUAGE OverloadedStrings #-}
module Main where
import Conduit
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 "."
(do ignoreVcs
when_ (name_ "dist") prune
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 "."
(do ignoreVcs
glob "*.hs"
not_ (glob "Setup*")
-- This applies only to .hs files now, so it won't
-- match anything, thus having no effect but burning
-- CPU!
when_ (name_ "dist") prune
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 $
find "."
(do ignoreVcs
when_ (name_ "dist") prune
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 "properly applies post-pass pruning" $ do
xs <- runResourceT $
find "."
(do ignoreVcs
maxdepth_ 1
when_ (name_ "dist") prune
glob "*.hs"
not_ (glob "Setup*")
regular
not_ executable)
$$ 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