package org.robotframework.swing.context; import java.awt.Component; import java.awt.Container; import jdave.Block; import jdave.Specification; import org.jmock.Expectations; import org.robotframework.swing.operator.ComponentWrapper; public abstract class ContextVerifierSpecification<T extends ContextVerifier> extends Specification<T> { public abstract class EmptyContext { public ContextVerifier create() { Context.setContext(null); return createVerifier(); } public void throwsErrorIfContextIsEmpty() { selectEmptyContext(); specify(new Block() { public void run() throws Throwable { context.verifyContext(); } }, must.raiseExactly(AssertionError.class, getExpectedErrorMessage() + " Current context is java.awt.Container")); } protected abstract ContextVerifier createVerifier(); } protected void specifyContextClassMatches(final Class contextClass) throws Throwable { checking(new Expectations() {{ atLeast(1).of(Context.getContext()).getSource(); will(returnValue(dummy(contextClass))); }}); specify(new Block() { public void run() throws Throwable { context.verifyContext(); } }, must.not().raise(AssertionError.class)); } protected abstract String getExpectedErrorMessage(); private void selectEmptyContext() { final Container container = new Container(); Context.setContext(new ComponentWrapper() { public Component getSource() { return container; } }); } }