Merge branch 'pr-1269'
This commit is contained in:
@ -202,12 +202,12 @@ public abstract class RuleTst {
|
||||
}
|
||||
|
||||
List<Integer> expected = test.getExpectedLineNumbers();
|
||||
if (report.getViolationTree().size() != expected.size()) {
|
||||
if (report.size() != expected.size()) {
|
||||
throw new RuntimeException("Test setup error: number of execpted line numbers doesn't match "
|
||||
+ "number of violations for test case '" + test.getDescription() + "'");
|
||||
}
|
||||
|
||||
Iterator<RuleViolation> it = report.getViolationTree().iterator();
|
||||
Iterator<RuleViolation> it = report.iterator();
|
||||
int index = 0;
|
||||
while (it.hasNext()) {
|
||||
RuleViolation violation = it.next();
|
||||
|
@ -12,27 +12,39 @@ import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.verifyNoMoreInteractions;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
import org.mockito.Mockito;
|
||||
import org.mockito.invocation.InvocationOnMock;
|
||||
import org.mockito.stubbing.Answer;
|
||||
|
||||
import net.sourceforge.pmd.Report;
|
||||
import net.sourceforge.pmd.Rule;
|
||||
import net.sourceforge.pmd.RuleContext;
|
||||
import net.sourceforge.pmd.RuleViolation;
|
||||
import net.sourceforge.pmd.lang.LanguageRegistry;
|
||||
import net.sourceforge.pmd.lang.LanguageVersion;
|
||||
import net.sourceforge.pmd.lang.ast.Node;
|
||||
import net.sourceforge.pmd.lang.rule.ParametricRuleViolation;
|
||||
import net.sourceforge.pmd.test.lang.ast.DummyNode;
|
||||
|
||||
public class RuleTstTest {
|
||||
private LanguageVersion dummyLanguage = LanguageRegistry.findLanguageByTerseName("dummy").getDefaultVersion();
|
||||
|
||||
private Rule rule = mock(Rule.class);
|
||||
|
||||
private RuleTst ruleTester = new RuleTst() {
|
||||
};
|
||||
|
||||
@Test
|
||||
public void shouldCallStartAndEnd() {
|
||||
RuleTst ruleTester = new RuleTst() {
|
||||
};
|
||||
LanguageVersion languageVersion = LanguageRegistry.findLanguageByTerseName("dummy").getDefaultVersion();
|
||||
Report report = new Report();
|
||||
Rule rule = mock(Rule.class);
|
||||
when(rule.getLanguage()).thenReturn(languageVersion.getLanguage());
|
||||
when(rule.getLanguage()).thenReturn(dummyLanguage.getLanguage());
|
||||
when(rule.getName()).thenReturn("test rule");
|
||||
|
||||
ruleTester.runTestFromString("the code", rule, report, languageVersion, false);
|
||||
ruleTester.runTestFromString("the code", rule, report, dummyLanguage, false);
|
||||
|
||||
verify(rule).start(any(RuleContext.class));
|
||||
verify(rule).end(any(RuleContext.class));
|
||||
@ -48,4 +60,40 @@ public class RuleTstTest {
|
||||
verify(rule).getPropertiesByPropertyDescriptor();
|
||||
verifyNoMoreInteractions(rule);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldAssertLinenumbersSorted() {
|
||||
when(rule.getLanguage()).thenReturn(dummyLanguage.getLanguage());
|
||||
when(rule.getName()).thenReturn("test rule");
|
||||
Mockito.doAnswer(new Answer<Void>() {
|
||||
private RuleViolation createViolation(RuleContext context, int beginLine, String message) {
|
||||
DummyNode node = new DummyNode(1);
|
||||
node.testingOnlySetBeginLine(beginLine);
|
||||
node.testingOnlySetBeginColumn(1);
|
||||
ParametricRuleViolation<Node> violation = new ParametricRuleViolation<Node>(rule, context, node, message);
|
||||
return violation;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Void answer(InvocationOnMock invocation) throws Throwable {
|
||||
RuleContext context = invocation.getArgumentAt(1, RuleContext.class);
|
||||
// the violations are reported out of order
|
||||
context.getReport().addRuleViolation(createViolation(context, 15, "first reported violation"));
|
||||
context.getReport().addRuleViolation(createViolation(context, 5, "second reported violation"));
|
||||
return null;
|
||||
}
|
||||
}).when(rule).apply(Mockito.anyList(), Mockito.any(RuleContext.class));
|
||||
|
||||
TestDescriptor testDescriptor = new TestDescriptor("the code", "sample test", 2, rule, dummyLanguage);
|
||||
testDescriptor.setReinitializeRule(false);
|
||||
testDescriptor.setExpectedLineNumbers(Arrays.asList(5, 15));
|
||||
|
||||
try {
|
||||
ruleTester.runTest(testDescriptor);
|
||||
// there should be no assertion failures
|
||||
// expected line numbers and actual line numbers match
|
||||
} catch (AssertionError assertionError) {
|
||||
Assert.fail(assertionError.toString());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user