Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[JSTEP-10] Use Jackson testutils and remove /failure test exclusion #156

Merged
merged 4 commits into from
Jan 26, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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