(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:test_description)
          op: Equal
          rhs: {(SQ <'test git-specific bash prompt functions'>)}
          spids: [13]
        )
      ]
      spids: [13]
    )
    (C {(.)} {(./lib-bash.sh)})
    (C {(.)} {(DQ ($ VSub_Name '$GIT_BUILD_DIR') (/contrib/completion/git-prompt.sh))})
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:actual)
          op: Equal
          rhs: {(DQ ($ VSub_Name '$TRASH_DIRECTORY') (/actual))}
          spids: [32]
        )
      ]
      spids: [32]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:c_red)
          op: Equal
          rhs: {(SQ <'\\\\[\\\\e[31m\\\\]'>)}
          spids: [38]
        )
      ]
      spids: [38]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:c_green)
          op: Equal
          rhs: {(SQ <'\\\\[\\\\e[32m\\\\]'>)}
          spids: [43]
        )
      ]
      spids: [43]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:c_lblue)
          op: Equal
          rhs: {(SQ <'\\\\[\\\\e[1;34m\\\\]'>)}
          spids: [48]
        )
      ]
      spids: [48]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:c_clear)
          op: Equal
          rhs: {(SQ <'\\\\[\\\\e[0m\\\\]'>)}
          spids: [53]
        )
      ]
      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'>
        )
      }
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:repo_with_newline)
          op: Equal
          rhs: {(SQ <'repo\n'> <'with\n'> <newline>)}
          spids: [141]
        )
      ]
      spids: [141]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (AndOr
              children: [
                (C {(test_have_prereq)} {(KW_Bang '!') (MINGW)})
                (SimpleCommand
                  words: [{(mkdir)} {(DQ ($ VSub_Name '$repo_with_newline'))}]
                  redirects: [(Redir op_id:Redir_Great fd:2 arg_word:{(/dev/null)} spids:[164])]
                )
              ]
              op_id: Op_DAmp
            )
          ]
          action: [(C {(test_set_prereq)} {(FUNNYNAMES)})]
          spids: [-1 167]
        )
      ]
      else_action: [(C {(say)} {(SQ <'Your filesystem does not allow newlines in filenames.'>)})]
      spids: [174 183]
    )
    (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)})
  ]
)