anchor.diff:        test('fires a layerremove event if the map is ready', () {
           var layer = new TestLayer();
           map.onLayerRemove.listen((_) {
  -          called = true;
  -        });
  -        map.setView(new LatLng(0, 0), 0);
  -        map.addLayer(layer);
  -        map.removeLayer(layer);
  -        expect(called, isTrue);
  +//          called = true;
  +          comp1.complete(true);
  +        });
  +        map.setView(new LatLng(0, 0), 0);
  +        map.addLayer(layer);
  +        map.removeLayer(layer);
  +        expect(comp1.future, completion(isTrue));
         });
   
         test('does not fire a layerremove if the layer was not added', () {
           var layer = new TestLayer();
           map.onLayerRemove.listen((_) {
  -          called = true;
  -        });
  -        map.setView(new LatLng(0, 0), 0);
  -        map.removeLayer(layer);
  -        expect(called, isFalse);
  +//          called = true;
  +          comp1.complete(true);
  +        });
  +        map.setView(new LatLng(0, 0), 0);
  +        map.removeLayer(layer);
  +        expect(comp1.future, completion(isFalse));
  +        new Future.delayed(new Duration(milliseconds: 33), c1);
         });
   
         test('does not fire a layerremove if the map is not ready', () {
           var layer = new TestLayer();
           map.onLayerRemove.listen((_) {
  -          called = true;
  -        });
  -        map.addLayer(layer);
  -        map.removeLayer(layer);
  -        expect(called, isFalse);
  +//          called = true;
  +          comp1.complete(true);
  +        });
  +        map.addLayer(layer);
  +        map.removeLayer(layer);
  +//        expect(called, isFalse);
  +        expect(comp1.future, completion(isFalse));
  +        new Future.delayed(new Duration(milliseconds: 33), c1);
         });
   
         test('removes the layer before firing layerremove', (/*done*/) {
           var layer = new TestLayer();
           map.onLayerRemove.listen((_) {
  -          expect(map.hasLayer(layer), isFalse);
  +          //expect(map.hasLayer(layer), isFalse);
   //          done();
  -        });
  -        map.setView(new LatLng(0, 0), 0);
  -        map.addLayer(layer);
  -        map.removeLayer(layer);
  +          comp1.complete(map.hasLayer(layer));
  +        });
  +        map.setView(new LatLng(0, 0), 0);
  +        map.addLayer(layer);
  +        map.removeLayer(layer);
  +        expect(comp1.future, completion(isFalse));
         });
   
         group('when the last tile layer on a map is removed', () {
  
positive.code:             ..minZoom = 0
              ..maxZoom = 10).addTo(map);
            map.onZoomLevelsChange.listen((_) {
              called = true;
            });
            expect(called, isFalse);
            new TileLayer('{z}{x}{y}', new TileLayerOptions()
              ..minZoom = 0
              ..maxZoom = 15).addTo(map);
            expect(called, isTrue);
          });
        });
  
        group('when a new layer with the same or lower zoomlevel coverage as the current layer is added to a map', () {
          test('fires no zoomlevelschange event', () {
            new TileLayer('{z}{x}{y}', new TileLayerOptions()
              ..minZoom = 0
  
negative.code:             map.onZoomLevelsChange.listen((_) {
                called = true;
              });
              expect(comp1.future, completion(isFalse));
              new Future.delayed(new Duration(milliseconds: 33), c1).then((_) {
                map.removeLayer(t2);
                expect(comp2.future, completion(isTrue));
                new Future.delayed(new Duration(milliseconds: 33), c2);
              });
            });
          });
        });
  
        /*group('when a tile layer is removed from a map it and it had lesser or the sa,e zoom level coverage as the remainding layer(s)', () {
          test('fires no zoomlevelschange event', () {
            map.whenReady((_) {
              final tl = new TileLayer('{z}{x}{y}', new TileLayerOptions()
  