(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:test_description)
          op: Equal
          rhs: {(SQ <'CRLF conversion'>)}
          spids: [4]
        )
      ]
      spids: [4]
    )
    (C {(.)} {(./test-lib.sh)})
    (FuncDef
      name: has_cr
      body: 
        (BraceGroup
          children: [
            (Pipeline
              children: [
                (SimpleCommand
                  words: [{(tr)} {(SQ <'\\015'>)} {(Q)}]
                  redirects: [
                    (Redir
                      op_id: Redir_Less
                      fd: 16777215
                      arg_word: {(DQ ($ VSub_Number '$1'))}
                      spids: [30]
                    )
                  ]
                )
                (SimpleCommand
                  words: [{(grep)} {(Q)}]
                  redirects: [(Redir op_id:Redir_Great fd:16777215 arg_word:{(/dev/null)} spids:[41])]
                )
              ]
              negated: F
            )
          ]
          spids: [19]
        )
      spids: [15 18]
    )
    (C {(test_expect_success)} {(setup)} 
      {
        (SQ <'\n'> <'\n'> <'\tgit config core.autocrlf false &&\n'> <'\n'> 
          <'\tfor w in Hello world how are you; do echo $w; done >LFonly &&\n'> <'\tfor w in I am very very fine thank you; do echo ${w}Q; done | q_to_cr >CRLFonly &&\n'> 
          <
'\tfor w in Oh here is a QNUL byte how alarming; do echo ${w}; done | q_to_nul >LFwithNUL &&\n'
          > <'\tgit add . &&\n'> <'\n'> <'\tgit commit -m initial &&\n'> <'\n'> 
          <'\tLFonly=$(git rev-parse HEAD:LFonly) &&\n'> <'\tCRLFonly=$(git rev-parse HEAD:CRLFonly) &&\n'> 
          <'\tLFwithNUL=$(git rev-parse HEAD:LFwithNUL) &&\n'> <'\n'> <'\techo happy.\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'default settings cause no changes'>)} 
      {
        (SQ <'\n'> <'\n'> <'\trm -f .gitattributes tmp LFonly CRLFonly LFwithNUL &&\n'> 
          <'\tgit read-tree --reset -u HEAD &&\n'> <'\n'> <'\t! has_cr LFonly &&\n'> <'\thas_cr CRLFonly &&\n'> <'\tLFonlydiff=$(git diff LFonly) &&\n'> 
          <'\tCRLFonlydiff=$(git diff CRLFonly) &&\n'> <'\tLFwithNULdiff=$(git diff LFwithNUL) &&\n'> 
          <'\ttest -z "$LFonlydiff" -a -z "$CRLFonlydiff" -a -z "$LFwithNULdiff"\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'crlf=true causes a CRLF file to be normalized'>)} 
      {
        (SQ <'\n'> <'\n'> <'\t# Backwards compatibility check\n'> 
          <'\trm -f .gitattributes tmp LFonly CRLFonly LFwithNUL &&\n'> <'\techo "CRLFonly crlf" > .gitattributes &&\n'> <'\tgit read-tree --reset -u HEAD &&\n'> <'\n'> 
          <'\t# Note, "normalized" means that git will normalize it if added\n'> <'\thas_cr CRLFonly &&\n'> <'\tCRLFonlydiff=$(git diff CRLFonly) &&\n'> <'\ttest -n "$CRLFonlydiff"\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'text=true causes a CRLF file to be normalized'>)} 
      {
        (SQ <'\n'> <'\n'> <'\trm -f .gitattributes tmp LFonly CRLFonly LFwithNUL &&\n'> 
          <'\techo "CRLFonly text" > .gitattributes &&\n'> <'\tgit read-tree --reset -u HEAD &&\n'> <'\n'> 
          <'\t# Note, "normalized" means that git will normalize it if added\n'> <'\thas_cr CRLFonly &&\n'> <'\tCRLFonlydiff=$(git diff CRLFonly) &&\n'> <'\ttest -n "$CRLFonlydiff"\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'eol=crlf gives a normalized file CRLFs with autocrlf=false'>)} 
      {
        (SQ <'\n'> <'\n'> <'\trm -f .gitattributes tmp LFonly CRLFonly LFwithNUL &&\n'> 
          <'\tgit config core.autocrlf false &&\n'> <'\techo "LFonly eol=crlf" > .gitattributes &&\n'> <'\tgit read-tree --reset -u HEAD &&\n'> <'\n'> 
          <'\thas_cr LFonly &&\n'> <'\tLFonlydiff=$(git diff LFonly) &&\n'> <'\ttest -z "$LFonlydiff"\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'eol=crlf gives a normalized file CRLFs with autocrlf=input'>)} 
      {
        (SQ <'\n'> <'\n'> <'\trm -f .gitattributes tmp LFonly CRLFonly LFwithNUL &&\n'> 
          <'\tgit config core.autocrlf input &&\n'> <'\techo "LFonly eol=crlf" > .gitattributes &&\n'> <'\tgit read-tree --reset -u HEAD &&\n'> <'\n'> 
          <'\thas_cr LFonly &&\n'> <'\tLFonlydiff=$(git diff LFonly) &&\n'> <'\ttest -z "$LFonlydiff"\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'eol=lf gives a normalized file LFs with autocrlf=true'>)} 
      {
        (SQ <'\n'> <'\n'> <'\trm -f .gitattributes tmp LFonly CRLFonly LFwithNUL &&\n'> 
          <'\tgit config core.autocrlf true &&\n'> <'\techo "LFonly eol=lf" > .gitattributes &&\n'> <'\tgit read-tree --reset -u HEAD &&\n'> <'\n'> 
          <'\t! has_cr LFonly &&\n'> <'\tLFonlydiff=$(git diff LFonly) &&\n'> <'\ttest -z "$LFonlydiff"\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'autocrlf=true does not normalize CRLF files'>)} 
      {
        (SQ <'\n'> <'\n'> <'\trm -f .gitattributes tmp LFonly CRLFonly LFwithNUL &&\n'> 
          <'\tgit config core.autocrlf true &&\n'> <'\tgit read-tree --reset -u HEAD &&\n'> <'\n'> <'\thas_cr LFonly &&\n'> <'\thas_cr CRLFonly &&\n'> 
          <'\tLFonlydiff=$(git diff LFonly) &&\n'> <'\tCRLFonlydiff=$(git diff CRLFonly) &&\n'> <'\tLFwithNULdiff=$(git diff LFwithNUL) &&\n'> 
          <'\ttest -z "$LFonlydiff" -a -z "$CRLFonlydiff" -a -z "$LFwithNULdiff"\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'text=auto, autocrlf=true does not normalize CRLF files'>)} 
      {
        (SQ <'\n'> <'\n'> <'\trm -f .gitattributes tmp LFonly CRLFonly LFwithNUL &&\n'> 
          <'\tgit config core.autocrlf true &&\n'> <'\techo "* text=auto" > .gitattributes &&\n'> <'\tgit read-tree --reset -u HEAD &&\n'> <'\n'> 
          <'\thas_cr LFonly &&\n'> <'\thas_cr CRLFonly &&\n'> <'\tLFonlydiff=$(git diff LFonly) &&\n'> 
          <'\tCRLFonlydiff=$(git diff CRLFonly) &&\n'> <'\tLFwithNULdiff=$(git diff LFwithNUL) &&\n'> 
          <'\ttest -z "$LFonlydiff" -a -z "$CRLFonlydiff" -a -z "$LFwithNULdiff"\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'text=auto, autocrlf=true does not normalize binary files'>)} 
      {
        (SQ <'\n'> <'\n'> <'\trm -f .gitattributes tmp LFonly CRLFonly LFwithNUL &&\n'> 
          <'\tgit config core.autocrlf true &&\n'> <'\techo "* text=auto" > .gitattributes &&\n'> <'\tgit read-tree --reset -u HEAD &&\n'> <'\n'> 
          <'\t! has_cr LFwithNUL &&\n'> <'\tLFwithNULdiff=$(git diff LFwithNUL) &&\n'> <'\ttest -z "$LFwithNULdiff"\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'eol=crlf _does_ normalize binary files'>)} 
      {
        (SQ <'\n'> <'\n'> <'\trm -f .gitattributes tmp LFonly CRLFonly LFwithNUL &&\n'> 
          <'\techo "LFwithNUL eol=crlf" > .gitattributes &&\n'> <'\tgit read-tree --reset -u HEAD &&\n'> <'\n'> <'\thas_cr LFwithNUL &&\n'> 
          <'\tLFwithNULdiff=$(git diff LFwithNUL) &&\n'> <'\ttest -z "$LFwithNULdiff"\n'>
        )
      }
    )
    (C {(test_done)})
  ]
)