1e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov/******************************************************************************* 2b9d1b54e300318b470d9fedccc69d75187016444Evgeny Mandrikov * Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors 3e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * All rights reserved. This program and the accompanying materials 4e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * are made available under the terms of the Eclipse Public License v1.0 5e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * which accompanies this distribution, and is available at 6e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * http://www.eclipse.org/legal/epl-v10.html 7e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * 8e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * Contributors: 9e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * Marc R. Hoffmann - initial API and implementation 10e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * 11e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov *******************************************************************************/ 12e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikovpackage org.jacoco.core.internal.flow; 13e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov 14e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikovimport static org.junit.Assert.assertEquals; 15e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikovimport static org.junit.Assert.assertFalse; 16e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikovimport static org.junit.Assert.assertNull; 17e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikovimport static org.junit.Assert.assertSame; 18e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikovimport static org.junit.Assert.assertTrue; 19e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov 20e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikovimport org.junit.Before; 21e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikovimport org.junit.Test; 22e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikovimport org.objectweb.asm.Label; 23eaef191fe12fc5abc81435016dbbd69cb55d1f68Evgeny Mandrikovimport org.objectweb.asm.Opcodes; 24eaef191fe12fc5abc81435016dbbd69cb55d1f68Evgeny Mandrikovimport org.objectweb.asm.tree.InsnNode; 25e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov 26e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov/** 27e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * Unit tests for {@link LabelInfoTest}. 28e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov */ 29e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikovpublic class LabelInfoTest { 30e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov 31e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov private Label label; 32e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov 33e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov @Before 34e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov public void setup() { 35e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov label = new Label(); 36e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov } 37e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov 38e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov @Test 39e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov public void testDefaults() { 40e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov assertFalse(LabelInfo.isMultiTarget(label)); 41e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov assertFalse(LabelInfo.isSuccessor(label)); 42873114568ee148ea2e15cd036d57bf7b43ba154dMarc R. Hoffmann assertFalse(LabelInfo.isMethodInvocationLine(label)); 43e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov assertFalse(LabelInfo.isDone(label)); 44e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov assertEquals(LabelInfo.NO_PROBE, LabelInfo.getProbeId(label)); 45e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov assertNull(LabelInfo.getIntermediateLabel(label)); 46e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov assertNull(LabelInfo.getInstruction(label)); 47e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov } 48e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov 49e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov @Test 50e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov public void testOtherInfoObject() { 51e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov label.info = new Object(); 52e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov assertFalse(LabelInfo.isSuccessor(label)); 53e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov } 54e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov 55e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov @Test 56e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov public void testSuccessor() { 57e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov LabelInfo.setSuccessor(label); 58e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov assertFalse(LabelInfo.isMultiTarget(label)); 59e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov assertTrue(LabelInfo.isSuccessor(label)); 60e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov } 61e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov 62e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov @Test 63e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov public void testMultiTarget1() { 64e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov LabelInfo.setTarget(label); 65e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov assertFalse(LabelInfo.isMultiTarget(label)); 66e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov assertFalse(LabelInfo.isSuccessor(label)); 67e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov 68e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov LabelInfo.setTarget(label); 69e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov assertTrue(LabelInfo.isMultiTarget(label)); 70e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov assertFalse(LabelInfo.isSuccessor(label)); 71e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov } 72e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov 73e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov @Test 74e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov public void testMultiTarget2() { 75e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov LabelInfo.setSuccessor(label); 76e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov assertFalse(LabelInfo.isMultiTarget(label)); 77e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov assertTrue(LabelInfo.isSuccessor(label)); 78e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov 79e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov LabelInfo.setTarget(label); 80e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov assertTrue(LabelInfo.isMultiTarget(label)); 81e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov assertTrue(LabelInfo.isSuccessor(label)); 82e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov } 83e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov 84e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov @Test 85e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov public void testMultiTarget3() { 86e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov LabelInfo.setTarget(label); 87e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov assertFalse(LabelInfo.isMultiTarget(label)); 88e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov assertFalse(LabelInfo.isSuccessor(label)); 89e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov 90e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov LabelInfo.setSuccessor(label); 91e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov assertTrue(LabelInfo.isMultiTarget(label)); 92e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov assertTrue(LabelInfo.isSuccessor(label)); 93e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov } 94e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov 95e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov @Test 96873114568ee148ea2e15cd036d57bf7b43ba154dMarc R. Hoffmann public void testMethodInvocationLine() { 97873114568ee148ea2e15cd036d57bf7b43ba154dMarc R. Hoffmann LabelInfo.setMethodInvocationLine(label); 98873114568ee148ea2e15cd036d57bf7b43ba154dMarc R. Hoffmann assertTrue(LabelInfo.isMethodInvocationLine(label)); 99873114568ee148ea2e15cd036d57bf7b43ba154dMarc R. Hoffmann } 100873114568ee148ea2e15cd036d57bf7b43ba154dMarc R. Hoffmann 101873114568ee148ea2e15cd036d57bf7b43ba154dMarc R. Hoffmann @Test 102873114568ee148ea2e15cd036d57bf7b43ba154dMarc R. Hoffmann public void testNeedsProbe() { 103873114568ee148ea2e15cd036d57bf7b43ba154dMarc R. Hoffmann testNeedsProbe(false, false, false, false); 104873114568ee148ea2e15cd036d57bf7b43ba154dMarc R. Hoffmann testNeedsProbe(true, false, false, false); 105873114568ee148ea2e15cd036d57bf7b43ba154dMarc R. Hoffmann testNeedsProbe(false, true, false, false); 106873114568ee148ea2e15cd036d57bf7b43ba154dMarc R. Hoffmann testNeedsProbe(true, true, false, false); 107873114568ee148ea2e15cd036d57bf7b43ba154dMarc R. Hoffmann testNeedsProbe(false, false, true, false); 108873114568ee148ea2e15cd036d57bf7b43ba154dMarc R. Hoffmann testNeedsProbe(true, false, true, true); 109873114568ee148ea2e15cd036d57bf7b43ba154dMarc R. Hoffmann testNeedsProbe(false, true, true, true); 110873114568ee148ea2e15cd036d57bf7b43ba154dMarc R. Hoffmann testNeedsProbe(true, true, true, true); 111873114568ee148ea2e15cd036d57bf7b43ba154dMarc R. Hoffmann } 112873114568ee148ea2e15cd036d57bf7b43ba154dMarc R. Hoffmann 113873114568ee148ea2e15cd036d57bf7b43ba154dMarc R. Hoffmann private void testNeedsProbe(boolean multitarget, 114873114568ee148ea2e15cd036d57bf7b43ba154dMarc R. Hoffmann boolean methodinvocationline, boolean successor, boolean expected) { 115873114568ee148ea2e15cd036d57bf7b43ba154dMarc R. Hoffmann if (multitarget) { 116873114568ee148ea2e15cd036d57bf7b43ba154dMarc R. Hoffmann LabelInfo.setTarget(label); 117873114568ee148ea2e15cd036d57bf7b43ba154dMarc R. Hoffmann LabelInfo.setTarget(label); 118873114568ee148ea2e15cd036d57bf7b43ba154dMarc R. Hoffmann } 119873114568ee148ea2e15cd036d57bf7b43ba154dMarc R. Hoffmann if (methodinvocationline) { 120873114568ee148ea2e15cd036d57bf7b43ba154dMarc R. Hoffmann LabelInfo.setMethodInvocationLine(label); 121873114568ee148ea2e15cd036d57bf7b43ba154dMarc R. Hoffmann } 122873114568ee148ea2e15cd036d57bf7b43ba154dMarc R. Hoffmann if (successor) { 123873114568ee148ea2e15cd036d57bf7b43ba154dMarc R. Hoffmann LabelInfo.setSuccessor(label); 124873114568ee148ea2e15cd036d57bf7b43ba154dMarc R. Hoffmann } 125873114568ee148ea2e15cd036d57bf7b43ba154dMarc R. Hoffmann assertTrue(expected == LabelInfo.needsProbe(label)); 126873114568ee148ea2e15cd036d57bf7b43ba154dMarc R. Hoffmann 127873114568ee148ea2e15cd036d57bf7b43ba154dMarc R. Hoffmann // Reset: 128873114568ee148ea2e15cd036d57bf7b43ba154dMarc R. Hoffmann label = new Label(); 129873114568ee148ea2e15cd036d57bf7b43ba154dMarc R. Hoffmann } 130873114568ee148ea2e15cd036d57bf7b43ba154dMarc R. Hoffmann 131873114568ee148ea2e15cd036d57bf7b43ba154dMarc R. Hoffmann @Test 132e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov public void testSetResetDone1() { 133e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov LabelInfo.setDone(label); 134e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov assertTrue(LabelInfo.isDone(label)); 135e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov 136e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov LabelInfo.resetDone(label); 137e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov assertFalse(LabelInfo.isDone(label)); 138e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov } 139e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov 140e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov @Test 141e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov public void testSetResetDone2() { 142e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov LabelInfo.setDone(label); 143e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov assertTrue(LabelInfo.isDone(label)); 144e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov 145e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov LabelInfo.resetDone(new Label[] { label, new Label() }); 146e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov assertFalse(LabelInfo.isDone(label)); 147e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov } 148e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov 149e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov @Test 150e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov public void testSetProbeId() { 151e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov LabelInfo.setProbeId(label, 123); 152e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov assertEquals(123, LabelInfo.getProbeId(label)); 153e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov } 154e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov 155e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov @Test 156e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov public void testSetIntermediateLabel() { 157e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov final Label i = new Label(); 158e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov LabelInfo.setIntermediateLabel(label, i); 159e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov assertSame(i, LabelInfo.getIntermediateLabel(label)); 160e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov } 161e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov 162e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov @Test 163e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov public void testSetInstruction() { 164eaef191fe12fc5abc81435016dbbd69cb55d1f68Evgeny Mandrikov final Instruction instruction = new Instruction( 165eaef191fe12fc5abc81435016dbbd69cb55d1f68Evgeny Mandrikov new InsnNode(Opcodes.NOP), 123); 166e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov LabelInfo.setInstruction(label, instruction); 167e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov assertSame(instruction, LabelInfo.getInstruction(label)); 168e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov } 169e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov 170e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov} 171