1   package test.net.sourceforge.pmd.rules.design;
2   
3   import net.sourceforge.pmd.PMD;
4   import net.sourceforge.pmd.Rule;
5   import net.sourceforge.pmd.RuleSetNotFoundException;
6   import test.net.sourceforge.pmd.testframework.SimpleAggregatorTst;
7   import test.net.sourceforge.pmd.testframework.TestDescriptor;
8   
9   public class ConfusingTernaryRuleTest extends SimpleAggregatorTst {
10  
11      private Rule rule;
12  
13      public void setUp() throws RuleSetNotFoundException {
14          rule = findRule("design", "ConfusingTernary");
15      }
16  
17      public void testAll() {
18          runTests(new TestDescriptor[]{
19              new TestDescriptor(TEST1, "!=, bad", 1, rule),
20              new TestDescriptor(TEST2, "==, good", 0, rule),
21          });
22      }
23  
24      private static final String TEST1 =
25              "public class Foo {" + PMD.EOL +
26              " void bar() {" + PMD.EOL +
27              "  x = a != b ? c : d;" + PMD.EOL +
28              " }" + PMD.EOL +
29              "}";
30  
31      private static final String TEST2 =
32              "public class Foo {" + PMD.EOL +
33              " void bar() {" + PMD.EOL +
34              "  x = a == b ? c : d;" + PMD.EOL +
35              " }" + PMD.EOL +
36              "}";
37  
38      /*
39  public class BadTernaries {
40    public static void main(String[] args) {
41      int i = 0;
42      int j = 1;
43      int k = 2;
44      boolean x = true;
45      boolean y = false;
46      boolean z = true;
47  
48      // flag all of these, lines 11 - 42:
49      if (i != 11) {a();} else {b();}
50      if (i != 12 && j != 0) {a();} else {b();}
51      if (i != 13 || j != 0) {a();} else {b();}
52      if (i != 14 && j != 0 && k != 0) {a();} else {b();}
53      if (i != 15 || j != 0 || k != 0) {a();} else {b();}
54      if (i != 16) {a();} else if (i != j) {b();} else{c();}
55      if (i != 17) {a();} else if (i == j) {b();} else{c();}
56      if (i == 18) {a();} else if (i != j) {b();} else{c();}
57      x = (!y ? x : y);
58      x = (!(x && y) ? y : z);
59      x = (!(x || y) ? y : z);
60      x = ((!x && !y) ? y : z);
61      x = ((!x || !y) ? y : z);
62      if (i != 24 && !x) {a();} else {b();}
63      if (i != 25 || !x) {a();} else {b();}
64      if (i != 26 && j != 0 && !y) {a();} else {b();}
65      if (i != 27 || j != 0 || !y) {a();} else {b();}
66      if (i != 28) {a();} else if (!x) {b();} else{c();}
67      if (i != 29) {a();} else if (x) {b();} else{c();}
68      if (i == 30) {a();} else if (!x) {b();} else{c();}
69      x = !(c() == y) ? y : !z;
70      if (!c()) {a();} else {b();}
71      if (c() != x) {a();} else {b();}
72      if (!c() != x) {a();} else {b();}
73      if (!c() != !x) {a();} else {b();}
74      if ((i != 36) || !(j == 0)) {a();} else {b();}
75      if ((i != 37) || !(x ? y : z)) {a();} else {b();}
76      if ((i != 38)) {a();} else {b();}
77      if (i != 39 || (j != 0 || k != 0)) {a();} else {b();}
78      if (i != 40 && (j != 0 && k != 0)) {a();} else {b();}
79      if (!x && (j != 41 && k != 0)) {a();} else {b();}
80      if (((x != y)) || !(x)) { a(); } else { b(); }
81  
82      // don't flag these:
83      if (i != 0) {a();}
84      if (!x) {a();}
85      if (i == 0) {a();} else {b();}
86      if (i == 0 && j != 0) {a();} else {b();}
87      if (i == 0 || j != 0) {a();} else {b();}
88      if (i == 0 && !x) {a();} else {b();}
89      if (x) {a();} else {b();}
90      if (x ? y : !z) {a();} else {b();}
91      if (c() == !x) {a();} else {b();}
92      if (c() ? !x : !c()) {a();} else {b();}
93      if (!x && d() instanceof String) {a();} else {b();}
94      if (!x && (d() instanceof String)) {a();} else {b();}
95    }
96  
97    private static void a() { }
98    private static void b() { }
99    private static boolean c() { return true; }
100   private static Object d() { return null; }
101 }
102 
103     */
104 
105 }