package org.jboss.windup.exec.rulefilters;
import java.util.Arrays;
import java.util.Collection;
import org.jboss.windup.config.AbstractRuleProvider;
import org.jboss.windup.config.RuleProvider;
import org.jboss.windup.config.loader.RuleLoaderContext;
import org.jboss.windup.config.metadata.RuleMetadata;
import org.jboss.windup.config.operation.Log;
import org.junit.Assert;
import org.junit.Test;
import org.ocpsoft.logging.Logger;
import org.ocpsoft.rewrite.config.Configuration;
import org.ocpsoft.rewrite.config.ConfigurationBuilder;
/**
*
* @author <a href="mailto:ozizka@redhat.com">Ondrej Zizka</a>
*/
public class TaggedRuleProviderPredicateTest
{
@Test
public void testAccept()
{
TestTagsARules rulesA = new TestTagsARules();
TestTagsBRules rulesB = new TestTagsBRules();
TestTagsA1B1Rules rulesA1B1 = new TestTagsA1B1Rules();
Assert.assertEquals(true, isProviderAcceptedByTags(rulesA, Arrays.asList("tagA1"), false, null, false));
Assert.assertEquals(false, isProviderAcceptedByTags(rulesB, Arrays.asList("tagA1"), false, null, false));
Assert.assertEquals(true, isProviderAcceptedByTags(rulesB, Arrays.asList("tagA1", "tagB1"), false, null, false));
Assert.assertEquals(false, isProviderAcceptedByTags(rulesB, Arrays.asList("tagA1", "tagB1"), true, null, false));
Assert.assertEquals(true, isProviderAcceptedByTags(rulesB, Arrays.asList("tagA1", "tagB1", "tagC1"), false, null, false));
Assert.assertEquals(false, isProviderAcceptedByTags(rulesB, Arrays.asList("tagA1", "tagB1", "tagC1"), true, null, false));
Assert.assertEquals(true, isProviderAcceptedByTags(rulesA1B1, Arrays.asList("tagA1", "tagB1"), false, Arrays.asList("tagC1"), false));
Assert.assertEquals(false, isProviderAcceptedByTags(rulesA1B1, Arrays.asList("tagA1", "tagC1"), false, Arrays.asList("tagB1"), false));
Assert.assertEquals(false, isProviderAcceptedByTags(rulesA1B1, Arrays.asList("tagA1"), false, Arrays.asList("tagB1", "tagC1"), false));
Assert.assertEquals(true, isProviderAcceptedByTags(rulesA1B1, Arrays.asList("tagA1"), false, Arrays.asList("tagB1", "tagC1"), true));
}
private boolean isProviderAcceptedByTags(RuleProvider ruleProvider,
Collection<String> includeTags, boolean requireAllIncludes,
Collection<String> excludeTags, boolean requireAllExcludes)
{
TaggedRuleProviderPredicate filter = new TaggedRuleProviderPredicate(includeTags, excludeTags);
filter.setRequireAllIncludeTags(requireAllIncludes);
filter.setRequireAllExcludeTags(requireAllExcludes);
return filter.accept(ruleProvider);
}
@RuleMetadata(tags = { "tagA1", "tagA2", "tagA3" })
public static class TestTagsARules extends NoopRuleProvider
{
}
@RuleMetadata(tags = { "tagB1", "tagB2", "tagB3" })
public static class TestTagsBRules extends NoopRuleProvider
{
}
@RuleMetadata(tags = { "tagA1", "tagB1" })
public static class TestTagsA1B1Rules extends NoopRuleProvider
{
}
public abstract static class NoopRuleProvider extends AbstractRuleProvider
{
@Override
public Configuration getConfiguration(RuleLoaderContext ruleLoaderContext)
{
return ConfigurationBuilder.begin().addRule()
.perform(Log.message(Logger.Level.TRACE, "Performing Rule: " + this.getClass().getSimpleName()));
}
}
}