Skip to content

Commit

Permalink
[JSTEP-10] Use Jackson testutils and remove /failure test exclusion (
Browse files Browse the repository at this point in the history
  • Loading branch information
JooHyukKim authored Jan 26, 2025
1 parent e5ba92a commit b530a6b
Show file tree
Hide file tree
Showing 6 changed files with 103 additions and 7 deletions.
5 changes: 0 additions & 5 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -121,11 +121,6 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<excludes>
<exclude>com/fasterxml/jackson/**/failing/*.java</exclude>
</excludes>
</configuration>
</plugin>
<!-- 19-Mar-2019, tatu: Add rudimentary JDK9+ module info. To build with JDK 8
will have to use `moduleInfoFile` as anything else requires JDK 9+
Expand Down
3 changes: 2 additions & 1 deletion release-notes/VERSION-2.x
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@ Project: jackson-datatype-joda

2.19.0 (not yet released)

-
#152: Unify testing structure/tools [JSTEP-10]
(contributed by Joo-Hyuk K)

2.18.2 (27-Nov-2024)
2.18.1 (28-Oct-2024)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package com.fasterxml.jackson.datatype.joda.testutil.failure;

import java.lang.annotation.*;

import org.junit.jupiter.api.extension.ExtendWith;

/**
* <p>
* Annotation used to indicate that a JUnit-5 based tests method is expected to fail.
*
* <p>
* When a test method is annotated with {@code @JacksonTestFailureExpected}, the
* {@link JacksonTestFailureExpectedInterceptor} will intercept the test execution.
* If the test passes, which is an unexpected behavior, the interceptor will throw an exception to fail the test,
* indicating that the test was expected to fail but didn't.
* </p>
*
* <h3>Usage Example:</h3>
*
* <pre><code>
*
* &#64;Test
* &#64;JacksonTestFailureExpected
* public void testFeatureNotYetImplemented() {
* // Test code that is expected to fail
* }
* }
* </code></pre>
*
* <p>
*
* @since 2.19
*/
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@ExtendWith(JacksonTestFailureExpectedInterceptor.class)
public @interface JacksonTestFailureExpected { }
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package com.fasterxml.jackson.datatype.joda.testutil.failure;

import java.lang.reflect.Method;

import org.junit.jupiter.api.extension.*;

/**
* Custom {@link InvocationInterceptor} that intercepts test method invocation.
* To pass the test ***only if*** test fails with an exception, and fail the test otherwise.
*
* @since 2.19
*/
public class JacksonTestFailureExpectedInterceptor
implements InvocationInterceptor
{
@Override
public void interceptTestMethod(Invocation<Void> invocation,
ReflectiveInvocationContext<Method> invocationContext, ExtensionContext extensionContext)
throws Throwable
{
try {
invocation.proceed();
} catch (Throwable t) {
// do-nothing, we do expect an exception
return;
}
handleUnexpectePassingTest(invocationContext);
}

private void handleUnexpectePassingTest(ReflectiveInvocationContext<Method> invocationContext) {
// Collect information we need
Object targetClass = invocationContext.getTargetClass();
Object testMethod = invocationContext.getExecutable().getName();
//List<Object> arguments = invocationContext.getArguments();

// Create message
String message = String.format("Test method %s.%s() passed, but should have failed", targetClass, testMethod);

// throw exception
throw new JacksonTestShouldFailException(message);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.fasterxml.jackson.datatype.joda.testutil.failure;

/**
* Exception used to alert that a test is passing, but should be failing.
*
* WARNING : This only for test code, and should never be thrown from production code.
*
* @since 2.19
*/
public class JacksonTestShouldFailException
extends RuntimeException
{
private static final long serialVersionUID = 1L;

public JacksonTestShouldFailException(String msg) {
super(msg);
}
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
package com.fasterxml.jackson.datatype.joda.failing;
package com.fasterxml.jackson.datatype.joda.tofix;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;

import com.fasterxml.jackson.datatype.joda.JodaTestBase;
import com.fasterxml.jackson.datatype.joda.testutil.failure.JacksonTestFailureExpected;

import org.joda.time.*;

Expand All @@ -15,6 +16,7 @@
public class DateTimeSerializationWithOffsets146Test extends JodaTestBase
{
// [datatype-joda#146]
@JacksonTestFailureExpected
@Test
public void testLocalDateSerDefault() throws Exception
{
Expand Down

0 comments on commit b530a6b

Please sign in to comment.