(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:'git update-index --assume-unchanged test.\n' span_id:6))}
          spids: [4]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:setup span_id:18))} 
      {
        (SQ (Token id:Id.Lit_Chars val:': >file &&\n' span_id:24) 
          (Token id:Id.Lit_Chars val:'\t git add file &&\n' span_id:25) (Token id:Id.Lit_Chars val:'\t git commit -m initial &&\n' span_id:26) 
          (Token id:Id.Lit_Chars val:'\t git branch other &&\n' span_id:27) (Token id:Id.Lit_Chars val:'\t echo upstream >file &&\n' span_id:28) 
          (Token id:Id.Lit_Chars val:'\t git add file &&\n' span_id:29) (Token id:Id.Lit_Chars val:'\t git commit -m upstream' span_id:30)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'do not switch branches with dirty file' span_id:37))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'git reset --hard &&\n' span_id:43) 
          (Token id:Id.Lit_Chars val:'\t git checkout other &&\n' span_id:44) (Token id:Id.Lit_Chars val:'\t echo dirt >file &&\n' span_id:45) 
          (Token
            id: Id.Lit_Chars
            val: '\t git update-index --assume-unchanged file &&\n'
            span_id: 46
          ) (Token id:Id.Lit_Chars val:'\t test_must_fail git checkout master' span_id:47)
        )
      }
    )
    (C {(test_done)})
  ]
)