1   /***
2    * BSD-style license; for more info see http://pmd.sourceforge.net/license.html
3   */
4   package test.net.sourceforge.pmd.rules.design;
5   
6   import net.sourceforge.pmd.PMD;
7   import net.sourceforge.pmd.Report;
8   import net.sourceforge.pmd.Rule;
9   import test.net.sourceforge.pmd.testframework.SimpleAggregatorTst;
10  import test.net.sourceforge.pmd.testframework.TestDescriptor;
11  
12  public class TooManyFieldsTest extends SimpleAggregatorTst  {
13  
14      private Rule rule;
15  
16      public void setUp() {
17          rule = findRule("codesize", "TooManyFields");
18      }
19      public void testAll() {
20         runTests(new TestDescriptor[] {
21                 new TestDescriptor(TEST1, "3 fields, max is 15", 0, rule),
22                 new TestDescriptor(TEST2, "16 fields, bad", 1, rule),
23                 new TestDescriptor(TEST3, "12 fields, but 6 in inner and 6 in outer", 0, rule),
24                 new TestDescriptor(TEST4, "outer class, inner interface, both OK", 0, rule),
25                 new TestDescriptor(TEST5, "interface with 10 fields", 0, rule),
26                 new TestDescriptor(TEST6, "2 inner classes, each with > 10 fields", 2, rule),
27                 new TestDescriptor(TEST7, "anonymous class with a field", 0, rule),
28         });
29      }
30      
31      public void testPropertySetting() throws Throwable {
32          Report rpt = new Report();
33          rule.addProperty("maxfields", "2");
34          runTestFromString(TEST8, rule, rpt);
35          assertEquals(1, rpt.size());
36      }
37  
38  
39      private static final String TEST1 =
40      "public class Foo {" + PMD.EOL +
41      " int a1; " + PMD.EOL +
42      " int a2; " + PMD.EOL +
43      " int a3; " + PMD.EOL +
44      "}";
45  
46      private static final String TEST2 =
47      "public class Foo {" + PMD.EOL +
48      " int a1; " + PMD.EOL +
49      " int a2; " + PMD.EOL +
50      " int a3; " + PMD.EOL +
51      " int a4; " + PMD.EOL +
52      " int a5; " + PMD.EOL +
53      " int a6; " + PMD.EOL +
54      " int a7; " + PMD.EOL +
55      " int a8; " + PMD.EOL +
56      " int a9; " + PMD.EOL +
57      " int a10; " + PMD.EOL +
58      " int a11; " + PMD.EOL +
59      " int a12; " + PMD.EOL +
60      " int a13; " + PMD.EOL +
61      " int a14; " + PMD.EOL +
62      " int a15; " + PMD.EOL +
63      " int a16; " + PMD.EOL +
64      "}";
65  
66      private static final String TEST3 =
67      "public class Foo {" + PMD.EOL +
68      " int a1; " + PMD.EOL +
69      " int a2; " + PMD.EOL +
70      " int a3; " + PMD.EOL +
71      " int a4; " + PMD.EOL +
72      " int a5; " + PMD.EOL +
73      " int a6; " + PMD.EOL +
74      " public class Bar {" + PMD.EOL +
75      "  int a7; " + PMD.EOL +
76      "  int a8; " + PMD.EOL +
77      "  int a9; " + PMD.EOL +
78      "  int a10; " + PMD.EOL +
79      "  int a11; " + PMD.EOL +
80      "  int a12; " + PMD.EOL +
81      " }" +
82      "}";
83  
84      private static final String TEST4 =
85      "public class Foo {" + PMD.EOL +
86      " int a1; " + PMD.EOL +
87      " int a2; " + PMD.EOL +
88      " int a3; " + PMD.EOL +
89      " int a4; " + PMD.EOL +
90      " int a5; " + PMD.EOL +
91      " interface Bar {" + PMD.EOL +
92      "  int a6; " + PMD.EOL +
93      "  int a7; " + PMD.EOL +
94      "  int a8; " + PMD.EOL +
95      "  int a9; " + PMD.EOL +
96      "  int a10; " + PMD.EOL +
97      " }" +
98      "}";
99  
100     private static final String TEST5 =
101     "public interface Foo {" + PMD.EOL +
102     " int a1; " + PMD.EOL +
103     " int a2; " + PMD.EOL +
104     " int a3; " + PMD.EOL +
105     " int a4; " + PMD.EOL +
106     " int a5; " + PMD.EOL +
107     " int a6; " + PMD.EOL +
108     " int a7; " + PMD.EOL +
109     " int a8; " + PMD.EOL +
110     " int a9; " + PMD.EOL +
111     " int a10; " + PMD.EOL +
112     "}";
113     
114     private static final String TEST6 =
115     "public class Foo {" + PMD.EOL +
116     " public class Bar1 {" + PMD.EOL +
117     "  int b1; " + PMD.EOL +
118     "  int b2; " + PMD.EOL +
119     "  int b3; " + PMD.EOL +
120     "  int b4; " + PMD.EOL +
121     "  int b5; " + PMD.EOL +
122     "  int b6; " + PMD.EOL +
123     "  int b7; " + PMD.EOL +
124     "  int b8; " + PMD.EOL +
125     "  int b9; " + PMD.EOL +
126     "  int b10; " + PMD.EOL +
127     "  int b11; " + PMD.EOL +
128     "  int b12; " + PMD.EOL +
129     "  int b13; " + PMD.EOL +
130     "  int b14; " + PMD.EOL +
131     "  int b15; " + PMD.EOL +
132     "  int b16; " + PMD.EOL +
133     " }" + PMD.EOL +
134     " public class Bar2 {" + PMD.EOL +
135     "  int b1; " + PMD.EOL +
136     "  int b2; " + PMD.EOL +
137     "  int b3; " + PMD.EOL +
138     "  int b4; " + PMD.EOL +
139     "  int b5; " + PMD.EOL +
140     "  int b6; " + PMD.EOL +
141     "  int b7; " + PMD.EOL +
142     "  int b8; " + PMD.EOL +
143     "  int b9; " + PMD.EOL +
144     "  int b10; " + PMD.EOL +
145     "  int b11; " + PMD.EOL +
146     "  int b12; " + PMD.EOL +
147     "  int b13; " + PMD.EOL +
148     "  int b14; " + PMD.EOL +
149     "  int b15; " + PMD.EOL +
150     "  int b16; " + PMD.EOL +
151     " }" + PMD.EOL +
152     "}";
153 
154     private static final String TEST7 =
155     "public class Foo {" + PMD.EOL +
156     " public class Bar1 {" + PMD.EOL +
157     "  Object foo = new Object() {public int x;}; " + PMD.EOL +
158     " }" + PMD.EOL +
159     "}";
160 
161     private static final String TEST8 =
162     "public class Foo {" + PMD.EOL +
163     " int a1; " + PMD.EOL +
164     " int a2; " + PMD.EOL +
165     " int a3; " + PMD.EOL +
166     "}";
167 
168 
169 }