package com.dhemery.polling; import com.dhemery.core.Condition; import org.jmock.Expectations; import org.jmock.Sequence; import org.jmock.auto.Mock; import org.jmock.integration.junit4.JUnitRuleMockery; import org.junit.Rule; import org.junit.Test; public abstract class PollerContract { @Rule public JUnitRuleMockery context = new JUnitRuleMockery(); @Mock public Condition condition; protected abstract Poller pollerForContract(); @Test public void pollsUntilTheConditionIsSatisfied() { final Sequence polling = context.sequence("polling"); context.checking(new Expectations(){{ exactly(3).of(condition).isSatisfied(); inSequence(polling); will(returnValue(false)); oneOf(condition).isSatisfied(); inSequence(polling); will(returnValue(true)); }}); pollerForContract().poll(condition); } @Test public void stopsPollingWhenTheConditionIsSatisfied() { final Sequence polling = context.sequence("polling"); context.checking(new Expectations(){{ oneOf(condition).isSatisfied(); inSequence(polling); will(returnValue(true)); never(condition).isSatisfied(); inSequence(polling); }}); pollerForContract().poll(condition); } }