public void testPropagatesDeeply() {
    PainterRegistryImpl r1 = new PainterRegistryImpl("a", "b", new AnnotationPainter(null));
    PainterRegistryImpl r2 = (PainterRegistryImpl) r1.createExtension();
    PainterRegistryImpl r3 = (PainterRegistryImpl) r2.createExtension();

    r1.registerBoundaryFunction(CollectionUtils.newStringSet("a"), b1);
    assertTrue(r3.getBoundaryFunctions().contains(b1));

    r1.registerPaintFunction(CollectionUtils.newStringSet("b"), p1);
    assertTrue(r3.getPaintFunctions().contains(p1));
  }
  public void testInitialState() {
    PainterRegistryImpl r = new PainterRegistryImpl("a", "b", new AnnotationPainter(null));

    PainterRegistryImpl r2 = (PainterRegistryImpl) r.createExtension();
    r2.registerPaintFunction(CollectionUtils.newStringSet("b"), p2);
    assertTrue(r2.getPaintFunctions().contains(p2));
    assertTrue(r2.getKeys().contains("b"));

    r2.registerPaintFunction(CollectionUtils.newStringSet("d"), p4);
    assertTrue(r2.getPaintFunctions().contains(p4));
    assertTrue(r2.getKeys().contains("d"));
    r2.registerBoundaryFunction(CollectionUtils.newStringSet("e"), b1);
    assertTrue(r2.getBoundaryFunctions().contains(b1));
    assertTrue(r2.getKeys().contains("e"));
  }