packages feed

gitHUD-1.0.0.0: test/Test/GitHUD/Git/Parse/Status.hs

module Test.GitHUD.Git.Parse.Status (
  statusTests
  ) where

import Test.Tasty
import Test.Tasty.HUnit

import GitHUD.Git.Parse.Status
import GitHUD.Git.Types

statusTests :: TestTree
statusTests = testGroup "Status Parser Test"
  [ testCase "with an empty input, should return 0 for all categories" $
      gitParseStatus ""  @?= zeroLocalRepoChanges

    , testCase "with one locally modified file" $
      gitParseStatus " M some random foo bar stuff\n" @?= (zeroLocalRepoChanges { localMod = 1 })

    , testCase "with one locally deleted file" $
      gitParseStatus " D some random foo bar stuff\n" @?= (zeroLocalRepoChanges { localDel = 1 })

    , testCase "with one locally added file" $
      gitParseStatus "?? some random foo bar stuff\n" @?= (zeroLocalRepoChanges { localAdd = 1 })

    , testCase "with one added file to the index" $
      gitParseStatus "A  some random foo bar stuff\n" @?= (zeroLocalRepoChanges { indexAdd = 1 })

    , testCase "with one modified file to the index" $
      gitParseStatus "M  some random foo bar stuff\n" @?= (zeroLocalRepoChanges { indexMod = 1 })

    , testCase "with one added file to the index" $
      gitParseStatus "D  some random foo bar stuff\n" @?= (zeroLocalRepoChanges { indexDel = 1 })

    , testCase "with a conflict with both sides changed" $
      gitParseStatus "UU test\n" @?= (zeroLocalRepoChanges { conflict = 1 })

    , testCase "with a conflict with us side changed" $
      gitParseStatus "DU test\n" @?= (zeroLocalRepoChanges { conflict = 1 })

    , testCase "with a conflict with them side changed" $
      gitParseStatus "UD test\n" @?= (zeroLocalRepoChanges { conflict = 1 })

    , testCase "with a complex mix" $
      gitParseStatus
      complexStatusString
      @?= (zeroLocalRepoChanges { localAdd = 1, localDel = 1, localMod = 1,
                           indexAdd = 1, indexMod = 1, indexDel = 1, conflict = 3 })

    , testCase "with a renamed file in the index" $
      gitParseStatus "R  test\n" @?= (zeroLocalRepoChanges { renamed = 1 })

    , testCase "with a file renamed in the index and modified locally" $
      gitParseStatus "RM test\n" @?= (zeroLocalRepoChanges { localMod = 1, renamed = 1 })

    , testCase "with a file renamed in the index and deleted locally" $
      gitParseStatus "RD test\n" @?= (zeroLocalRepoChanges { localDel = 1, renamed = 1 })

    , testCase "with a file modified in the index and deleted locally" $
      gitParseStatus "MD test\n" @?= (zeroLocalRepoChanges { localDel = 1, indexMod = 1 })

    , testCase "with a file changed in the index AND locally" $
      gitParseStatus "MM test\n" @?= (zeroLocalRepoChanges { localMod = 1, indexMod = 1 })

    , testCase "with a file added in the index AND modified locally" $
      gitParseStatus "AM test\n" @?= (zeroLocalRepoChanges { localMod = 1, indexAdd = 1 })

    , testCase "with a file added in the index AND deleted locally" $
      gitParseStatus "AD test\n" @?= (zeroLocalRepoChanges { localDel = 1, indexAdd = 1 })

  ]

complexStatusString :: String
complexStatusString =
  " M foo\n\
  \ D bar\n\
  \?? add\n\
  \A  add\n\
  \M  mod\n\
  \D  del\n\
  \UU conflict\n\
  \DU conflict\n\
  \UD conflict\n"