(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:test_description)
          op: assign_op.Equal
          rhs: {(SQ (Token id:Id.Lit_Chars val:'git-status ignored files' span_id:6))}
          spids: [4]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:17)
          fd: -1
          arg_word: {(expected)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:20)
          fd: -1
          here_begin: 
            {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:21)) (OF)}
          here_end_span_id: 28
          stdin_parts: [('?? .gitignore\n') ('?? actual\n') ('?? expected\n') ('?? untracked/\n')]
        )
      ]
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'status untracked directory with --ignored' span_id:33))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:37) 
          (Token id:Id.Lit_Chars val:'\techo "ignored" >.gitignore &&\n' span_id:38) (Token id:Id.Lit_Chars val:'\tmkdir untracked &&\n' span_id:39) 
          (Token id:Id.Lit_Chars val:'\t: >untracked/ignored &&\n' span_id:40) (Token id:Id.Lit_Chars val:'\t: >untracked/uncommitted &&\n' span_id:41) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit status --porcelain --ignored >actual &&\n'
            span_id: 42
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:43)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'same with gitignore starting with BOM' span_id:50))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:54) 
          (Token
            id: Id.Lit_Chars
            val: '\tprintf "\\357\\273\\277ignored\\n" >.gitignore &&\n'
            span_id: 55
          ) (Token id:Id.Lit_Chars val:'\tmkdir -p untracked &&\n' span_id:56) 
          (Token id:Id.Lit_Chars val:'\t: >untracked/ignored &&\n' span_id:57) (Token id:Id.Lit_Chars val:'\t: >untracked/uncommitted &&\n' span_id:58) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit status --porcelain --ignored >actual &&\n'
            span_id: 59
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:60)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:66)
          fd: -1
          arg_word: {(expected)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:69)
          fd: -1
          here_begin: 
            {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:70)) (OF)}
          here_end_span_id: 78
          stdin_parts: [
            ('?? .gitignore\n')
            ('?? actual\n')
            ('?? expected\n')
            ('?? untracked/uncommitted\n')
            ('!! untracked/ignored\n')
          ]
        )
      ]
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'status untracked directory with --ignored -u' span_id:83))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:87) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit status --porcelain --ignored -u >actual &&\n'
            span_id: 88
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:89)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:94)
          fd: -1
          arg_word: {(expected)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:97)
          fd: -1
          here_begin: 
            {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:98)) (OF)}
          here_end_span_id: 103
          stdin_parts: [('?? untracked/uncommitted\n') ('!! untracked/ignored\n')]
        )
      ]
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'status prefixed untracked directory with --ignored'
            span_id: 108
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:112) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit status --porcelain --ignored untracked/ >actual &&\n'
            span_id: 113
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:114)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:120)
          fd: -1
          arg_word: {(expected)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:123)
          fd: -1
          here_begin: 
            {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:124)) 
              (OF)
            }
          here_end_span_id: 129
          stdin_parts: [('?? untracked/uncommitted\n') ('!! untracked/ignored\n')]
        )
      ]
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'status prefixed untracked sub-directory with --ignored -u'
            span_id: 134
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:138) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit status --porcelain --ignored -u untracked/ >actual &&\n'
            span_id: 139
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:140)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:146)
          fd: -1
          arg_word: {(expected)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:149)
          fd: -1
          here_begin: 
            {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:150)) 
              (OF)
            }
          here_end_span_id: 157
          stdin_parts: [('?? .gitignore\n') ('?? actual\n') ('?? expected\n') ('!! ignored/\n')]
        )
      ]
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'status ignored directory with --ignore' span_id:162))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:166) 
          (Token id:Id.Lit_Chars val:'\trm -rf untracked &&\n' span_id:167) (Token id:Id.Lit_Chars val:'\tmkdir ignored &&\n' span_id:168) 
          (Token id:Id.Lit_Chars val:'\t: >ignored/uncommitted &&\n' span_id:169) (Token id:Id.Lit_Chars val:'\tgit status --porcelain --ignored >actual &&\n' span_id:170) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:171)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:177)
          fd: -1
          arg_word: {(expected)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:180)
          fd: -1
          here_begin: 
            {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:181)) 
              (OF)
            }
          here_end_span_id: 188
          stdin_parts: [
            ('?? .gitignore\n')
            ('?? actual\n')
            ('?? expected\n')
            ('!! ignored/uncommitted\n')
          ]
        )
      ]
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'status ignored directory with --ignore -u' span_id:193))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:197) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit status --porcelain --ignored -u >actual &&\n'
            span_id: 198
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:199)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:205)
          fd: -1
          arg_word: {(expected)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:208)
          fd: -1
          here_begin: 
            {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:209)) 
              (OF)
            }
          here_end_span_id: 215
          stdin_parts: [('?? .gitignore\n') ('?? actual\n') ('?? expected\n')]
        )
      ]
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'status empty untracked directory with --ignore' span_id:220))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:224) 
          (Token id:Id.Lit_Chars val:'\trm -rf ignored &&\n' span_id:225) (Token id:Id.Lit_Chars val:'\tmkdir untracked-ignored &&\n' span_id:226) 
          (Token id:Id.Lit_Chars val:'\tmkdir untracked-ignored/test &&\n' span_id:227) (Token id:Id.Lit_Chars val:'\tgit status --porcelain --ignored >actual &&\n' span_id:228) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:229)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:235)
          fd: -1
          arg_word: {(expected)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:238)
          fd: -1
          here_begin: 
            {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:239)) 
              (OF)
            }
          here_end_span_id: 245
          stdin_parts: [('?? .gitignore\n') ('?? actual\n') ('?? expected\n')]
        )
      ]
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'status empty untracked directory with --ignore -u'
            span_id: 250
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:254) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit status --porcelain --ignored -u >actual &&\n'
            span_id: 255
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:256)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:262)
          fd: -1
          arg_word: {(expected)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:265)
          fd: -1
          here_begin: 
            {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:266)) 
              (OF)
            }
          here_end_span_id: 273
          stdin_parts: [
            ('?? .gitignore\n')
            ('?? actual\n')
            ('?? expected\n')
            ('!! untracked-ignored/\n')
          ]
        )
      ]
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'status untracked directory with ignored files with --ignore'
            span_id: 278
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:282) 
          (Token id:Id.Lit_Chars val:'\t: >untracked-ignored/ignored &&\n' span_id:283) (Token id:Id.Lit_Chars val:'\t: >untracked-ignored/test/ignored &&\n' span_id:284) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit status --porcelain --ignored >actual &&\n'
            span_id: 285
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:286)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:292)
          fd: -1
          arg_word: {(expected)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:295)
          fd: -1
          here_begin: 
            {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:296)) 
              (OF)
            }
          here_end_span_id: 304
          stdin_parts: [
            ('?? .gitignore\n')
            ('?? actual\n')
            ('?? expected\n')
            ('!! untracked-ignored/ignored\n')
            ('!! untracked-ignored/test/ignored\n')
          ]
        )
      ]
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'status untracked directory with ignored files with --ignore -u'
            span_id: 309
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:313) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit status --porcelain --ignored -u >actual &&\n'
            span_id: 314
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:315)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:321)
          fd: -1
          arg_word: {(expected)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:324)
          fd: -1
          here_begin: 
            {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:325)) 
              (OF)
            }
          here_end_span_id: 331
          stdin_parts: [('?? .gitignore\n') ('?? actual\n') ('?? expected\n')]
        )
      ]
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'status ignored tracked directory with --ignore' span_id:336))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:340) 
          (Token id:Id.Lit_Chars val:'\trm -rf untracked-ignored &&\n' span_id:341) (Token id:Id.Lit_Chars val:'\tmkdir tracked &&\n' span_id:342) 
          (Token id:Id.Lit_Chars val:'\t: >tracked/committed &&\n' span_id:343) (Token id:Id.Lit_Chars val:'\tgit add tracked/committed &&\n' span_id:344) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m. &&\n' span_id:345) (Token id:Id.Lit_Chars val:'\techo "tracked" >.gitignore &&\n' span_id:346) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit status --porcelain --ignored >actual &&\n'
            span_id: 347
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:348)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:354)
          fd: -1
          arg_word: {(expected)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:357)
          fd: -1
          here_begin: 
            {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:358)) 
              (OF)
            }
          here_end_span_id: 364
          stdin_parts: [('?? .gitignore\n') ('?? actual\n') ('?? expected\n')]
        )
      ]
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'status ignored tracked directory with --ignore -u'
            span_id: 369
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:373) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit status --porcelain --ignored -u >actual &&\n'
            span_id: 374
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:375)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:381)
          fd: -1
          arg_word: {(expected)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:384)
          fd: -1
          here_begin: 
            {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:385)) 
              (OF)
            }
          here_end_span_id: 391
          stdin_parts: [('?? .gitignore\n') ('?? actual\n') ('?? expected\n')]
        )
      ]
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'status ignored tracked directory and ignored file with --ignore'
            span_id: 396
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:400) 
          (Token id:Id.Lit_Chars val:'\techo "committed" >>.gitignore &&\n' span_id:401) (Token id:Id.Lit_Chars val:'\tgit status --porcelain --ignored >actual &&\n' span_id:402) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:403)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:409)
          fd: -1
          arg_word: {(expected)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:412)
          fd: -1
          here_begin: 
            {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:413)) 
              (OF)
            }
          here_end_span_id: 419
          stdin_parts: [('?? .gitignore\n') ('?? actual\n') ('?? expected\n')]
        )
      ]
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'status ignored tracked directory and ignored file with --ignore -u'
            span_id: 424
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:428) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit status --porcelain --ignored -u >actual &&\n'
            span_id: 429
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:430)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:436)
          fd: -1
          arg_word: {(expected)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:439)
          fd: -1
          here_begin: 
            {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:440)) 
              (OF)
            }
          here_end_span_id: 447
          stdin_parts: [
            ('?? .gitignore\n')
            ('?? actual\n')
            ('?? expected\n')
            ('!! tracked/uncommitted\n')
          ]
        )
      ]
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'status ignored tracked directory and uncommitted file with --ignore'
            span_id: 452
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:456) 
          (Token id:Id.Lit_Chars val:'\techo "tracked" >.gitignore &&\n' span_id:457) (Token id:Id.Lit_Chars val:'\t: >tracked/uncommitted &&\n' span_id:458) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit status --porcelain --ignored >actual &&\n'
            span_id: 459
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:460)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:466)
          fd: -1
          arg_word: {(expected)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:469)
          fd: -1
          here_begin: 
            {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:470)) 
              (OF)
            }
          here_end_span_id: 477
          stdin_parts: [
            ('?? .gitignore\n')
            ('?? actual\n')
            ('?? expected\n')
            ('!! tracked/uncommitted\n')
          ]
        )
      ]
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'status ignored tracked directory and uncommitted file with --ignore -u'
            span_id: 482
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:486) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit status --porcelain --ignored -u >actual &&\n'
            span_id: 487
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:488)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:494)
          fd: -1
          arg_word: {(expected)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:497)
          fd: -1
          here_begin: 
            {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:498)) 
              (OF)
            }
          here_end_span_id: 505
          stdin_parts: [('?? .gitignore\n') ('?? actual\n') ('?? expected\n') ('!! tracked/ignored/\n')]
        )
      ]
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 
'status ignored tracked directory with uncommitted file in untracked subdir with --ignore'
            span_id: 510
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:514) 
          (Token id:Id.Lit_Chars val:'\trm -rf tracked/uncommitted &&\n' span_id:515) (Token id:Id.Lit_Chars val:'\tmkdir tracked/ignored &&\n' span_id:516) 
          (Token id:Id.Lit_Chars val:'\t: >tracked/ignored/uncommitted &&\n' span_id:517) (Token id:Id.Lit_Chars val:'\tgit status --porcelain --ignored >actual &&\n' span_id:518) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:519)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:525)
          fd: -1
          arg_word: {(expected)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:528)
          fd: -1
          here_begin: 
            {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:529)) 
              (OF)
            }
          here_end_span_id: 536
          stdin_parts: [
            ('?? .gitignore\n')
            ('?? actual\n')
            ('?? expected\n')
            ('!! tracked/ignored/uncommitted\n')
          ]
        )
      ]
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 
'status ignored tracked directory with uncommitted file in untracked subdir with --ignore -u'
            span_id: 541
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:545) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit status --porcelain --ignored -u >actual &&\n'
            span_id: 546
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:547)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:553)
          fd: -1
          arg_word: {(expected)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:556)
          fd: -1
          here_begin: 
            {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:557)) 
              (OF)
            }
          here_end_span_id: 564
          stdin_parts: [
            ('?? .gitignore\n')
            ('?? actual\n')
            ('?? expected\n')
            ('!! tracked/ignored/uncommitted\n')
          ]
        )
      ]
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 
'status ignored tracked directory with uncommitted file in tracked subdir with --ignore'
            span_id: 569
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:573) 
          (Token id:Id.Lit_Chars val:'\t: >tracked/ignored/committed &&\n' span_id:574) (Token id:Id.Lit_Chars val:'\tgit add -f tracked/ignored/committed &&\n' span_id:575) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m. &&\n' span_id:576) (Token id:Id.Lit_Chars val:'\tgit status --porcelain --ignored >actual &&\n' span_id:577) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:578)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:584)
          fd: -1
          arg_word: {(expected)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:587)
          fd: -1
          here_begin: 
            {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:588)) 
              (OF)
            }
          here_end_span_id: 595
          stdin_parts: [
            ('?? .gitignore\n')
            ('?? actual\n')
            ('?? expected\n')
            ('!! tracked/ignored/uncommitted\n')
          ]
        )
      ]
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 
'status ignored tracked directory with uncommitted file in tracked subdir with --ignore -u'
            span_id: 600
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:604) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit status --porcelain --ignored -u >actual &&\n'
            span_id: 605
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:606)
        )
      }
    )
    (C {(test_done)})
  ]
)