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