(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:'\techo "one text" > .gitattributes &&\n' span_id:56) (Token id:Id.Lit_Chars val:'\n' span_id:57) 
          (Token
            id: Id.Lit_Chars
            val: '\tfor w in Hello world how are you; do echo $w; done >one &&\n'
            span_id: 58
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tfor w in I am very very fine thank you; do echo $w; done >two &&\n'
            span_id: 59
          ) (Token id:Id.Lit_Chars val:'\tgit add . &&\n' span_id:60) (Token id:Id.Lit_Chars val:'\n' span_id:61) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m initial &&\n' span_id:62) (Token id:Id.Lit_Chars val:'\n' span_id:63) 
          (Token id:Id.Lit_Chars val:'\tone=$(git rev-parse HEAD:one) &&\n' span_id:64) (Token id:Id.Lit_Chars val:'\ttwo=$(git rev-parse HEAD:two) &&\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:'eol=lf puts LFs in normalized file' 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 one two &&\n' span_id:80) (Token id:Id.Lit_Chars val:'\tgit config core.eol lf &&\n' span_id:81) 
          (Token id:Id.Lit_Chars val:'\tgit read-tree --reset -u HEAD &&\n' span_id:82) (Token id:Id.Lit_Chars val:'\n' span_id:83) 
          (Token id:Id.Lit_Chars val:'\t! has_cr one &&\n' span_id:84) (Token id:Id.Lit_Chars val:'\t! has_cr two &&\n' span_id:85) 
          (Token id:Id.Lit_Chars val:'\tonediff=$(git diff one) &&\n' span_id:86) (Token id:Id.Lit_Chars val:'\ttwodiff=$(git diff two) &&\n' span_id:87) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest -z "$onediff" && test -z "$twodiff"\n'
            span_id: 88
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'eol=crlf puts CRLFs in normalized file' 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:'\trm -f .gitattributes tmp one two &&\n' span_id:101) (Token id:Id.Lit_Chars val:'\tgit config core.eol crlf &&\n' span_id:102) 
          (Token id:Id.Lit_Chars val:'\tgit read-tree --reset -u HEAD &&\n' span_id:103) (Token id:Id.Lit_Chars val:'\n' span_id:104) 
          (Token id:Id.Lit_Chars val:'\thas_cr one &&\n' span_id:105) (Token id:Id.Lit_Chars val:'\t! has_cr two &&\n' span_id:106) 
          (Token id:Id.Lit_Chars val:'\tonediff=$(git diff one) &&\n' span_id:107) (Token id:Id.Lit_Chars val:'\ttwodiff=$(git diff two) &&\n' span_id:108) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest -z "$onediff" && test -z "$twodiff"\n'
            span_id: 109
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'autocrlf=true overrides eol=lf' 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 one two &&\n' span_id:122) (Token id:Id.Lit_Chars val:'\tgit config core.eol lf &&\n' span_id:123) 
          (Token id:Id.Lit_Chars val:'\tgit config core.autocrlf true &&\n' span_id:124) (Token id:Id.Lit_Chars val:'\tgit read-tree --reset -u HEAD &&\n' span_id:125) 
          (Token id:Id.Lit_Chars val:'\n' span_id:126) (Token id:Id.Lit_Chars val:'\thas_cr one &&\n' span_id:127) 
          (Token id:Id.Lit_Chars val:'\thas_cr two &&\n' span_id:128) (Token id:Id.Lit_Chars val:'\tonediff=$(git diff one) &&\n' span_id:129) 
          (Token id:Id.Lit_Chars val:'\ttwodiff=$(git diff two) &&\n' span_id:130) (Token id:Id.Lit_Chars val:'\ttest -z "$onediff" && test -z "$twodiff"\n' span_id:131)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'autocrlf=true overrides unset eol' span_id:138))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:142) (Token id:Id.Lit_Chars val:'\n' span_id:143) 
          (Token id:Id.Lit_Chars val:'\trm -f .gitattributes tmp one two &&\n' span_id:144) (Token id:Id.Lit_Chars val:'\tgit config --unset-all core.eol &&\n' span_id:145) 
          (Token id:Id.Lit_Chars val:'\tgit config core.autocrlf true &&\n' span_id:146) (Token id:Id.Lit_Chars val:'\tgit read-tree --reset -u HEAD &&\n' span_id:147) 
          (Token id:Id.Lit_Chars val:'\n' span_id:148) (Token id:Id.Lit_Chars val:'\thas_cr one &&\n' span_id:149) 
          (Token id:Id.Lit_Chars val:'\thas_cr two &&\n' span_id:150) (Token id:Id.Lit_Chars val:'\tonediff=$(git diff one) &&\n' span_id:151) 
          (Token id:Id.Lit_Chars val:'\ttwodiff=$(git diff two) &&\n' span_id:152) (Token id:Id.Lit_Chars val:'\ttest -z "$onediff" && test -z "$twodiff"\n' span_id:153)
        )
      }
    )
    (C {(test_expect_success)} {(NATIVE_CRLF)} 
      {(SQ (Token id:Id.Lit_Chars val:'eol native is crlf' span_id:162))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:166) (Token id:Id.Lit_Chars val:'\n' span_id:167) 
          (Token
            id: Id.Lit_Chars
            val: '\trm -rf native_eol && mkdir native_eol &&\n'
            span_id: 168
          ) (Token id:Id.Lit_Chars val:'\t(\n' span_id:169) 
          (Token id:Id.Lit_Chars val:'\t\tcd native_eol &&\n' span_id:170) (Token id:Id.Lit_Chars val:'\t\tprintf "*.txt text\\n" >.gitattributes &&\n' span_id:171) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tprintf "one\\r\\ntwo\\r\\nthree\\r\\n" >filedos.txt &&\n'
            span_id: 172
          ) (Token id:Id.Lit_Chars val:'\t\tprintf "one\\ntwo\\nthree\\n" >fileunix.txt &&\n' span_id:173) 
          (Token id:Id.Lit_Chars val:'\t\tgit init &&\n' span_id:174) (Token id:Id.Lit_Chars val:'\t\tgit config core.autocrlf false &&\n' span_id:175) 
          (Token id:Id.Lit_Chars val:'\t\tgit config core.eol native &&\n' span_id:176) (Token id:Id.Lit_Chars val:'\t\tgit add filedos.txt fileunix.txt &&\n' span_id:177) 
          (Token id:Id.Lit_Chars val:'\t\tgit commit -m "first" &&\n' span_id:178) (Token id:Id.Lit_Chars val:'\t\trm file*.txt &&\n' span_id:179) 
          (Token id:Id.Lit_Chars val:'\t\tgit reset --hard HEAD &&\n' span_id:180) (Token id:Id.Lit_Chars val:'\t\thas_cr filedos.txt &&\n' span_id:181) 
          (Token id:Id.Lit_Chars val:'\t\thas_cr fileunix.txt\n' span_id:182) (Token id:Id.Lit_Chars val:'\t)\n' span_id:183)
        )
      }
    )
    (C {(test_done)})
  ]
)