1e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov/******************************************************************************* 2e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov * Copyright (c) 2009, 2017 Mountainminds GmbH & Co. KG and Contributors 3e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov * All rights reserved. This program and the accompanying materials 4e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov * are made available under the terms of the Eclipse Public License v1.0 5e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov * which accompanies this distribution, and is available at 6e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov * http://www.eclipse.org/legal/epl-v10.html 7e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov * 8e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov * Contributors: 9e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov * Evgeny Mandrikov - initial API and implementation 10e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov * 11e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov *******************************************************************************/ 12e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikovpackage org.jacoco.core.internal.analysis.filter; 13e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov 14e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikovimport static org.junit.Assert.assertEquals; 15e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikovimport static org.junit.Assert.assertNull; 16e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov 17e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikovimport org.jacoco.core.internal.instr.InstrSupport; 18e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikovimport org.junit.Test; 19e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikovimport org.objectweb.asm.Opcodes; 20e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikovimport org.objectweb.asm.tree.AbstractInsnNode; 21e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikovimport org.objectweb.asm.tree.MethodNode; 22e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov 23e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikovpublic class EnumFilterTest implements IFilterOutput { 24e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov 25e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov private final EnumFilter filter = new EnumFilter(); 26e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov 27e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov private AbstractInsnNode fromInclusive; 28e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov private AbstractInsnNode toInclusive; 29e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov 30e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov @Test 31e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov public void testValues() { 32e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov final MethodNode m = new MethodNode(InstrSupport.ASM_API_VERSION, 0, 33e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov "values", "()[LFoo;", null, null); 34e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov m.visitInsn(Opcodes.NOP); 35e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov 36e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov filter.filter("Foo", "java/lang/Enum", m, this); 37e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov 38e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov assertEquals(m.instructions.getFirst(), fromInclusive); 39e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov assertEquals(m.instructions.getLast(), toInclusive); 40e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov } 41e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov 42e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov @Test 43e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov public void testNonValues() { 44e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov final MethodNode m = new MethodNode(InstrSupport.ASM_API_VERSION, 0, 45e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov "values", "()V", null, null); 46e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov m.visitInsn(Opcodes.NOP); 47e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov 48e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov filter.filter("Foo", "java/lang/Enum", m, this); 49e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov 50e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov assertNull(fromInclusive); 51e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov assertNull(toInclusive); 52e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov } 53e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov 54e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov @Test 55e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov public void testValueOf() { 56e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov final MethodNode m = new MethodNode(InstrSupport.ASM_API_VERSION, 0, 57e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov "valueOf", "(Ljava/lang/String;)LFoo;", null, null); 58e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov m.visitInsn(Opcodes.NOP); 59e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov 60e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov filter.filter("Foo", "java/lang/Enum", m, this); 61e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov 62e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov assertEquals(m.instructions.getFirst(), fromInclusive); 63e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov assertEquals(m.instructions.getLast(), toInclusive); 64e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov } 65e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov 66e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov @Test 67e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov public void testNonValueOf() { 68e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov final MethodNode m = new MethodNode(InstrSupport.ASM_API_VERSION, 0, 69e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov "valueOf", "()V", null, null); 70e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov m.visitInsn(Opcodes.NOP); 71e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov 72e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov filter.filter("Foo", "java/lang/Enum", m, this); 73e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov 74e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov assertNull(fromInclusive); 75e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov assertNull(toInclusive); 76e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov } 77e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov 78e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov @Test 79e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov public void testNonEnum() { 80e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov final MethodNode m = new MethodNode(InstrSupport.ASM_API_VERSION, 0, 81e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov "values", "()[LFoo;", null, null); 82e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov m.visitInsn(Opcodes.NOP); 83e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov 84e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov filter.filter("Foo", "java/lang/Object", m, this); 85e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov 86e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov assertNull(fromInclusive); 87e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov assertNull(toInclusive); 88e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov } 89e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov 90e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov public void ignore(final AbstractInsnNode fromInclusive, 91e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov final AbstractInsnNode toInclusive) { 92e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov assertNull(this.fromInclusive); 93e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov this.fromInclusive = fromInclusive; 94e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov this.toInclusive = toInclusive; 95e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov } 96e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov 97e94c7af58000b3421bc63a252ee054c08a863568Evgeny Mandrikov} 98