(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:test_description)
          op: assign_op.Equal
          rhs: {(SQ <'test git-specific bash prompt functions'>)}
          spids: [13]
        )
      ]
    )
    (C {<.>} {<'./lib-bash.sh'>})
    (C {<.>} {(DQ ($ Id.VSub_DollarName '$GIT_BUILD_DIR') <'/contrib/completion/git-prompt.sh'>)})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:actual)
          op: assign_op.Equal
          rhs: {(DQ ($ Id.VSub_DollarName '$TRASH_DIRECTORY') <'/actual'>)}
          spids: [32]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:c_red)
          op: assign_op.Equal
          rhs: {(SQ <'\\\\[\\\\e[31m\\\\]'>)}
          spids: [38]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:c_green)
          op: assign_op.Equal
          rhs: {(SQ <'\\\\[\\\\e[32m\\\\]'>)}
          spids: [43]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:c_lblue)
          op: assign_op.Equal
          rhs: {(SQ <'\\\\[\\\\e[1;34m\\\\]'>)}
          spids: [48]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:c_clear)
          op: assign_op.Equal
          rhs: {(SQ <'\\\\[\\\\e[0m\\\\]'>)}
          spids: [53]
        )
      ]
    )
    (C {<test_expect_success>} {(SQ <'setup for prompt tests'>)} 
      {
        (SQ <'\n'> <'\tgit init otherrepo &&\n'> <'\techo 1 >file &&\n'> <'\tgit add file &&\n'> 
          <'\ttest_tick &&\n'> <'\tgit commit -m initial &&\n'> <'\tgit tag -a -m msg1 t1 &&\n'> <'\tgit checkout -b b1 &&\n'> 
          <'\techo 2 >file &&\n'> <'\tgit commit -m "second b1" file &&\n'> <'\techo 3 >file &&\n'> 
          <'\tgit commit -m "third b1" file &&\n'> <'\tgit tag -a -m msg2 t2 &&\n'> <'\tgit checkout -b b2 master &&\n'> <'\techo 0 >file &&\n'> 
          <'\tgit commit -m "second b2" file &&\n'> <'\techo 00 >file &&\n'> <'\tgit commit -m "another b2" file &&\n'> <'\techo 000 >file &&\n'> 
          <'\tgit commit -m "yet another b2" file &&\n'> <'\tmkdir ignored_dir &&\n'> <'\techo "ignored_dir/" >>.gitignore &&\n'> <'\tgit checkout master\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'prompt - branch name'>)} 
      {
        (SQ <'\n'> <'\tprintf " (master)" >expected &&\n'> <'\t__git_ps1 >"$actual" &&\n'> 
          <'\ttest_cmp expected "$actual"\n'>
        )
      }
    )
    (C {<test_expect_success>} {<SYMLINKS>} {(SQ <'prompt - branch name - symlink symref'>)} 
      {
        (SQ <'\n'> <'\tprintf " (master)" >expected &&\n'> 
          <'\ttest_when_finished "git checkout master" &&\n'> <'\ttest_config core.preferSymlinkRefs true &&\n'> <'\tgit checkout master &&\n'> 
          <'\t__git_ps1 >"$actual" &&\n'> <'\ttest_cmp expected "$actual"\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'prompt - unborn branch'>)} 
      {
        (SQ <'\n'> <'\tprintf " (unborn)" >expected &&\n'> <'\tgit checkout --orphan unborn &&\n'> 
          <'\ttest_when_finished "git checkout master" &&\n'> <'\t__git_ps1 >"$actual" &&\n'> <'\ttest_cmp expected "$actual"\n'>
        )
      }
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:repo_with_newline)
          op: assign_op.Equal
          rhs: {(SQ <'repo\n'> <'with\n'> <newline>)}
          spids: [141]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (C {<test_have_prereq>} {<Id.KW_Bang '!'> <MINGW>})
                (command.Simple
                  words: [{<mkdir>} {(DQ ($ Id.VSub_DollarName '$repo_with_newline'))}]
                  redirects: [
                    (redir
                      op: <Id.Redir_Great '2>'>
                      loc: (redir_loc.Fd fd:2)
                      arg: {<'/dev/null'>}
                    )
                  ]
                  do_fork: T
                )
              ]
            )
          ]
          action: [(C {<test_set_prereq>} {<FUNNYNAMES>})]
          spids: [149 167]
        )
      ]
      else_action: [(C {<say>} {(SQ <'Your filesystem does not allow newlines in filenames.'>)})]
    )
    (C {<test_expect_success>} {<FUNNYNAMES>} {(SQ <'prompt - with newline in path'>)} 
      {
        (SQ <'\n'> <'\tprintf " (master)" >expected &&\n'> <'\tgit init "$repo_with_newline" &&\n'> 
          <'\ttest_when_finished "rm -rf \\"$repo_with_newline\\"" &&\n'> <'\tmkdir "$repo_with_newline"/subdir &&\n'> <'\t(\n'> <'\t\tcd "$repo_with_newline/subdir" &&\n'> 
          <'\t\t__git_ps1 >"$actual"\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'prompt - detached head'>)} 
      {
        (SQ <'\n'> 
          <'\tprintf " ((%s...))" $(git log -1 --format="%h" --abbrev=13 b1^) >expected &&\n'> <'\ttest_config core.abbrev 13 &&\n'> <'\tgit checkout b1^ &&\n'> 
          <'\ttest_when_finished "git checkout master" &&\n'> <'\t__git_ps1 >"$actual" &&\n'> <'\ttest_cmp expected "$actual"\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'prompt - describe detached head - contains'>)} 
      {
        (SQ <'\n'> <'\tprintf " ((t2~1))" >expected &&\n'> <'\tgit checkout b1^ &&\n'> 
          <'\ttest_when_finished "git checkout master" &&\n'> <'\t(\n'> <'\t\tGIT_PS1_DESCRIBE_STYLE=contains &&\n'> <'\t\t__git_ps1 >"$actual"\n'> <'\t) &&\n'> 
          <'\ttest_cmp expected "$actual"\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'prompt - describe detached head - branch'>)} 
      {
        (SQ <'\n'> <'\tprintf " ((tags/t2~1))" >expected &&\n'> <'\tgit checkout b1^ &&\n'> 
          <'\ttest_when_finished "git checkout master" &&\n'> <'\t(\n'> <'\t\tGIT_PS1_DESCRIBE_STYLE=branch &&\n'> <'\t\t__git_ps1 >"$actual"\n'> <'\t) &&\n'> 
          <'\ttest_cmp expected "$actual"\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'prompt - describe detached head - describe'>)} 
      {
        (SQ <'\n'> <'\tprintf " ((t1-1-g%s))" $(git log -1 --format="%h" b1^) >expected &&\n'> 
          <'\tgit checkout b1^ &&\n'> <'\ttest_when_finished "git checkout master" &&\n'> <'\t(\n'> 
          <'\t\tGIT_PS1_DESCRIBE_STYLE=describe &&\n'> <'\t\t__git_ps1 >"$actual"\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'prompt - describe detached head - default'>)} 
      {
        (SQ <'\n'> <'\tprintf " ((t2))" >expected &&\n'> <'\tgit checkout --detach b1 &&\n'> 
          <'\ttest_when_finished "git checkout master" &&\n'> <'\t__git_ps1 >"$actual" &&\n'> <'\ttest_cmp expected "$actual"\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'prompt - inside .git directory'>)} 
      {
        (SQ <'\n'> <'\tprintf " (GIT_DIR!)" >expected &&\n'> <'\t(\n'> <'\t\tcd .git &&\n'> 
          <'\t\t__git_ps1 >"$actual"\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'prompt - deep inside .git directory'>)} 
      {
        (SQ <'\n'> <'\tprintf " (GIT_DIR!)" >expected &&\n'> <'\t(\n'> <'\t\tcd .git/refs/heads &&\n'> 
          <'\t\t__git_ps1 >"$actual"\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'prompt - inside bare repository'>)} 
      {
        (SQ <'\n'> <'\tprintf " (BARE:master)" >expected &&\n'> <'\tgit init --bare bare.git &&\n'> 
          <'\ttest_when_finished "rm -rf bare.git" &&\n'> <'\t(\n'> <'\t\tcd bare.git &&\n'> <'\t\t__git_ps1 >"$actual"\n'> <'\t) &&\n'> 
          <'\ttest_cmp expected "$actual"\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'prompt - interactive rebase'>)} 
      {
        (SQ <'\n'> <'\tprintf " (b1|REBASE-i 2/3)" >expected &&\n'> 
          <'\twrite_script fake_editor.sh <<-\\EOF &&\n'> <'\t\techo "exec echo" >"$1"\n'> <'\t\techo "edit $(git log -1 --format="%h")" >>"$1"\n'> 
          <'\t\techo "exec echo" >>"$1"\n'> <'\tEOF\n'> <'\ttest_when_finished "rm -f fake_editor.sh" &&\n'> 
          <'\ttest_set_editor "$TRASH_DIRECTORY/fake_editor.sh" &&\n'> <'\tgit checkout b1 &&\n'> <'\ttest_when_finished "git checkout master" &&\n'> 
          <'\tgit rebase -i HEAD^ &&\n'> <'\ttest_when_finished "git rebase --abort" &&\n'> <'\t__git_ps1 >"$actual" &&\n'> 
          <'\ttest_cmp expected "$actual"\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'prompt - rebase merge'>)} 
      {
        (SQ <'\n'> <'\tprintf " (b2|REBASE-m 1/3)" >expected &&\n'> <'\tgit checkout b2 &&\n'> 
          <'\ttest_when_finished "git checkout master" &&\n'> <'\ttest_must_fail git rebase --merge b1 b2 &&\n'> <'\ttest_when_finished "git rebase --abort" &&\n'> 
          <'\t__git_ps1 >"$actual" &&\n'> <'\ttest_cmp expected "$actual"\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'prompt - rebase'>)} 
      {
        (SQ <'\n'> <'\tprintf " (b2|REBASE 1/3)" >expected &&\n'> <'\tgit checkout b2 &&\n'> 
          <'\ttest_when_finished "git checkout master" &&\n'> <'\ttest_must_fail git rebase b1 b2 &&\n'> <'\ttest_when_finished "git rebase --abort" &&\n'> 
          <'\t__git_ps1 >"$actual" &&\n'> <'\ttest_cmp expected "$actual"\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'prompt - merge'>)} 
      {
        (SQ <'\n'> <'\tprintf " (b1|MERGING)" >expected &&\n'> <'\tgit checkout b1 &&\n'> 
          <'\ttest_when_finished "git checkout master" &&\n'> <'\ttest_must_fail git merge b2 &&\n'> <'\ttest_when_finished "git reset --hard" &&\n'> 
          <'\t__git_ps1 >"$actual" &&\n'> <'\ttest_cmp expected "$actual"\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'prompt - cherry-pick'>)} 
      {
        (SQ <'\n'> <'\tprintf " (master|CHERRY-PICKING)" >expected &&\n'> 
          <'\ttest_must_fail git cherry-pick b1 &&\n'> <'\ttest_when_finished "git reset --hard" &&\n'> <'\t__git_ps1 >"$actual" &&\n'> 
          <'\ttest_cmp expected "$actual"\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'prompt - bisect'>)} 
      {
        (SQ <'\n'> <'\tprintf " (master|BISECTING)" >expected &&\n'> <'\tgit bisect start &&\n'> 
          <'\ttest_when_finished "git bisect reset" &&\n'> <'\t__git_ps1 >"$actual" &&\n'> <'\ttest_cmp expected "$actual"\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'prompt - dirty status indicator - clean'>)} 
      {
        (SQ <'\n'> <'\tprintf " (master)" >expected &&\n'> <'\t(\n'> 
          <'\t\tGIT_PS1_SHOWDIRTYSTATE=y &&\n'> <'\t\t__git_ps1 >"$actual"\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'prompt - dirty status indicator - dirty worktree'>)} 
      {
        (SQ <'\n'> <'\tprintf " (master *)" >expected &&\n'> <'\techo "dirty" >file &&\n'> 
          <'\ttest_when_finished "git reset --hard" &&\n'> <'\t(\n'> <'\t\tGIT_PS1_SHOWDIRTYSTATE=y &&\n'> <'\t\t__git_ps1 >"$actual"\n'> <'\t) &&\n'> 
          <'\ttest_cmp expected "$actual"\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'prompt - dirty status indicator - dirty index'>)} 
      {
        (SQ <'\n'> <'\tprintf " (master +)" >expected &&\n'> <'\techo "dirty" >file &&\n'> 
          <'\ttest_when_finished "git reset --hard" &&\n'> <'\tgit add -u &&\n'> <'\t(\n'> <'\t\tGIT_PS1_SHOWDIRTYSTATE=y &&\n'> <'\t\t__git_ps1 >"$actual"\n'> 
          <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'prompt - dirty status indicator - dirty index and worktree'>)} 
      {
        (SQ <'\n'> <'\tprintf " (master *+)" >expected &&\n'> <'\techo "dirty index" >file &&\n'> 
          <'\ttest_when_finished "git reset --hard" &&\n'> <'\tgit add -u &&\n'> <'\techo "dirty worktree" >file &&\n'> <'\t(\n'> 
          <'\t\tGIT_PS1_SHOWDIRTYSTATE=y &&\n'> <'\t\t__git_ps1 >"$actual"\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'prompt - dirty status indicator - orphan branch - clean'>)} 
      {
        (SQ <'\n'> <'\tprintf " (orphan #)" >expected &&\n'> 
          <'\ttest_when_finished "git checkout master" &&\n'> <'\tgit checkout --orphan orphan &&\n'> <'\tgit reset --hard &&\n'> <'\t(\n'> 
          <'\t\tGIT_PS1_SHOWDIRTYSTATE=y &&\n'> <'\t\t__git_ps1 >"$actual"\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'prompt - dirty status indicator - orphan branch - dirty index'>)} 
      {
        (SQ <'\n'> <'\tprintf " (orphan +)" >expected &&\n'> 
          <'\ttest_when_finished "git checkout master" &&\n'> <'\tgit checkout --orphan orphan &&\n'> <'\t(\n'> <'\t\tGIT_PS1_SHOWDIRTYSTATE=y &&\n'> 
          <'\t\t__git_ps1 >"$actual"\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'>
        )
      }
    )
    (C {<test_expect_success>} 
      {(SQ <'prompt - dirty status indicator - orphan branch - dirty index and worktree'>)} 
      {
        (SQ <'\n'> <'\tprintf " (orphan *+)" >expected &&\n'> 
          <'\ttest_when_finished "git checkout master" &&\n'> <'\tgit checkout --orphan orphan &&\n'> <'\t>file &&\n'> <'\t(\n'> <'\t\tGIT_PS1_SHOWDIRTYSTATE=y &&\n'> 
          <'\t\t__git_ps1 >"$actual"\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'>
        )
      }
    )
    (C {<test_expect_success>} 
      {(SQ <'prompt - dirty status indicator - shell variable unset with config disabled'>)} 
      {
        (SQ <'\n'> <'\tprintf " (master)" >expected &&\n'> <'\techo "dirty" >file &&\n'> 
          <'\ttest_when_finished "git reset --hard" &&\n'> <'\ttest_config bash.showDirtyState false &&\n'> <'\t(\n'> 
          <'\t\tsane_unset GIT_PS1_SHOWDIRTYSTATE &&\n'> <'\t\t__git_ps1 >"$actual"\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'>
        )
      }
    )
    (C {<test_expect_success>} 
      {(SQ <'prompt - dirty status indicator - shell variable unset with config enabled'>)} 
      {
        (SQ <'\n'> <'\tprintf " (master)" >expected &&\n'> <'\techo "dirty" >file &&\n'> 
          <'\ttest_when_finished "git reset --hard" &&\n'> <'\ttest_config bash.showDirtyState true &&\n'> <'\t(\n'> 
          <'\t\tsane_unset GIT_PS1_SHOWDIRTYSTATE &&\n'> <'\t\t__git_ps1 >"$actual"\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'>
        )
      }
    )
    (C {<test_expect_success>} 
      {(SQ <'prompt - dirty status indicator - shell variable set with config disabled'>)} 
      {
        (SQ <'\n'> <'\tprintf " (master)" >expected &&\n'> <'\techo "dirty" >file &&\n'> 
          <'\ttest_when_finished "git reset --hard" &&\n'> <'\ttest_config bash.showDirtyState false &&\n'> <'\t(\n'> <'\t\tGIT_PS1_SHOWDIRTYSTATE=y &&\n'> 
          <'\t\t__git_ps1 >"$actual"\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'>
        )
      }
    )
    (C {<test_expect_success>} 
      {(SQ <'prompt - dirty status indicator - shell variable set with config enabled'>)} 
      {
        (SQ <'\n'> <'\tprintf " (master *)" >expected &&\n'> <'\techo "dirty" >file &&\n'> 
          <'\ttest_when_finished "git reset --hard" &&\n'> <'\ttest_config bash.showDirtyState true &&\n'> <'\t(\n'> <'\t\tGIT_PS1_SHOWDIRTYSTATE=y &&\n'> 
          <'\t\t__git_ps1 >"$actual"\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'>
        )
      }
    )
    (C {<test_expect_success>} 
      {(SQ <'prompt - dirty status indicator - not shown inside .git directory'>)} 
      {
        (SQ <'\n'> <'\tprintf " (GIT_DIR!)" >expected &&\n'> <'\techo "dirty" >file &&\n'> 
          <'\ttest_when_finished "git reset --hard" &&\n'> <'\t(\n'> <'\t\tGIT_PS1_SHOWDIRTYSTATE=y &&\n'> <'\t\tcd .git &&\n'> <'\t\t__git_ps1 >"$actual"\n'> 
          <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'prompt - stash status indicator - no stash'>)} 
      {
        (SQ <'\n'> <'\tprintf " (master)" >expected &&\n'> <'\t(\n'> 
          <'\t\tGIT_PS1_SHOWSTASHSTATE=y &&\n'> <'\t\t__git_ps1 >"$actual"\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'prompt - stash status indicator - stash'>)} 
      {
        (SQ <'\n'> <'\tprintf " (master $)" >expected &&\n'> <'\techo 2 >file &&\n'> 
          <'\tgit stash &&\n'> <'\ttest_when_finished "git stash drop" &&\n'> <'\tgit pack-refs --all &&\n'> <'\t(\n'> 
          <'\t\tGIT_PS1_SHOWSTASHSTATE=y &&\n'> <'\t\t__git_ps1 >"$actual"\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'>
        )
      }
    )
    (C {<test_expect_success>} 
      {(SQ <'prompt - stash status indicator - not shown inside .git directory'>)} 
      {
        (SQ <'\n'> <'\tprintf " (GIT_DIR!)" >expected &&\n'> <'\techo 2 >file &&\n'> 
          <'\tgit stash &&\n'> <'\ttest_when_finished "git stash drop" &&\n'> <'\t(\n'> <'\t\tGIT_PS1_SHOWSTASHSTATE=y &&\n'> 
          <'\t\tcd .git &&\n'> <'\t\t__git_ps1 >"$actual"\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'prompt - untracked files status indicator - no untracked files'>)} 
      {
        (SQ <'\n'> <'\tprintf " (master)" >expected &&\n'> <'\t(\n'> 
          <'\t\tGIT_PS1_SHOWUNTRACKEDFILES=y &&\n'> <'\t\tcd otherrepo &&\n'> <'\t\t__git_ps1 >"$actual"\n'> <'\t) &&\n'> 
          <'\ttest_cmp expected "$actual"\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'prompt - untracked files status indicator - untracked files'>)} 
      {
        (SQ <'\n'> <'\tprintf " (master %%)" >expected &&\n'> <'\t(\n'> 
          <'\t\tGIT_PS1_SHOWUNTRACKEDFILES=y &&\n'> <'\t\t__git_ps1 >"$actual"\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'>
        )
      }
    )
    (C {<test_expect_success>} 
      {(SQ <'prompt - untracked files status indicator - empty untracked dir'>)} 
      {
        (SQ <'\n'> <'\tprintf " (master)" >expected &&\n'> <'\tmkdir otherrepo/untracked-dir &&\n'> 
          <'\ttest_when_finished "rm -rf otherrepo/untracked-dir" &&\n'> <'\t(\n'> <'\t\tGIT_PS1_SHOWUNTRACKEDFILES=y &&\n'> <'\t\tcd otherrepo &&\n'> 
          <'\t\t__git_ps1 >"$actual"\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'>
        )
      }
    )
    (C {<test_expect_success>} 
      {(SQ <'prompt - untracked files status indicator - non-empty untracked dir'>)} 
      {
        (SQ <'\n'> <'\tprintf " (master %%)" >expected &&\n'> <'\tmkdir otherrepo/untracked-dir &&\n'> 
          <'\ttest_when_finished "rm -rf otherrepo/untracked-dir" &&\n'> <'\t>otherrepo/untracked-dir/untracked-file &&\n'> <'\t(\n'> <'\t\tGIT_PS1_SHOWUNTRACKEDFILES=y &&\n'> 
          <'\t\tcd otherrepo &&\n'> <'\t\t__git_ps1 >"$actual"\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'>
        )
      }
    )
    (C {<test_expect_success>} 
      {(SQ <'prompt - untracked files status indicator - untracked files outside cwd'>)} 
      {
        (SQ <'\n'> <'\tprintf " (master %%)" >expected &&\n'> <'\t(\n'> 
          <'\t\tmkdir -p ignored_dir &&\n'> <'\t\tcd ignored_dir &&\n'> <'\t\tGIT_PS1_SHOWUNTRACKEDFILES=y &&\n'> <'\t\t__git_ps1 >"$actual"\n'> 
          <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'>
        )
      }
    )
    (C {<test_expect_success>} 
      {(SQ <'prompt - untracked files status indicator - shell variable unset with config disabled'>)} 
      {
        (SQ <'\n'> <'\tprintf " (master)" >expected &&\n'> 
          <'\ttest_config bash.showUntrackedFiles false &&\n'> <'\t(\n'> <'\t\tsane_unset GIT_PS1_SHOWUNTRACKEDFILES &&\n'> <'\t\t__git_ps1 >"$actual"\n'> <'\t) &&\n'> 
          <'\ttest_cmp expected "$actual"\n'>
        )
      }
    )
    (C {<test_expect_success>} 
      {(SQ <'prompt - untracked files status indicator - shell variable unset with config enabled'>)} 
      {
        (SQ <'\n'> <'\tprintf " (master)" >expected &&\n'> 
          <'\ttest_config bash.showUntrackedFiles true &&\n'> <'\t(\n'> <'\t\tsane_unset GIT_PS1_SHOWUNTRACKEDFILES &&\n'> <'\t\t__git_ps1 >"$actual"\n'> <'\t) &&\n'> 
          <'\ttest_cmp expected "$actual"\n'>
        )
      }
    )
    (C {<test_expect_success>} 
      {(SQ <'prompt - untracked files status indicator - shell variable set with config disabled'>)} 
      {
        (SQ <'\n'> <'\tprintf " (master)" >expected &&\n'> 
          <'\ttest_config bash.showUntrackedFiles false &&\n'> <'\t(\n'> <'\t\tGIT_PS1_SHOWUNTRACKEDFILES=y &&\n'> <'\t\t__git_ps1 >"$actual"\n'> <'\t) &&\n'> 
          <'\ttest_cmp expected "$actual"\n'>
        )
      }
    )
    (C {<test_expect_success>} 
      {(SQ <'prompt - untracked files status indicator - shell variable set with config enabled'>)} 
      {
        (SQ <'\n'> <'\tprintf " (master %%)" >expected &&\n'> 
          <'\ttest_config bash.showUntrackedFiles true &&\n'> <'\t(\n'> <'\t\tGIT_PS1_SHOWUNTRACKEDFILES=y &&\n'> <'\t\t__git_ps1 >"$actual"\n'> <'\t) &&\n'> 
          <'\ttest_cmp expected "$actual"\n'>
        )
      }
    )
    (C {<test_expect_success>} 
      {(SQ <'prompt - untracked files status indicator - not shown inside .git directory'>)} 
      {
        (SQ <'\n'> <'\tprintf " (GIT_DIR!)" >expected &&\n'> <'\t(\n'> 
          <'\t\tGIT_PS1_SHOWUNTRACKEDFILES=y &&\n'> <'\t\tcd .git &&\n'> <'\t\t__git_ps1 >"$actual"\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'prompt - format string starting with dash'>)} 
      {
        (SQ <'\n'> <'\tprintf -- "-master" >expected &&\n'> <'\t__git_ps1 "-%s" >"$actual" &&\n'> 
          <'\ttest_cmp expected "$actual"\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'prompt - pc mode'>)} 
      {
        (SQ <'\n'> <'\tprintf "BEFORE: (\\${__git_ps1_branch_name}):AFTER\\\\nmaster" >expected &&\n'> 
          <'\tprintf "" >expected_output &&\n'> <'\t(\n'> <'\t\t__git_ps1 "BEFORE:" ":AFTER" >"$actual" &&\n'> 
          <'\t\ttest_cmp expected_output "$actual" &&\n'> <'\t\tprintf "%s\\\\n%s" "$PS1" "${__git_ps1_branch_name}" >"$actual"\n'> <'\t) &&\n'> 
          <'\ttest_cmp expected "$actual"\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'prompt - bash color pc mode - branch name'>)} 
      {
        (SQ <'\n'> 
          <
'\tprintf "BEFORE: (${c_green}\\${__git_ps1_branch_name}${c_clear}):AFTER\\\\nmaster" >expected &&\n'
          > <'\t(\n'> <'\t\tGIT_PS1_SHOWCOLORHINTS=y &&\n'> <'\t\t__git_ps1 "BEFORE:" ":AFTER" >"$actual"\n'> 
          <'\t\tprintf "%s\\\\n%s" "$PS1" "${__git_ps1_branch_name}" >"$actual"\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'prompt - bash color pc mode - detached head'>)} 
      {
        (SQ <'\n'> 
          <
'\tprintf "BEFORE: (${c_red}\\${__git_ps1_branch_name}${c_clear}):AFTER\\\\n(%s...)" $(git log -1 --format="%h" b1^) >expected &&\n'
          > <'\tgit checkout b1^ &&\n'> <'\ttest_when_finished "git checkout master" &&\n'> <'\t(\n'> 
          <'\t\tGIT_PS1_SHOWCOLORHINTS=y &&\n'> <'\t\t__git_ps1 "BEFORE:" ":AFTER" &&\n'> 
          <'\t\tprintf "%s\\\\n%s" "$PS1" "${__git_ps1_branch_name}" >"$actual"\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'>
        )
      }
    )
    (C {<test_expect_success>} 
      {(SQ <'prompt - bash color pc mode - dirty status indicator - dirty worktree'>)} 
      {
        (SQ <'\n'> 
          <
'\tprintf "BEFORE: (${c_green}\\${__git_ps1_branch_name}${c_clear} ${c_red}*${c_clear}):AFTER\\\\nmaster" >expected &&\n'
          > <'\techo "dirty" >file &&\n'> <'\ttest_when_finished "git reset --hard" &&\n'> <'\t(\n'> 
          <'\t\tGIT_PS1_SHOWDIRTYSTATE=y &&\n'> <'\t\tGIT_PS1_SHOWCOLORHINTS=y &&\n'> <'\t\t__git_ps1 "BEFORE:" ":AFTER" &&\n'> 
          <'\t\tprintf "%s\\\\n%s" "$PS1" "${__git_ps1_branch_name}" >"$actual"\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'>
        )
      }
    )
    (C {<test_expect_success>} 
      {(SQ <'prompt - bash color pc mode - dirty status indicator - dirty index'>)} 
      {
        (SQ <'\n'> 
          <
'\tprintf "BEFORE: (${c_green}\\${__git_ps1_branch_name}${c_clear} ${c_green}+${c_clear}):AFTER\\\\nmaster" >expected &&\n'
          > <'\techo "dirty" >file &&\n'> <'\ttest_when_finished "git reset --hard" &&\n'> <'\tgit add -u &&\n'> 
          <'\t(\n'> <'\t\tGIT_PS1_SHOWDIRTYSTATE=y &&\n'> <'\t\tGIT_PS1_SHOWCOLORHINTS=y &&\n'> 
          <'\t\t__git_ps1 "BEFORE:" ":AFTER" &&\n'> <'\t\tprintf "%s\\\\n%s" "$PS1" "${__git_ps1_branch_name}" >"$actual"\n'> <'\t) &&\n'> 
          <'\ttest_cmp expected "$actual"\n'>
        )
      }
    )
    (C {<test_expect_success>} 
      {(SQ <'prompt - bash color pc mode - dirty status indicator - dirty index and worktree'>)} 
      {
        (SQ <'\n'> 
          <
'\tprintf "BEFORE: (${c_green}\\${__git_ps1_branch_name}${c_clear} ${c_red}*${c_green}+${c_clear}):AFTER\\\\nmaster" >expected &&\n'
          > <'\techo "dirty index" >file &&\n'> <'\ttest_when_finished "git reset --hard" &&\n'> 
          <'\tgit add -u &&\n'> <'\techo "dirty worktree" >file &&\n'> <'\t(\n'> <'\t\tGIT_PS1_SHOWCOLORHINTS=y &&\n'> 
          <'\t\tGIT_PS1_SHOWDIRTYSTATE=y &&\n'> <'\t\t__git_ps1 "BEFORE:" ":AFTER" &&\n'> 
          <'\t\tprintf "%s\\\\n%s" "$PS1" "${__git_ps1_branch_name}" >"$actual"\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'>
        )
      }
    )
    (C {<test_expect_success>} 
      {(SQ <'prompt - bash color pc mode - dirty status indicator - before root commit'>)} 
      {
        (SQ <'\n'> 
          <
'\tprintf "BEFORE: (${c_green}\\${__git_ps1_branch_name}${c_clear} ${c_green}#${c_clear}):AFTER\\\\nmaster" >expected &&\n'
          > <'\t(\n'> <'\t\tGIT_PS1_SHOWDIRTYSTATE=y &&\n'> <'\t\tGIT_PS1_SHOWCOLORHINTS=y &&\n'> 
          <'\t\tcd otherrepo &&\n'> <'\t\t__git_ps1 "BEFORE:" ":AFTER" &&\n'> 
          <'\t\tprintf "%s\\\\n%s" "$PS1" "${__git_ps1_branch_name}" >"$actual"\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'prompt - bash color pc mode - inside .git directory'>)} 
      {
        (SQ <'\n'> 
          <
'\tprintf "BEFORE: (${c_green}\\${__git_ps1_branch_name}${c_clear}):AFTER\\\\nGIT_DIR!" >expected &&\n'
          > <'\techo "dirty" >file &&\n'> <'\ttest_when_finished "git reset --hard" &&\n'> <'\t(\n'> 
          <'\t\tGIT_PS1_SHOWDIRTYSTATE=y &&\n'> <'\t\tGIT_PS1_SHOWCOLORHINTS=y &&\n'> <'\t\tcd .git &&\n'> <'\t\t__git_ps1 "BEFORE:" ":AFTER" &&\n'> 
          <'\t\tprintf "%s\\\\n%s" "$PS1" "${__git_ps1_branch_name}" >"$actual"\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'prompt - bash color pc mode - stash status indicator'>)} 
      {
        (SQ <'\n'> 
          <
'\tprintf "BEFORE: (${c_green}\\${__git_ps1_branch_name}${c_clear} ${c_lblue}\\$${c_clear}):AFTER\\\\nmaster" >expected &&\n'
          > <'\techo 2 >file &&\n'> <'\tgit stash &&\n'> <'\ttest_when_finished "git stash drop" &&\n'> <'\t(\n'> 
          <'\t\tGIT_PS1_SHOWSTASHSTATE=y &&\n'> <'\t\tGIT_PS1_SHOWCOLORHINTS=y &&\n'> <'\t\t__git_ps1 "BEFORE:" ":AFTER" &&\n'> 
          <'\t\tprintf "%s\\\\n%s" "$PS1" "${__git_ps1_branch_name}" >"$actual"\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'prompt - bash color pc mode - untracked files status indicator'>)} 
      {
        (SQ <'\n'> 
          <
'\tprintf "BEFORE: (${c_green}\\${__git_ps1_branch_name}${c_clear} ${c_red}%%${c_clear}):AFTER\\\\nmaster" >expected &&\n'
          > <'\t(\n'> <'\t\tGIT_PS1_SHOWUNTRACKEDFILES=y &&\n'> <'\t\tGIT_PS1_SHOWCOLORHINTS=y &&\n'> 
          <'\t\t__git_ps1 "BEFORE:" ":AFTER" &&\n'> <'\t\tprintf "%s\\\\n%s" "$PS1" "${__git_ps1_branch_name}" >"$actual"\n'> <'\t) &&\n'> 
          <'\ttest_cmp expected "$actual"\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'prompt - zsh color pc mode'>)} 
      {
        (SQ <'\n'> <'\tprintf "BEFORE: (%%F{green}master%%f):AFTER" >expected &&\n'> <'\t(\n'> 
          <'\t\tZSH_VERSION=5.0.0 &&\n'> <'\t\tGIT_PS1_SHOWCOLORHINTS=y &&\n'> <'\t\t__git_ps1 "BEFORE:" ":AFTER" &&\n'> 
          <'\t\tprintf "%s" "$PS1" >"$actual"\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'prompt - hide if pwd ignored - env var unset, config disabled'>)} 
      {
        (SQ <'\n'> <'\tprintf " (master)" >expected &&\n'> 
          <'\ttest_config bash.hideIfPwdIgnored false &&\n'> <'\t(\n'> <'\t\tcd ignored_dir &&\n'> <'\t\t__git_ps1 >"$actual"\n'> <'\t) &&\n'> 
          <'\ttest_cmp expected "$actual"\n'>
        )
      }
    )
    (C {<test_expect_success>} 
      {(SQ <'prompt - hide if pwd ignored - env var unset, config disabled, pc mode'>)} 
      {
        (SQ <'\n'> <'\tprintf "BEFORE: (\\${__git_ps1_branch_name}):AFTER" >expected &&\n'> 
          <'\ttest_config bash.hideIfPwdIgnored false &&\n'> <'\t(\n'> <'\t\tcd ignored_dir &&\n'> <'\t\t__git_ps1 "BEFORE:" ":AFTER" &&\n'> 
          <'\t\tprintf "%s" "$PS1" >"$actual"\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'prompt - hide if pwd ignored - env var unset, config unset'>)} 
      {
        (SQ <'\n'> <'\tprintf " (master)" >expected &&\n'> <'\t(\n'> <'\t\tcd ignored_dir &&\n'> 
          <'\t\t__git_ps1 >"$actual"\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'>
        )
      }
    )
    (C {<test_expect_success>} 
      {(SQ <'prompt - hide if pwd ignored - env var unset, config unset, pc mode'>)} 
      {
        (SQ <'\n'> <'\tprintf "BEFORE: (\\${__git_ps1_branch_name}):AFTER" >expected &&\n'> <'\t(\n'> 
          <'\t\tcd ignored_dir &&\n'> <'\t\t__git_ps1 "BEFORE:" ":AFTER" &&\n'> <'\t\tprintf "%s" "$PS1" >"$actual"\n'> <'\t) &&\n'> 
          <'\ttest_cmp expected "$actual"\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'prompt - hide if pwd ignored - env var set, config disabled'>)} 
      {
        (SQ <'\n'> <'\tprintf " (master)" >expected &&\n'> 
          <'\ttest_config bash.hideIfPwdIgnored false &&\n'> <'\t(\n'> <'\t\tcd ignored_dir &&\n'> <'\t\tGIT_PS1_HIDE_IF_PWD_IGNORED=y &&\n'> 
          <'\t\t__git_ps1 >"$actual"\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'>
        )
      }
    )
    (C {<test_expect_success>} 
      {(SQ <'prompt - hide if pwd ignored - env var set, config disabled, pc mode'>)} 
      {
        (SQ <'\n'> <'\tprintf "BEFORE: (\\${__git_ps1_branch_name}):AFTER" >expected &&\n'> 
          <'\ttest_config bash.hideIfPwdIgnored false &&\n'> <'\t(\n'> <'\t\tcd ignored_dir &&\n'> <'\t\tGIT_PS1_HIDE_IF_PWD_IGNORED=y &&\n'> 
          <'\t\t__git_ps1 "BEFORE:" ":AFTER" &&\n'> <'\t\tprintf "%s" "$PS1" >"$actual"\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'prompt - hide if pwd ignored - env var set, config unset'>)} 
      {
        (SQ <'\n'> <'\tprintf "" >expected &&\n'> <'\t(\n'> <'\t\tcd ignored_dir &&\n'> 
          <'\t\tGIT_PS1_HIDE_IF_PWD_IGNORED=y &&\n'> <'\t\t__git_ps1 >"$actual"\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'>
        )
      }
    )
    (C {<test_expect_success>} 
      {(SQ <'prompt - hide if pwd ignored - env var set, config unset, pc mode'>)} 
      {
        (SQ <'\n'> <'\tprintf "BEFORE::AFTER" >expected &&\n'> <'\t(\n'> <'\t\tcd ignored_dir &&\n'> 
          <'\t\tGIT_PS1_HIDE_IF_PWD_IGNORED=y &&\n'> <'\t\t__git_ps1 "BEFORE:" ":AFTER" &&\n'> <'\t\tprintf "%s" "$PS1" >"$actual"\n'> <'\t) &&\n'> 
          <'\ttest_cmp expected "$actual"\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'prompt - hide if pwd ignored - inside gitdir (stdout)'>)} 
      {
        (SQ <'\n'> <'\tprintf " (GIT_DIR!)" >expected &&\n'> <'\t(\n'> 
          <'\t\tGIT_PS1_HIDE_IF_PWD_IGNORED=y &&\n'> <'\t\tcd .git &&\n'> <'\t\t__git_ps1 >"$actual" 2>/dev/null\n'> <'\t) &&\n'> 
          <'\ttest_cmp expected "$actual"\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'prompt - hide if pwd ignored - inside gitdir (stderr)'>)} 
      {
        (SQ <'\n'> <'\tprintf "" >expected &&\n'> <'\t(\n'> <'\t\tGIT_PS1_HIDE_IF_PWD_IGNORED=y &&\n'> 
          <'\t\tcd .git &&\n'> <'\t\t__git_ps1 >/dev/null 2>"$actual"\n'> <'\t) &&\n'> <'\ttest_cmp expected "$actual"\n'>
        )
      }
    )
    (C {<test_done>})
  ]
)