public void testHelperMethods() throws Exception { keyedObjectPoolMock.returnObject(DirContextType.READ_ONLY, contextMock); keyedObjectPoolControl.setVoidCallable(1); replay(); // Wrap the Context once final DelegatingContext delegatingContext = new DelegatingContext(keyedObjectPoolMock, contextMock, DirContextType.READ_ONLY); final Context delegateContext = delegatingContext.getDelegateContext(); assertEquals(contextMock, delegateContext); final Context innerDelegateContext = delegatingContext.getInnermostDelegateContext(); assertEquals(contextMock, innerDelegateContext); delegatingContext.assertOpen(); // Wrap the wrapper MockControl secondKeyedObjectPoolControl = MockControl.createControl(KeyedObjectPool.class); KeyedObjectPool secondKeyedObjectPoolMock = (KeyedObjectPool) secondKeyedObjectPoolControl.getMock(); secondKeyedObjectPoolMock.returnObject(DirContextType.READ_ONLY, delegatingContext); secondKeyedObjectPoolControl.setVoidCallable(1); secondKeyedObjectPoolControl.replay(); final DelegatingContext delegatingContext2 = new DelegatingContext( secondKeyedObjectPoolMock, delegatingContext, DirContextType.READ_ONLY); final Context delegateContext2 = delegatingContext2.getDelegateContext(); assertEquals(delegatingContext, delegateContext2); final Context innerDelegateContext2 = delegatingContext2.getInnermostDelegateContext(); assertEquals(contextMock, innerDelegateContext2); delegatingContext2.assertOpen(); // Close the outer wrapper delegatingContext2.close(); final Context delegateContext2closed = delegatingContext2.getDelegateContext(); assertNull(delegateContext2closed); final Context innerDelegateContext2closed = delegatingContext2.getInnermostDelegateContext(); assertNull(innerDelegateContext2closed); try { delegatingContext2.assertOpen(); fail("delegatingContext2.assertOpen() should have thrown a NamingException"); } catch (NamingException ne) { // Expected } // Close the outer wrapper delegatingContext.close(); final Context delegateContextclosed = delegatingContext.getDelegateContext(); assertNull(delegateContextclosed); final Context innerDelegateContextclosed = delegatingContext.getInnermostDelegateContext(); assertNull(innerDelegateContextclosed); try { delegatingContext.assertOpen(); fail("delegatingContext.assertOpen() should have thrown a NamingException"); } catch (NamingException ne) { // Expected } verify(); secondKeyedObjectPoolControl.verify(); }