View Javadoc
1   /*
2    * MIT License
3    * Copyright (c) 2006-2025 JMockit developers
4    * See LICENSE file for full license text.
5    */
6   package integration.tests;
7   
8   import static org.junit.jupiter.api.Assertions.assertFalse;
9   import static org.junit.jupiter.api.Assertions.assertTrue;
10  
11  import org.junit.jupiter.api.MethodOrderer;
12  import org.junit.jupiter.api.Test;
13  import org.junit.jupiter.api.TestMethodOrder;
14  
15  @TestMethodOrder(MethodOrderer.MethodName.class)
16  class BooleanExpressionsTest extends CoverageTest {
17      BooleanExpressions tested;
18  
19      @Test
20      void evalBuggyCombination() {
21          // Only this combination will fail if the third condition in eval1 is changed to "z < 0",
22          // which demonstrates that a more sophisticated metric than branch coverage is needed.
23          assertTrue(tested.eval1(true, false, 1));
24  
25          // assertLine(12, 3, 3, 1, 1, 1);
26      }
27  
28      @Test // includes executions from the previous test
29      void evalOnlySomeCombinations() {
30          assertTrue(tested.eval1(true, true, 0));
31          assertFalse(tested.eval1(true, false, 0));
32  
33          // assertLine(12, 3, 3, 3, 3, 2);
34      }
35  
36      @Test
37      void evalAllCombinations() {
38          assertTrue(tested.eval2(true, true, 0));
39          assertTrue(tested.eval2(true, false, 1));
40          assertFalse(tested.eval2(true, false, 0));
41          assertFalse(tested.eval2(false, true, 0));
42  
43          // assertLine(17, 3, 3, 4, 3, 2);
44      }
45  
46      @Test
47      void evalAllPaths() {
48          assertFalse(tested.eval3(false, true, false));
49          assertTrue(tested.eval3(true, true, false));
50          assertTrue(tested.eval3(true, false, true));
51          assertFalse(tested.eval3(true, false, false));
52  
53          // assertLine(22, 3, 3, 4, 3, 2);
54      }
55  
56      @Test
57      void evalOnlyFirstAndSecondBranches() {
58          assertFalse(tested.eval4(false, true, false));
59          assertFalse(tested.eval4(false, false, false));
60          assertFalse(tested.eval4(false, true, true));
61          assertFalse(tested.eval4(false, false, true));
62          assertTrue(tested.eval4(true, false, false));
63          assertTrue(tested.eval4(true, false, true));
64  
65          // assertLine(27, 3, 2, 6, 2, 0);
66      }
67  
68      @Test
69      void eval5() {
70          assertFalse(tested.eval5(false, true, true));
71          assertTrue(tested.eval5(false, false, false));
72  
73          // assertLine(35, 1, 1, 1);
74      }
75  
76      @Test
77      void methodWithComplexExpressionWhichCallsAnotherInSameClass() {
78          BooleanExpressions.isSameTypeIgnoringAutoBoxing(int.class, Integer.class);
79  
80          // TODO: assertions
81      }
82  
83      @Test
84      void trivialMethodWhichReturnsBooleanInput() {
85          assertTrue(tested.simplyReturnsInput(true));
86          assertFalse(tested.simplyReturnsInput(false));
87  
88          assertLine(142, 1, 1, 2);
89      }
90  
91      @Test
92      void methodWhichReturnsNegatedBoolean() {
93          assertTrue(tested.returnsNegatedInput(false));
94  
95          // assertLine(63, 1, 1, 1);
96      }
97  
98      @Test
99      void methodWithIfElseAndTrivialTernaryOperator() {
100         assertTrue(tested.returnsTrivialResultFromInputAfterIfElse(false, 1));
101         assertFalse(tested.returnsTrivialResultFromInputAfterIfElse(true, 0));
102     }
103 
104     @Test
105     void methodWithTrivialTernaryOperatorAndTrivialIfElse() {
106         assertTrue(tested.returnsResultPreviouslyComputedFromInput(false, 1));
107         assertFalse(tested.returnsResultPreviouslyComputedFromInput(false, 0));
108         assertTrue(tested.returnsResultPreviouslyComputedFromInput(true, 1));
109         assertTrue(tested.returnsResultPreviouslyComputedFromInput(true, -1));
110 
111         assertLines(190, 200, 6);
112         assertLine(190, 3, 3, 4, 2, 2);
113         assertLine(193, 1, 1, 4, 3);
114         assertLine(196, 1, 1, 1);
115         assertLine(197, 1, 1, 1);
116         assertLine(200, 1, 1, 4);
117     }
118 }