(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:'CRLF conversion' span_id:6))}
          spids: [4]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (command.ShFunction
      name: has_cr
      body: 
        (command.BraceGroup
          children: [
            (command.Pipeline
              children: [
                (command.Simple
                  words: [{(tr)} {(SQ (Token id:Id.Lit_Chars val:'\\015' span_id:25))} {(Q)}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Less val:'<' span_id:30)
                      fd: -1
                      arg_word: {(DQ ($ Id.VSub_Number '$1'))}
                    )
                  ]
                )
                (command.Simple
                  words: [{(grep)} {(Q)}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:41)
                      fd: -1
                      arg_word: {(/dev/null)}
                    )
                  ]
                )
              ]
              negated: F
            )
          ]
        )
    )
    (C {(test_expect_success)} {(setup)} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:52) (Token id:Id.Lit_Chars val:'\n' span_id:53) 
          (Token id:Id.Lit_Chars val:'\tgit config core.autocrlf false &&\n' span_id:54) (Token id:Id.Lit_Chars val:'\n' span_id:55) 
          (Token
            id: Id.Lit_Chars
            val: '\tfor w in Hello world how are you; do echo $w; done >LFonly &&\n'
            span_id: 56
          ) 
          (Token
            id: Id.Lit_Chars
            val: 
'\tfor w in I am very very fine thank you; do echo ${w}Q; done | q_to_cr >CRLFonly &&\n'
            span_id: 57
          ) 
          (Token
            id: Id.Lit_Chars
            val: 
'\tfor w in Oh here is a QNUL byte how alarming; do echo ${w}; done | q_to_nul >LFwithNUL &&\n'
            span_id: 58
          ) (Token id:Id.Lit_Chars val:'\tgit add . &&\n' span_id:59) (Token id:Id.Lit_Chars val:'\n' span_id:60) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m initial &&\n' span_id:61) (Token id:Id.Lit_Chars val:'\n' span_id:62) 
          (Token
            id: Id.Lit_Chars
            val: '\tLFonly=$(git rev-parse HEAD:LFonly) &&\n'
            span_id: 63
          ) (Token id:Id.Lit_Chars val:'\tCRLFonly=$(git rev-parse HEAD:CRLFonly) &&\n' span_id:64) 
          (Token
            id: Id.Lit_Chars
            val: '\tLFwithNUL=$(git rev-parse HEAD:LFwithNUL) &&\n'
            span_id: 65
          ) (Token id:Id.Lit_Chars val:'\n' span_id:66) (Token id:Id.Lit_Chars val:'\techo happy.\n' span_id:67)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'default settings cause no changes' span_id:74))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:78) (Token id:Id.Lit_Chars val:'\n' span_id:79) 
          (Token
            id: Id.Lit_Chars
            val: '\trm -f .gitattributes tmp LFonly CRLFonly LFwithNUL &&\n'
            span_id: 80
          ) (Token id:Id.Lit_Chars val:'\tgit read-tree --reset -u HEAD &&\n' span_id:81) 
          (Token id:Id.Lit_Chars val:'\n' span_id:82) (Token id:Id.Lit_Chars val:'\t! has_cr LFonly &&\n' span_id:83) 
          (Token id:Id.Lit_Chars val:'\thas_cr CRLFonly &&\n' span_id:84) (Token id:Id.Lit_Chars val:'\tLFonlydiff=$(git diff LFonly) &&\n' span_id:85) 
          (Token id:Id.Lit_Chars val:'\tCRLFonlydiff=$(git diff CRLFonly) &&\n' span_id:86) (Token id:Id.Lit_Chars val:'\tLFwithNULdiff=$(git diff LFwithNUL) &&\n' span_id:87) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest -z "$LFonlydiff" -a -z "$CRLFonlydiff" -a -z "$LFwithNULdiff"\n'
            span_id: 88
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'crlf=true causes a CRLF file to be normalized' span_id:95))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:99) (Token id:Id.Lit_Chars val:'\n' span_id:100) 
          (Token id:Id.Lit_Chars val:'\t# Backwards compatibility check\n' span_id:101) (Token id:Id.Lit_Chars val:'\trm -f .gitattributes tmp LFonly CRLFonly LFwithNUL &&\n' span_id:102) 
          (Token
            id: Id.Lit_Chars
            val: '\techo "CRLFonly crlf" > .gitattributes &&\n'
            span_id: 103
          ) (Token id:Id.Lit_Chars val:'\tgit read-tree --reset -u HEAD &&\n' span_id:104) 
          (Token id:Id.Lit_Chars val:'\n' span_id:105) 
          (Token
            id: Id.Lit_Chars
            val: '\t# Note, "normalized" means that git will normalize it if added\n'
            span_id: 106
          ) (Token id:Id.Lit_Chars val:'\thas_cr CRLFonly &&\n' span_id:107) 
          (Token
            id: Id.Lit_Chars
            val: '\tCRLFonlydiff=$(git diff CRLFonly) &&\n'
            span_id: 108
          ) (Token id:Id.Lit_Chars val:'\ttest -n "$CRLFonlydiff"\n' span_id:109)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'text=true causes a CRLF file to be normalized' span_id:116))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:120) (Token id:Id.Lit_Chars val:'\n' span_id:121) 
          (Token
            id: Id.Lit_Chars
            val: '\trm -f .gitattributes tmp LFonly CRLFonly LFwithNUL &&\n'
            span_id: 122
          ) (Token id:Id.Lit_Chars val:'\techo "CRLFonly text" > .gitattributes &&\n' span_id:123) 
          (Token id:Id.Lit_Chars val:'\tgit read-tree --reset -u HEAD &&\n' span_id:124) (Token id:Id.Lit_Chars val:'\n' span_id:125) 
          (Token
            id: Id.Lit_Chars
            val: '\t# Note, "normalized" means that git will normalize it if added\n'
            span_id: 126
          ) (Token id:Id.Lit_Chars val:'\thas_cr CRLFonly &&\n' span_id:127) 
          (Token
            id: Id.Lit_Chars
            val: '\tCRLFonlydiff=$(git diff CRLFonly) &&\n'
            span_id: 128
          ) (Token id:Id.Lit_Chars val:'\ttest -n "$CRLFonlydiff"\n' span_id:129)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'eol=crlf gives a normalized file CRLFs with autocrlf=false'
            span_id: 136
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:140) (Token id:Id.Lit_Chars val:'\n' span_id:141) 
          (Token
            id: Id.Lit_Chars
            val: '\trm -f .gitattributes tmp LFonly CRLFonly LFwithNUL &&\n'
            span_id: 142
          ) (Token id:Id.Lit_Chars val:'\tgit config core.autocrlf false &&\n' span_id:143) 
          (Token
            id: Id.Lit_Chars
            val: '\techo "LFonly eol=crlf" > .gitattributes &&\n'
            span_id: 144
          ) (Token id:Id.Lit_Chars val:'\tgit read-tree --reset -u HEAD &&\n' span_id:145) 
          (Token id:Id.Lit_Chars val:'\n' span_id:146) (Token id:Id.Lit_Chars val:'\thas_cr LFonly &&\n' span_id:147) 
          (Token id:Id.Lit_Chars val:'\tLFonlydiff=$(git diff LFonly) &&\n' span_id:148) (Token id:Id.Lit_Chars val:'\ttest -z "$LFonlydiff"\n' span_id:149)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'eol=crlf gives a normalized file CRLFs with autocrlf=input'
            span_id: 156
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:160) (Token id:Id.Lit_Chars val:'\n' span_id:161) 
          (Token
            id: Id.Lit_Chars
            val: '\trm -f .gitattributes tmp LFonly CRLFonly LFwithNUL &&\n'
            span_id: 162
          ) (Token id:Id.Lit_Chars val:'\tgit config core.autocrlf input &&\n' span_id:163) 
          (Token
            id: Id.Lit_Chars
            val: '\techo "LFonly eol=crlf" > .gitattributes &&\n'
            span_id: 164
          ) (Token id:Id.Lit_Chars val:'\tgit read-tree --reset -u HEAD &&\n' span_id:165) 
          (Token id:Id.Lit_Chars val:'\n' span_id:166) (Token id:Id.Lit_Chars val:'\thas_cr LFonly &&\n' span_id:167) 
          (Token id:Id.Lit_Chars val:'\tLFonlydiff=$(git diff LFonly) &&\n' span_id:168) (Token id:Id.Lit_Chars val:'\ttest -z "$LFonlydiff"\n' span_id:169)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'eol=lf gives a normalized file LFs with autocrlf=true'
            span_id: 176
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:180) (Token id:Id.Lit_Chars val:'\n' span_id:181) 
          (Token
            id: Id.Lit_Chars
            val: '\trm -f .gitattributes tmp LFonly CRLFonly LFwithNUL &&\n'
            span_id: 182
          ) (Token id:Id.Lit_Chars val:'\tgit config core.autocrlf true &&\n' span_id:183) 
          (Token
            id: Id.Lit_Chars
            val: '\techo "LFonly eol=lf" > .gitattributes &&\n'
            span_id: 184
          ) (Token id:Id.Lit_Chars val:'\tgit read-tree --reset -u HEAD &&\n' span_id:185) 
          (Token id:Id.Lit_Chars val:'\n' span_id:186) (Token id:Id.Lit_Chars val:'\t! has_cr LFonly &&\n' span_id:187) 
          (Token id:Id.Lit_Chars val:'\tLFonlydiff=$(git diff LFonly) &&\n' span_id:188) (Token id:Id.Lit_Chars val:'\ttest -z "$LFonlydiff"\n' span_id:189)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'autocrlf=true does not normalize CRLF files' span_id:196))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:200) (Token id:Id.Lit_Chars val:'\n' span_id:201) 
          (Token
            id: Id.Lit_Chars
            val: '\trm -f .gitattributes tmp LFonly CRLFonly LFwithNUL &&\n'
            span_id: 202
          ) (Token id:Id.Lit_Chars val:'\tgit config core.autocrlf true &&\n' span_id:203) 
          (Token id:Id.Lit_Chars val:'\tgit read-tree --reset -u HEAD &&\n' span_id:204) (Token id:Id.Lit_Chars val:'\n' span_id:205) 
          (Token id:Id.Lit_Chars val:'\thas_cr LFonly &&\n' span_id:206) (Token id:Id.Lit_Chars val:'\thas_cr CRLFonly &&\n' span_id:207) 
          (Token id:Id.Lit_Chars val:'\tLFonlydiff=$(git diff LFonly) &&\n' span_id:208) (Token id:Id.Lit_Chars val:'\tCRLFonlydiff=$(git diff CRLFonly) &&\n' span_id:209) 
          (Token
            id: Id.Lit_Chars
            val: '\tLFwithNULdiff=$(git diff LFwithNUL) &&\n'
            span_id: 210
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest -z "$LFonlydiff" -a -z "$CRLFonlydiff" -a -z "$LFwithNULdiff"\n'
            span_id: 211
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'text=auto, autocrlf=true does not normalize CRLF files'
            span_id: 218
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:222) (Token id:Id.Lit_Chars val:'\n' span_id:223) 
          (Token
            id: Id.Lit_Chars
            val: '\trm -f .gitattributes tmp LFonly CRLFonly LFwithNUL &&\n'
            span_id: 224
          ) (Token id:Id.Lit_Chars val:'\tgit config core.autocrlf true &&\n' span_id:225) 
          (Token
            id: Id.Lit_Chars
            val: '\techo "* text=auto" > .gitattributes &&\n'
            span_id: 226
          ) (Token id:Id.Lit_Chars val:'\tgit read-tree --reset -u HEAD &&\n' span_id:227) 
          (Token id:Id.Lit_Chars val:'\n' span_id:228) (Token id:Id.Lit_Chars val:'\thas_cr LFonly &&\n' span_id:229) 
          (Token id:Id.Lit_Chars val:'\thas_cr CRLFonly &&\n' span_id:230) (Token id:Id.Lit_Chars val:'\tLFonlydiff=$(git diff LFonly) &&\n' span_id:231) 
          (Token
            id: Id.Lit_Chars
            val: '\tCRLFonlydiff=$(git diff CRLFonly) &&\n'
            span_id: 232
          ) (Token id:Id.Lit_Chars val:'\tLFwithNULdiff=$(git diff LFwithNUL) &&\n' span_id:233) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest -z "$LFonlydiff" -a -z "$CRLFonlydiff" -a -z "$LFwithNULdiff"\n'
            span_id: 234
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'text=auto, autocrlf=true does not normalize binary files'
            span_id: 241
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:245) (Token id:Id.Lit_Chars val:'\n' span_id:246) 
          (Token
            id: Id.Lit_Chars
            val: '\trm -f .gitattributes tmp LFonly CRLFonly LFwithNUL &&\n'
            span_id: 247
          ) (Token id:Id.Lit_Chars val:'\tgit config core.autocrlf true &&\n' span_id:248) 
          (Token
            id: Id.Lit_Chars
            val: '\techo "* text=auto" > .gitattributes &&\n'
            span_id: 249
          ) (Token id:Id.Lit_Chars val:'\tgit read-tree --reset -u HEAD &&\n' span_id:250) 
          (Token id:Id.Lit_Chars val:'\n' span_id:251) (Token id:Id.Lit_Chars val:'\t! has_cr LFwithNUL &&\n' span_id:252) 
          (Token
            id: Id.Lit_Chars
            val: '\tLFwithNULdiff=$(git diff LFwithNUL) &&\n'
            span_id: 253
          ) (Token id:Id.Lit_Chars val:'\ttest -z "$LFwithNULdiff"\n' span_id:254)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'eol=crlf _does_ normalize binary files' span_id:261))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:265) (Token id:Id.Lit_Chars val:'\n' span_id:266) 
          (Token
            id: Id.Lit_Chars
            val: '\trm -f .gitattributes tmp LFonly CRLFonly LFwithNUL &&\n'
            span_id: 267
          ) (Token id:Id.Lit_Chars val:'\techo "LFwithNUL eol=crlf" > .gitattributes &&\n' span_id:268) 
          (Token id:Id.Lit_Chars val:'\tgit read-tree --reset -u HEAD &&\n' span_id:269) (Token id:Id.Lit_Chars val:'\n' span_id:270) 
          (Token id:Id.Lit_Chars val:'\thas_cr LFwithNUL &&\n' span_id:271) (Token id:Id.Lit_Chars val:'\tLFwithNULdiff=$(git diff LFwithNUL) &&\n' span_id:272) 
          (Token id:Id.Lit_Chars val:'\ttest -z "$LFwithNULdiff"\n' span_id:273)
        )
      }
    )
    (C {(test_done)})
  ]
)