package org.tessell.tests.model.validation.rules;
import static org.junit.Assert.assertEquals;
import java.util.LinkedHashMap;
import java.util.Map;
import joist.util.Join;
import org.tessell.model.properties.HasRuleTriggers;
import org.tessell.model.validation.events.RuleTriggeredEvent;
import org.tessell.model.validation.events.RuleTriggeredHandler;
import org.tessell.model.validation.events.RuleUntriggeredEvent;
import org.tessell.model.validation.events.RuleUntriggeredHandler;
public abstract class AbstractRuleTest {
protected final Map<Object, String> messages = new LinkedHashMap<Object, String>();
public <T extends HasRuleTriggers> T listenTo(final T hasTriggers) {
hasTriggers.addRuleTriggeredHandler(new RuleTriggeredHandler() {
public void onTrigger(final RuleTriggeredEvent event) {
if (event.getMessage() != null) {
messages.put(event.getKey(), event.getMessage());
}
}
});
hasTriggers.addRuleUntriggeredHandler(new RuleUntriggeredHandler() {
public void onUntrigger(final RuleUntriggeredEvent event) {
messages.remove(event.getKey());
}
});
return hasTriggers;
}
protected void assertMessages(final String... messages) {
assertEquals(Join.lines(messages), Join.lines(this.messages.values()));
}
protected void assertNoMessages() {
assertMessages();
}
}