anchor.diff:    }
   
   
  +  /**
  +   * Triggers a digest operation much like [$digest] does, however, also accepts an
  +   * optional expression to evaluate alongside the digest operation. The result of that
  +   * expression will be returned afterwards. Much like with $digest, $apply should only be
  +   * used within unit tests to simulate the life cycle of a scope. See [$digest] to learn
  +   * more.
  +   *
  +   * * [expr] - optional expression which will be evaluated after the digest is performed. See [$eval]
  +   *   to learn more about expressions.
  +   */
     $apply([expr]) {
       return _zone.run(() {
         var timerId;
  
positive.code:   }
  
  
    $destroy() {
      if ($root == this) return; // we can't remove the root node;
  
  
negative.code:   }
  
  
    /**
     * Registers a scope-based event listener to intercept events triggered by
     * [$broadcast] (from any parent scopes) or [$emit] (from child scopes) that
     * match the given event name. $on accepts two arguments:
     * 
     * * [name] - Refers to the event name that the scope will listen on. 
     * * [listener] - Refers to the callback function which is executed when the event
     *   is intercepted.
     *
     *
     * When the listener function is executed, an instance of [ScopeEvent] will be passed
     * as the first parameter to the function.
     *
     * Any additional parameters available within the listener callback function are those that
     * are set by the $broadcast or $emit scope methods (which are set by the origin scope which
     * is the scope that first triggered the scope event).
     */
    $on(name, listener) {
      var namedListeners = _listeners[name];
      if (!_listeners.containsKey(name)) {
  