blob: b2fd0b5dffa975c56adeca6e30b5d12afecdf756 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009, 2017 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.internal.flow;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
import org.junit.Before;
import org.junit.Test;
import org.objectweb.asm.Label;
import org.objectweb.asm.Opcodes;
import org.objectweb.asm.tree.InsnNode;
/**
* Unit tests for {@link LabelInfoTest}.
*/
public class LabelInfoTest {
private Label label;
@Before
public void setup() {
label = new Label();
}
@Test
public void testDefaults() {
assertFalse(LabelInfo.isMultiTarget(label));
assertFalse(LabelInfo.isSuccessor(label));
assertFalse(LabelInfo.isMethodInvocationLine(label));
assertFalse(LabelInfo.isDone(label));
assertEquals(LabelInfo.NO_PROBE, LabelInfo.getProbeId(label));
assertNull(LabelInfo.getIntermediateLabel(label));
assertNull(LabelInfo.getInstruction(label));
}
@Test
public void testOtherInfoObject() {
label.info = new Object();
assertFalse(LabelInfo.isSuccessor(label));
}
@Test
public void testSuccessor() {
LabelInfo.setSuccessor(label);
assertFalse(LabelInfo.isMultiTarget(label));
assertTrue(LabelInfo.isSuccessor(label));
}
@Test
public void testMultiTarget1() {
LabelInfo.setTarget(label);
assertFalse(LabelInfo.isMultiTarget(label));
assertFalse(LabelInfo.isSuccessor(label));
LabelInfo.setTarget(label);
assertTrue(LabelInfo.isMultiTarget(label));
assertFalse(LabelInfo.isSuccessor(label));
}
@Test
public void testMultiTarget2() {
LabelInfo.setSuccessor(label);
assertFalse(LabelInfo.isMultiTarget(label));
assertTrue(LabelInfo.isSuccessor(label));
LabelInfo.setTarget(label);
assertTrue(LabelInfo.isMultiTarget(label));
assertTrue(LabelInfo.isSuccessor(label));
}
@Test
public void testMultiTarget3() {
LabelInfo.setTarget(label);
assertFalse(LabelInfo.isMultiTarget(label));
assertFalse(LabelInfo.isSuccessor(label));
LabelInfo.setSuccessor(label);
assertTrue(LabelInfo.isMultiTarget(label));
assertTrue(LabelInfo.isSuccessor(label));
}
@Test
public void testMethodInvocationLine() {
LabelInfo.setMethodInvocationLine(label);
assertTrue(LabelInfo.isMethodInvocationLine(label));
}
@Test
public void testNeedsProbe() {
testNeedsProbe(false, false, false, false);
testNeedsProbe(true, false, false, false);
testNeedsProbe(false, true, false, false);
testNeedsProbe(true, true, false, false);
testNeedsProbe(false, false, true, false);
testNeedsProbe(true, false, true, true);
testNeedsProbe(false, true, true, true);
testNeedsProbe(true, true, true, true);
}
private void testNeedsProbe(boolean multitarget,
boolean methodinvocationline, boolean successor, boolean expected) {
if (multitarget) {
LabelInfo.setTarget(label);
LabelInfo.setTarget(label);
}
if (methodinvocationline) {
LabelInfo.setMethodInvocationLine(label);
}
if (successor) {
LabelInfo.setSuccessor(label);
}
assertTrue(expected == LabelInfo.needsProbe(label));
// Reset:
label = new Label();
}
@Test
public void testSetResetDone1() {
LabelInfo.setDone(label);
assertTrue(LabelInfo.isDone(label));
LabelInfo.resetDone(label);
assertFalse(LabelInfo.isDone(label));
}
@Test
public void testSetResetDone2() {
LabelInfo.setDone(label);
assertTrue(LabelInfo.isDone(label));
LabelInfo.resetDone(new Label[] { label, new Label() });
assertFalse(LabelInfo.isDone(label));
}
@Test
public void testSetProbeId() {
LabelInfo.setProbeId(label, 123);
assertEquals(123, LabelInfo.getProbeId(label));
}
@Test
public void testSetIntermediateLabel() {
final Label i = new Label();
LabelInfo.setIntermediateLabel(label, i);
assertSame(i, LabelInfo.getIntermediateLabel(label));
}
@Test
public void testSetInstruction() {
final Instruction instruction = new Instruction(
new InsnNode(Opcodes.NOP), 123);
LabelInfo.setInstruction(label, instruction);
assertSame(instruction, LabelInfo.getInstruction(label));
}
}