Describe gina#command#branch
  Before all
    let Path = vital#gina#import('System.Filepath')
    let slit1 = Slit(tempname(), 1)
    let slit2 = Slit(tempname(), 1)
    call slit1.write('A/foo.txt', [])
    call slit1.write('B/foo.txt', [])
    call slit1.write('C/foo.txt', [])
    call slit2.write('A/foo.txt', [])
    call slit2.write('B/foo.txt', [])
    call slit2.write('C/foo.txt', [])

    call slit1.execute('add %s', slit1.path('A/foo.txt'))
    call slit1.execute('commit --quiet -m "First"')
    call slit1.execute('checkout -b develop')
    call slit1.execute('add %s', slit1.path('B/foo.txt'))
    call slit1.execute('commit --quiet -m "Second"')
    call slit1.execute('checkout master')
    call slit1.execute('add %s', slit1.path('C/foo.txt'))
    call slit1.execute('commit --quiet -m "Thrid"')

    call slit2.execute('add %s', slit2.path('A/foo.txt'))
    call slit2.execute('commit --quiet -m "Forth"')

    call slit1.execute('remote add ext %s', slit2.worktree)
    call slit1.execute('fetch ext')
    call slit1.execute('checkout -track -b ext/master remotes/ext/master')
    call slit1.execute('checkout master')
  End

  After all
    %bwipeout!
  End

  Before
    %bwipeout!
    execute 'edit' fnameescape(slit1.worktree)
  End

  Describe Use cases
    It might be called without arguments
      GinaSync branch
      Assert Equals(winnr('$'), 1)
      Assert Equals(bufname('%'), printf('gina://%s:branch', slit1.refname))
      Assert Equals(getline(1, '$'), [
            \ '  develop[m',
            \ '* [32mmaster[m',
            \])
      Assert Equals(gina#action#candidates(1, line('$')), [
            \ {
            \   '__lnum': 1,
            \   'abbr': '  develop[m',
            \   'word': '  develop',
            \   'sign': ' ',
            \   'alias': '',
            \   'remote': '',
            \   'branch': 'develop',
            \   'rev': 'develop',
            \ },
            \ {
            \   '__lnum': 2,
            \   'abbr': '* [32mmaster[m',
            \   'word': '* master',
            \   'sign': '*',
            \   'alias': '',
            \   'remote': '',
            \   'branch': 'master',
            \   'rev': 'master',
            \ },
            \])
    End

    It might be called with --remotes
      GinaSync branch --remotes
      Assert Equals(winnr('$'), 1)
      Assert Equals(bufname('%'), printf('gina://%s:branch', slit1.refname))
      Assert Equals(getline(1, '$'), [
            \ '  [31mext/master[m',
            \])
      Assert Equals(gina#action#candidates(1, line('$')), [
            \ {
            \   '__lnum': 1,
            \   'abbr': '  [31mext/master[m',
            \   'word': '  ext/master',
            \   'sign': ' ',
            \   'alias': '',
            \   'remote': '',
            \   'branch': 'ext/master',
            \   'rev': 'ext/master',
            \ },
            \])
    End

    It might be called with --all
      GinaSync branch --all
      Assert Equals(winnr('$'), 1)
      Assert Equals(bufname('%'), printf('gina://%s:branch', slit1.refname))
      Assert Equals(getline(1, '$'), [
            \ '  develop[m',
            \ '* [32mmaster[m',
            \ '  [31mremotes/ext/master[m',
            \])
      Assert Equals(gina#action#candidates(1, line('$')), [
            \ {
            \   '__lnum': 1,
            \   'abbr': '  develop[m',
            \   'word': '  develop',
            \   'sign': ' ',
            \   'alias': '',
            \   'remote': '',
            \   'branch': 'develop',
            \   'rev': 'develop',
            \ },
            \ {
            \   '__lnum': 2,
            \   'abbr': '* [32mmaster[m',
            \   'word': '* master',
            \   'sign': '*',
            \   'alias': '',
            \   'remote': '',
            \   'branch': 'master',
            \   'rev': 'master',
            \ },
            \ {
            \   '__lnum': 3,
            \   'abbr': '  [31mremotes/ext/master[m',
            \   'word': '  remotes/ext/master',
            \   'sign': ' ',
            \   'alias': '',
            \   'remote': 'ext',
            \   'branch': 'master',
            \   'rev': 'ext/master',
            \ },
            \])
    End
  End
End
