public void testValueChangeFireEvent() throws Exception {
    pref.put("key0", "value10");
    pref.addPreferenceChangeListener(new PrefListener());
    pref.sync();
    assertEquals("value10", pref.get("key0", null));
    overrideStorageEntryWithNewData("key0=value0");

    assertEquals("value0", pref.get("key0", null));
    prefChangedEvent.await();
    assertEquals(
        "No preference changed event was fired for value change", 0, prefChangedEvent.getCount());
  }
  public void testKeyRemovalFireEvent() throws Exception {
    pref.put("key", "value");
    pref.put("key0", "value10");
    pref.put("key1", "value11");

    pref.addPreferenceChangeListener(new PrefListener());
    pref.sync();
    assertEquals("value10", pref.get("key0", null));
    deleteStorageEntry("key0=value10");

    assertEquals(null, pref.get("key0", null));
    prefRemovedEvent.await();
    assertEquals(
        "No preference changed event was fired for key removal", 0, prefRemovedEvent.getCount());
  }
  public void testNodeIsReloadedAfterChange() throws Exception {
    String key = "key";
    String value = "oldValue";
    String newValue = "newValue";
    storeEntry(key, value);
    overrideStorageEntryWithNewValue(value, newValue);

    String reloadedValue = pref.get(key, null);

    assertNotNull("Reloaded value must not be null", reloadedValue);
    assertEquals("Reloaded value must equals to manually stored value", newValue, reloadedValue);
    /*
     Still need to cope with a memory leak

    WeakReference weakPref = new WeakReference(pref);
    storage = null;
    pref = null;
    assertGC("NbPreferences is not GC", weakPref);
    */

  }