(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:'Various filesystem issues' span_id:6))}
          spids: [4]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:auml)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:16)
                command_list: 
                  (command.CommandList
                    children: [(C {(printf)} {(SQ (Token id:Id.Lit_Chars val:'\\303\\244' span_id:20))})]
                  )
              )
            }
          spids: [15]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:aumlcdiar)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:25)
                command_list: 
                  (command.CommandList
                    children: [
                      (C {(printf)} {(SQ (Token id:Id.Lit_Chars val:'\\141\\314\\210' span_id:29))})
                    ]
                  )
              )
            }
          spids: [24]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [(C {(test_have_prereq)} {(CASE_INSENSITIVE_FS)})]
          action: [
            (C {(say)} {(DQ ('will test on a case insensitive filesystem'))})
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:test_case)
                  op: assign_op.Equal
                  rhs: {(test_expect_failure)}
                  spids: [50]
                )
              ]
            )
          ]
          spids: [34 40]
        )
      ]
      else_action: [
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:test_case)
              op: assign_op.Equal
              rhs: {(test_expect_success)}
              spids: [56]
            )
          ]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [(C {(test_have_prereq)} {(UTF8_NFD_TO_NFC)})]
          action: [
            (C {(say)} {(DQ ('will test on a unicode corrupting filesystem'))})
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:test_unicode)
                  op: assign_op.Equal
                  rhs: {(test_expect_failure)}
                  spids: [78]
                )
              ]
            )
          ]
          spids: [62 68]
        )
      ]
      else_action: [
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:test_unicode)
              op: assign_op.Equal
              rhs: {(test_expect_success)}
              spids: [84]
            )
          ]
        )
      ]
    )
    (command.AndOr
      ops: [Id.Op_DPipe]
      children: [
        (C {(test_have_prereq)} {(SYMLINKS)})
        (C {(say)} {(DQ ('will test on a filesystem lacking symbolic links'))})
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [(C {(test_have_prereq)} {(CASE_INSENSITIVE_FS)})]
          action: [
            (C {(test_expect_success)} 
              {(DQ ('detection of case insensitive filesystem during repo init'))} 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:119) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\ttest $(git config --bool core.ignorecase) = true\n'
                    span_id: 120
                  )
                )
              }
            )
          ]
          spids: [104 110]
        )
      ]
      else_action: [
        (C {(test_expect_success)} {(DQ ('detection of case insensitive filesystem during repo init'))} 
          {
            (SQ (Token id:Id.Lit_Chars val:'\n' span_id:132) 
              (Token id:Id.Lit_Chars val:'\t{\n' span_id:133) 
              (Token
                id: Id.Lit_Chars
                val: '\t\ttest_must_fail git config --bool core.ignorecase >/dev/null ||\n'
                span_id: 134
              ) (Token id:Id.Lit_Chars val:'\t\t\ttest $(git config --bool core.ignorecase) = false\n' span_id:135) 
              (Token id:Id.Lit_Chars val:'\t}\n' span_id:136)
            )
          }
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [(C {(test_have_prereq)} {(SYMLINKS)})]
          action: [
            (C {(test_expect_success)} 
              {(DQ ('detection of filesystem w/o symlink support during repo init'))} 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:157) 
                  (Token id:Id.Lit_Chars val:'\t{\n' span_id:158) (Token id:Id.Lit_Chars val:'\t\ttest_must_fail git config --bool core.symlinks ||\n' span_id:159) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\ttest "$(git config --bool core.symlinks)" = true\n'
                    span_id: 160
                  ) (Token id:Id.Lit_Chars val:'\t}\n' span_id:161)
                )
              }
            )
          ]
          spids: [142 148]
        )
      ]
      else_action: [
        (C {(test_expect_success)} 
          {(DQ ('detection of filesystem w/o symlink support during repo init'))} 
          {
            (SQ (Token id:Id.Lit_Chars val:'\n' span_id:173) 
              (Token
                id: Id.Lit_Chars
                val: '\tv=$(git config --bool core.symlinks) &&\n'
                span_id: 174
              ) (Token id:Id.Lit_Chars val:'\ttest "$v" = false\n' span_id:175)
            )
          }
        )
      ]
    )
    (C {(test_expect_success)} {(DQ ('setup case tests'))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:188) 
          (Token id:Id.Lit_Chars val:'\tgit config core.ignorecase true &&\n' span_id:189) (Token id:Id.Lit_Chars val:'\ttouch camelcase &&\n' span_id:190) 
          (Token id:Id.Lit_Chars val:'\tgit add camelcase &&\n' span_id:191) (Token id:Id.Lit_Chars val:'\tgit commit -m "initial" &&\n' span_id:192) 
          (Token id:Id.Lit_Chars val:'\tgit tag initial &&\n' span_id:193) (Token id:Id.Lit_Chars val:'\tgit checkout -b topic &&\n' span_id:194) 
          (Token id:Id.Lit_Chars val:'\tgit mv camelcase tmp &&\n' span_id:195) (Token id:Id.Lit_Chars val:'\tgit mv tmp CamelCase &&\n' span_id:196) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m "rename" &&\n' span_id:197) (Token id:Id.Lit_Chars val:'\tgit checkout -f master\n' span_id:198)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'rename (case change)' span_id:205))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:209) 
          (Token id:Id.Lit_Chars val:'\tgit mv camelcase CamelCase &&\n' span_id:210) (Token id:Id.Lit_Chars val:'\tgit commit -m "rename"\n' span_id:211)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'merge (case change)' span_id:218))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:222) 
          (Token id:Id.Lit_Chars val:'\trm -f CamelCase &&\n' span_id:223) (Token id:Id.Lit_Chars val:'\trm -f camelcase &&\n' span_id:224) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard initial &&\n' span_id:225) (Token id:Id.Lit_Chars val:'\tgit merge topic\n' span_id:226)
        )
      }
    )
    (C {(test_expect_failure)} {(CASE_INSENSITIVE_FS)} 
      {(SQ (Token id:Id.Lit_Chars val:'add (with different case)' span_id:237))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:241) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard initial &&\n' span_id:242) (Token id:Id.Lit_Chars val:'\trm camelcase &&\n' span_id:243) 
          (Token id:Id.Lit_Chars val:'\techo 1 >CamelCase &&\n' span_id:244) (Token id:Id.Lit_Chars val:'\tgit add CamelCase &&\n' span_id:245) 
          (Token
            id: Id.Lit_Chars
            val: '\tcamel=$(git ls-files | grep -i camelcase) &&\n'
            span_id: 246
          ) (Token id:Id.Lit_Chars val:'\ttest $(echo "$camel" | wc -l) = 1 &&\n' span_id:247) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest "z$(git cat-file blob :$camel)" = z1\n'
            span_id: 248
          )
        )
      }
    )
    (C {(test_expect_success)} {(DQ ('setup unicode normalization tests'))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:259) 
          (Token id:Id.Lit_Chars val:'\ttest_create_repo unicode &&\n' span_id:260) (Token id:Id.Lit_Chars val:'\tcd unicode &&\n' span_id:261) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit config core.precomposeunicode false &&\n'
            span_id: 262
          ) (Token id:Id.Lit_Chars val:'\ttouch "$aumlcdiar" &&\n' span_id:263) 
          (Token id:Id.Lit_Chars val:'\tgit add "$aumlcdiar" &&\n' span_id:264) (Token id:Id.Lit_Chars val:'\tgit commit -m initial &&\n' span_id:265) 
          (Token id:Id.Lit_Chars val:'\tgit tag initial &&\n' span_id:266) (Token id:Id.Lit_Chars val:'\tgit checkout -b topic &&\n' span_id:267) 
          (Token id:Id.Lit_Chars val:'\tgit mv $aumlcdiar tmp &&\n' span_id:268) (Token id:Id.Lit_Chars val:'\tgit mv tmp "$auml" &&\n' span_id:269) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m rename &&\n' span_id:270) (Token id:Id.Lit_Chars val:'\tgit checkout -f master\n' span_id:271)
        )
      }
    )
    (C {($ Id.VSub_DollarName '$test_unicode')} 
      {(SQ (Token id:Id.Lit_Chars val:'rename (silent unicode normalization)' span_id:278))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:282) 
          (Token id:Id.Lit_Chars val:'\tgit mv "$aumlcdiar" "$auml" &&\n' span_id:283) (Token id:Id.Lit_Chars val:'\tgit commit -m rename\n' span_id:284)
        )
      }
    )
    (C {($ Id.VSub_DollarName '$test_unicode')} 
      {(SQ (Token id:Id.Lit_Chars val:'merge (silent unicode normalization)' span_id:291))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:295) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard initial &&\n' span_id:296) (Token id:Id.Lit_Chars val:'\tgit merge topic\n' span_id:297)
        )
      }
    )
    (C {(test_done)})
  ]
)