packages feed

hascard-0.4.0.0: test/Spec.hs

import Test.Tasty
import Test.Tasty.HUnit
import Test.Tasty.QuickCheck
import DeckHandling
import Parser
import States
import Recents

main :: IO ()
main = defaultMain tests

tests :: TestTree
tests = testGroup "Tests" [unitTests]

unitTests :: TestTree
unitTests = testGroup "Unit tests"
  [ testRecents
  , testChunking
  ]

testRecents :: TestTree
testRecents = testGroup "Shortening filepaths"
  [ testCase "empty recents" $
      shortenFilepaths [] @?= []
  , testRecentsExtension ".txt"
  , testRecentsExtension ".md"
  , testRecentsMix
  ]

testRecentsExtension :: String -> TestTree
testRecentsExtension ext = testGroup ("Extension " <> ext)
  [ testCase "different file names" $
      shortenFilepaths ["some/path/deck1" <> ext, "some/other/path/deck2" <> ext, "some/new/path/deck3" <> ext]
      @?=
      ["deck1", "deck2", "deck3"]

  , testCase "recents same file name" $
      shortenFilepaths ["/path/to/deck" <> ext, "/path/to/another/deck" <> ext, "other/path/normal" <> ext]
      @?=
      ["to/deck", "another/deck", "normal"] 

  , testCase "recents same directory and file name" $
      shortenFilepaths ["/some/directory/deck" <> ext, "/another/directory/deck" <> ext, "other/path/normal" <> ext]
      @?=
      ["some/directory/deck", "another/directory/deck", "normal"]
  ]

testRecentsMix :: TestTree
testRecentsMix = testGroup "Mixed extensions"
  [ testCase "different file names" $
      shortenFilepaths ["some/path/deck1.txt", "some/other/path/deck2.txt", "some/new/path/deck3.md"]
      @?=
      ["deck1.txt", "deck2.txt", "deck3.md"]

  , testCase "recents same file name, same extension" $
      shortenFilepaths ["/path/to/deck.txt", "/path/to/another/deck.txt", "other/path/normal.md"]
      @?=
      ["to/deck.txt", "another/deck.txt", "normal.md"]

  , testCase "recents same file name, different extension" $
      shortenFilepaths ["/path/to/deck.md", "/path/to/another/deck.txt", "other/path/normal.md"]
      @?=
      ["deck.md", "deck.txt", "normal.md"] 

  , testCase "recents same directory and file name, same extension" $
      shortenFilepaths ["/some/directory/deck.md", "/another/directory/deck.md", "other/path/normal.txt"]
      @?=
      ["some/directory/deck.md", "another/directory/deck.md", "normal.txt"]

  , testCase "recents same directory and file name, different extension" $
      shortenFilepaths ["/some/directory/deck.txt", "/another/directory/deck.md", "other/path/normal.txt"]
      @?=
      ["deck.txt", "deck.md", "normal.txt"]
  ]

testChunking :: TestTree
testChunking = testGroup "QuickCheck"
  [ testProperty "concat . doChunking n == id" $
      \xs n -> n > 0 ==> concat (splitIntoNChunks n xs) == (xs :: [Int])
  ]