@Test
  public void testInjectWildCard() {
    IEclipseContext context = EclipseContextFactory.create();
    final Display d = Display.getDefault();

    context.set(Realm.class, DisplayRealm.getRealm(d));
    context.set(
        UISynchronize.class,
        new UISynchronize() {

          @Override
          public void syncExec(Runnable runnable) {
            d.syncExec(runnable);
          }

          @Override
          public void asyncExec(Runnable runnable) {
            d.asyncExec(runnable);
          }
        });

    InjectStarEvent target = ContextInjectionFactory.make(InjectStarEvent.class, context);

    // initial state
    assertEquals(0, target.counter1);
    assertNull(target.data);

    // send event
    helper.sendEvent("e4/test/eventInjection", "sample");

    assertEquals(1, target.counter1);
    assertEquals("sample", target.data);
  }
 private void wrapSetup() {
   IEclipseContext context = EclipseContextFactory.create();
   InjectTarget target = ContextInjectionFactory.make(InjectTarget.class, context);
   // send event
   helper.sendEvent("e4/test/event1", "event1data");
   assertEquals(1, target.counter1);
   assertEquals("event1data", target.string1);
   target.valid = false;
 }
  // NOTE: this test relies on GC being actually done on the test object.
  // Java does not guarantee that to happen, so, if this test starts to fail
  // intermittently, feel free to comment it
  @Test
  public void testEventInjectionUnsubscribe() {
    IInjector injector = InjectorFactory.getDefault();
    injector.addBinding(MyBinding.class);

    wrapSetup(); // do it in a separate method to ease GC
    System.gc();
    System.runFinalization();
    System.gc();
    helper.sendEvent("e4/test/event1", "wrong");
    assertFalse(testFailed); // target would have asserted if it is still
    // subscribed
  }
  @Test
  public void testEventInjection() {
    IInjector injector = InjectorFactory.getDefault();
    injector.addBinding(MyBinding.class);

    IEclipseContext context = EclipseContextFactory.create();
    final Display d = Display.getDefault();

    context.set(Realm.class, DisplayRealm.getRealm(d));
    context.set(
        UISynchronize.class,
        new UISynchronize() {

          @Override
          public void syncExec(Runnable runnable) {
            d.syncExec(runnable);
          }

          @Override
          public void asyncExec(Runnable runnable) {
            d.asyncExec(runnable);
          }
        });
    ContextInjectionFactory.setDefault(context);
    InjectTarget target = ContextInjectionFactory.make(InjectTarget.class, context);

    // initial state
    assertEquals(0, target.counter1);
    assertNull(target.string1);
    assertEquals(0, target.counter2);
    assertNull(target.string2);
    assertEquals(1, target.counter3);
    assertNull(target.string3);
    assertNotNull(target.myBinding);

    // send event1
    helper.sendEvent("e4/test/event1", "event1data");

    assertEquals(1, target.counter1);
    assertEquals("event1data", target.string1);
    assertEquals(0, target.counter2);
    assertNull(target.string2);
    assertEquals(1, target.counter3);
    assertNull(target.string3);
    assertNotNull(target.myBinding);

    // send event2
    helper.sendEvent("e4/test/event2", "event2data");

    assertEquals(1, target.counter1);
    assertEquals("event1data", target.string1);
    assertEquals(1, target.counter2);
    assertEquals("event2data", target.string2);
    assertEquals(1, target.counter3);
    assertNull(target.string3);
    assertNotNull(target.myBinding);

    // send event3
    helper.sendEvent("e4/test/event3", "event3data");

    assertEquals(1, target.counter1);
    assertEquals("event1data", target.string1);
    assertEquals(1, target.counter2);
    assertEquals("event2data", target.string2);
    assertEquals(2, target.counter3);
    assertEquals("event3data", target.string3);
    assertNotNull(target.myBinding);

    // send event1 again
    helper.sendEvent("e4/test/event1", "abc");

    assertEquals(2, target.counter1);
    assertEquals("abc", target.string1);
    assertEquals(1, target.counter2);
    assertEquals("event2data", target.string2);
    assertEquals(2, target.counter3);
    assertEquals("event3data", target.string3);
    assertNotNull(target.myBinding);
  }