(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: 'update-index and add refuse to add beyond symlinks'
                  span_id: 6
                )
              )
            }
          spids: [4]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} {(SYMLINKS)} {(setup)} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:22) 
          (Token id:Id.Lit_Chars val:'\t>a &&\n' span_id:23) (Token id:Id.Lit_Chars val:'\tmkdir b &&\n' span_id:24) 
          (Token id:Id.Lit_Chars val:'\tln -s b c &&\n' span_id:25) (Token id:Id.Lit_Chars val:'\t>c/d &&\n' span_id:26) 
          (Token id:Id.Lit_Chars val:'\tgit update-index --add a b/d\n' span_id:27)
        )
      }
    )
    (C {(test_expect_success)} {(SYMLINKS)} 
      {(SQ (Token id:Id.Lit_Chars val:'update-index --add beyond symlinks' span_id:36))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:40) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git update-index --add c/d &&\n'
            span_id: 41
          ) (Token id:Id.Lit_Chars val:'\t! ( git ls-files | grep c/d )\n' span_id:42)
        )
      }
    )
    (C {(test_expect_success)} {(SYMLINKS)} 
      {(SQ (Token id:Id.Lit_Chars val:'add beyond symlinks' span_id:51))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:55) 
          (Token id:Id.Lit_Chars val:'\ttest_must_fail git add c/d &&\n' span_id:56) (Token id:Id.Lit_Chars val:'\t! ( git ls-files | grep c/d )\n' span_id:57)
        )
      }
    )
    (C {(test_done)})
  ]
)