(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:'Format-patch numbering options' span_id:15))}
          spids: [13]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} {(setup)} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:29) (Token id:Id.Lit_Chars val:'\n' span_id:30) 
          (Token id:Id.Lit_Chars val:'\techo A > file &&\n' span_id:31) (Token id:Id.Lit_Chars val:'\tgit add file &&\n' span_id:32) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m First &&\n' span_id:33) (Token id:Id.Lit_Chars val:'\n' span_id:34) 
          (Token id:Id.Lit_Chars val:'\techo B >> file &&\n' span_id:35) (Token id:Id.Lit_Chars val:'\tgit commit -a -m Second &&\n' span_id:36) 
          (Token id:Id.Lit_Chars val:'\n' span_id:37) (Token id:Id.Lit_Chars val:'\techo C >> file &&\n' span_id:38) 
          (Token id:Id.Lit_Chars val:'\tgit commit -a -m Third\n' span_id:39) (Token id:Id.Lit_Chars val:'\n' span_id:40)
        )
      }
    )
    (command.ShFunction
      name: test_num_no_numbered
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:cnt)
                      op: assign_op.Equal
                      rhs: 
                        {
                          (command_sub
                            left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:56)
                            command_list: 
                              (command.CommandList
                                children: [
                                  (command.Pipeline
                                    children: [
                                      (C {(grep)} 
                                        {
                                          (DQ ('^Subject: ') (Id.Lit_Other '\\') ('[PATCH') 
                                            (Id.Lit_Other '\\') (']')
                                          )
                                        } {($ Id.VSub_Number '$1')}
                                      )
                                      (C {(wc)} {(-l)})
                                    ]
                                    negated: F
                                  )
                                ]
                              )
                          )
                        }
                      spids: [55]
                    )
                  ]
                )
                (C {(test)} {($ Id.VSub_DollarName '$cnt')} {(Id.Lit_Equals '=')} 
                  {($ Id.VSub_Number '$2')}
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: test_single_no_numbered
      body: 
        (command.BraceGroup
          children: [(C {(test_num_no_numbered)} {($ Id.VSub_Number '$1')} {(1)})]
        )
    )
    (command.ShFunction
      name: test_no_numbered
      body: 
        (command.BraceGroup
          children: [(C {(test_num_no_numbered)} {($ Id.VSub_Number '$1')} {(2)})]
        )
    )
    (command.ShFunction
      name: test_single_cover_letter_numbered
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (C {(grep)} 
                  {(DQ ('^Subject: ') (Id.Lit_Other '\\') ('[PATCH 0/1') (Id.Lit_Other '\\') (']'))} {($ Id.VSub_Number '$1')}
                )
                (C {(grep)} 
                  {(DQ ('^Subject: ') (Id.Lit_Other '\\') ('[PATCH 1/1') (Id.Lit_Other '\\') (']'))} {($ Id.VSub_Number '$1')}
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: test_single_numbered
      body: 
        (command.BraceGroup
          children: [
            (C {(grep)} 
              {(DQ ('^Subject: ') (Id.Lit_Other '\\') ('[PATCH 1/1') (Id.Lit_Other '\\') (']'))} {($ Id.VSub_Number '$1')}
            )
          ]
        )
    )
    (command.ShFunction
      name: test_numbered
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (C {(grep)} 
                  {(DQ ('^Subject: ') (Id.Lit_Other '\\') ('[PATCH 1/2') (Id.Lit_Other '\\') (']'))} {($ Id.VSub_Number '$1')}
                )
                (C {(grep)} 
                  {(DQ ('^Subject: ') (Id.Lit_Other '\\') ('[PATCH 2/2') (Id.Lit_Other '\\') (']'))} {($ Id.VSub_Number '$1')}
                )
              ]
            )
          ]
        )
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'single patch defaults to no numbers' span_id:221))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:225) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit format-patch --stdout HEAD~1 >patch0.single &&\n'
            span_id: 226
          ) (Token id:Id.Lit_Chars val:'\ttest_single_no_numbered patch0.single\n' span_id:227)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'multiple patch defaults to numbered' span_id:234))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:238) (Token id:Id.Lit_Chars val:'\n' span_id:239) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit format-patch --stdout HEAD~2 >patch0.multiple &&\n'
            span_id: 240
          ) (Token id:Id.Lit_Chars val:'\ttest_numbered patch0.multiple\n' span_id:241) 
          (Token id:Id.Lit_Chars val:'\n' span_id:242)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'Use --numbered' span_id:249))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:253) (Token id:Id.Lit_Chars val:'\n' span_id:254) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit format-patch --numbered --stdout HEAD~1 >patch1 &&\n'
            span_id: 255
          ) (Token id:Id.Lit_Chars val:'\ttest_single_numbered patch1\n' span_id:256) 
          (Token id:Id.Lit_Chars val:'\n' span_id:257)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'format.numbered = true' span_id:264))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:268) (Token id:Id.Lit_Chars val:'\n' span_id:269) 
          (Token id:Id.Lit_Chars val:'\tgit config format.numbered true &&\n' span_id:270) (Token id:Id.Lit_Chars val:'\tgit format-patch --stdout HEAD~2 >patch2 &&\n' span_id:271) 
          (Token id:Id.Lit_Chars val:'\ttest_numbered patch2\n' span_id:272) (Token id:Id.Lit_Chars val:'\n' span_id:273)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'format.numbered && single patch' span_id:280))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:284) (Token id:Id.Lit_Chars val:'\n' span_id:285) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit format-patch --stdout HEAD^ > patch3 &&\n'
            span_id: 286
          ) (Token id:Id.Lit_Chars val:'\ttest_single_numbered patch3\n' span_id:287) 
          (Token id:Id.Lit_Chars val:'\n' span_id:288)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'format.numbered && --no-numbered' span_id:295))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:299) (Token id:Id.Lit_Chars val:'\n' span_id:300) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit format-patch --no-numbered --stdout HEAD~2 >patch4 &&\n'
            span_id: 301
          ) (Token id:Id.Lit_Chars val:'\ttest_no_numbered patch4\n' span_id:302) 
          (Token id:Id.Lit_Chars val:'\n' span_id:303)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'format.numbered && --keep-subject' span_id:310))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:314) (Token id:Id.Lit_Chars val:'\n' span_id:315) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit format-patch --keep-subject --stdout HEAD^ >patch4a &&\n'
            span_id: 316
          ) (Token id:Id.Lit_Chars val:'\tgrep "^Subject: Third" patch4a\n' span_id:317) 
          (Token id:Id.Lit_Chars val:'\n' span_id:318)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'format.numbered = auto' span_id:325))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:329) (Token id:Id.Lit_Chars val:'\n' span_id:330) 
          (Token id:Id.Lit_Chars val:'\tgit config format.numbered auto &&\n' span_id:331) (Token id:Id.Lit_Chars val:'\tgit format-patch --stdout HEAD~2 > patch5 &&\n' span_id:332) 
          (Token id:Id.Lit_Chars val:'\ttest_numbered patch5\n' span_id:333) (Token id:Id.Lit_Chars val:'\n' span_id:334)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'format.numbered = auto && single patch' span_id:341))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:345) (Token id:Id.Lit_Chars val:'\n' span_id:346) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit format-patch --stdout HEAD^ > patch6 &&\n'
            span_id: 347
          ) (Token id:Id.Lit_Chars val:'\ttest_single_no_numbered patch6\n' span_id:348) 
          (Token id:Id.Lit_Chars val:'\n' span_id:349)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'format.numbered = auto && --no-numbered' span_id:356))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:360) (Token id:Id.Lit_Chars val:'\n' span_id:361) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit format-patch --no-numbered --stdout HEAD~2 > patch7 &&\n'
            span_id: 362
          ) (Token id:Id.Lit_Chars val:'\ttest_no_numbered patch7\n' span_id:363) 
          (Token id:Id.Lit_Chars val:'\n' span_id:364)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'--start-number && --numbered' span_id:371))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:375) (Token id:Id.Lit_Chars val:'\n' span_id:376) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit format-patch --start-number 3 --numbered --stdout HEAD~1 > patch8 &&\n'
            span_id: 377
          ) (Token id:Id.Lit_Chars val:'\tgrep "^Subject: \\[PATCH 3/3\\]" patch8\n' span_id:378)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'single patch with cover-letter defaults to numbers'
            span_id: 385
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:389) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit format-patch --cover-letter --stdout HEAD~1 >patch9.single &&\n'
            span_id: 390
          ) (Token id:Id.Lit_Chars val:'\ttest_single_cover_letter_numbered patch9.single\n' span_id:391)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'Use --no-numbered and --cover-letter single patch'
            span_id: 398
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:402) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit format-patch --no-numbered --stdout --cover-letter HEAD~1 >patch10 &&\n'
            span_id: 403
          ) (Token id:Id.Lit_Chars val:'\ttest_no_numbered patch10\n' span_id:404)
        )
      }
    )
    (C {(test_done)})
  ]
)