summaryrefslogblamecommitdiffstats
path: root/test-status.sh
blob: 025fc69c597972524d6d5f2f77957a11223896d0 (plain) (tree)







































































































































                                                                                                  
scriptDir="$(cd "$(dirname "$0")"; pwd)"

source "$scriptDir/git-base.sh"

#  X          Y     Meaning
#  -------------------------------------------------
#            [MD]   not updated
#  M        [ MD]   updated in index
#  A        [ MD]   added to index
#  D         [ M]   deleted from index
#  R        [ MD]   renamed in index
#  C        [ MD]   copied in index
#  [MARC]           index and work tree matches
#  [ MARC]     M    work tree changed since index
#  [ MARC]     D    deleted in work tree
#  -------------------------------------------------
#  D           D    unmerged, both deleted
#  A           U    unmerged, added by us
#  U           D    unmerged, deleted by them
#  U           A    unmerged, added by them
#  D           U    unmerged, deleted by us
#  A           A    unmerged, both added
#  U           U    unmerged, both modified
#  -------------------------------------------------
#  ?           ?    untracked
#  !           !    ignored
#  -------------------------------------------------

test_basic_unstaged_options() {
  status="""
 M modified-and-unstaged
 D deleted-and-unstaged
 A impossible-added-and-unstaged-(as-added-and-unstaged-is-untracked)
 C impossible-copied-and-unstaged-(as-copied-and-unstaged-is-untracked)
 R impossible-renamed-and-unstaged-(as-renamed-and-unstaged-is-untracked)
 U impossible-updated-but-unmerged
 ! impossible-ignored-without-!-in-position-1
 ? impossible-untracked-without-?-in-position-1
   empty-spaces-mean-nothing
  """
  assertEquals "line:${LINENO} staged status failed match" "" "$(staged_status "$status")"
  assertEquals "line:${LINENO} untracked status failed match" "" "$(untracked_status "$status")"
  assertEquals "line:${LINENO} unstaged status failed match"\
    "1${unstaged}${deleted}1${unstaged}${modified}" "$(unstaged_status "$status")"
  assertEquals "line:${LINENO} conflicted status failed match" "" "$(conflicted_status "$status")"
}

test_basic_staged_options() {
  status="""
A  added-and-staged
  """
  assertEquals "line:${LINENO} staged status failed match"\
    "1${staged}${added}" "$(staged_status "$status")"
  assertEquals "line:${LINENO} untracked status failed match" "" "$(untracked_status "$status")"
  assertEquals "line:${LINENO} unstaged status failed match" "" "$(unstaged_status "$status")"
  assertEquals "line:${LINENO} conflicted status failed match" "" "$(conflicted_status "$status")"

  status="""
M  modified-and-staged
  """
  assertEquals "line:${LINENO} staged status failed match"\
    "1${staged}${modified}" "$(staged_status "$status")"
  assertEquals "line:${LINENO} untracked status failed match" "" "$(untracked_status "$status")"
  assertEquals "line:${LINENO} unstaged status failed match" "" "$(unstaged_status "$status")"
  assertEquals "line:${LINENO} conflicted status failed match" "" "$(conflicted_status "$status")"

  status="""
D  deleted-and-staged
  """
  assertEquals "line:${LINENO} staged status failed match"\
    "1${staged}${deleted}" "$(staged_status "$status")"
  assertEquals "line:${LINENO} untracked status failed match" "" "$(untracked_status "$status")"
  assertEquals "line:${LINENO} unstaged status failed match" "" "$(unstaged_status "$status")"
  assertEquals "line:${LINENO} conflicted status failed match" "" "$(conflicted_status "$status")"

  status="""
C  copied-and-staged
  """
  assertEquals "line:${LINENO} staged status failed match"\
    "1${staged}${copied}" "$(staged_status "$status")"
  assertEquals "line:${LINENO} untracked status failed match" "" "$(untracked_status "$status")"
  assertEquals "line:${LINENO} unstaged status failed match" "" "$(unstaged_status "$status")"
  assertEquals "line:${LINENO} conflicted status failed match" "" "$(conflicted_status "$status")"

  status="""
R  renamed-and-staged
  """
  assertEquals "line:${LINENO} staged status failed match"\
    "1${staged}${renamed}" "$(staged_status "$status")"
  assertEquals "line:${LINENO} untracked status failed match" "" "$(untracked_status "$status")"
  assertEquals "line:${LINENO} unstaged status failed match" "" "$(unstaged_status "$status")"
  assertEquals "line:${LINENO} conflicted status failed match" "" "$(conflicted_status "$status")"

  status="""
U  impossible-unmerged-without-a-character-in-position-2
?  impossible-untracked-without-?-in-position-2
!  impossible-ignored-without-!-in-position-2
   empty-spaces-do-nothing
  """
  assertEquals "line:${LINENO} staged status failed match" "" "$(staged_status "$status")"
  assertEquals "line:${LINENO} untracked status failed match" "" "$(untracked_status "$status")"
  assertEquals "line:${LINENO} unstaged status failed match" "" "$(unstaged_status "$status")"
  assertEquals "line:${LINENO} conflicted status failed match" "" "$(conflicted_status "$status")"
}

test_conflicts() {
  status="""
UD unmerged-deleted-by-them
UA unmerged-added-by-them
  """
  assertEquals "line:${LINENO}" "" "$(staged_status "$status")"
  assertEquals "line:${LINENO}" "" "$(untracked_status "$status")"
  assertEquals "line:${LINENO}" "" "$(unstaged_status "$status")"
  assertEquals "line:${LINENO}" "2${conflicted}${them}" "$(conflicted_status "$status")"

  status="""
AU unmerged-added-by-us
DU unmerged-deleted-by-us
  """
  assertEquals "line:${LINENO}" "" "$(staged_status "$status")"
  assertEquals "line:${LINENO}" "" "$(untracked_status "$status")"
  assertEquals "line:${LINENO}" "" "$(unstaged_status "$status")"
  assertEquals "line:${LINENO}" "2${conflicted}${us}" "$(conflicted_status "$status")"

  status="""
AA unmerged-both-added
DD unmerged-both-deleted
UU unmerged-both-modified
  """
  assertEquals "line:${LINENO}" "" "$(staged_status "$status")"
  assertEquals "line:${LINENO}" "" "$(untracked_status "$status")"
  assertEquals "line:${LINENO}" "" "$(unstaged_status "$status")"
  assertEquals "line:${LINENO}" "3${conflicted}${both}" "$(conflicted_status "$status")"
}

. ./shunit/shunit2