package org.codefx.mvn.jdeps.mojo;
import org.codefx.mvn.jdeps.rules.DependencyJudgeBuilder;
import org.codefx.mvn.jdeps.rules.DependencyRule;
import org.codefx.mvn.jdeps.rules.Severity;
import org.codefx.mvn.jdeps.rules.XmlRule;
import org.codehaus.plexus.classworlds.launcher.ConfigurationException;
import org.junit.Before;
import org.junit.Test;
import java.util.Arrays;
import java.util.List;
import static java.util.Collections.singletonList;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.Assert.fail;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoMoreInteractions;
import static org.mockito.Mockito.verifyZeroInteractions;
/**
* Tests {@link DependencyRulesConfiguration}.
*/
public class DependencyRulesConfigurationTest {
private DependencyJudgeBuilder dependencyJudgeBuilder;
@Before
public void createDependencyJudgeBuilder() {
dependencyJudgeBuilder = mock(DependencyJudgeBuilder.class);
}
// #begin XML RULES
@Test
public void addXmlRulesToBuilder_invalidRule_ruleNotAddedToBuilder() {
// see 'DependencyRuleTest' for more details of how rules can be invalid
XmlRule invalidRule = new XmlRule("", "", Severity.FAIL);
try {
DependencyRulesConfiguration.addXmlRulesToBuilder(singletonList(invalidRule), dependencyJudgeBuilder);
fail();
} catch (ConfigurationException ex) {
assertThat(ex).hasMessageContaining("The rule ( -> : FAIL)");
}
verifyZeroInteractions(dependencyJudgeBuilder);
}
@Test
public void addXmlRulesToBuilder_validRule_ruleAddedToBuilder() throws Exception {
XmlRule validXmlRule = new XmlRule("com.foo.bar", "sun.misc.Unsafe", Severity.FAIL);
DependencyRule validRule = validXmlRule.asDependencyRule();
DependencyRulesConfiguration.addXmlRulesToBuilder(singletonList(validXmlRule), dependencyJudgeBuilder);
verify(dependencyJudgeBuilder).addDependency(validRule);
verifyNoMoreInteractions(dependencyJudgeBuilder);
}
@Test
public void addXmlRulesToBuilder_validRules_rulesAddedToBuilder() throws Exception {
List<XmlRule> xmlRules = Arrays.asList(
new XmlRule("com.foo.bar", "sun.misc.Unsafe", Severity.FAIL),
new XmlRule("com.foo", "sun.misc.Unsafe", Severity.WARN),
new XmlRule("com", "sun.misc.Unsafe", Severity.INFORM));
DependencyRulesConfiguration.addXmlRulesToBuilder(xmlRules, dependencyJudgeBuilder);
verify(dependencyJudgeBuilder).addDependency(xmlRules.get(0).asDependencyRule());
verify(dependencyJudgeBuilder).addDependency(xmlRules.get(1).asDependencyRule());
verify(dependencyJudgeBuilder).addDependency(xmlRules.get(2).asDependencyRule());
verifyNoMoreInteractions(dependencyJudgeBuilder);
}
// #end XML RULES
// #begin ARROW RULES
@Test
public void addArrowRulesToBuilder_invalidRule_ruleNotAddedToBuilder() {
// see 'DependencyRuleTest' for more details of how rules can be invalid
String invalidRule = "INVALID RULE";
try {
DependencyRulesConfiguration.addArrowRulesToBuilder(singletonList(invalidRule), dependencyJudgeBuilder);
fail();
} catch (ConfigurationException ex) {
assertThat(ex).hasMessageContaining("The line 'INVALID RULE' defines no valid rule.");
}
verifyZeroInteractions(dependencyJudgeBuilder);
}
@Test
public void addArrowRulesToBuilder_validRule_ruleAddedToBuilder() throws Exception {
String validArrowRule = "com.foo.bar -> sun.misc.Unsafe: FAIL";
DependencyRule validRule = DependencyRule.of("com.foo.bar", "sun.misc.Unsafe", Severity.FAIL);
DependencyRulesConfiguration.addArrowRulesToBuilder(singletonList(validArrowRule), dependencyJudgeBuilder);
verify(dependencyJudgeBuilder).addDependency(validRule);
verifyNoMoreInteractions(dependencyJudgeBuilder);
}
@Test
public void addArrowRulesToBuilder_validRules_rulesAddedToBuilder() throws Exception {
List<String> arrowRules = Arrays.asList(
"com.foo.bar -> sun.misc.Unsafe: FAIL",
"com.foo -> sun.misc.Unsafe: WARN",
"com -> sun.misc.Unsafe: INFORM");
List<DependencyRule> rules = Arrays.asList(
DependencyRule.of("com.foo.bar", "sun.misc.Unsafe", Severity.FAIL),
DependencyRule.of("com.foo", "sun.misc.Unsafe", Severity.WARN),
DependencyRule.of("com", "sun.misc.Unsafe", Severity.INFORM));
DependencyRulesConfiguration.addArrowRulesToBuilder(arrowRules, dependencyJudgeBuilder);
verify(dependencyJudgeBuilder).addDependency(rules.get(0));
verify(dependencyJudgeBuilder).addDependency(rules.get(1));
verify(dependencyJudgeBuilder).addDependency(rules.get(2));
verifyNoMoreInteractions(dependencyJudgeBuilder);
}
// #end ARROW RULES
}