packages feed

lentil-1.0.2.0: test/Lentil/FileSpec.hs

module Lentil.FileSpec where

import Test.Hspec

import Lentil.File

-- File tests

main :: IO ()
main = hspec spec

fld :: String
fld = "test/test-files/test-proj/"

bas :: String
bas = fld ++ "base-case/"

spec :: Spec
spec = do

  describe "findIssues" $ do
    it "scans directories to find issues" $
      findIssues [] [] [bas ++ ""] [] >>= \fiss ->
      length fiss `shouldBe` 5
    it "allows to add specific folders" $
      findIssues [] [] [bas ++ ""] [] >>= \fiss ->
      findIssues [] [] [bas ++ "fold-a/", bas ++ "fold-b",
                        bas ++ "fold-c"] [] >>= \fiss2 ->
      length fiss `shouldBe` length fiss2
    it "accepts filenames instead of dirs, too" $
      findIssues [] [] [bas ++ "fold-a/foo1.hs"] [] >>= \fiss ->
      length fiss `shouldBe` 1

--     it "doesn't duplicate issues" $
--       findIssues [bas ++ "", bas ++ ""] [] >>= \fiss ->
--       length fiss `shouldBe` 5

    -- TODO: excluding files fails on MS Windows! Check why! [u:3] [bug]
    it "excludes some folders" $
      findIssues [] [] [bas ++ ""] [bas ++ "fold-c/"] >>= \fiss ->
      length fiss `shouldBe` 2
    it "excludes files" $
      findIssues [] [] [bas ++ ""] [bas ++ "fold-a/foo1.hs"] >>= \fiss ->
      length fiss `shouldBe` 4
    it "excludes subfolders" $
      findIssues [] [] [bas ++ "fold-c/"]
                 [bas ++ "fold-c/sub-fold/"] >>= \fiss ->
      length fiss `shouldBe` 1
    it "exludes . and _ folders" $
      findIssues [] [] [fld ++ "dot-folders/"] [] >>= \fiss ->
      length fiss `shouldBe` 1
    it "doesn't crash on wrong file" $
      findIssues [] [] [bas ++ "zxczd"] [] >>= \fiss ->
      length fiss `shouldBe` 0
    it "does search outside $PWD" $
      findIssues [] [] [bas] []                    >>= \fiss  ->
      findIssues [] [] [bas ++ "../base-case/"] [] >>= \fiss' ->
      length fiss `shouldBe` length fiss'