ModRuntimeTest1 pc = new ModRuntimeTest1();
OpenJPAEntityManager pm = getPM(false, false);
startTx(pm);
pm.persist(pc);
OpenJPAStateManager sm = getStateManager(pc, pm);
setUpMetaData(sm.getMetaData());
try {
// test instance level
Object inst = new Object();
assertNull(sm.getImplData());
assertNull(sm.setImplData(inst, true));
assertEquals(inst, sm.getImplData());
assertTrue(sm.isImplDataCacheable());
assertEquals(inst, sm.setImplData(null, false));
assertNull(sm.getImplData());
assertFalse(sm.isImplDataCacheable());
sm.setImplData(inst, false);
assertFalse(sm.isImplDataCacheable());
// test field level
Object f1 = new Object();
Object f3 = new Object();
assertNull(sm.getImplData(1));
assertFalse(sm.isImplDataCacheable(1));
assertNull(sm.setImplData(1, f1));
assertEquals(f1, sm.getImplData(1));
assertTrue(!sm.isImplDataCacheable(1));
assertEquals(f1, sm.setImplData(1, null));
assertNull(sm.getImplData(1));
assertFalse(sm.isImplDataCacheable(1));
sm.setImplData(1, f1);
assertNull(sm.setImplData(3, f3));
assertEquals(f3, sm.getImplData(3));
assertTrue(sm.isImplDataCacheable(3));
assertEquals(f1, sm.getImplData(1));
// this should clear field data
endTx(pm);
assertEquals(inst, sm.getImplData());
assertNull(sm.getImplData(1));
assertNull(sm.getImplData(3));
endEm(pm);
} finally {
tearDownMetaData();
}