(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: 'applying patch that has broken whitespaces in context'
                  span_id: 6
                )
              )
            }
          spids: [4]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} {(setup)} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:20) (Token id:Id.Lit_Chars val:'\n' span_id:21) 
          (Token id:Id.Lit_Chars val:'\t>file &&\n' span_id:22) (Token id:Id.Lit_Chars val:'\tgit add file &&\n' span_id:23) 
          (Token id:Id.Lit_Chars val:'\n' span_id:24) (Token id:Id.Lit_Chars val:'\t# file-0 is full of whitespace breakages\n' span_id:25) 
          (Token id:Id.Lit_Chars val:'\tfor l in a bb c d eeee f ggg h\n' span_id:26) (Token id:Id.Lit_Chars val:'\tdo\n' span_id:27) 
          (Token id:Id.Lit_Chars val:'\t\techo "$l "\n' span_id:28) (Token id:Id.Lit_Chars val:'\tdone >file-0 &&\n' span_id:29) 
          (Token id:Id.Lit_Chars val:'\n' span_id:30) (Token id:Id.Lit_Chars val:'\t# patch-0 creates a whitespace broken file\n' span_id:31) 
          (Token id:Id.Lit_Chars val:'\tcat file-0 >file &&\n' span_id:32) (Token id:Id.Lit_Chars val:'\tgit diff >patch-0 &&\n' span_id:33) 
          (Token id:Id.Lit_Chars val:'\tgit add file &&\n' span_id:34) (Token id:Id.Lit_Chars val:'\n' span_id:35) 
          (Token
            id: Id.Lit_Chars
            val: '\t# file-1 is still full of whitespace breakages,\n'
            span_id: 36
          ) (Token id:Id.Lit_Chars val:'\t# but has one line updated, without fixing any\n' span_id:37) 
          (Token id:Id.Lit_Chars val:'\t# whitespaces.\n' span_id:38) (Token id:Id.Lit_Chars val:'\t# patch-1 records that change.\n' span_id:39) 
          (Token id:Id.Lit_Chars val:'\tsed -e "s/d/D/" file-0 >file-1 &&\n' span_id:40) (Token id:Id.Lit_Chars val:'\tcat file-1 >file &&\n' span_id:41) 
          (Token id:Id.Lit_Chars val:'\tgit diff >patch-1 &&\n' span_id:42) (Token id:Id.Lit_Chars val:'\n' span_id:43) 
          (Token
            id: Id.Lit_Chars
            val: '\t# patch-all is the effect of both patch-0 and patch-1\n'
            span_id: 44
          ) (Token id:Id.Lit_Chars val:'\t>file &&\n' span_id:45) 
          (Token id:Id.Lit_Chars val:'\tgit add file &&\n' span_id:46) (Token id:Id.Lit_Chars val:'\tcat file-1 >file &&\n' span_id:47) 
          (Token id:Id.Lit_Chars val:'\tgit diff >patch-all &&\n' span_id:48) (Token id:Id.Lit_Chars val:'\n' span_id:49) 
          (Token
            id: Id.Lit_Chars
            val: '\t# patch-2 is the same as patch-1 but is based\n'
            span_id: 50
          ) (Token id:Id.Lit_Chars val:'\t# on a version that already has whitespace fixed,\n' span_id:51) 
          (Token
            id: Id.Lit_Chars
            val: '\t# and does not introduce whitespace breakages.\n'
            span_id: 52
          ) (Token id:Id.Lit_Chars val:'\tsed -e "s/ \\$//" patch-1 >patch-2 &&\n' span_id:53) 
          (Token id:Id.Lit_Chars val:'\n' span_id:54) (Token id:Id.Lit_Chars val:'\t# If all whitespace breakages are fixed the contents\n' span_id:55) 
          (Token id:Id.Lit_Chars val:'\t# should look like file-fixed\n' span_id:56) (Token id:Id.Lit_Chars val:'\tsed -e "s/ \\$//" file-1 >file-fixed\n' span_id:57) 
          (Token id:Id.Lit_Chars val:'\n' span_id:58)
        )
      }
    )
    (C {(test_expect_success)} {(nofix)} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:67) (Token id:Id.Lit_Chars val:'\n' span_id:68) 
          (Token id:Id.Lit_Chars val:'\t>file &&\n' span_id:69) (Token id:Id.Lit_Chars val:'\tgit add file &&\n' span_id:70) 
          (Token id:Id.Lit_Chars val:'\n' span_id:71) (Token id:Id.Lit_Chars val:'\t# Baseline.  Applying without fixing any whitespace\n' span_id:72) 
          (Token id:Id.Lit_Chars val:'\t# breakages.\n' span_id:73) (Token id:Id.Lit_Chars val:'\tgit apply --whitespace=nowarn patch-0 &&\n' span_id:74) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit apply --whitespace=nowarn patch-1 &&\n'
            span_id: 75
          ) (Token id:Id.Lit_Chars val:'\n' span_id:76) 
          (Token id:Id.Lit_Chars val:'\t# The result should obviously match.\n' span_id:77) (Token id:Id.Lit_Chars val:'\ttest_cmp file-1 file\n' span_id:78)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'withfix (forward)' span_id:85))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:89) (Token id:Id.Lit_Chars val:'\n' span_id:90) 
          (Token id:Id.Lit_Chars val:'\t>file &&\n' span_id:91) (Token id:Id.Lit_Chars val:'\tgit add file &&\n' span_id:92) 
          (Token id:Id.Lit_Chars val:'\n' span_id:93) (Token id:Id.Lit_Chars val:'\t# The first application will munge the context lines\n' span_id:94) 
          (Token
            id: Id.Lit_Chars
            val: '\t# the second patch depends on.  We should be able to\n'
            span_id: 95
          ) (Token id:Id.Lit_Chars val:'\t# adjust and still apply.\n' span_id:96) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit apply --whitespace=fix patch-0 &&\n'
            span_id: 97
          ) (Token id:Id.Lit_Chars val:'\tgit apply --whitespace=fix patch-1 &&\n' span_id:98) 
          (Token id:Id.Lit_Chars val:'\n' span_id:99) (Token id:Id.Lit_Chars val:'\ttest_cmp file-fixed file\n' span_id:100)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'withfix (backward)' span_id:107))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:111) (Token id:Id.Lit_Chars val:'\n' span_id:112) 
          (Token id:Id.Lit_Chars val:'\t>file &&\n' span_id:113) (Token id:Id.Lit_Chars val:'\tgit add file &&\n' span_id:114) 
          (Token id:Id.Lit_Chars val:'\n' span_id:115) (Token id:Id.Lit_Chars val:'\t# Now we have a whitespace breakages on our side.\n' span_id:116) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit apply --whitespace=nowarn patch-0 &&\n'
            span_id: 117
          ) (Token id:Id.Lit_Chars val:'\n' span_id:118) 
          (Token
            id: Id.Lit_Chars
            val: '\t# And somebody sends in a patch based on image\n'
            span_id: 119
          ) (Token id:Id.Lit_Chars val:'\t# with whitespace already fixed.\n' span_id:120) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit apply --whitespace=fix patch-2 &&\n'
            span_id: 121
          ) (Token id:Id.Lit_Chars val:'\n' span_id:122) 
          (Token
            id: Id.Lit_Chars
            val: '\t# The result should accept the whitespace fixed\n'
            span_id: 123
          ) (Token id:Id.Lit_Chars val:'\t# postimage.  But the line with "h" is beyond context\n' span_id:124) 
          (Token id:Id.Lit_Chars val:'\t# horizon and left unfixed.\n' span_id:125) (Token id:Id.Lit_Chars val:'\n' span_id:126) 
          (Token
            id: Id.Lit_Chars
            val: '\tsed -e /h/d file-fixed >fixed-head &&\n'
            span_id: 127
          ) (Token id:Id.Lit_Chars val:'\tsed -e /h/d file >file-head &&\n' span_id:128) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp fixed-head file-head &&\n' span_id:129) (Token id:Id.Lit_Chars val:'\n' span_id:130) 
          (Token
            id: Id.Lit_Chars
            val: '\tsed -n -e /h/p file-fixed >fixed-tail &&\n'
            span_id: 131
          ) (Token id:Id.Lit_Chars val:'\tsed -n -e /h/p file >file-tail &&\n' span_id:132) 
          (Token id:Id.Lit_Chars val:'\n' span_id:133) (Token id:Id.Lit_Chars val:'\t! test_cmp fixed-tail file-tail\n' span_id:134) 
          (Token id:Id.Lit_Chars val:'\n' span_id:135)
        )
      }
    )
    (C {(test_done)})
  ]
)