{-| Description : Root of test suite -} module Main (main) where import qualified Control.Applicative as Applicative import qualified Data.Set as Set import qualified Language.Haskell.Formatter.Internal.Tests as Internal import qualified Language.Haskell.Formatter.Tests as Formatter import qualified Language.Haskell.Formatter.Toolkit.TestTool as TestTool import qualified System.FilePath as FilePath import qualified System.FilePath.Find as Find import qualified Test.Tasty as Tasty main :: IO () main = sequence tests >>= Tasty.defaultMain . Tasty.testGroup name where name = "Root" tests :: [IO Tasty.TestTree] tests = [sourceCodeStandardTests, documentationTests, Formatter.tests, Internal.tests] sourceCodeStandardTests :: IO Tasty.TestTree sourceCodeStandardTests = createTestTree TestTool.standardSourceCodeTest Find.always name where name = "Source code standard" createTestTree :: (FilePath -> Tasty.TestTree) -> Find.RecursionPredicate -> Tasty.TestName -> IO Tasty.TestTree createTestTree test recurse rootName = do files <- concat Applicative.<$> mapM (collectSourceFiles recurse) roots return . Tasty.testGroup rootName $ fmap test files collectSourceFiles :: Find.RecursionPredicate -> FilePath -> IO [FilePath] collectSourceFiles recurse = Find.find recurse isSourceFile where isSourceFile = isFile Find.&&? hasSourceExtension isFile = Find.fileType Find.==? Find.RegularFile hasSourceExtension = fmap (`Set.member` sourceExtensions) Find.extension sourceExtensions = Set.fromList [".hs", ".lhs"] roots :: [FilePath] roots = ["src" FilePath. "library", "src" FilePath. "executable", "testsuite" FilePath. "src"] documentationTests :: IO Tasty.TestTree documentationTests = createTestTree (TestTool.documentationTest roots) noRecursion name where noRecursion = Find.depth Find.==? rootDepth rootDepth = 0 name = "Documentation (doctest)"