anchor.diff:  
       WindowClickHandler linkHandler;
       MockRouter router;
  -    Element toRemove;
  +    MockWindow mockWindow;
  +    Element root;
  +    StreamController onHashChangeController;
   
       setUp(() {
         router = new MockRouter();
  -      linkHandler = new DefaultWindowClickHandler(new DefaultRouterLinkMatcher(), router, true, window,
  +      mockWindow = new MockWindow();
  +      mockWindow.location.when(callsTo('get host'))
  +          .alwaysReturn(window.location.host);
  +      mockWindow.location.when(callsTo('get hash')).alwaysReturn('');
  +      onHashChangeController = new StreamController();
  +      mockWindow.when(callsTo('get onHashChange'))
  +          .alwaysReturn(onHashChangeController.stream);
  +      root = new DivElement();
  +      document.body.append(root);
  +      linkHandler = new DefaultWindowClickHandler(new DefaultRouterLinkMatcher(), router, true, mockWindow,
             (String hash) => hash.isEmpty ? '' : hash.substring(1));
       });
   
       tearDown(() {
  -      if (toRemove != null) {
  -        toRemove.remove();
  -        toRemove = null;
  -      }
  +      root.remove();
       });
   
       MouseEvent _createMockMouseEvent({String anchorTarget, String anchorHref}) {
  
positive.code: library route.link_matcher_test;
  
  import 'dart:html';
  import 'package:unittest/unittest.dart';
  import 'package:mock/mock.dart';
  import 'package:route_hierarchical/click_handler.dart';
  
negative.code:       return mockMouseEvent;
      }
  
      test('should process AnchorElements which have target set', () {
        MockMouseEvent mockMouseEvent = _createMockMouseEvent(anchorHref: '#test');
        linkHandler(mockMouseEvent);
        LogEntryList logEntries = router.getLogs(callsTo('gotoUrl'));
  