Skip to content

Conversation

@Bukama
Copy link
Contributor

@Bukama Bukama commented Nov 7, 2025

This is a first draft (cause I'm getting tired and will pause for today) of passing the @DefaultLocale and @DefaultTimezone extensions to JUnit.

Points I have to check (feel free to gimme some hints)

  • How to use JUnits internal testkit
  • Why checkstyle fails just right after spotless:apply goal was run
  • That ArchUnit rules are in place

I hereby agree to the terms of the JUnit Contributor License Agreement.


Definition of Done

@sbrannen sbrannen linked an issue Nov 8, 2025 that may be closed by this pull request
@sbrannen sbrannen changed the title Initial draft for providing DefaultLocale and DefaulTimezone extensions Initial draft for providing @DefaultLocale and @DefaulTimezone extensions Nov 8, 2025
Copy link
Member

@marcphilipp marcphilipp left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for this initial push! 👍

How to use JUnit's internal testkit

We just use EngineTestKit directly, without the abstraction that Pioneer has. I commented on one such test.

Why checkstyle fails just right after spotless:apply goal was run

Checkstyle can fail even though Spotless formatted the code. Spotless is purely about formatting, while we use Checkstyle for some more semantic checks.

That ArchUnit rules are in place

What did you want to check for?

@marcphilipp marcphilipp changed the title Initial draft for providing @DefaultLocale and @DefaulTimezone extensions Initial draft for providing @DefaultLocale and @DefaultTimeZone extensions Nov 8, 2025
@Bukama
Copy link
Contributor Author

Bukama commented Nov 9, 2025

Thank you for your feedback, I think (hope) I applied all of it correctly. I find the testkit methods very confusing and verbose, but I guess that's a thing how used you are to them.

What did you want to check for?
Nothing, I saw that I have violations against ArchUnit's rules, but was too tired to check which I violate (turned out it was the missing @API annotations.

In general I'm done with most parts, I now have to figure out which are the correct findAnnotation methods in JUpiter to match those of Pioneer. Especially those with nested and class level ones.

Comment on lines 36 to 37
AnnotatedElement element = context.getElement().orElse(null);
AnnotationSupport.findAnnotation(element, DefaultLocale.class).ifPresent(
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This won't find annotations on top-level and nested classes (which is why the test fail). You can either search the hierarchy upward (like the Pioneer implementation does) or implement BeforeAllCallback and store the value in the class-level store so it can be used as a fallback here.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As discussed via email, I've pushed a commit that uses BeforeAllCallback to achieve this. The second commit moves the extension implementation to junit-jupiter-api to avoid its overhead since it should only be active when the @DefaultLocale annotation is used.

@Bukama Could you please do the same for @DefaultTimeZone?

Copy link
Contributor Author

@Bukama Bukama Nov 17, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for your help. Applied it to @DefaultTimeZone, but need to figure out, where I have a circular dependency (cause ArchUnit-Report is truncated).

Had to laugh when reading your move, cause the first thing I did when porting was to split api and extension, because I understood your comment in the issue to do so :D

Another question: As you released 6.1-RC1 today, I guess I should switch the @since to 6.2?

edit: Will search again tomorrow, I'm tired after 16h awake

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Had to laugh when reading your move, cause the first thing I did when porting was to split api and extension, because I understood your comment in the issue to do so :D

Sorry about that!

Another question: As you released 6.1-RC1 today, I guess I should switch the @since to 6.2?

I only released a milestone so some of the features that are already in can be tested sooner. This PR is still targeted for 6.1. Please add a release note entry for 6.1.0-M2 (you'll need to rebase/merge first).

@Bukama Bukama force-pushed the 4727_passdefaultlocale branch 2 times, most recently from dda60f6 to 14a75bc Compare November 20, 2025 19:09
@Bukama
Copy link
Contributor Author

Bukama commented Nov 20, 2025

To keep you up to date:
Putting the classes in the api.util packages results in a circular dependency of api.extension due the TimeoutUtil class in the same package. For testing purpose I moved all of them to a dummy package (will split and rename it later) to make progress on getting the build green. I then spent some time on the module-info, but also got this now, but now test that check the module-info break. But it's far too late today. Will continue tomorrow or Saturday.

@marcphilipp
Copy link
Member

Putting the classes in the api.util packages results in a circular dependency of api.extension due the TimeoutUtil class in the same package.

Hmm, I hadn't thought of that. We should probably move TimeoutUtil to a separate package. Let's go with org.junit.jupiter.api.timeout for now, ok?

@marcphilipp
Copy link
Member

Hmm, I hadn't thought of that. We should probably move TimeoutUtil to a separate package. Let's go with org.junit.jupiter.api.timeout for now, ok?

Actually, I've just done this on main so it should suffice for you to rebase this PR.

@Bukama
Copy link
Contributor Author

Bukama commented Nov 22, 2025

Hmm, I hadn't thought of that. We should probably move TimeoutUtil to a separate package. Let's go with org.junit.jupiter.api.timeout for now, ok?

Actually, I've just done this on main so it should suffice for you to rebase this PR.

Great, I will work later this day / tomorrow

@Bukama Bukama force-pushed the 4727_passdefaultlocale branch from cada4ef to 9d1e8c1 Compare November 22, 2025 18:35
@Bukama
Copy link
Contributor Author

Bukama commented Nov 22, 2025

I give up. After wasting another few hours for getting those tests green which check module system files that do nowhere exists and complain about modules would not exists while the compiler says they do.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Support set / reset time zone and locale during test execution

3 participants