@Test
  public void testKsessionExistsModifyRemovedAddedWithOverlappingNames() {
    KProject kproj = new KProjectImpl();

    KProjectChangeLog dirtyLog = new KProjectChangeLog();
    kproj.setListener(dirtyLog);

    KBase kbase1 = kproj.newKBase("org.test1", "KBase1");

    KSession kSession1 = kbase1.newKSession("org.test1", "KSession1");

    KSession kSession2 = kbase1.newKSession("org.test1", "KSession2");

    dirtyLog.reset();

    kSession1.setNamespace("org.test2");

    kSession2.setName("KSession1");

    assertEquals(1, dirtyLog.getRemovedKSessions().size());
    assertEquals(2, dirtyLog.getAddedKSessions().size());

    assertTrue(dirtyLog.getRemovedKSessions().contains("org.test1.KSession2"));
    assertTrue(dirtyLog.getAddedKSessions().contains("org.test2.KSession1"));
    assertTrue(dirtyLog.getAddedKSessions().contains("org.test1.KSession1"));

    kbase1.removeKSession(kSession1.getQName());
    assertEquals(2, dirtyLog.getRemovedKSessions().size());
    assertEquals(1, dirtyLog.getAddedKSessions().size());

    assertTrue(dirtyLog.getRemovedKSessions().contains("org.test1.KSession2"));
    assertTrue(dirtyLog.getRemovedKSessions().contains("org.test2.KSession1"));
    assertTrue(dirtyLog.getAddedKSessions().contains("org.test1.KSession1"));

    kbase1.removeKSession(kSession2.getQName());
    assertEquals(3, dirtyLog.getRemovedKSessions().size());
    assertEquals(0, dirtyLog.getAddedKSessions().size());

    assertTrue(dirtyLog.getRemovedKSessions().contains("org.test1.KSession2"));
    assertTrue(dirtyLog.getRemovedKSessions().contains("org.test2.KSession1"));
    assertTrue(dirtyLog.getRemovedKSessions().contains("org.test1.KSession1"));

    kbase1.newKSession(kSession1.getNamespace(), kSession1.getName());
    assertEquals(2, dirtyLog.getRemovedKSessions().size());
    assertEquals(1, dirtyLog.getAddedKSessions().size());

    assertTrue(dirtyLog.getRemovedKSessions().contains("org.test1.KSession2"));
    assertTrue(dirtyLog.getRemovedKSessions().contains("org.test1.KSession1"));
    assertTrue(dirtyLog.getAddedKSessions().contains("org.test2.KSession1"));

    kbase1.newKSession(kSession2.getNamespace(), kSession2.getName());
    assertEquals(1, dirtyLog.getRemovedKSessions().size());
    assertEquals(2, dirtyLog.getAddedKSessions().size());

    assertTrue(dirtyLog.getRemovedKSessions().contains("org.test1.KSession2"));
    assertTrue(dirtyLog.getAddedKSessions().contains("org.test1.KSession1"));
    assertTrue(dirtyLog.getAddedKSessions().contains("org.test2.KSession1"));
  }
  @Test
  public void testKSessionExistsRemovedAdded() {
    KProject kproj = new KProjectImpl();

    KProjectChangeLog dirtyLog = new KProjectChangeLog();
    kproj.setListener(dirtyLog);

    KBase kbase1 = kproj.newKBase("org.test1", "KBase1");

    KSession kSession = kbase1.newKSession("org.domain", "KSession1");

    dirtyLog.reset();

    kbase1.removeKSession(kSession.getQName());
    assertTrue(dirtyLog.getRemovedKSessions().contains("org.domain.KSession1"));

    kbase1.newKSession(kSession.getNamespace(), kSession.getName());

    assertEquals(0, dirtyLog.getRemovedKSessions().size());
    assertTrue(dirtyLog.getAddedKSessions().contains("org.domain.KSession1"));
  }