1 /******************************************************************************* 2 * Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors 3 * All rights reserved. This program and the accompanying materials 4 * are made available under the terms of the Eclipse Public License v1.0 5 * which accompanies this distribution, and is available at 6 * http://www.eclipse.org/legal/epl-v10.html 7 * 8 * Contributors: 9 * Marc R. Hoffmann - initial API and implementation 10 * 11 *******************************************************************************/ 12 package org.jacoco.core.internal.flow; 13 14 import static org.junit.Assert.assertEquals; 15 import static org.junit.Assert.assertFalse; 16 import static org.junit.Assert.assertNull; 17 import static org.junit.Assert.assertSame; 18 import static org.junit.Assert.assertTrue; 19 20 import org.junit.Before; 21 import org.junit.Test; 22 import org.objectweb.asm.Label; 23 import org.objectweb.asm.Opcodes; 24 import org.objectweb.asm.tree.InsnNode; 25 26 /** 27 * Unit tests for {@link LabelInfoTest}. 28 */ 29 public class LabelInfoTest { 30 31 private Label label; 32 33 @Before 34 public void setup() { 35 label = new Label(); 36 } 37 38 @Test 39 public void testDefaults() { 40 assertFalse(LabelInfo.isMultiTarget(label)); 41 assertFalse(LabelInfo.isSuccessor(label)); 42 assertFalse(LabelInfo.isMethodInvocationLine(label)); 43 assertFalse(LabelInfo.isDone(label)); 44 assertEquals(LabelInfo.NO_PROBE, LabelInfo.getProbeId(label)); 45 assertNull(LabelInfo.getIntermediateLabel(label)); 46 assertNull(LabelInfo.getInstruction(label)); 47 } 48 49 @Test 50 public void testOtherInfoObject() { 51 label.info = new Object(); 52 assertFalse(LabelInfo.isSuccessor(label)); 53 } 54 55 @Test 56 public void testSuccessor() { 57 LabelInfo.setSuccessor(label); 58 assertFalse(LabelInfo.isMultiTarget(label)); 59 assertTrue(LabelInfo.isSuccessor(label)); 60 } 61 62 @Test 63 public void testMultiTarget1() { 64 LabelInfo.setTarget(label); 65 assertFalse(LabelInfo.isMultiTarget(label)); 66 assertFalse(LabelInfo.isSuccessor(label)); 67 68 LabelInfo.setTarget(label); 69 assertTrue(LabelInfo.isMultiTarget(label)); 70 assertFalse(LabelInfo.isSuccessor(label)); 71 } 72 73 @Test 74 public void testMultiTarget2() { 75 LabelInfo.setSuccessor(label); 76 assertFalse(LabelInfo.isMultiTarget(label)); 77 assertTrue(LabelInfo.isSuccessor(label)); 78 79 LabelInfo.setTarget(label); 80 assertTrue(LabelInfo.isMultiTarget(label)); 81 assertTrue(LabelInfo.isSuccessor(label)); 82 } 83 84 @Test 85 public void testMultiTarget3() { 86 LabelInfo.setTarget(label); 87 assertFalse(LabelInfo.isMultiTarget(label)); 88 assertFalse(LabelInfo.isSuccessor(label)); 89 90 LabelInfo.setSuccessor(label); 91 assertTrue(LabelInfo.isMultiTarget(label)); 92 assertTrue(LabelInfo.isSuccessor(label)); 93 } 94 95 @Test 96 public void testMethodInvocationLine() { 97 LabelInfo.setMethodInvocationLine(label); 98 assertTrue(LabelInfo.isMethodInvocationLine(label)); 99 } 100 101 @Test 102 public void testNeedsProbe() { 103 testNeedsProbe(false, false, false, false); 104 testNeedsProbe(true, false, false, false); 105 testNeedsProbe(false, true, false, false); 106 testNeedsProbe(true, true, false, false); 107 testNeedsProbe(false, false, true, false); 108 testNeedsProbe(true, false, true, true); 109 testNeedsProbe(false, true, true, true); 110 testNeedsProbe(true, true, true, true); 111 } 112 113 private void testNeedsProbe(boolean multitarget, 114 boolean methodinvocationline, boolean successor, boolean expected) { 115 if (multitarget) { 116 LabelInfo.setTarget(label); 117 LabelInfo.setTarget(label); 118 } 119 if (methodinvocationline) { 120 LabelInfo.setMethodInvocationLine(label); 121 } 122 if (successor) { 123 LabelInfo.setSuccessor(label); 124 } 125 assertTrue(expected == LabelInfo.needsProbe(label)); 126 127 // Reset: 128 label = new Label(); 129 } 130 131 @Test 132 public void testSetResetDone1() { 133 LabelInfo.setDone(label); 134 assertTrue(LabelInfo.isDone(label)); 135 136 LabelInfo.resetDone(label); 137 assertFalse(LabelInfo.isDone(label)); 138 } 139 140 @Test 141 public void testSetResetDone2() { 142 LabelInfo.setDone(label); 143 assertTrue(LabelInfo.isDone(label)); 144 145 LabelInfo.resetDone(new Label[] { label, new Label() }); 146 assertFalse(LabelInfo.isDone(label)); 147 } 148 149 @Test 150 public void testSetProbeId() { 151 LabelInfo.setProbeId(label, 123); 152 assertEquals(123, LabelInfo.getProbeId(label)); 153 } 154 155 @Test 156 public void testSetIntermediateLabel() { 157 final Label i = new Label(); 158 LabelInfo.setIntermediateLabel(label, i); 159 assertSame(i, LabelInfo.getIntermediateLabel(label)); 160 } 161 162 @Test 163 public void testSetInstruction() { 164 final Instruction instruction = new Instruction( 165 new InsnNode(Opcodes.NOP), 123); 166 LabelInfo.setInstruction(label, instruction); 167 assertSame(instruction, LabelInfo.getInstruction(label)); 168 } 169 170 } 171