def METHOD_NAME(self):
    e = emitter.Emitter()
    # Holes have scope.  They remember the bindings of the template application
    # in which they are created.  Create two holes which inherit bindings for C
    # and D.
    (a, b) = e.Emit('[$!A][$!B]$C$D$E', C='1', D='2')
    e.Emit('  $A$B$C$D')  # Bindings are local to the Emit
    self.check(e, '[][]12$E  $A$B$C$D')
    # Holes are not bound within holes.  That would too easily lead to infinite
    # expansions.
    a.Emit('$A$C$D')  # $A12
    b.Emit('$D$C$B')  # 21$B
    self.check(e, '[$A12][21$B]12$E  $A$B$C$D')
    # EmitRaw avoids interpolation.
    a.EmitRaw('$C$D')
    b.EmitRaw('$D$C')
    self.check(e, '[$A12$C$D][21$B$D$C]12$E  $A$B$C$D')