Describe gina#command#status
  Before all
    let Path = vital#gina#import('System.Filepath')
    let slit1 = Slit(tempname(), 1)
    call slit1.write('A/foo.txt', [])
    call slit1.execute('add %s', slit1.path('A/foo.txt'))

    call slit1.write('A/foo.txt', ['1'])
    call slit1.execute('commit --quiet -am "First"')

    call slit1.write('A/foo.txt', ['2'])
    call slit1.execute('commit --quiet -am "Second"')

    call slit1.write('A/foo.txt', ['3'])
    call slit1.execute('add %s', slit1.path('A/foo.txt'))

    call slit1.write('A/foo.txt', ['4'])
  End

  After all
    %bwipeout!
  End

  Before
    %bwipeout!
  End

  Describe Use cases
    It might be called without arguments
      execute 'edit' fnameescape(slit1.path('A/foo.txt'))
      GinaSync status
      Assert Equals(winnr('$'), 1)
      Assert Equals(bufname('%'), printf('gina://%s:status', slit1.refname))
      Assert Match(join(getline(1, '$'), "\n"), '[32mmodified:   A/foo.txt[m')
      Assert Match(join(getline(1, '$'), "\n"), '[31mmodified:   A/foo.txt[m')
    End

    It might be called with -- A/*.txt
      execute 'edit' fnameescape(slit1.path('A/foo.txt'))
      GinaSync status -- A/*.txt
      Assert Equals(winnr('$'), 1)
      Assert Equals(bufname('%'), printf('gina://%s:status:--', slit1.refname))
      Assert Match(join(getline(1, '$'), "\n"), '[32mmodified:   A/foo.txt[m')
      Assert Match(join(getline(1, '$'), "\n"), '[31mmodified:   A/foo.txt[m')
    End

    It might be called with -- A/*.vim
      execute 'edit' fnameescape(slit1.path('A/foo.txt'))
      GinaSync status -- A/*.vim
      Assert Equals(winnr('$'), 1)
      Assert Equals(bufname('%'), printf('gina://%s:status:--', slit1.refname))
      Assert Equals(getline(1, '$'), [
            \ 'On branch master',
            \ 'nothing to commit, working tree clean',
            \])
    End
  End

  Describe Use cases (--short)
    It might be called without arguments
      execute 'edit' fnameescape(slit1.path('A/foo.txt'))
      GinaSync status --short
      Assert Equals(winnr('$'), 1)
      Assert Equals(bufname('%'), printf('gina://%s:status', slit1.refname))
      Assert Equals(getline(1, '$'), [
            \ '[32mM[m[31mM[m A/foo.txt'
            \])
    End

    It might be called with -- A/*.txt
      execute 'edit' fnameescape(slit1.path('A/foo.txt'))
      GinaSync status --short -- A/*.txt
      Assert Equals(winnr('$'), 1)
      Assert Equals(bufname('%'), printf('gina://%s:status:--', slit1.refname))
      Assert Equals(getline(1, '$'), [
            \ '[32mM[m[31mM[m A/foo.txt'
            \])
    End

    It might be called with -- A/*.vim
      execute 'edit' fnameescape(slit1.path('A/foo.txt'))
      GinaSync status --short -- A/*.vim
      Assert Equals(winnr('$'), 1)
      Assert Equals(bufname('%'), printf('gina://%s:status:--', slit1.refname))
      Assert Equals(getline(1, '$'), [''])
    End
  End
End
