1
2
3
4 package net.sourceforge.pmd.lang.java.rule.codesize;
5
6 import static org.junit.Assert.assertEquals;
7 import static org.junit.Assert.assertNotSame;
8
9 import java.util.Iterator;
10
11 import net.sourceforge.pmd.Report;
12 import net.sourceforge.pmd.Rule;
13 import net.sourceforge.pmd.RuleViolation;
14 import net.sourceforge.pmd.lang.java.rule.codesize.CyclomaticComplexityRule;
15 import net.sourceforge.pmd.testframework.RuleTst;
16 import net.sourceforge.pmd.testframework.SimpleAggregatorTst;
17 import net.sourceforge.pmd.testframework.TestDescriptor;
18 import net.sourceforge.pmd.testframework.SimpleAggregatorTst.CustomXmlTestClassMethodsRunner;
19
20 import org.junit.Before;
21 import org.junit.Test;
22 import org.junit.runner.RunWith;
23 import org.junit.runner.notification.Failure;
24
25
26 @RunWith(SimpleAggregatorTst.CustomXmlTestClassMethodsRunner.class)
27 public class CyclomaticComplexityTest extends RuleTst {
28 private Rule rule;
29 private TestDescriptor[] tests;
30
31 @Before public void setUp() {
32 rule = findRule("java-codesize", "CyclomaticComplexity");
33 tests = extractTestsFromXml(rule);
34 }
35
36 @Test
37 public void testOneMethod() throws Throwable {
38 rule.setProperty(CyclomaticComplexityRule.REPORT_LEVEL_DESCRIPTOR, 1);
39 Report report = new Report();
40 runTestFromString(tests[0].getCode(), rule, report);
41 Iterator<RuleViolation> i = report.iterator();
42 RuleViolation rv = i.next();
43 assertNotSame(rv.getDescription().indexOf("Highest = 1"), -1);
44 }
45
46 @Test
47 public void testNastyComplicatedMethod() throws Throwable {
48 rule.setProperty(CyclomaticComplexityRule.REPORT_LEVEL_DESCRIPTOR, 10);
49 Report report = new Report();
50 runTestFromString(tests[1].getCode(), rule, report);
51 Iterator<RuleViolation> i = report.iterator();
52 RuleViolation rv = i.next();
53 assertNotSame(rv.getDescription().indexOf("Highest = 11"), -1);
54 }
55
56 @Test
57 public void testConstructor() throws Throwable {
58 rule.setProperty(CyclomaticComplexityRule.REPORT_LEVEL_DESCRIPTOR, 1);
59 Report report = new Report();
60 runTestFromString(tests[2].getCode(), rule, report);
61 Iterator<RuleViolation> i = report.iterator();
62 RuleViolation rv = i.next();
63 assertNotSame(rv.getDescription().indexOf("Highest = 1"), -1);
64 }
65
66 @Test
67 public void testLessComplicatedThanReportLevel() throws Throwable {
68 rule.setProperty(CyclomaticComplexityRule.REPORT_LEVEL_DESCRIPTOR, 10);
69 Report report = new Report();
70 runTestFromString(tests[0].getCode(), rule, report);
71 assertEquals(0, report.size());
72 }
73
74 @Test
75 public void testRemainingTestCases() {
76 for (int i = 0; i < tests.length; i++) {
77 if (i == 0 || i == 1 || i == 2) {
78 continue;
79 }
80
81 try {
82 runTest(tests[i]);
83 } catch (Throwable t) {
84 Failure f = CustomXmlTestClassMethodsRunner.createFailure(rule, t);
85 CustomXmlTestClassMethodsRunner.addFailure(f);
86 }
87 }
88 }
89
90 public static junit.framework.Test suite() {
91 return new junit.framework.JUnit4TestAdapter(CyclomaticComplexityTest.class);
92 }
93 }