@Test
public void testBeanIsAvailableChange()
{
stub(bean.isAvailable()).toReturn(false);
holder.addPropertyChangeListener(listener);
final TimestampProviderMock timestampProvider = (TimestampProviderMock)TimestampProvider.Locator.findTimestampProvider();
timestampProvider.setTimestamp(TIMESTAMP1);
assertFalse(bean.isAvailable());
stub(bean.isAvailable()).toReturn(true);
holder.propertyChangeListener.propertyChange(new MyPropertyChangeEvent(bean, "stringProperty", null, "newValue"));
timestampProvider.setTimestamp(TIMESTAMP2);
assertTrue(bean.isAvailable());
stub(bean.isAvailable()).toReturn(false);
holder.propertyChangeListener.propertyChange(new MyPropertyChangeEvent(bean, "stringProperty", "newValue", null));
timestampProvider.setTimestamp(TIMESTAMP3);
assertFalse(bean.isAvailable());
holder.propertyChangeListener.propertyChange(new MyPropertyChangeEvent(bean, "stringProperty", null, null));
final InOrder inOrder = inOrder(listener);
inOrder.verify(listener).propertyChange(refEq(new MyPropertyChangeEvent(holder, "latestModificationTime", null, TIMESTAMP1)));
inOrder.verify(listener).propertyChange(refEq(new MyPropertyChangeEvent(holder, "available", false, true)));
inOrder.verify(listener).propertyChange(refEq(new MyPropertyChangeEvent(holder, "latestModificationTime", TIMESTAMP1, TIMESTAMP2)));
inOrder.verify(listener).propertyChange(refEq(new MyPropertyChangeEvent(holder, "available", true, false)));
inOrder.verify(listener).propertyChange(refEq(new MyPropertyChangeEvent(holder, "latestModificationTime", TIMESTAMP2, TIMESTAMP3)));
verifyNoMoreInteractions(listener);
}
}