import org.wamblee.persistence.Detachable;
import static org.mockito.Mockito.*;
-import static junit.framework.TestCase.*;
+import static junit.framework.TestCase.*;
public class DetachableEntityTest {
-
- public static class X {
-
+
+ public static class X {
+
}
-
+
+ private X initialValue;
private Detachable<X> detachable;
- private DetachableEntity<X> entity;
-
+ private DetachableEntity<X> entity;
+
@Before
- public void setUp() {
+ public void setUp() {
+ initialValue = mock(X.class);
detachable = mock(Detachable.class);
+ when(detachable.get()).thenReturn(initialValue);
entity = new DetachableEntity<X>(detachable);
}
@Test
public void testGetObject() {
- X x = new X();
+ X x = new X();
+ reset(detachable);
when(detachable.get()).thenReturn(x);
X value = entity.getObject();
- assertSame(x, value);
- verify(detachable).get();
+ // we did not detach it yet so the old value should be returned.
+ assertSame(initialValue, value);
+ verifyNoMoreInteractions(detachable);
}
@Test
public void testOnDetachReattach() {
- X x = new X();
+ X x = new X();
when(detachable.get()).thenReturn(x);
-
- entity.onDetach();
+
+ entity.detach();
verify(detachable).detach();
-
+
+ reset(detachable);
+ when(detachable.get()).thenReturn(x);
+
X y = entity.getObject();
- assertSame(x, y);
+ assertSame(x, y);
verify(detachable).get();
}
@Test(expected = UnsupportedOperationException.class)
public void testSetObject() {
- X x = new X();
+ X x = new X();
entity.setObject(x);
}
}