/* * Copyright (c) 2006 Rogério Liesenfeld * This file is subject to the terms of the MIT license (see LICENSE.txt). */ package integrationTests; import org.junit.*; import org.junit.runners.*; import static org.junit.Assert.*; @FixMethodOrder(MethodSorters.NAME_ASCENDING) public final class BooleanExpressionsTest extends CoverageTest { BooleanExpressions tested; @Test public void evalBuggyCombination() { // Only this combination will fail if the third condition in eval1 is changed to "z < 0", // which demonstrates that a more sophisticated metric than branch coverage is needed. assertTrue(tested.eval1(true, false, 1)); // assertLine(7, 3, 3, 1, 1, 1); findMethodData(7); assertPaths(4, 1, 1); } @Test // includes executions from the previous test public void evalOnlySomeCombinations() { assertTrue(tested.eval1(true, true, 0)); assertFalse(tested.eval1(true, false, 0)); // assertLine(7, 3, 3, 3, 3, 2); findMethodData(7); assertPaths(4, 3, 3); } @Test public void evalAllCombinations() { assertTrue(tested.eval2(true, true, 0)); assertTrue(tested.eval2(true, false, 1)); assertFalse(tested.eval2(true, false, 0)); assertFalse(tested.eval2(false, true, 0)); // assertLine(12, 3, 3, 4, 3, 2); findMethodData(12); assertPaths(4, 4, 4); } @Test public void evalAllPaths() { assertFalse(tested.eval3(false, true, false)); assertTrue(tested.eval3(true, true, false)); assertTrue(tested.eval3(true, false, true)); assertFalse(tested.eval3(true, false, false)); // assertLine(17, 3, 3, 4, 3, 2); findMethodData(17); assertPaths(4, 4, 4); } @Test public void evalOnlyFirstAndSecondBranches() { assertFalse(tested.eval4(false, true, false)); assertFalse(tested.eval4(false, false, false)); assertFalse(tested.eval4(false, true, true)); assertFalse(tested.eval4(false, false, true)); assertTrue(tested.eval4(true, false, false)); assertTrue(tested.eval4(true, false, true)); // assertLine(22, 3, 2, 6, 2, 0); findMethodData(22); assertPaths(4, 2, 6); } @Test public void eval5() { assertFalse(tested.eval5(false, true, true)); assertTrue(tested.eval5(false, false, false)); // assertLine(30, 1, 1, 1); findMethodData(27); assertPaths(4, 2, 2); assertRegularPath(4, 0); assertRegularPath(8, 1); assertRegularPath(10, 0); assertShadowedPath(14, 0); assertRegularPath(13, 1); } @Test public void methodWithComplexExpressionWhichCallsAnotherInSameClass() { BooleanExpressions.isSameTypeIgnoringAutoBoxing(int.class, Integer.class); findMethodData(35); assertPaths(8, 1, 1); findMethodData(43); assertPaths(63, 1, 1); } @Test public void trivialMethodWhichReturnsBooleanInput() { assertTrue(tested.simplyReturnsInput(true)); assertFalse(tested.simplyReturnsInput(false)); assertLine(53, 1, 1, 2); findMethodData(53); assertPaths(1, 1, 2); assertPath(2, 2); } @Test public void methodWhichReturnsNegatedBoolean() { assertTrue(tested.returnsNegatedInput(false)); // assertLine(58, 1, 1, 1); findMethodData(58); assertPaths(1, 1, 1); assertShadowedPath(6, 0); assertRegularPath(5, 1); } @Test public void methodWithIfElseAndTrivialTernaryOperator() { assertTrue(tested.returnsTrivialResultFromInputAfterIfElse(false, 1)); assertFalse(tested.returnsTrivialResultFromInputAfterIfElse(true, 0)); findMethodData(65); assertPaths(2, 2, 2); assertShadowedPath(11, 0); assertRegularPath(10, 1); assertShadowedPath(10, 1); assertRegularPath(9, 1); } @Test public void methodWithTrivialTernaryOperatorAndTrivialIfElse() { assertTrue(tested.returnsResultPreviouslyComputedFromInput(false, 1)); assertFalse(tested.returnsResultPreviouslyComputedFromInput(false, 0)); assertTrue(tested.returnsResultPreviouslyComputedFromInput(true, 1)); assertTrue(tested.returnsResultPreviouslyComputedFromInput(true, -1)); assertLines(77, 86, 5); assertLine(77, 3, 3, 4, 2, 2); assertLine(80, 2, 2, 4, 3); assertLine(82, 1, 1, 1); assertLine(83, 1, 1, 1); assertLine(86, 1, 1, 4); findMethodData(77); assertPaths(4, 3, 4); assertPath(12, 1); assertPath(11, 1); assertPath(11, 0); assertPath(10, 2); } }