blob: 37db4c14388dd84709e3d7b56031a6d109cad139 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Marc R. Hoffmann - initial API and implementation
*
*******************************************************************************/
package org.jacoco.core.test.validation;
import org.jacoco.core.analysis.ICounter;
import org.jacoco.core.test.validation.targets.Target01;
import org.junit.Test;
/**
* Tests of basic Java control structures.
*/
public class ControlStructuresTest extends ValidationTestBase {
public ControlStructuresTest() {
super(Target01.class);
}
@Test
public void testCoverageResult() {
// 1. Direct unconditional execution
assertLine("unconditional", ICounter.FULLY_COVERED);
// 2. Missed if block
assertLine("iffalse", ICounter.FULLY_COVERED, 1, 1);
assertLine("missedif", ICounter.NOT_COVERED);
assertLine("executedelse", ICounter.FULLY_COVERED);
// 3. Executed if block
assertLine("iftrue", ICounter.FULLY_COVERED, 1, 1);
assertLine("executedif", ICounter.FULLY_COVERED);
assertLine("missedelse", ICounter.NOT_COVERED);
// 4. Missed while block
assertLine("whilefalse", ICounter.FULLY_COVERED, 1, 1);
assertLine("missedwhile", ICounter.NOT_COVERED);
// 5. Always true while block
assertLine("whiletrue", ICounter.FULLY_COVERED, 1, 1);
// 6. Executed while block
assertLine("whiletruefalse", ICounter.FULLY_COVERED, 0, 2);
assertLine("executedwhile", ICounter.FULLY_COVERED);
// 7. Executed do while block
assertLine("executeddowhile", ICounter.FULLY_COVERED);
assertLine("executeddowhilefalse", ICounter.FULLY_COVERED, 1, 1);
// 8. Missed for block
assertLine("missedforincrementer", ICounter.PARTLY_COVERED, 1, 1);
assertLine("missedfor", ICounter.NOT_COVERED);
// 9. Executed for block
assertLine("executedforincrementer", ICounter.FULLY_COVERED, 0, 2);
assertLine("executedfor", ICounter.FULLY_COVERED);
// 10. Missed for each block
assertLine("missedforeachincrementer", ICounter.PARTLY_COVERED, 1, 1);
assertLine("missedforeach", ICounter.NOT_COVERED);
// 11. Executed for each block
assertLine("executedforeachincrementer", ICounter.FULLY_COVERED, 0, 2);
assertLine("executedforeach", ICounter.FULLY_COVERED);
// 12. Table switch with hit
assertLine("tswitch1", ICounter.FULLY_COVERED, 3, 1);
assertLine("tswitch1case1", ICounter.NOT_COVERED);
assertLine("tswitch1case2", ICounter.FULLY_COVERED);
assertLine("tswitch1case3", ICounter.NOT_COVERED);
assertLine("tswitch1default", ICounter.NOT_COVERED);
// 13. Continued table switch with hit
assertLine("tswitch2", ICounter.FULLY_COVERED, 3, 1);
assertLine("tswitch2case1", ICounter.NOT_COVERED);
assertLine("tswitch2case2", ICounter.FULLY_COVERED);
assertLine("tswitch2case3", ICounter.FULLY_COVERED);
assertLine("tswitch2default", ICounter.FULLY_COVERED);
// 14. Table switch without hit
assertLine("tswitch2", ICounter.FULLY_COVERED, 3, 1);
assertLine("tswitch3case1", ICounter.NOT_COVERED);
assertLine("tswitch3case2", ICounter.NOT_COVERED);
assertLine("tswitch3case3", ICounter.NOT_COVERED);
assertLine("tswitch3default", ICounter.FULLY_COVERED);
// 15. Lookup switch with hit
assertLine("lswitch1", ICounter.FULLY_COVERED, 3, 1);
assertLine("lswitch1case1", ICounter.NOT_COVERED);
assertLine("lswitch1case2", ICounter.FULLY_COVERED);
assertLine("lswitch1case3", ICounter.NOT_COVERED);
assertLine("lswitch1default", ICounter.NOT_COVERED);
// 16. Continued lookup switch with hit
assertLine("lswitch2", ICounter.FULLY_COVERED, 3, 1);
assertLine("lswitch2case1", ICounter.NOT_COVERED);
assertLine("lswitch2case2", ICounter.FULLY_COVERED);
assertLine("lswitch2case3", ICounter.FULLY_COVERED);
assertLine("lswitch2default", ICounter.FULLY_COVERED);
// 17. Lookup switch without hit
assertLine("lswitch3", ICounter.FULLY_COVERED, 3, 1);
assertLine("lswitch3case1", ICounter.NOT_COVERED);
assertLine("lswitch3case2", ICounter.NOT_COVERED);
assertLine("lswitch3case3", ICounter.NOT_COVERED);
assertLine("lswitch3default", ICounter.FULLY_COVERED);
// 18. Break statement
assertLine("executedbreak", ICounter.FULLY_COVERED);
assertLine("missedafterbreak", ICounter.NOT_COVERED);
// 19. Continue statement
assertLine("executedcontinue", ICounter.FULLY_COVERED);
assertLine("missedaftercontinue", ICounter.NOT_COVERED);
// 20. Conditional return statement
assertLine("conditionalreturn", ICounter.FULLY_COVERED);
assertLine("afterconditionalreturn", ICounter.NOT_COVERED);
// 21. Implicit return
assertLine("implicitreturn", ICounter.FULLY_COVERED);
// 22. Explicit return
assertLine("explicitreturn", ICounter.FULLY_COVERED);
assertLine("afterexplicitreturn", ICounter.EMPTY);
}
}