(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:test_description)
          op: Equal
          rhs: {(SQ <"utf-8 decomposed (nfd) converted to precomposed (nfc)">)}
          spids: [13]
        )
      ]
      spids: [13]
    )
    (C {(.)} {(./test-lib.sh)})
    (If
      arms: [
        (if_arm
          cond: [(Pipeline children:[(C {(test_have_prereq)} {(UTF8_NFD_TO_NFC)})] negated:True)]
          action: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:skip_all)
                  op: Equal
                  rhs: {(DQ ("filesystem does not corrupt utf-8"))}
                  spids: [35]
                )
              ]
              spids: [35]
            )
            (C {(test_done)})
          ]
          spids: [-1 32]
        )
      ]
      spids: [-1 43]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:Adiarnfc)
          op: Equal
          rhs: 
            {
              (CommandSubPart
                command_list: (CommandList children:[(C {(printf)} {(SQ <"\\303\\204">)})])
                left_token: <Left_CommandSub "$(">
                spids: [50 56]
              )
            }
          spids: [49]
        )
      ]
      spids: [49]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:Adiarnfd)
          op: Equal
          rhs: 
            {
              (CommandSubPart
                command_list: (CommandList children:[(C {(printf)} {(SQ <"A\\314\\210">)})])
                left_token: <Left_CommandSub "$(">
                spids: [59 65]
              )
            }
          spids: [58]
        )
      ]
      spids: [58]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:Odiarnfc)
          op: Equal
          rhs: 
            {
              (CommandSubPart
                command_list: (CommandList children:[(C {(printf)} {(SQ <"\\303\\226">)})])
                left_token: <Left_CommandSub "$(">
                spids: [69 75]
              )
            }
          spids: [68]
        )
      ]
      spids: [68]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:Odiarnfd)
          op: Equal
          rhs: 
            {
              (CommandSubPart
                command_list: (CommandList children:[(C {(printf)} {(SQ <"O\\314\\210">)})])
                left_token: <Left_CommandSub "$(">
                spids: [78 84]
              )
            }
          spids: [77]
        )
      ]
      spids: [77]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:AEligatu)
          op: Equal
          rhs: 
            {
              (CommandSubPart
                command_list: (CommandList children:[(C {(printf)} {(SQ <"\\303\\206">)})])
                left_token: <Left_CommandSub "$(">
                spids: [87 93]
              )
            }
          spids: [86]
        )
      ]
      spids: [86]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:Invalidu)
          op: Equal
          rhs: 
            {
              (CommandSubPart
                command_list: (CommandList children:[(C {(printf)} {(SQ <"\\303\\377">)})])
                left_token: <Left_CommandSub "$(">
                spids: [96 102]
              )
            }
          spids: [95]
        )
      ]
      spids: [95]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:Alongd)
          op: Equal
          rhs: 
            {($ VSub_Name "$Adiarnfd") ($ VSub_Name "$Adiarnfd") ($ VSub_Name "$Adiarnfd") 
              ($ VSub_Name "$Adiarnfd") ($ VSub_Name "$Adiarnfd") ($ VSub_Name "$Adiarnfd") ($ VSub_Name "$Adiarnfd")
            }
          spids: [109]
        )
      ]
      spids: [109]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:Alongd)
          op: Equal
          rhs: {($ VSub_Name "$Alongd") ($ VSub_Name "$Alongd") ($ VSub_Name "$Alongd")}
          spids: [121]
        )
      ]
      spids: [121]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:Alongd)
          op: Equal
          rhs: 
            {($ VSub_Name "$Alongd") ($ VSub_Name "$Alongd") ($ VSub_Name "$Alongd") 
              ($ VSub_Name "$Alongd") ($ VSub_Name "$Adiarnfd")
            }
          spids: [129]
        )
      ]
      spids: [129]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:Alongc)
          op: Equal
          rhs: 
            {($ VSub_Name "$AEligatu") ($ VSub_Name "$AEligatu") ($ VSub_Name "$AEligatu") 
              ($ VSub_Name "$AEligatu") ($ VSub_Name "$AEligatu")
            }
          spids: [143]
        )
      ]
      spids: [143]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:Alongc)
          op: Equal
          rhs: 
            {($ VSub_Name "$Alongc") ($ VSub_Name "$Alongc") ($ VSub_Name "$Alongc") 
              ($ VSub_Name "$Alongc") ($ VSub_Name "$Alongc")
            }
          spids: [153]
        )
      ]
      spids: [153]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:Alongc)
          op: Equal
          rhs: 
            {($ VSub_Name "$Alongc") ($ VSub_Name "$Alongc") ($ VSub_Name "$Alongc") 
              ($ VSub_Name "$Alongc") ($ VSub_Name "$Alongc")
            }
          spids: [163]
        )
      ]
      spids: [163]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:Alongc)
          op: Equal
          rhs: {($ VSub_Name "$Alongc") ($ VSub_Name "$AEligatu") ($ VSub_Name "$AEligatu")}
          spids: [173]
        )
      ]
      spids: [173]
    )
    (C {(test_expect_success)} {(DQ ("detect if nfd needed"))} 
      {
        (SQ <"\n"> <"\tprecomposeunicode=$(git config core.precomposeunicode) &&\n"> 
          <"\ttest \"$precomposeunicode\" = true &&\n"> <"\tgit config core.precomposeunicode true\n">
        )
      }
    )
    (C {(test_expect_success)} {(DQ (setup))} 
      {
        (SQ <"\n"> <"\t>x &&\n"> <"\tgit add x &&\n"> <"\tgit commit -m \"1st commit\" &&\n"> 
          <"\tgit rm x &&\n"> <"\tgit commit -m \"rm x\"\n">
        )
      }
    )
    (C {(test_expect_success)} {(DQ ("setup case mac"))} {(SQ <"\n"> <"\tgit checkout -b mac_os\n">)})
    (C {(test_expect_success)} {(DQ ("git diff f.Adiar"))} 
      {
        (SQ <"\n"> <"\ttouch f.$Adiarnfc &&\n"> <"\tgit add f.$Adiarnfc &&\n"> 
          <"\techo f.Adiarnfc >f.$Adiarnfc &&\n"> <"\tgit diff f.$Adiarnfd >expect &&\n"> <"\tgit diff f.$Adiarnfc >actual &&\n"> 
          <"\ttest_cmp expect actual &&\n"> <"\tgit reset HEAD f.Adiarnfc &&\n"> <"\trm f.$Adiarnfc expect actual\n">
        )
      }
    )
    (C {(test_expect_success)} {(DQ ("git diff-files f.Adiar"))} 
      {
        (SQ <"\n"> <"\ttouch f.$Adiarnfc &&\n"> <"\tgit add f.$Adiarnfc &&\n"> 
          <"\techo f.Adiarnfc >f.$Adiarnfc &&\n"> <"\tgit diff-files f.$Adiarnfd >expect &&\n"> <"\tgit diff-files f.$Adiarnfc >actual &&\n"> 
          <"\ttest_cmp expect actual &&\n"> <"\tgit reset HEAD f.Adiarnfc &&\n"> <"\trm f.$Adiarnfc expect actual\n">
        )
      }
    )
    (C {(test_expect_success)} {(DQ ("git diff-index f.Adiar"))} 
      {
        (SQ <"\n"> <"\ttouch f.$Adiarnfc &&\n"> <"\tgit add f.$Adiarnfc &&\n"> 
          <"\techo f.Adiarnfc >f.$Adiarnfc &&\n"> <"\tgit diff-index HEAD f.$Adiarnfd >expect &&\n"> <"\tgit diff-index HEAD f.$Adiarnfc >actual &&\n"> 
          <"\ttest_cmp expect actual &&\n"> <"\tgit reset HEAD f.Adiarnfc &&\n"> <"\trm f.$Adiarnfc expect actual\n">
        )
      }
    )
    (C {(test_expect_success)} {(DQ ("add file Adiarnfc"))} 
      {
        (SQ <"\n"> <"\techo f.Adiarnfc >f.$Adiarnfc &&\n"> <"\tgit add f.$Adiarnfc &&\n"> 
          <"\tgit commit -m \"add f.$Adiarnfc\"\n">
        )
      }
    )
    (C {(test_expect_success)} {(DQ ("git diff-tree f.Adiar"))} 
      {
        (SQ <"\n"> <"\techo f.Adiarnfc >>f.$Adiarnfc &&\n"> 
          <"\tgit diff-tree HEAD f.$Adiarnfd >expect &&\n"> <"\tgit diff-tree HEAD f.$Adiarnfc >actual &&\n"> <"\ttest_cmp expect actual &&\n"> 
          <"\tgit checkout f.$Adiarnfc &&\n"> <"\trm expect actual\n">
        )
      }
    )
    (C {(test_expect_success)} {(DQ ("stage file d.Adiarnfd/f.Adiarnfd"))} 
      {
        (SQ <"\n"> <"\tmkdir d.$Adiarnfd &&\n"> 
          <"\techo d.$Adiarnfd/f.$Adiarnfd >d.$Adiarnfd/f.$Adiarnfd &&\n"> <"\tgit stage d.$Adiarnfd/f.$Adiarnfd &&\n"> <"\tgit commit -m \"add d.$Adiarnfd/f.$Adiarnfd\"\n">
        )
      }
    )
    (C {(test_expect_success)} {(DQ ("add link Adiarnfc"))} 
      {
        (SQ <"\n"> <"\tln -s d.$Adiarnfd/f.$Adiarnfd l.$Adiarnfc &&\n"> <"\tgit add l.$Adiarnfc &&\n"> 
          <"\tgit commit -m \"add l.Adiarnfc\"\n">
        )
      }
    )
    (C {(test_expect_success)} {(DQ ("git log f.Adiar"))} 
      {
        (SQ <"\n"> <"\tgit log f.$Adiarnfc > f.Adiarnfc.log &&\n"> 
          <"\tgit log f.$Adiarnfd > f.Adiarnfd.log &&\n"> <"\ttest -s f.Adiarnfc.log &&\n"> <"\ttest -s f.Adiarnfd.log &&\n"> 
          <"\ttest_cmp f.Adiarnfc.log f.Adiarnfd.log &&\n"> <"\trm f.Adiarnfc.log f.Adiarnfd.log\n">
        )
      }
    )
    (C {(test_expect_success)} {(DQ ("git lsfiles f.Adiar"))} 
      {
        (SQ <"\n"> <"\tgit ls-files f.$Adiarnfc > f.Adiarnfc.log &&\n"> 
          <"\tgit ls-files f.$Adiarnfd > f.Adiarnfd.log &&\n"> <"\ttest -s f.Adiarnfc.log &&\n"> <"\ttest -s f.Adiarnfd.log &&\n"> 
          <"\ttest_cmp f.Adiarnfc.log f.Adiarnfd.log &&\n"> <"\trm f.Adiarnfc.log f.Adiarnfd.log\n">
        )
      }
    )
    (C {(test_expect_success)} {(DQ ("git mv"))} 
      {
        (SQ <"\n"> <"\tgit mv f.$Adiarnfd f.$Odiarnfc &&\n"> <"\tgit mv d.$Adiarnfd d.$Odiarnfc &&\n"> 
          <"\tgit mv l.$Adiarnfd l.$Odiarnfc &&\n"> <"\tgit commit -m \"mv Adiarnfd Odiarnfc\"\n">
        )
      }
    )
    (C {(test_expect_success)} {(DQ ("git checkout nfc"))} 
      {(SQ <"\n"> <"\trm f.$Odiarnfc &&\n"> <"\tgit checkout f.$Odiarnfc\n">)}
    )
    (C {(test_expect_success)} {(DQ ("git checkout file nfd"))} 
      {(SQ <"\n"> <"\trm -f f.* &&\n"> <"\tgit checkout f.$Odiarnfd\n">)}
    )
    (C {(test_expect_success)} {(DQ ("git checkout link nfd"))} 
      {(SQ <"\n"> <"\trm l.* &&\n"> <"\tgit checkout l.$Odiarnfd\n">)}
    )
    (C {(test_expect_success)} {(DQ ("setup case mac2"))} 
      {
        (SQ <"\n"> <"\tgit checkout master &&\n"> <"\tgit reset --hard &&\n"> 
          <"\tgit checkout -b mac_os_2\n">
        )
      }
    )
    (C {(test_expect_success)} {(DQ ("commit file d2.Adiarnfd/f.Adiarnfd"))} 
      {
        (SQ <"\n"> <"\tmkdir d2.$Adiarnfd &&\n"> 
          <"\techo d2.$Adiarnfd/f.$Adiarnfd >d2.$Adiarnfd/f.$Adiarnfd &&\n"> <"\tgit add d2.$Adiarnfd/f.$Adiarnfd &&\n"> 
          <"\tgit commit -m \"add d2.$Adiarnfd/f.$Adiarnfd\" -- d2.$Adiarnfd/f.$Adiarnfd\n">
        )
      }
    )
    (C {(test_expect_success)} {(DQ ("setup for long decomposed filename"))} 
      {
        (SQ <"\n"> <"\tgit checkout master &&\n"> <"\tgit reset --hard &&\n"> 
          <"\tgit checkout -b mac_os_long_nfd_fn\n">
        )
      }
    )
    (C {(test_expect_success)} {(DQ ("Add long decomposed filename"))} 
      {
        (SQ <"\n"> <"\techo longd >$Alongd &&\n"> <"\tgit add * &&\n"> 
          <"\tgit commit -m \"Long filename\"\n">
        )
      }
    )
    (C {(test_expect_success)} {(DQ ("setup for long precomposed filename"))} 
      {
        (SQ <"\n"> <"\tgit checkout master &&\n"> <"\tgit reset --hard &&\n"> 
          <"\tgit checkout -b mac_os_long_nfc_fn\n">
        )
      }
    )
    (C {(test_expect_success)} {(DQ ("Add long precomposed filename"))} 
      {
        (SQ <"\n"> <"\techo longc >$Alongc &&\n"> <"\tgit add * &&\n"> 
          <"\tgit commit -m \"Long filename\"\n">
        )
      }
    )
    (C {(test_expect_failure)} {(SQ <"handle existing decomposed filenames">)} 
      {
        (SQ <"\n"> <"\techo content >\"verbatim.$Adiarnfd\" &&\n"> 
          <"\tgit -c core.precomposeunicode=false add \"verbatim.$Adiarnfd\" &&\n"> <"\tgit commit -m \"existing decomposed file\" &&\n"> <"\t>expect &&\n"> 
          <"\tgit ls-files --exclude-standard -o \"verbatim*\" >untracked &&\n"> <"\ttest_cmp expect untracked\n">
        )
      }
    )
    (C {(test_expect_success)} {(DQ ("respect git config --global core.precomposeunicode"))} 
      {
        (SQ <"\n"> <"\tgit config --global core.precomposeunicode true &&\n"> <"\trm -rf .git &&\n"> 
          <"\tgit init &&\n"> <"\tprecomposeunicode=$(git config core.precomposeunicode) &&\n"> 
          <"\ttest \"$precomposeunicode\" = \"true\"\n">
        )
      }
    )
    (C {(test_done)})
  ]
)