blob: 5c77fd27eb88dc58b082954e9a37c95ad24a491d [file] [log] [blame]
/*
* 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);
}
}