| /* |
| * Copyright (c) 2007 Mockito contributors |
| * This program is made available under the terms of the MIT License. |
| */ |
| |
| package org.mockito.internal.exceptions.stacktrace; |
| |
| import org.assertj.core.api.Assertions; |
| import org.junit.Test; |
| import org.mockito.exceptions.base.TraceBuilder; |
| import org.mockitoutil.TestBase; |
| |
| import static junit.framework.TestCase.assertEquals; |
| import static org.mockitoutil.Conditions.onlyThoseClasses; |
| |
| public class StackTraceFilterTest extends TestBase { |
| |
| private final StackTraceFilter filter = new StackTraceFilter(); |
| |
| @Test |
| public void shouldFilterOutCglibGarbage() { |
| StackTraceElement[] t = new TraceBuilder().classes( |
| "MockitoExampleTest", |
| "List$$EnhancerByMockitoWithCGLIB$$2c406024" |
| ).toTraceArray(); |
| |
| StackTraceElement[] filtered = filter.filter(t, false); |
| |
| Assertions.assertThat(filtered).has(onlyThoseClasses("MockitoExampleTest")); |
| } |
| |
| @Test |
| public void shouldFilterOutByteBuddyGarbage() { |
| StackTraceElement[] t = new TraceBuilder().classes( |
| "MockitoExampleTest", |
| "org.testcase.MockedClass$MockitoMock$1882975947.doSomething(Unknown Source)" |
| ).toTraceArray(); |
| |
| StackTraceElement[] filtered = filter.filter(t, false); |
| |
| Assertions.assertThat(filtered).has(onlyThoseClasses("MockitoExampleTest")); |
| } |
| |
| |
| @Test |
| public void shouldFilterOutMockitoPackage() { |
| StackTraceElement[] t = new TraceBuilder().classes( |
| "org.test.MockitoSampleTest", |
| "org.mockito.Mockito" |
| ).toTraceArray(); |
| |
| StackTraceElement[] filtered = filter.filter(t, false); |
| |
| Assertions.assertThat(filtered).has(onlyThoseClasses("org.test.MockitoSampleTest")); |
| } |
| |
| @Test |
| public void shouldNotFilterOutTracesMiddleGoodTraces() { |
| StackTraceElement[] t = new TraceBuilder().classes( |
| "org.test.MockitoSampleTest", |
| "org.test.TestSupport", |
| "org.mockito.Mockito", |
| "org.test.TestSupport", |
| "org.mockito.Mockito" |
| ).toTraceArray(); |
| |
| StackTraceElement[] filtered = filter.filter(t, false); |
| |
| Assertions.assertThat(filtered).has(onlyThoseClasses("org.test.TestSupport", "org.test.TestSupport", "org.test.MockitoSampleTest")); |
| } |
| |
| @Test |
| public void shouldKeepRunners() { |
| StackTraceElement[] t = new TraceBuilder().classes( |
| "org.mockito.runners.Runner", |
| "junit.stuff", |
| "org.test.MockitoSampleTest", |
| "org.mockito.Mockito" |
| ).toTraceArray(); |
| |
| StackTraceElement[] filtered = filter.filter(t, false); |
| |
| Assertions.assertThat(filtered).has(onlyThoseClasses("org.test.MockitoSampleTest", "junit.stuff", "org.mockito.runners.Runner")); |
| } |
| |
| @Test |
| public void shouldNotFilterElementsAboveMockitoJUnitRule() { |
| StackTraceElement[] t = new TraceBuilder().classes( |
| "org.mockito.internal.junit.JUnitRule$1.evaluate(JUnitRule.java:16)", |
| "org.mockito.runners.Runner", |
| "junit.stuff", |
| "org.test.MockitoSampleTest", |
| "org.mockito.internal.MockitoCore.verifyNoMoreInteractions", |
| "org.mockito.internal.debugging.LocationImpl" |
| ).toTraceArray(); |
| |
| StackTraceElement[] filtered = filter.filter(t, false); |
| |
| Assertions.assertThat(filtered).has(onlyThoseClasses("org.test.MockitoSampleTest", "junit.stuff", "org.mockito.runners.Runner","org.mockito.internal.junit.JUnitRule$1.evaluate(JUnitRule.java:16)")); |
| } |
| |
| @Test |
| public void shouldKeepInternalRunners() { |
| StackTraceElement[] t = new TraceBuilder().classes( |
| "org.mockito.internal.runners.Runner", |
| "org.test.MockitoSampleTest" |
| ).toTraceArray(); |
| |
| StackTraceElement[] filtered = filter.filter(t, false); |
| |
| Assertions.assertThat(filtered).has(onlyThoseClasses("org.test.MockitoSampleTest", "org.mockito.internal.runners.Runner")); |
| } |
| |
| @Test |
| public void shouldStartFilteringAndKeepTop() { |
| //given |
| StackTraceElement[] t = new TraceBuilder().classes( |
| "org.test.Good", |
| "org.mockito.internal.Bad", |
| "org.test.MockitoSampleTest" |
| ).toTraceArray(); |
| |
| //when |
| StackTraceElement[] filtered = filter.filter(t, true); |
| |
| //then |
| Assertions.assertThat(filtered).has(onlyThoseClasses("org.test.MockitoSampleTest", "org.test.Good")); |
| } |
| |
| @Test |
| public void shouldKeepGoodTraceFromTheTopBecauseRealImplementationsOfSpiesSometimesThrowExceptions() { |
| StackTraceElement[] t = new TraceBuilder().classes( |
| "org.good.Trace", |
| "org.yet.another.good.Trace", |
| "org.mockito.internal.to.be.Filtered", |
| "org.test.MockitoSampleTest" |
| ).toTraceArray(); |
| |
| StackTraceElement[] filtered = filter.filter(t, true); |
| |
| Assertions.assertThat(filtered).has(onlyThoseClasses( |
| "org.test.MockitoSampleTest", |
| "org.yet.another.good.Trace", |
| "org.good.Trace" |
| )); |
| } |
| |
| @Test |
| public void shouldReturnEmptyArrayWhenInputIsEmpty() throws Exception { |
| //when |
| StackTraceElement[] filtered = filter.filter(new StackTraceElement[0], false); |
| //then |
| assertEquals(0, filtered.length); |
| } |
| } |