@Test
 public void testInterfacesWithClassPointcut() {
   pico.addComponent(Dao.class, DaoImpl.class);
   pico.registerMixin(cuts.instancesOf(Dao.class), IdentifiableMixin.class);
   pico.registerInterfaces(cuts.instancesOf(Dao.class), new Class[] {AnotherInterface.class});
   Dao dao = pico.getComponent(Dao.class);
   assertTrue(dao instanceof Identifiable);
   assertTrue(dao instanceof AnotherInterface);
 }
 @Test
 public void testMixin() {
   pico.registerMixin(cuts.instancesOf(Dao.class), IdentifiableMixin.class);
   pico.addComponent(Dao.class, DaoImpl.class);
   Dao dao = pico.getComponent(Dao.class);
   verifyMixin(dao);
   assertTrue(dao instanceof AnotherInterface);
 }
 @Test
 public void testInterceptor() {
   StringBuffer log = new StringBuffer();
   pico.registerInterceptor(
       cuts.instancesOf(Dao.class), cuts.allMethods(), new LoggingInterceptor(log));
   pico.addComponent(Dao.class, DaoImpl.class);
   Dao dao = pico.getComponent(Dao.class);
   verifyIntercepted(dao, log);
 }
 @Test
 public void testMixinExplicitInterfaces() {
   pico.registerMixin(
       cuts.instancesOf(Dao.class), new Class[] {Identifiable.class}, IdentifiableMixin.class);
   pico.addComponent(Dao.class, DaoImpl.class);
   Dao dao = pico.getComponent(Dao.class);
   verifyMixin(dao);
   assertFalse(dao instanceof AnotherInterface);
 }
  @Test
  public void testInterfacesWithClassPointcutNoAdviceStillSetsUp() {
    pico.addComponent(Dao.class, DaoImpl.class);
    pico.registerInterfaces(cuts.instancesOf(Dao.class), new Class[] {AnotherInterface.class});
    Dao dao = pico.getComponent(Dao.class);

    // dynaop doesn't add any interfaces if there's no advice applied to the
    // object:
    assertFalse(dao instanceof Identifiable);
    assertTrue(dao instanceof AnotherInterface);
  }
  @Test
  public void testContainerSuppliedInterceptor() {
    pico.registerInterceptor(
        cuts.instancesOf(Dao.class), cuts.allMethods(), LoggingInterceptor.class);

    pico.addComponent("log", StringBuffer.class);
    pico.addComponent(LoggingInterceptor.class);
    pico.addComponent(Dao.class, DaoImpl.class);

    Dao dao = pico.getComponent(Dao.class);
    StringBuffer log = (StringBuffer) pico.getComponent("log");
    verifyIntercepted(dao, log);
  }
  @Test
  public void testContainerSuppliedMixin() {
    pico.addComponent(IdGenerator.class, IdGeneratorImpl.class);
    pico.addComponent("order1", OrderEntityImpl.class);
    pico.addComponent("order2", OrderEntityImpl.class);
    pico.registerMixin(
        cuts.instancesOf(OrderEntity.class),
        new Class[] {Identifiable.class},
        IdentifiableMixin.class);

    Identifiable i1 = (Identifiable) pico.getComponent("order1");
    Identifiable i2 = (Identifiable) pico.getComponent("order2");

    assertEquals(1, i1.getId());
    assertEquals(2, i2.getId());

    i1.setId(3);
    assertEquals(3, i1.getId());
    assertEquals(2, i2.getId());
  }