You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by mg...@apache.org on 2021/07/18 21:01:08 UTC

[wicket] branch master updated (2ec7b18 -> edd4fa0)

This is an automated email from the ASF dual-hosted git repository.

mgrigorov pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/wicket.git.


    from 2ec7b18  WICKET-6901 document size modifier
     new 0e9c7de  WICKET-6904 Make Apache Wicket fully supporting Java9+ module system
     new 24d390d  Fix failing test by updating the resource url scheme to HTTPS
     new 336d5b7  WICKET-6904 Make Apache Wicket fully supporting Java9+ module system
     new d74e466  WICKET-6904 Make Apache Wicket fully supporting Java9+ module system
     new edd4fa0  WICKET-6903 Replace maven-clirr-plugin with something newer

The 5 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 archetypes/quickstart/pom.xml                      |   5 +
 pom.xml                                            | 160 ++---
 testing/wicket-common-tests/pom.xml                |   3 +-
 .../wicket/osgi/OsgiClashingPackagesTest.java      |  13 +-
 testing/wicket-js-tests/pom.xml                    |   3 +-
 testing/wicket-threadtest/pom.xml                  |   2 +-
 wicket-auth-roles/pom.xml                          |   4 -
 .../src/main/java/module-info.java                 |  32 +-
 .../util/license/ApacheLicenceHeaderTest.java      |   4 +-
 .../util/markup/xhtml/WellFormedXmlTest.java       |  69 +-
 wicket-bean-validation/pom.xml                     |  22 +-
 .../src/main/java/module-info.java                 |  16 +-
 .../validation/BeanValidationConfiguration.java    |  16 +
 .../bean/validation/BeanValidationContext.java     |  16 +
 .../wicket/bean/validation/ConstraintIterator.java |  16 +
 .../bean/validation/DefaultPropertyResolver.java   |  16 +
 .../bean/validation/DefaultValidatorProvider.java  |  16 +
 .../validation/DefaultViolationTranslator.java     |  16 +
 .../apache/wicket/bean/validation/GroupsModel.java |  16 +
 .../wicket/bean/validation/IPropertyResolver.java  |  16 +
 .../wicket/bean/validation/ITagModifier.java       |  16 +
 .../bean/validation/IViolationTranslator.java      |  16 +
 .../apache/wicket/bean/validation/Property.java    |  16 +
 .../wicket/bean/validation/PropertyValidator.java  |  16 +
 .../bean/validation/PropertyValidator.properties   |  14 +
 .../bean/validation/SessionLocaleInterpolator.java |  16 +
 .../wicket/bean/validation/SizeTagModifier.java    |  16 +
 .../bean/validation/ValidationModelResolver.java   |  16 +
 .../validation/PropertyValidatorRequiredTest.java  |  16 +
 .../bean/validation/TestValidatableBean.java       |  16 +
 .../validation/ValidationModelResolverTest.java    |  18 +-
 .../util/license/ApacheLicenceHeaderTest.java      |   4 +-
 .../util/markup/xhtml/WellFormedXmlTest.java       |  69 +-
 wicket-cdi/pom.xml                                 |   4 -
 .../src/main/java/module-info.java                 |  21 +-
 .../org/apache/wicket/cdi/CdiWicketTester.java     |   2 +-
 .../java/org/apache/wicket/cdi/ContextManager.java |   4 +-
 wicket-core/pom.xml                                |   4 -
 wicket-core/src/main/java/module-info.java         | 141 ++++
 .../wicket/request/resource/AbstractResource.java  |   3 +-
 .../wicket/{ => core}/request/resource/sample.js   |   0
 .../ajax/form/AjaxFormSubmitBehaviorTest.java      |   4 +-
 ...tiRequestCycleListenerCallOrderApplication.java |   4 +-
 .../MultiRequestCycleListenerCallOrderPage.html    |   0
 .../MultiRequestCycleListenerCallOrderPage.java    |   2 +-
 .../MultiRequestCycleListenerCallOrderTest.java    |   2 +-
 .../cycle/PageRequestHandlerTrackerTest.java       |   5 +-
 .../cycle/RequestCycleListenerDetachOrderTest.java | 200 +++---
 .../request/cycle/RequestCycleListenerTest.java    |   5 +-
 .../request/cycle/RequestCycleUrlForTest.java      |   4 +-
 .../request/cycle/RequestHandlerExecutorTest.java  |   2 +-
 .../{ => core}/request/cycle/RerenderAjaxPage.html |   0
 .../{ => core}/request/cycle/RerenderAjaxPage.java |   2 +-
 .../{ => core}/request/cycle/RerenderPage.html     |   0
 .../{ => core}/request/cycle/RerenderPage.java     |   2 +-
 .../{ => core}/request/cycle/RerenderPageTest.java |   5 +-
 .../{ => core}/request/cycle/UrlRendererTest.java  |   2 +-
 .../request/handler/PageIdPolicyTest.java          | 340 ++++-----
 .../request/handler/PageProviderTest.java          |   2 +-
 .../request/handler/render/AbstractVariations.java |   2 +-
 .../handler/render/ShouldRedirectToTargetUrl.java  |   2 +-
 ...ShouldRenderPageAndWriteResponseVariations.java |   2 +-
 .../render/SkipRenderWithSetResponsePageTest.java  |   2 +-
 ...tatelessPageManipulatingPageParametersTest.java |   2 +-
 .../request/handler/render/TestPageRenderer.java   |  13 +-
 .../request/handler/render/TestVariations.java     |   2 +-
 .../request/handler/render/Variation.java          |   2 +-
 .../request/handler/render/VariationIterator.java  |   2 +-
 .../handler/render/WebPageRendererTest.java        |  34 +-
 .../resource/ResourceAuthorizationTest.java        |   2 +-
 .../mapper/AbstractBookmarkableMapperTest.java     |   2 +-
 .../request/mapper/CustomHomePageTest.java         |   2 +-
 .../request/mapper/info/ComponentInfoTest.java     |   3 +-
 .../request/mapper/info/PageComponentInfoTest.java |   3 +-
 .../{ => core}/request/resource/BundlesPage.html   |   0
 .../{ => core}/request/resource/BundlesPage.java   |   3 +-
 .../request/resource/BundlesPage_ext_result.html   |   0
 .../request/resource/BundlesPage_result.html       |   2 +-
 .../request/resource/BundlesPage_result_defer.html |   2 +-
 .../request/resource/ByteArrayResourceTest.java    |   3 +-
 .../request/resource/CharSequenceResourceTest.java |  22 +-
 .../ContextRelativeResourceReferenceTest.java      |   4 +-
 .../request/resource/CssPackageResourceTest.java   |   3 +-
 .../request/resource/DynamicImageResourceTest.java |   3 +-
 .../resource/JavaScriptPackageResourceTest.java    |   3 +-
 .../request/resource/LessResourceReference.less    |   0
 .../resource/LessResourceReferenceTest.java        |  15 +-
 .../MetaInfStaticResourceReferenceTest.java        | 240 +++----
 .../MinifiedAwareResourceReferenceTest.java        |   4 +-
 .../resource/PackageResourceReferenceTest.java     | 780 +++++++++++----------
 .../request/resource/ResouceBundleTest.java        |   8 +-
 .../resource/ResourceReferenceLambdaTest.java      |   6 +-
 .../resource/ResourceReferenceLocatingTest.csv     |   0
 .../resource/ResourceReferenceLocatingTest.java    |   4 +-
 .../resource/ResourceReferenceRegistryTest.java    |  26 +-
 .../request/resource/UrlResourceReferenceTest.java |   3 +-
 .../request/resource/WriteCallbackTest.java        | 134 ++--
 .../wicket/{ => core}/request/resource/a.css       |   0
 .../apache/wicket/{ => core}/request/resource/a.js |   0
 .../wicket/{ => core}/request/resource/b.css       |   0
 .../apache/wicket/{ => core}/request/resource/b.js |   0
 .../wicket/{ => core}/request/resource/b.min.css   |   0
 .../wicket/{ => core}/request/resource/b.min.js    |   0
 .../wicket/{ => core}/request/resource/b_de.js     |   0
 .../wicket/{ => core}/request/resource/b_nl.js     |   0
 .../wicket/{ => core}/request/resource/b_nl.min.js |   0
 .../wicket/{ => core}/request/resource/b_nl_BE.js  |   0
 .../{ => core}/request/resource/b_nl_BE.min.js     |   0
 .../wicket/{ => core}/request/resource/b_style.js  |   0
 .../{ => core}/request/resource/b_style.min.js     |   0
 .../{ => core}/request/resource/b_style_nl.js      |   0
 .../{ => core}/request/resource/b_style_nl.min.js  |   0
 .../{ => core}/request/resource/b_style_nl_BE.js   |   0
 .../request/resource/b_style_nl_BE.min.js          |   0
 .../{ => core}/request/resource/b_var_style.js     |   0
 .../{ => core}/request/resource/b_var_style.min.js |   0
 .../{ => core}/request/resource/b_var_style_nl.js  |   0
 .../request/resource/b_var_style_nl.min.js         |   0
 .../request/resource/b_var_style_nl_BE.js          |   0
 .../request/resource/b_var_style_nl_BE.min.js      |   0
 .../ContextRelativeResourceCachingTest.java        |   4 +-
 ...nameWithVersionResourceCachingStrategyTest.java |   5 +-
 ...ringWithVersionResourceCachingStrategyTest.java |   5 +-
 .../request/resource/caching/TestResource.java     |   4 +-
 .../{ => core}/request/resource/resource.txt       |   0
 .../{ => core}/request/resource/resource_en.txt    |   0
 .../{ => core}/request/resource/resource_en_US.txt |   0
 .../request/resource/resource_gt_4096.txt          |   0
 .../{ => core}/request/resource/resource_style.txt |   0
 .../request/resource/resource_style2.txt           |   0
 .../request/resource/resource_style2_pt.txt        |   0
 .../request/resource/resource_style2_pt_BR.txt     |   0
 .../request/resource/resource_style_en.txt         |   0
 .../request/resource/resource_style_en_US.txt      |   0
 .../{ => core}/request/resource/resource_var.txt   |   0
 .../request/resource/resource_var_en.txt           |   0
 .../request/resource/resource_var_en_US.txt        |   0
 .../request/resource/resource_var_style.txt        |   0
 .../request/resource/resource_var_style2.txt       |   0
 .../request/resource/resource_var_style2_pt.txt    |   0
 .../request/resource/resource_var_style2_pt_BR.txt |   0
 .../request/resource/resource_var_style_en.txt     |   0
 .../request/resource/resource_var_style_en_US.txt  |   0
 .../wicket/{ => core}/util/ExceptionTestBase.java  |   4 +-
 .../wicket/{ => core}/util/Log4jEventHistory.java  | 148 ++--
 .../{ => core}/util/cookies/CookieUtilsTest.java   | 359 +++++-----
 .../util/cookies/CookieValuePersisterTestPage.html |  52 +-
 .../util/cookies/CookieValuePersisterTestPage.java | 140 ++--
 .../PreserveRequestCookieAfterLinkClickTest.java   |   2 +-
 .../SetCookieAndRedirectStatefullTestPage.html     |  52 +-
 .../SetCookieAndRedirectStatefullTestPage.java     | 123 ++--
 .../SetCookieAndRedirectStatelessTestPage.html     |  52 +-
 .../SetCookieAndRedirectStatelessTestPage.java     | 125 ++--
 .../util/cookies/SetCookieAndRedirectTest.java     | 142 ++--
 .../util/file/WebApplicationPathTest.java          |   3 +-
 .../apache/wicket/{ => core}/util/io/PageA.java    |   2 +-
 .../apache/wicket/{ => core}/util/io/PageB.java    |   2 +-
 .../util/io/SerializableCheckerTest.java           | 331 ++++-----
 .../wicket/{ => core}/util/lang/Address.java       |   2 +-
 .../wicket/{ => core}/util/lang/BooleanBean.java   |   2 +-
 .../wicket/{ => core}/util/lang/Country.java       |   2 +-
 .../wicket/{ => core}/util/lang/Country2.java      |  94 +--
 .../wicket/{ => core}/util/lang/Document.java      |   4 +-
 .../apache/wicket/{ => core}/util/lang/Person.java |   2 +-
 .../wicket/{ => core}/util/lang/Person2.java       |   2 +-
 .../{ => core}/util/lang/PropertyResolverTest.java |   4 +-
 .../{ => core}/util/lang/WicketObjectsTest.java    |   2 +-
 .../util/markup/xhtml/WellFormedXmlTest.java       |  69 +-
 .../util/resource/ClassPathResourceFinderTest.java |   2 +-
 .../wicket/{ => core}/util/resource/PathTest.java  |   4 +-
 .../util/resource/ResourceStreamLocatorTest.java   |   4 +-
 .../util/resource}/ResourceStreamLocatorTest.txt   |   0
 .../resource}/ResourceStreamLocatorTest_de.txt     |   0
 .../resource}/ResourceStreamLocatorTest_de_DE.txt  |   0
 .../ResourceStreamLocatorTest_de_DE_POSIX.txt      |   0
 .../ResourceStreamLocatorTest_de__POSIX.txt        |   0
 .../util/resource/ResourceStreamLocatorTest_fr.txt |   0
 .../resource}/ResourceStreamLocatorTest_style.txt  |   0
 .../ResourceStreamLocatorTest_style_de.txt         |   0
 .../ResourceStreamLocatorTest_style_de_DE.txt      |   0
 ...ResourceStreamLocatorTest_style_de_DE_POSIX.txt |   0
 .../ResourceStreamLocatorTest_style_de__POSIX.txt  |   0
 .../util/resource/UrlResourceStreamTest.java       | 294 ++++----
 .../locator/CachingResourceStreamLocatorTest.java  |   4 +-
 .../resource/locator/ResourceNameIteratorTest.java | 362 +++++-----
 .../sourcePath}/ResourceStreamLocatorTest.txt      |   0
 .../sourcePath}/ResourceStreamLocatorTest_de.txt   |   0
 .../ResourceStreamLocatorTest_de_DE.txt            |   0
 .../ResourceStreamLocatorTest_de_DE_POSIX.txt      |   0
 .../ResourceStreamLocatorTest_de__POSIX.txt        |   0
 .../ResourceStreamLocatorTest_style.txt            |   0
 .../ResourceStreamLocatorTest_style_de.txt         |   0
 .../ResourceStreamLocatorTest_style_de_DE.txt      |   0
 ...ResourceStreamLocatorTest_style_de_DE_POSIX.txt |   0
 .../ResourceStreamLocatorTest_style_de__POSIX.txt  |   0
 .../util/string/JavaScriptStripperTest.java        |   2 +-
 .../PropertyVariableInterpolatorTest.java          | 146 ++--
 .../{ => core}/util/template/CssTemplateTest.java  |   4 +-
 .../util/tester/BlockedResourceLinkPage.html       |   0
 .../util/tester/BlockedResourceLinkPage.java       |   2 +-
 .../wicket/{ => core}/util/tester/CookiePage.java  |   3 +-
 .../tester/FormTesterSubmitLinkTest$TestPage.html  |   0
 .../util/tester/FormTesterSubmitLinkTest.java      |   5 +-
 .../{ => core}/util/tester/FormTesterTest.java     |  18 +-
 .../{ => core}/util/tester/MockAjaxFormPage.html   |   0
 .../{ => core}/util/tester/MockAjaxFormPage.java   |   2 +-
 .../util/tester/MockFormFileUploadPage.html        |   0
 .../util/tester/MockFormFileUploadPage.java        |   2 +-
 .../{ => core}/util/tester/MockFormPage.html       |   0
 .../{ => core}/util/tester/MockFormPage.java       |   2 +-
 .../util/tester/MockFormSubmitsPage.html           |   0
 .../util/tester/MockFormSubmitsPage.java           |   2 +-
 .../MockPageAjaxSubmitLinkSubmitsWholeForm.html    |   0
 .../MockPageAjaxSubmitLinkSubmitsWholeForm.java    |   2 +-
 .../MockPageParameterPage$MockInnerClassPage.html  |   0
 .../util/tester/MockPageParameterPage.html         |   0
 .../util/tester/MockPageParameterPage.java         |   2 +-
 .../MockPageWithFormAndAjaxFormSubmitBehavior.html |   0
 .../MockPageWithFormAndAjaxFormSubmitBehavior.java |   2 +-
 .../util/tester/MockPageWithFormAndCheckGroup.html |   0
 .../util/tester/MockPageWithFormAndCheckGroup.java |   2 +-
 .../util/tester/MockPageWithLabelInEnclosure.html  |   0
 .../util/tester/MockPageWithLabelInEnclosure.java  |   2 +-
 .../util/tester/MockPageWithLinkAndLabel.html      |   0
 .../util/tester/MockPageWithLinkAndLabel.java      |  88 +--
 .../util/tester/MockResourceLinkPage.html          |   0
 .../util/tester/MockResourceLinkPage.java          |   2 +-
 .../{ => core}/util/tester/NestedFormPage.html     |   0
 .../{ => core}/util/tester/NestedFormPage.java     |   2 +-
 .../StartComponentInPageRedirectToRenderTest.java  |   3 +-
 .../{ => core}/util/tester/TagTesterTest.java      |   5 +-
 .../tester/WicketTesterClickExternalLinkTest.java  |   3 +-
 .../util/tester/WicketTesterCookieTest.java        |  12 +-
 .../WicketTesterLazyIsPageStatelessBase.java       |   3 +-
 ...WicketTesterLazyIsPageStatelessOnePassTest.java |   2 +-
 ...terLazyIsPageStatelessRedirectToBufferTest.java |   3 +-
 ...terLazyIsPageStatelessRedirectToRenderTest.java |   2 +-
 .../tester/WicketTesterSessionCreationTest.java    |   4 +-
 .../tester/WicketTesterSessionInvalidateTest.java  |   3 +-
 .../{ => core}/util/tester/WicketTesterTest.java   |  29 +-
 .../wicket/{ => core}/util/tester/apps_1/Book.java |   2 +-
 .../{ => core}/util/tester/apps_1/CreateBook.html  |   0
 .../{ => core}/util/tester/apps_1/CreateBook.java  |   2 +-
 .../util/tester/apps_1/CreateBook.properties       |   0
 .../util/tester/apps_1/MyMockApplication.java      |   2 +-
 .../tester/apps_1/MyMockApplication.properties     |   0
 .../tester/apps_1/MyMockApplication_de.properties  |   0
 .../tester/apps_1/MyMockApplication_nl.properties  |   0
 .../{ => core}/util/tester/apps_1/SuccessPage.html |   0
 .../{ => core}/util/tester/apps_1/SuccessPage.java |   2 +-
 .../{ => core}/util/tester/apps_1/ViewBook.html    |   0
 .../{ => core}/util/tester/apps_1/ViewBook.java    |   2 +-
 .../{ => core}/util/tester/apps_2/LoginPage.html   |   0
 .../{ => core}/util/tester/apps_2/LoginPage.java   |   2 +-
 .../util/tester/apps_2/RedirectPage.html           |   0
 .../util/tester/apps_2/RedirectPage.java           |   2 +-
 .../wicket/{ => core}/util/tester/apps_2/Test.java |   2 +-
 .../{ => core}/util/tester/apps_3/ChoicePage.html  |   0
 .../{ => core}/util/tester/apps_3/ChoicePage.java  |   4 +-
 .../util/tester/apps_3/FormTesterTest.java         |   4 +-
 .../{ => core}/util/tester/apps_4/EmailPage.html   |   0
 .../{ => core}/util/tester/apps_4/EmailPage.java   |   2 +-
 .../util/tester/apps_4/EmailPage.properties        |   0
 .../util/tester/apps_4/FormTesterTest.java         |   2 +-
 .../util/tester/apps_5/AjaxLinkClickTest.java      |   2 +-
 .../tester/apps_5/AjaxSubmitLinkClickTest.java     |   7 +-
 .../apps_5/MockPageWithFormAndContainedLink.html   |  26 +-
 .../apps_5/MockPageWithFormAndContainedLink.java   | 100 +--
 .../tester/apps_5/MockPageWithFormAndLink.html     |   0
 .../tester/apps_5/MockPageWithFormAndLink.java     |   2 +-
 .../util/tester/apps_5/MockPageWithLink.html       |   0
 .../util/tester/apps_5/MockPageWithLink.java       |   2 +-
 .../{ => core}/util/tester/apps_6/LinkPage.html    |   0
 .../{ => core}/util/tester/apps_6/LinkPage.java    | 266 +++----
 .../{ => core}/util/tester/apps_6/ResultPage.html  |   0
 .../{ => core}/util/tester/apps_6/ResultPage.java  |  98 +--
 .../{ => core}/util/tester/apps_7/HomePage.html    |  12 +-
 .../{ => core}/util/tester/apps_7/HomePage.java    |   2 +-
 .../util/tester/apps_7/TestHomePage.java           |  84 +--
 .../util/tester/apps_7/WicketApplication.java      |   2 +-
 .../ComponentFeedbackResourceTestingPage.html      |   0
 .../ComponentFeedbackResourceTestingPage.java      |   4 +-
 .../tester/apps_8/TestResourceProvidingLabel.java  |   4 +-
 .../apps_8/TestResourceProvidingLabel.properties   |   0
 .../apache/wicket/{ => core}/util/tester/bg.jpg    | Bin
 .../cookies/CollectAllRequestCookiesPage.java      |   2 +-
 .../{ => core}/util/tester/cookies/EndPage.java    |   2 +-
 .../util/tester/cookies/SetCookiePage.java         |   2 +-
 .../apache/wicket/{ => core}/util/tester/test.html |   0
 .../InvalidResourceSpecificationExceptionTest.java |   2 +-
 wicket-devutils/pom.xml                            |   4 -
 .../src/main/java/module-info.java                 |  33 +-
 .../util/license/ApacheLicenceHeaderTest.java      |   4 +-
 .../util/markup/xhtml/WellFormedXmlTest.java       |  69 +-
 wicket-examples/pom.xml                            |   1 +
 wicket-experimental/pom.xml                        |   2 +-
 wicket-experimental/wicket-metrics/pom.xml         |   4 -
 .../wicket-metrics/src/main/java/module-info.java  |  38 +-
 wicket-extensions/pom.xml                          |   4 -
 wicket-extensions/src/main/java/module-info.java   |  74 ++
 .../util/license/ApacheLicenceHeaderTest.java      |   3 +-
 .../util/markup/xhtml/WellFormedXmlTest.java       |  69 +-
 wicket-guice/pom.xml                               |   4 -
 .../src/main/java/module-info.java                 |  19 +-
 .../util/license/ApacheLicenceHeaderTest.java      |  71 +-
 wicket-ioc/pom.xml                                 |   4 -
 .../src/main/java/module-info.java                 |  19 +-
 .../util/license/ApacheLicenceHeaderTest.java      |   3 +-
 wicket-jmx/pom.xml                                 |   4 -
 .../src/main/java/module-info.java                 |  32 +-
 .../jmx}/util/license/ApacheLicenceHeaderTest.java |   3 +-
 .../util/license/ApacheLicenceHeaderTest.java      |  34 -
 .../wicket-native-websocket-core/pom.xml           |   4 -
 .../src/main/java/module-info.java                 |  34 +-
 .../wicket-native-websocket-javax/pom.xml          |   4 -
 .../src/main/java/module-info.java                 |  32 +-
 wicket-objectsizeof-agent/pom.xml                  |   4 -
 .../src/main/java/module-info.java                 |  16 +-
 .../src/main/java/module-info.java                 |  37 +-
 .../request/flow/RedirectToUrlException.java       |   1 -
 .../src/main/java/module-info.java                 |  36 +-
 .../util/license/ApacheLicenceHeaderTest.java      |   4 +-
 .../util/license/ApacheLicenceHeaderTest.java      |  34 -
 wicket-user-guide/pom.xml                          |   2 +-
 wicket-util/pom.xml                                |   1 +
 .../main/java/javax/servlet/ServletContext.java    |   0
 .../javax/servlet/http/HttpServletRequest.java     |   0
 .../main/java/javax/servlet/http/HttpSession.java  |   0
 wicket-util/src/main/java/module-info.java         |  60 ++
 .../org/apache/wicket/util/io/ConnectionsTest.java |   6 +-
 .../src/main/java/module-info.java                 |  18 +-
 .../util/license/ApacheLicenceHeaderTest.java      |   4 +-
 332 files changed, 3762 insertions(+), 3257 deletions(-)
 copy wicket-core/src/test/java/org/apache/wicket/request/handler/render/AbstractVariations.java => wicket-auth-roles/src/main/java/module-info.java (57%)
 copy wicket-auth-roles/src/test/java/org/apache/wicket/{ => authroles}/util/license/ApacheLicenceHeaderTest.java (91%)
 rename wicket-auth-roles/src/test/java/org/apache/wicket/{ => authroles}/util/markup/xhtml/WellFormedXmlTest.java (89%)
 copy wicket-core/src/test/java/org/apache/wicket/util/lang/Person2.java => wicket-bean-validation/src/main/java/module-info.java (80%)
 rename {wicket-auth-roles/src/test/java/org/apache/wicket => wicket-bean-validation/src/test/java/org/apache/wicket/bean/validation}/util/license/ApacheLicenceHeaderTest.java (91%)
 copy {wicket-devutils/src/test/java/org/apache/wicket => wicket-bean-validation/src/test/java/org/apache/wicket/bean/validation}/util/markup/xhtml/WellFormedXmlTest.java (89%)
 copy wicket-core/src/test/java/org/apache/wicket/util/lang/Person2.java => wicket-cdi/src/main/java/module-info.java (71%)
 create mode 100644 wicket-core/src/main/java/module-info.java
 rename wicket-core/src/test/java/META-INF/resources/org/apache/wicket/{ => core}/request/resource/sample.js (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/cycle/MultiRequestCycleListenerCallOrderApplication.java (95%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/cycle/MultiRequestCycleListenerCallOrderPage.html (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/cycle/MultiRequestCycleListenerCallOrderPage.java (97%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/cycle/MultiRequestCycleListenerCallOrderTest.java (99%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/cycle/PageRequestHandlerTrackerTest.java (95%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/cycle/RequestCycleListenerDetachOrderTest.java (94%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/cycle/RequestCycleListenerTest.java (98%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/cycle/RequestCycleUrlForTest.java (97%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/cycle/RequestHandlerExecutorTest.java (98%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/cycle/RerenderAjaxPage.html (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/cycle/RerenderAjaxPage.java (98%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/cycle/RerenderPage.html (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/cycle/RerenderPage.java (97%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/cycle/RerenderPageTest.java (96%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/cycle/UrlRendererTest.java (99%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/handler/PageIdPolicyTest.java (95%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/handler/PageProviderTest.java (99%)
 copy wicket-core/src/test/java/org/apache/wicket/{ => core}/request/handler/render/AbstractVariations.java (95%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/handler/render/ShouldRedirectToTargetUrl.java (98%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/handler/render/ShouldRenderPageAndWriteResponseVariations.java (98%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/handler/render/SkipRenderWithSetResponsePageTest.java (96%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/handler/render/StatelessPageManipulatingPageParametersTest.java (98%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/handler/render/TestPageRenderer.java (84%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/handler/render/TestVariations.java (97%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/handler/render/Variation.java (96%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/handler/render/VariationIterator.java (97%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/handler/render/WebPageRendererTest.java (95%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/handler/resource/ResourceAuthorizationTest.java (98%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/mapper/CustomHomePageTest.java (98%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/mapper/info/ComponentInfoTest.java (97%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/mapper/info/PageComponentInfoTest.java (95%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/resource/BundlesPage.html (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/resource/BundlesPage.java (91%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/resource/BundlesPage_ext_result.html (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/resource/BundlesPage_result.html (56%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/resource/BundlesPage_result_defer.html (52%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/resource/ByteArrayResourceTest.java (97%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/resource/CharSequenceResourceTest.java (77%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/resource/ContextRelativeResourceReferenceTest.java (93%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/resource/CssPackageResourceTest.java (96%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/resource/DynamicImageResourceTest.java (95%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/resource/JavaScriptPackageResourceTest.java (97%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/resource/LessResourceReference.less (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/resource/LessResourceReferenceTest.java (88%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/resource/MetaInfStaticResourceReferenceTest.java (90%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/resource/MinifiedAwareResourceReferenceTest.java (94%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/resource/PackageResourceReferenceTest.java (90%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/resource/ResouceBundleTest.java (93%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/resource/ResourceReferenceLambdaTest.java (89%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/resource/ResourceReferenceLocatingTest.csv (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/resource/ResourceReferenceLocatingTest.java (97%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/resource/ResourceReferenceRegistryTest.java (79%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/resource/UrlResourceReferenceTest.java (97%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/resource/WriteCallbackTest.java (81%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/resource/a.css (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/resource/a.js (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/resource/b.css (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/resource/b.js (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/resource/b.min.css (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/resource/b.min.js (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/resource/b_de.js (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/resource/b_nl.js (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/resource/b_nl.min.js (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/resource/b_nl_BE.js (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/resource/b_nl_BE.min.js (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/resource/b_style.js (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/resource/b_style.min.js (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/resource/b_style_nl.js (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/resource/b_style_nl.min.js (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/resource/b_style_nl_BE.js (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/resource/b_style_nl_BE.min.js (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/resource/b_var_style.js (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/resource/b_var_style.min.js (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/resource/b_var_style_nl.js (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/resource/b_var_style_nl.min.js (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/resource/b_var_style_nl_BE.js (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/resource/b_var_style_nl_BE.min.js (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/resource/caching/ContextRelativeResourceCachingTest.java (94%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/resource/caching/FilenameWithVersionResourceCachingStrategyTest.java (94%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/resource/caching/QueryStringWithVersionResourceCachingStrategyTest.java (94%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/resource/caching/TestResource.java (87%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/resource/resource.txt (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/resource/resource_en.txt (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/resource/resource_en_US.txt (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/resource/resource_gt_4096.txt (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/resource/resource_style.txt (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/resource/resource_style2.txt (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/resource/resource_style2_pt.txt (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/resource/resource_style2_pt_BR.txt (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/resource/resource_style_en.txt (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/resource/resource_style_en_US.txt (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/resource/resource_var.txt (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/resource/resource_var_en.txt (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/resource/resource_var_en_US.txt (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/resource/resource_var_style.txt (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/resource/resource_var_style2.txt (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/resource/resource_var_style2_pt.txt (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/resource/resource_var_style2_pt_BR.txt (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/resource/resource_var_style_en.txt (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/request/resource/resource_var_style_en_US.txt (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/ExceptionTestBase.java (98%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/Log4jEventHistory.java (94%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/cookies/CookieUtilsTest.java (94%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/cookies/CookieValuePersisterTestPage.html (97%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/cookies/CookieValuePersisterTestPage.java (94%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/cookies/PreserveRequestCookieAfterLinkClickTest.java (98%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/cookies/SetCookieAndRedirectStatefullTestPage.html (97%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/cookies/SetCookieAndRedirectStatefullTestPage.java (94%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/cookies/SetCookieAndRedirectStatelessTestPage.html (97%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/cookies/SetCookieAndRedirectStatelessTestPage.java (95%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/cookies/SetCookieAndRedirectTest.java (95%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/file/WebApplicationPathTest.java (94%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/io/PageA.java (97%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/io/PageB.java (97%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/io/SerializableCheckerTest.java (95%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/lang/Address.java (96%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/lang/BooleanBean.java (96%)
 copy wicket-core/src/test/java/org/apache/wicket/{ => core}/util/lang/Country.java (96%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/lang/Country2.java (93%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/lang/Document.java (96%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/lang/Person.java (98%)
 copy wicket-core/src/test/java/org/apache/wicket/{ => core}/util/lang/Person2.java (95%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/lang/PropertyResolverTest.java (99%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/lang/WicketObjectsTest.java (98%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/markup/xhtml/WellFormedXmlTest.java (90%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/resource/PathTest.java (95%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/resource/ResourceStreamLocatorTest.java (97%)
 rename wicket-core/src/test/java/org/apache/wicket/{util/resource/sourcePath => core/util/resource}/ResourceStreamLocatorTest.txt (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{util/resource/sourcePath => core/util/resource}/ResourceStreamLocatorTest_de.txt (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{util/resource/sourcePath => core/util/resource}/ResourceStreamLocatorTest_de_DE.txt (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{util/resource/sourcePath => core/util/resource}/ResourceStreamLocatorTest_de_DE_POSIX.txt (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{util/resource/sourcePath => core/util/resource}/ResourceStreamLocatorTest_de__POSIX.txt (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/resource/ResourceStreamLocatorTest_fr.txt (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{util/resource/sourcePath => core/util/resource}/ResourceStreamLocatorTest_style.txt (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{util/resource/sourcePath => core/util/resource}/ResourceStreamLocatorTest_style_de.txt (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{util/resource/sourcePath => core/util/resource}/ResourceStreamLocatorTest_style_de_DE.txt (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{util/resource/sourcePath => core/util/resource}/ResourceStreamLocatorTest_style_de_DE_POSIX.txt (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{util/resource/sourcePath => core/util/resource}/ResourceStreamLocatorTest_style_de__POSIX.txt (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/resource/UrlResourceStreamTest.java (94%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/resource/locator/CachingResourceStreamLocatorTest.java (97%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/resource/locator/ResourceNameIteratorTest.java (90%)
 rename wicket-core/src/test/java/org/apache/wicket/{util/resource => core/util/resource/sourcePath}/ResourceStreamLocatorTest.txt (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{util/resource => core/util/resource/sourcePath}/ResourceStreamLocatorTest_de.txt (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{util/resource => core/util/resource/sourcePath}/ResourceStreamLocatorTest_de_DE.txt (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{util/resource => core/util/resource/sourcePath}/ResourceStreamLocatorTest_de_DE_POSIX.txt (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{util/resource => core/util/resource/sourcePath}/ResourceStreamLocatorTest_de__POSIX.txt (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{util/resource => core/util/resource/sourcePath}/ResourceStreamLocatorTest_style.txt (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{util/resource => core/util/resource/sourcePath}/ResourceStreamLocatorTest_style_de.txt (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{util/resource => core/util/resource/sourcePath}/ResourceStreamLocatorTest_style_de_DE.txt (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{util/resource => core/util/resource/sourcePath}/ResourceStreamLocatorTest_style_de_DE_POSIX.txt (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{util/resource => core/util/resource/sourcePath}/ResourceStreamLocatorTest_style_de__POSIX.txt (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/string/JavaScriptStripperTest.java (99%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/string/interpolator/PropertyVariableInterpolatorTest.java (94%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/template/CssTemplateTest.java (90%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/BlockedResourceLinkPage.html (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/BlockedResourceLinkPage.java (96%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/CookiePage.java (94%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/FormTesterSubmitLinkTest$TestPage.html (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/FormTesterSubmitLinkTest.java (95%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/FormTesterTest.java (94%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/MockAjaxFormPage.html (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/MockAjaxFormPage.java (98%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/MockFormFileUploadPage.html (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/MockFormFileUploadPage.java (98%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/MockFormPage.html (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/MockFormPage.java (98%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/MockFormSubmitsPage.html (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/MockFormSubmitsPage.java (98%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/MockPageAjaxSubmitLinkSubmitsWholeForm.html (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/MockPageAjaxSubmitLinkSubmitsWholeForm.java (98%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/MockPageParameterPage$MockInnerClassPage.html (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/MockPageParameterPage.html (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/MockPageParameterPage.java (97%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/MockPageWithFormAndAjaxFormSubmitBehavior.html (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/MockPageWithFormAndAjaxFormSubmitBehavior.java (98%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/MockPageWithFormAndCheckGroup.html (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/MockPageWithFormAndCheckGroup.java (98%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/MockPageWithLabelInEnclosure.html (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/MockPageWithLabelInEnclosure.java (97%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/MockPageWithLinkAndLabel.html (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/MockPageWithLinkAndLabel.java (93%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/MockResourceLinkPage.html (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/MockResourceLinkPage.java (96%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/NestedFormPage.html (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/NestedFormPage.java (97%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/StartComponentInPageRedirectToRenderTest.java (94%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/TagTesterTest.java (99%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/WicketTesterClickExternalLinkTest.java (93%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/WicketTesterCookieTest.java (97%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/WicketTesterLazyIsPageStatelessBase.java (96%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/WicketTesterLazyIsPageStatelessOnePassTest.java (96%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/WicketTesterLazyIsPageStatelessRedirectToBufferTest.java (97%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/WicketTesterLazyIsPageStatelessRedirectToRenderTest.java (96%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/WicketTesterSessionCreationTest.java (91%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/WicketTesterSessionInvalidateTest.java (96%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/WicketTesterTest.java (97%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/apps_1/Book.java (96%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/apps_1/CreateBook.html (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/apps_1/CreateBook.java (97%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/apps_1/CreateBook.properties (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/apps_1/MyMockApplication.java (94%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/apps_1/MyMockApplication.properties (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/apps_1/MyMockApplication_de.properties (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/apps_1/MyMockApplication_nl.properties (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/apps_1/SuccessPage.html (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/apps_1/SuccessPage.java (95%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/apps_1/ViewBook.html (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/apps_1/ViewBook.java (96%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/apps_2/LoginPage.html (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/apps_2/LoginPage.java (95%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/apps_2/RedirectPage.html (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/apps_2/RedirectPage.java (95%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/apps_2/Test.java (96%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/apps_3/ChoicePage.html (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/apps_3/ChoicePage.java (98%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/apps_3/FormTesterTest.java (98%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/apps_4/EmailPage.html (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/apps_4/EmailPage.java (97%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/apps_4/EmailPage.properties (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/apps_4/FormTesterTest.java (97%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/apps_5/AjaxLinkClickTest.java (98%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/apps_5/AjaxSubmitLinkClickTest.java (93%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/apps_5/MockPageWithFormAndContainedLink.html (95%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/apps_5/MockPageWithFormAndContainedLink.java (93%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/apps_5/MockPageWithFormAndLink.html (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/apps_5/MockPageWithFormAndLink.java (97%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/apps_5/MockPageWithLink.html (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/apps_5/MockPageWithLink.java (95%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/apps_6/LinkPage.html (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/apps_6/LinkPage.java (95%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/apps_6/ResultPage.html (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/apps_6/ResultPage.java (93%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/apps_7/HomePage.html (98%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/apps_7/HomePage.java (97%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/apps_7/TestHomePage.java (94%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/apps_7/WicketApplication.java (96%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/apps_8/ComponentFeedbackResourceTestingPage.html (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/apps_8/ComponentFeedbackResourceTestingPage.java (95%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/apps_8/TestResourceProvidingLabel.java (96%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/apps_8/TestResourceProvidingLabel.properties (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/bg.jpg (100%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/cookies/CollectAllRequestCookiesPage.java (96%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/cookies/EndPage.java (94%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/cookies/SetCookiePage.java (96%)
 rename wicket-core/src/test/java/org/apache/wicket/{ => core}/util/tester/test.html (100%)
 copy wicket-core/src/test/java/org/apache/wicket/request/handler/render/AbstractVariations.java => wicket-devutils/src/main/java/module-info.java (56%)
 rename wicket-devutils/src/test/java/org/apache/wicket/{ => devutils}/util/license/ApacheLicenceHeaderTest.java (91%)
 rename wicket-devutils/src/test/java/org/apache/wicket/{ => devutils}/util/markup/xhtml/WellFormedXmlTest.java (89%)
 copy wicket-core/src/test/java/org/apache/wicket/request/handler/render/AbstractVariations.java => wicket-experimental/wicket-metrics/src/main/java/module-info.java (50%)
 create mode 100644 wicket-extensions/src/main/java/module-info.java
 copy {wicket-guice/src/test/java/org/apache/wicket => wicket-extensions/src/test/java/org/apache/wicket/extensions}/util/license/ApacheLicenceHeaderTest.java (91%)
 rename wicket-extensions/src/test/java/org/apache/wicket/{ => extensions}/util/markup/xhtml/WellFormedXmlTest.java (89%)
 copy wicket-core/src/test/java/org/apache/wicket/util/lang/Person2.java => wicket-guice/src/main/java/module-info.java (75%)
 rename {wicket-ioc/src/test/java/org/apache/wicket => wicket-guice/src/test/java/org/apache/wicket/guice}/util/license/ApacheLicenceHeaderTest.java (91%)
 copy wicket-core/src/test/java/org/apache/wicket/util/lang/Person2.java => wicket-ioc/src/main/java/module-info.java (74%)
 copy {wicket-guice/src/test/java/org/apache/wicket => wicket-ioc/src/test/java/org/apache/wicket/injection}/util/license/ApacheLicenceHeaderTest.java (91%)
 copy wicket-core/src/test/java/org/apache/wicket/util/lang/Country.java => wicket-jmx/src/main/java/module-info.java (70%)
 rename {wicket-guice/src/test/java/org/apache/wicket => wicket-jmx/src/test/java/org/apache/wicket/jmx}/util/license/ApacheLicenceHeaderTest.java (91%)
 delete mode 100644 wicket-jmx/src/test/java/org/apache/wicket/util/license/ApacheLicenceHeaderTest.java
 copy wicket-core/src/test/java/org/apache/wicket/request/handler/render/AbstractVariations.java => wicket-native-websocket/wicket-native-websocket-core/src/main/java/module-info.java (58%)
 copy wicket-core/src/test/java/org/apache/wicket/util/lang/Country.java => wicket-native-websocket/wicket-native-websocket-javax/src/main/java/module-info.java (70%)
 copy wicket-core/src/test/java/org/apache/wicket/util/lang/Person2.java => wicket-objectsizeof-agent/src/main/java/module-info.java (81%)
 rename wicket-core/src/test/java/org/apache/wicket/request/handler/render/AbstractVariations.java => wicket-request/src/main/java/module-info.java (54%)
 rename wicket-core/src/test/java/org/apache/wicket/util/lang/Country.java => wicket-spring/src/main/java/module-info.java (64%)
 rename {wicket-extensions/src/test/java/org/apache/wicket => wicket-spring/src/test/java/org/apache/wicket/spring}/util/license/ApacheLicenceHeaderTest.java (91%)
 delete mode 100644 wicket-spring/src/test/java/org/apache/wicket/util/license/ApacheLicenceHeaderTest.java
 rename {wicket-core => wicket-util}/src/main/java/javax/servlet/ServletContext.java (100%)
 rename {wicket-core => wicket-util}/src/main/java/javax/servlet/http/HttpServletRequest.java (100%)
 rename {wicket-core => wicket-util}/src/main/java/javax/servlet/http/HttpSession.java (100%)
 create mode 100644 wicket-util/src/main/java/module-info.java
 rename wicket-core/src/test/java/org/apache/wicket/util/lang/Person2.java => wicket-velocity/src/main/java/module-info.java (77%)
 rename wicket-velocity/src/test/java/org/apache/wicket/{ => contrib}/util/license/ApacheLicenceHeaderTest.java (91%)

[wicket] 05/05: WICKET-6903 Replace maven-clirr-plugin with something newer

Posted by mg...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

mgrigorov pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/wicket.git

commit edd4fa002e9ee0027a0835562d61d42c53321cb5
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
AuthorDate: Fri Jul 16 15:25:44 2021 +0300

    WICKET-6903 Replace maven-clirr-plugin with something newer
    
    Replace Clirr with Japicmp
    
    (cherry picked from commit d0b8d6934a943637d6b2c3cfc97bdd9b782f1f62)
---
 archetypes/quickstart/pom.xml                      |   5 ++
 pom.xml                                            | 100 +++++++++++++--------
 testing/wicket-common-tests/pom.xml                |   2 +-
 testing/wicket-js-tests/pom.xml                    |   2 +-
 testing/wicket-threadtest/pom.xml                  |   2 +-
 wicket-examples/pom.xml                            |   1 +
 wicket-experimental/pom.xml                        |   2 +-
 .../request/flow/RedirectToUrlException.java       |   1 -
 wicket-user-guide/pom.xml                          |   2 +-
 9 files changed, 72 insertions(+), 45 deletions(-)

diff --git a/archetypes/quickstart/pom.xml b/archetypes/quickstart/pom.xml
index a8d54e5..2b41582 100644
--- a/archetypes/quickstart/pom.xml
+++ b/archetypes/quickstart/pom.xml
@@ -26,6 +26,11 @@
 	<artifactId>wicket-archetype-quickstart</artifactId>
 	<packaging>maven-archetype</packaging>
 	<name>Wicket Quickstart Archetype</name>
+
+	<properties>
+		<japicmp.skip>true</japicmp.skip>
+	</properties>
+
 	<build>
 		<resources>
 			<resource>
diff --git a/pom.xml b/pom.xml
index 120f597..9a7e8b9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -158,6 +158,7 @@
 		<jakarta.validation-api.version>3.0.0</jakarta.validation-api.version>
 		<jakarta.websocket-api.version>2.0.0</jakarta.websocket-api.version>
 		<jakarta.servlet-api.version>5.0.0</jakarta.servlet-api.version>
+		<japicmp.skip>true</japicmp.skip> <!-- TODO Wicket 10 Remove this once 10.0.0 is released -->
 		<jdk-serializable-functional.version>1.9.0</jdk-serializable-functional.version>
 		<jetty.version>11.0.6</jetty.version>
 		<junit.version>5.8.0-M1</junit.version>
@@ -177,7 +178,7 @@
 		<velocity-engine-core.version>2.3</velocity-engine-core.version>
 
 		<!-- Maven plugins -->
-		<clirr-maven-plugin.version>2.8</clirr-maven-plugin.version>
+		<japicmp-maven-plugin.version>0.15.3</japicmp-maven-plugin.version>
 		<maven-archetype-plugin.version>3.2.0</maven-archetype-plugin.version>
 		<maven-bundle-plugin.version>5.1.2</maven-bundle-plugin.version>
 		<maven-compiler-plugin.version>3.8.1</maven-compiler-plugin.version>
@@ -758,8 +759,8 @@
 				<inherited>true</inherited>
 			</plugin>
 			<plugin>
-				<groupId>org.codehaus.mojo</groupId>
-				<artifactId>clirr-maven-plugin</artifactId>
+				<groupId>com.github.siom79.japicmp</groupId>
+				<artifactId>japicmp-maven-plugin</artifactId>
 			</plugin>
 			<plugin>
 				<groupId>org.apache.maven.plugins</groupId>
@@ -804,6 +805,60 @@
 		<pluginManagement>
 			<plugins>
 				<plugin>
+					<groupId>com.github.siom79.japicmp</groupId>
+					<artifactId>japicmp-maven-plugin</artifactId>
+					<version>${japicmp-maven-plugin.version}</version>
+					<configuration>
+						<oldVersion>
+							<dependency>
+								<groupId>${project.groupId}</groupId>
+								<artifactId>${project.artifactId}</artifactId>
+								<version>10.0.0</version>
+								<type>jar</type>
+							</dependency>
+						</oldVersion>
+						<newVersion>
+							<file>
+								<path>${project.build.directory}/${project.artifactId}-${project.version}.jar</path>
+							</file>
+						</newVersion>
+						<parameter>
+							<skipXmlReport>true</skipXmlReport>
+							<skipHtmlReport>true</skipHtmlReport>
+							<breakBuildOnBinaryIncompatibleModifications>true</breakBuildOnBinaryIncompatibleModifications>
+							<breakBuildOnSourceIncompatibleModifications>true</breakBuildOnSourceIncompatibleModifications>
+							<onlyBinaryIncompatible>true</onlyBinaryIncompatible>
+							<ignoreMissingClasses>true</ignoreMissingClasses>
+							<excludes>
+								<exclude>
+									<!-- [ERROR] Failed to execute goal com.github.siom79.japicmp:japicmp-maven-plugin:0.15.3:cmp (default) on project wicket-core: There is at least one incompatibility: org.apache.wicket.markup.html.form.EnumChoiceRenderer:METHOD_REMOVED_IN_SUPERCLASS -->
+									org.apache.wicket.markup.html.form.EnumChoiceRenderer
+								</exclude>
+							</excludes>
+							<overrideCompatibilityChangeParameters>
+								<overrideCompatibilityChangeParameter>
+									<compatibilityChange>METHOD_ABSTRACT_NOW_DEFAULT</compatibilityChange>
+									<binaryCompatible>true</binaryCompatible>
+									<sourceCompatible>true</sourceCompatible>
+								</overrideCompatibilityChangeParameter>
+								<overrideCompatibilityChangeParameter>
+									<compatibilityChange>METHOD_NEW_DEFAULT</compatibilityChange>
+									<binaryCompatible>true</binaryCompatible>
+									<sourceCompatible>true</sourceCompatible>
+								</overrideCompatibilityChangeParameter>
+							</overrideCompatibilityChangeParameters>
+						</parameter>
+					</configuration>
+					<executions>
+						<execution>
+							<phase>verify</phase>
+							<goals>
+								<goal>cmp</goal>
+							</goals>
+						</execution>
+					</executions>
+				</plugin>
+				<plugin>
 					<groupId>de.thetaphi</groupId>
 					<artifactId>forbiddenapis</artifactId>
 					<version>${forbiddenapis.version}</version>
@@ -1122,39 +1177,6 @@
 					</configuration>
 				</plugin>
 				<plugin>
-					<groupId>org.codehaus.mojo</groupId>
-					<artifactId>clirr-maven-plugin</artifactId>
-					<version>${clirr-maven-plugin.version}</version>
-					<configuration>
-						<comparisonVersion>10.0.0</comparisonVersion>
-						<failOnError>false</failOnError>
-						<logResults>true</logResults>
-						<skip>true</skip> <!-- FIXME Wicket 10 -->
-						<ignored>
-							<!-- TODO remove in 10.x - clirr does not support default methods -->
-							<difference>
-								<differenceType>7012</differenceType>
-								<className>org/apache/wicket/page/IPageManager</className>
-								<method>void end()</method>
-							</difference>
-							<difference>
-								<differenceType>7012</differenceType>
-								<className>org/apache/wicket/pageStore/IPageStore</className>
-								<method>void end(org.apache.wicket.pageStore.IPageContext)</method>
-							</difference>
-						</ignored>
-					</configuration>
-					<executions>
-						<execution>
-							<id>clirr-check</id>
-							<phase>compile</phase>
-							<goals>
-								<goal>check</goal>
-							</goals>
-						</execution>
-					</executions>
-				</plugin>
-				<plugin>
 					<groupId>org.eclipse.jetty</groupId>
 					<artifactId>jetty-maven-plugin</artifactId>
 					<version>${jetty.version}</version>
@@ -1186,9 +1208,9 @@
 								</pluginExecution>
 								<pluginExecution>
 									<pluginExecutionFilter>
-										<groupId>org.codehaus.mojo</groupId>
-										<artifactId>clirr-maven-plugin</artifactId>
-										<versionRange>[2.6.1,)</versionRange>
+										<groupId>com.github.siom79.japicmp</groupId>
+										<artifactId>japicmp-maven-plugin</artifactId>
+										<versionRange>[0.15.3,)</versionRange>
 										<goals>
 											<goal>check</goal>
 										</goals>
diff --git a/testing/wicket-common-tests/pom.xml b/testing/wicket-common-tests/pom.xml
index 7814ad1..d8bcefd 100644
--- a/testing/wicket-common-tests/pom.xml
+++ b/testing/wicket-common-tests/pom.xml
@@ -29,7 +29,7 @@
 	<description>Tests for all Wicket modules</description>
 
 	<properties>
-		<clirr.skip>true</clirr.skip>
+		<japicmp.skip>true</japicmp.skip>
 	</properties>
 
 	<dependencies>
diff --git a/testing/wicket-js-tests/pom.xml b/testing/wicket-js-tests/pom.xml
index 198256b..c362551 100644
--- a/testing/wicket-js-tests/pom.xml
+++ b/testing/wicket-js-tests/pom.xml
@@ -29,7 +29,7 @@
 	<description>JavaScript tests for all Wicket modules</description>
 
 	<properties>
-		<clirr.skip>true</clirr.skip>
+		<japicmp.skip>true</japicmp.skip>
 	</properties>
 
 	<dependencies>
diff --git a/testing/wicket-threadtest/pom.xml b/testing/wicket-threadtest/pom.xml
index 66dcc2e..d8cb009 100644
--- a/testing/wicket-threadtest/pom.xml
+++ b/testing/wicket-threadtest/pom.xml
@@ -30,7 +30,7 @@
 
 	<properties>
 		<automatic-module-name>org.apache.wicket.thread.tests</automatic-module-name>
-		<clirr.skip>true</clirr.skip>
+		<japicmp.skip>true</japicmp.skip>
 	</properties>
 
 	<dependencies>
diff --git a/wicket-examples/pom.xml b/wicket-examples/pom.xml
index 6745e70..8baaf84 100644
--- a/wicket-examples/pom.xml
+++ b/wicket-examples/pom.xml
@@ -33,6 +33,7 @@
 
 	<properties>
 		<dockerfile-maven-plugin.version>1.4.13</dockerfile-maven-plugin.version>
+		<japicmp.skip>true</japicmp.skip>
 	</properties>
 
 	<dependencyManagement>
diff --git a/wicket-experimental/pom.xml b/wicket-experimental/pom.xml
index b511652..f1b59d3 100644
--- a/wicket-experimental/pom.xml
+++ b/wicket-experimental/pom.xml
@@ -33,6 +33,6 @@
 	</modules>
 
 	<properties>
-		<clirr.skip>true</clirr.skip>
+		<japicmp.skip>true</japicmp.skip>
 	</properties>
 </project>
diff --git a/wicket-request/src/main/java/org/apache/wicket/request/flow/RedirectToUrlException.java b/wicket-request/src/main/java/org/apache/wicket/request/flow/RedirectToUrlException.java
index 71d4149..655087d 100644
--- a/wicket-request/src/main/java/org/apache/wicket/request/flow/RedirectToUrlException.java
+++ b/wicket-request/src/main/java/org/apache/wicket/request/flow/RedirectToUrlException.java
@@ -57,7 +57,6 @@ public class RedirectToUrlException extends ReplaceHandlerException
 		super(new RedirectRequestHandler(redirectUrl, statusCode), true);
 	}
 
-
 	/**
 	 * Construct.
 	 *
diff --git a/wicket-user-guide/pom.xml b/wicket-user-guide/pom.xml
index a6ea1dd..a429eb9 100644
--- a/wicket-user-guide/pom.xml
+++ b/wicket-user-guide/pom.xml
@@ -33,7 +33,7 @@
 	<properties>
 		<automatic-module-name>org.apache.wicket.userguide</automatic-module-name>
 		<asciidoctor.version>1.5.5</asciidoctor.version>
-		<clirr.skip>true</clirr.skip>
+		<japicmp.skip>true</japicmp.skip>
 		<!-- because of windows we need this particular version -->
 		<jruby.version>1.7.21</jruby.version>
 	</properties>

[wicket] 03/05: WICKET-6904 Make Apache Wicket fully supporting Java9+ module system

Posted by mg...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

mgrigorov pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/wicket.git

commit 336d5b78d350d2e63dfb8c9f845855fb6e6de00f
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
AuthorDate: Sun Jul 18 23:47:22 2021 +0300

    WICKET-6904 Make Apache Wicket fully supporting Java9+ module system
    
    Move the javax.servlet.** stubs to wicket-util and export them.
    This is a temporary hack until the dependencies upgrade to Jakarta EE APIs (Spring, commons-fileupload, CDI Unit, ...)
---
 .../src/test/java/org/apache/wicket/core/util/ExceptionTestBase.java  | 2 +-
 .../src/main/java/javax/servlet/ServletContext.java                   | 0
 .../src/main/java/javax/servlet/http/HttpServletRequest.java          | 0
 .../src/main/java/javax/servlet/http/HttpSession.java                 | 0
 wicket-util/src/main/java/module-info.java                            | 4 ++++
 5 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/wicket-core/src/test/java/org/apache/wicket/core/util/ExceptionTestBase.java b/wicket-core/src/test/java/org/apache/wicket/core/util/ExceptionTestBase.java
index d07375e..2f703c0 100644
--- a/wicket-core/src/test/java/org/apache/wicket/core/util/ExceptionTestBase.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/ExceptionTestBase.java
@@ -27,7 +27,7 @@ import org.junit.jupiter.api.Test;
 
 /**
  * Base class for testing exceptions in order to make sure that they achieve 100% test coverage.
- * Assumes that exceptions implement all of the four standard consturctors.
+ * Assumes that exceptions implement all of the four standard constructors.
  * 
  * @author Chris Turner
  */
diff --git a/wicket-core/src/main/java/javax/servlet/ServletContext.java b/wicket-util/src/main/java/javax/servlet/ServletContext.java
similarity index 100%
rename from wicket-core/src/main/java/javax/servlet/ServletContext.java
rename to wicket-util/src/main/java/javax/servlet/ServletContext.java
diff --git a/wicket-core/src/main/java/javax/servlet/http/HttpServletRequest.java b/wicket-util/src/main/java/javax/servlet/http/HttpServletRequest.java
similarity index 100%
rename from wicket-core/src/main/java/javax/servlet/http/HttpServletRequest.java
rename to wicket-util/src/main/java/javax/servlet/http/HttpServletRequest.java
diff --git a/wicket-core/src/main/java/javax/servlet/http/HttpSession.java b/wicket-util/src/main/java/javax/servlet/http/HttpSession.java
similarity index 100%
rename from wicket-core/src/main/java/javax/servlet/http/HttpSession.java
rename to wicket-util/src/main/java/javax/servlet/http/HttpSession.java
diff --git a/wicket-util/src/main/java/module-info.java b/wicket-util/src/main/java/module-info.java
index da20fa4..e6729ec 100644
--- a/wicket-util/src/main/java/module-info.java
+++ b/wicket-util/src/main/java/module-info.java
@@ -53,4 +53,8 @@ module org.apache.wicket.util {
     exports org.apache.wicket.util.visit;
     exports org.apache.wicket.util.watch;
     exports org.apache.wicket.util.xml;
+
+    // temporary hack until CDI-Unit, commons-fileupload and Spring provide Jakarta EE based releases
+    exports javax.servlet;
+    exports javax.servlet.http;
 }

[wicket] 02/05: Fix failing test by updating the resource url scheme to HTTPS

Posted by mg...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

mgrigorov pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/wicket.git

commit 24d390df8f60ea76247947518d938871e8dd02bc
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
AuthorDate: Sun Jul 18 23:20:49 2021 +0300

    Fix failing test by updating the resource url scheme to HTTPS
    
    (cherry picked from commit d4e9fb4fb2ce2c0557fb5abfebeb06f3d93f685c)
---
 .../src/test/java/org/apache/wicket/util/io/ConnectionsTest.java    | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/wicket-util/src/test/java/org/apache/wicket/util/io/ConnectionsTest.java b/wicket-util/src/test/java/org/apache/wicket/util/io/ConnectionsTest.java
index 5ea6f25..548b84c 100644
--- a/wicket-util/src/test/java/org/apache/wicket/util/io/ConnectionsTest.java
+++ b/wicket-util/src/test/java/org/apache/wicket/util/io/ConnectionsTest.java
@@ -28,15 +28,15 @@ import org.junit.jupiter.api.Test;
  * Tests for {@link Connections}
  */
 @Tag(WicketTestTag.SLOW)
-public class ConnectionsTest
+class ConnectionsTest
 {
 	/**
 	 * https://issues.apache.org/jira/browse/WICKET-5838
 	 */
 	@Test
-	public void getLastModified() throws Exception
+	void getLastModified() throws Exception
 	{
-		URL url = new URL("http://wicket.apache.org/learn/books/wia.png");
+		URL url = new URL("https://wicket.apache.org/learn/books/wia.png");
 		Instant lastModified = Connections.getLastModified(url);
 		assertNotNull(lastModified);
 		assertNotEquals(lastModified.toEpochMilli(), 0L);

[wicket] 01/05: WICKET-6904 Make Apache Wicket fully supporting Java9+ module system

Posted by mg...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

mgrigorov pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/wicket.git

commit 0e9c7debbddbcbb9ac945cf5d3f576313ea18c20
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
AuthorDate: Fri Jun 25 16:36:31 2021 +0300

    WICKET-6904 Make Apache Wicket fully supporting Java9+ module system
    
    Add module-info.java for most Maven modules but http2
    
    http2 modules will be JPMS-ed in a separate commit to reduce the merge conflicts with 10.x
    
    These are the known issues:
    - maven-clirr-plugin does not work. Need to use -Dclirr.skip=true
    - many dependencies still do not provide JMPS modules (e.g. servlet-api, commons-fileupload, velocity, ...). We will use them as automodules until they provide proper modules
    
    (cherry picked from commit 9a38f90323a29592ff305b57b4368c12ee823d14)
---
 pom.xml                                            |  60 +-
 testing/wicket-common-tests/pom.xml                |   1 -
 .../wicket/osgi/OsgiClashingPackagesTest.java      |  13 +-
 testing/wicket-js-tests/pom.xml                    |   1 -
 wicket-auth-roles/pom.xml                          |   4 -
 .../src/main/java/module-info.java                 |  35 +-
 .../util/license/ApacheLicenceHeaderTest.java      |   4 +-
 .../util/markup/xhtml/WellFormedXmlTest.java       |  69 +-
 wicket-bean-validation/pom.xml                     |  22 +-
 .../src/main/java/module-info.java                 |  16 +-
 .../validation/BeanValidationConfiguration.java    |  16 +
 .../bean/validation/BeanValidationContext.java     |  16 +
 .../wicket/bean/validation/ConstraintIterator.java |  16 +
 .../bean/validation/DefaultPropertyResolver.java   |  16 +
 .../bean/validation/DefaultValidatorProvider.java  |  16 +
 .../validation/DefaultViolationTranslator.java     |  16 +
 .../apache/wicket/bean/validation/GroupsModel.java |  16 +
 .../wicket/bean/validation/IPropertyResolver.java  |  16 +
 .../wicket/bean/validation/ITagModifier.java       |  16 +
 .../bean/validation/IViolationTranslator.java      |  16 +
 .../apache/wicket/bean/validation/Property.java    |  16 +
 .../wicket/bean/validation/PropertyValidator.java  |  16 +
 .../bean/validation/PropertyValidator.properties   |  14 +
 .../bean/validation/SessionLocaleInterpolator.java |  16 +
 .../wicket/bean/validation/SizeTagModifier.java    |  16 +
 .../bean/validation/ValidationModelResolver.java   |  16 +
 .../validation/PropertyValidatorRequiredTest.java  |  16 +
 .../bean/validation/TestValidatableBean.java       |  16 +
 .../validation/ValidationModelResolverTest.java    |  18 +-
 .../util/license/ApacheLicenceHeaderTest.java      |   4 +-
 .../util/markup/xhtml/WellFormedXmlTest.java       |  69 +-
 wicket-cdi/pom.xml                                 |   4 -
 .../src/main/java/module-info.java                 |  33 +-
 wicket-core/pom.xml                                |   4 -
 wicket-core/src/main/java/module-info.java         | 141 ++++
 .../wicket/request/resource/AbstractResource.java  |   3 +-
 .../wicket/{ => core}/request/resource/sample.js   |   0
 .../ajax/form/AjaxFormSubmitBehaviorTest.java      |   4 +-
 ...tiRequestCycleListenerCallOrderApplication.java |   4 +-
 .../MultiRequestCycleListenerCallOrderPage.html    |   0
 .../MultiRequestCycleListenerCallOrderPage.java    |   2 +-
 .../MultiRequestCycleListenerCallOrderTest.java    |   2 +-
 .../cycle/PageRequestHandlerTrackerTest.java       |   5 +-
 .../cycle/RequestCycleListenerDetachOrderTest.java | 200 +++---
 .../request/cycle/RequestCycleListenerTest.java    |   5 +-
 .../request/cycle/RequestCycleUrlForTest.java      |   4 +-
 .../request/cycle/RequestHandlerExecutorTest.java  |   2 +-
 .../{ => core}/request/cycle/RerenderAjaxPage.html |   0
 .../{ => core}/request/cycle/RerenderAjaxPage.java |   2 +-
 .../{ => core}/request/cycle/RerenderPage.html     |   0
 .../{ => core}/request/cycle/RerenderPage.java     |   2 +-
 .../{ => core}/request/cycle/RerenderPageTest.java |   5 +-
 .../{ => core}/request/cycle/UrlRendererTest.java  |   2 +-
 .../request/handler/PageIdPolicyTest.java          | 340 ++++-----
 .../request/handler/PageProviderTest.java          |   2 +-
 .../request/handler/render/AbstractVariations.java |   2 +-
 .../handler/render/ShouldRedirectToTargetUrl.java  |   2 +-
 ...ShouldRenderPageAndWriteResponseVariations.java |   2 +-
 .../render/SkipRenderWithSetResponsePageTest.java  |   2 +-
 ...tatelessPageManipulatingPageParametersTest.java |   2 +-
 .../request/handler/render/TestPageRenderer.java   |  13 +-
 .../request/handler/render/TestVariations.java     |   2 +-
 .../request/handler/render/Variation.java          |   2 +-
 .../request/handler/render/VariationIterator.java  |   2 +-
 .../handler/render/WebPageRendererTest.java        |  34 +-
 .../resource/ResourceAuthorizationTest.java        |   2 +-
 .../mapper/AbstractBookmarkableMapperTest.java     |   2 +-
 .../request/mapper/CustomHomePageTest.java         |   2 +-
 .../request/mapper/info/ComponentInfoTest.java     |   3 +-
 .../request/mapper/info/PageComponentInfoTest.java |   3 +-
 .../{ => core}/request/resource/BundlesPage.html   |   0
 .../{ => core}/request/resource/BundlesPage.java   |   3 +-
 .../request/resource/BundlesPage_ext_result.html   |   0
 .../request/resource/BundlesPage_result.html       |   2 +-
 .../request/resource/BundlesPage_result_defer.html |   2 +-
 .../request/resource/ByteArrayResourceTest.java    |   3 +-
 .../request/resource/CharSequenceResourceTest.java |  22 +-
 .../ContextRelativeResourceReferenceTest.java      |   4 +-
 .../request/resource/CssPackageResourceTest.java   |   3 +-
 .../request/resource/DynamicImageResourceTest.java |   3 +-
 .../resource/JavaScriptPackageResourceTest.java    |   3 +-
 .../request/resource/LessResourceReference.less    |   0
 .../resource/LessResourceReferenceTest.java        |  15 +-
 .../MetaInfStaticResourceReferenceTest.java        | 240 +++----
 .../MinifiedAwareResourceReferenceTest.java        |   4 +-
 .../resource/PackageResourceReferenceTest.java     | 780 +++++++++++----------
 .../request/resource/ResouceBundleTest.java        |   8 +-
 .../resource/ResourceReferenceLambdaTest.java      |   6 +-
 .../resource/ResourceReferenceLocatingTest.csv     |   0
 .../resource/ResourceReferenceLocatingTest.java    |   4 +-
 .../resource/ResourceReferenceRegistryTest.java    |  26 +-
 .../request/resource/UrlResourceReferenceTest.java |   3 +-
 .../request/resource/WriteCallbackTest.java        | 134 ++--
 .../wicket/{ => core}/request/resource/a.css       |   0
 .../apache/wicket/{ => core}/request/resource/a.js |   0
 .../wicket/{ => core}/request/resource/b.css       |   0
 .../apache/wicket/{ => core}/request/resource/b.js |   0
 .../wicket/{ => core}/request/resource/b.min.css   |   0
 .../wicket/{ => core}/request/resource/b.min.js    |   0
 .../wicket/{ => core}/request/resource/b_de.js     |   0
 .../wicket/{ => core}/request/resource/b_nl.js     |   0
 .../wicket/{ => core}/request/resource/b_nl.min.js |   0
 .../wicket/{ => core}/request/resource/b_nl_BE.js  |   0
 .../{ => core}/request/resource/b_nl_BE.min.js     |   0
 .../wicket/{ => core}/request/resource/b_style.js  |   0
 .../{ => core}/request/resource/b_style.min.js     |   0
 .../{ => core}/request/resource/b_style_nl.js      |   0
 .../{ => core}/request/resource/b_style_nl.min.js  |   0
 .../{ => core}/request/resource/b_style_nl_BE.js   |   0
 .../request/resource/b_style_nl_BE.min.js          |   0
 .../{ => core}/request/resource/b_var_style.js     |   0
 .../{ => core}/request/resource/b_var_style.min.js |   0
 .../{ => core}/request/resource/b_var_style_nl.js  |   0
 .../request/resource/b_var_style_nl.min.js         |   0
 .../request/resource/b_var_style_nl_BE.js          |   0
 .../request/resource/b_var_style_nl_BE.min.js      |   0
 .../ContextRelativeResourceCachingTest.java        |   4 +-
 ...nameWithVersionResourceCachingStrategyTest.java |   5 +-
 ...ringWithVersionResourceCachingStrategyTest.java |   5 +-
 .../request/resource/caching/TestResource.java     |   4 +-
 .../{ => core}/request/resource/resource.txt       |   0
 .../{ => core}/request/resource/resource_en.txt    |   0
 .../{ => core}/request/resource/resource_en_US.txt |   0
 .../request/resource/resource_gt_4096.txt          |   0
 .../{ => core}/request/resource/resource_style.txt |   0
 .../request/resource/resource_style2.txt           |   0
 .../request/resource/resource_style2_pt.txt        |   0
 .../request/resource/resource_style2_pt_BR.txt     |   0
 .../request/resource/resource_style_en.txt         |   0
 .../request/resource/resource_style_en_US.txt      |   0
 .../{ => core}/request/resource/resource_var.txt   |   0
 .../request/resource/resource_var_en.txt           |   0
 .../request/resource/resource_var_en_US.txt        |   0
 .../request/resource/resource_var_style.txt        |   0
 .../request/resource/resource_var_style2.txt       |   0
 .../request/resource/resource_var_style2_pt.txt    |   0
 .../request/resource/resource_var_style2_pt_BR.txt |   0
 .../request/resource/resource_var_style_en.txt     |   0
 .../request/resource/resource_var_style_en_US.txt  |   0
 .../wicket/{ => core}/util/ExceptionTestBase.java  |   2 +-
 .../wicket/{ => core}/util/Log4jEventHistory.java  | 148 ++--
 .../{ => core}/util/cookies/CookieUtilsTest.java   | 359 +++++-----
 .../util/cookies/CookieValuePersisterTestPage.html |  52 +-
 .../util/cookies/CookieValuePersisterTestPage.java | 140 ++--
 .../PreserveRequestCookieAfterLinkClickTest.java   |   2 +-
 .../SetCookieAndRedirectStatefullTestPage.html     |  52 +-
 .../SetCookieAndRedirectStatefullTestPage.java     | 123 ++--
 .../SetCookieAndRedirectStatelessTestPage.html     |  52 +-
 .../SetCookieAndRedirectStatelessTestPage.java     | 125 ++--
 .../util/cookies/SetCookieAndRedirectTest.java     | 142 ++--
 .../util/file/WebApplicationPathTest.java          |   3 +-
 .../apache/wicket/{ => core}/util/io/PageA.java    |   2 +-
 .../apache/wicket/{ => core}/util/io/PageB.java    |   2 +-
 .../util/io/SerializableCheckerTest.java           | 331 ++++-----
 .../wicket/{ => core}/util/lang/Address.java       |   2 +-
 .../wicket/{ => core}/util/lang/BooleanBean.java   |   2 +-
 .../wicket/{ => core}/util/lang/Country.java       |   2 +-
 .../wicket/{ => core}/util/lang/Country2.java      |  94 +--
 .../wicket/{ => core}/util/lang/Document.java      |   4 +-
 .../apache/wicket/{ => core}/util/lang/Person.java |   2 +-
 .../wicket/{ => core}/util/lang/Person2.java       |   2 +-
 .../{ => core}/util/lang/PropertyResolverTest.java |   4 +-
 .../{ => core}/util/lang/WicketObjectsTest.java    |   2 +-
 .../util/markup/xhtml/WellFormedXmlTest.java       |  69 +-
 .../util/resource/ClassPathResourceFinderTest.java |   2 +-
 .../wicket/{ => core}/util/resource/PathTest.java  |   4 +-
 .../util/resource/ResourceStreamLocatorTest.java   |   4 +-
 .../util/resource}/ResourceStreamLocatorTest.txt   |   0
 .../resource}/ResourceStreamLocatorTest_de.txt     |   0
 .../resource}/ResourceStreamLocatorTest_de_DE.txt  |   0
 .../ResourceStreamLocatorTest_de_DE_POSIX.txt      |   0
 .../ResourceStreamLocatorTest_de__POSIX.txt        |   0
 .../util/resource/ResourceStreamLocatorTest_fr.txt |   0
 .../resource}/ResourceStreamLocatorTest_style.txt  |   0
 .../ResourceStreamLocatorTest_style_de.txt         |   0
 .../ResourceStreamLocatorTest_style_de_DE.txt      |   0
 ...ResourceStreamLocatorTest_style_de_DE_POSIX.txt |   0
 .../ResourceStreamLocatorTest_style_de__POSIX.txt  |   0
 .../util/resource/UrlResourceStreamTest.java       | 294 ++++----
 .../locator/CachingResourceStreamLocatorTest.java  |   4 +-
 .../resource/locator/ResourceNameIteratorTest.java | 362 +++++-----
 .../sourcePath}/ResourceStreamLocatorTest.txt      |   0
 .../sourcePath}/ResourceStreamLocatorTest_de.txt   |   0
 .../ResourceStreamLocatorTest_de_DE.txt            |   0
 .../ResourceStreamLocatorTest_de_DE_POSIX.txt      |   0
 .../ResourceStreamLocatorTest_de__POSIX.txt        |   0
 .../ResourceStreamLocatorTest_style.txt            |   0
 .../ResourceStreamLocatorTest_style_de.txt         |   0
 .../ResourceStreamLocatorTest_style_de_DE.txt      |   0
 ...ResourceStreamLocatorTest_style_de_DE_POSIX.txt |   0
 .../ResourceStreamLocatorTest_style_de__POSIX.txt  |   0
 .../util/string/JavaScriptStripperTest.java        |   2 +-
 .../PropertyVariableInterpolatorTest.java          | 146 ++--
 .../{ => core}/util/template/CssTemplateTest.java  |   4 +-
 .../util/tester/BlockedResourceLinkPage.html       |   0
 .../util/tester/BlockedResourceLinkPage.java       |   2 +-
 .../wicket/{ => core}/util/tester/CookiePage.java  |   3 +-
 .../tester/FormTesterSubmitLinkTest$TestPage.html  |   0
 .../util/tester/FormTesterSubmitLinkTest.java      |   5 +-
 .../{ => core}/util/tester/FormTesterTest.java     |  18 +-
 .../{ => core}/util/tester/MockAjaxFormPage.html   |   0
 .../{ => core}/util/tester/MockAjaxFormPage.java   |   2 +-
 .../util/tester/MockFormFileUploadPage.html        |   0
 .../util/tester/MockFormFileUploadPage.java        |   2 +-
 .../{ => core}/util/tester/MockFormPage.html       |   0
 .../{ => core}/util/tester/MockFormPage.java       |   2 +-
 .../util/tester/MockFormSubmitsPage.html           |   0
 .../util/tester/MockFormSubmitsPage.java           |   2 +-
 .../MockPageAjaxSubmitLinkSubmitsWholeForm.html    |   0
 .../MockPageAjaxSubmitLinkSubmitsWholeForm.java    |   2 +-
 .../MockPageParameterPage$MockInnerClassPage.html  |   0
 .../util/tester/MockPageParameterPage.html         |   0
 .../util/tester/MockPageParameterPage.java         |   2 +-
 .../MockPageWithFormAndAjaxFormSubmitBehavior.html |   0
 .../MockPageWithFormAndAjaxFormSubmitBehavior.java |   2 +-
 .../util/tester/MockPageWithFormAndCheckGroup.html |   0
 .../util/tester/MockPageWithFormAndCheckGroup.java |   2 +-
 .../util/tester/MockPageWithLabelInEnclosure.html  |   0
 .../util/tester/MockPageWithLabelInEnclosure.java  |   2 +-
 .../util/tester/MockPageWithLinkAndLabel.html      |   0
 .../util/tester/MockPageWithLinkAndLabel.java      |  88 +--
 .../util/tester/MockResourceLinkPage.html          |   0
 .../util/tester/MockResourceLinkPage.java          |   2 +-
 .../{ => core}/util/tester/NestedFormPage.html     |   0
 .../{ => core}/util/tester/NestedFormPage.java     |   2 +-
 .../StartComponentInPageRedirectToRenderTest.java  |   3 +-
 .../{ => core}/util/tester/TagTesterTest.java      |   5 +-
 .../tester/WicketTesterClickExternalLinkTest.java  |   3 +-
 .../util/tester/WicketTesterCookieTest.java        |  12 +-
 .../WicketTesterLazyIsPageStatelessBase.java       |   3 +-
 ...WicketTesterLazyIsPageStatelessOnePassTest.java |   2 +-
 ...terLazyIsPageStatelessRedirectToBufferTest.java |   3 +-
 ...terLazyIsPageStatelessRedirectToRenderTest.java |   2 +-
 .../tester/WicketTesterSessionCreationTest.java    |   4 +-
 .../tester/WicketTesterSessionInvalidateTest.java  |   3 +-
 .../{ => core}/util/tester/WicketTesterTest.java   |  29 +-
 .../wicket/{ => core}/util/tester/apps_1/Book.java |   2 +-
 .../{ => core}/util/tester/apps_1/CreateBook.html  |   0
 .../{ => core}/util/tester/apps_1/CreateBook.java  |   2 +-
 .../util/tester/apps_1/CreateBook.properties       |   0
 .../util/tester/apps_1/MyMockApplication.java      |   2 +-
 .../tester/apps_1/MyMockApplication.properties     |   0
 .../tester/apps_1/MyMockApplication_de.properties  |   0
 .../tester/apps_1/MyMockApplication_nl.properties  |   0
 .../{ => core}/util/tester/apps_1/SuccessPage.html |   0
 .../{ => core}/util/tester/apps_1/SuccessPage.java |   2 +-
 .../{ => core}/util/tester/apps_1/ViewBook.html    |   0
 .../{ => core}/util/tester/apps_1/ViewBook.java    |   2 +-
 .../{ => core}/util/tester/apps_2/LoginPage.html   |   0
 .../{ => core}/util/tester/apps_2/LoginPage.java   |   2 +-
 .../util/tester/apps_2/RedirectPage.html           |   0
 .../util/tester/apps_2/RedirectPage.java           |   2 +-
 .../wicket/{ => core}/util/tester/apps_2/Test.java |   2 +-
 .../{ => core}/util/tester/apps_3/ChoicePage.html  |   0
 .../{ => core}/util/tester/apps_3/ChoicePage.java  |   4 +-
 .../util/tester/apps_3/FormTesterTest.java         |   4 +-
 .../{ => core}/util/tester/apps_4/EmailPage.html   |   0
 .../{ => core}/util/tester/apps_4/EmailPage.java   |   2 +-
 .../util/tester/apps_4/EmailPage.properties        |   0
 .../util/tester/apps_4/FormTesterTest.java         |   2 +-
 .../util/tester/apps_5/AjaxLinkClickTest.java      |   2 +-
 .../tester/apps_5/AjaxSubmitLinkClickTest.java     |   7 +-
 .../apps_5/MockPageWithFormAndContainedLink.html   |  26 +-
 .../apps_5/MockPageWithFormAndContainedLink.java   | 100 +--
 .../tester/apps_5/MockPageWithFormAndLink.html     |   0
 .../tester/apps_5/MockPageWithFormAndLink.java     |   2 +-
 .../util/tester/apps_5/MockPageWithLink.html       |   0
 .../util/tester/apps_5/MockPageWithLink.java       |   2 +-
 .../{ => core}/util/tester/apps_6/LinkPage.html    |   0
 .../{ => core}/util/tester/apps_6/LinkPage.java    | 266 +++----
 .../{ => core}/util/tester/apps_6/ResultPage.html  |   0
 .../{ => core}/util/tester/apps_6/ResultPage.java  |  98 +--
 .../{ => core}/util/tester/apps_7/HomePage.html    |  12 +-
 .../{ => core}/util/tester/apps_7/HomePage.java    |   2 +-
 .../util/tester/apps_7/TestHomePage.java           |  84 +--
 .../util/tester/apps_7/WicketApplication.java      |   2 +-
 .../ComponentFeedbackResourceTestingPage.html      |   0
 .../ComponentFeedbackResourceTestingPage.java      |   4 +-
 .../tester/apps_8/TestResourceProvidingLabel.java  |   4 +-
 .../apps_8/TestResourceProvidingLabel.properties   |   0
 .../apache/wicket/{ => core}/util/tester/bg.jpg    | Bin
 .../cookies/CollectAllRequestCookiesPage.java      |   2 +-
 .../{ => core}/util/tester/cookies/EndPage.java    |   2 +-
 .../util/tester/cookies/SetCookiePage.java         |   2 +-
 .../apache/wicket/{ => core}/util/tester/test.html |   0
 .../InvalidResourceSpecificationExceptionTest.java |   2 +-
 wicket-devutils/pom.xml                            |   4 -
 .../src/main/java/module-info.java                 |  36 +-
 .../util/license/ApacheLicenceHeaderTest.java      |   4 +-
 .../util/markup/xhtml/WellFormedXmlTest.java       |  69 +-
 wicket-experimental/wicket-metrics/pom.xml         |   4 -
 .../wicket-metrics/src/main/java/module-info.java  |  53 +-
 wicket-extensions/pom.xml                          |   4 -
 wicket-extensions/src/main/java/module-info.java   |  74 ++
 .../util/license/ApacheLicenceHeaderTest.java      |   3 +-
 .../util/markup/xhtml/WellFormedXmlTest.java       |  69 +-
 wicket-guice/pom.xml                               |   4 -
 .../src/main/java/module-info.java                 |  19 +-
 .../util/license/ApacheLicenceHeaderTest.java      |  71 +-
 wicket-ioc/pom.xml                                 |   4 -
 .../src/main/java/module-info.java                 |  19 +-
 .../util/license/ApacheLicenceHeaderTest.java      |   3 +-
 wicket-jmx/pom.xml                                 |   4 -
 .../src/main/java/module-info.java                 |  32 +-
 .../jmx}/util/license/ApacheLicenceHeaderTest.java |   3 +-
 .../util/license/ApacheLicenceHeaderTest.java      |  34 -
 .../wicket-native-websocket-core/pom.xml           |   4 -
 .../src/main/java/module-info.java                 |  37 +-
 .../wicket-native-websocket-javax/pom.xml          |   4 -
 .../src/main/java/module-info.java                 |  32 +-
 wicket-objectsizeof-agent/pom.xml                  |   4 -
 .../src/main/java/module-info.java                 |  16 +-
 .../src/main/java/module-info.java                 |  47 +-
 .../src/main/java/module-info.java                 |  36 +-
 .../util/license/ApacheLicenceHeaderTest.java      |   4 +-
 .../util/license/ApacheLicenceHeaderTest.java      |  34 -
 wicket-util/pom.xml                                |   1 +
 wicket-util/src/main/java/module-info.java         |  56 ++
 .../src/main/java/module-info.java                 |  18 +-
 .../util/license/ApacheLicenceHeaderTest.java      |   4 +-
 320 files changed, 3680 insertions(+), 3250 deletions(-)

diff --git a/pom.xml b/pom.xml
index 900a73a..120f597 100644
--- a/pom.xml
+++ b/pom.xml
@@ -159,8 +159,8 @@
 		<jakarta.websocket-api.version>2.0.0</jakarta.websocket-api.version>
 		<jakarta.servlet-api.version>5.0.0</jakarta.servlet-api.version>
 		<jdk-serializable-functional.version>1.9.0</jdk-serializable-functional.version>
-		<jetty.version>11.0.4</jetty.version>
-		<junit.version>5.7.2</junit.version>
+		<jetty.version>11.0.6</jetty.version>
+		<junit.version>5.8.0-M1</junit.version>
 		<jsr305.version>3.0.2</jsr305.version>
 		<logback.version>1.2.3</logback.version>
 		<hamcrest.version>2.2</hamcrest.version>
@@ -170,7 +170,7 @@
 		<mockito.version>3.11.2</mockito.version>
 		<objenesis.version>3.2</objenesis.version>
 		<openjson.version>1.0.12</openjson.version>
-		<slf4j.version>1.7.25</slf4j.version>
+		<slf4j.version>2.0.0-alpha2</slf4j.version>
 		<spring.version>5.3.8</spring.version>
 		<wagon-ssh-external.version>3.4.3</wagon-ssh-external.version>
 		<weld.version>4.0.1.SP1</weld.version>
@@ -199,7 +199,6 @@
 		<maven-war-plugin.version>3.3.1</maven-war-plugin.version>
 		<yuicompressor-maven-plugin.version>1.5.1</yuicompressor-maven-plugin.version>
 
-		<automatic-module-name>MUST-BE-OVERRIDDEN-BY-MODULES</automatic-module-name>
 	</properties>
 
 	<dependencyManagement>
@@ -991,9 +990,6 @@
 								<addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
 								<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
 							</manifest>
-							<manifestEntries>
-								<Automatic-Module-Name>${automatic-module-name}</Automatic-Module-Name>
-							</manifestEntries>
 						</archive>
 					</configuration>
 				</plugin>
@@ -1012,9 +1008,7 @@
 						<failOnError>false</failOnError>
 						<doclint>none</doclint>
 						<additionalJOption>${javadoc.additionalJOption}</additionalJOption>
-						<sourcepath>${project.build.sourceDirectory}</sourcepath>
-						<!-- While we publish modules, our source is pre-JMPS so tell javadoc that. -->
-						<source>8</source>
+						<source>${java.specification.version}</source>
 					</configuration>
 					<executions>
 						<execution>
@@ -1092,6 +1086,7 @@
 						<argLine>--add-opens java.base/jdk.internal.loader=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED
 							--add-opens=java.base/java.lang.reflect=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED
 							--add-modules=ALL-SYSTEM</argLine>
+						<useModulePath>false</useModulePath>
 					</configuration>
 				</plugin>
 				<plugin>
@@ -1297,12 +1292,6 @@
 			<!-- distribution management is inherited from the parent pom -->
 		</profile>
 		<profile>
-			<id>all</id>
-			<activation>
-				<activeByDefault>true</activeByDefault>
-			</activation>
-		</profile>
-		<profile>
 			<id>fast</id>
 			<build>
 				<plugins>
@@ -1361,45 +1350,6 @@
 			</build>
 		</profile>
 		<profile>
-			<id>Java 11</id>
-			<activation>
-				<jdk>11</jdk>
-			</activation>
-			<properties>
-				<!-- Disable javadoc linter when building with Java 8
-				 http://mail-archives.apache.org/mod_mbox/maven-users/201403.mbox/%3CCANWgJS5xHWiGE+Lecey+mZVbj9Via4JUWsaBeZtQr2aQNebupA@mail.gmail.com%3E
-				 http://blog.joda.org/2014/02/turning-off-doclint-in-jdk-8-javadoc.html
-				 -->
-				<additionalparam>-Xdoclint:none</additionalparam>
-			</properties>
-		</profile>
-		<profile>
-			<id>buildbot</id>
-			<build>
-				<plugins>
-					<plugin>
-						<groupId>org.apache.maven.plugins</groupId>
-						<artifactId>maven-toolchains-plugin</artifactId>
-						<version>${maven-toolchains-plugin.version}</version>
-						<executions>
-							<execution>
-								<goals>
-									<goal>toolchain</goal>
-								</goals>
-							</execution>
-						</executions>
-						<configuration>
-							<toolchains>
-								<jdk>
-									<version>${maven.compiler.source}</version>
-								</jdk>
-							</toolchains>
-						</configuration>
-					</plugin>
-				</plugins>
-			</build>
-		</profile>
-		<profile>
 			<id>java12</id>
 			<build>
 				<plugins>
diff --git a/testing/wicket-common-tests/pom.xml b/testing/wicket-common-tests/pom.xml
index a66c0f4..7814ad1 100644
--- a/testing/wicket-common-tests/pom.xml
+++ b/testing/wicket-common-tests/pom.xml
@@ -29,7 +29,6 @@
 	<description>Tests for all Wicket modules</description>
 
 	<properties>
-		<automatic-module-name>org.apache.wicket.common.tests</automatic-module-name>
 		<clirr.skip>true</clirr.skip>
 	</properties>
 
diff --git a/testing/wicket-common-tests/src/test/java/org/apache/wicket/osgi/OsgiClashingPackagesTest.java b/testing/wicket-common-tests/src/test/java/org/apache/wicket/osgi/OsgiClashingPackagesTest.java
index b7670d0..3af34dd 100644
--- a/testing/wicket-common-tests/src/test/java/org/apache/wicket/osgi/OsgiClashingPackagesTest.java
+++ b/testing/wicket-common-tests/src/test/java/org/apache/wicket/osgi/OsgiClashingPackagesTest.java
@@ -23,11 +23,11 @@ import org.junit.jupiter.api.Test;
  *
  * Based on https://gist.github.com/1977817, contributed by Andreas Pieber
  */
-public class OsgiClashingPackagesTest
+class OsgiClashingPackagesTest
 {
 
 	@Test
-	public void collectProjectPackages() throws IOException
+	void collectProjectPackages() throws IOException
 	{
 		char pathSeparator = System.getProperty("path.separator").charAt(0);
 		String classpath = System.getProperty("java.class.path");
@@ -118,11 +118,14 @@ public class OsgiClashingPackagesTest
 		{
 			for (String packageWithContent : packagesWithContent)
 			{
-				if (!projectBuckets.containsKey(packageWithContent))
+				if (!"".equals(packageWithContent))
 				{
-					projectBuckets.put(packageWithContent, new ArrayList<>());
+					if (!projectBuckets.containsKey(packageWithContent))
+					{
+						projectBuckets.put(packageWithContent, new ArrayList<>());
+					}
+					projectBuckets.get(packageWithContent).add(this);
 				}
-				projectBuckets.get(packageWithContent).add(this);
 			}
 		}
 
diff --git a/testing/wicket-js-tests/pom.xml b/testing/wicket-js-tests/pom.xml
index 4c283bf..198256b 100644
--- a/testing/wicket-js-tests/pom.xml
+++ b/testing/wicket-js-tests/pom.xml
@@ -29,7 +29,6 @@
 	<description>JavaScript tests for all Wicket modules</description>
 
 	<properties>
-		<automatic-module-name>org.apache.wicket.js.tests</automatic-module-name>
 		<clirr.skip>true</clirr.skip>
 	</properties>
 
diff --git a/wicket-auth-roles/pom.xml b/wicket-auth-roles/pom.xml
index a7331cb..15f3c7e 100644
--- a/wicket-auth-roles/pom.xml
+++ b/wicket-auth-roles/pom.xml
@@ -31,10 +31,6 @@
 		annotations.
 	</description>
 
-	<properties>
-		<automatic-module-name>org.apache.wicket.auth.roles</automatic-module-name>
-	</properties>
-
 	<dependencies>
 		<dependency>
 			<groupId>org.apache.wicket</groupId>
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/resource/BundlesPage.java b/wicket-auth-roles/src/main/java/module-info.java
similarity index 57%
copy from wicket-core/src/test/java/org/apache/wicket/request/resource/BundlesPage.java
copy to wicket-auth-roles/src/main/java/module-info.java
index 74d4084..78fe988 100644
--- a/wicket-core/src/test/java/org/apache/wicket/request/resource/BundlesPage.java
+++ b/wicket-auth-roles/src/main/java/module-info.java
@@ -14,30 +14,17 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.request.resource;
 
-import org.apache.wicket.markup.head.IHeaderResponse;
-import org.apache.wicket.markup.head.JavaScriptHeaderItem;
-import org.apache.wicket.markup.html.WebPage;
+module org.apache.wicket.auth.roles {
+    requires java.base;
+    requires org.apache.wicket.util;
+    requires org.apache.wicket.request;
+    requires org.apache.wicket.core;
 
-/**
- * @author papegaaij
- */
-public class BundlesPage extends WebPage
-{
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 * Construct.
-	 */
-	public BundlesPage()
-	{
-	}
-
-	@Override
-	public void renderHead(IHeaderResponse response)
-	{
-		response.render(JavaScriptHeaderItem.forReference(new JavaScriptResourceReference(
-			ResouceBundleTest.class, "a.js")));
-	}
+    exports org.apache.wicket.authroles.authentication;
+    exports org.apache.wicket.authroles.authentication.pages;
+    exports org.apache.wicket.authroles.authentication.panel;
+    exports org.apache.wicket.authroles.authorization.strategies.role;
+    exports org.apache.wicket.authroles.authorization.strategies.role.annotations;
+    exports org.apache.wicket.authroles.authorization.strategies.role.metadata;
 }
diff --git a/wicket-auth-roles/src/test/java/org/apache/wicket/util/license/ApacheLicenceHeaderTest.java b/wicket-auth-roles/src/test/java/org/apache/wicket/authroles/util/license/ApacheLicenceHeaderTest.java
similarity index 91%
copy from wicket-auth-roles/src/test/java/org/apache/wicket/util/license/ApacheLicenceHeaderTest.java
copy to wicket-auth-roles/src/test/java/org/apache/wicket/authroles/util/license/ApacheLicenceHeaderTest.java
index 6c20703..b01debd 100644
--- a/wicket-auth-roles/src/test/java/org/apache/wicket/util/license/ApacheLicenceHeaderTest.java
+++ b/wicket-auth-roles/src/test/java/org/apache/wicket/authroles/util/license/ApacheLicenceHeaderTest.java
@@ -14,7 +14,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.util.license;
+package org.apache.wicket.authroles.util.license;
+
+import org.apache.wicket.util.license.ApacheLicenseHeaderTestCase;
 
 /**
  * Test that the license headers are in place in this project. The tests are run from
diff --git a/wicket-auth-roles/src/test/java/org/apache/wicket/util/markup/xhtml/WellFormedXmlTest.java b/wicket-auth-roles/src/test/java/org/apache/wicket/authroles/util/markup/xhtml/WellFormedXmlTest.java
similarity index 89%
rename from wicket-auth-roles/src/test/java/org/apache/wicket/util/markup/xhtml/WellFormedXmlTest.java
rename to wicket-auth-roles/src/test/java/org/apache/wicket/authroles/util/markup/xhtml/WellFormedXmlTest.java
index 88d9025..0902d1e 100644
--- a/wicket-auth-roles/src/test/java/org/apache/wicket/util/markup/xhtml/WellFormedXmlTest.java
+++ b/wicket-auth-roles/src/test/java/org/apache/wicket/authroles/util/markup/xhtml/WellFormedXmlTest.java
@@ -1,34 +1,35 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.wicket.util.markup.xhtml;
-
-import org.junit.jupiter.api.Test;
-
-/**
- * Checks that the html markup files are well formed xml-s.
- * 
- * @author akiraly
- */
-public class WellFormedXmlTest extends WellFormedXmlTestCase
-{
-	@Test
-	@Override
-	public void markupFiles()
-	{
-		super.markupFiles();
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.authroles.util.markup.xhtml;
+
+import org.apache.wicket.util.markup.xhtml.WellFormedXmlTestCase;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Checks that the html markup files are well formed xml-s.
+ * 
+ * @author akiraly
+ */
+public class WellFormedXmlTest extends WellFormedXmlTestCase
+{
+	@Test
+	@Override
+	public void markupFiles()
+	{
+		super.markupFiles();
+	}
+}
diff --git a/wicket-bean-validation/pom.xml b/wicket-bean-validation/pom.xml
index 7087f99..615c5f7 100644
--- a/wicket-bean-validation/pom.xml
+++ b/wicket-bean-validation/pom.xml
@@ -1,4 +1,20 @@
-<?xml version="1.0"?>
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  See the NOTICE file distributed with
+   this work for additional information regarding copyright ownership.
+   The ASF licenses this file to You under the Apache License, Version 2.0
+   (the "License"); you may not use this file except in compliance with
+   the License.  You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+-->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 	<modelVersion>4.0.0</modelVersion>
 	<parent>
@@ -11,10 +27,6 @@
 	<packaging>bundle</packaging>
 	<name>Wicket Bean Validation</name>
 
-	<properties>
-		<automatic-module-name>org.apache.wicket.bean.validation</automatic-module-name>
-	</properties>
-
 	<dependencies>
 		<dependency>
 			<groupId>jakarta.el</groupId>
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/lang/Person2.java b/wicket-bean-validation/src/main/java/module-info.java
similarity index 80%
copy from wicket-core/src/test/java/org/apache/wicket/util/lang/Person2.java
copy to wicket-bean-validation/src/main/java/module-info.java
index fcfc1c5..ce46fc1 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/lang/Person2.java
+++ b/wicket-bean-validation/src/main/java/module-info.java
@@ -14,17 +14,11 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.util.lang;
 
-/**
- * @author jcompagner
- */
-public class Person2 extends Person
-{
+module org.apache.wicket.bean.validation {
+    requires org.apache.wicket.util;
+    requires org.apache.wicket.core;
+    requires java.validation;
 
-	@Override
-	public String getName()
-	{
-		return (String)super.getName();
-	}
+    exports org.apache.wicket.bean.validation;
 }
diff --git a/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/BeanValidationConfiguration.java b/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/BeanValidationConfiguration.java
index 747643c..7738ef1 100644
--- a/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/BeanValidationConfiguration.java
+++ b/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/BeanValidationConfiguration.java
@@ -1,3 +1,19 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
 package org.apache.wicket.bean.validation;
 
 import java.lang.annotation.Annotation;
diff --git a/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/BeanValidationContext.java b/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/BeanValidationContext.java
index 77541ab..f3293c5 100644
--- a/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/BeanValidationContext.java
+++ b/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/BeanValidationContext.java
@@ -1,3 +1,19 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
 package org.apache.wicket.bean.validation;
 
 import java.lang.annotation.Annotation;
diff --git a/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/ConstraintIterator.java b/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/ConstraintIterator.java
index 860dad1..e78d9ae 100644
--- a/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/ConstraintIterator.java
+++ b/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/ConstraintIterator.java
@@ -1,3 +1,19 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
 package org.apache.wicket.bean.validation;
 
 import java.util.ArrayList;
diff --git a/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/DefaultPropertyResolver.java b/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/DefaultPropertyResolver.java
index 4409208..3f1d612 100644
--- a/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/DefaultPropertyResolver.java
+++ b/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/DefaultPropertyResolver.java
@@ -1,3 +1,19 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
 package org.apache.wicket.bean.validation;
 
 import org.apache.wicket.WicketRuntimeException;
diff --git a/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/DefaultValidatorProvider.java b/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/DefaultValidatorProvider.java
index 6b832a2..a805918 100644
--- a/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/DefaultValidatorProvider.java
+++ b/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/DefaultValidatorProvider.java
@@ -1,3 +1,19 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
 package org.apache.wicket.bean.validation;
 
 import java.util.function.Supplier;
diff --git a/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/DefaultViolationTranslator.java b/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/DefaultViolationTranslator.java
index 0a2eec4..742138d 100644
--- a/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/DefaultViolationTranslator.java
+++ b/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/DefaultViolationTranslator.java
@@ -1,3 +1,19 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
 package org.apache.wicket.bean.validation;
 
 import java.util.ArrayList;
diff --git a/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/GroupsModel.java b/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/GroupsModel.java
index ff97980..24337f9 100644
--- a/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/GroupsModel.java
+++ b/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/GroupsModel.java
@@ -1,3 +1,19 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
 package org.apache.wicket.bean.validation;
 
 import java.util.ArrayList;
diff --git a/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/IPropertyResolver.java b/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/IPropertyResolver.java
index bcfd7ef..be238b4 100644
--- a/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/IPropertyResolver.java
+++ b/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/IPropertyResolver.java
@@ -1,3 +1,19 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
 package org.apache.wicket.bean.validation;
 
 import org.apache.wicket.markup.html.form.FormComponent;
diff --git a/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/ITagModifier.java b/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/ITagModifier.java
index 958d9d6..70d0f55 100644
--- a/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/ITagModifier.java
+++ b/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/ITagModifier.java
@@ -1,3 +1,19 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
 package org.apache.wicket.bean.validation;
 
 import java.lang.annotation.Annotation;
diff --git a/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/IViolationTranslator.java b/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/IViolationTranslator.java
index 39d4f95..8e9ae8f 100644
--- a/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/IViolationTranslator.java
+++ b/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/IViolationTranslator.java
@@ -1,3 +1,19 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
 package org.apache.wicket.bean.validation;
 
 import jakarta.validation.ConstraintViolation;
diff --git a/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/Property.java b/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/Property.java
index cabe799..b411f17 100644
--- a/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/Property.java
+++ b/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/Property.java
@@ -1,3 +1,19 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
 package org.apache.wicket.bean.validation;
 
 import java.io.Serializable;
diff --git a/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/PropertyValidator.java b/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/PropertyValidator.java
index ba40075..c696c7d 100644
--- a/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/PropertyValidator.java
+++ b/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/PropertyValidator.java
@@ -1,3 +1,19 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
 package org.apache.wicket.bean.validation;
 
 import java.util.Arrays;
diff --git a/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/PropertyValidator.properties b/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/PropertyValidator.properties
index 2532ac3..b430495 100644
--- a/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/PropertyValidator.properties
+++ b/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/PropertyValidator.properties
@@ -1,3 +1,17 @@
+#  Licensed to the Apache Software Foundation (ASF) under one or more
+#  contributor license agreements.  See the NOTICE file distributed with
+#  this work for additional information regarding copyright ownership.
+#  The ASF licenses this file to You under the Apache License, Version 2.0
+#  (the "License"); you may not use this file except in compliance with
+#  the License.  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+#  Unless required by applicable law or agreed to in writing, software
+#  distributed under the License is distributed on an "AS IS" BASIS,
+#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#  See the License for the specific language governing permissions and
+#  limitations under the License.
 jakarta.validation.constraints.AssertFalse.message        = '${label}' must be false
 jakarta.validation.constraints.AssertTrue.message         = '${label}' must be true
 jakarta.validation.constraints.DecimalMax.message         = '${label}' must be less than or equal to ${value}
diff --git a/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/SessionLocaleInterpolator.java b/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/SessionLocaleInterpolator.java
index 13ce537..58d7473 100644
--- a/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/SessionLocaleInterpolator.java
+++ b/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/SessionLocaleInterpolator.java
@@ -1,3 +1,19 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
 package org.apache.wicket.bean.validation;
 
 import java.util.Locale;
diff --git a/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/SizeTagModifier.java b/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/SizeTagModifier.java
index 003bd18..0fc3f64 100644
--- a/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/SizeTagModifier.java
+++ b/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/SizeTagModifier.java
@@ -1,3 +1,19 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
 package org.apache.wicket.bean.validation;
 
 import jakarta.validation.constraints.Size;
diff --git a/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/ValidationModelResolver.java b/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/ValidationModelResolver.java
index a429c43..7d260da 100644
--- a/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/ValidationModelResolver.java
+++ b/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/ValidationModelResolver.java
@@ -1,3 +1,19 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
 package org.apache.wicket.bean.validation;
 
 import org.apache.wicket.markup.html.form.FormComponent;
diff --git a/wicket-bean-validation/src/test/java/org/apache/wicket/bean/validation/PropertyValidatorRequiredTest.java b/wicket-bean-validation/src/test/java/org/apache/wicket/bean/validation/PropertyValidatorRequiredTest.java
index 5369724..af00794 100644
--- a/wicket-bean-validation/src/test/java/org/apache/wicket/bean/validation/PropertyValidatorRequiredTest.java
+++ b/wicket-bean-validation/src/test/java/org/apache/wicket/bean/validation/PropertyValidatorRequiredTest.java
@@ -1,3 +1,19 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
 package org.apache.wicket.bean.validation;
 
 import org.apache.wicket.MarkupContainer;
diff --git a/wicket-bean-validation/src/test/java/org/apache/wicket/bean/validation/TestValidatableBean.java b/wicket-bean-validation/src/test/java/org/apache/wicket/bean/validation/TestValidatableBean.java
index a24456f..eebf914 100644
--- a/wicket-bean-validation/src/test/java/org/apache/wicket/bean/validation/TestValidatableBean.java
+++ b/wicket-bean-validation/src/test/java/org/apache/wicket/bean/validation/TestValidatableBean.java
@@ -1,3 +1,19 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
 package org.apache.wicket.bean.validation;
 
 import jakarta.validation.constraints.NotNull;
diff --git a/wicket-bean-validation/src/test/java/org/apache/wicket/bean/validation/ValidationModelResolverTest.java b/wicket-bean-validation/src/test/java/org/apache/wicket/bean/validation/ValidationModelResolverTest.java
index a174ed4..2c390f4 100644
--- a/wicket-bean-validation/src/test/java/org/apache/wicket/bean/validation/ValidationModelResolverTest.java
+++ b/wicket-bean-validation/src/test/java/org/apache/wicket/bean/validation/ValidationModelResolverTest.java
@@ -1,3 +1,19 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
 package org.apache.wicket.bean.validation;
 
 import org.apache.wicket.markup.html.form.TextField;
@@ -44,4 +60,4 @@ public class ValidationModelResolverTest
         assertEquals("text", model.getPropertyField().getName());
     }
 
-}
\ No newline at end of file
+}
diff --git a/wicket-auth-roles/src/test/java/org/apache/wicket/util/license/ApacheLicenceHeaderTest.java b/wicket-bean-validation/src/test/java/org/apache/wicket/bean/validation/util/license/ApacheLicenceHeaderTest.java
similarity index 91%
rename from wicket-auth-roles/src/test/java/org/apache/wicket/util/license/ApacheLicenceHeaderTest.java
rename to wicket-bean-validation/src/test/java/org/apache/wicket/bean/validation/util/license/ApacheLicenceHeaderTest.java
index 6c20703..1ba4807 100644
--- a/wicket-auth-roles/src/test/java/org/apache/wicket/util/license/ApacheLicenceHeaderTest.java
+++ b/wicket-bean-validation/src/test/java/org/apache/wicket/bean/validation/util/license/ApacheLicenceHeaderTest.java
@@ -14,7 +14,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.util.license;
+package org.apache.wicket.bean.validation.util.license;
+
+import org.apache.wicket.util.license.ApacheLicenseHeaderTestCase;
 
 /**
  * Test that the license headers are in place in this project. The tests are run from
diff --git a/wicket-devutils/src/test/java/org/apache/wicket/util/markup/xhtml/WellFormedXmlTest.java b/wicket-bean-validation/src/test/java/org/apache/wicket/bean/validation/util/markup/xhtml/WellFormedXmlTest.java
similarity index 89%
copy from wicket-devutils/src/test/java/org/apache/wicket/util/markup/xhtml/WellFormedXmlTest.java
copy to wicket-bean-validation/src/test/java/org/apache/wicket/bean/validation/util/markup/xhtml/WellFormedXmlTest.java
index 88d9025..07158b0 100644
--- a/wicket-devutils/src/test/java/org/apache/wicket/util/markup/xhtml/WellFormedXmlTest.java
+++ b/wicket-bean-validation/src/test/java/org/apache/wicket/bean/validation/util/markup/xhtml/WellFormedXmlTest.java
@@ -1,34 +1,35 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.wicket.util.markup.xhtml;
-
-import org.junit.jupiter.api.Test;
-
-/**
- * Checks that the html markup files are well formed xml-s.
- * 
- * @author akiraly
- */
-public class WellFormedXmlTest extends WellFormedXmlTestCase
-{
-	@Test
-	@Override
-	public void markupFiles()
-	{
-		super.markupFiles();
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.bean.validation.util.markup.xhtml;
+
+import org.apache.wicket.util.markup.xhtml.WellFormedXmlTestCase;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Checks that the html markup files are well formed xml-s.
+ * 
+ * @author akiraly
+ */
+public class WellFormedXmlTest extends WellFormedXmlTestCase
+{
+	@Test
+	@Override
+	public void markupFiles()
+	{
+		super.markupFiles();
+	}
+}
diff --git a/wicket-cdi/pom.xml b/wicket-cdi/pom.xml
index 715e07a..e149481 100644
--- a/wicket-cdi/pom.xml
+++ b/wicket-cdi/pom.xml
@@ -33,10 +33,6 @@
 		and resources.
 	</description>
 
-	<properties>
-		<automatic-module-name>org.apache.wicket.cdi</automatic-module-name>
-	</properties>
-
 	<dependencies>
 		<dependency>
 			<groupId>jakarta.annotation</groupId>
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/lang/Country.java b/wicket-cdi/src/main/java/module-info.java
similarity index 70%
copy from wicket-core/src/test/java/org/apache/wicket/util/lang/Country.java
copy to wicket-cdi/src/main/java/module-info.java
index 561af07..3db04a1 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/lang/Country.java
+++ b/wicket-cdi/src/main/java/module-info.java
@@ -14,29 +14,16 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.util.lang;
 
-/**
- * @author jcompagner
- * 
- */
-public class Country
-{
-	private final String name;
-
-	/**
-	 * @param name
-	 */
-	public Country(String name)
-	{
-		this.name = name;
-	}
+module org.apache.wicket.cdi {
+    requires java.annotation;
+    requires java.naming;
+    requires jakarta.enterprise.cdi.api;
+    requires jakarta.inject.api;
+    requires org.apache.wicket.util;
+    requires org.apache.wicket.request;
+    requires org.apache.wicket.core;
+    requires org.slf4j;
 
-	/**
-	 * @return The name
-	 */
-	public String getName()
-	{
-		return name;
-	}
+    exports org.apache.wicket.cdi;
 }
diff --git a/wicket-core/pom.xml b/wicket-core/pom.xml
index 18268bd..d164eca 100644
--- a/wicket-core/pom.xml
+++ b/wicket-core/pom.xml
@@ -36,10 +36,6 @@
 		persisted using your favorite technology.
 	</description>
 
-	<properties>
-		<automatic-module-name>org.apache.wicket.core</automatic-module-name>
-	</properties>
-
 	<dependencies>
 		<dependency>
 			<groupId>org.hamcrest</groupId>
diff --git a/wicket-core/src/main/java/module-info.java b/wicket-core/src/main/java/module-info.java
new file mode 100644
index 0000000..9c6dc2a
--- /dev/null
+++ b/wicket-core/src/main/java/module-info.java
@@ -0,0 +1,141 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+module org.apache.wicket.core {
+    requires java.instrument;
+    requires java.desktop;
+    requires java.sql;
+    requires org.apache.wicket.util;
+    requires org.apache.wicket.request;
+    requires org.apache.commons.io;
+    requires org.apache.commons.collections4;
+    requires commons.fileupload;
+    requires org.slf4j;
+    requires jakarta.servlet;
+    requires org.danekja.jdk.serializable.functional;
+    requires com.github.openjson;
+    requires org.junit.jupiter.api;
+
+    provides org.apache.wicket.IInitializer with org.apache.wicket.Initializer;
+    provides org.apache.wicket.resource.FileSystemPathService with org.apache.wicket.resource.FileSystemJarPathService;
+
+    exports org.apache.wicket;
+    exports org.apache.wicket.ajax;
+    exports org.apache.wicket.ajax.attributes;
+    exports org.apache.wicket.ajax.form;
+    exports org.apache.wicket.ajax.json;
+    exports org.apache.wicket.ajax.markup.html;
+    exports org.apache.wicket.ajax.markup.html.form;
+    exports org.apache.wicket.ajax.markup.html.navigation.paging;
+    exports org.apache.wicket.application;
+    exports org.apache.wicket.authentication;
+    exports org.apache.wicket.authentication.strategy;
+    exports org.apache.wicket.authorization;
+    exports org.apache.wicket.authorization.strategies;
+    exports org.apache.wicket.authorization.strategies.action;
+    exports org.apache.wicket.authorization.strategies.page;
+    exports org.apache.wicket.behavior;
+    exports org.apache.wicket.coep;
+    exports org.apache.wicket.coop;
+    exports org.apache.wicket.core.random;
+    exports org.apache.wicket.core.request;
+    exports org.apache.wicket.core.request.handler;
+    exports org.apache.wicket.core.request.handler.logger;
+    exports org.apache.wicket.core.request.mapper;
+    exports org.apache.wicket.core.util.crypt;
+    exports org.apache.wicket.core.util.file;
+    exports org.apache.wicket.core.util.lang;
+    exports org.apache.wicket.core.util.objects.checker;
+    exports org.apache.wicket.core.util.resource;
+    exports org.apache.wicket.core.util.resource.locator;
+    exports org.apache.wicket.core.util.resource.locator.caching;
+    exports org.apache.wicket.core.util.string;
+    exports org.apache.wicket.core.util.string.interpolator;
+    exports org.apache.wicket.core.util.watch;
+    exports org.apache.wicket.csp;
+    exports org.apache.wicket.css;
+    exports org.apache.wicket.event;
+    exports org.apache.wicket.feedback;
+    exports org.apache.wicket.javascript;
+    exports org.apache.wicket.markup;
+    exports org.apache.wicket.markup.head;
+    exports org.apache.wicket.markup.head.filter;
+    exports org.apache.wicket.markup.head.internal;
+    exports org.apache.wicket.markup.html;
+    exports org.apache.wicket.markup.html.basic;
+    exports org.apache.wicket.markup.html.border;
+    exports org.apache.wicket.markup.html.debug;
+    exports org.apache.wicket.markup.html.form;
+    exports org.apache.wicket.markup.html.form.upload;
+    exports org.apache.wicket.markup.html.form.validation;
+    exports org.apache.wicket.markup.html.image;
+    exports org.apache.wicket.markup.html.image.resource;
+    exports org.apache.wicket.markup.html.include;
+    exports org.apache.wicket.markup.html.internal;
+    exports org.apache.wicket.markup.html.link;
+    exports org.apache.wicket.markup.html.list;
+    exports org.apache.wicket.markup.html.media;
+    exports org.apache.wicket.markup.html.media.audio;
+    exports org.apache.wicket.markup.html.media.video;
+    exports org.apache.wicket.markup.html.navigation.paging;
+    exports org.apache.wicket.markup.html.pages;
+    exports org.apache.wicket.markup.html.panel;
+    exports org.apache.wicket.markup.loader;
+    exports org.apache.wicket.markup.parser;
+    exports org.apache.wicket.markup.parser.filter;
+    exports org.apache.wicket.markup.renderStrategy;
+    exports org.apache.wicket.markup.repeater;
+    exports org.apache.wicket.markup.repeater.data;
+    exports org.apache.wicket.markup.repeater.util;
+    exports org.apache.wicket.markup.resolver;
+    exports org.apache.wicket.markup.transformer;
+    exports org.apache.wicket.mock;
+    exports org.apache.wicket.model;
+    exports org.apache.wicket.model.util;
+    exports org.apache.wicket.page;
+    exports org.apache.wicket.pageStore;
+    exports org.apache.wicket.pageStore.crypt;
+    exports org.apache.wicket.pageStore.disk;
+    exports org.apache.wicket.protocol.http;
+    exports org.apache.wicket.protocol.http.mock;
+    exports org.apache.wicket.protocol.http.request;
+    exports org.apache.wicket.protocol.http.servlet;
+    exports org.apache.wicket.protocol.https;
+    exports org.apache.wicket.request.component;
+    exports org.apache.wicket.request.cycle;
+    exports org.apache.wicket.request.handler.render;
+    exports org.apache.wicket.request.handler.resource;
+    exports org.apache.wicket.request.resource;
+    exports org.apache.wicket.request.resource.caching;
+    exports org.apache.wicket.request.resource.caching.version;
+    exports org.apache.wicket.resource;
+    exports org.apache.wicket.resource.bundles;
+    exports org.apache.wicket.resource.loader;
+    exports org.apache.wicket.response;
+    exports org.apache.wicket.response.filter;
+    exports org.apache.wicket.serialize;
+    exports org.apache.wicket.serialize.java;
+    exports org.apache.wicket.session;
+    exports org.apache.wicket.settings;
+    exports org.apache.wicket.util.cookies;
+    exports org.apache.wicket.util.image;
+    exports org.apache.wicket.util.reference;
+    exports org.apache.wicket.util.template;
+    exports org.apache.wicket.util.tester;
+    exports org.apache.wicket.validation;
+    exports org.apache.wicket.validation.validator;
+}
diff --git a/wicket-core/src/main/java/org/apache/wicket/request/resource/AbstractResource.java b/wicket-core/src/main/java/org/apache/wicket/request/resource/AbstractResource.java
index c249b2b..a9ff5a8 100644
--- a/wicket-core/src/main/java/org/apache/wicket/request/resource/AbstractResource.java
+++ b/wicket-core/src/main/java/org/apache/wicket/request/resource/AbstractResource.java
@@ -18,7 +18,6 @@ package org.apache.wicket.request.resource;
 
 import java.io.IOException;
 import java.io.InputStream;
-import java.sql.Time;
 import java.time.Duration;
 import java.time.Instant;
 import java.time.temporal.ChronoUnit;
@@ -950,7 +949,7 @@ public abstract class AbstractResource implements IResource
 		 * @param stream
 		 *            input stream
 		 */
-		protected final void writeStream(Attributes attributes, InputStream stream) throws IOException
+		protected void writeStream(Attributes attributes, InputStream stream) throws IOException
 		{
 			final Response response = attributes.getResponse();
 			Streams.copy(stream, response.getOutputStream());
diff --git a/wicket-core/src/test/java/META-INF/resources/org/apache/wicket/request/resource/sample.js b/wicket-core/src/test/java/META-INF/resources/org/apache/wicket/core/request/resource/sample.js
similarity index 100%
rename from wicket-core/src/test/java/META-INF/resources/org/apache/wicket/request/resource/sample.js
rename to wicket-core/src/test/java/META-INF/resources/org/apache/wicket/core/request/resource/sample.js
diff --git a/wicket-core/src/test/java/org/apache/wicket/ajax/form/AjaxFormSubmitBehaviorTest.java b/wicket-core/src/test/java/org/apache/wicket/ajax/form/AjaxFormSubmitBehaviorTest.java
index 0628908..70854f3 100644
--- a/wicket-core/src/test/java/org/apache/wicket/ajax/form/AjaxFormSubmitBehaviorTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/ajax/form/AjaxFormSubmitBehaviorTest.java
@@ -22,7 +22,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
 import org.apache.wicket.ajax.markup.html.form.AjaxButton;
 import org.apache.wicket.markup.html.form.Form;
 import org.apache.wicket.util.tester.FormTester;
-import org.apache.wicket.util.tester.NestedFormPage;
+import org.apache.wicket.core.util.tester.NestedFormPage;
 import org.apache.wicket.util.tester.WicketTestCase;
 import org.junit.jupiter.api.Test;
 
@@ -107,4 +107,4 @@ class AjaxFormSubmitBehaviorTest extends WicketTestCase
 			get("outer:inner").replaceWith(inner);
 		}
 	}
-}
\ No newline at end of file
+}
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/cycle/MultiRequestCycleListenerCallOrderApplication.java b/wicket-core/src/test/java/org/apache/wicket/core/request/cycle/MultiRequestCycleListenerCallOrderApplication.java
similarity index 95%
rename from wicket-core/src/test/java/org/apache/wicket/request/cycle/MultiRequestCycleListenerCallOrderApplication.java
rename to wicket-core/src/test/java/org/apache/wicket/core/request/cycle/MultiRequestCycleListenerCallOrderApplication.java
index aa057e7..a7a699d 100644
--- a/wicket-core/src/test/java/org/apache/wicket/request/cycle/MultiRequestCycleListenerCallOrderApplication.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/request/cycle/MultiRequestCycleListenerCallOrderApplication.java
@@ -14,13 +14,15 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.request.cycle;
+package org.apache.wicket.core.request.cycle;
 
 import java.util.ArrayList;
 
 import org.apache.wicket.protocol.http.WebApplication;
 import org.apache.wicket.request.IRequestHandler;
 import org.apache.wicket.request.Url;
+import org.apache.wicket.request.cycle.IRequestCycleListener;
+import org.apache.wicket.request.cycle.RequestCycle;
 
 class MultiRequestCycleListenerCallOrderApplication extends WebApplication
 {
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/cycle/MultiRequestCycleListenerCallOrderPage.html b/wicket-core/src/test/java/org/apache/wicket/core/request/cycle/MultiRequestCycleListenerCallOrderPage.html
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/request/cycle/MultiRequestCycleListenerCallOrderPage.html
rename to wicket-core/src/test/java/org/apache/wicket/core/request/cycle/MultiRequestCycleListenerCallOrderPage.html
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/cycle/MultiRequestCycleListenerCallOrderPage.java b/wicket-core/src/test/java/org/apache/wicket/core/request/cycle/MultiRequestCycleListenerCallOrderPage.java
similarity index 97%
copy from wicket-core/src/test/java/org/apache/wicket/request/cycle/MultiRequestCycleListenerCallOrderPage.java
copy to wicket-core/src/test/java/org/apache/wicket/core/request/cycle/MultiRequestCycleListenerCallOrderPage.java
index 065caab..75fc867 100644
--- a/wicket-core/src/test/java/org/apache/wicket/request/cycle/MultiRequestCycleListenerCallOrderPage.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/request/cycle/MultiRequestCycleListenerCallOrderPage.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.request.cycle;
+package org.apache.wicket.core.request.cycle;
 
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.markup.html.AjaxLink;
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/cycle/MultiRequestCycleListenerCallOrderTest.java b/wicket-core/src/test/java/org/apache/wicket/core/request/cycle/MultiRequestCycleListenerCallOrderTest.java
similarity index 99%
rename from wicket-core/src/test/java/org/apache/wicket/request/cycle/MultiRequestCycleListenerCallOrderTest.java
rename to wicket-core/src/test/java/org/apache/wicket/core/request/cycle/MultiRequestCycleListenerCallOrderTest.java
index f0b5723..9d530f2 100644
--- a/wicket-core/src/test/java/org/apache/wicket/request/cycle/MultiRequestCycleListenerCallOrderTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/request/cycle/MultiRequestCycleListenerCallOrderTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.request.cycle;
+package org.apache.wicket.core.request.cycle;
 
 import static java.util.Arrays.asList;
 import static org.junit.jupiter.api.Assertions.assertEquals;
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/cycle/PageRequestHandlerTrackerTest.java b/wicket-core/src/test/java/org/apache/wicket/core/request/cycle/PageRequestHandlerTrackerTest.java
similarity index 95%
rename from wicket-core/src/test/java/org/apache/wicket/request/cycle/PageRequestHandlerTrackerTest.java
rename to wicket-core/src/test/java/org/apache/wicket/core/request/cycle/PageRequestHandlerTrackerTest.java
index ce684c5..e023932 100644
--- a/wicket-core/src/test/java/org/apache/wicket/request/cycle/PageRequestHandlerTrackerTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/request/cycle/PageRequestHandlerTrackerTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.request.cycle;
+package org.apache.wicket.core.request.cycle;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
@@ -29,6 +29,9 @@ import org.apache.wicket.request.IRequestHandler;
 import org.apache.wicket.request.IRequestMapper;
 import org.apache.wicket.request.Request;
 import org.apache.wicket.request.Url;
+import org.apache.wicket.request.cycle.IRequestCycleListener;
+import org.apache.wicket.request.cycle.PageRequestHandlerTracker;
+import org.apache.wicket.request.cycle.RequestCycle;
 import org.apache.wicket.request.mapper.IRequestMapperDelegate;
 import org.apache.wicket.util.resource.IResourceStream;
 import org.apache.wicket.util.resource.StringResourceStream;
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/cycle/RequestCycleListenerDetachOrderTest.java b/wicket-core/src/test/java/org/apache/wicket/core/request/cycle/RequestCycleListenerDetachOrderTest.java
similarity index 94%
rename from wicket-core/src/test/java/org/apache/wicket/request/cycle/RequestCycleListenerDetachOrderTest.java
rename to wicket-core/src/test/java/org/apache/wicket/core/request/cycle/RequestCycleListenerDetachOrderTest.java
index 70e82f7..17d3647 100644
--- a/wicket-core/src/test/java/org/apache/wicket/request/cycle/RequestCycleListenerDetachOrderTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/request/cycle/RequestCycleListenerDetachOrderTest.java
@@ -1,99 +1,101 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.wicket.request.cycle;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.wicket.MarkupContainer;
-import org.apache.wicket.markup.IMarkupResourceStreamProvider;
-import org.apache.wicket.markup.html.WebPage;
-import org.apache.wicket.util.resource.IResourceStream;
-import org.apache.wicket.util.resource.StringResourceStream;
-import org.apache.wicket.util.tester.WicketTester;
-import org.junit.jupiter.api.Test;
-
-
-/**
- * Tests that pages are detached before {@link IRequestCycleListener#onDetach(RequestCycle)} are
- * invoked
- * 
- * WICKET-4181
- * 
- * @author igor
- */
-public class RequestCycleListenerDetachOrderTest
-{
-	@Test
-    void pageDetachedBeforeListener()
-	{
-		List<Event> events = new ArrayList<Event>();
-
-		WicketTester tester = new WicketTester();
-		tester.getApplication().getRequestCycleListeners().add(new TestListener(events));
-		tester.startPage(new TestPage(events));
-
-		assertEquals(Event.PAGE_DETACHED, events.get(0));
-		assertEquals(Event.LISTENER_DETACHED, events.get(1));
-	}
-
-	private static class TestListener implements IRequestCycleListener
-	{
-		private final List<Event> events;
-
-		TestListener(List<Event> events)
-		{
-			this.events = events;
-		}
-
-		@Override
-		public void onDetach(RequestCycle cycle)
-		{
-			events.add(Event.LISTENER_DETACHED);
-		}
-	}
-
-	private class TestPage extends WebPage implements IMarkupResourceStreamProvider
-	{
-		private final List<Event> events;
-
-		TestPage(List<Event> events)
-		{
-			this.events = events;
-		}
-
-		@Override
-		protected void onDetach()
-		{
-			super.onDetach();
-			events.add(Event.PAGE_DETACHED);
-		}
-
-		@Override
-		public IResourceStream getMarkupResourceStream(MarkupContainer container,
-			Class<?> containerClass)
-		{
-			return new StringResourceStream("<html></html>");
-		}
-	}
-
-	private static enum Event {
-		PAGE_DETACHED, LISTENER_DETACHED
-	};
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.core.request.cycle;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.wicket.MarkupContainer;
+import org.apache.wicket.markup.IMarkupResourceStreamProvider;
+import org.apache.wicket.markup.html.WebPage;
+import org.apache.wicket.request.cycle.IRequestCycleListener;
+import org.apache.wicket.request.cycle.RequestCycle;
+import org.apache.wicket.util.resource.IResourceStream;
+import org.apache.wicket.util.resource.StringResourceStream;
+import org.apache.wicket.util.tester.WicketTester;
+import org.junit.jupiter.api.Test;
+
+
+/**
+ * Tests that pages are detached before {@link IRequestCycleListener#onDetach(RequestCycle)} are
+ * invoked
+ * 
+ * WICKET-4181
+ * 
+ * @author igor
+ */
+public class RequestCycleListenerDetachOrderTest
+{
+	@Test
+    void pageDetachedBeforeListener()
+	{
+		List<Event> events = new ArrayList<Event>();
+
+		WicketTester tester = new WicketTester();
+		tester.getApplication().getRequestCycleListeners().add(new TestListener(events));
+		tester.startPage(new TestPage(events));
+
+		assertEquals(Event.PAGE_DETACHED, events.get(0));
+		assertEquals(Event.LISTENER_DETACHED, events.get(1));
+	}
+
+	private static class TestListener implements IRequestCycleListener
+	{
+		private final List<Event> events;
+
+		TestListener(List<Event> events)
+		{
+			this.events = events;
+		}
+
+		@Override
+		public void onDetach(RequestCycle cycle)
+		{
+			events.add(Event.LISTENER_DETACHED);
+		}
+	}
+
+	private class TestPage extends WebPage implements IMarkupResourceStreamProvider
+	{
+		private final List<Event> events;
+
+		TestPage(List<Event> events)
+		{
+			this.events = events;
+		}
+
+		@Override
+		protected void onDetach()
+		{
+			super.onDetach();
+			events.add(Event.PAGE_DETACHED);
+		}
+
+		@Override
+		public IResourceStream getMarkupResourceStream(MarkupContainer container,
+			Class<?> containerClass)
+		{
+			return new StringResourceStream("<html></html>");
+		}
+	}
+
+	private static enum Event {
+		PAGE_DETACHED, LISTENER_DETACHED
+	};
+}
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/cycle/RequestCycleListenerTest.java b/wicket-core/src/test/java/org/apache/wicket/core/request/cycle/RequestCycleListenerTest.java
similarity index 98%
rename from wicket-core/src/test/java/org/apache/wicket/request/cycle/RequestCycleListenerTest.java
rename to wicket-core/src/test/java/org/apache/wicket/core/request/cycle/RequestCycleListenerTest.java
index caa89f9..2700395 100644
--- a/wicket-core/src/test/java/org/apache/wicket/request/cycle/RequestCycleListenerTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/request/cycle/RequestCycleListenerTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.request.cycle;
+package org.apache.wicket.core.request.cycle;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
@@ -37,6 +37,9 @@ import org.apache.wicket.request.Request;
 import org.apache.wicket.request.RequestHandlerExecutor.ReplaceHandlerException;
 import org.apache.wicket.request.Response;
 import org.apache.wicket.request.Url;
+import org.apache.wicket.request.cycle.IRequestCycleListener;
+import org.apache.wicket.request.cycle.RequestCycle;
+import org.apache.wicket.request.cycle.RequestCycleContext;
 import org.apache.wicket.request.handler.EmptyRequestHandler;
 import org.apache.wicket.resource.DummyApplication;
 import org.junit.jupiter.api.AfterEach;
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/cycle/RequestCycleUrlForTest.java b/wicket-core/src/test/java/org/apache/wicket/core/request/cycle/RequestCycleUrlForTest.java
similarity index 97%
rename from wicket-core/src/test/java/org/apache/wicket/request/cycle/RequestCycleUrlForTest.java
rename to wicket-core/src/test/java/org/apache/wicket/core/request/cycle/RequestCycleUrlForTest.java
index 2602643..413164e 100644
--- a/wicket-core/src/test/java/org/apache/wicket/request/cycle/RequestCycleUrlForTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/request/cycle/RequestCycleUrlForTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.request.cycle;
+package org.apache.wicket.core.request.cycle;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.mockito.ArgumentMatchers.argThat;
@@ -28,6 +28,8 @@ import org.apache.wicket.request.IRequestMapper;
 import org.apache.wicket.request.Request;
 import org.apache.wicket.request.Response;
 import org.apache.wicket.request.Url;
+import org.apache.wicket.request.cycle.RequestCycle;
+import org.apache.wicket.request.cycle.RequestCycleContext;
 import org.apache.wicket.request.handler.resource.ResourceReferenceRequestHandler;
 import org.apache.wicket.request.handler.resource.ResourceRequestHandler;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/cycle/RequestHandlerExecutorTest.java b/wicket-core/src/test/java/org/apache/wicket/core/request/cycle/RequestHandlerExecutorTest.java
similarity index 98%
rename from wicket-core/src/test/java/org/apache/wicket/request/cycle/RequestHandlerExecutorTest.java
rename to wicket-core/src/test/java/org/apache/wicket/core/request/cycle/RequestHandlerExecutorTest.java
index eb42129..1cdd45e 100644
--- a/wicket-core/src/test/java/org/apache/wicket/request/cycle/RequestHandlerExecutorTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/request/cycle/RequestHandlerExecutorTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.request.cycle;
+package org.apache.wicket.core.request.cycle;
 
 import org.apache.wicket.request.IRequestCycle;
 import org.apache.wicket.request.IRequestHandler;
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/cycle/RerenderAjaxPage.html b/wicket-core/src/test/java/org/apache/wicket/core/request/cycle/RerenderAjaxPage.html
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/request/cycle/RerenderAjaxPage.html
rename to wicket-core/src/test/java/org/apache/wicket/core/request/cycle/RerenderAjaxPage.html
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/cycle/RerenderAjaxPage.java b/wicket-core/src/test/java/org/apache/wicket/core/request/cycle/RerenderAjaxPage.java
similarity index 98%
rename from wicket-core/src/test/java/org/apache/wicket/request/cycle/RerenderAjaxPage.java
rename to wicket-core/src/test/java/org/apache/wicket/core/request/cycle/RerenderAjaxPage.java
index 928fc34..01501da 100644
--- a/wicket-core/src/test/java/org/apache/wicket/request/cycle/RerenderAjaxPage.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/request/cycle/RerenderAjaxPage.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.request.cycle;
+package org.apache.wicket.core.request.cycle;
 
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.form.AjaxFormValidatingBehavior;
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/cycle/RerenderPage.html b/wicket-core/src/test/java/org/apache/wicket/core/request/cycle/RerenderPage.html
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/request/cycle/RerenderPage.html
rename to wicket-core/src/test/java/org/apache/wicket/core/request/cycle/RerenderPage.html
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/cycle/RerenderPage.java b/wicket-core/src/test/java/org/apache/wicket/core/request/cycle/RerenderPage.java
similarity index 97%
rename from wicket-core/src/test/java/org/apache/wicket/request/cycle/RerenderPage.java
rename to wicket-core/src/test/java/org/apache/wicket/core/request/cycle/RerenderPage.java
index 6adba97..e9de1ce 100644
--- a/wicket-core/src/test/java/org/apache/wicket/request/cycle/RerenderPage.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/request/cycle/RerenderPage.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.request.cycle;
+package org.apache.wicket.core.request.cycle;
 
 import java.io.Serializable;
 import java.time.Duration;
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/cycle/RerenderPageTest.java b/wicket-core/src/test/java/org/apache/wicket/core/request/cycle/RerenderPageTest.java
similarity index 96%
rename from wicket-core/src/test/java/org/apache/wicket/request/cycle/RerenderPageTest.java
rename to wicket-core/src/test/java/org/apache/wicket/core/request/cycle/RerenderPageTest.java
index 98d7a4c..f2a3170 100644
--- a/wicket-core/src/test/java/org/apache/wicket/request/cycle/RerenderPageTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/request/cycle/RerenderPageTest.java
@@ -14,14 +14,13 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.request.cycle;
+package org.apache.wicket.core.request.cycle;
 
 import static org.hamcrest.CoreMatchers.containsString;
 import static org.hamcrest.MatcherAssert.assertThat;
 
 import org.apache.wicket.core.request.mapper.MountedMapper;
 import org.apache.wicket.protocol.http.mock.MockHttpServletResponse;
-import org.apache.wicket.request.cycle.RerenderPage.Supplier;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 import org.apache.wicket.util.tester.WicketTestCase;
 import org.junit.jupiter.api.Test;
@@ -54,7 +53,7 @@ class RerenderPageTest extends WicketTestCase
 		tester.assertContains("<!-- I should be present 1 -->");
 
 		// add a supplier to modify the URL during render
-		page.setNewValueHandler(new Supplier<Integer>()
+		page.setNewValueHandler(new RerenderPage.Supplier<Integer>()
 		{
 			private static final long serialVersionUID = 1L;
 
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/cycle/UrlRendererTest.java b/wicket-core/src/test/java/org/apache/wicket/core/request/cycle/UrlRendererTest.java
similarity index 99%
rename from wicket-core/src/test/java/org/apache/wicket/request/cycle/UrlRendererTest.java
rename to wicket-core/src/test/java/org/apache/wicket/core/request/cycle/UrlRendererTest.java
index b7df849..ce244a9 100644
--- a/wicket-core/src/test/java/org/apache/wicket/request/cycle/UrlRendererTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/request/cycle/UrlRendererTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.request.cycle;
+package org.apache.wicket.core.request.cycle;
 
 import static java.util.Arrays.asList;
 import static org.junit.jupiter.api.Assertions.assertEquals;
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/handler/PageIdPolicyTest.java b/wicket-core/src/test/java/org/apache/wicket/core/request/handler/PageIdPolicyTest.java
similarity index 95%
rename from wicket-core/src/test/java/org/apache/wicket/request/handler/PageIdPolicyTest.java
rename to wicket-core/src/test/java/org/apache/wicket/core/request/handler/PageIdPolicyTest.java
index b0895ed..3e2e558 100644
--- a/wicket-core/src/test/java/org/apache/wicket/request/handler/PageIdPolicyTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/request/handler/PageIdPolicyTest.java
@@ -1,170 +1,170 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.wicket.request.handler;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-
-import java.nio.charset.Charset;
-
-import org.apache.wicket.IPageManagerProvider;
-import org.apache.wicket.MarkupContainer;
-import org.apache.wicket.ajax.AjaxEventBehavior;
-import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.markup.IMarkupResourceStreamProvider;
-import org.apache.wicket.markup.html.WebComponent;
-import org.apache.wicket.markup.html.WebPage;
-import org.apache.wicket.mock.MockApplication;
-import org.apache.wicket.page.IManageablePage;
-import org.apache.wicket.page.IPageManager;
-import org.apache.wicket.page.PageManager;
-import org.apache.wicket.pageStore.IPageContext;
-import org.apache.wicket.pageStore.InMemoryPageStore;
-import org.apache.wicket.pageStore.RequestPageStore;
-import org.apache.wicket.request.Url;
-import org.apache.wicket.util.resource.IResourceStream;
-import org.apache.wicket.util.resource.StringResourceStream;
-import org.apache.wicket.util.tester.WicketTester;
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-
-/**
- * @author Pedro Santos
- */
-public class PageIdPolicyTest
-{
-	private WicketTester tester;
-	private InMemoryPageStore pageStore;
-	private MockApplication application;
-	private int storeCount;
-
-	/**
-	 * Asserting that page get touched in an AJAX request that is only repaint its children. <br />
-	 * In this case no new page id is being generated and the old page is touched and stored again.<br />
-	 * 
-	 * @see <a href="https://issues.apache.org/jira/browse/WICKET-3667">WICKET-3667</a>
-	 */
-	@Test
-	void testPageGetsTouchedInAjaxRequest()
-	{
-		TestPage testPage = new TestPage();
-		tester.startPage(TestPage.class);
-		int referenceStoreCount = storeCount;
-		tester.executeAjaxUrl(testPage.getAjaxUrl(tester.getRequest().getCharacterEncoding()));
-		// the page should be stored even for ajax requests
-		assertEquals(referenceStoreCount + 1, storeCount);
-	}
-
-	/**
-	 * 
-	 */
-	@Test
-	void testPageIdDontGetIncreasedInAjaxRequest()
-	{
-		TestPage testPage = new TestPage();
-		tester.startPage(testPage);
-		String testPageId = testPage.getId();
-		tester.executeAjaxUrl(testPage.getAjaxUrl(tester.getRequest().getCharacterEncoding()));
-		assertEquals(testPageId, testPage.getId());
-		assertTrue(testPage.ajaxCallbackExecuted);
-	}
-
-	@BeforeEach
-	void setUp() throws Exception
-	{
-		application = new MockApplication();
-		pageStore = new InMemoryPageStore("test", Integer.MAX_VALUE)
-		{
-			@Override
-			public void addPage(IPageContext context, IManageablePage page)
-			{
-				super.addPage(context, page);
-				storeCount++;
-			}
-		};
-		tester = new WicketTester(application)
-		{
-			@Override
-			protected IPageManagerProvider newTestPageManagerProvider()
-			{
-				return new IPageManagerProvider()
-				{
-					@Override
-					public IPageManager get()
-					{
-						return new PageManager(new RequestPageStore(pageStore));
-					}
-				};
-			}
-		};
-	}
-
-	@AfterEach
-	void tearDown() throws Exception
-	{
-		tester.destroy();
-	}
-
-	/** */
-	public static class TestPage extends WebPage implements IMarkupResourceStreamProvider
-	{
-		/** */
-		private static final long serialVersionUID = 1L;
-		AjaxEventBehavior eventBehavior;
-		boolean ajaxCallbackExecuted;
-
-		/**
-		 * Construct.
-		 */
-		public TestPage()
-		{
-			WebComponent component;
-			component = new WebComponent("component");
-			component.add(eventBehavior = new AjaxEventBehavior("click")
-			{
-				/** */
-				private static final long serialVersionUID = 1L;
-
-				@Override
-				protected void onEvent(AjaxRequestTarget target)
-				{
-					ajaxCallbackExecuted = true;
-				}
-			});
-			add(component);
-		}
-
-		/**
-		 * @param encoding
-		 * @return ajaxUrl
-		 */
-		public Url getAjaxUrl(String encoding)
-		{
-			return Url.parse(eventBehavior.getCallbackUrl().toString(), Charset.forName(encoding));
-		}
-
-		@Override
-		public IResourceStream getMarkupResourceStream(MarkupContainer container,
-			Class<?> containerClass)
-		{
-			return new StringResourceStream(
-				"<html><body><a wicket:id=\"component\"></a></body></html>");
-		}
-
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.core.request.handler;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import java.nio.charset.Charset;
+
+import org.apache.wicket.IPageManagerProvider;
+import org.apache.wicket.MarkupContainer;
+import org.apache.wicket.ajax.AjaxEventBehavior;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.markup.IMarkupResourceStreamProvider;
+import org.apache.wicket.markup.html.WebComponent;
+import org.apache.wicket.markup.html.WebPage;
+import org.apache.wicket.mock.MockApplication;
+import org.apache.wicket.page.IManageablePage;
+import org.apache.wicket.page.IPageManager;
+import org.apache.wicket.page.PageManager;
+import org.apache.wicket.pageStore.IPageContext;
+import org.apache.wicket.pageStore.InMemoryPageStore;
+import org.apache.wicket.pageStore.RequestPageStore;
+import org.apache.wicket.request.Url;
+import org.apache.wicket.util.resource.IResourceStream;
+import org.apache.wicket.util.resource.StringResourceStream;
+import org.apache.wicket.util.tester.WicketTester;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+/**
+ * @author Pedro Santos
+ */
+public class PageIdPolicyTest
+{
+	private WicketTester tester;
+	private InMemoryPageStore pageStore;
+	private MockApplication application;
+	private int storeCount;
+
+	/**
+	 * Asserting that page get touched in an AJAX request that is only repaint its children. <br />
+	 * In this case no new page id is being generated and the old page is touched and stored again.<br />
+	 * 
+	 * @see <a href="https://issues.apache.org/jira/browse/WICKET-3667">WICKET-3667</a>
+	 */
+	@Test
+	void testPageGetsTouchedInAjaxRequest()
+	{
+		TestPage testPage = new TestPage();
+		tester.startPage(TestPage.class);
+		int referenceStoreCount = storeCount;
+		tester.executeAjaxUrl(testPage.getAjaxUrl(tester.getRequest().getCharacterEncoding()));
+		// the page should be stored even for ajax requests
+		assertEquals(referenceStoreCount + 1, storeCount);
+	}
+
+	/**
+	 * 
+	 */
+	@Test
+	void testPageIdDontGetIncreasedInAjaxRequest()
+	{
+		TestPage testPage = new TestPage();
+		tester.startPage(testPage);
+		String testPageId = testPage.getId();
+		tester.executeAjaxUrl(testPage.getAjaxUrl(tester.getRequest().getCharacterEncoding()));
+		assertEquals(testPageId, testPage.getId());
+		assertTrue(testPage.ajaxCallbackExecuted);
+	}
+
+	@BeforeEach
+	void setUp() throws Exception
+	{
+		application = new MockApplication();
+		pageStore = new InMemoryPageStore("test", Integer.MAX_VALUE)
+		{
+			@Override
+			public void addPage(IPageContext context, IManageablePage page)
+			{
+				super.addPage(context, page);
+				storeCount++;
+			}
+		};
+		tester = new WicketTester(application)
+		{
+			@Override
+			protected IPageManagerProvider newTestPageManagerProvider()
+			{
+				return new IPageManagerProvider()
+				{
+					@Override
+					public IPageManager get()
+					{
+						return new PageManager(new RequestPageStore(pageStore));
+					}
+				};
+			}
+		};
+	}
+
+	@AfterEach
+	void tearDown() throws Exception
+	{
+		tester.destroy();
+	}
+
+	/** */
+	public static class TestPage extends WebPage implements IMarkupResourceStreamProvider
+	{
+		/** */
+		private static final long serialVersionUID = 1L;
+		AjaxEventBehavior eventBehavior;
+		boolean ajaxCallbackExecuted;
+
+		/**
+		 * Construct.
+		 */
+		public TestPage()
+		{
+			WebComponent component;
+			component = new WebComponent("component");
+			component.add(eventBehavior = new AjaxEventBehavior("click")
+			{
+				/** */
+				private static final long serialVersionUID = 1L;
+
+				@Override
+				protected void onEvent(AjaxRequestTarget target)
+				{
+					ajaxCallbackExecuted = true;
+				}
+			});
+			add(component);
+		}
+
+		/**
+		 * @param encoding
+		 * @return ajaxUrl
+		 */
+		public Url getAjaxUrl(String encoding)
+		{
+			return Url.parse(eventBehavior.getCallbackUrl().toString(), Charset.forName(encoding));
+		}
+
+		@Override
+		public IResourceStream getMarkupResourceStream(MarkupContainer container,
+			Class<?> containerClass)
+		{
+			return new StringResourceStream(
+				"<html><body><a wicket:id=\"component\"></a></body></html>");
+		}
+
+	}
+}
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/handler/PageProviderTest.java b/wicket-core/src/test/java/org/apache/wicket/core/request/handler/PageProviderTest.java
similarity index 99%
rename from wicket-core/src/test/java/org/apache/wicket/request/handler/PageProviderTest.java
rename to wicket-core/src/test/java/org/apache/wicket/core/request/handler/PageProviderTest.java
index 252760e..235dbaf 100644
--- a/wicket-core/src/test/java/org/apache/wicket/request/handler/PageProviderTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/request/handler/PageProviderTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.request.handler;
+package org.apache.wicket.core.request.handler;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/handler/render/AbstractVariations.java b/wicket-core/src/test/java/org/apache/wicket/core/request/handler/render/AbstractVariations.java
similarity index 95%
rename from wicket-core/src/test/java/org/apache/wicket/request/handler/render/AbstractVariations.java
rename to wicket-core/src/test/java/org/apache/wicket/core/request/handler/render/AbstractVariations.java
index af4fe15..66ef83c 100644
--- a/wicket-core/src/test/java/org/apache/wicket/request/handler/render/AbstractVariations.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/request/handler/render/AbstractVariations.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.request.handler.render;
+package org.apache.wicket.core.request.handler.render;
 
 abstract class AbstractVariations
 {
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/handler/render/ShouldRedirectToTargetUrl.java b/wicket-core/src/test/java/org/apache/wicket/core/request/handler/render/ShouldRedirectToTargetUrl.java
similarity index 98%
rename from wicket-core/src/test/java/org/apache/wicket/request/handler/render/ShouldRedirectToTargetUrl.java
rename to wicket-core/src/test/java/org/apache/wicket/core/request/handler/render/ShouldRedirectToTargetUrl.java
index 55486d6..546f938 100644
--- a/wicket-core/src/test/java/org/apache/wicket/request/handler/render/ShouldRedirectToTargetUrl.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/request/handler/render/ShouldRedirectToTargetUrl.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.request.handler.render;
+package org.apache.wicket.core.request.handler.render;
 
 import org.apache.wicket.core.request.handler.RenderPageRequestHandler;
 import org.apache.wicket.request.Url;
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/handler/render/ShouldRenderPageAndWriteResponseVariations.java b/wicket-core/src/test/java/org/apache/wicket/core/request/handler/render/ShouldRenderPageAndWriteResponseVariations.java
similarity index 98%
rename from wicket-core/src/test/java/org/apache/wicket/request/handler/render/ShouldRenderPageAndWriteResponseVariations.java
rename to wicket-core/src/test/java/org/apache/wicket/core/request/handler/render/ShouldRenderPageAndWriteResponseVariations.java
index 4a7ed37..deda4d7 100644
--- a/wicket-core/src/test/java/org/apache/wicket/request/handler/render/ShouldRenderPageAndWriteResponseVariations.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/request/handler/render/ShouldRenderPageAndWriteResponseVariations.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.request.handler.render;
+package org.apache.wicket.core.request.handler.render;
 
 import org.apache.wicket.core.request.handler.RenderPageRequestHandler;
 import org.apache.wicket.request.Url;
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/handler/render/SkipRenderWithSetResponsePageTest.java b/wicket-core/src/test/java/org/apache/wicket/core/request/handler/render/SkipRenderWithSetResponsePageTest.java
similarity index 96%
rename from wicket-core/src/test/java/org/apache/wicket/request/handler/render/SkipRenderWithSetResponsePageTest.java
rename to wicket-core/src/test/java/org/apache/wicket/core/request/handler/render/SkipRenderWithSetResponsePageTest.java
index 885c8ca..d1cecd7 100644
--- a/wicket-core/src/test/java/org/apache/wicket/request/handler/render/SkipRenderWithSetResponsePageTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/request/handler/render/SkipRenderWithSetResponsePageTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.request.handler.render;
+package org.apache.wicket.core.request.handler.render;
 
 import static org.junit.jupiter.api.Assertions.fail;
 
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/handler/render/StatelessPageManipulatingPageParametersTest.java b/wicket-core/src/test/java/org/apache/wicket/core/request/handler/render/StatelessPageManipulatingPageParametersTest.java
similarity index 98%
rename from wicket-core/src/test/java/org/apache/wicket/request/handler/render/StatelessPageManipulatingPageParametersTest.java
rename to wicket-core/src/test/java/org/apache/wicket/core/request/handler/render/StatelessPageManipulatingPageParametersTest.java
index efb11f2..54bc4b9 100644
--- a/wicket-core/src/test/java/org/apache/wicket/request/handler/render/StatelessPageManipulatingPageParametersTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/request/handler/render/StatelessPageManipulatingPageParametersTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.request.handler.render;
+package org.apache.wicket.core.request.handler.render;
 
 import org.apache.wicket.MarkupContainer;
 import org.apache.wicket.markup.IMarkupResourceStreamProvider;
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/handler/render/TestPageRenderer.java b/wicket-core/src/test/java/org/apache/wicket/core/request/handler/render/TestPageRenderer.java
similarity index 84%
rename from wicket-core/src/test/java/org/apache/wicket/request/handler/render/TestPageRenderer.java
rename to wicket-core/src/test/java/org/apache/wicket/core/request/handler/render/TestPageRenderer.java
index bed615e..b285e17 100644
--- a/wicket-core/src/test/java/org/apache/wicket/request/handler/render/TestPageRenderer.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/request/handler/render/TestPageRenderer.java
@@ -14,13 +14,14 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.request.handler.render;
+package org.apache.wicket.core.request.handler.render;
 
 import org.apache.wicket.core.request.handler.RenderPageRequestHandler;
 import org.apache.wicket.core.request.handler.RenderPageRequestHandler.RedirectPolicy;
 import org.apache.wicket.protocol.http.BufferedWebResponse;
 import org.apache.wicket.request.Url;
 import org.apache.wicket.request.cycle.RequestCycle;
+import org.apache.wicket.request.handler.render.WebPageRenderer;
 
 /**
  * Configures common methods which are used by all tests
@@ -43,6 +44,16 @@ class TestPageRenderer extends WebPageRenderer
 	}
 
 	@Override
+	public boolean shouldRedirectToTargetUrl(RequestCycle cycle, Url currentUrl, Url targetUrl) {
+		return super.shouldRedirectToTargetUrl(cycle, currentUrl, targetUrl);
+	}
+
+	@Override
+	public boolean shouldRenderPageAndWriteResponse(RequestCycle cycle, Url currentUrl, Url targetUrl) {
+		return super.shouldRenderPageAndWriteResponse(cycle, currentUrl, targetUrl);
+	}
+
+	@Override
 	protected BufferedWebResponse renderPage(Url targetUrl, RequestCycle requestCycle)
 	{
 		BufferedWebResponse webResponse = super.renderPage(targetUrl, requestCycle);
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/handler/render/TestVariations.java b/wicket-core/src/test/java/org/apache/wicket/core/request/handler/render/TestVariations.java
similarity index 97%
rename from wicket-core/src/test/java/org/apache/wicket/request/handler/render/TestVariations.java
rename to wicket-core/src/test/java/org/apache/wicket/core/request/handler/render/TestVariations.java
index 4473c73..6b87173 100644
--- a/wicket-core/src/test/java/org/apache/wicket/request/handler/render/TestVariations.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/request/handler/render/TestVariations.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.request.handler.render;
+package org.apache.wicket.core.request.handler.render;
 
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/handler/render/Variation.java b/wicket-core/src/test/java/org/apache/wicket/core/request/handler/render/Variation.java
similarity index 96%
copy from wicket-core/src/test/java/org/apache/wicket/request/handler/render/Variation.java
copy to wicket-core/src/test/java/org/apache/wicket/core/request/handler/render/Variation.java
index 8bc014e..0d3955d 100644
--- a/wicket-core/src/test/java/org/apache/wicket/request/handler/render/Variation.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/request/handler/render/Variation.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.request.handler.render;
+package org.apache.wicket.core.request.handler.render;
 
 import java.util.Arrays;
 import java.util.List;
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/handler/render/VariationIterator.java b/wicket-core/src/test/java/org/apache/wicket/core/request/handler/render/VariationIterator.java
similarity index 97%
rename from wicket-core/src/test/java/org/apache/wicket/request/handler/render/VariationIterator.java
rename to wicket-core/src/test/java/org/apache/wicket/core/request/handler/render/VariationIterator.java
index 14480ba..8014ff3 100644
--- a/wicket-core/src/test/java/org/apache/wicket/request/handler/render/VariationIterator.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/request/handler/render/VariationIterator.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.request.handler.render;
+package org.apache.wicket.core.request.handler.render;
 
 import java.util.Iterator;
 import java.util.NoSuchElementException;
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/handler/render/WebPageRendererTest.java b/wicket-core/src/test/java/org/apache/wicket/core/request/handler/render/WebPageRendererTest.java
similarity index 95%
rename from wicket-core/src/test/java/org/apache/wicket/request/handler/render/WebPageRendererTest.java
rename to wicket-core/src/test/java/org/apache/wicket/core/request/handler/render/WebPageRendererTest.java
index caea667..b8244cd 100644
--- a/wicket-core/src/test/java/org/apache/wicket/request/handler/render/WebPageRendererTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/request/handler/render/WebPageRendererTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.request.handler.render;
+package org.apache.wicket.core.request.handler.render;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
@@ -38,8 +38,10 @@ import org.apache.wicket.request.Url;
 import org.apache.wicket.request.UrlRenderer;
 import org.apache.wicket.request.component.IRequestablePage;
 import org.apache.wicket.request.cycle.RequestCycle;
+import org.apache.wicket.request.handler.render.PageRenderer;
 import org.apache.wicket.request.http.WebRequest;
 import org.apache.wicket.request.http.WebResponse;
+import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
@@ -612,7 +614,7 @@ class WebPageRendererTest
 		renderer.newPageInstance = true;
 		renderer.pageStateless = true;
 
-		assertTrue(renderer.shouldRenderPageAndWriteResponse(requestCycle,
+		Assertions.assertTrue(renderer.shouldRenderPageAndWriteResponse(requestCycle,
 			Url.parse("test"), Url.parse("test")));
 
 		renderer.ajax = false;
@@ -622,7 +624,7 @@ class WebPageRendererTest
 		renderer.newPageInstance = false;
 		renderer.pageStateless = false;
 
-		assertTrue(renderer.shouldRenderPageAndWriteResponse(requestCycle,
+		Assertions.assertTrue(renderer.shouldRenderPageAndWriteResponse(requestCycle,
 			Url.parse("test1"), Url.parse("test2")));
 
 		// 	or
@@ -634,7 +636,7 @@ class WebPageRendererTest
 		renderer.ajax = false;
 		renderer.onePassRender = true;
 
-		assertTrue(renderer.shouldRenderPageAndWriteResponse(requestCycle,
+		Assertions.assertTrue(renderer.shouldRenderPageAndWriteResponse(requestCycle,
 			Url.parse("test1"), Url.parse("test2")));
 
 		renderer.redirectPolicy = RedirectPolicy.ALWAYS_REDIRECT;
@@ -643,21 +645,21 @@ class WebPageRendererTest
 		renderer.newPageInstance = false;
 		renderer.pageStateless = false;
 
-		assertTrue(renderer.shouldRenderPageAndWriteResponse(requestCycle,
+		Assertions.assertTrue(renderer.shouldRenderPageAndWriteResponse(requestCycle,
 			Url.parse("test"), Url.parse("test")));
 
 		//	or
 		//		the targetUrl matches current url and it's redirect-to-render
 		renderer.redirectToRender = true;
 
-		assertTrue(renderer.shouldRenderPageAndWriteResponse(requestCycle,
+		Assertions.assertTrue(renderer.shouldRenderPageAndWriteResponse(requestCycle,
 			Url.parse("test"), Url.parse("test")));
 
 		renderer.pageStateless = true;
 		renderer.newPageInstance = true;
 		renderer.redirectToRender = true;
 
-		assertTrue(renderer.shouldRenderPageAndWriteResponse(requestCycle,
+		Assertions.assertTrue(renderer.shouldRenderPageAndWriteResponse(requestCycle,
 			Url.parse("test"), Url.parse("test")));
 
 		//	or
@@ -672,7 +674,7 @@ class WebPageRendererTest
 		renderer.newPageInstance = true;
 		renderer.pageStateless = true;
 
-		assertTrue(renderer.shouldRenderPageAndWriteResponse(requestCycle,
+		Assertions.assertTrue(renderer.shouldRenderPageAndWriteResponse(requestCycle,
 			Url.parse("test1"), Url.parse("test2")));
 
 	}
@@ -704,14 +706,14 @@ class WebPageRendererTest
 		renderer.newPageInstance = true;
 		renderer.pageStateless = true;
 
-		assertFalse(renderer.shouldRenderPageAndWriteResponse(requestCycle,
+		Assertions.assertFalse(renderer.shouldRenderPageAndWriteResponse(requestCycle,
 			Url.parse("test1"), Url.parse("test2")));
 
 		renderer.redirectToRender = false;
 		renderer.newPageInstance = false;
 		renderer.pageStateless = false;
 
-		assertFalse(renderer.shouldRenderPageAndWriteResponse(requestCycle,
+		Assertions.assertFalse(renderer.shouldRenderPageAndWriteResponse(requestCycle,
 			Url.parse("test"), Url.parse("test")));
 	}
 
@@ -794,7 +796,7 @@ class WebPageRendererTest
 		renderer.pageStateless = false;
 		renderer.sessionTemporary = false;
 
-		assertTrue(renderer.shouldRedirectToTargetUrl(requestCycle, Url.parse("test1"),
+		Assertions.assertTrue(renderer.shouldRedirectToTargetUrl(requestCycle, Url.parse("test1"),
 			Url.parse("test2")));
 
 		// 	or
@@ -802,7 +804,7 @@ class WebPageRendererTest
 		renderer.redirectPolicy = RedirectPolicy.AUTO_REDIRECT;
 		renderer.redirectToRender = true;
 
-		assertTrue(renderer.shouldRedirectToTargetUrl(requestCycle, Url.parse("test1"),
+		Assertions.assertTrue(renderer.shouldRedirectToTargetUrl(requestCycle, Url.parse("test1"),
 			Url.parse("test2")));
 
 		//	or
@@ -810,7 +812,7 @@ class WebPageRendererTest
 		renderer.redirectToRender = false;
 		renderer.ajax = true;
 
-		assertTrue(renderer.shouldRedirectToTargetUrl(requestCycle, Url.parse("test"),
+		Assertions.assertTrue(renderer.shouldRedirectToTargetUrl(requestCycle, Url.parse("test"),
 			Url.parse("test")));
 
 		// 	or
@@ -821,14 +823,14 @@ class WebPageRendererTest
 		renderer.ajax = false;
 		renderer.newPageInstance = true;
 
-		assertTrue(renderer.shouldRedirectToTargetUrl(requestCycle, Url.parse("test1"),
+		Assertions.assertTrue(renderer.shouldRedirectToTargetUrl(requestCycle, Url.parse("test1"),
 			Url.parse("test2")));
 
 		renderer.newPageInstance = false;
 		renderer.sessionTemporary = true;
 		renderer.pageStateless = true;
 
-		assertTrue(renderer.shouldRedirectToTargetUrl(requestCycle, Url.parse("test1"),
+		Assertions.assertTrue(renderer.shouldRedirectToTargetUrl(requestCycle, Url.parse("test1"),
 			Url.parse("test2")));
 		// just redirect
 	}
@@ -857,7 +859,7 @@ class WebPageRendererTest
 		renderer.pageStateless=false;
 		renderer.sessionTemporary=false;
 
-		assertFalse(renderer.shouldRedirectToTargetUrl(requestCycle, Url.parse("test1"),
+		Assertions.assertFalse(renderer.shouldRedirectToTargetUrl(requestCycle, Url.parse("test1"),
 				Url.parse("test2")));
 	}
 
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/handler/resource/ResourceAuthorizationTest.java b/wicket-core/src/test/java/org/apache/wicket/core/request/handler/resource/ResourceAuthorizationTest.java
similarity index 98%
rename from wicket-core/src/test/java/org/apache/wicket/request/handler/resource/ResourceAuthorizationTest.java
rename to wicket-core/src/test/java/org/apache/wicket/core/request/handler/resource/ResourceAuthorizationTest.java
index cd4887c..bb8cc80 100644
--- a/wicket-core/src/test/java/org/apache/wicket/request/handler/resource/ResourceAuthorizationTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/request/handler/resource/ResourceAuthorizationTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.request.handler.resource;
+package org.apache.wicket.core.request.handler.resource;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertThrows;
diff --git a/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/AbstractBookmarkableMapperTest.java b/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/AbstractBookmarkableMapperTest.java
index 3af1c62..7eae474 100644
--- a/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/AbstractBookmarkableMapperTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/AbstractBookmarkableMapperTest.java
@@ -29,7 +29,7 @@ import org.apache.wicket.request.Request;
 import org.apache.wicket.request.Url;
 import org.apache.wicket.request.mapper.info.PageInfo;
 import org.apache.wicket.util.tester.WicketTestCase;
-import org.apache.wicket.util.tester.WicketTesterLazyIsPageStatelessRedirectToBufferTest.EmptyPage;
+import org.apache.wicket.core.util.tester.WicketTesterLazyIsPageStatelessRedirectToBufferTest.EmptyPage;
 import org.junit.jupiter.api.Test;
 
 /**
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/mapper/CustomHomePageTest.java b/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/CustomHomePageTest.java
similarity index 98%
rename from wicket-core/src/test/java/org/apache/wicket/request/mapper/CustomHomePageTest.java
rename to wicket-core/src/test/java/org/apache/wicket/core/request/mapper/CustomHomePageTest.java
index ecdefe4..94137a9 100644
--- a/wicket-core/src/test/java/org/apache/wicket/request/mapper/CustomHomePageTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/CustomHomePageTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.request.mapper;
+package org.apache.wicket.core.request.mapper;
 
 import org.apache.wicket.Application;
 import org.apache.wicket.protocol.http.WebApplication;
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/mapper/info/ComponentInfoTest.java b/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/info/ComponentInfoTest.java
similarity index 97%
rename from wicket-core/src/test/java/org/apache/wicket/request/mapper/info/ComponentInfoTest.java
rename to wicket-core/src/test/java/org/apache/wicket/core/request/mapper/info/ComponentInfoTest.java
index 21df52e..60f2fe9 100644
--- a/wicket-core/src/test/java/org/apache/wicket/request/mapper/info/ComponentInfoTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/info/ComponentInfoTest.java
@@ -14,11 +14,12 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.request.mapper.info;
+package org.apache.wicket.core.request.mapper.info;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNull;
 
+import org.apache.wicket.request.mapper.info.ComponentInfo;
 import org.junit.jupiter.api.Test;
 
 /**
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/mapper/info/PageComponentInfoTest.java b/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/info/PageComponentInfoTest.java
similarity index 95%
rename from wicket-core/src/test/java/org/apache/wicket/request/mapper/info/PageComponentInfoTest.java
rename to wicket-core/src/test/java/org/apache/wicket/core/request/mapper/info/PageComponentInfoTest.java
index a657b88..3802f7d 100644
--- a/wicket-core/src/test/java/org/apache/wicket/request/mapper/info/PageComponentInfoTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/info/PageComponentInfoTest.java
@@ -14,12 +14,13 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.request.mapper.info;
+package org.apache.wicket.core.request.mapper.info;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertNull;
 
+import org.apache.wicket.request.mapper.info.PageComponentInfo;
 import org.junit.jupiter.api.Test;
 
 /**
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/resource/BundlesPage.html b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/BundlesPage.html
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/request/resource/BundlesPage.html
rename to wicket-core/src/test/java/org/apache/wicket/core/request/resource/BundlesPage.html
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/resource/BundlesPage.java b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/BundlesPage.java
similarity index 91%
copy from wicket-core/src/test/java/org/apache/wicket/request/resource/BundlesPage.java
copy to wicket-core/src/test/java/org/apache/wicket/core/request/resource/BundlesPage.java
index 74d4084..88d07bb 100644
--- a/wicket-core/src/test/java/org/apache/wicket/request/resource/BundlesPage.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/BundlesPage.java
@@ -14,11 +14,12 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.request.resource;
+package org.apache.wicket.core.request.resource;
 
 import org.apache.wicket.markup.head.IHeaderResponse;
 import org.apache.wicket.markup.head.JavaScriptHeaderItem;
 import org.apache.wicket.markup.html.WebPage;
+import org.apache.wicket.request.resource.JavaScriptResourceReference;
 
 /**
  * @author papegaaij
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/resource/BundlesPage_ext_result.html b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/BundlesPage_ext_result.html
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/request/resource/BundlesPage_ext_result.html
rename to wicket-core/src/test/java/org/apache/wicket/core/request/resource/BundlesPage_ext_result.html
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/resource/BundlesPage_result.html b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/BundlesPage_result.html
similarity index 56%
rename from wicket-core/src/test/java/org/apache/wicket/request/resource/BundlesPage_result.html
rename to wicket-core/src/test/java/org/apache/wicket/core/request/resource/BundlesPage_result.html
index 02caf0a..345aaf1 100644
--- a/wicket-core/src/test/java/org/apache/wicket/request/resource/BundlesPage_result.html
+++ b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/BundlesPage_result.html
@@ -1,5 +1,5 @@
 <html>
-<head><script type="text/javascript" src="../resource/org.apache.wicket.request.resource.ResouceBundleTest/ab.js"></script>
+<head><script type="text/javascript" src="../resource/org.apache.wicket.core.request.resource.ResouceBundleTest/ab.js"></script>
 </head><body>
 
 </body>
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/resource/BundlesPage_result_defer.html b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/BundlesPage_result_defer.html
similarity index 52%
rename from wicket-core/src/test/java/org/apache/wicket/request/resource/BundlesPage_result_defer.html
rename to wicket-core/src/test/java/org/apache/wicket/core/request/resource/BundlesPage_result_defer.html
index ebaf99e..995a44c 100644
--- a/wicket-core/src/test/java/org/apache/wicket/request/resource/BundlesPage_result_defer.html
+++ b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/BundlesPage_result_defer.html
@@ -1,5 +1,5 @@
 <html>
-<head><script type="text/javascript" defer="defer" src="../resource/org.apache.wicket.request.resource.ResouceBundleTest/ab.js"></script>
+<head><script type="text/javascript" defer="defer" src="../resource/org.apache.wicket.core.request.resource.ResouceBundleTest/ab.js"></script>
 </head><body>
 
 </body>
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/resource/ByteArrayResourceTest.java b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/ByteArrayResourceTest.java
similarity index 97%
rename from wicket-core/src/test/java/org/apache/wicket/request/resource/ByteArrayResourceTest.java
rename to wicket-core/src/test/java/org/apache/wicket/core/request/resource/ByteArrayResourceTest.java
index 838aff9..aaf2494 100644
--- a/wicket-core/src/test/java/org/apache/wicket/request/resource/ByteArrayResourceTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/ByteArrayResourceTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.request.resource;
+package org.apache.wicket.core.request.resource;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.mockito.ArgumentMatchers.eq;
@@ -26,6 +26,7 @@ import jakarta.servlet.http.HttpServletResponse;
 
 import org.apache.wicket.request.http.WebRequest;
 import org.apache.wicket.request.http.WebResponse;
+import org.apache.wicket.request.resource.ByteArrayResource;
 import org.apache.wicket.request.resource.IResource.Attributes;
 import org.apache.wicket.util.tester.WicketTestCase;
 import org.junit.jupiter.api.Test;
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/resource/CharSequenceResourceTest.java b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/CharSequenceResourceTest.java
similarity index 77%
rename from wicket-core/src/test/java/org/apache/wicket/request/resource/CharSequenceResourceTest.java
rename to wicket-core/src/test/java/org/apache/wicket/core/request/resource/CharSequenceResourceTest.java
index 340597d..23404aa 100644
--- a/wicket-core/src/test/java/org/apache/wicket/request/resource/CharSequenceResourceTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/CharSequenceResourceTest.java
@@ -14,13 +14,14 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.request.resource;
+package org.apache.wicket.core.request.resource;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
 import java.nio.charset.Charset;
 import java.nio.charset.StandardCharsets;
 
+import org.apache.wicket.request.resource.CharSequenceResource;
 import org.junit.jupiter.api.Test;
 
 /**
@@ -28,17 +29,30 @@ import org.junit.jupiter.api.Test;
  */
 class CharSequenceResourceTest
 {
+	class CSR extends CharSequenceResource
+	{
+		public CSR(String contentType) {
+			super(contentType);
+		}
+
+		// make it public for the test
+		@Override
+		public Long getLength(CharSequence data) {
+			return super.getLength(data);
+		}
+	}
+
 	@Test
 	void getLength_whenNoUnicodeSymbols_thenReturnTheStringLength() throws Exception
 	{
-		CharSequenceResource resource = new CharSequenceResource("plain/text");
+		CSR resource = new CSR("plain/text");
 		assertEquals(Long.valueOf(4L), resource.getLength("abcd"));
 	}
 
 	@Test
 	void getLength_UTF8_whenUnicodeSymbols_thenReturnTheBytesLength() throws Exception
 	{
-		CharSequenceResource resource = new CharSequenceResource("plain/text");
+		CSR resource = new CSR("plain/text");
 		resource.setCharset(StandardCharsets.UTF_8);
 		assertEquals(Long.valueOf(5L), resource.getLength("a\u1234d"));
 	}
@@ -46,7 +60,7 @@ class CharSequenceResourceTest
 	@Test
 	void getLength_UTF16_whenUnicodeSymbols_thenReturnTheBytesLength() throws Exception
 	{
-		CharSequenceResource resource = new CharSequenceResource("plain/text");
+		CSR resource = new CSR("plain/text");
 		resource.setCharset(StandardCharsets.UTF_16);
 		assertEquals(Long.valueOf(8L), resource.getLength("a\u1234d"));
 	}
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/resource/ContextRelativeResourceReferenceTest.java b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/ContextRelativeResourceReferenceTest.java
similarity index 93%
rename from wicket-core/src/test/java/org/apache/wicket/request/resource/ContextRelativeResourceReferenceTest.java
rename to wicket-core/src/test/java/org/apache/wicket/core/request/resource/ContextRelativeResourceReferenceTest.java
index 2153310..b4bb670 100644
--- a/wicket-core/src/test/java/org/apache/wicket/request/resource/ContextRelativeResourceReferenceTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/ContextRelativeResourceReferenceTest.java
@@ -14,11 +14,13 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.request.resource;
+package org.apache.wicket.core.request.resource;
 
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.apache.wicket.protocol.http.WebApplication;
+import org.apache.wicket.request.resource.ContextRelativeResource;
+import org.apache.wicket.request.resource.ContextRelativeResourceReference;
 import org.apache.wicket.util.tester.WicketTestCase;
 import org.apache.wicket.util.tester.WicketTester;
 import org.junit.jupiter.api.Test;
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/resource/CssPackageResourceTest.java b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/CssPackageResourceTest.java
similarity index 96%
rename from wicket-core/src/test/java/org/apache/wicket/request/resource/CssPackageResourceTest.java
rename to wicket-core/src/test/java/org/apache/wicket/core/request/resource/CssPackageResourceTest.java
index 7820e4c..5038afd 100644
--- a/wicket-core/src/test/java/org/apache/wicket/request/resource/CssPackageResourceTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/CssPackageResourceTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.request.resource;
+package org.apache.wicket.core.request.resource;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
@@ -24,6 +24,7 @@ import org.apache.wicket.css.ICssCompressor;
 import org.apache.wicket.markup.html.PackageResourceTest;
 import org.apache.wicket.mock.MockApplication;
 import org.apache.wicket.protocol.http.WebApplication;
+import org.apache.wicket.request.resource.CssPackageResource;
 import org.apache.wicket.util.tester.WicketTestCase;
 import org.junit.jupiter.api.Test;
 
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/resource/DynamicImageResourceTest.java b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/DynamicImageResourceTest.java
similarity index 95%
rename from wicket-core/src/test/java/org/apache/wicket/request/resource/DynamicImageResourceTest.java
rename to wicket-core/src/test/java/org/apache/wicket/core/request/resource/DynamicImageResourceTest.java
index 37103f2..da8ab1a 100644
--- a/wicket-core/src/test/java/org/apache/wicket/request/resource/DynamicImageResourceTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/DynamicImageResourceTest.java
@@ -14,13 +14,14 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.request.resource;
+package org.apache.wicket.core.request.resource;
 
 import static org.junit.jupiter.api.Assertions.assertArrayEquals;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
 import jakarta.servlet.http.HttpServletResponse;
 
+import org.apache.wicket.request.resource.DynamicImageResource;
 import org.apache.wicket.util.tester.WicketTestCase;
 import org.junit.jupiter.api.Test;
 
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/resource/JavaScriptPackageResourceTest.java b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/JavaScriptPackageResourceTest.java
similarity index 97%
rename from wicket-core/src/test/java/org/apache/wicket/request/resource/JavaScriptPackageResourceTest.java
rename to wicket-core/src/test/java/org/apache/wicket/core/request/resource/JavaScriptPackageResourceTest.java
index 14a63cb..a0b4e13 100644
--- a/wicket-core/src/test/java/org/apache/wicket/request/resource/JavaScriptPackageResourceTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/JavaScriptPackageResourceTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.request.resource;
+package org.apache.wicket.core.request.resource;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
@@ -25,6 +25,7 @@ import org.apache.wicket.javascript.IJavaScriptCompressor;
 import org.apache.wicket.markup.html.PackageResourceTest;
 import org.apache.wicket.mock.MockApplication;
 import org.apache.wicket.protocol.http.WebApplication;
+import org.apache.wicket.request.resource.JavaScriptPackageResource;
 import org.apache.wicket.util.resource.ResourceStreamNotFoundException;
 import org.apache.wicket.util.tester.WicketTestCase;
 import org.junit.jupiter.api.Test;
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/resource/LessResourceReference.less b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/LessResourceReference.less
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/request/resource/LessResourceReference.less
rename to wicket-core/src/test/java/org/apache/wicket/core/request/resource/LessResourceReference.less
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/resource/LessResourceReferenceTest.java b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/LessResourceReferenceTest.java
similarity index 88%
rename from wicket-core/src/test/java/org/apache/wicket/request/resource/LessResourceReferenceTest.java
rename to wicket-core/src/test/java/org/apache/wicket/core/request/resource/LessResourceReferenceTest.java
index 7e4b6d5..56146d4 100644
--- a/wicket-core/src/test/java/org/apache/wicket/request/resource/LessResourceReferenceTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/LessResourceReferenceTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.request.resource;
+package org.apache.wicket.core.request.resource;
 
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -29,6 +29,11 @@ import org.apache.wicket.markup.html.SecurePackageResourceGuard;
 import org.apache.wicket.markup.html.WebPage;
 import org.apache.wicket.mock.MockApplication;
 import org.apache.wicket.protocol.http.WebApplication;
+import org.apache.wicket.request.resource.CssPackageResource;
+import org.apache.wicket.request.resource.CssResourceReference;
+import org.apache.wicket.request.resource.PackageResource;
+import org.apache.wicket.request.resource.ResourceReference;
+import org.apache.wicket.request.resource.ResourceReferenceRegistry;
 import org.apache.wicket.util.file.Files;
 import org.apache.wicket.util.resource.IResourceStream;
 import org.apache.wicket.util.resource.StringResourceStream;
@@ -41,7 +46,7 @@ import org.junit.jupiter.api.Test;
  *
  * @since 1.5.9
  */
-public class LessResourceReferenceTest extends WicketTestCase
+class LessResourceReferenceTest extends WicketTestCase
 {
 	private static final AtomicBoolean PROCESS_RESPONSE_CALLED = new AtomicBoolean(false);
 
@@ -128,8 +133,8 @@ public class LessResourceReferenceTest extends WicketTestCase
 	void processLessResourcesWithoutStartingAPage()
 	{
 		// make a request to the resource that is not registered in the ResourceReferenceRegistry
-		CharSequence urlToReference = "./wicket/resource/org.apache.wicket.request.resource.LessResourceReferenceTest/LessResourceReference.less";
-		tester.executeUrl(urlToReference.toString());
+		String urlToReference = "./wicket/resource/org.apache.wicket.core.request.resource.LessResourceReferenceTest/LessResourceReference.less";
+		tester.executeUrl(urlToReference);
 		assertTrue(PROCESS_RESPONSE_CALLED.get());
 	}
 
@@ -146,7 +151,7 @@ public class LessResourceReferenceTest extends WicketTestCase
 
 		public IResourceStream getMarkupResourceStream(MarkupContainer container, Class<?> containerClass)
 		{
-			return new StringResourceStream("<html/>");
+			return new StringResourceStream("<html><head></head><body></body></html>");
 		}
 	}
 
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/resource/MetaInfStaticResourceReferenceTest.java b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/MetaInfStaticResourceReferenceTest.java
similarity index 90%
rename from wicket-core/src/test/java/org/apache/wicket/request/resource/MetaInfStaticResourceReferenceTest.java
rename to wicket-core/src/test/java/org/apache/wicket/core/request/resource/MetaInfStaticResourceReferenceTest.java
index 135e42f..e300cb4 100644
--- a/wicket-core/src/test/java/org/apache/wicket/request/resource/MetaInfStaticResourceReferenceTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/MetaInfStaticResourceReferenceTest.java
@@ -1,119 +1,121 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.wicket.request.resource;
-
-import static org.junit.jupiter.api.Assertions.assertFalse;
-import static org.junit.jupiter.api.Assertions.assertNotNull;
-
-import java.lang.reflect.Field;
-import java.net.MalformedURLException;
-import java.net.URL;
-
-import org.apache.wicket.mock.MockApplication;
-import org.apache.wicket.mock.MockWebRequest;
-import org.apache.wicket.protocol.http.mock.MockServletContext;
-import org.apache.wicket.request.IRequestHandler;
-import org.apache.wicket.request.Url;
-import org.apache.wicket.util.tester.BaseWicketTester;
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-
-/**
- * Tests for {@link MetaInfStaticResourceReference}.
- * 
- * @author akiraly
- */
-class MetaInfStaticResourceReferenceTest
-{
-	private static final String STATIC_RESOURCE_NAME = "sample.js";
-
-	/**
-	 * Test with Servlet 3.0 container
-	 * 
-	 * @throws MalformedURLException
-	 *             should not happen
-	 */
-	@Test
-	void testWithServlet30() throws MalformedURLException
-	{
-		MockApplication application = new MockApplication();
-		MockServletContext servletContext = new MockServletContext(application, null);
-		BaseWicketTester tester = new BaseWicketTester(application, servletContext);
-
-		MetaInfStaticResourceReference metaRes = new MetaInfStaticResourceReference(getClass(),
-			STATIC_RESOURCE_NAME);
-		PackageResourceReference packRes = new PackageResourceReference(getClass(),
-			STATIC_RESOURCE_NAME);
-
-		Url packUrl = tester.getRequestCycle().mapUrlFor(packRes, null);
-		Url metaUrl = tester.getRequestCycle().mapUrlFor(metaRes, null);
-
-		assertNotNull(metaUrl);
-		assertNotNull(packUrl);
-		assertFalse(metaUrl.equals(packUrl), "Meta and pack resource should not map to the same url under servlet 3.0.");
-
-		String metaUrlStr = metaUrl.toString();
-		if (metaUrlStr.charAt(1) != '/')
-		{
-			metaUrlStr = "/" + metaUrlStr;
-		}
-
-		// meta resource is served by the servlet container under 3.0
-		URL metaNetUrl = servletContext.getResource(metaUrlStr);
-
-		assertNotNull(metaNetUrl, "Meta resource is not found by the 3.0 servlet container.");
-
-		MockWebRequest request = new MockWebRequest(packUrl);
-
-		IRequestHandler requestHandler = tester.getApplication()
-			.getRootRequestMapper()
-			.mapRequest(request);
-
-		// the pack resource is still served by wicket
-		assertNotNull(requestHandler);
-	}
-
-	/**
-	 * Needs to clear META_INF_RESOURCES_SUPPORTED field in {@link MetaInfStaticResourceReference}
-	 * class between tests because classes do not get reloaded between junit tests. This is not a
-	 * problem in production where the servlet container is not changing versions.
-	 * 
-	 * @throws Exception
-	 *             if the reflection magic failed
-	 */
-	@BeforeEach
-	void before() throws Exception
-	{
-		Field field = MetaInfStaticResourceReference.class.getDeclaredField("META_INF_RESOURCES_SUPPORTED");
-		field.setAccessible(true);
-		field.set(null, null);
-	}
-
-	/**
-	 * {@link #before()}
-	 * 
-	 * @throws Exception
-	 *             if before fails
-	 */
-	@AfterEach
-	void after() throws Exception
-	{
-		before();
-	}
-
-}
\ No newline at end of file
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.core.request.resource;
+
+import static org.junit.jupiter.api.Assertions.assertNotEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+
+import java.lang.reflect.Field;
+import java.net.MalformedURLException;
+import java.net.URL;
+
+import org.apache.wicket.mock.MockApplication;
+import org.apache.wicket.mock.MockWebRequest;
+import org.apache.wicket.protocol.http.mock.MockServletContext;
+import org.apache.wicket.request.IRequestHandler;
+import org.apache.wicket.request.Url;
+import org.apache.wicket.request.resource.MetaInfStaticResourceReference;
+import org.apache.wicket.request.resource.PackageResourceReference;
+import org.apache.wicket.util.tester.BaseWicketTester;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Tests for {@link MetaInfStaticResourceReference}.
+ * 
+ * @author akiraly
+ */
+class MetaInfStaticResourceReferenceTest
+{
+	private static final String STATIC_RESOURCE_NAME = "sample.js";
+
+	/**
+	 * Test with Servlet 3.0 container
+	 * 
+	 * @throws MalformedURLException
+	 *             should not happen
+	 */
+	@Test
+	void testWithServlet30() throws MalformedURLException
+	{
+		MockApplication application = new MockApplication();
+		MockServletContext servletContext = new MockServletContext(application, null);
+		BaseWicketTester tester = new BaseWicketTester(application, servletContext);
+
+		MetaInfStaticResourceReference metaRes = new MetaInfStaticResourceReference(getClass(),
+			STATIC_RESOURCE_NAME);
+		PackageResourceReference packRes = new PackageResourceReference(getClass(),
+			STATIC_RESOURCE_NAME);
+
+		Url packUrl = tester.getRequestCycle().mapUrlFor(packRes, null);
+		Url metaUrl = tester.getRequestCycle().mapUrlFor(metaRes, null);
+
+		assertNotNull(metaUrl);
+		assertNotNull(packUrl);
+		assertNotEquals(metaUrl, packUrl, "Meta and pack resource should not map to the same url under servlet 3.0.");
+
+		String metaUrlStr = metaUrl.toString();
+		if (metaUrlStr.charAt(1) != '/')
+		{
+			metaUrlStr = "/" + metaUrlStr;
+		}
+
+		// meta resource is served by the servlet container under 3.0
+		URL metaNetUrl = servletContext.getResource(metaUrlStr);
+
+		assertNotNull(metaNetUrl, "Meta resource is not found by the 3.0 servlet container.");
+
+		MockWebRequest request = new MockWebRequest(packUrl);
+
+		IRequestHandler requestHandler = tester.getApplication()
+			.getRootRequestMapper()
+			.mapRequest(request);
+
+		// the pack resource is still served by wicket
+		assertNotNull(requestHandler);
+	}
+
+	/**
+	 * Needs to clear META_INF_RESOURCES_SUPPORTED field in {@link MetaInfStaticResourceReference}
+	 * class between tests because classes do not get reloaded between junit tests. This is not a
+	 * problem in production where the servlet container is not changing versions.
+	 * 
+	 * @throws Exception
+	 *             if the reflection magic failed
+	 */
+	@BeforeEach
+	void before() throws Exception
+	{
+		Field field = MetaInfStaticResourceReference.class.getDeclaredField("META_INF_RESOURCES_SUPPORTED");
+		field.setAccessible(true);
+		field.set(null, null);
+	}
+
+	/**
+	 * {@link #before()}
+	 * 
+	 * @throws Exception
+	 *             if before fails
+	 */
+	@AfterEach
+	void after() throws Exception
+	{
+		before();
+	}
+
+}
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/resource/MinifiedAwareResourceReferenceTest.java b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/MinifiedAwareResourceReferenceTest.java
similarity index 94%
rename from wicket-core/src/test/java/org/apache/wicket/request/resource/MinifiedAwareResourceReferenceTest.java
rename to wicket-core/src/test/java/org/apache/wicket/core/request/resource/MinifiedAwareResourceReferenceTest.java
index 7bec622..1b5afb1 100644
--- a/wicket-core/src/test/java/org/apache/wicket/request/resource/MinifiedAwareResourceReferenceTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/MinifiedAwareResourceReferenceTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.request.resource;
+package org.apache.wicket.core.request.resource;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
@@ -23,6 +23,8 @@ import java.util.Locale;
 import org.apache.wicket.Application;
 import org.apache.wicket.core.util.resource.locator.ResourceStreamLocator;
 import org.apache.wicket.request.resource.IResource.Attributes;
+import org.apache.wicket.request.resource.JavaScriptResourceReference;
+import org.apache.wicket.request.resource.ResourceReference;
 import org.apache.wicket.response.ByteArrayResponse;
 import org.apache.wicket.util.resource.IResourceStream;
 import org.apache.wicket.util.tester.WicketTestCase;
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/resource/PackageResourceReferenceTest.java b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/PackageResourceReferenceTest.java
similarity index 90%
rename from wicket-core/src/test/java/org/apache/wicket/request/resource/PackageResourceReferenceTest.java
rename to wicket-core/src/test/java/org/apache/wicket/core/request/resource/PackageResourceReferenceTest.java
index 426ee24..bf8cd88 100644
--- a/wicket-core/src/test/java/org/apache/wicket/request/resource/PackageResourceReferenceTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/PackageResourceReferenceTest.java
@@ -1,381 +1,399 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.wicket.request.resource;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertFalse;
-import static org.junit.jupiter.api.Assertions.assertNotNull;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Locale;
-
-import org.apache.wicket.Application;
-import org.apache.wicket.ThreadContext;
-import org.apache.wicket.protocol.http.mock.MockHttpServletRequest;
-import org.apache.wicket.protocol.http.mock.MockHttpServletResponse;
-import org.apache.wicket.request.Request;
-import org.apache.wicket.request.Response;
-import org.apache.wicket.request.resource.AbstractResource.ContentRangeType;
-import org.apache.wicket.request.resource.IResource.Attributes;
-import org.apache.wicket.request.resource.ResourceReference.UrlAttributes;
-import org.apache.wicket.response.ByteArrayResponse;
-import org.apache.wicket.util.io.IOUtils;
-import org.apache.wicket.util.tester.WicketTestCase;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-
-/**
- * @author Pedro Santos
- */
-class PackageResourceReferenceTest extends WicketTestCase
-{
-	private static Class<PackageResourceReferenceTest> scope = PackageResourceReferenceTest.class;
-	private static Locale[] locales = { null, new Locale("en"), new Locale("en", "US") };
-	private static String[] styles = { null, "style" };
-	private static String[] variations = { null, "var" };
-
-	/**
-	 * @throws Exception
-	 */
-	@BeforeEach
-	void before() throws Exception
-	{
-		// some locale outside those in locales array
-		tester.getSession().setLocale(Locale.CHINA);
-	}
-
-	/**
-	 * 
-	 */
-	@Test
-	void resourceResolution()
-	{
-		for (Locale locale : locales)
-		{
-			for (String style : styles)
-			{
-				for (String variation : variations)
-				{
-					ResourceReference reference = new PackageResourceReference(scope,
-						"resource.txt", locale, style, variation);
-					UrlAttributes urlAttributes = reference.getUrlAttributes();
-					assertEquals(locale, urlAttributes.getLocale());
-					assertEquals(style, urlAttributes.getStyle());
-					assertEquals(variation, urlAttributes.getVariation());
-
-					ByteArrayResponse byteResponse = new ByteArrayResponse();
-					Attributes mockAttributes = new Attributes(tester.getRequestCycle()
-						.getRequest(), byteResponse);
-					reference.getResource().respond(mockAttributes);
-					String fileContent = new String(byteResponse.getBytes());
-					if (locale != null)
-					{
-						assertTrue(fileContent.contains(locale.getLanguage()));
-						if (locale.getCountry() != null)
-						{
-							assertTrue(fileContent.contains(locale.getCountry()));
-						}
-					}
-					if (style != null)
-					{
-						assertTrue(fileContent.contains(style));
-					}
-					if (variation != null)
-					{
-						assertTrue(fileContent.contains(variation));
-					}
-				}
-			}
-		}
-	}
-
-	/**
-	 * 
-	 */
-	@Test
-	void resourceResponse()
-	{
-		for (Locale locale : locales)
-		{
-			for (String style : styles)
-			{
-				for (String variation : variations)
-				{
-					ResourceReference reference = new PackageResourceReference(scope,
-						"resource.txt", locale, style, variation);
-
-					ByteArrayResponse byteResponse = new ByteArrayResponse();
-					Attributes mockAttributes = new Attributes(tester.getRequestCycle()
-						.getRequest(), byteResponse);
-					reference.getResource().respond(mockAttributes);
-					String fileContent = new String(byteResponse.getBytes());
-					if (locale != null)
-					{
-						assertTrue(fileContent.contains(locale.getLanguage()));
-						if (locale.getCountry() != null)
-						{
-							assertTrue(fileContent.contains(locale.getCountry()));
-						}
-					}
-					if (style != null)
-					{
-						assertTrue(fileContent.contains(style));
-					}
-					if (variation != null)
-					{
-						assertTrue(fileContent.contains(variation));
-					}
-				}
-			}
-		}
-	}
-
-	/**
-	 * Asserting if user did not set any locale or style, those from session get used if any
-	 */
-	@Test
-	void sessionAttributesRelevance()
-	{
-		for (Locale locale : new Locale[] { new Locale("en"), new Locale("en", "US") })
-		{
-			tester.getSession().setLocale(locale);
-			for (String style : styles)
-			{
-				tester.getSession().setStyle(style);
-				for (String variation : variations)
-				{
-					ResourceReference reference = new PackageResourceReference(scope,
-						"resource.txt", null, null, variation);
-					UrlAttributes urlAttributes = reference.getUrlAttributes();
-					assertEquals(tester.getSession().getLocale(), urlAttributes.getLocale());
-					assertEquals(tester.getSession().getStyle(), urlAttributes.getStyle());
-					assertEquals(variation, urlAttributes.getVariation());
-				}
-			}
-		}
-	}
-
-	/**
-	 * Assert preference for specified locale and style over session ones
-	 */
-	@Test
-	void userAttributesPreference()
-	{
-		tester.getSession().setLocale(new Locale("en"));
-		tester.getSession().setStyle("style");
-
-		Locale[] userLocales = { null, new Locale("pt"), new Locale("pt", "BR") };
-		String userStyle = "style2";
-
-		for (Locale userLocale : userLocales)
-		{
-			for (String variation : variations)
-			{
-				ResourceReference reference = new PackageResourceReference(scope, "resource.txt",
-					userLocale, userStyle, variation);
-				UrlAttributes urlAttributes = reference.getUrlAttributes();
-
-				assertEquals(userLocale, urlAttributes.getLocale());
-				assertEquals(userStyle, urlAttributes.getStyle());
-				assertEquals(variation, urlAttributes.getVariation());
-			}
-		}
-	}
-
-	/**
-	 * see WICKET-5251 : Proper detection of already minified resources
-	 */
-	@Test
-	void testMinifiedNameDetectMinInName()
-	{
-		final PackageResourceReference html5minjs = new PackageResourceReference("html5.min.js");
-		assertEquals("html5.min.js", html5minjs.getMinifiedName());
-
-		final PackageResourceReference html5notminjs = new PackageResourceReference("html5.notmin.js");
-		assertEquals("html5.notmin.min.js", html5notminjs.getMinifiedName());
-
-		final PackageResourceReference html5notmin = new PackageResourceReference("html5notmin");
-		assertEquals("html5notmin.min", html5notmin.getMinifiedName());
-
-		final PackageResourceReference html5min = new PackageResourceReference("html5.min");
-		assertEquals("html5.min", html5min.getMinifiedName());
-
-	}
-
-	/**
-	 * see WICKET-5250 - for JavaScriptResourceReference
-	 */
-	@Test
-	void testJavaScriptResourceReferenceRespectsMinifiedResourcesDetection()
-	{
-		Application.get().getResourceSettings().setUseMinifiedResources(true);
-		final JavaScriptResourceReference notMinified = new JavaScriptResourceReference(PackageResourceReferenceTest.class, "a.js");
-		final JavaScriptPackageResource notMinifiedResource = notMinified.getResource();
-		assertTrue(notMinifiedResource.getCompress(), "Not minified resource should got its compress flag set to true");
-
-		final JavaScriptResourceReference alreadyMinified = new JavaScriptResourceReference(PackageResourceReferenceTest.class, "b.min.js");
-		final JavaScriptPackageResource alreadyMinifiedResource = alreadyMinified.getResource();
-		assertFalse(alreadyMinifiedResource.getCompress(), "Already minified resource should got its compress flag set to false");
-	}
-
-	/**
-	 * see WICKET-5250 - for CSSResourceReference
-	 */
-	@Test
-	void testCSSResourceReferenceRespectsMinifiedResourcesDetection()
-	{
-		Application.get().getResourceSettings().setUseMinifiedResources(true);
-		final CssResourceReference notMinified = new CssResourceReference(PackageResourceReferenceTest.class, "a.css");
-		final CssPackageResource notMinifiedResource = notMinified.getResource();
-		assertTrue(notMinifiedResource.getCompress(), "Not minified resource should got its compress flag set to true");
-
-		final CssResourceReference alreadyMinified = new CssResourceReference(PackageResourceReferenceTest.class, "b.min.css");
-		final CssPackageResource alreadyMinifiedResource = alreadyMinified.getResource();
-		assertFalse(alreadyMinifiedResource.getCompress(), "Already minified resource should got its compress flag set to false");
-	}
-
-	/**
-	 * See WICKET-5819 - Media tags
-	 */
-	@Test
-	void testContentRange()
-	{
-		// Test range
-		assertEquals("resource", makeRangeRequest("bytes=0-7"));
-		assertEquals("ource", makeRangeRequest("bytes=3-7"));
-		assertEquals("resource_var_style_en.txt", makeRangeRequest("bytes=0-"));
-		assertEquals("var_style_en.txt", makeRangeRequest("bytes=9-"));
-		assertEquals("resource_var_style_en.txt", makeRangeRequest("bytes=-"));
-		assertEquals("resource_var_style_en.txt", makeRangeRequest("bytes=-25"));
-	}
-
-	private String makeRangeRequest(String range)
-	{
-		ResourceReference reference = new PackageResourceReference(scope, "resource.txt",
-			locales[1], styles[1], variations[1]);
-
-		ByteArrayResponse byteResponse = new ByteArrayResponse();
-
-		Request request = tester.getRequestCycle().getRequest();
-		MockHttpServletRequest mockHttpServletRequest = (MockHttpServletRequest)request.getContainerRequest();
-		mockHttpServletRequest.setHeader("range", range);
-		Attributes mockAttributes = new Attributes(request, byteResponse);
-		reference.getResource().respond(mockAttributes);
-		return new String(byteResponse.getBytes());
-	}
-
-	/**
-	 * See WICKET-5819 - Media tags
-	 *
-	 * @throws IOException
-	 */
-	@Test
-	void testContentRangeLarge() throws IOException
-	{
-		InputStream resourceAsStream = null;
-		try
-		{
-			resourceAsStream = PackageResourceReference.class.getResourceAsStream("resource_gt_4096.txt");
-			String content = new String(IOUtils.toByteArray(resourceAsStream));
-
-			// Check buffer comprehensive range request
-			String bytes4094_4105 = makeRangeRequestToBigResource("bytes=4094-4105");
-			assertEquals(12, bytes4094_4105.length());
-			assertEquals("River Roller", bytes4094_4105);
-
-			// Check buffer exceeding range request
-			String bytes1000_4999 = makeRangeRequestToBigResource("bytes=1000-4999");
-			assertEquals(4000, bytes1000_4999.length());
-			assertEquals(content.substring(1000, 5000), bytes1000_4999);
-
-			// Check buffer exceeding range request until end of content
-			String bytes1000_end = makeRangeRequestToBigResource("bytes=1000-");
-			assertEquals(4529, bytes1000_end.length());
-			assertEquals(content.substring(1000, content.length()), bytes1000_end);
-
-			// Check complete range request
-			assertEquals(content.length(), makeRangeRequestToBigResource("bytes=-").length());
-		}
-		finally
-		{
-			IOUtils.closeQuietly(resourceAsStream);
-		}
-	}
-
-	private String makeRangeRequestToBigResource(String range)
-	{
-		ResourceReference reference = new PackageResourceReference(scope, "resource_gt_4096.txt",
-			null, null, null);
-
-		ByteArrayResponse byteResponse = new ByteArrayResponse();
-
-		Request request = tester.getRequestCycle().getRequest();
-		MockHttpServletRequest mockHttpServletRequest = (MockHttpServletRequest)request.getContainerRequest();
-		mockHttpServletRequest.setHeader("range", range);
-		Attributes mockAttributes = new Attributes(request, byteResponse);
-		reference.getResource().respond(mockAttributes);
-		return new String(byteResponse.getBytes());
-	}
-
-	/**
-	 * See WICKET-5819 - Media tags
-	 */
-	@Test
-	void testContentRangeHeaders()
-	{
-		// Test header fields
-		ResourceReference reference = new PackageResourceReference(scope, "resource.txt",
-			locales[1], styles[1], variations[1]);
-		Request request = tester.getRequestCycle().getRequest();
-		Response response = tester.getRequestCycle().getResponse();
-		MockHttpServletResponse mockHttpServletResponse = (MockHttpServletResponse)response.getContainerResponse();
-		Attributes mockAttributes = new Attributes(request, response);
-		reference.getResource().respond(mockAttributes);
-		assertEquals(ContentRangeType.BYTES.getTypeName(),
-			mockHttpServletResponse.getHeader("Accept-Range"));
-		// For normal: If a resource supports content range no content is delivered
-		// if no "Range" header is given, but we have to deliver it, because
-		// other resources then media should get the content. (e.g. CSS, JS, etc.) Browsers
-		// detecting media requests and automatically add the "Range" header for
-		// partial content and they don't make an initial request to detect if a media
-		// resource supports Content-Range (by the Accept-Range header)
-		assertEquals("resource_var_style_en.txt",
-			new String(mockHttpServletResponse.getBinaryContent()));
-	}
-
-	/**
-	 * https://issues.apache.org/jira/browse/WICKET-6031
-	 */
-	@Test
-	void noRequestCycle()
-	{
-		ThreadContext.setRequestCycle(null);
-
-		PackageResourceReference reference = new PackageResourceReference(scope, "resource.txt",
-				locales[1], styles[1], variations[1]);
-
-		PackageResource resource = reference.getResource();
-		assertNotNull(resource);
-
-		assertEquals(locales[1], resource.getResourceStream().getLocale());
-		assertEquals(styles[1], resource.getResourceStream().getStyle());
-		assertEquals(variations[1], resource.getResourceStream().getVariation());
-	}
-
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.core.request.resource;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Locale;
+
+import org.apache.wicket.Application;
+import org.apache.wicket.ThreadContext;
+import org.apache.wicket.protocol.http.mock.MockHttpServletRequest;
+import org.apache.wicket.protocol.http.mock.MockHttpServletResponse;
+import org.apache.wicket.request.Request;
+import org.apache.wicket.request.Response;
+import org.apache.wicket.request.resource.AbstractResource.ContentRangeType;
+import org.apache.wicket.request.resource.CssPackageResource;
+import org.apache.wicket.request.resource.CssResourceReference;
+import org.apache.wicket.request.resource.IResource.Attributes;
+import org.apache.wicket.request.resource.JavaScriptPackageResource;
+import org.apache.wicket.request.resource.JavaScriptResourceReference;
+import org.apache.wicket.request.resource.PackageResource;
+import org.apache.wicket.request.resource.PackageResourceReference;
+import org.apache.wicket.request.resource.ResourceReference;
+import org.apache.wicket.request.resource.ResourceReference.UrlAttributes;
+import org.apache.wicket.response.ByteArrayResponse;
+import org.apache.wicket.util.io.IOUtils;
+import org.apache.wicket.util.tester.WicketTestCase;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+/**
+ * @author Pedro Santos
+ */
+class PackageResourceReferenceTest extends WicketTestCase
+{
+	private static Class<PackageResourceReferenceTest> scope = PackageResourceReferenceTest.class;
+	private static final Locale[] locales = { null, new Locale("en"), new Locale("en", "US") };
+	private static final String[] styles = { null, "style" };
+	private static final String[] variations = { null, "var" };
+
+	/**
+	 * @throws Exception
+	 */
+	@BeforeEach
+	void before()
+	{
+		// some locale outside those in locales array
+		tester.getSession().setLocale(Locale.CHINA);
+	}
+
+	/**
+	 * 
+	 */
+	@Test
+	void resourceResolution()
+	{
+		for (Locale locale : locales)
+		{
+			for (String style : styles)
+			{
+				for (String variation : variations)
+				{
+					ResourceReference reference = new PackageResourceReference(scope,
+						"resource.txt", locale, style, variation);
+					UrlAttributes urlAttributes = reference.getUrlAttributes();
+					assertEquals(locale, urlAttributes.getLocale());
+					assertEquals(style, urlAttributes.getStyle());
+					assertEquals(variation, urlAttributes.getVariation());
+
+					ByteArrayResponse byteResponse = new ByteArrayResponse();
+					Attributes mockAttributes = new Attributes(tester.getRequestCycle()
+						.getRequest(), byteResponse);
+					reference.getResource().respond(mockAttributes);
+					String fileContent = new String(byteResponse.getBytes());
+					if (locale != null)
+					{
+						assertTrue(fileContent.contains(locale.getLanguage()));
+						if (locale.getCountry() != null)
+						{
+							assertTrue(fileContent.contains(locale.getCountry()));
+						}
+					}
+					if (style != null)
+					{
+						assertTrue(fileContent.contains(style));
+					}
+					if (variation != null)
+					{
+						assertTrue(fileContent.contains(variation));
+					}
+				}
+			}
+		}
+	}
+
+	@Test
+	void resourceResponse()
+	{
+		for (Locale locale : locales)
+		{
+			for (String style : styles)
+			{
+				for (String variation : variations)
+				{
+					ResourceReference reference = new PackageResourceReference(scope,
+						"resource.txt", locale, style, variation);
+
+					ByteArrayResponse byteResponse = new ByteArrayResponse();
+					Attributes mockAttributes = new Attributes(tester.getRequestCycle()
+						.getRequest(), byteResponse);
+					reference.getResource().respond(mockAttributes);
+					String fileContent = new String(byteResponse.getBytes());
+					if (locale != null)
+					{
+						assertTrue(fileContent.contains(locale.getLanguage()));
+						if (locale.getCountry() != null)
+						{
+							assertTrue(fileContent.contains(locale.getCountry()));
+						}
+					}
+					if (style != null)
+					{
+						assertTrue(fileContent.contains(style));
+					}
+					if (variation != null)
+					{
+						assertTrue(fileContent.contains(variation));
+					}
+				}
+			}
+		}
+	}
+
+	/**
+	 * Asserting if user did not set any locale or style, those from session get used if any
+	 */
+	@Test
+	void sessionAttributesRelevance()
+	{
+		for (Locale locale : new Locale[] { new Locale("en"), new Locale("en", "US") })
+		{
+			tester.getSession().setLocale(locale);
+			for (String style : styles)
+			{
+				tester.getSession().setStyle(style);
+				for (String variation : variations)
+				{
+					ResourceReference reference = new PackageResourceReference(scope,
+						"resource.txt", null, null, variation);
+					UrlAttributes urlAttributes = reference.getUrlAttributes();
+					assertEquals(tester.getSession().getLocale(), urlAttributes.getLocale());
+					assertEquals(tester.getSession().getStyle(), urlAttributes.getStyle());
+					assertEquals(variation, urlAttributes.getVariation());
+				}
+			}
+		}
+	}
+
+	/**
+	 * Assert preference for specified locale and style over session ones
+	 */
+	@Test
+	void userAttributesPreference()
+	{
+		tester.getSession().setLocale(new Locale("en"));
+		tester.getSession().setStyle("style");
+
+		Locale[] userLocales = { null, new Locale("pt"), new Locale("pt", "BR") };
+		String userStyle = "style2";
+
+		for (Locale userLocale : userLocales)
+		{
+			for (String variation : variations)
+			{
+				ResourceReference reference = new PackageResourceReference(scope, "resource.txt",
+					userLocale, userStyle, variation);
+				UrlAttributes urlAttributes = reference.getUrlAttributes();
+
+				assertEquals(userLocale, urlAttributes.getLocale());
+				assertEquals(userStyle, urlAttributes.getStyle());
+				assertEquals(variation, urlAttributes.getVariation());
+			}
+		}
+	}
+
+	/**
+	 * see WICKET-5251 : Proper detection of already minified resources
+	 */
+	@Test
+	void testMinifiedNameDetectMinInName()
+	{
+		class PRR extends PackageResourceReference
+		{
+
+			public PRR(String key) {
+				super(key);
+			}
+
+			// make it public for the test
+			@Override
+			public String getMinifiedName() {
+				return super.getMinifiedName();
+			}
+		}
+
+		final PRR html5minjs = new PRR("html5.min.js");
+		assertEquals("html5.min.js", html5minjs.getMinifiedName());
+
+		final PRR html5notminjs = new PRR("html5.notmin.js");
+		assertEquals("html5.notmin.min.js", html5notminjs.getMinifiedName());
+
+		final PRR html5notmin = new PRR("html5notmin");
+		assertEquals("html5notmin.min", html5notmin.getMinifiedName());
+
+		final PRR html5min = new PRR("html5.min");
+		assertEquals("html5.min", html5min.getMinifiedName());
+
+	}
+
+	/**
+	 * see WICKET-5250 - for JavaScriptResourceReference
+	 */
+	@Test
+	void testJavaScriptResourceReferenceRespectsMinifiedResourcesDetection()
+	{
+		Application.get().getResourceSettings().setUseMinifiedResources(true);
+		final JavaScriptResourceReference notMinified = new JavaScriptResourceReference(PackageResourceReferenceTest.class, "a.js");
+		final JavaScriptPackageResource notMinifiedResource = notMinified.getResource();
+		assertTrue(notMinifiedResource.getCompress(), "Not minified resource should got its compress flag set to true");
+
+		final JavaScriptResourceReference alreadyMinified = new JavaScriptResourceReference(PackageResourceReferenceTest.class, "b.min.js");
+		final JavaScriptPackageResource alreadyMinifiedResource = alreadyMinified.getResource();
+		assertFalse(alreadyMinifiedResource.getCompress(), "Already minified resource should got its compress flag set to false");
+	}
+
+	/**
+	 * see WICKET-5250 - for CSSResourceReference
+	 */
+	@Test
+	void testCSSResourceReferenceRespectsMinifiedResourcesDetection()
+	{
+		Application.get().getResourceSettings().setUseMinifiedResources(true);
+		final CssResourceReference notMinified = new CssResourceReference(PackageResourceReferenceTest.class, "a.css");
+		final CssPackageResource notMinifiedResource = notMinified.getResource();
+		assertTrue(notMinifiedResource.getCompress(), "Not minified resource should got its compress flag set to true");
+
+		final CssResourceReference alreadyMinified = new CssResourceReference(PackageResourceReferenceTest.class, "b.min.css");
+		final CssPackageResource alreadyMinifiedResource = alreadyMinified.getResource();
+		assertFalse(alreadyMinifiedResource.getCompress(), "Already minified resource should got its compress flag set to false");
+	}
+
+	/**
+	 * See WICKET-5819 - Media tags
+	 */
+	@Test
+	void testContentRange()
+	{
+		// Test range
+		assertEquals("resource", makeRangeRequest("bytes=0-7"));
+		assertEquals("ource", makeRangeRequest("bytes=3-7"));
+		assertEquals("resource_var_style_en.txt", makeRangeRequest("bytes=0-"));
+		assertEquals("var_style_en.txt", makeRangeRequest("bytes=9-"));
+		assertEquals("resource_var_style_en.txt", makeRangeRequest("bytes=-"));
+		assertEquals("resource_var_style_en.txt", makeRangeRequest("bytes=-25"));
+	}
+
+	private String makeRangeRequest(String range)
+	{
+		ResourceReference reference = new PackageResourceReference(scope, "resource.txt",
+			locales[1], styles[1], variations[1]);
+
+		ByteArrayResponse byteResponse = new ByteArrayResponse();
+
+		Request request = tester.getRequestCycle().getRequest();
+		MockHttpServletRequest mockHttpServletRequest = (MockHttpServletRequest)request.getContainerRequest();
+		mockHttpServletRequest.setHeader("range", range);
+		Attributes mockAttributes = new Attributes(request, byteResponse);
+		reference.getResource().respond(mockAttributes);
+		return new String(byteResponse.getBytes());
+	}
+
+	/**
+	 * See WICKET-5819 - Media tags
+	 *
+	 * @throws IOException
+	 */
+	@Test
+	void testContentRangeLarge() throws IOException
+	{
+		InputStream resourceAsStream = null;
+		try
+		{
+			resourceAsStream = PackageResourceReferenceTest.class.getResourceAsStream("resource_gt_4096.txt");
+			String content = new String(IOUtils.toByteArray(resourceAsStream));
+
+			// Check buffer comprehensive range request
+			String bytes4094_4105 = makeRangeRequestToBigResource("bytes=4094-4105");
+			assertEquals(12, bytes4094_4105.length());
+			assertEquals("River Roller", bytes4094_4105);
+
+			// Check buffer exceeding range request
+			String bytes1000_4999 = makeRangeRequestToBigResource("bytes=1000-4999");
+			assertEquals(4000, bytes1000_4999.length());
+			assertEquals(content.substring(1000, 5000), bytes1000_4999);
+
+			// Check buffer exceeding range request until end of content
+			String bytes1000_end = makeRangeRequestToBigResource("bytes=1000-");
+			assertEquals(4529, bytes1000_end.length());
+			assertEquals(content.substring(1000), bytes1000_end);
+
+			// Check complete range request
+			assertEquals(content.length(), makeRangeRequestToBigResource("bytes=-").length());
+		}
+		finally
+		{
+			IOUtils.closeQuietly(resourceAsStream);
+		}
+	}
+
+	private String makeRangeRequestToBigResource(String range)
+	{
+		ResourceReference reference = new PackageResourceReference(scope, "resource_gt_4096.txt",
+			null, null, null);
+
+		ByteArrayResponse byteResponse = new ByteArrayResponse();
+
+		Request request = tester.getRequestCycle().getRequest();
+		MockHttpServletRequest mockHttpServletRequest = (MockHttpServletRequest)request.getContainerRequest();
+		mockHttpServletRequest.setHeader("range", range);
+		Attributes mockAttributes = new Attributes(request, byteResponse);
+		reference.getResource().respond(mockAttributes);
+		return new String(byteResponse.getBytes());
+	}
+
+	/**
+	 * See WICKET-5819 - Media tags
+	 */
+	@Test
+	void testContentRangeHeaders()
+	{
+		// Test header fields
+		ResourceReference reference = new PackageResourceReference(scope, "resource.txt",
+			locales[1], styles[1], variations[1]);
+		Request request = tester.getRequestCycle().getRequest();
+		Response response = tester.getRequestCycle().getResponse();
+		MockHttpServletResponse mockHttpServletResponse = (MockHttpServletResponse)response.getContainerResponse();
+		Attributes mockAttributes = new Attributes(request, response);
+		reference.getResource().respond(mockAttributes);
+		assertEquals(ContentRangeType.BYTES.getTypeName(),
+			mockHttpServletResponse.getHeader("Accept-Range"));
+		// For normal: If a resource supports content range no content is delivered
+		// if no "Range" header is given, but we have to deliver it, because
+		// other resources then media should get the content. (e.g. CSS, JS, etc.) Browsers
+		// detecting media requests and automatically add the "Range" header for
+		// partial content and they don't make an initial request to detect if a media
+		// resource supports Content-Range (by the Accept-Range header)
+		assertEquals("resource_var_style_en.txt",
+			new String(mockHttpServletResponse.getBinaryContent()));
+	}
+
+	/**
+	 * https://issues.apache.org/jira/browse/WICKET-6031
+	 */
+	@Test
+	void noRequestCycle()
+	{
+		ThreadContext.setRequestCycle(null);
+
+		PackageResourceReference reference = new PackageResourceReference(scope, "resource.txt",
+				locales[1], styles[1], variations[1]);
+
+		PackageResource resource = reference.getResource();
+		assertNotNull(resource);
+
+		assertEquals(locales[1], resource.getResourceStream().getLocale());
+		assertEquals(styles[1], resource.getResourceStream().getStyle());
+		assertEquals(variations[1], resource.getResourceStream().getVariation());
+	}
+
+}
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/resource/ResouceBundleTest.java b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/ResouceBundleTest.java
similarity index 93%
rename from wicket-core/src/test/java/org/apache/wicket/request/resource/ResouceBundleTest.java
rename to wicket-core/src/test/java/org/apache/wicket/core/request/resource/ResouceBundleTest.java
index 9b5b85c..86bb258 100644
--- a/wicket-core/src/test/java/org/apache/wicket/request/resource/ResouceBundleTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/ResouceBundleTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.request.resource;
+package org.apache.wicket.core.request.resource;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.fail;
@@ -28,6 +28,10 @@ import java.util.Locale;
 
 import org.apache.wicket.markup.head.JavaScriptHeaderItem;
 import org.apache.wicket.request.Url;
+import org.apache.wicket.request.resource.IResource;
+import org.apache.wicket.request.resource.JavaScriptResourceReference;
+import org.apache.wicket.request.resource.ResourceReference;
+import org.apache.wicket.request.resource.UrlResourceReference;
 import org.apache.wicket.request.resource.caching.IStaticCacheableResource;
 import org.apache.wicket.resource.bundles.ConcatBundleResource;
 import org.apache.wicket.resource.bundles.ResourceBundleReference;
@@ -43,7 +47,7 @@ import org.junit.jupiter.api.Test;
  * 
  * @author papegaaij
  */
-public class ResouceBundleTest extends WicketTestCase
+class ResouceBundleTest extends WicketTestCase
 {
 	@BeforeEach
 	void before()
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/resource/ResourceReferenceLambdaTest.java b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/ResourceReferenceLambdaTest.java
similarity index 89%
rename from wicket-core/src/test/java/org/apache/wicket/request/resource/ResourceReferenceLambdaTest.java
rename to wicket-core/src/test/java/org/apache/wicket/core/request/resource/ResourceReferenceLambdaTest.java
index a31d65f..bd49e75 100644
--- a/wicket-core/src/test/java/org/apache/wicket/request/resource/ResourceReferenceLambdaTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/ResourceReferenceLambdaTest.java
@@ -14,11 +14,13 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.request.resource;
+package org.apache.wicket.core.request.resource;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
 import org.apache.wicket.protocol.http.WebApplication;
+import org.apache.wicket.request.resource.IResource;
+import org.apache.wicket.request.resource.ResourceReference;
 import org.apache.wicket.util.tester.WicketTestCase;
 import org.apache.wicket.util.tester.WicketTester;
 import org.junit.jupiter.api.Test;
@@ -33,7 +35,7 @@ class ResourceReferenceLambdaTest extends WicketTestCase
 	{
 		WicketTester wicketTester = super.newWicketTester(app);
 
-		IResource res = (attributes) -> 
+		IResource res = (attributes) ->
 			attributes.getResponse().write(output);
 		
 		ResourceReference resRef = ResourceReference.of("lambdares", () -> res);
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/resource/ResourceReferenceLocatingTest.csv b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/ResourceReferenceLocatingTest.csv
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/request/resource/ResourceReferenceLocatingTest.csv
rename to wicket-core/src/test/java/org/apache/wicket/core/request/resource/ResourceReferenceLocatingTest.csv
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/resource/ResourceReferenceLocatingTest.java b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/ResourceReferenceLocatingTest.java
similarity index 97%
rename from wicket-core/src/test/java/org/apache/wicket/request/resource/ResourceReferenceLocatingTest.java
rename to wicket-core/src/test/java/org/apache/wicket/core/request/resource/ResourceReferenceLocatingTest.java
index e36243b..7143170 100644
--- a/wicket-core/src/test/java/org/apache/wicket/request/resource/ResourceReferenceLocatingTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/ResourceReferenceLocatingTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.request.resource;
+package org.apache.wicket.core.request.resource;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
@@ -27,6 +27,8 @@ import java.util.List;
 import java.util.Locale;
 import java.util.stream.Stream;
 
+import org.apache.wicket.request.resource.JavaScriptResourceReference;
+import org.apache.wicket.request.resource.PackageResourceReference;
 import org.apache.wicket.util.io.Streams;
 import org.apache.wicket.util.tester.WicketTestCase;
 import org.junit.jupiter.api.BeforeEach;
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/resource/ResourceReferenceRegistryTest.java b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/ResourceReferenceRegistryTest.java
similarity index 79%
rename from wicket-core/src/test/java/org/apache/wicket/request/resource/ResourceReferenceRegistryTest.java
rename to wicket-core/src/test/java/org/apache/wicket/core/request/resource/ResourceReferenceRegistryTest.java
index ca4c0b5..562dc40 100644
--- a/wicket-core/src/test/java/org/apache/wicket/request/resource/ResourceReferenceRegistryTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/ResourceReferenceRegistryTest.java
@@ -14,12 +14,19 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.request.resource;
+package org.apache.wicket.core.request.resource;
 
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.Matchers.instanceOf;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
+import org.apache.wicket.request.resource.CssPackageResource;
+import org.apache.wicket.request.resource.IResource;
+import org.apache.wicket.request.resource.PackageResource;
+import org.apache.wicket.request.resource.PackageResourceReference;
+import org.apache.wicket.request.resource.ResourceReference;
+import org.apache.wicket.request.resource.ResourceReferenceRegistry;
+import org.apache.wicket.request.resource.SharedResourceReference;
 import org.apache.wicket.util.tester.WicketTestCase;
 import org.junit.jupiter.api.Test;
 
@@ -35,7 +42,7 @@ class ResourceReferenceRegistryTest extends WicketTestCase
 	@Test
 	void addRemove()
 	{
-		ResourceReferenceRegistry registry = new ResourceReferenceRegistry();
+		RRR registry = new RRR();
 		assertEquals(0, registry.getSize());
 
 		ResourceReference reference = new PackageResourceReference(
@@ -55,7 +62,7 @@ class ResourceReferenceRegistryTest extends WicketTestCase
 	@Test
 	void addSharedResourceReference()
 	{
-		ResourceReferenceRegistry registry = new ResourceReferenceRegistry();
+		RRR registry = new RRR();
 		assertEquals(0, registry.getSize());
 
 		ResourceReference reference = new SharedResourceReference(
@@ -67,7 +74,7 @@ class ResourceReferenceRegistryTest extends WicketTestCase
 	@Test
 	void setNullResourceReferenceFactoryStillUsesTheDefault()
 	{
-		ResourceReferenceRegistry registry = new ResourceReferenceRegistry();
+		RRR registry = new RRR();
 		registry.setResourceReferenceFactory(null);
 		ResourceReference.Key key = new ResourceReference.Key(ResourceReferenceRegistryTest.class.getName(),
 				"a.css", null, null, null);
@@ -79,7 +86,7 @@ class ResourceReferenceRegistryTest extends WicketTestCase
 	@Test
 	void createLessResourceReference()
 	{
-		ResourceReferenceRegistry registry = new ResourceReferenceRegistry();
+		RRR registry = new RRR();
 		registry.setResourceReferenceFactory(new LessResourceReferenceTest.LessResourceReferenceFactory());
 		ResourceReference.Key key = new ResourceReference.Key(ResourceReferenceRegistryTest.class.getName(),
 				"LessResourceReference.less", null, null, null);
@@ -87,4 +94,13 @@ class ResourceReferenceRegistryTest extends WicketTestCase
 		assertThat(reference, instanceOf(LessResourceReferenceTest.LessResourceReference.class));
 		assertThat(reference.getResource(), instanceOf(LessResourceReferenceTest.LessPackageResource.class));
 	}
+
+	class RRR extends ResourceReferenceRegistry
+	{
+		// make it public for the test
+		@Override
+		public ResourceReference createDefaultResourceReference(ResourceReference.Key key) {
+			return super.createDefaultResourceReference(key);
+		}
+	}
 }
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/resource/UrlResourceReferenceTest.java b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/UrlResourceReferenceTest.java
similarity index 97%
rename from wicket-core/src/test/java/org/apache/wicket/request/resource/UrlResourceReferenceTest.java
rename to wicket-core/src/test/java/org/apache/wicket/core/request/resource/UrlResourceReferenceTest.java
index 81b6554..49fb4e5 100644
--- a/wicket-core/src/test/java/org/apache/wicket/request/resource/UrlResourceReferenceTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/UrlResourceReferenceTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.request.resource;
+package org.apache.wicket.core.request.resource;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNull;
@@ -26,6 +26,7 @@ import org.apache.wicket.markup.head.IHeaderResponse;
 import org.apache.wicket.markup.head.JavaScriptHeaderItem;
 import org.apache.wicket.markup.html.WebPage;
 import org.apache.wicket.request.Url;
+import org.apache.wicket.request.resource.UrlResourceReference;
 import org.apache.wicket.util.resource.IResourceStream;
 import org.apache.wicket.util.resource.StringResourceStream;
 import org.apache.wicket.util.tester.WicketTestCase;
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/resource/WriteCallbackTest.java b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/WriteCallbackTest.java
similarity index 81%
rename from wicket-core/src/test/java/org/apache/wicket/request/resource/WriteCallbackTest.java
rename to wicket-core/src/test/java/org/apache/wicket/core/request/resource/WriteCallbackTest.java
index 1dba5f6..f6e1966 100644
--- a/wicket-core/src/test/java/org/apache/wicket/request/resource/WriteCallbackTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/WriteCallbackTest.java
@@ -1,65 +1,69 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.wicket.request.resource;
-
-import static org.junit.jupiter.api.Assertions.assertTrue;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Arrays;
-
-import org.apache.wicket.mock.MockWebRequest;
-import org.apache.wicket.request.Url;
-import org.apache.wicket.request.resource.AbstractResource.WriteCallback;
-import org.apache.wicket.request.resource.IResource.Attributes;
-import org.apache.wicket.response.ByteArrayResponse;
-import org.junit.jupiter.api.Test;
-
-/**
- * @author Kent Tong
- */
-class WriteCallbackTest
-{
-
-	/**
-	 */
-	@Test
-	void writeStream() throws IOException
-	{
-		WriteCallback callback = new WriteCallback()
-		{
-
-			@Override
-			public void writeData(Attributes attributes)
-			{
-
-			}
-		};
-		ByteArrayResponse response = new ByteArrayResponse();
-		Attributes attributes = new Attributes(new MockWebRequest(new Url()), response);
-		byte[] srcData = new byte[5000];
-		for (int i = 0; i < srcData.length; i++)
-		{
-			srcData[i] = (byte)i;
-		}
-		InputStream in = new ByteArrayInputStream(srcData);
-		callback.writeStream(attributes, in);
-		assertTrue(Arrays.equals(response.getBytes(), srcData), "Content not equal");
-	}
-
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.core.request.resource;
+
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+import org.apache.wicket.mock.MockWebRequest;
+import org.apache.wicket.request.Url;
+import org.apache.wicket.request.resource.AbstractResource.WriteCallback;
+import org.apache.wicket.request.resource.IResource.Attributes;
+import org.apache.wicket.response.ByteArrayResponse;
+import org.junit.jupiter.api.Test;
+
+/**
+ * @author Kent Tong
+ */
+class WriteCallbackTest
+{
+
+	/**
+	 */
+	@Test
+	void writeStream() throws IOException
+	{
+		class WC extends WriteCallback
+		{
+			@Override
+			public void writeData(Attributes attributes)
+			{
+
+			}
+
+			@Override
+			public void writeStream(Attributes attributes, InputStream is) throws IOException {
+				super.writeStream(attributes, is);
+			}
+		}
+		WC callback = new WC();
+		ByteArrayResponse response = new ByteArrayResponse();
+		Attributes attributes = new Attributes(new MockWebRequest(new Url()), response);
+		byte[] srcData = new byte[5000];
+		for (int i = 0; i < srcData.length; i++)
+		{
+			srcData[i] = (byte)i;
+		}
+		InputStream in = new ByteArrayInputStream(srcData);
+		callback.writeStream(attributes, in);
+		assertArrayEquals(response.getBytes(), srcData, "Content not equal");
+	}
+
+}
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/resource/a.css b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/a.css
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/request/resource/a.css
rename to wicket-core/src/test/java/org/apache/wicket/core/request/resource/a.css
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/resource/a.js b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/a.js
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/request/resource/a.js
rename to wicket-core/src/test/java/org/apache/wicket/core/request/resource/a.js
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/resource/b.css b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/b.css
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/request/resource/b.css
rename to wicket-core/src/test/java/org/apache/wicket/core/request/resource/b.css
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/resource/b.js b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/b.js
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/request/resource/b.js
rename to wicket-core/src/test/java/org/apache/wicket/core/request/resource/b.js
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/resource/b.min.css b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/b.min.css
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/request/resource/b.min.css
rename to wicket-core/src/test/java/org/apache/wicket/core/request/resource/b.min.css
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/resource/b.min.js b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/b.min.js
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/request/resource/b.min.js
rename to wicket-core/src/test/java/org/apache/wicket/core/request/resource/b.min.js
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/resource/b_de.js b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/b_de.js
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/request/resource/b_de.js
rename to wicket-core/src/test/java/org/apache/wicket/core/request/resource/b_de.js
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/resource/b_nl.js b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/b_nl.js
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/request/resource/b_nl.js
rename to wicket-core/src/test/java/org/apache/wicket/core/request/resource/b_nl.js
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/resource/b_nl.min.js b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/b_nl.min.js
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/request/resource/b_nl.min.js
rename to wicket-core/src/test/java/org/apache/wicket/core/request/resource/b_nl.min.js
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/resource/b_nl_BE.js b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/b_nl_BE.js
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/request/resource/b_nl_BE.js
rename to wicket-core/src/test/java/org/apache/wicket/core/request/resource/b_nl_BE.js
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/resource/b_nl_BE.min.js b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/b_nl_BE.min.js
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/request/resource/b_nl_BE.min.js
rename to wicket-core/src/test/java/org/apache/wicket/core/request/resource/b_nl_BE.min.js
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/resource/b_style.js b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/b_style.js
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/request/resource/b_style.js
rename to wicket-core/src/test/java/org/apache/wicket/core/request/resource/b_style.js
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/resource/b_style.min.js b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/b_style.min.js
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/request/resource/b_style.min.js
rename to wicket-core/src/test/java/org/apache/wicket/core/request/resource/b_style.min.js
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/resource/b_style_nl.js b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/b_style_nl.js
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/request/resource/b_style_nl.js
rename to wicket-core/src/test/java/org/apache/wicket/core/request/resource/b_style_nl.js
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/resource/b_style_nl.min.js b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/b_style_nl.min.js
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/request/resource/b_style_nl.min.js
rename to wicket-core/src/test/java/org/apache/wicket/core/request/resource/b_style_nl.min.js
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/resource/b_style_nl_BE.js b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/b_style_nl_BE.js
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/request/resource/b_style_nl_BE.js
rename to wicket-core/src/test/java/org/apache/wicket/core/request/resource/b_style_nl_BE.js
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/resource/b_style_nl_BE.min.js b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/b_style_nl_BE.min.js
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/request/resource/b_style_nl_BE.min.js
rename to wicket-core/src/test/java/org/apache/wicket/core/request/resource/b_style_nl_BE.min.js
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/resource/b_var_style.js b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/b_var_style.js
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/request/resource/b_var_style.js
rename to wicket-core/src/test/java/org/apache/wicket/core/request/resource/b_var_style.js
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/resource/b_var_style.min.js b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/b_var_style.min.js
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/request/resource/b_var_style.min.js
rename to wicket-core/src/test/java/org/apache/wicket/core/request/resource/b_var_style.min.js
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/resource/b_var_style_nl.js b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/b_var_style_nl.js
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/request/resource/b_var_style_nl.js
rename to wicket-core/src/test/java/org/apache/wicket/core/request/resource/b_var_style_nl.js
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/resource/b_var_style_nl.min.js b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/b_var_style_nl.min.js
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/request/resource/b_var_style_nl.min.js
rename to wicket-core/src/test/java/org/apache/wicket/core/request/resource/b_var_style_nl.min.js
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/resource/b_var_style_nl_BE.js b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/b_var_style_nl_BE.js
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/request/resource/b_var_style_nl_BE.js
rename to wicket-core/src/test/java/org/apache/wicket/core/request/resource/b_var_style_nl_BE.js
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/resource/b_var_style_nl_BE.min.js b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/b_var_style_nl_BE.min.js
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/request/resource/b_var_style_nl_BE.min.js
rename to wicket-core/src/test/java/org/apache/wicket/core/request/resource/b_var_style_nl_BE.min.js
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/resource/caching/ContextRelativeResourceCachingTest.java b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/caching/ContextRelativeResourceCachingTest.java
similarity index 94%
rename from wicket-core/src/test/java/org/apache/wicket/request/resource/caching/ContextRelativeResourceCachingTest.java
rename to wicket-core/src/test/java/org/apache/wicket/core/request/resource/caching/ContextRelativeResourceCachingTest.java
index 8e9544e..ee3aab3 100644
--- a/wicket-core/src/test/java/org/apache/wicket/request/resource/caching/ContextRelativeResourceCachingTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/caching/ContextRelativeResourceCachingTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.request.resource.caching;
+package org.apache.wicket.core.request.resource.caching;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -31,6 +31,8 @@ import org.apache.wicket.request.handler.resource.ResourceReferenceRequestHandle
 import org.apache.wicket.request.resource.ContextRelativeResource;
 import org.apache.wicket.request.resource.ResourceReference;
 import org.apache.wicket.request.resource.SharedResourceReference;
+import org.apache.wicket.request.resource.caching.FilenameWithVersionResourceCachingStrategy;
+import org.apache.wicket.request.resource.caching.IResourceCachingStrategy;
 import org.apache.wicket.request.resource.caching.version.IResourceVersion;
 import org.apache.wicket.request.resource.caching.version.StaticResourceVersion;
 import org.apache.wicket.util.tester.WicketTestCase;
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/resource/caching/FilenameWithVersionResourceCachingStrategyTest.java b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/caching/FilenameWithVersionResourceCachingStrategyTest.java
similarity index 94%
rename from wicket-core/src/test/java/org/apache/wicket/request/resource/caching/FilenameWithVersionResourceCachingStrategyTest.java
rename to wicket-core/src/test/java/org/apache/wicket/core/request/resource/caching/FilenameWithVersionResourceCachingStrategyTest.java
index 21f807f..d2c8d80 100644
--- a/wicket-core/src/test/java/org/apache/wicket/request/resource/caching/FilenameWithVersionResourceCachingStrategyTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/caching/FilenameWithVersionResourceCachingStrategyTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.request.resource.caching;
+package org.apache.wicket.core.request.resource.caching;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import java.time.Duration;
@@ -24,6 +24,9 @@ import org.apache.wicket.request.cycle.RequestCycle;
 import org.apache.wicket.request.http.WebResponse;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 import org.apache.wicket.request.resource.AbstractResource;
+import org.apache.wicket.request.resource.caching.FilenameWithVersionResourceCachingStrategy;
+import org.apache.wicket.request.resource.caching.IResourceCachingStrategy;
+import org.apache.wicket.request.resource.caching.ResourceUrl;
 import org.apache.wicket.request.resource.caching.version.IResourceVersion;
 import org.apache.wicket.request.resource.caching.version.MessageDigestResourceVersion;
 import org.apache.wicket.util.tester.BaseWicketTester;
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/resource/caching/QueryStringWithVersionResourceCachingStrategyTest.java b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/caching/QueryStringWithVersionResourceCachingStrategyTest.java
similarity index 94%
rename from wicket-core/src/test/java/org/apache/wicket/request/resource/caching/QueryStringWithVersionResourceCachingStrategyTest.java
rename to wicket-core/src/test/java/org/apache/wicket/core/request/resource/caching/QueryStringWithVersionResourceCachingStrategyTest.java
index c0268d0..d5d0ada 100644
--- a/wicket-core/src/test/java/org/apache/wicket/request/resource/caching/QueryStringWithVersionResourceCachingStrategyTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/caching/QueryStringWithVersionResourceCachingStrategyTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.request.resource.caching;
+package org.apache.wicket.core.request.resource.caching;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNull;
@@ -26,6 +26,9 @@ import org.apache.wicket.request.http.WebResponse;
 import org.apache.wicket.request.mapper.parameter.INamedParameters;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 import org.apache.wicket.request.resource.AbstractResource;
+import org.apache.wicket.request.resource.caching.IResourceCachingStrategy;
+import org.apache.wicket.request.resource.caching.QueryStringWithVersionResourceCachingStrategy;
+import org.apache.wicket.request.resource.caching.ResourceUrl;
 import org.apache.wicket.request.resource.caching.version.IResourceVersion;
 import org.apache.wicket.request.resource.caching.version.MessageDigestResourceVersion;
 import org.apache.wicket.util.tester.BaseWicketTester;
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/resource/caching/TestResource.java b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/caching/TestResource.java
similarity index 87%
rename from wicket-core/src/test/java/org/apache/wicket/request/resource/caching/TestResource.java
rename to wicket-core/src/test/java/org/apache/wicket/core/request/resource/caching/TestResource.java
index e21b6aa..de98a1b 100644
--- a/wicket-core/src/test/java/org/apache/wicket/request/resource/caching/TestResource.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/caching/TestResource.java
@@ -14,10 +14,12 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.request.resource.caching;
+package org.apache.wicket.core.request.resource.caching;
 
 import java.io.Serializable;
 
+import org.apache.wicket.request.resource.caching.IResourceCachingStrategy;
+import org.apache.wicket.request.resource.caching.IStaticCacheableResource;
 import org.apache.wicket.util.resource.IResourceStream;
 import org.apache.wicket.util.resource.StringResourceStream;
 
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/resource/resource.txt b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/resource.txt
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/request/resource/resource.txt
rename to wicket-core/src/test/java/org/apache/wicket/core/request/resource/resource.txt
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/resource/resource_en.txt b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/resource_en.txt
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/request/resource/resource_en.txt
rename to wicket-core/src/test/java/org/apache/wicket/core/request/resource/resource_en.txt
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/resource/resource_en_US.txt b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/resource_en_US.txt
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/request/resource/resource_en_US.txt
rename to wicket-core/src/test/java/org/apache/wicket/core/request/resource/resource_en_US.txt
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/resource/resource_gt_4096.txt b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/resource_gt_4096.txt
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/request/resource/resource_gt_4096.txt
rename to wicket-core/src/test/java/org/apache/wicket/core/request/resource/resource_gt_4096.txt
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/resource/resource_style.txt b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/resource_style.txt
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/request/resource/resource_style.txt
rename to wicket-core/src/test/java/org/apache/wicket/core/request/resource/resource_style.txt
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/resource/resource_style2.txt b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/resource_style2.txt
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/request/resource/resource_style2.txt
rename to wicket-core/src/test/java/org/apache/wicket/core/request/resource/resource_style2.txt
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/resource/resource_style2_pt.txt b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/resource_style2_pt.txt
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/request/resource/resource_style2_pt.txt
rename to wicket-core/src/test/java/org/apache/wicket/core/request/resource/resource_style2_pt.txt
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/resource/resource_style2_pt_BR.txt b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/resource_style2_pt_BR.txt
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/request/resource/resource_style2_pt_BR.txt
rename to wicket-core/src/test/java/org/apache/wicket/core/request/resource/resource_style2_pt_BR.txt
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/resource/resource_style_en.txt b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/resource_style_en.txt
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/request/resource/resource_style_en.txt
rename to wicket-core/src/test/java/org/apache/wicket/core/request/resource/resource_style_en.txt
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/resource/resource_style_en_US.txt b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/resource_style_en_US.txt
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/request/resource/resource_style_en_US.txt
rename to wicket-core/src/test/java/org/apache/wicket/core/request/resource/resource_style_en_US.txt
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/resource/resource_var.txt b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/resource_var.txt
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/request/resource/resource_var.txt
rename to wicket-core/src/test/java/org/apache/wicket/core/request/resource/resource_var.txt
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/resource/resource_var_en.txt b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/resource_var_en.txt
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/request/resource/resource_var_en.txt
rename to wicket-core/src/test/java/org/apache/wicket/core/request/resource/resource_var_en.txt
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/resource/resource_var_en_US.txt b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/resource_var_en_US.txt
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/request/resource/resource_var_en_US.txt
rename to wicket-core/src/test/java/org/apache/wicket/core/request/resource/resource_var_en_US.txt
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/resource/resource_var_style.txt b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/resource_var_style.txt
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/request/resource/resource_var_style.txt
rename to wicket-core/src/test/java/org/apache/wicket/core/request/resource/resource_var_style.txt
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/resource/resource_var_style2.txt b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/resource_var_style2.txt
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/request/resource/resource_var_style2.txt
rename to wicket-core/src/test/java/org/apache/wicket/core/request/resource/resource_var_style2.txt
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/resource/resource_var_style2_pt.txt b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/resource_var_style2_pt.txt
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/request/resource/resource_var_style2_pt.txt
rename to wicket-core/src/test/java/org/apache/wicket/core/request/resource/resource_var_style2_pt.txt
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/resource/resource_var_style2_pt_BR.txt b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/resource_var_style2_pt_BR.txt
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/request/resource/resource_var_style2_pt_BR.txt
rename to wicket-core/src/test/java/org/apache/wicket/core/request/resource/resource_var_style2_pt_BR.txt
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/resource/resource_var_style_en.txt b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/resource_var_style_en.txt
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/request/resource/resource_var_style_en.txt
rename to wicket-core/src/test/java/org/apache/wicket/core/request/resource/resource_var_style_en.txt
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/resource/resource_var_style_en_US.txt b/wicket-core/src/test/java/org/apache/wicket/core/request/resource/resource_var_style_en_US.txt
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/request/resource/resource_var_style_en_US.txt
rename to wicket-core/src/test/java/org/apache/wicket/core/request/resource/resource_var_style_en_US.txt
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/ExceptionTestBase.java b/wicket-core/src/test/java/org/apache/wicket/core/util/ExceptionTestBase.java
similarity index 98%
rename from wicket-core/src/test/java/org/apache/wicket/util/ExceptionTestBase.java
rename to wicket-core/src/test/java/org/apache/wicket/core/util/ExceptionTestBase.java
index 05d2203..d07375e 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/ExceptionTestBase.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/ExceptionTestBase.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.util;
+package org.apache.wicket.core.util;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/Log4jEventHistory.java b/wicket-core/src/test/java/org/apache/wicket/core/util/Log4jEventHistory.java
similarity index 94%
rename from wicket-core/src/test/java/org/apache/wicket/util/Log4jEventHistory.java
rename to wicket-core/src/test/java/org/apache/wicket/core/util/Log4jEventHistory.java
index 8d87ea9..e7939ac 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/Log4jEventHistory.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/Log4jEventHistory.java
@@ -1,74 +1,74 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.wicket.util;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.log4j.AppenderSkeleton;
-import org.apache.log4j.Level;
-import org.apache.log4j.spi.LoggingEvent;
-
-/**
- * Log the log4j messages for further assertions
- * */
-class Log4jEventHistory extends AppenderSkeleton
-{
-	private List<LoggingEvent> history = new ArrayList<LoggingEvent>();
-
-	/**
-	 * @return log history
-	 */
-	public List<LoggingEvent> getHistory()
-	{
-		return history;
-	}
-
-	@Override
-	public void close()
-	{
-	}
-
-	@Override
-	public boolean requiresLayout()
-	{
-		return false;
-	}
-
-	@Override
-	protected void append(LoggingEvent event)
-	{
-		history.add(event);
-	}
-
-	/**
-	 * @param level
-	 * @param msg
-	 * @return if this message was logged
-	 */
-	public boolean contains(Level level, String msg)
-	{
-		for (LoggingEvent event : history)
-		{
-			if (msg.equals(event.getMessage()) && level.equals(event.getLevel()))
-			{
-				return true;
-			}
-		}
-		return false;
-	}
-}
\ No newline at end of file
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.core.util;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.log4j.AppenderSkeleton;
+import org.apache.log4j.Level;
+import org.apache.log4j.spi.LoggingEvent;
+
+/**
+ * Log the log4j messages for further assertions
+ * */
+class Log4jEventHistory extends AppenderSkeleton
+{
+	private List<LoggingEvent> history = new ArrayList<LoggingEvent>();
+
+	/**
+	 * @return log history
+	 */
+	public List<LoggingEvent> getHistory()
+	{
+		return history;
+	}
+
+	@Override
+	public void close()
+	{
+	}
+
+	@Override
+	public boolean requiresLayout()
+	{
+		return false;
+	}
+
+	@Override
+	protected void append(LoggingEvent event)
+	{
+		history.add(event);
+	}
+
+	/**
+	 * @param level
+	 * @param msg
+	 * @return if this message was logged
+	 */
+	public boolean contains(Level level, String msg)
+	{
+		for (LoggingEvent event : history)
+		{
+			if (msg.equals(event.getMessage()) && level.equals(event.getLevel()))
+			{
+				return true;
+			}
+		}
+		return false;
+	}
+}
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/cookies/CookieUtilsTest.java b/wicket-core/src/test/java/org/apache/wicket/core/util/cookies/CookieUtilsTest.java
similarity index 94%
rename from wicket-core/src/test/java/org/apache/wicket/util/cookies/CookieUtilsTest.java
rename to wicket-core/src/test/java/org/apache/wicket/core/util/cookies/CookieUtilsTest.java
index 7739ace..3f1cdbd 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/cookies/CookieUtilsTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/cookies/CookieUtilsTest.java
@@ -1,179 +1,180 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.wicket.util.cookies;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import jakarta.servlet.http.Cookie;
-
-import org.apache.wicket.Page;
-import org.apache.wicket.markup.html.form.TextField;
-import org.apache.wicket.util.cookies.CookieValuePersisterTestPage.TestForm;
-import org.apache.wicket.util.tester.WicketTestCase;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-
-/**
- * 
- * @author Juergen Donnerstag
- */
-class CookieUtilsTest extends WicketTestCase
-{
-	@BeforeEach
-	void before()
-	{
-		tester.startPage(CookieValuePersisterTestPage.class);
-	}
-
-	/**
-	 * 
-	 * @throws Exception
-	 */
-	@SuppressWarnings({ "unchecked" })
-	@Test
-	void test1() throws Exception
-	{
-		// How does the test work: Make sure you have a page, form and form component properly set
-		// up (getRelativePath() etc.). See #before().
-		final Page page = tester.getLastRenderedPage();
-
-		// Get the form and form component created
-		final TestForm form = (TestForm)page.get("form");
-		final TextField<String> textField = (TextField<String>)form.get("input");
-
-		// Right after init, the requests and responses cookie lists must be empty
-		assertEquals(0, getRequestCookies().size());
-		assertEquals(0, getResponseCookies().size());
-
-		// Create a persister for the test
-		final CookieUtils persister = new CookieUtils();
-
-		// See comment in CookieUtils on how removing a Cookies works. As no cookies in the request,
-		// no "delete" cookie will be added to the response.
-		persister.remove(textField);
-		assertEquals(0, getRequestCookies().size());
-		assertEquals(0, getResponseCookies().size());
-
-		// Save the input field's value (add it to the response's cookie list)
-		persister.save(textField);
-		assertTrue(getRequestCookies().isEmpty());
-		assertEquals(1, getResponseCookies().size());
-		assertEquals("test", (getResponseCookies().get(0)).getValue());
-		assertEquals("form.input", (getResponseCookies().get(0)).getName());
-		assertEquals(tester.getRequest().getContextPath() + tester.getRequest().getServletPath(),
-			(getResponseCookies().get(0)).getPath());
-
-		// To remove a cookie means to add a cookie with maxAge=0. Provided a cookie with the same
-		// name has been provided in the request. Thus, no changes in our test case
-		persister.remove(textField);
-		assertEquals(0, getRequestCookies().size());
-		assertEquals(1, getResponseCookies().size());
-		assertEquals("test", (getResponseCookies().get(0)).getValue());
-		assertEquals("form.input", (getResponseCookies().get(0)).getName());
-		assertEquals(tester.getRequest().getContextPath() + tester.getRequest().getServletPath(),
-			(getResponseCookies().get(0)).getPath());
-
-		// Try to load it. Because there is no Cookie matching the textfield's name the model's
-		// value remains unchanged
-		persister.load(textField);
-		assertEquals("test", textField.getDefaultModelObjectAsString());
-
-		// Simulate loading a textfield. Initialize textfield with a new (default) value, copy the
-		// cookie from response to request (simulating a browser), than load the textfield from
-		// cookie and voala the textfield's value should change.
-		// save means: add it to the response
-		// load means: take it from request
-		assertEquals("test", textField.getDefaultModelObjectAsString());
-		textField.setDefaultModelObject("new text");
-		assertEquals("new text", textField.getDefaultModelObjectAsString());
-		copyCookieFromResponseToRequest();
-		assertEquals(1, getRequestCookies().size());
-		assertEquals(1, getResponseCookies().size());
-
-		persister.load(textField);
-		assertEquals("test", textField.getDefaultModelObjectAsString());
-		assertEquals(1, getRequestCookies().size());
-		assertEquals(1, getResponseCookies().size());
-
-		// remove all cookies from mock response. Because I'll find the cookie to be removed in the
-		// request, the persister will create a "delete" cookie to remove the cookie on the client
-		// and add it to the response. The already existing Cookie from the previous test gets
-		// removed from response since it is the same.
-		persister.remove(textField);
-		assertEquals(1, getRequestCookies().size());
-		assertEquals(1, getResponseCookies().size());
-		assertEquals("form.input", (getResponseCookies().get(0)).getName());
-		assertEquals(0, (getResponseCookies().get(0)).getMaxAge());
-	}
-
-	@Test
-	void saveLoadValue()
-	{
-		CookieUtils utils = new CookieUtils();
-		String value1 = "value one";
-		String key = "key";
-		utils.save(key, value1);
-		before(); // execute a request cycle, so the response cookie is send with the next request
-		String result = utils.load(key);
-		assertEquals(value1, result);
-	}
-
-	@Test
-	void defaults()
-	{
-		CookieDefaults defaults = new CookieDefaults();
-		defaults.setComment("A comment");
-		defaults.setDomain("A domain");
-		defaults.setMaxAge(123);
-		defaults.setSecure(true);
-		defaults.setVersion(456);
-		CookieUtils utils = new CookieUtils(defaults);
-		String value1 = "value one";
-		String key = "key";
-		utils.save(key, value1);
-		before(); // execute a request cycle, so the response cookie is send with the next request
-		Cookie result = utils.getCookie(key);
-		assertEquals(defaults.getComment(), result.getComment());
-	}
-
-	private void copyCookieFromResponseToRequest()
-	{
-		tester.getRequest().addCookie(getResponseCookies().iterator().next());
-	}
-
-	private Collection<Cookie> getRequestCookies()
-	{
-		if (tester.getRequest().getCookies() == null)
-		{
-			return Collections.emptyList();
-		}
-		else
-		{
-			return Arrays.asList(tester.getRequest().getCookies());
-		}
-	}
-
-	private List<Cookie> getResponseCookies()
-	{
-		return tester.getResponse().getCookies();
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.core.util.cookies;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import jakarta.servlet.http.Cookie;
+
+import org.apache.wicket.Page;
+import org.apache.wicket.markup.html.form.TextField;
+import org.apache.wicket.util.cookies.CookieDefaults;
+import org.apache.wicket.util.cookies.CookieUtils;
+import org.apache.wicket.util.tester.WicketTestCase;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+/**
+ * 
+ * @author Juergen Donnerstag
+ */
+class CookieUtilsTest extends WicketTestCase
+{
+	@BeforeEach
+	void before()
+	{
+		tester.startPage(CookieValuePersisterTestPage.class);
+	}
+
+	/**
+	 * 
+	 * @throws Exception
+	 */
+	@SuppressWarnings({ "unchecked" })
+	@Test
+	void test1() throws Exception
+	{
+		// How does the test work: Make sure you have a page, form and form component properly set
+		// up (getRelativePath() etc.). See #before().
+		final Page page = tester.getLastRenderedPage();
+
+		// Get the form and form component created
+		final CookieValuePersisterTestPage.TestForm form = (CookieValuePersisterTestPage.TestForm)page.get("form");
+		final TextField<String> textField = (TextField<String>)form.get("input");
+
+		// Right after init, the requests and responses cookie lists must be empty
+		assertEquals(0, getRequestCookies().size());
+		assertEquals(0, getResponseCookies().size());
+
+		// Create a persister for the test
+		final CookieUtils persister = new CookieUtils();
+
+		// See comment in CookieUtils on how removing a Cookies works. As no cookies in the request,
+		// no "delete" cookie will be added to the response.
+		persister.remove(textField);
+		assertEquals(0, getRequestCookies().size());
+		assertEquals(0, getResponseCookies().size());
+
+		// Save the input field's value (add it to the response's cookie list)
+		persister.save(textField);
+		assertTrue(getRequestCookies().isEmpty());
+		assertEquals(1, getResponseCookies().size());
+		assertEquals("test", (getResponseCookies().get(0)).getValue());
+		assertEquals("form.input", (getResponseCookies().get(0)).getName());
+		assertEquals(tester.getRequest().getContextPath() + tester.getRequest().getServletPath(),
+			(getResponseCookies().get(0)).getPath());
+
+		// To remove a cookie means to add a cookie with maxAge=0. Provided a cookie with the same
+		// name has been provided in the request. Thus, no changes in our test case
+		persister.remove(textField);
+		assertEquals(0, getRequestCookies().size());
+		assertEquals(1, getResponseCookies().size());
+		assertEquals("test", (getResponseCookies().get(0)).getValue());
+		assertEquals("form.input", (getResponseCookies().get(0)).getName());
+		assertEquals(tester.getRequest().getContextPath() + tester.getRequest().getServletPath(),
+			(getResponseCookies().get(0)).getPath());
+
+		// Try to load it. Because there is no Cookie matching the textfield's name the model's
+		// value remains unchanged
+		persister.load(textField);
+		assertEquals("test", textField.getDefaultModelObjectAsString());
+
+		// Simulate loading a textfield. Initialize textfield with a new (default) value, copy the
+		// cookie from response to request (simulating a browser), than load the textfield from
+		// cookie and voala the textfield's value should change.
+		// save means: add it to the response
+		// load means: take it from request
+		assertEquals("test", textField.getDefaultModelObjectAsString());
+		textField.setDefaultModelObject("new text");
+		assertEquals("new text", textField.getDefaultModelObjectAsString());
+		copyCookieFromResponseToRequest();
+		assertEquals(1, getRequestCookies().size());
+		assertEquals(1, getResponseCookies().size());
+
+		persister.load(textField);
+		assertEquals("test", textField.getDefaultModelObjectAsString());
+		assertEquals(1, getRequestCookies().size());
+		assertEquals(1, getResponseCookies().size());
+
+		// remove all cookies from mock response. Because I'll find the cookie to be removed in the
+		// request, the persister will create a "delete" cookie to remove the cookie on the client
+		// and add it to the response. The already existing Cookie from the previous test gets
+		// removed from response since it is the same.
+		persister.remove(textField);
+		assertEquals(1, getRequestCookies().size());
+		assertEquals(1, getResponseCookies().size());
+		assertEquals("form.input", (getResponseCookies().get(0)).getName());
+		assertEquals(0, (getResponseCookies().get(0)).getMaxAge());
+	}
+
+	@Test
+	void saveLoadValue()
+	{
+		CookieUtils utils = new CookieUtils();
+		String value1 = "value one";
+		String key = "key";
+		utils.save(key, value1);
+		before(); // execute a request cycle, so the response cookie is send with the next request
+		String result = utils.load(key);
+		assertEquals(value1, result);
+	}
+
+	@Test
+	void defaults()
+	{
+		CookieDefaults defaults = new CookieDefaults();
+		defaults.setComment("A comment");
+		defaults.setDomain("A domain");
+		defaults.setMaxAge(123);
+		defaults.setSecure(true);
+		defaults.setVersion(456);
+		CookieUtils utils = new CookieUtils(defaults);
+		String value1 = "value one";
+		String key = "key";
+		utils.save(key, value1);
+		before(); // execute a request cycle, so the response cookie is send with the next request
+		Cookie result = utils.getCookie(key);
+		assertEquals(defaults.getComment(), result.getComment());
+	}
+
+	private void copyCookieFromResponseToRequest()
+	{
+		tester.getRequest().addCookie(getResponseCookies().iterator().next());
+	}
+
+	private Collection<Cookie> getRequestCookies()
+	{
+		if (tester.getRequest().getCookies() == null)
+		{
+			return Collections.emptyList();
+		}
+		else
+		{
+			return Arrays.asList(tester.getRequest().getCookies());
+		}
+	}
+
+	private List<Cookie> getResponseCookies()
+	{
+		return tester.getResponse().getCookies();
+	}
+}
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/cookies/CookieValuePersisterTestPage.html b/wicket-core/src/test/java/org/apache/wicket/core/util/cookies/CookieValuePersisterTestPage.html
similarity index 97%
rename from wicket-core/src/test/java/org/apache/wicket/util/cookies/CookieValuePersisterTestPage.html
rename to wicket-core/src/test/java/org/apache/wicket/core/util/cookies/CookieValuePersisterTestPage.html
index 35b562d..5b2d3cf 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/cookies/CookieValuePersisterTestPage.html
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/cookies/CookieValuePersisterTestPage.html
@@ -1,26 +1,26 @@
-<!--
-    $Id: CookieValuePersisterTestPage.html 527232 2007-04-10 18:15:14Z jcompagner $
-    $Revision: 527232 $
-    $Date: 2007-04-10 20:15:14 +0200 (Di, 10 Apr 2007) $
-
-    ====================================================================
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-
-     http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<html>
-<body>
-  <form wicket:id="form">
-    <input wicket:id="input" type="text" />
-  </form>
-  <span wicket:id="feedback"></span>
-</body>
-</html>
+<!--
+    $Id: CookieValuePersisterTestPage.html 527232 2007-04-10 18:15:14Z jcompagner $
+    $Revision: 527232 $
+    $Date: 2007-04-10 20:15:14 +0200 (Di, 10 Apr 2007) $
+
+    ====================================================================
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+     http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+<html>
+<body>
+  <form wicket:id="form">
+    <input wicket:id="input" type="text" />
+  </form>
+  <span wicket:id="feedback"></span>
+</body>
+</html>
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/cookies/CookieValuePersisterTestPage.java b/wicket-core/src/test/java/org/apache/wicket/core/util/cookies/CookieValuePersisterTestPage.java
similarity index 94%
rename from wicket-core/src/test/java/org/apache/wicket/util/cookies/CookieValuePersisterTestPage.java
rename to wicket-core/src/test/java/org/apache/wicket/core/util/cookies/CookieValuePersisterTestPage.java
index 9144162..f62f939 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/cookies/CookieValuePersisterTestPage.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/cookies/CookieValuePersisterTestPage.java
@@ -1,70 +1,70 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.wicket.util.cookies;
-
-import org.apache.wicket.markup.html.WebPage;
-import org.apache.wicket.markup.html.form.Form;
-import org.apache.wicket.markup.html.form.TextField;
-import org.apache.wicket.markup.html.panel.FeedbackPanel;
-import org.apache.wicket.model.Model;
-
-
-/**
- * Mock page for testing.
- * 
- * @author Chris Turner
- */
-public class CookieValuePersisterTestPage extends WebPage
-{
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 * Construct.
-	 */
-	public CookieValuePersisterTestPage()
-	{
-		// Create and add feedback panel to page
-		final FeedbackPanel feedback = new FeedbackPanel("feedback");
-		add(feedback);
-		add(new TestForm("form"));
-	}
-
-	/**
-	 * 
-	 */
-	public final class TestForm extends Form<Void>
-	{
-		private static final long serialVersionUID = 1L;
-
-		/**
-		 * Constructor
-		 * 
-		 * @param id
-		 *            Name of form
-		 */
-        TestForm(final String id)
-		{
-			super(id);
-			add(new TextField<String>("input", new Model<String>("test")));
-		}
-
-		@Override
-		public final void onSubmit()
-		{
-		}
-	}
-}
\ No newline at end of file
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.core.util.cookies;
+
+import org.apache.wicket.markup.html.WebPage;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.form.TextField;
+import org.apache.wicket.markup.html.panel.FeedbackPanel;
+import org.apache.wicket.model.Model;
+
+
+/**
+ * Mock page for testing.
+ * 
+ * @author Chris Turner
+ */
+public class CookieValuePersisterTestPage extends WebPage
+{
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * Construct.
+	 */
+	public CookieValuePersisterTestPage()
+	{
+		// Create and add feedback panel to page
+		final FeedbackPanel feedback = new FeedbackPanel("feedback");
+		add(feedback);
+		add(new TestForm("form"));
+	}
+
+	/**
+	 * 
+	 */
+	public final class TestForm extends Form<Void>
+	{
+		private static final long serialVersionUID = 1L;
+
+		/**
+		 * Constructor
+		 * 
+		 * @param id
+		 *            Name of form
+		 */
+        TestForm(final String id)
+		{
+			super(id);
+			add(new TextField<String>("input", new Model<String>("test")));
+		}
+
+		@Override
+		public final void onSubmit()
+		{
+		}
+	}
+}
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/cookies/PreserveRequestCookieAfterLinkClickTest.java b/wicket-core/src/test/java/org/apache/wicket/core/util/cookies/PreserveRequestCookieAfterLinkClickTest.java
similarity index 98%
rename from wicket-core/src/test/java/org/apache/wicket/util/cookies/PreserveRequestCookieAfterLinkClickTest.java
rename to wicket-core/src/test/java/org/apache/wicket/core/util/cookies/PreserveRequestCookieAfterLinkClickTest.java
index 42e5667..9ffd4e5 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/cookies/PreserveRequestCookieAfterLinkClickTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/cookies/PreserveRequestCookieAfterLinkClickTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.util.cookies;
+package org.apache.wicket.core.util.cookies;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/cookies/SetCookieAndRedirectStatefullTestPage.html b/wicket-core/src/test/java/org/apache/wicket/core/util/cookies/SetCookieAndRedirectStatefullTestPage.html
similarity index 97%
rename from wicket-core/src/test/java/org/apache/wicket/util/cookies/SetCookieAndRedirectStatefullTestPage.html
rename to wicket-core/src/test/java/org/apache/wicket/core/util/cookies/SetCookieAndRedirectStatefullTestPage.html
index 2406cfb..742e586 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/cookies/SetCookieAndRedirectStatefullTestPage.html
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/cookies/SetCookieAndRedirectStatefullTestPage.html
@@ -1,26 +1,26 @@
-<!--
-    $Id: CookieValuePersisterTestPage.html 527232 2007-04-10 18:15:14Z jcompagner $
-    $Revision: 527232 $
-    $Date: 2007-04-10 20:15:14 +0200 (Di, 10 Apr 2007) $
-
-    ====================================================================
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-
-     http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<html>
-<body>
-  <form wicket:id="form">
-    <input wicket:id="input" type="text" />
-    <input type="submit" value="set cookie" />
-  </form>
-</body>
-</html>
+<!--
+    $Id: CookieValuePersisterTestPage.html 527232 2007-04-10 18:15:14Z jcompagner $
+    $Revision: 527232 $
+    $Date: 2007-04-10 20:15:14 +0200 (Di, 10 Apr 2007) $
+
+    ====================================================================
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+     http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+<html>
+<body>
+  <form wicket:id="form">
+    <input wicket:id="input" type="text" />
+    <input type="submit" value="set cookie" />
+  </form>
+</body>
+</html>
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/cookies/SetCookieAndRedirectStatefullTestPage.java b/wicket-core/src/test/java/org/apache/wicket/core/util/cookies/SetCookieAndRedirectStatefullTestPage.java
similarity index 94%
rename from wicket-core/src/test/java/org/apache/wicket/util/cookies/SetCookieAndRedirectStatefullTestPage.java
rename to wicket-core/src/test/java/org/apache/wicket/core/util/cookies/SetCookieAndRedirectStatefullTestPage.java
index 0af469b..1eb316f 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/cookies/SetCookieAndRedirectStatefullTestPage.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/cookies/SetCookieAndRedirectStatefullTestPage.java
@@ -1,61 +1,62 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.wicket.util.cookies;
-
-import org.apache.wicket.markup.html.WebPage;
-import org.apache.wicket.markup.html.form.Form;
-import org.apache.wicket.markup.html.form.TextField;
-import org.apache.wicket.model.IModel;
-import org.apache.wicket.model.Model;
-
-
-/**
- * Stateful form page which sets a cookie and calls setResponsePage()
- * 
- * @author Bertrand Guay-Paquet
- */
-public class SetCookieAndRedirectStatefullTestPage extends WebPage
-{
-	private static final long serialVersionUID = 1L;
-
-	/**	 */
-	private static final String cookieName = "CookieValuePersisterStatelessTestPage";
-
-	private IModel<String> inputModel;
-
-	/**
-	 * Construct.
-	 */
-	public SetCookieAndRedirectStatefullTestPage()
-	{
-		inputModel = new Model<String>();
-		Form<Void> form = new Form<Void>("form")
-		{
-			private static final long serialVersionUID = 1L;
-
-			@Override
-			protected void onSubmit()
-			{
-				CookieUtils utils = new CookieUtils();
-				utils.save(cookieName, inputModel.getObject());
-				setResponsePage(getApplication().getHomePage());
-			}
-		};
-		add(form);
-		form.add(new TextField<String>("input", inputModel));
-	}
-}
\ No newline at end of file
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.core.util.cookies;
+
+import org.apache.wicket.markup.html.WebPage;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.form.TextField;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.util.cookies.CookieUtils;
+
+
+/**
+ * Stateful form page which sets a cookie and calls setResponsePage()
+ * 
+ * @author Bertrand Guay-Paquet
+ */
+public class SetCookieAndRedirectStatefullTestPage extends WebPage
+{
+	private static final long serialVersionUID = 1L;
+
+	/**	 */
+	private static final String cookieName = "CookieValuePersisterStatelessTestPage";
+
+	private IModel<String> inputModel;
+
+	/**
+	 * Construct.
+	 */
+	public SetCookieAndRedirectStatefullTestPage()
+	{
+		inputModel = new Model<String>();
+		Form<Void> form = new Form<Void>("form")
+		{
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onSubmit()
+			{
+				CookieUtils utils = new CookieUtils();
+				utils.save(cookieName, inputModel.getObject());
+				setResponsePage(getApplication().getHomePage());
+			}
+		};
+		add(form);
+		form.add(new TextField<String>("input", inputModel));
+	}
+}
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/cookies/SetCookieAndRedirectStatelessTestPage.html b/wicket-core/src/test/java/org/apache/wicket/core/util/cookies/SetCookieAndRedirectStatelessTestPage.html
similarity index 97%
rename from wicket-core/src/test/java/org/apache/wicket/util/cookies/SetCookieAndRedirectStatelessTestPage.html
rename to wicket-core/src/test/java/org/apache/wicket/core/util/cookies/SetCookieAndRedirectStatelessTestPage.html
index 2406cfb..742e586 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/cookies/SetCookieAndRedirectStatelessTestPage.html
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/cookies/SetCookieAndRedirectStatelessTestPage.html
@@ -1,26 +1,26 @@
-<!--
-    $Id: CookieValuePersisterTestPage.html 527232 2007-04-10 18:15:14Z jcompagner $
-    $Revision: 527232 $
-    $Date: 2007-04-10 20:15:14 +0200 (Di, 10 Apr 2007) $
-
-    ====================================================================
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-
-     http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<html>
-<body>
-  <form wicket:id="form">
-    <input wicket:id="input" type="text" />
-    <input type="submit" value="set cookie" />
-  </form>
-</body>
-</html>
+<!--
+    $Id: CookieValuePersisterTestPage.html 527232 2007-04-10 18:15:14Z jcompagner $
+    $Revision: 527232 $
+    $Date: 2007-04-10 20:15:14 +0200 (Di, 10 Apr 2007) $
+
+    ====================================================================
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+     http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+<html>
+<body>
+  <form wicket:id="form">
+    <input wicket:id="input" type="text" />
+    <input type="submit" value="set cookie" />
+  </form>
+</body>
+</html>
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/cookies/SetCookieAndRedirectStatelessTestPage.java b/wicket-core/src/test/java/org/apache/wicket/core/util/cookies/SetCookieAndRedirectStatelessTestPage.java
similarity index 95%
rename from wicket-core/src/test/java/org/apache/wicket/util/cookies/SetCookieAndRedirectStatelessTestPage.java
rename to wicket-core/src/test/java/org/apache/wicket/core/util/cookies/SetCookieAndRedirectStatelessTestPage.java
index 665bd9d..57ed2ad 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/cookies/SetCookieAndRedirectStatelessTestPage.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/cookies/SetCookieAndRedirectStatelessTestPage.java
@@ -1,62 +1,63 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.wicket.util.cookies;
-
-import org.apache.wicket.markup.html.WebPage;
-import org.apache.wicket.markup.html.form.Form;
-import org.apache.wicket.markup.html.form.StatelessForm;
-import org.apache.wicket.markup.html.form.TextField;
-import org.apache.wicket.model.IModel;
-import org.apache.wicket.model.Model;
-
-
-/**
- * Stateless form page which sets a cookie and calls setResponsePage()
- * 
- * @author Bertrand Guay-Paquet
- */
-public class SetCookieAndRedirectStatelessTestPage extends WebPage
-{
-	private static final long serialVersionUID = 1L;
-
-	/**	 */
-	private static final String cookieName = "CookieValuePersisterStatelessTestPage";
-
-	private IModel<String> inputModel;
-
-	/**
-	 * Construct.
-	 */
-	public SetCookieAndRedirectStatelessTestPage()
-	{
-		inputModel = new Model<String>();
-		Form<Void> form = new StatelessForm<Void>("form")
-		{
-			private static final long serialVersionUID = 1L;
-
-			@Override
-			protected void onSubmit()
-			{
-				CookieUtils utils = new CookieUtils();
-				utils.save(cookieName, inputModel.getObject());
-				setResponsePage(getApplication().getHomePage());
-			}
-		};
-		add(form);
-		form.add(new TextField<String>("input", inputModel));
-	}
-}
\ No newline at end of file
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.core.util.cookies;
+
+import org.apache.wicket.markup.html.WebPage;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.form.StatelessForm;
+import org.apache.wicket.markup.html.form.TextField;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.util.cookies.CookieUtils;
+
+
+/**
+ * Stateless form page which sets a cookie and calls setResponsePage()
+ * 
+ * @author Bertrand Guay-Paquet
+ */
+public class SetCookieAndRedirectStatelessTestPage extends WebPage
+{
+	private static final long serialVersionUID = 1L;
+
+	/**	 */
+	private static final String cookieName = "CookieValuePersisterStatelessTestPage";
+
+	private IModel<String> inputModel;
+
+	/**
+	 * Construct.
+	 */
+	public SetCookieAndRedirectStatelessTestPage()
+	{
+		inputModel = new Model<String>();
+		Form<Void> form = new StatelessForm<Void>("form")
+		{
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onSubmit()
+			{
+				CookieUtils utils = new CookieUtils();
+				utils.save(cookieName, inputModel.getObject());
+				setResponsePage(getApplication().getHomePage());
+			}
+		};
+		add(form);
+		form.add(new TextField<String>("input", inputModel));
+	}
+}
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/cookies/SetCookieAndRedirectTest.java b/wicket-core/src/test/java/org/apache/wicket/core/util/cookies/SetCookieAndRedirectTest.java
similarity index 95%
rename from wicket-core/src/test/java/org/apache/wicket/util/cookies/SetCookieAndRedirectTest.java
rename to wicket-core/src/test/java/org/apache/wicket/core/util/cookies/SetCookieAndRedirectTest.java
index eed831d..8fd31c3 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/cookies/SetCookieAndRedirectTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/cookies/SetCookieAndRedirectTest.java
@@ -1,71 +1,71 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.wicket.util.cookies;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-
-import java.util.List;
-import jakarta.servlet.http.Cookie;
-
-import org.apache.wicket.Page;
-import org.apache.wicket.util.tester.FormTester;
-import org.apache.wicket.util.tester.WicketTestCase;
-import org.junit.jupiter.api.Test;
-
-/**
- * Tests setting a cookie and calling setResponsePage() in the same request.
- * 
- * @author Bertrand Guay-Paquet
- */
-class SetCookieAndRedirectTest extends WicketTestCase
-{
-	private static final String cookieValue = "cookieValue";
-
-	/**
-	 * Validate proper cookie value set with stateful page
-	 */
-	@Test
-	void statefulPage()
-	{
-		tester.startPage(SetCookieAndRedirectStatefullTestPage.class);
-		FormTester formTester = tester.newFormTester("form");
-		formTester.setValue("input", cookieValue);
-		formTester.submit();
-		Page page = tester.getLastRenderedPage();
-
-		List<Cookie> cookies = tester.getLastResponse().getCookies();
-		assertEquals(1, cookies.size());
-		assertEquals(cookieValue, cookies.get(0).getValue());
-	}
-
-	/**
-	 * Validate proper cookie value set with stateless page
-	 */
-	@Test
-	void statelessPage()
-	{
-		tester.startPage(SetCookieAndRedirectStatelessTestPage.class);
-		FormTester formTester = tester.newFormTester("form");
-		formTester.setValue("input", cookieValue);
-		formTester.submit();
-		Page page = tester.getLastRenderedPage();
-
-		List<Cookie> cookies = tester.getLastResponse().getCookies();
-		assertEquals(1, cookies.size());
-		assertEquals(cookieValue, cookies.get(0).getValue());
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.core.util.cookies;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import java.util.List;
+import jakarta.servlet.http.Cookie;
+
+import org.apache.wicket.Page;
+import org.apache.wicket.util.tester.FormTester;
+import org.apache.wicket.util.tester.WicketTestCase;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Tests setting a cookie and calling setResponsePage() in the same request.
+ * 
+ * @author Bertrand Guay-Paquet
+ */
+class SetCookieAndRedirectTest extends WicketTestCase
+{
+	private static final String cookieValue = "cookieValue";
+
+	/**
+	 * Validate proper cookie value set with stateful page
+	 */
+	@Test
+	void statefulPage()
+	{
+		tester.startPage(SetCookieAndRedirectStatefullTestPage.class);
+		FormTester formTester = tester.newFormTester("form");
+		formTester.setValue("input", cookieValue);
+		formTester.submit();
+		Page page = tester.getLastRenderedPage();
+
+		List<Cookie> cookies = tester.getLastResponse().getCookies();
+		assertEquals(1, cookies.size());
+		assertEquals(cookieValue, cookies.get(0).getValue());
+	}
+
+	/**
+	 * Validate proper cookie value set with stateless page
+	 */
+	@Test
+	void statelessPage()
+	{
+		tester.startPage(SetCookieAndRedirectStatelessTestPage.class);
+		FormTester formTester = tester.newFormTester("form");
+		formTester.setValue("input", cookieValue);
+		formTester.submit();
+		Page page = tester.getLastRenderedPage();
+
+		List<Cookie> cookies = tester.getLastResponse().getCookies();
+		assertEquals(1, cookies.size());
+		assertEquals(cookieValue, cookies.get(0).getValue());
+	}
+}
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/file/WebApplicationPathTest.java b/wicket-core/src/test/java/org/apache/wicket/core/util/file/WebApplicationPathTest.java
similarity index 94%
rename from wicket-core/src/test/java/org/apache/wicket/util/file/WebApplicationPathTest.java
rename to wicket-core/src/test/java/org/apache/wicket/core/util/file/WebApplicationPathTest.java
index 9ed3fcb..d8badb3 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/file/WebApplicationPathTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/file/WebApplicationPathTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.util.file;
+package org.apache.wicket.core.util.file;
 
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertNull;
@@ -22,7 +22,6 @@ import static org.junit.jupiter.api.Assertions.assertNull;
 import java.net.URL;
 import jakarta.servlet.ServletContext;
 
-import org.apache.wicket.core.util.file.WebApplicationPath;
 import org.apache.wicket.util.resource.IResourceStream;
 import org.junit.jupiter.api.Test;
 import org.mockito.ArgumentMatchers;
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/io/PageA.java b/wicket-core/src/test/java/org/apache/wicket/core/util/io/PageA.java
similarity index 97%
rename from wicket-core/src/test/java/org/apache/wicket/util/io/PageA.java
rename to wicket-core/src/test/java/org/apache/wicket/core/util/io/PageA.java
index a62d385..a7a7806 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/io/PageA.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/io/PageA.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.util.io;
+package org.apache.wicket.core.util.io;
 
 import org.apache.wicket.markup.html.WebPage;
 import org.apache.wicket.request.http.WebResponse;
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/io/PageB.java b/wicket-core/src/test/java/org/apache/wicket/core/util/io/PageB.java
similarity index 97%
rename from wicket-core/src/test/java/org/apache/wicket/util/io/PageB.java
rename to wicket-core/src/test/java/org/apache/wicket/core/util/io/PageB.java
index d4170be..a19797d 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/io/PageB.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/io/PageB.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.util.io;
+package org.apache.wicket.core.util.io;
 
 import org.apache.wicket.markup.html.WebPage;
 
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/io/SerializableCheckerTest.java b/wicket-core/src/test/java/org/apache/wicket/core/util/io/SerializableCheckerTest.java
similarity index 95%
rename from wicket-core/src/test/java/org/apache/wicket/util/io/SerializableCheckerTest.java
rename to wicket-core/src/test/java/org/apache/wicket/core/util/io/SerializableCheckerTest.java
index 8e7d3e1..cee0e25 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/io/SerializableCheckerTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/io/SerializableCheckerTest.java
@@ -1,165 +1,166 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.wicket.util.io;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-
-import java.io.IOException;
-import java.io.NotSerializableException;
-import java.io.Serializable;
-
-import org.apache.wicket.core.util.objects.checker.AbstractObjectChecker;
-import org.apache.wicket.core.util.objects.checker.CheckingObjectOutputStream;
-import org.apache.wicket.core.util.objects.checker.ObjectSerializationChecker;
-import org.apache.wicket.util.value.ValueMap;
-import org.junit.jupiter.api.Test;
-
-/**
- * @author Pedro Santos
- */
-class SerializableCheckerTest
-{
-
-	/**
-	 * Test {@link ValueMap} serializability.
-	 * 
-	 * @throws IOException
-	 */
-	@Test
-	void valueMap() throws IOException
-	{
-		CheckingObjectOutputStream checker = new CheckingObjectOutputStream(
-			new ByteArrayOutputStream(),
-			new ObjectSerializationChecker(new NotSerializableException()));
-		checker.writeObject(new ValueMap());
-	}
-
-	/**
-	 * Asserts that {@link org.apache.wicket.core.util.objects.checker.CheckingObjectOutputStream}
-	 * will check an instance just once, despite it occurs more than once in the object tree
-	 *
-	 * https://issues.apache.org/jira/browse/WICKET-5642
-	 *
-	 * @throws IOException
-	 */
-	@Test
-	void checkObjectsByIdentity() throws IOException
-	{
-		CountingChecker countingChecker = new CountingChecker();
-		CheckingObjectOutputStream outputStream = new CheckingObjectOutputStream(
-			new ByteArrayOutputStream(), countingChecker);
-		final IdentityTestType type = new IdentityTestType();
-		type.member = new SerializableTypeWithMember(type);
-		outputStream.writeObject(type);
-
-		assertEquals(2, countingChecker.getCount());
-	}
-
-	/**
-	 * @throws IOException
-	 */
-	@Test
-	void nonSerializableTypeDetection() throws IOException
-	{
-		CheckingObjectOutputStream checker = new CheckingObjectOutputStream(
-			new ByteArrayOutputStream(),
-			new ObjectSerializationChecker(new NotSerializableException()));
-		String exceptionMessage = null;
-		try
-		{
-			checker.writeObject(new TestType2());
-		}
-		catch (CheckingObjectOutputStream.ObjectCheckException e)
-		{
-			exceptionMessage = e.getMessage();
-		}
-		assertTrue(exceptionMessage.contains(NonSerializableType.class.getName()));
-	}
-
-	private static class CountingChecker extends AbstractObjectChecker
-	{
-		private int count = 0;
-
-		@Override
-		public Result check(Object object)
-		{
-			count++;
-			return super.check(object);
-		}
-
-		private int getCount()
-		{
-			return count;
-		}
-	}
-
-	private static class SerializableTypeWithMember extends SerializableType
-	{
-		private final IdentityTestType member;
-
-		private SerializableTypeWithMember(IdentityTestType member)
-		{
-			this.member = member;
-		}
-	}
-
-	private static class IdentityTestType implements Serializable
-	{
-		private static final long serialVersionUID = 1L;
-
-		private SerializableType member;
-
-		@Override
-		public boolean equals(Object obj)
-		{
-			return false;
-		}
-	}
-
-	private static class TestType2 implements Serializable
-	{
-		private static final long serialVersionUID = 1L;
-		ProblematicType problematicType = new ProblematicType();
-		SerializableType serializableType = new SerializableType();
-		NonSerializableType nonSerializable = new NonSerializableType();
-	}
-
-	private static class NonSerializableType
-	{
-	}
-
-	private static class SerializableType implements Serializable
-	{
-		private static final long serialVersionUID = 1L;
-	}
-	private static class TestException extends RuntimeException
-	{
-		private static final long serialVersionUID = 1L;
-
-	}
-	private static class ProblematicType implements Serializable
-	{
-		private static final long serialVersionUID = 1L;
-
-		@Override
-		public boolean equals(Object obj)
-		{
-			throw new TestException();
-		}
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.core.util.io;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import java.io.IOException;
+import java.io.NotSerializableException;
+import java.io.Serializable;
+
+import org.apache.wicket.core.util.objects.checker.AbstractObjectChecker;
+import org.apache.wicket.core.util.objects.checker.CheckingObjectOutputStream;
+import org.apache.wicket.core.util.objects.checker.ObjectSerializationChecker;
+import org.apache.wicket.util.io.ByteArrayOutputStream;
+import org.apache.wicket.util.value.ValueMap;
+import org.junit.jupiter.api.Test;
+
+/**
+ * @author Pedro Santos
+ */
+class SerializableCheckerTest
+{
+
+	/**
+	 * Test {@link ValueMap} serializability.
+	 * 
+	 * @throws IOException
+	 */
+	@Test
+	void valueMap() throws IOException
+	{
+		CheckingObjectOutputStream checker = new CheckingObjectOutputStream(
+			new ByteArrayOutputStream(),
+			new ObjectSerializationChecker(new NotSerializableException()));
+		checker.writeObject(new ValueMap());
+	}
+
+	/**
+	 * Asserts that {@link org.apache.wicket.core.util.objects.checker.CheckingObjectOutputStream}
+	 * will check an instance just once, despite it occurs more than once in the object tree
+	 *
+	 * https://issues.apache.org/jira/browse/WICKET-5642
+	 *
+	 * @throws IOException
+	 */
+	@Test
+	void checkObjectsByIdentity() throws IOException
+	{
+		CountingChecker countingChecker = new CountingChecker();
+		CheckingObjectOutputStream outputStream = new CheckingObjectOutputStream(
+			new ByteArrayOutputStream(), countingChecker);
+		final IdentityTestType type = new IdentityTestType();
+		type.member = new SerializableTypeWithMember(type);
+		outputStream.writeObject(type);
+
+		assertEquals(2, countingChecker.getCount());
+	}
+
+	/**
+	 * @throws IOException
+	 */
+	@Test
+	void nonSerializableTypeDetection() throws IOException
+	{
+		CheckingObjectOutputStream checker = new CheckingObjectOutputStream(
+			new ByteArrayOutputStream(),
+			new ObjectSerializationChecker(new NotSerializableException()));
+		String exceptionMessage = null;
+		try
+		{
+			checker.writeObject(new TestType2());
+		}
+		catch (CheckingObjectOutputStream.ObjectCheckException e)
+		{
+			exceptionMessage = e.getMessage();
+		}
+		assertTrue(exceptionMessage.contains(NonSerializableType.class.getName()));
+	}
+
+	private static class CountingChecker extends AbstractObjectChecker
+	{
+		private int count = 0;
+
+		@Override
+		public Result check(Object object)
+		{
+			count++;
+			return super.check(object);
+		}
+
+		private int getCount()
+		{
+			return count;
+		}
+	}
+
+	private static class SerializableTypeWithMember extends SerializableType
+	{
+		private final IdentityTestType member;
+
+		private SerializableTypeWithMember(IdentityTestType member)
+		{
+			this.member = member;
+		}
+	}
+
+	private static class IdentityTestType implements Serializable
+	{
+		private static final long serialVersionUID = 1L;
+
+		private SerializableType member;
+
+		@Override
+		public boolean equals(Object obj)
+		{
+			return false;
+		}
+	}
+
+	private static class TestType2 implements Serializable
+	{
+		private static final long serialVersionUID = 1L;
+		ProblematicType problematicType = new ProblematicType();
+		SerializableType serializableType = new SerializableType();
+		NonSerializableType nonSerializable = new NonSerializableType();
+	}
+
+	private static class NonSerializableType
+	{
+	}
+
+	private static class SerializableType implements Serializable
+	{
+		private static final long serialVersionUID = 1L;
+	}
+	private static class TestException extends RuntimeException
+	{
+		private static final long serialVersionUID = 1L;
+
+	}
+	private static class ProblematicType implements Serializable
+	{
+		private static final long serialVersionUID = 1L;
+
+		@Override
+		public boolean equals(Object obj)
+		{
+			throw new TestException();
+		}
+	}
+}
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/lang/Address.java b/wicket-core/src/test/java/org/apache/wicket/core/util/lang/Address.java
similarity index 96%
rename from wicket-core/src/test/java/org/apache/wicket/util/lang/Address.java
rename to wicket-core/src/test/java/org/apache/wicket/core/util/lang/Address.java
index c6da5a1..a9027d1 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/lang/Address.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/lang/Address.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.util.lang;
+package org.apache.wicket.core.util.lang;
 
 /**
  * @author jcompagner
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/lang/BooleanBean.java b/wicket-core/src/test/java/org/apache/wicket/core/util/lang/BooleanBean.java
similarity index 96%
rename from wicket-core/src/test/java/org/apache/wicket/util/lang/BooleanBean.java
rename to wicket-core/src/test/java/org/apache/wicket/core/util/lang/BooleanBean.java
index 63e8a93..53550ba 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/lang/BooleanBean.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/lang/BooleanBean.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.util.lang;
+package org.apache.wicket.core.util.lang;
 
 /**
  * Bean for {@link PropertyResolverTest#booleanVsBoolean()}
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/lang/Country.java b/wicket-core/src/test/java/org/apache/wicket/core/util/lang/Country.java
similarity index 96%
copy from wicket-core/src/test/java/org/apache/wicket/util/lang/Country.java
copy to wicket-core/src/test/java/org/apache/wicket/core/util/lang/Country.java
index 561af07..17133fe 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/lang/Country.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/lang/Country.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.util.lang;
+package org.apache.wicket.core.util.lang;
 
 /**
  * @author jcompagner
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/lang/Country2.java b/wicket-core/src/test/java/org/apache/wicket/core/util/lang/Country2.java
similarity index 93%
rename from wicket-core/src/test/java/org/apache/wicket/util/lang/Country2.java
rename to wicket-core/src/test/java/org/apache/wicket/core/util/lang/Country2.java
index 04ffbad..5dbc1d1 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/lang/Country2.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/lang/Country2.java
@@ -1,47 +1,47 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.wicket.util.lang;
-
-/**
- * @author jcompagner
- */
-class Country2 extends Country
-{
-
-	private final Country country;
-
-	/**
-	 * Construct.
-	 * 
-	 * @param name
-	 * @param country
-	 */
-	public Country2(String name, Country country)
-	{
-		super(name);
-		this.country = country;
-	}
-
-	/**
-	 * @return Country
-	 */
-	public Country getSubCountry()
-	{
-		return country;
-	}
-
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.core.util.lang;
+
+/**
+ * @author jcompagner
+ */
+class Country2 extends Country
+{
+
+	private final Country country;
+
+	/**
+	 * Construct.
+	 * 
+	 * @param name
+	 * @param country
+	 */
+	public Country2(String name, Country country)
+	{
+		super(name);
+		this.country = country;
+	}
+
+	/**
+	 * @return Country
+	 */
+	public Country getSubCountry()
+	{
+		return country;
+	}
+
+}
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/lang/Document.java b/wicket-core/src/test/java/org/apache/wicket/core/util/lang/Document.java
similarity index 96%
rename from wicket-core/src/test/java/org/apache/wicket/util/lang/Document.java
rename to wicket-core/src/test/java/org/apache/wicket/core/util/lang/Document.java
index 1b59337..6cefe56 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/lang/Document.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/lang/Document.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.util.lang;
+package org.apache.wicket.core.util.lang;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -41,4 +41,4 @@ class Document {
 	public <T> void setProperty(String name, T t) {
 		values.put(name, t);
 	}
-}
\ No newline at end of file
+}
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/lang/Person.java b/wicket-core/src/test/java/org/apache/wicket/core/util/lang/Person.java
similarity index 98%
rename from wicket-core/src/test/java/org/apache/wicket/util/lang/Person.java
rename to wicket-core/src/test/java/org/apache/wicket/core/util/lang/Person.java
index 3c546ce..6afa959 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/lang/Person.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/lang/Person.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.util.lang;
+package org.apache.wicket.core.util.lang;
 
 import java.util.ArrayList;
 import java.util.List;
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/lang/Person2.java b/wicket-core/src/test/java/org/apache/wicket/core/util/lang/Person2.java
similarity index 95%
copy from wicket-core/src/test/java/org/apache/wicket/util/lang/Person2.java
copy to wicket-core/src/test/java/org/apache/wicket/core/util/lang/Person2.java
index fcfc1c5..00966f5 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/lang/Person2.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/lang/Person2.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.util.lang;
+package org.apache.wicket.core.util.lang;
 
 /**
  * @author jcompagner
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/lang/PropertyResolverTest.java b/wicket-core/src/test/java/org/apache/wicket/core/util/lang/PropertyResolverTest.java
similarity index 99%
rename from wicket-core/src/test/java/org/apache/wicket/util/lang/PropertyResolverTest.java
rename to wicket-core/src/test/java/org/apache/wicket/core/util/lang/PropertyResolverTest.java
index 6291557..c61dff1 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/lang/PropertyResolverTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/lang/PropertyResolverTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.util.lang;
+package org.apache.wicket.core.util.lang;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
@@ -39,13 +39,11 @@ import java.util.Vector;
 import org.apache.wicket.ConverterLocator;
 import org.apache.wicket.IConverterLocator;
 import org.apache.wicket.WicketRuntimeException;
-import org.apache.wicket.core.util.lang.PropertyResolver;
 import org.apache.wicket.core.util.lang.PropertyResolver.AbstractGetAndSet;
 import org.apache.wicket.core.util.lang.PropertyResolver.CachingPropertyLocator;
 import org.apache.wicket.core.util.lang.PropertyResolver.DefaultPropertyLocator;
 import org.apache.wicket.core.util.lang.PropertyResolver.IGetAndSet;
 import org.apache.wicket.core.util.lang.PropertyResolver.IPropertyLocator;
-import org.apache.wicket.core.util.lang.PropertyResolverConverter;
 import org.apache.wicket.util.convert.ConversionException;
 import org.apache.wicket.util.convert.IConverter;
 import org.apache.wicket.util.convert.converter.AbstractConverter;
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/lang/WicketObjectsTest.java b/wicket-core/src/test/java/org/apache/wicket/core/util/lang/WicketObjectsTest.java
similarity index 98%
rename from wicket-core/src/test/java/org/apache/wicket/util/lang/WicketObjectsTest.java
rename to wicket-core/src/test/java/org/apache/wicket/core/util/lang/WicketObjectsTest.java
index 00f4919..fcd5d69 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/lang/WicketObjectsTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/lang/WicketObjectsTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.util.lang;
+package org.apache.wicket.core.util.lang;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotSame;
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/markup/xhtml/WellFormedXmlTest.java b/wicket-core/src/test/java/org/apache/wicket/core/util/markup/xhtml/WellFormedXmlTest.java
similarity index 90%
rename from wicket-core/src/test/java/org/apache/wicket/util/markup/xhtml/WellFormedXmlTest.java
rename to wicket-core/src/test/java/org/apache/wicket/core/util/markup/xhtml/WellFormedXmlTest.java
index 26cfc9d..fe2b182 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/markup/xhtml/WellFormedXmlTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/markup/xhtml/WellFormedXmlTest.java
@@ -1,34 +1,35 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.wicket.util.markup.xhtml;
-
-import org.junit.jupiter.api.Test;
-
-/**
- * Checks that the html markup files are well formed xml-s.
- * 
- * @author akiraly
- */
-class WellFormedXmlTest extends WellFormedXmlTestCase
-{
-	@Test
-	@Override
-	public void markupFiles()
-	{
-		super.markupFiles();
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.core.util.markup.xhtml;
+
+import org.apache.wicket.util.markup.xhtml.WellFormedXmlTestCase;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Checks that the html markup files are well formed xml-s.
+ * 
+ * @author akiraly
+ */
+class WellFormedXmlTest extends WellFormedXmlTestCase
+{
+	@Test
+	@Override
+	public void markupFiles()
+	{
+		super.markupFiles();
+	}
+}
diff --git a/wicket-core/src/test/java/org/apache/wicket/core/util/resource/ClassPathResourceFinderTest.java b/wicket-core/src/test/java/org/apache/wicket/core/util/resource/ClassPathResourceFinderTest.java
index 74044f8..4f1a710 100644
--- a/wicket-core/src/test/java/org/apache/wicket/core/util/resource/ClassPathResourceFinderTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/resource/ClassPathResourceFinderTest.java
@@ -16,7 +16,7 @@
  */
 package org.apache.wicket.core.util.resource;
 
-import static org.apache.wicket.util.resource.ResourceStreamLocatorTest.getFilename;
+import static org.apache.wicket.core.util.resource.ResourceStreamLocatorTest.getFilename;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/resource/PathTest.java b/wicket-core/src/test/java/org/apache/wicket/core/util/resource/PathTest.java
similarity index 95%
rename from wicket-core/src/test/java/org/apache/wicket/util/resource/PathTest.java
rename to wicket-core/src/test/java/org/apache/wicket/core/util/resource/PathTest.java
index 44d8f90..7535a52 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/resource/PathTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/resource/PathTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.util.resource;
+package org.apache.wicket.core.util.resource;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
@@ -28,6 +28,8 @@ import java.nio.charset.Charset;
 import java.util.Arrays;
 
 import org.apache.wicket.util.file.Path;
+import org.apache.wicket.util.resource.IResourceStream;
+import org.apache.wicket.util.resource.ResourceStreamNotFoundException;
 import org.apache.wicket.util.tester.WicketTestCase;
 import org.junit.jupiter.api.Test;
 
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/resource/ResourceStreamLocatorTest.java b/wicket-core/src/test/java/org/apache/wicket/core/util/resource/ResourceStreamLocatorTest.java
similarity index 97%
rename from wicket-core/src/test/java/org/apache/wicket/util/resource/ResourceStreamLocatorTest.java
rename to wicket-core/src/test/java/org/apache/wicket/core/util/resource/ResourceStreamLocatorTest.java
index 80ae833..cb9a724 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/resource/ResourceStreamLocatorTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/resource/ResourceStreamLocatorTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.util.resource;
+package org.apache.wicket.core.util.resource;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
@@ -31,6 +31,8 @@ import org.apache.wicket.core.util.resource.UrlResourceStream;
 import org.apache.wicket.core.util.resource.locator.IResourceStreamLocator;
 import org.apache.wicket.core.util.resource.locator.ResourceStreamLocator;
 import org.apache.wicket.util.file.IResourceFinder;
+import org.apache.wicket.util.resource.FileResourceStream;
+import org.apache.wicket.util.resource.IResourceStream;
 import org.apache.wicket.util.string.Strings;
 import org.apache.wicket.util.tester.WicketTestCase;
 import org.junit.jupiter.api.Test;
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/resource/sourcePath/ResourceStreamLocatorTest.txt b/wicket-core/src/test/java/org/apache/wicket/core/util/resource/ResourceStreamLocatorTest.txt
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/util/resource/sourcePath/ResourceStreamLocatorTest.txt
rename to wicket-core/src/test/java/org/apache/wicket/core/util/resource/ResourceStreamLocatorTest.txt
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/resource/sourcePath/ResourceStreamLocatorTest_de.txt b/wicket-core/src/test/java/org/apache/wicket/core/util/resource/ResourceStreamLocatorTest_de.txt
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/util/resource/sourcePath/ResourceStreamLocatorTest_de.txt
rename to wicket-core/src/test/java/org/apache/wicket/core/util/resource/ResourceStreamLocatorTest_de.txt
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/resource/sourcePath/ResourceStreamLocatorTest_de_DE.txt b/wicket-core/src/test/java/org/apache/wicket/core/util/resource/ResourceStreamLocatorTest_de_DE.txt
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/util/resource/sourcePath/ResourceStreamLocatorTest_de_DE.txt
rename to wicket-core/src/test/java/org/apache/wicket/core/util/resource/ResourceStreamLocatorTest_de_DE.txt
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/resource/sourcePath/ResourceStreamLocatorTest_de_DE_POSIX.txt b/wicket-core/src/test/java/org/apache/wicket/core/util/resource/ResourceStreamLocatorTest_de_DE_POSIX.txt
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/util/resource/sourcePath/ResourceStreamLocatorTest_de_DE_POSIX.txt
rename to wicket-core/src/test/java/org/apache/wicket/core/util/resource/ResourceStreamLocatorTest_de_DE_POSIX.txt
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/resource/sourcePath/ResourceStreamLocatorTest_de__POSIX.txt b/wicket-core/src/test/java/org/apache/wicket/core/util/resource/ResourceStreamLocatorTest_de__POSIX.txt
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/util/resource/sourcePath/ResourceStreamLocatorTest_de__POSIX.txt
rename to wicket-core/src/test/java/org/apache/wicket/core/util/resource/ResourceStreamLocatorTest_de__POSIX.txt
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/resource/ResourceStreamLocatorTest_fr.txt b/wicket-core/src/test/java/org/apache/wicket/core/util/resource/ResourceStreamLocatorTest_fr.txt
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/util/resource/ResourceStreamLocatorTest_fr.txt
rename to wicket-core/src/test/java/org/apache/wicket/core/util/resource/ResourceStreamLocatorTest_fr.txt
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/resource/sourcePath/ResourceStreamLocatorTest_style.txt b/wicket-core/src/test/java/org/apache/wicket/core/util/resource/ResourceStreamLocatorTest_style.txt
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/util/resource/sourcePath/ResourceStreamLocatorTest_style.txt
rename to wicket-core/src/test/java/org/apache/wicket/core/util/resource/ResourceStreamLocatorTest_style.txt
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/resource/sourcePath/ResourceStreamLocatorTest_style_de.txt b/wicket-core/src/test/java/org/apache/wicket/core/util/resource/ResourceStreamLocatorTest_style_de.txt
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/util/resource/sourcePath/ResourceStreamLocatorTest_style_de.txt
rename to wicket-core/src/test/java/org/apache/wicket/core/util/resource/ResourceStreamLocatorTest_style_de.txt
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/resource/sourcePath/ResourceStreamLocatorTest_style_de_DE.txt b/wicket-core/src/test/java/org/apache/wicket/core/util/resource/ResourceStreamLocatorTest_style_de_DE.txt
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/util/resource/sourcePath/ResourceStreamLocatorTest_style_de_DE.txt
rename to wicket-core/src/test/java/org/apache/wicket/core/util/resource/ResourceStreamLocatorTest_style_de_DE.txt
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/resource/sourcePath/ResourceStreamLocatorTest_style_de_DE_POSIX.txt b/wicket-core/src/test/java/org/apache/wicket/core/util/resource/ResourceStreamLocatorTest_style_de_DE_POSIX.txt
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/util/resource/sourcePath/ResourceStreamLocatorTest_style_de_DE_POSIX.txt
rename to wicket-core/src/test/java/org/apache/wicket/core/util/resource/ResourceStreamLocatorTest_style_de_DE_POSIX.txt
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/resource/sourcePath/ResourceStreamLocatorTest_style_de__POSIX.txt b/wicket-core/src/test/java/org/apache/wicket/core/util/resource/ResourceStreamLocatorTest_style_de__POSIX.txt
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/util/resource/sourcePath/ResourceStreamLocatorTest_style_de__POSIX.txt
rename to wicket-core/src/test/java/org/apache/wicket/core/util/resource/ResourceStreamLocatorTest_style_de__POSIX.txt
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/resource/UrlResourceStreamTest.java b/wicket-core/src/test/java/org/apache/wicket/core/util/resource/UrlResourceStreamTest.java
similarity index 94%
rename from wicket-core/src/test/java/org/apache/wicket/util/resource/UrlResourceStreamTest.java
rename to wicket-core/src/test/java/org/apache/wicket/core/util/resource/UrlResourceStreamTest.java
index b724dd4..60829c9 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/resource/UrlResourceStreamTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/resource/UrlResourceStreamTest.java
@@ -1,147 +1,147 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.wicket.util.resource;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-import java.net.URLConnection;
-import java.net.URLStreamHandler;
-import java.util.concurrent.atomic.AtomicInteger;
-
-import org.apache.wicket.core.util.resource.UrlResourceStream;
-import org.apache.wicket.util.lang.Bytes;
-import org.junit.jupiter.api.Test;
-
-/**
- * @author Kent Tong
- */
-class UrlResourceStreamTest {
-	/**
-	 * lastModified() shouldn't change the content length if the file isn't really changed.
-	 *
-	 * @throws IOException
-	 */
-	@Test
-	void lastModifiedForResourceInJar() throws IOException {
-		String anyClassInJarFile = "/java/lang/String.class";
-		URL url = getClass().getResource(anyClassInJarFile);
-		UrlResourceStream stream = new UrlResourceStream(url);
-		Bytes length = stream.length();
-		stream.lastModifiedTime();
-		assertEquals(stream.length(), length);
-		stream.close();
-	}
-
-	/**
-	 * Verifies that a connection is opened just once but each #getInputStream() opens a new one
-	 * and all input streams are closed with UrlResourceStream#close()
-	 *
-	 * https://issues.apache.org/jira/browse/WICKET-3176
-	 * https://issues.apache.org/jira/browse/WICKET-4293
-	 *
-	 * @throws IOException
-	 * @throws ResourceStreamNotFoundException
-	 */
-	@Test
-	void loadJustOnce() throws IOException, ResourceStreamNotFoundException {
-		String anyClassInJarFile = "/java/lang/String.class";
-		URL realURL = getClass().getResource(anyClassInJarFile);
-
-		final AtomicInteger connectCounter = new AtomicInteger(0);
-		final AtomicInteger streamCounter = new AtomicInteger(0);
-		URL url = new URL(null, "test://anything", new CountingURLStreamHandler(realURL,
-				connectCounter, streamCounter));
-
-		UrlResourceStream countingStream = new UrlResourceStream(url);
-
-		// assert the call is not made yet
-		assertEquals(0, connectCounter.get());
-		assertEquals(0, streamCounter.get());
-
-		// assert the connection is loaded lazily
-		countingStream.length();
-		assertEquals(1, connectCounter.get());
-		assertEquals(0, streamCounter.get());
-
-		// assert the following calls do not make new connections
-		countingStream.getInputStream();
-		assertEquals(1, connectCounter.get());
-		assertEquals(1, streamCounter.get());
-		countingStream.getContentType();
-		assertEquals(1, connectCounter.get());
-		assertEquals(1, streamCounter.get());
-		countingStream.getInputStream();
-		assertEquals(1, connectCounter.get());
-		assertEquals(2, streamCounter.get());
-		countingStream.close();
-
-		assertEquals(1, connectCounter.get());
-		assertEquals(2, streamCounter.get());
-
-		// assert the connection is re-opened (again lazily) second time,
-		// but stream is not re-opened yet
-		countingStream.length();
-
-		assertEquals(2, connectCounter.get());
-		assertEquals(2, streamCounter.get());
-
-		// assert stream is re-opened on next getInputStream call
-		countingStream.getInputStream();
-		assertEquals(2, connectCounter.get());
-		assertEquals(3, streamCounter.get());
-	}
-
-
-	/**
-	 * {@link URLStreamHandler} that counts the calls to {@link URL#openConnection()}
-	 */
-	private static final class CountingURLStreamHandler extends URLStreamHandler {
-		private final AtomicInteger connectCounter, streamCounter;
-
-		private final URL realURL;
-
-		CountingURLStreamHandler(URL realURL, AtomicInteger connectCounter,
-								 AtomicInteger streamCounter) {
-			this.connectCounter = connectCounter;
-			this.streamCounter = streamCounter;
-			this.realURL = realURL;
-		}
-
-		@Override
-		protected URLConnection openConnection(URL u) throws IOException {
-			connectCounter.getAndIncrement();
-
-			final URLConnection realConn = realURL.openConnection();
-			return new URLConnection(u) {
-
-				@Override
-				public void connect() throws IOException {
-					realConn.connect();
-				}
-
-				@Override
-				public InputStream getInputStream() throws IOException {
-					streamCounter.incrementAndGet();
-					return realConn.getInputStream();
-				}
-			};
-		}
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.core.util.resource;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.net.URLConnection;
+import java.net.URLStreamHandler;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import org.apache.wicket.util.lang.Bytes;
+import org.apache.wicket.util.resource.ResourceStreamNotFoundException;
+import org.junit.jupiter.api.Test;
+
+/**
+ * @author Kent Tong
+ */
+class UrlResourceStreamTest {
+	/**
+	 * lastModified() shouldn't change the content length if the file isn't really changed.
+	 *
+	 * @throws IOException
+	 */
+	@Test
+	void lastModifiedForResourceInJar() throws IOException {
+		String anyClassInJarFile = "/java/lang/String.class";
+		URL url = getClass().getResource(anyClassInJarFile);
+		UrlResourceStream stream = new UrlResourceStream(url);
+		Bytes length = stream.length();
+		stream.lastModifiedTime();
+		assertEquals(stream.length(), length);
+		stream.close();
+	}
+
+	/**
+	 * Verifies that a connection is opened just once but each #getInputStream() opens a new one
+	 * and all input streams are closed with UrlResourceStream#close()
+	 *
+	 * https://issues.apache.org/jira/browse/WICKET-3176
+	 * https://issues.apache.org/jira/browse/WICKET-4293
+	 *
+	 * @throws IOException
+	 * @throws ResourceStreamNotFoundException
+	 */
+	@Test
+	void loadJustOnce() throws IOException, ResourceStreamNotFoundException {
+		String anyClassInJarFile = "/java/lang/String.class";
+		URL realURL = getClass().getResource(anyClassInJarFile);
+
+		final AtomicInteger connectCounter = new AtomicInteger(0);
+		final AtomicInteger streamCounter = new AtomicInteger(0);
+		URL url = new URL(null, "test://anything", new CountingURLStreamHandler(realURL,
+				connectCounter, streamCounter));
+
+		UrlResourceStream countingStream = new UrlResourceStream(url);
+
+		// assert the call is not made yet
+		assertEquals(0, connectCounter.get());
+		assertEquals(0, streamCounter.get());
+
+		// assert the connection is loaded lazily
+		countingStream.length();
+		assertEquals(1, connectCounter.get());
+		assertEquals(0, streamCounter.get());
+
+		// assert the following calls do not make new connections
+		countingStream.getInputStream();
+		assertEquals(1, connectCounter.get());
+		assertEquals(1, streamCounter.get());
+		countingStream.getContentType();
+		assertEquals(1, connectCounter.get());
+		assertEquals(1, streamCounter.get());
+		countingStream.getInputStream();
+		assertEquals(1, connectCounter.get());
+		assertEquals(2, streamCounter.get());
+		countingStream.close();
+
+		assertEquals(1, connectCounter.get());
+		assertEquals(2, streamCounter.get());
+
+		// assert the connection is re-opened (again lazily) second time,
+		// but stream is not re-opened yet
+		countingStream.length();
+
+		assertEquals(2, connectCounter.get());
+		assertEquals(2, streamCounter.get());
+
+		// assert stream is re-opened on next getInputStream call
+		countingStream.getInputStream();
+		assertEquals(2, connectCounter.get());
+		assertEquals(3, streamCounter.get());
+	}
+
+
+	/**
+	 * {@link URLStreamHandler} that counts the calls to {@link URL#openConnection()}
+	 */
+	private static final class CountingURLStreamHandler extends URLStreamHandler {
+		private final AtomicInteger connectCounter, streamCounter;
+
+		private final URL realURL;
+
+		CountingURLStreamHandler(URL realURL, AtomicInteger connectCounter,
+								 AtomicInteger streamCounter) {
+			this.connectCounter = connectCounter;
+			this.streamCounter = streamCounter;
+			this.realURL = realURL;
+		}
+
+		@Override
+		protected URLConnection openConnection(URL u) throws IOException {
+			connectCounter.getAndIncrement();
+
+			final URLConnection realConn = realURL.openConnection();
+			return new URLConnection(u) {
+
+				@Override
+				public void connect() throws IOException {
+					realConn.connect();
+				}
+
+				@Override
+				public InputStream getInputStream() throws IOException {
+					streamCounter.incrementAndGet();
+					return realConn.getInputStream();
+				}
+			};
+		}
+	}
+}
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/resource/locator/CachingResourceStreamLocatorTest.java b/wicket-core/src/test/java/org/apache/wicket/core/util/resource/locator/CachingResourceStreamLocatorTest.java
similarity index 97%
rename from wicket-core/src/test/java/org/apache/wicket/util/resource/locator/CachingResourceStreamLocatorTest.java
rename to wicket-core/src/test/java/org/apache/wicket/core/util/resource/locator/CachingResourceStreamLocatorTest.java
index 825d92a..fd15e29 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/resource/locator/CachingResourceStreamLocatorTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/resource/locator/CachingResourceStreamLocatorTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.util.resource.locator;
+package org.apache.wicket.core.util.resource.locator;
 
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertNull;
@@ -30,8 +30,6 @@ import java.util.Locale;
 import org.apache.wicket.ajax.AbstractDefaultAjaxBehavior;
 import org.apache.wicket.core.util.resource.ClassPathResourceFinder;
 import org.apache.wicket.core.util.resource.UrlResourceStream;
-import org.apache.wicket.core.util.resource.locator.IResourceStreamLocator;
-import org.apache.wicket.core.util.resource.locator.ResourceStreamLocator;
 import org.apache.wicket.core.util.resource.locator.caching.CachingResourceStreamLocator;
 import org.apache.wicket.util.resource.FileResourceStream;
 import org.apache.wicket.util.resource.IResourceStream;
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/resource/locator/ResourceNameIteratorTest.java b/wicket-core/src/test/java/org/apache/wicket/core/util/resource/locator/ResourceNameIteratorTest.java
similarity index 90%
rename from wicket-core/src/test/java/org/apache/wicket/util/resource/locator/ResourceNameIteratorTest.java
rename to wicket-core/src/test/java/org/apache/wicket/core/util/resource/locator/ResourceNameIteratorTest.java
index 0212315..487c19a 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/resource/locator/ResourceNameIteratorTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/resource/locator/ResourceNameIteratorTest.java
@@ -1,183 +1,179 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.wicket.util.resource.locator;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertFalse;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Locale;
-
-import org.apache.wicket.core.util.resource.locator.ExtensionResourceNameIterator;
-import org.apache.wicket.core.util.resource.locator.LocaleResourceNameIterator;
-import org.apache.wicket.core.util.resource.locator.ResourceNameIterator;
-import org.apache.wicket.core.util.resource.locator.StyleAndVariationResourceNameIterator;
-import org.apache.wicket.util.tester.WicketTestCase;
-import org.junit.jupiter.api.Test;
-
-/**
- * @author Pedro Santos
- */
-class ResourceNameIteratorTest extends WicketTestCase
-{
-	/**
-	 * Asserting no duplicated locale sufix get iterated
-	 */
-	@Test
-	void localeResourceNameIterator()
-	{
-		Locale locale = new Locale("a", "b", "c");
-		LocaleResourceNameIterator iterator = new LocaleResourceNameIterator(locale, false);
-		HashSet<String> variations = new HashSet<String>();
-		while (iterator.hasNext())
-		{
-			assertTrue(variations.add(iterator.next()));
-		}
-		assertEquals(4, variations.size());
-		assertTrue(variations.contains("_a_B_c"));
-		assertTrue(variations.contains("_a_B"));
-		assertTrue(variations.contains("_a"));
-		assertTrue(variations.contains(""));
-
-		locale = new Locale("a", "b");
-		iterator = new LocaleResourceNameIterator(locale, false);
-		variations = new HashSet<String>();
-		while (iterator.hasNext())
-		{
-			assertTrue(variations.add(iterator.next()));
-		}
-		assertEquals(3, variations.size());
-		assertTrue(variations.contains("_a_B"));
-		assertTrue(variations.contains("_a"));
-		assertTrue(variations.contains(""));
-
-		locale = new Locale("a");
-		iterator = new LocaleResourceNameIterator(locale, false);
-		variations = new HashSet<String>();
-		while (iterator.hasNext())
-		{
-			assertTrue(variations.add(iterator.next()));
-		}
-		assertEquals(2, variations.size());
-		assertTrue(variations.contains("_a"));
-		assertTrue(variations.contains(""));
-	}
-
-	/**
-	 * 
-	 */
-	@Test
-	void styleAndVariationResourceNameIterator()
-	{
-		StyleAndVariationResourceNameIterator iterator = new StyleAndVariationResourceNameIterator(
-			null, null);
-		assertTrue(iterator.hasNext());
-		iterator.next();
-		assertFalse(iterator.hasNext());
-
-		iterator = new StyleAndVariationResourceNameIterator("style", null);
-		assertTrue(iterator.hasNext());
-		iterator.next();
-		assertEquals("style", iterator.getStyle());
-		assertEquals(null, iterator.getVariation());
-		iterator.next();
-		assertEquals(null, iterator.getStyle());
-		assertEquals(null, iterator.getVariation());
-		assertFalse(iterator.hasNext());
-
-		iterator = new StyleAndVariationResourceNameIterator("style", "variation");
-		assertTrue(iterator.hasNext());
-		iterator.next();
-		assertEquals("style", iterator.getStyle());
-		assertEquals("variation", iterator.getVariation());
-		iterator.next();
-		assertEquals("style", iterator.getStyle());
-		assertEquals(null, iterator.getVariation());
-		iterator.next();
-		assertEquals(null, iterator.getStyle());
-		assertEquals("variation", iterator.getVariation());
-		iterator.next();
-		assertEquals(null, iterator.getStyle());
-		assertEquals(null, iterator.getVariation());
-		assertFalse(iterator.hasNext());
-	}
-
-	/**
-	 * 
-	 */
-	@Test
-	void extensionResourceNameIterator()
-	{
-		ExtensionResourceNameIterator iterator = new ExtensionResourceNameIterator(null);
-		assertTrue(iterator.hasNext());
-		assertEquals(null, iterator.next());
-		assertFalse(iterator.hasNext());
-
-		iterator = new ExtensionResourceNameIterator(Arrays.asList("txt"));
-		assertTrue(iterator.hasNext());
-		assertEquals("txt", iterator.next());
-		assertFalse(iterator.hasNext());
-
-		iterator = new ExtensionResourceNameIterator(Arrays.asList("properties", "utf8.properties", "properties.xml"));
-		assertTrue(iterator.hasNext());
-		assertEquals("properties", iterator.next());
-		assertTrue(iterator.hasNext());
-		assertEquals("utf8.properties", iterator.next());
-		assertTrue(iterator.hasNext());
-		assertEquals("properties.xml", iterator.next());
-		assertFalse(iterator.hasNext());
-	}
-
-	/**
-	 * 
-	 */
-	@Test
-	void noDuplicateVariations()
-	{
-		String path = "patch.extension";
-		String style = null;
-		String var = "var";
-		Locale locale = Locale.CANADA_FRENCH;
-		Iterable<String> extensions = null;
-		boolean strict = false;
-		Iterator<String> iterator = new ResourceNameIterator(path, style, var, locale, extensions, strict);
-		HashSet<String> variations = new HashSet<String>();
-		while (iterator.hasNext())
-		{
-			assertTrue(variations.add(iterator.next()));
-		}
-		assertEquals(6, variations.size());
-	}
-
-	/**
-	 * 
-	 */
-	@Test
-	void noTrailingDotWhenNoExtension()
-	{
-		Iterator<String> iterator = new ResourceNameIterator("foo", null, null, null, null, false);
-
-		assertTrue(iterator.hasNext());
-
-		assertEquals("foo", iterator.next());
-
-		assertFalse(iterator.hasNext());
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.core.util.resource.locator;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Locale;
+
+import org.apache.wicket.util.tester.WicketTestCase;
+import org.junit.jupiter.api.Test;
+
+/**
+ * @author Pedro Santos
+ */
+class ResourceNameIteratorTest extends WicketTestCase
+{
+	/**
+	 * Asserting no duplicated locale sufix get iterated
+	 */
+	@Test
+	void localeResourceNameIterator()
+	{
+		Locale locale = new Locale("a", "b", "c");
+		LocaleResourceNameIterator iterator = new LocaleResourceNameIterator(locale, false);
+		HashSet<String> variations = new HashSet<String>();
+		while (iterator.hasNext())
+		{
+			assertTrue(variations.add(iterator.next()));
+		}
+		assertEquals(4, variations.size());
+		assertTrue(variations.contains("_a_B_c"));
+		assertTrue(variations.contains("_a_B"));
+		assertTrue(variations.contains("_a"));
+		assertTrue(variations.contains(""));
+
+		locale = new Locale("a", "b");
+		iterator = new LocaleResourceNameIterator(locale, false);
+		variations = new HashSet<String>();
+		while (iterator.hasNext())
+		{
+			assertTrue(variations.add(iterator.next()));
+		}
+		assertEquals(3, variations.size());
+		assertTrue(variations.contains("_a_B"));
+		assertTrue(variations.contains("_a"));
+		assertTrue(variations.contains(""));
+
+		locale = new Locale("a");
+		iterator = new LocaleResourceNameIterator(locale, false);
+		variations = new HashSet<String>();
+		while (iterator.hasNext())
+		{
+			assertTrue(variations.add(iterator.next()));
+		}
+		assertEquals(2, variations.size());
+		assertTrue(variations.contains("_a"));
+		assertTrue(variations.contains(""));
+	}
+
+	/**
+	 * 
+	 */
+	@Test
+	void styleAndVariationResourceNameIterator()
+	{
+		StyleAndVariationResourceNameIterator iterator = new StyleAndVariationResourceNameIterator(
+			null, null);
+		assertTrue(iterator.hasNext());
+		iterator.next();
+		assertFalse(iterator.hasNext());
+
+		iterator = new StyleAndVariationResourceNameIterator("style", null);
+		assertTrue(iterator.hasNext());
+		iterator.next();
+		assertEquals("style", iterator.getStyle());
+		assertEquals(null, iterator.getVariation());
+		iterator.next();
+		assertEquals(null, iterator.getStyle());
+		assertEquals(null, iterator.getVariation());
+		assertFalse(iterator.hasNext());
+
+		iterator = new StyleAndVariationResourceNameIterator("style", "variation");
+		assertTrue(iterator.hasNext());
+		iterator.next();
+		assertEquals("style", iterator.getStyle());
+		assertEquals("variation", iterator.getVariation());
+		iterator.next();
+		assertEquals("style", iterator.getStyle());
+		assertEquals(null, iterator.getVariation());
+		iterator.next();
+		assertEquals(null, iterator.getStyle());
+		assertEquals("variation", iterator.getVariation());
+		iterator.next();
+		assertEquals(null, iterator.getStyle());
+		assertEquals(null, iterator.getVariation());
+		assertFalse(iterator.hasNext());
+	}
+
+	/**
+	 * 
+	 */
+	@Test
+	void extensionResourceNameIterator()
+	{
+		ExtensionResourceNameIterator iterator = new ExtensionResourceNameIterator(null);
+		assertTrue(iterator.hasNext());
+		assertEquals(null, iterator.next());
+		assertFalse(iterator.hasNext());
+
+		iterator = new ExtensionResourceNameIterator(Arrays.asList("txt"));
+		assertTrue(iterator.hasNext());
+		assertEquals("txt", iterator.next());
+		assertFalse(iterator.hasNext());
+
+		iterator = new ExtensionResourceNameIterator(Arrays.asList("properties", "utf8.properties", "properties.xml"));
+		assertTrue(iterator.hasNext());
+		assertEquals("properties", iterator.next());
+		assertTrue(iterator.hasNext());
+		assertEquals("utf8.properties", iterator.next());
+		assertTrue(iterator.hasNext());
+		assertEquals("properties.xml", iterator.next());
+		assertFalse(iterator.hasNext());
+	}
+
+	/**
+	 * 
+	 */
+	@Test
+	void noDuplicateVariations()
+	{
+		String path = "patch.extension";
+		String style = null;
+		String var = "var";
+		Locale locale = Locale.CANADA_FRENCH;
+		Iterable<String> extensions = null;
+		boolean strict = false;
+		Iterator<String> iterator = new ResourceNameIterator(path, style, var, locale, extensions, strict);
+		HashSet<String> variations = new HashSet<String>();
+		while (iterator.hasNext())
+		{
+			assertTrue(variations.add(iterator.next()));
+		}
+		assertEquals(6, variations.size());
+	}
+
+	/**
+	 * 
+	 */
+	@Test
+	void noTrailingDotWhenNoExtension()
+	{
+		Iterator<String> iterator = new ResourceNameIterator("foo", null, null, null, null, false);
+
+		assertTrue(iterator.hasNext());
+
+		assertEquals("foo", iterator.next());
+
+		assertFalse(iterator.hasNext());
+	}
+}
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/resource/ResourceStreamLocatorTest.txt b/wicket-core/src/test/java/org/apache/wicket/core/util/resource/sourcePath/ResourceStreamLocatorTest.txt
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/util/resource/ResourceStreamLocatorTest.txt
rename to wicket-core/src/test/java/org/apache/wicket/core/util/resource/sourcePath/ResourceStreamLocatorTest.txt
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/resource/ResourceStreamLocatorTest_de.txt b/wicket-core/src/test/java/org/apache/wicket/core/util/resource/sourcePath/ResourceStreamLocatorTest_de.txt
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/util/resource/ResourceStreamLocatorTest_de.txt
rename to wicket-core/src/test/java/org/apache/wicket/core/util/resource/sourcePath/ResourceStreamLocatorTest_de.txt
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/resource/ResourceStreamLocatorTest_de_DE.txt b/wicket-core/src/test/java/org/apache/wicket/core/util/resource/sourcePath/ResourceStreamLocatorTest_de_DE.txt
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/util/resource/ResourceStreamLocatorTest_de_DE.txt
rename to wicket-core/src/test/java/org/apache/wicket/core/util/resource/sourcePath/ResourceStreamLocatorTest_de_DE.txt
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/resource/ResourceStreamLocatorTest_de_DE_POSIX.txt b/wicket-core/src/test/java/org/apache/wicket/core/util/resource/sourcePath/ResourceStreamLocatorTest_de_DE_POSIX.txt
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/util/resource/ResourceStreamLocatorTest_de_DE_POSIX.txt
rename to wicket-core/src/test/java/org/apache/wicket/core/util/resource/sourcePath/ResourceStreamLocatorTest_de_DE_POSIX.txt
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/resource/ResourceStreamLocatorTest_de__POSIX.txt b/wicket-core/src/test/java/org/apache/wicket/core/util/resource/sourcePath/ResourceStreamLocatorTest_de__POSIX.txt
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/util/resource/ResourceStreamLocatorTest_de__POSIX.txt
rename to wicket-core/src/test/java/org/apache/wicket/core/util/resource/sourcePath/ResourceStreamLocatorTest_de__POSIX.txt
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/resource/ResourceStreamLocatorTest_style.txt b/wicket-core/src/test/java/org/apache/wicket/core/util/resource/sourcePath/ResourceStreamLocatorTest_style.txt
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/util/resource/ResourceStreamLocatorTest_style.txt
rename to wicket-core/src/test/java/org/apache/wicket/core/util/resource/sourcePath/ResourceStreamLocatorTest_style.txt
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/resource/ResourceStreamLocatorTest_style_de.txt b/wicket-core/src/test/java/org/apache/wicket/core/util/resource/sourcePath/ResourceStreamLocatorTest_style_de.txt
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/util/resource/ResourceStreamLocatorTest_style_de.txt
rename to wicket-core/src/test/java/org/apache/wicket/core/util/resource/sourcePath/ResourceStreamLocatorTest_style_de.txt
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/resource/ResourceStreamLocatorTest_style_de_DE.txt b/wicket-core/src/test/java/org/apache/wicket/core/util/resource/sourcePath/ResourceStreamLocatorTest_style_de_DE.txt
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/util/resource/ResourceStreamLocatorTest_style_de_DE.txt
rename to wicket-core/src/test/java/org/apache/wicket/core/util/resource/sourcePath/ResourceStreamLocatorTest_style_de_DE.txt
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/resource/ResourceStreamLocatorTest_style_de_DE_POSIX.txt b/wicket-core/src/test/java/org/apache/wicket/core/util/resource/sourcePath/ResourceStreamLocatorTest_style_de_DE_POSIX.txt
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/util/resource/ResourceStreamLocatorTest_style_de_DE_POSIX.txt
rename to wicket-core/src/test/java/org/apache/wicket/core/util/resource/sourcePath/ResourceStreamLocatorTest_style_de_DE_POSIX.txt
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/resource/ResourceStreamLocatorTest_style_de__POSIX.txt b/wicket-core/src/test/java/org/apache/wicket/core/util/resource/sourcePath/ResourceStreamLocatorTest_style_de__POSIX.txt
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/util/resource/ResourceStreamLocatorTest_style_de__POSIX.txt
rename to wicket-core/src/test/java/org/apache/wicket/core/util/resource/sourcePath/ResourceStreamLocatorTest_style_de__POSIX.txt
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/string/JavaScriptStripperTest.java b/wicket-core/src/test/java/org/apache/wicket/core/util/string/JavaScriptStripperTest.java
similarity index 99%
rename from wicket-core/src/test/java/org/apache/wicket/util/string/JavaScriptStripperTest.java
rename to wicket-core/src/test/java/org/apache/wicket/core/util/string/JavaScriptStripperTest.java
index d928cc6..e7df546 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/string/JavaScriptStripperTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/string/JavaScriptStripperTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.util.string;
+package org.apache.wicket.core.util.string;
 
 import org.apache.wicket.core.util.string.JavaScriptStripper;
 import org.junit.jupiter.api.Test;
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/string/interpolator/PropertyVariableInterpolatorTest.java b/wicket-core/src/test/java/org/apache/wicket/core/util/string/interpolator/PropertyVariableInterpolatorTest.java
similarity index 94%
rename from wicket-core/src/test/java/org/apache/wicket/util/string/interpolator/PropertyVariableInterpolatorTest.java
rename to wicket-core/src/test/java/org/apache/wicket/core/util/string/interpolator/PropertyVariableInterpolatorTest.java
index e437501..fb89079 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/string/interpolator/PropertyVariableInterpolatorTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/string/interpolator/PropertyVariableInterpolatorTest.java
@@ -1,73 +1,73 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.wicket.util.string.interpolator;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-
-import org.apache.wicket.core.util.string.interpolator.PropertyVariableInterpolator;
-import org.junit.jupiter.api.Test;
-
-/**
- * Tests {@link PropertyVariableInterpolator}
- * 
- * @author Gerolf Seitz
- */
-class PropertyVariableInterpolatorTest
-{
-	/**
-	 * 
-	 */
-	@Test
-	void withValue()
-	{
-		TestClass object = new TestClass("value");
-		String result = new PropertyVariableInterpolator("${key}", object).toString();
-		assertEquals("value", result.toString());
-	}
-
-	/**
-	 * A test that shows a usage of escape character. The first two '$' characters are squashed to
-	 * '$' and '${key}' is interpolated to the respective value
-	 */
-	@Test
-	void withValueAndEscape()
-	{
-		TestClass object = new TestClass("3.24");
-		String result = new PropertyVariableInterpolator("$$${key}", object).toString();
-		assertEquals("$3.24", result.toString());
-	}
-
-	/**
-	 * 
-	 */
-	@Test
-	void withoutValue()
-	{
-		String result = new PropertyVariableInterpolator("${key}", null).toString();
-		assertEquals("${key}", result.toString());
-	}
-
-	private static class TestClass
-	{
-		private final String key;
-
-		TestClass(String key)
-		{
-			this.key = key;
-		}
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.core.util.string.interpolator;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import org.apache.wicket.core.util.string.interpolator.PropertyVariableInterpolator;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Tests {@link PropertyVariableInterpolator}
+ * 
+ * @author Gerolf Seitz
+ */
+class PropertyVariableInterpolatorTest
+{
+	/**
+	 * 
+	 */
+	@Test
+	void withValue()
+	{
+		TestClass object = new TestClass("value");
+		String result = new PropertyVariableInterpolator("${key}", object).toString();
+		assertEquals("value", result.toString());
+	}
+
+	/**
+	 * A test that shows a usage of escape character. The first two '$' characters are squashed to
+	 * '$' and '${key}' is interpolated to the respective value
+	 */
+	@Test
+	void withValueAndEscape()
+	{
+		TestClass object = new TestClass("3.24");
+		String result = new PropertyVariableInterpolator("$$${key}", object).toString();
+		assertEquals("$3.24", result.toString());
+	}
+
+	/**
+	 * 
+	 */
+	@Test
+	void withoutValue()
+	{
+		String result = new PropertyVariableInterpolator("${key}", null).toString();
+		assertEquals("${key}", result.toString());
+	}
+
+	private static class TestClass
+	{
+		private final String key;
+
+		TestClass(String key)
+		{
+			this.key = key;
+		}
+	}
+}
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/template/CssTemplateTest.java b/wicket-core/src/test/java/org/apache/wicket/core/util/template/CssTemplateTest.java
similarity index 90%
rename from wicket-core/src/test/java/org/apache/wicket/util/template/CssTemplateTest.java
rename to wicket-core/src/test/java/org/apache/wicket/core/util/template/CssTemplateTest.java
index f60cc77..0454409 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/template/CssTemplateTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/template/CssTemplateTest.java
@@ -14,10 +14,12 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.util.template;
+package org.apache.wicket.core.util.template;
 
 import java.util.Map;
 
+import org.apache.wicket.util.template.CssTemplate;
+import org.apache.wicket.util.template.TextTemplate;
 import org.junit.jupiter.api.Test;
 
 
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/BlockedResourceLinkPage.html b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/BlockedResourceLinkPage.html
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/BlockedResourceLinkPage.html
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/BlockedResourceLinkPage.html
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/BlockedResourceLinkPage.java b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/BlockedResourceLinkPage.java
similarity index 96%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/BlockedResourceLinkPage.java
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/BlockedResourceLinkPage.java
index aa12d73..ed80c61 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/tester/BlockedResourceLinkPage.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/BlockedResourceLinkPage.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.util.tester;
+package org.apache.wicket.core.util.tester;
 
 import org.apache.wicket.markup.html.WebPage;
 import org.apache.wicket.markup.html.link.ResourceLink;
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/CookiePage.java b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/CookiePage.java
similarity index 94%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/CookiePage.java
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/CookiePage.java
index 574c3fa..abf6e6e 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/tester/CookiePage.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/CookiePage.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.util.tester;
+package org.apache.wicket.core.util.tester;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
@@ -22,6 +22,7 @@ import jakarta.servlet.http.Cookie;
 
 import org.apache.wicket.request.http.WebRequest;
 import org.apache.wicket.request.http.WebResponse;
+import org.apache.wicket.util.tester.DummyHomePage;
 
 /**
  * A test page for https://issues.apache.org/jira/browse/WICKET-4289
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/FormTesterSubmitLinkTest$TestPage.html b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/FormTesterSubmitLinkTest$TestPage.html
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/FormTesterSubmitLinkTest$TestPage.html
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/FormTesterSubmitLinkTest$TestPage.html
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/FormTesterSubmitLinkTest.java b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/FormTesterSubmitLinkTest.java
similarity index 95%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/FormTesterSubmitLinkTest.java
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/FormTesterSubmitLinkTest.java
index 654fce2..029d03a 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/tester/FormTesterSubmitLinkTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/FormTesterSubmitLinkTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.util.tester;
+package org.apache.wicket.core.util.tester;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -33,6 +33,9 @@ import org.apache.wicket.model.Model;
 import org.apache.wicket.model.PropertyModel;
 import org.apache.wicket.util.resource.IResourceStream;
 import org.apache.wicket.util.resource.StringResourceStream;
+import org.apache.wicket.util.tester.FormTester;
+import org.apache.wicket.util.tester.WicketTestCase;
+import org.apache.wicket.util.tester.WicketTester;
 import org.junit.jupiter.api.Test;
 
 /**
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/FormTesterTest.java b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/FormTesterTest.java
similarity index 94%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/FormTesterTest.java
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/FormTesterTest.java
index b53011a..6b29bd3 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/tester/FormTesterTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/FormTesterTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.util.tester;
+package org.apache.wicket.core.util.tester;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
@@ -42,9 +42,9 @@ import org.apache.wicket.request.mapper.parameter.PageParameters;
 import org.apache.wicket.util.file.File;
 import org.apache.wicket.util.resource.IResourceStream;
 import org.apache.wicket.util.resource.StringResourceStream;
-import org.apache.wicket.util.tester.MockFormFileUploadPage.MockDomainObjectFileUpload;
-import org.apache.wicket.util.tester.MockFormPage.MockDomainObject;
 import org.junit.jupiter.api.Disabled;
+import org.apache.wicket.util.tester.FormTester;
+import org.apache.wicket.util.tester.WicketTestCase;
 import org.junit.jupiter.api.Test;
 
 /**
@@ -65,7 +65,7 @@ class FormTesterTest extends WicketTestCase
 	{
 		tester.startPage(MockFormPage.class);
 		MockFormPage page = (MockFormPage)tester.getLastRenderedPage();
-		MockDomainObject domainObject = page.getDomainObject();
+		MockFormPage.MockDomainObject domainObject = page.getDomainObject();
 
 		assertNotNull(domainObject);
 		assertNull(domainObject.getText());
@@ -90,7 +90,7 @@ class FormTesterTest extends WicketTestCase
 	{
 		tester.startPage(MockFormPage.class);
 		MockFormPage page = (MockFormPage)tester.getLastRenderedPage();
-		MockDomainObject domainObject = page.getDomainObject();
+		MockFormPage.MockDomainObject domainObject = page.getDomainObject();
 		assertFalse(domainObject.isCheckbox());
 
 		FormTester formTester = tester.newFormTester("form");
@@ -115,7 +115,7 @@ class FormTesterTest extends WicketTestCase
 	{
 		tester.startPage(MockFormFileUploadPage.class);
 		MockFormFileUploadPage page = (MockFormFileUploadPage)tester.getLastRenderedPage();
-		MockDomainObjectFileUpload domainObject = page.getDomainObject();
+		MockFormFileUploadPage.MockDomainObjectFileUpload domainObject = page.getDomainObject();
 
 		assertNull(page.getFileUpload());
 		assertNotNull(domainObject);
@@ -150,7 +150,7 @@ class FormTesterTest extends WicketTestCase
 	{
 		tester.startPage(MockFormFileUploadPage.class);
 		MockFormFileUploadPage page = (MockFormFileUploadPage)tester.getLastRenderedPage();
-		MockDomainObjectFileUpload domainObject = page.getDomainObject();
+		MockFormFileUploadPage.MockDomainObjectFileUpload domainObject = page.getDomainObject();
 
 		assertNull(page.getFileUpload());
 		assertNotNull(domainObject);
@@ -159,7 +159,7 @@ class FormTesterTest extends WicketTestCase
 
 		FormTester formTester = tester.newFormTester("form");
 		formTester.setFile("file",
-			new File(getBasedir() + "src/test/java/org/apache/wicket/util/tester/bg.jpg"),
+			new File(getBasedir() + "src/test/java/org/apache/wicket/core/util/tester/bg.jpg"),
 			"image/jpeg");
 		formTester.setValue("text", "Mock value");
 		formTester.submit();
@@ -209,7 +209,7 @@ class FormTesterTest extends WicketTestCase
 	{
 		tester.startPage(MockFormFileUploadPage.class, new PageParameters().set("required", false));
 		MockFormFileUploadPage page = (MockFormFileUploadPage)tester.getLastRenderedPage();
-		MockDomainObjectFileUpload domainObject = page.getDomainObject();
+		MockFormFileUploadPage.MockDomainObjectFileUpload domainObject = page.getDomainObject();
 
 		Session.get().setLocale(Locale.US);
 
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/MockAjaxFormPage.html b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/MockAjaxFormPage.html
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/MockAjaxFormPage.html
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/MockAjaxFormPage.html
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/MockAjaxFormPage.java b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/MockAjaxFormPage.java
similarity index 98%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/MockAjaxFormPage.java
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/MockAjaxFormPage.java
index eeaf101..a290ccc 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/tester/MockAjaxFormPage.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/MockAjaxFormPage.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.util.tester;
+package org.apache.wicket.core.util.tester;
 
 import java.io.Serializable;
 
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/MockFormFileUploadPage.html b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/MockFormFileUploadPage.html
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/MockFormFileUploadPage.html
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/MockFormFileUploadPage.html
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/MockFormFileUploadPage.java b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/MockFormFileUploadPage.java
similarity index 98%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/MockFormFileUploadPage.java
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/MockFormFileUploadPage.java
index ec5cf1e..4b34d76 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/tester/MockFormFileUploadPage.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/MockFormFileUploadPage.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.util.tester;
+package org.apache.wicket.core.util.tester;
 
 import java.io.Serializable;
 
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/MockFormPage.html b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/MockFormPage.html
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/MockFormPage.html
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/MockFormPage.html
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/MockFormPage.java b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/MockFormPage.java
similarity index 98%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/MockFormPage.java
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/MockFormPage.java
index c8c4689..f115a54 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/tester/MockFormPage.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/MockFormPage.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.util.tester;
+package org.apache.wicket.core.util.tester;
 
 import java.io.Serializable;
 
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/MockFormSubmitsPage.html b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/MockFormSubmitsPage.html
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/MockFormSubmitsPage.html
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/MockFormSubmitsPage.html
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/MockFormSubmitsPage.java b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/MockFormSubmitsPage.java
similarity index 98%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/MockFormSubmitsPage.java
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/MockFormSubmitsPage.java
index 05b2040..3c7674c 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/tester/MockFormSubmitsPage.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/MockFormSubmitsPage.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.util.tester;
+package org.apache.wicket.core.util.tester;
 
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.markup.html.form.AjaxButton;
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/MockPageAjaxSubmitLinkSubmitsWholeForm.html b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/MockPageAjaxSubmitLinkSubmitsWholeForm.html
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/MockPageAjaxSubmitLinkSubmitsWholeForm.html
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/MockPageAjaxSubmitLinkSubmitsWholeForm.html
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/MockPageAjaxSubmitLinkSubmitsWholeForm.java b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/MockPageAjaxSubmitLinkSubmitsWholeForm.java
similarity index 98%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/MockPageAjaxSubmitLinkSubmitsWholeForm.java
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/MockPageAjaxSubmitLinkSubmitsWholeForm.java
index 86b487a..349506d 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/tester/MockPageAjaxSubmitLinkSubmitsWholeForm.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/MockPageAjaxSubmitLinkSubmitsWholeForm.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.util.tester;
+package org.apache.wicket.core.util.tester;
 
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.markup.html.form.AjaxSubmitLink;
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/MockPageParameterPage$MockInnerClassPage.html b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/MockPageParameterPage$MockInnerClassPage.html
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/MockPageParameterPage$MockInnerClassPage.html
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/MockPageParameterPage$MockInnerClassPage.html
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/MockPageParameterPage.html b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/MockPageParameterPage.html
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/MockPageParameterPage.html
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/MockPageParameterPage.html
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/MockPageParameterPage.java b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/MockPageParameterPage.java
similarity index 97%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/MockPageParameterPage.java
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/MockPageParameterPage.java
index 3bac594..19a0465 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/tester/MockPageParameterPage.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/MockPageParameterPage.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.util.tester;
+package org.apache.wicket.core.util.tester;
 
 import org.apache.wicket.markup.html.WebPage;
 import org.apache.wicket.markup.html.basic.Label;
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/MockPageWithFormAndAjaxFormSubmitBehavior.html b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/MockPageWithFormAndAjaxFormSubmitBehavior.html
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/MockPageWithFormAndAjaxFormSubmitBehavior.html
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/MockPageWithFormAndAjaxFormSubmitBehavior.html
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/MockPageWithFormAndAjaxFormSubmitBehavior.java b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/MockPageWithFormAndAjaxFormSubmitBehavior.java
similarity index 98%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/MockPageWithFormAndAjaxFormSubmitBehavior.java
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/MockPageWithFormAndAjaxFormSubmitBehavior.java
index cf4f07d..e6fc39b 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/tester/MockPageWithFormAndAjaxFormSubmitBehavior.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/MockPageWithFormAndAjaxFormSubmitBehavior.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.util.tester;
+package org.apache.wicket.core.util.tester;
 
 import java.io.Serializable;
 
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/MockPageWithFormAndCheckGroup.html b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/MockPageWithFormAndCheckGroup.html
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/MockPageWithFormAndCheckGroup.html
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/MockPageWithFormAndCheckGroup.html
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/MockPageWithFormAndCheckGroup.java b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/MockPageWithFormAndCheckGroup.java
similarity index 98%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/MockPageWithFormAndCheckGroup.java
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/MockPageWithFormAndCheckGroup.java
index 156bb7b..ca20d1f 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/tester/MockPageWithFormAndCheckGroup.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/MockPageWithFormAndCheckGroup.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.util.tester;
+package org.apache.wicket.core.util.tester;
 
 import java.util.ArrayList;
 import java.util.Collection;
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/MockPageWithLabelInEnclosure.html b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/MockPageWithLabelInEnclosure.html
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/MockPageWithLabelInEnclosure.html
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/MockPageWithLabelInEnclosure.html
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/MockPageWithLabelInEnclosure.java b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/MockPageWithLabelInEnclosure.java
similarity index 97%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/MockPageWithLabelInEnclosure.java
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/MockPageWithLabelInEnclosure.java
index 0c1d146..dfdbe05 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/tester/MockPageWithLabelInEnclosure.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/MockPageWithLabelInEnclosure.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.util.tester;
+package org.apache.wicket.core.util.tester;
 
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.markup.html.AjaxLink;
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/MockPageWithLinkAndLabel.html b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/MockPageWithLinkAndLabel.html
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/MockPageWithLinkAndLabel.html
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/MockPageWithLinkAndLabel.html
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/MockPageWithLinkAndLabel.java b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/MockPageWithLinkAndLabel.java
similarity index 93%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/MockPageWithLinkAndLabel.java
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/MockPageWithLinkAndLabel.java
index b55a572..85ff8ec 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/tester/MockPageWithLinkAndLabel.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/MockPageWithLinkAndLabel.java
@@ -1,44 +1,44 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.wicket.util.tester;
-
-import org.apache.wicket.markup.html.WebPage;
-
-/**
- * Mock page containing a link with a label inside
- */
-public class MockPageWithLinkAndLabel extends WebPage
-{
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 * Link wicket id
-	 */
-	public static final String LINK_ID = "link";
-
-	/**
-	 * Label wicket id
-	 */
-	public static final String LABEL_ID = "label";
-
-	/**
-	 * Label component path
-	 */
-	public static final String LABEL_PATH = "link:label";
-
-
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.core.util.tester;
+
+import org.apache.wicket.markup.html.WebPage;
+
+/**
+ * Mock page containing a link with a label inside
+ */
+public class MockPageWithLinkAndLabel extends WebPage
+{
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * Link wicket id
+	 */
+	public static final String LINK_ID = "link";
+
+	/**
+	 * Label wicket id
+	 */
+	public static final String LABEL_ID = "label";
+
+	/**
+	 * Label component path
+	 */
+	public static final String LABEL_PATH = "link:label";
+
+
+}
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/MockResourceLinkPage.html b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/MockResourceLinkPage.html
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/MockResourceLinkPage.html
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/MockResourceLinkPage.html
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/MockResourceLinkPage.java b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/MockResourceLinkPage.java
similarity index 96%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/MockResourceLinkPage.java
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/MockResourceLinkPage.java
index 801066c..b4c390e 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/tester/MockResourceLinkPage.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/MockResourceLinkPage.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.util.tester;
+package org.apache.wicket.core.util.tester;
 
 import org.apache.wicket.markup.html.WebPage;
 import org.apache.wicket.markup.html.link.ResourceLink;
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/NestedFormPage.html b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/NestedFormPage.html
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/NestedFormPage.html
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/NestedFormPage.html
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/NestedFormPage.java b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/NestedFormPage.java
similarity index 97%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/NestedFormPage.java
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/NestedFormPage.java
index 62b5037..bfca849 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/tester/NestedFormPage.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/NestedFormPage.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.util.tester;
+package org.apache.wicket.core.util.tester;
 
 import org.apache.wicket.markup.html.WebPage;
 import org.apache.wicket.markup.html.form.Button;
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/StartComponentInPageRedirectToRenderTest.java b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/StartComponentInPageRedirectToRenderTest.java
similarity index 94%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/StartComponentInPageRedirectToRenderTest.java
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/StartComponentInPageRedirectToRenderTest.java
index 5fc8db2..4ac8b9e 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/tester/StartComponentInPageRedirectToRenderTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/StartComponentInPageRedirectToRenderTest.java
@@ -14,13 +14,14 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.util.tester;
+package org.apache.wicket.core.util.tester;
 
 
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.mock.MockApplication;
 import org.apache.wicket.protocol.http.WebApplication;
 import org.apache.wicket.settings.RequestCycleSettings;
+import org.apache.wicket.util.tester.WicketTestCase;
 import org.junit.jupiter.api.Test;
 
 /**
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/TagTesterTest.java b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/TagTesterTest.java
similarity index 99%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/TagTesterTest.java
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/TagTesterTest.java
index 1f040f1..7ae7844 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/tester/TagTesterTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/TagTesterTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.util.tester;
+package org.apache.wicket.core.util.tester;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -26,6 +26,7 @@ import static org.junit.jupiter.api.Assertions.fail;
 
 import java.util.List;
 
+import org.apache.wicket.util.tester.TagTester;
 import org.junit.jupiter.api.Test;
 
 /**
@@ -466,4 +467,4 @@ class TagTesterTest
         assertEquals("hr2", tags.get(1).getAttribute("id"));
         assertEquals("<hr wicket:id=\"hr\" id=\"hr2\"/>", tags.get(1).getMarkup());
     }	
-}
\ No newline at end of file
+}
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/WicketTesterClickExternalLinkTest.java b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/WicketTesterClickExternalLinkTest.java
similarity index 93%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/WicketTesterClickExternalLinkTest.java
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/WicketTesterClickExternalLinkTest.java
index 5789165..66b249e 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/tester/WicketTesterClickExternalLinkTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/WicketTesterClickExternalLinkTest.java
@@ -14,10 +14,11 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.util.tester;
+package org.apache.wicket.core.util.tester;
 
 import org.apache.wicket.MockPageWithLink;
 import org.apache.wicket.markup.html.link.ExternalLink;
+import org.apache.wicket.util.tester.WicketTestCase;
 import org.junit.jupiter.api.Test;
 
 /**
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/WicketTesterCookieTest.java b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/WicketTesterCookieTest.java
similarity index 97%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/WicketTesterCookieTest.java
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/WicketTesterCookieTest.java
index 5e163a6..4b80762 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/tester/WicketTesterCookieTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/WicketTesterCookieTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.util.tester;
+package org.apache.wicket.core.util.tester;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
@@ -29,11 +29,13 @@ import java.util.List;
 import java.util.Map;
 import jakarta.servlet.http.Cookie;
 
+import org.apache.wicket.core.util.tester.apps_1.CreateBook;
+import org.apache.wicket.core.util.tester.cookies.CollectAllRequestCookiesPage;
+import org.apache.wicket.core.util.tester.cookies.EndPage;
+import org.apache.wicket.core.util.tester.cookies.SetCookiePage;
 import org.apache.wicket.protocol.http.mock.Cookies;
-import org.apache.wicket.util.tester.apps_1.CreateBook;
-import org.apache.wicket.util.tester.cookies.CollectAllRequestCookiesPage;
-import org.apache.wicket.util.tester.cookies.EndPage;
-import org.apache.wicket.util.tester.cookies.SetCookiePage;
+import org.apache.wicket.util.tester.WicketTestCase;
+import org.apache.wicket.util.tester.WicketTester;
 import org.junit.jupiter.api.Test;
 
 /**
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/WicketTesterLazyIsPageStatelessBase.java b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/WicketTesterLazyIsPageStatelessBase.java
similarity index 96%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/WicketTesterLazyIsPageStatelessBase.java
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/WicketTesterLazyIsPageStatelessBase.java
index fb62b82..4a6d253 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/tester/WicketTesterLazyIsPageStatelessBase.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/WicketTesterLazyIsPageStatelessBase.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.util.tester;
+package org.apache.wicket.core.util.tester;
 
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
@@ -29,6 +29,7 @@ import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.util.resource.IResourceStream;
 import org.apache.wicket.util.resource.StringResourceStream;
+import org.apache.wicket.util.tester.WicketTestCase;
 import org.junit.jupiter.api.Test;
 
 /**
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/WicketTesterLazyIsPageStatelessOnePassTest.java b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/WicketTesterLazyIsPageStatelessOnePassTest.java
similarity index 96%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/WicketTesterLazyIsPageStatelessOnePassTest.java
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/WicketTesterLazyIsPageStatelessOnePassTest.java
index 1bfd770..8c9e268 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/tester/WicketTesterLazyIsPageStatelessOnePassTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/WicketTesterLazyIsPageStatelessOnePassTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.util.tester;
+package org.apache.wicket.core.util.tester;
 
 import org.apache.wicket.mock.MockApplication;
 import org.apache.wicket.protocol.http.WebApplication;
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/WicketTesterLazyIsPageStatelessRedirectToBufferTest.java b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/WicketTesterLazyIsPageStatelessRedirectToBufferTest.java
similarity index 97%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/WicketTesterLazyIsPageStatelessRedirectToBufferTest.java
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/WicketTesterLazyIsPageStatelessRedirectToBufferTest.java
index c7f3c48..fbdf84c 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/tester/WicketTesterLazyIsPageStatelessRedirectToBufferTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/WicketTesterLazyIsPageStatelessRedirectToBufferTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.util.tester;
+package org.apache.wicket.core.util.tester;
 
 import org.apache.wicket.MarkupContainer;
 import org.apache.wicket.markup.IMarkupResourceStreamProvider;
@@ -25,6 +25,7 @@ import org.apache.wicket.protocol.http.WebApplication;
 import org.apache.wicket.settings.RequestCycleSettings;
 import org.apache.wicket.util.resource.IResourceStream;
 import org.apache.wicket.util.resource.StringResourceStream;
+import org.apache.wicket.util.tester.FormTester;
 import org.junit.jupiter.api.Test;
 
 /**
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/WicketTesterLazyIsPageStatelessRedirectToRenderTest.java b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/WicketTesterLazyIsPageStatelessRedirectToRenderTest.java
similarity index 96%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/WicketTesterLazyIsPageStatelessRedirectToRenderTest.java
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/WicketTesterLazyIsPageStatelessRedirectToRenderTest.java
index 5cec01a..3fc94fa 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/tester/WicketTesterLazyIsPageStatelessRedirectToRenderTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/WicketTesterLazyIsPageStatelessRedirectToRenderTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.util.tester;
+package org.apache.wicket.core.util.tester;
 
 import org.apache.wicket.mock.MockApplication;
 import org.apache.wicket.protocol.http.WebApplication;
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/WicketTesterSessionCreationTest.java b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/WicketTesterSessionCreationTest.java
similarity index 91%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/WicketTesterSessionCreationTest.java
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/WicketTesterSessionCreationTest.java
index efda451..800589d 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/tester/WicketTesterSessionCreationTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/WicketTesterSessionCreationTest.java
@@ -14,12 +14,14 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.util.tester;
+package org.apache.wicket.core.util.tester;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
 import java.util.Locale;
 
+import org.apache.wicket.util.tester.DummyHomePage;
+import org.apache.wicket.util.tester.WicketTestCase;
 import org.junit.jupiter.api.Test;
 
 /**
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/WicketTesterSessionInvalidateTest.java b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/WicketTesterSessionInvalidateTest.java
similarity index 96%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/WicketTesterSessionInvalidateTest.java
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/WicketTesterSessionInvalidateTest.java
index ce207f4..09b7815 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/tester/WicketTesterSessionInvalidateTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/WicketTesterSessionInvalidateTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.util.tester;
+package org.apache.wicket.core.util.tester;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNull;
@@ -26,6 +26,7 @@ import org.apache.wicket.markup.html.link.Link;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 import org.apache.wicket.util.resource.IResourceStream;
 import org.apache.wicket.util.resource.StringResourceStream;
+import org.apache.wicket.util.tester.WicketTestCase;
 import org.junit.jupiter.api.Test;
 
 /**
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/WicketTesterTest.java b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/WicketTesterTest.java
similarity index 97%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/WicketTesterTest.java
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/WicketTesterTest.java
index 0a6631a..e00ad3f 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/tester/WicketTesterTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/WicketTesterTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.util.tester;
+package org.apache.wicket.core.util.tester;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
@@ -44,6 +44,14 @@ import org.apache.wicket.authorization.IAuthorizationStrategy;
 import org.apache.wicket.core.request.handler.BookmarkablePageRequestHandler;
 import org.apache.wicket.core.request.handler.IPageProvider;
 import org.apache.wicket.core.request.handler.PageProvider;
+import org.apache.wicket.core.util.tester.apps_1.Book;
+import org.apache.wicket.core.util.tester.apps_1.CreateBook;
+import org.apache.wicket.core.util.tester.apps_1.MyMockApplication;
+import org.apache.wicket.core.util.tester.apps_1.SuccessPage;
+import org.apache.wicket.core.util.tester.apps_1.ViewBook;
+import org.apache.wicket.core.util.tester.apps_6.LinkPage;
+import org.apache.wicket.core.util.tester.apps_6.ResultPage;
+import org.apache.wicket.core.util.tester.apps_8.ComponentFeedbackResourceTestingPage;
 import org.apache.wicket.feedback.ExactLevelFeedbackMessageFilter;
 import org.apache.wicket.feedback.FeedbackMessage;
 import org.apache.wicket.markup.ComponentTag;
@@ -70,17 +78,12 @@ import org.apache.wicket.request.resource.ResourceReference;
 import org.apache.wicket.resource.DummyPage;
 import org.apache.wicket.session.HttpSessionStore;
 import org.apache.wicket.util.string.StringValue;
+import org.apache.wicket.util.tester.DummyHomePage;
 import org.apache.wicket.util.tester.DummyHomePage.TestLink;
-import org.apache.wicket.util.tester.MockPageParameterPage.MockInnerClassPage;
-import org.apache.wicket.util.tester.MockPageWithFormAndAjaxFormSubmitBehavior.Pojo;
-import org.apache.wicket.util.tester.apps_1.Book;
-import org.apache.wicket.util.tester.apps_1.CreateBook;
-import org.apache.wicket.util.tester.apps_1.MyMockApplication;
-import org.apache.wicket.util.tester.apps_1.SuccessPage;
-import org.apache.wicket.util.tester.apps_1.ViewBook;
-import org.apache.wicket.util.tester.apps_6.LinkPage;
-import org.apache.wicket.util.tester.apps_6.ResultPage;
-import org.apache.wicket.util.tester.apps_8.ComponentFeedbackResourceTestingPage;
+import org.apache.wicket.util.tester.FormTester;
+import org.apache.wicket.core.util.tester.MockPageWithFormAndAjaxFormSubmitBehavior.Pojo;
+import org.apache.wicket.util.tester.Result;
+import org.apache.wicket.util.tester.WicketTestCase;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
@@ -452,10 +455,10 @@ class WicketTesterTest extends WicketTestCase
 	@Test
 	void constructorAndInnerPage() throws Exception
 	{
-		tester.startPage(new MockInnerClassPage());
+		tester.startPage(new MockPageParameterPage.MockInnerClassPage());
 
 		// assertion
-		tester.assertRenderedPage(MockInnerClassPage.class);
+		tester.assertRenderedPage(MockPageParameterPage.MockInnerClassPage.class);
 		tester.assertComponent("title", Label.class);
 		tester.assertContains("Hello world!");
 	}
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_1/Book.java b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_1/Book.java
similarity index 96%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/apps_1/Book.java
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_1/Book.java
index 4121ece..a1ade72 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_1/Book.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_1/Book.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.util.tester.apps_1;
+package org.apache.wicket.core.util.tester.apps_1;
 
 import java.io.Serializable;
 
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_1/CreateBook.html b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_1/CreateBook.html
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/apps_1/CreateBook.html
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_1/CreateBook.html
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_1/CreateBook.java b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_1/CreateBook.java
similarity index 97%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/apps_1/CreateBook.java
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_1/CreateBook.java
index ed52918..2a8fda1 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_1/CreateBook.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_1/CreateBook.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.util.tester.apps_1;
+package org.apache.wicket.core.util.tester.apps_1;
 
 import org.apache.wicket.Page;
 import org.apache.wicket.markup.html.WebPage;
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_1/CreateBook.properties b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_1/CreateBook.properties
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/apps_1/CreateBook.properties
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_1/CreateBook.properties
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_1/MyMockApplication.java b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_1/MyMockApplication.java
similarity index 94%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/apps_1/MyMockApplication.java
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_1/MyMockApplication.java
index e094a7b..53777a8 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_1/MyMockApplication.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_1/MyMockApplication.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.util.tester.apps_1;
+package org.apache.wicket.core.util.tester.apps_1;
 
 import org.apache.wicket.mock.MockApplication;
 
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_1/MyMockApplication.properties b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_1/MyMockApplication.properties
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/apps_1/MyMockApplication.properties
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_1/MyMockApplication.properties
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_1/MyMockApplication_de.properties b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_1/MyMockApplication_de.properties
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/apps_1/MyMockApplication_de.properties
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_1/MyMockApplication_de.properties
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_1/MyMockApplication_nl.properties b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_1/MyMockApplication_nl.properties
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/apps_1/MyMockApplication_nl.properties
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_1/MyMockApplication_nl.properties
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_1/SuccessPage.html b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_1/SuccessPage.html
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/apps_1/SuccessPage.html
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_1/SuccessPage.html
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_1/SuccessPage.java b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_1/SuccessPage.java
similarity index 95%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/apps_1/SuccessPage.java
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_1/SuccessPage.java
index 145727c..99a0382 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_1/SuccessPage.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_1/SuccessPage.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.util.tester.apps_1;
+package org.apache.wicket.core.util.tester.apps_1;
 
 import org.apache.wicket.markup.html.WebPage;
 
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_1/ViewBook.html b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_1/ViewBook.html
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/apps_1/ViewBook.html
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_1/ViewBook.html
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_1/ViewBook.java b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_1/ViewBook.java
similarity index 96%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/apps_1/ViewBook.java
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_1/ViewBook.java
index ccd13bf..1c7d338 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_1/ViewBook.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_1/ViewBook.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.util.tester.apps_1;
+package org.apache.wicket.core.util.tester.apps_1;
 
 import org.apache.wicket.markup.html.WebPage;
 import org.apache.wicket.markup.html.basic.Label;
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_2/LoginPage.html b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_2/LoginPage.html
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/apps_2/LoginPage.html
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_2/LoginPage.html
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_2/LoginPage.java b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_2/LoginPage.java
similarity index 95%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/apps_2/LoginPage.java
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_2/LoginPage.java
index 3e7d86a..5951d90 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_2/LoginPage.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_2/LoginPage.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.util.tester.apps_2;
+package org.apache.wicket.core.util.tester.apps_2;
 
 import org.apache.wicket.markup.html.WebPage;
 
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_2/RedirectPage.html b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_2/RedirectPage.html
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/apps_2/RedirectPage.html
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_2/RedirectPage.html
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_2/RedirectPage.java b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_2/RedirectPage.java
similarity index 95%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/apps_2/RedirectPage.java
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_2/RedirectPage.java
index cbb7a28..959eb30 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_2/RedirectPage.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_2/RedirectPage.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.util.tester.apps_2;
+package org.apache.wicket.core.util.tester.apps_2;
 
 import org.apache.wicket.markup.html.WebPage;
 
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_2/Test.java b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_2/Test.java
similarity index 96%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/apps_2/Test.java
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_2/Test.java
index fc9a5b0..c04e9aa 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_2/Test.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_2/Test.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.util.tester.apps_2;
+package org.apache.wicket.core.util.tester.apps_2;
 
 import org.apache.wicket.authorization.IAuthorizationStrategy;
 import org.apache.wicket.authorization.strategies.page.SimplePageAuthorizationStrategy;
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_3/ChoicePage.html b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_3/ChoicePage.html
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/apps_3/ChoicePage.html
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_3/ChoicePage.html
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_3/ChoicePage.java b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_3/ChoicePage.java
similarity index 98%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/apps_3/ChoicePage.java
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_3/ChoicePage.java
index ac41e38..dad21a2 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_3/ChoicePage.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_3/ChoicePage.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.util.tester.apps_3;
+package org.apache.wicket.core.util.tester.apps_3;
 
 import java.io.Serializable;
 import java.util.ArrayList;
@@ -39,7 +39,7 @@ import org.apache.wicket.markup.html.list.ListItem;
 import org.apache.wicket.markup.html.list.ListView;
 import org.apache.wicket.model.CompoundPropertyModel;
 import org.apache.wicket.model.Model;
-import org.apache.wicket.util.tester.apps_1.Book;
+import org.apache.wicket.core.util.tester.apps_1.Book;
 
 
 /**
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_3/FormTesterTest.java b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_3/FormTesterTest.java
similarity index 98%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/apps_3/FormTesterTest.java
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_3/FormTesterTest.java
index ff65101..6d62689 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_3/FormTesterTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_3/FormTesterTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.util.tester.apps_3;
+package org.apache.wicket.core.util.tester.apps_3;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
@@ -27,7 +27,7 @@ import java.util.List;
 import org.apache.wicket.WicketRuntimeException;
 import org.apache.wicket.util.tester.FormTester;
 import org.apache.wicket.util.tester.WicketTestCase;
-import org.apache.wicket.util.tester.apps_1.Book;
+import org.apache.wicket.core.util.tester.apps_1.Book;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_4/EmailPage.html b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_4/EmailPage.html
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/apps_4/EmailPage.html
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_4/EmailPage.html
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_4/EmailPage.java b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_4/EmailPage.java
similarity index 97%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/apps_4/EmailPage.java
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_4/EmailPage.java
index b71f152..b0ca9a1 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_4/EmailPage.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_4/EmailPage.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.util.tester.apps_4;
+package org.apache.wicket.core.util.tester.apps_4;
 
 import org.apache.wicket.markup.html.WebPage;
 import org.apache.wicket.markup.html.form.Form;
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_4/EmailPage.properties b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_4/EmailPage.properties
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/apps_4/EmailPage.properties
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_4/EmailPage.properties
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_4/FormTesterTest.java b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_4/FormTesterTest.java
similarity index 97%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/apps_4/FormTesterTest.java
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_4/FormTesterTest.java
index 8a4b12e..b564504 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_4/FormTesterTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_4/FormTesterTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.util.tester.apps_4;
+package org.apache.wicket.core.util.tester.apps_4;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNull;
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_5/AjaxLinkClickTest.java b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_5/AjaxLinkClickTest.java
similarity index 98%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/apps_5/AjaxLinkClickTest.java
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_5/AjaxLinkClickTest.java
index cf9a8e5..650b8bb 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_5/AjaxLinkClickTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_5/AjaxLinkClickTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.util.tester.apps_5;
+package org.apache.wicket.core.util.tester.apps_5;
 
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertNull;
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_5/AjaxSubmitLinkClickTest.java b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_5/AjaxSubmitLinkClickTest.java
similarity index 93%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/apps_5/AjaxSubmitLinkClickTest.java
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_5/AjaxSubmitLinkClickTest.java
index d482026..5a940e5 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_5/AjaxSubmitLinkClickTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_5/AjaxSubmitLinkClickTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.util.tester.apps_5;
+package org.apache.wicket.core.util.tester.apps_5;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -22,7 +22,6 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.markup.html.form.AjaxSubmitLink;
 import org.apache.wicket.util.tester.WicketTestCase;
-import org.apache.wicket.util.tester.apps_5.MockPageWithFormAndLink.MockPojo;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
@@ -50,7 +49,7 @@ class AjaxSubmitLinkClickTest extends WicketTestCase
 	@Test
 	void testClickLinkInsideForm_ajaxSubmitLink()
 	{
-		MockPojo mockPojo = new MockPageWithFormAndLink.MockPojo();
+		MockPageWithFormAndLink.MockPojo mockPojo = new MockPageWithFormAndLink.MockPojo();
 		mockPojo.setName("Mock name");
 
 		final MockPageWithFormAndContainedLink page = new MockPageWithFormAndContainedLink(mockPojo);
@@ -95,7 +94,7 @@ class AjaxSubmitLinkClickTest extends WicketTestCase
 	@Test
 	void testClickLink_ajaxSubmitLink()
 	{
-		MockPojo mockPojo = new MockPageWithFormAndLink.MockPojo();
+		MockPageWithFormAndLink.MockPojo mockPojo = new MockPageWithFormAndLink.MockPojo();
 		mockPojo.setName("Mock name");
 
 		final MockPageWithFormAndLink page = new MockPageWithFormAndLink(mockPojo);
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_5/MockPageWithFormAndContainedLink.html b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_5/MockPageWithFormAndContainedLink.html
similarity index 95%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/apps_5/MockPageWithFormAndContainedLink.html
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_5/MockPageWithFormAndContainedLink.html
index 6f55bc8..61b9b59 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_5/MockPageWithFormAndContainedLink.html
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_5/MockPageWithFormAndContainedLink.html
@@ -1,14 +1,14 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<title>Insert title here</title>
-</head>
-<body>
-<form wicket:id="form">
-<input type="text" wicket:id="name" />
-<a href="#" wicket:id="link">Link</a>
-</form>
-</body>
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<title>Insert title here</title>
+</head>
+<body>
+<form wicket:id="form">
+<input type="text" wicket:id="name" />
+<a href="#" wicket:id="link">Link</a>
+</form>
+</body>
 </html>
\ No newline at end of file
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_5/MockPageWithFormAndContainedLink.java b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_5/MockPageWithFormAndContainedLink.java
similarity index 93%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/apps_5/MockPageWithFormAndContainedLink.java
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_5/MockPageWithFormAndContainedLink.java
index 049750e..686feaa 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_5/MockPageWithFormAndContainedLink.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_5/MockPageWithFormAndContainedLink.java
@@ -1,50 +1,50 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.wicket.util.tester.apps_5;
-
-import org.apache.wicket.markup.html.link.AbstractLink;
-
-/**
- * Contains a form with a textfield on it and a link inside the form. Use the
- * {@link #addLink(AbstractLink)} method to add a link to the form.
- * 
- * @author Gerolf Seitz
- */
-public class MockPageWithFormAndContainedLink extends MockPageWithFormAndLink
-{
-
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 * Construct.
-	 * 
-	 * @param mockPojo
-	 */
-	public MockPageWithFormAndContainedLink(MockPojo mockPojo)
-	{
-		super(mockPojo);
-	}
-
-	/**
-	 * @param link
-	 */
-	public void addLink(AbstractLink link)
-	{
-		getForm().add(link);
-	}
-
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.core.util.tester.apps_5;
+
+import org.apache.wicket.markup.html.link.AbstractLink;
+
+/**
+ * Contains a form with a textfield on it and a link inside the form. Use the
+ * {@link #addLink(AbstractLink)} method to add a link to the form.
+ * 
+ * @author Gerolf Seitz
+ */
+public class MockPageWithFormAndContainedLink extends MockPageWithFormAndLink
+{
+
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * Construct.
+	 * 
+	 * @param mockPojo
+	 */
+	public MockPageWithFormAndContainedLink(MockPojo mockPojo)
+	{
+		super(mockPojo);
+	}
+
+	/**
+	 * @param link
+	 */
+	public void addLink(AbstractLink link)
+	{
+		getForm().add(link);
+	}
+
+}
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_5/MockPageWithFormAndLink.html b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_5/MockPageWithFormAndLink.html
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/apps_5/MockPageWithFormAndLink.html
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_5/MockPageWithFormAndLink.html
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_5/MockPageWithFormAndLink.java b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_5/MockPageWithFormAndLink.java
similarity index 97%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/apps_5/MockPageWithFormAndLink.java
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_5/MockPageWithFormAndLink.java
index 803d9f0..fe92c85 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_5/MockPageWithFormAndLink.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_5/MockPageWithFormAndLink.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.util.tester.apps_5;
+package org.apache.wicket.core.util.tester.apps_5;
 
 import org.apache.wicket.markup.html.WebPage;
 import org.apache.wicket.markup.html.form.Form;
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_5/MockPageWithLink.html b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_5/MockPageWithLink.html
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/apps_5/MockPageWithLink.html
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_5/MockPageWithLink.html
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_5/MockPageWithLink.java b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_5/MockPageWithLink.java
similarity index 95%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/apps_5/MockPageWithLink.java
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_5/MockPageWithLink.java
index 2e9c30a..5e61d45 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_5/MockPageWithLink.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_5/MockPageWithLink.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.util.tester.apps_5;
+package org.apache.wicket.core.util.tester.apps_5;
 
 import org.apache.wicket.markup.html.WebPage;
 
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_6/LinkPage.html b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_6/LinkPage.html
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/apps_6/LinkPage.html
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_6/LinkPage.html
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_6/LinkPage.java b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_6/LinkPage.java
similarity index 95%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/apps_6/LinkPage.java
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_6/LinkPage.java
index bc9d6de..0fbc278 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_6/LinkPage.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_6/LinkPage.java
@@ -1,133 +1,133 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.wicket.util.tester.apps_6;
-
-import java.util.Optional;
-
-import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.markup.html.AjaxFallbackLink;
-import org.apache.wicket.ajax.markup.html.AjaxLink;
-import org.apache.wicket.ajax.markup.html.form.AjaxSubmitLink;
-import org.apache.wicket.markup.html.WebPage;
-import org.apache.wicket.markup.html.form.Form;
-import org.apache.wicket.markup.html.link.Link;
-import org.apache.wicket.util.tester.WicketTester;
-
-/**
- * Different kinds of links, to be test the {@link WicketTester#clickLink(String, boolean)} method.
- * 
- * Add more links when needed.
- */
-public class LinkPage extends WebPage
-{
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 * Construct.
-	 */
-	public LinkPage()
-	{
-		// Link
-		add(new Link<Void>("linkWithSetResponsePageClass")
-		{
-			private static final long serialVersionUID = 1L;
-
-			@Override
-			public void onClick()
-			{
-				getRequestCycle().setResponsePage(ResultPage.class);
-			}
-		});
-
-		add(new Link<Void>("linkWithSetResponsePage")
-		{
-			private static final long serialVersionUID = 1L;
-
-			@Override
-			public void onClick()
-			{
-				getRequestCycle().setResponsePage(new ResultPage("A special label"));
-			}
-		});
-
-		// AjaxLink
-		add(new AjaxLink<Void>("ajaxLinkWithSetResponsePageClass")
-		{
-			private static final long serialVersionUID = 1L;
-
-			@Override
-			public void onClick(AjaxRequestTarget target)
-			{
-				getRequestCycle().setResponsePage(ResultPage.class);
-			}
-		});
-
-		add(new AjaxLink<Void>("ajaxLinkWithSetResponsePage")
-		{
-			private static final long serialVersionUID = 1L;
-
-			@Override
-			public void onClick(AjaxRequestTarget target)
-			{
-				getRequestCycle().setResponsePage(new ResultPage("A special label"));
-			}
-		});
-
-		// AjaxFallbackLink
-		add(new AjaxFallbackLink<Void>("ajaxFallbackLinkWithSetResponsePageClass")
-		{
-			private static final long serialVersionUID = 1L;
-
-			@Override
-			public void onClick(Optional<AjaxRequestTarget> targetOptional)
-			{
-				getRequestCycle().setResponsePage(ResultPage.class);
-			}
-		});
-
-		add(new AjaxFallbackLink<Void>("ajaxFallbackLinkWithSetResponsePage")
-		{
-			private static final long serialVersionUID = 1L;
-
-			@Override
-			public void onClick(Optional<AjaxRequestTarget> targetOptional)
-			{
-				getRequestCycle().setResponsePage(new ResultPage("A special label"));
-			}
-		});
-
-		// AjaxSubmitLink
-		final Form<Void> form = new Form<Void>("form");
-		add(form);
-		final AjaxSubmitLink submit = new AjaxSubmitLink("submit")
-		{
-			private static final long serialVersionUID = 1L;
-
-			@Override
-			protected void onSubmit(final AjaxRequestTarget target)
-			{
-				getRequestCycle().setResponsePage(new ResultPage("A form label"));
-			}
-
-			@Override
-			protected void onError(AjaxRequestTarget target)
-			{
-			}
-		};
-		form.add(submit);
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.core.util.tester.apps_6;
+
+import java.util.Optional;
+
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.markup.html.AjaxFallbackLink;
+import org.apache.wicket.ajax.markup.html.AjaxLink;
+import org.apache.wicket.ajax.markup.html.form.AjaxSubmitLink;
+import org.apache.wicket.markup.html.WebPage;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.link.Link;
+import org.apache.wicket.util.tester.WicketTester;
+
+/**
+ * Different kinds of links, to be test the {@link WicketTester#clickLink(String, boolean)} method.
+ * 
+ * Add more links when needed.
+ */
+public class LinkPage extends WebPage
+{
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * Construct.
+	 */
+	public LinkPage()
+	{
+		// Link
+		add(new Link<Void>("linkWithSetResponsePageClass")
+		{
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			public void onClick()
+			{
+				getRequestCycle().setResponsePage(ResultPage.class);
+			}
+		});
+
+		add(new Link<Void>("linkWithSetResponsePage")
+		{
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			public void onClick()
+			{
+				getRequestCycle().setResponsePage(new ResultPage("A special label"));
+			}
+		});
+
+		// AjaxLink
+		add(new AjaxLink<Void>("ajaxLinkWithSetResponsePageClass")
+		{
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			public void onClick(AjaxRequestTarget target)
+			{
+				getRequestCycle().setResponsePage(ResultPage.class);
+			}
+		});
+
+		add(new AjaxLink<Void>("ajaxLinkWithSetResponsePage")
+		{
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			public void onClick(AjaxRequestTarget target)
+			{
+				getRequestCycle().setResponsePage(new ResultPage("A special label"));
+			}
+		});
+
+		// AjaxFallbackLink
+		add(new AjaxFallbackLink<Void>("ajaxFallbackLinkWithSetResponsePageClass")
+		{
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			public void onClick(Optional<AjaxRequestTarget> targetOptional)
+			{
+				getRequestCycle().setResponsePage(ResultPage.class);
+			}
+		});
+
+		add(new AjaxFallbackLink<Void>("ajaxFallbackLinkWithSetResponsePage")
+		{
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			public void onClick(Optional<AjaxRequestTarget> targetOptional)
+			{
+				getRequestCycle().setResponsePage(new ResultPage("A special label"));
+			}
+		});
+
+		// AjaxSubmitLink
+		final Form<Void> form = new Form<Void>("form");
+		add(form);
+		final AjaxSubmitLink submit = new AjaxSubmitLink("submit")
+		{
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onSubmit(final AjaxRequestTarget target)
+			{
+				getRequestCycle().setResponsePage(new ResultPage("A form label"));
+			}
+
+			@Override
+			protected void onError(AjaxRequestTarget target)
+			{
+			}
+		};
+		form.add(submit);
+	}
+}
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_6/ResultPage.html b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_6/ResultPage.html
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/apps_6/ResultPage.html
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_6/ResultPage.html
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_6/ResultPage.java b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_6/ResultPage.java
similarity index 93%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/apps_6/ResultPage.java
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_6/ResultPage.java
index f52069b..3c3d6a8 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_6/ResultPage.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_6/ResultPage.java
@@ -1,49 +1,49 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.wicket.util.tester.apps_6;
-
-import org.apache.wicket.markup.html.WebPage;
-import org.apache.wicket.markup.html.basic.Label;
-import org.apache.wicket.model.Model;
-
-/**
- * Result page
- */
-public class ResultPage extends WebPage
-{
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 * Construct.
-	 */
-	public ResultPage()
-	{
-		this("No Parameter");
-	}
-
-	/**
-	 * Construct.
-	 * 
-	 * @param label
-	 */
-	public ResultPage(String label)
-	{
-		super(new Model<String>(label));
-
-		add(new Label("label", getDefaultModel()));
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.core.util.tester.apps_6;
+
+import org.apache.wicket.markup.html.WebPage;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.model.Model;
+
+/**
+ * Result page
+ */
+public class ResultPage extends WebPage
+{
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * Construct.
+	 */
+	public ResultPage()
+	{
+		this("No Parameter");
+	}
+
+	/**
+	 * Construct.
+	 * 
+	 * @param label
+	 */
+	public ResultPage(String label)
+	{
+		super(new Model<String>(label));
+
+		add(new Label("label", getDefaultModel()));
+	}
+}
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_7/HomePage.html b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_7/HomePage.html
similarity index 98%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/apps_7/HomePage.html
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_7/HomePage.html
index 6cb2be3..48f52ca 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_7/HomePage.html
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_7/HomePage.html
@@ -5,12 +5,12 @@
     <body>
         <strong>Wicket Quickstart Archetype Homepage</strong>
         <br/><br/>
-        <span wicket:id="message">message will be here</span>
-        
-        <form wicket:id="form">
-        Input field: <input type="text" wicket:id="inputField" />
-        <input type="submit" wicket:id="hiddenButton" value="Submit"/>
-        <input type="submit" wicket:id="ajaxButton" value="Submit"/>
+        <span wicket:id="message">message will be here</span>
+        
+        <form wicket:id="form">
+        Input field: <input type="text" wicket:id="inputField" />
+        <input type="submit" wicket:id="hiddenButton" value="Submit"/>
+        <input type="submit" wicket:id="ajaxButton" value="Submit"/>
         </form>
     </body>
 </html>
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_7/HomePage.java b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_7/HomePage.java
similarity index 97%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/apps_7/HomePage.java
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_7/HomePage.java
index 0a6f6fe..ee9e37f 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_7/HomePage.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_7/HomePage.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.util.tester.apps_7;
+package org.apache.wicket.core.util.tester.apps_7;
 
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.markup.html.form.AjaxButton;
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_7/TestHomePage.java b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_7/TestHomePage.java
similarity index 94%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/apps_7/TestHomePage.java
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_7/TestHomePage.java
index 1246034..da91a05 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_7/TestHomePage.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_7/TestHomePage.java
@@ -1,42 +1,42 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.wicket.util.tester.apps_7;
-
-import org.apache.wicket.util.tester.WicketTestCase;
-import org.junit.jupiter.api.Test;
-
-/**
- * Simple test using the WicketTester
- */
-class TestHomePage extends WicketTestCase
-{
-	/**	 */
-	@Test
-    void testAjaxSubmitWhileAnotherButtonIsNotVisible()
-	{
-		// start and render the test page
-		tester.startPage(HomePage.class);
-		// assert rendered page class
-		tester.assertRenderedPage(HomePage.class);
-		// assert rendered label component
-		tester.assertLabel("message",
-			"If you see this message wicket is properly configured and running");
-
-		// execute ajax
-		tester.executeAjaxEvent("form:ajaxButton", "click");
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.core.util.tester.apps_7;
+
+import org.apache.wicket.util.tester.WicketTestCase;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Simple test using the WicketTester
+ */
+class TestHomePage extends WicketTestCase
+{
+	/**	 */
+	@Test
+    void testAjaxSubmitWhileAnotherButtonIsNotVisible()
+	{
+		// start and render the test page
+		tester.startPage(HomePage.class);
+		// assert rendered page class
+		tester.assertRenderedPage(HomePage.class);
+		// assert rendered label component
+		tester.assertLabel("message",
+			"If you see this message wicket is properly configured and running");
+
+		// execute ajax
+		tester.executeAjaxEvent("form:ajaxButton", "click");
+	}
+}
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_7/WicketApplication.java b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_7/WicketApplication.java
similarity index 96%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/apps_7/WicketApplication.java
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_7/WicketApplication.java
index e5ab674..555b8e4 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_7/WicketApplication.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_7/WicketApplication.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.util.tester.apps_7;
+package org.apache.wicket.core.util.tester.apps_7;
 
 import org.apache.wicket.protocol.http.WebApplication;
 
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_8/ComponentFeedbackResourceTestingPage.html b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_8/ComponentFeedbackResourceTestingPage.html
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/apps_8/ComponentFeedbackResourceTestingPage.html
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_8/ComponentFeedbackResourceTestingPage.html
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_8/ComponentFeedbackResourceTestingPage.java b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_8/ComponentFeedbackResourceTestingPage.java
similarity index 95%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/apps_8/ComponentFeedbackResourceTestingPage.java
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_8/ComponentFeedbackResourceTestingPage.java
index fec8efc..8e5fab0 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_8/ComponentFeedbackResourceTestingPage.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_8/ComponentFeedbackResourceTestingPage.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.util.tester.apps_8;
+package org.apache.wicket.core.util.tester.apps_8;
 
 import org.apache.wicket.markup.html.WebPage;
 
@@ -27,4 +27,4 @@ public class ComponentFeedbackResourceTestingPage extends WebPage
 	{
 		add(new TestResourceProvidingLabel("label"));
 	}
-}
\ No newline at end of file
+}
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_8/TestResourceProvidingLabel.java b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_8/TestResourceProvidingLabel.java
similarity index 96%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/apps_8/TestResourceProvidingLabel.java
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_8/TestResourceProvidingLabel.java
index b3a30ca..ff6c827 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_8/TestResourceProvidingLabel.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_8/TestResourceProvidingLabel.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.util.tester.apps_8;
+package org.apache.wicket.core.util.tester.apps_8;
 
 import org.apache.wicket.markup.html.basic.Label;
 
@@ -38,4 +38,4 @@ class TestResourceProvidingLabel extends Label
 		error(this.getString("error.msg"));
 		info(this.getString("info.msg"));
 	}
-}
\ No newline at end of file
+}
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_8/TestResourceProvidingLabel.properties b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_8/TestResourceProvidingLabel.properties
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/apps_8/TestResourceProvidingLabel.properties
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/apps_8/TestResourceProvidingLabel.properties
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/bg.jpg b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/bg.jpg
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/bg.jpg
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/bg.jpg
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/cookies/CollectAllRequestCookiesPage.java b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/cookies/CollectAllRequestCookiesPage.java
similarity index 96%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/cookies/CollectAllRequestCookiesPage.java
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/cookies/CollectAllRequestCookiesPage.java
index ef74c22..d599569 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/tester/cookies/CollectAllRequestCookiesPage.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/cookies/CollectAllRequestCookiesPage.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.util.tester.cookies;
+package org.apache.wicket.core.util.tester.cookies;
 
 import java.util.List;
 
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/cookies/EndPage.java b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/cookies/EndPage.java
similarity index 94%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/cookies/EndPage.java
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/cookies/EndPage.java
index 4bed69f..4b17864 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/tester/cookies/EndPage.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/cookies/EndPage.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.util.tester.cookies;
+package org.apache.wicket.core.util.tester.cookies;
 
 import org.apache.wicket.util.tester.DummyHomePage;
 
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/cookies/SetCookiePage.java b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/cookies/SetCookiePage.java
similarity index 96%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/cookies/SetCookiePage.java
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/cookies/SetCookiePage.java
index 7dfadb8..0f59798 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/tester/cookies/SetCookiePage.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/cookies/SetCookiePage.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.util.tester.cookies;
+package org.apache.wicket.core.util.tester.cookies;
 
 import jakarta.servlet.http.Cookie;
 
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/test.html b/wicket-core/src/test/java/org/apache/wicket/core/util/tester/test.html
similarity index 100%
rename from wicket-core/src/test/java/org/apache/wicket/util/tester/test.html
rename to wicket-core/src/test/java/org/apache/wicket/core/util/tester/test.html
diff --git a/wicket-core/src/test/java/org/apache/wicket/resource/InvalidResourceSpecificationExceptionTest.java b/wicket-core/src/test/java/org/apache/wicket/resource/InvalidResourceSpecificationExceptionTest.java
index 2e370ca..c8b666e 100644
--- a/wicket-core/src/test/java/org/apache/wicket/resource/InvalidResourceSpecificationExceptionTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/resource/InvalidResourceSpecificationExceptionTest.java
@@ -17,7 +17,7 @@
 package org.apache.wicket.resource;
 
 import org.apache.wicket.WicketRuntimeException;
-import org.apache.wicket.util.ExceptionTestBase;
+import org.apache.wicket.core.util.ExceptionTestBase;
 
 
 /**
diff --git a/wicket-devutils/pom.xml b/wicket-devutils/pom.xml
index ebd2c49..aa29e0f 100644
--- a/wicket-devutils/pom.xml
+++ b/wicket-devutils/pom.xml
@@ -32,10 +32,6 @@
 		turned on for additional production debugging.
 	</description>
 
-	<properties>
-		<automatic-module-name>org.apache.wicket.devutils</automatic-module-name>
-	</properties>
-
 	<dependencies>
 		<dependency>
 			<groupId>org.apache.wicket</groupId>
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/resource/BundlesPage.java b/wicket-devutils/src/main/java/module-info.java
similarity index 56%
copy from wicket-core/src/test/java/org/apache/wicket/request/resource/BundlesPage.java
copy to wicket-devutils/src/main/java/module-info.java
index 74d4084..e9133eb 100644
--- a/wicket-core/src/test/java/org/apache/wicket/request/resource/BundlesPage.java
+++ b/wicket-devutils/src/main/java/module-info.java
@@ -14,30 +14,20 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.request.resource;
 
-import org.apache.wicket.markup.head.IHeaderResponse;
-import org.apache.wicket.markup.head.JavaScriptHeaderItem;
-import org.apache.wicket.markup.html.WebPage;
+module org.apache.wicket.devutils {
+    requires org.apache.wicket.util;
+    requires org.apache.wicket.request;
+    requires org.apache.wicket.core;
+    requires org.apache.wicket.extensions;
+    requires org.slf4j;
 
-/**
- * @author papegaaij
- */
-public class BundlesPage extends WebPage
-{
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 * Construct.
-	 */
-	public BundlesPage()
-	{
-	}
+    provides org.apache.wicket.IInitializer with org.apache.wicket.devutils.debugbar.DebugBarInitializer;
 
-	@Override
-	public void renderHead(IHeaderResponse response)
-	{
-		response.render(JavaScriptHeaderItem.forReference(new JavaScriptResourceReference(
-			ResouceBundleTest.class, "a.js")));
-	}
+    exports org.apache.wicket.devutils;
+    exports org.apache.wicket.devutils.debugbar;
+    exports org.apache.wicket.devutils.inspector;
+    exports org.apache.wicket.devutils.pagestore;
+    exports org.apache.wicket.devutils.pagestore.browser;
+    exports org.apache.wicket.devutils.stateless;
 }
diff --git a/wicket-devutils/src/test/java/org/apache/wicket/util/license/ApacheLicenceHeaderTest.java b/wicket-devutils/src/test/java/org/apache/wicket/devutils/util/license/ApacheLicenceHeaderTest.java
similarity index 91%
rename from wicket-devutils/src/test/java/org/apache/wicket/util/license/ApacheLicenceHeaderTest.java
rename to wicket-devutils/src/test/java/org/apache/wicket/devutils/util/license/ApacheLicenceHeaderTest.java
index 7efc3af..cf8598a 100644
--- a/wicket-devutils/src/test/java/org/apache/wicket/util/license/ApacheLicenceHeaderTest.java
+++ b/wicket-devutils/src/test/java/org/apache/wicket/devutils/util/license/ApacheLicenceHeaderTest.java
@@ -14,7 +14,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.util.license;
+package org.apache.wicket.devutils.util.license;
+
+import org.apache.wicket.util.license.ApacheLicenseHeaderTestCase;
 
 /**
  * Test that the license headers are in place in this project. The tests are run from
diff --git a/wicket-devutils/src/test/java/org/apache/wicket/util/markup/xhtml/WellFormedXmlTest.java b/wicket-devutils/src/test/java/org/apache/wicket/devutils/util/markup/xhtml/WellFormedXmlTest.java
similarity index 89%
rename from wicket-devutils/src/test/java/org/apache/wicket/util/markup/xhtml/WellFormedXmlTest.java
rename to wicket-devutils/src/test/java/org/apache/wicket/devutils/util/markup/xhtml/WellFormedXmlTest.java
index 88d9025..153165b 100644
--- a/wicket-devutils/src/test/java/org/apache/wicket/util/markup/xhtml/WellFormedXmlTest.java
+++ b/wicket-devutils/src/test/java/org/apache/wicket/devutils/util/markup/xhtml/WellFormedXmlTest.java
@@ -1,34 +1,35 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.wicket.util.markup.xhtml;
-
-import org.junit.jupiter.api.Test;
-
-/**
- * Checks that the html markup files are well formed xml-s.
- * 
- * @author akiraly
- */
-public class WellFormedXmlTest extends WellFormedXmlTestCase
-{
-	@Test
-	@Override
-	public void markupFiles()
-	{
-		super.markupFiles();
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.devutils.util.markup.xhtml;
+
+import org.apache.wicket.util.markup.xhtml.WellFormedXmlTestCase;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Checks that the html markup files are well formed xml-s.
+ * 
+ * @author akiraly
+ */
+public class WellFormedXmlTest extends WellFormedXmlTestCase
+{
+	@Test
+	@Override
+	public void markupFiles()
+	{
+		super.markupFiles();
+	}
+}
diff --git a/wicket-experimental/wicket-metrics/pom.xml b/wicket-experimental/wicket-metrics/pom.xml
index 3f5566b..54ae946 100644
--- a/wicket-experimental/wicket-metrics/pom.xml
+++ b/wicket-experimental/wicket-metrics/pom.xml
@@ -32,10 +32,6 @@
 		about web applications build on the web framework.
 	</description>
 
-	<properties>
-		<automatic-module-name>org.apache.wicket.metrics</automatic-module-name>
-	</properties>
-
 	<dependencies>
 		<dependency>
 			<groupId>jakarta.servlet</groupId>
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/cycle/MultiRequestCycleListenerCallOrderPage.java b/wicket-experimental/wicket-metrics/src/main/java/module-info.java
similarity index 50%
rename from wicket-core/src/test/java/org/apache/wicket/request/cycle/MultiRequestCycleListenerCallOrderPage.java
rename to wicket-experimental/wicket-metrics/src/main/java/module-info.java
index 065caab..e151e0e 100644
--- a/wicket-core/src/test/java/org/apache/wicket/request/cycle/MultiRequestCycleListenerCallOrderPage.java
+++ b/wicket-experimental/wicket-metrics/src/main/java/module-info.java
@@ -14,42 +14,23 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.wicket.request.cycle;
 
-import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.markup.html.AjaxLink;
-import org.apache.wicket.markup.html.WebPage;
-import org.apache.wicket.markup.html.link.Link;
+module org.apache.wicket.metrics {
+    requires org.apache.wicket.core;
+    requires org.aspectj.runtime;
+    requires com.codahale.metrics;
+    requires com.codahale.metrics.jmx;
+    requires jakarta.servlet;
 
-/**
- */
-public class MultiRequestCycleListenerCallOrderPage extends WebPage
-{
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 * Construct.
-	 */
-	public MultiRequestCycleListenerCallOrderPage()
-	{
-		add(new Link<Void>("link")
-		{
-			private static final long serialVersionUID = 1L;
-
-			@Override
-			public void onClick()
-			{
-			}
-		});
-
-		add(new AjaxLink<Void>("ajax")
-		{
-			private static final long serialVersionUID = 1L;
-
-			@Override
-			public void onClick(AjaxRequestTarget target)
-			{
-			}
-		});
-	}
+    exports org.apache.wicket.metrics;
+    exports org.apache.wicket.metrics.aspects;
+    exports org.apache.wicket.metrics.aspects.ajax;
... 976 lines suppressed ...

[wicket] 04/05: WICKET-6904 Make Apache Wicket fully supporting Java9+ module system

Posted by mg...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

mgrigorov pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/wicket.git

commit d74e4660cc546d845f62f1aba778e6a554373b10
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
AuthorDate: Sun Jul 18 23:48:48 2021 +0300

    WICKET-6904 Make Apache Wicket fully supporting Java9+ module system
    
    Fix JPMS requires to use the jakarta.** modules
---
 wicket-bean-validation/src/main/java/module-info.java               | 2 +-
 wicket-cdi/src/main/java/module-info.java                           | 6 +++---
 wicket-cdi/src/test/java/org/apache/wicket/cdi/CdiWicketTester.java | 2 +-
 wicket-cdi/src/test/java/org/apache/wicket/cdi/ContextManager.java  | 4 +---
 .../wicket-native-websocket-javax/src/main/java/module-info.java    | 2 +-
 wicket-spring/src/main/java/module-info.java                        | 2 +-
 6 files changed, 8 insertions(+), 10 deletions(-)

diff --git a/wicket-bean-validation/src/main/java/module-info.java b/wicket-bean-validation/src/main/java/module-info.java
index ce46fc1..bf3ec4b 100644
--- a/wicket-bean-validation/src/main/java/module-info.java
+++ b/wicket-bean-validation/src/main/java/module-info.java
@@ -18,7 +18,7 @@
 module org.apache.wicket.bean.validation {
     requires org.apache.wicket.util;
     requires org.apache.wicket.core;
-    requires java.validation;
+    requires jakarta.validation;
 
     exports org.apache.wicket.bean.validation;
 }
diff --git a/wicket-cdi/src/main/java/module-info.java b/wicket-cdi/src/main/java/module-info.java
index 3db04a1..481f4cf 100644
--- a/wicket-cdi/src/main/java/module-info.java
+++ b/wicket-cdi/src/main/java/module-info.java
@@ -16,10 +16,10 @@
  */
 
 module org.apache.wicket.cdi {
-    requires java.annotation;
+    requires jakarta.annotation;
     requires java.naming;
-    requires jakarta.enterprise.cdi.api;
-    requires jakarta.inject.api;
+    requires jakarta.cdi;
+    requires jakarta.inject;
     requires org.apache.wicket.util;
     requires org.apache.wicket.request;
     requires org.apache.wicket.core;
diff --git a/wicket-cdi/src/test/java/org/apache/wicket/cdi/CdiWicketTester.java b/wicket-cdi/src/test/java/org/apache/wicket/cdi/CdiWicketTester.java
index 8b08474..e4a4bc4 100644
--- a/wicket-cdi/src/test/java/org/apache/wicket/cdi/CdiWicketTester.java
+++ b/wicket-cdi/src/test/java/org/apache/wicket/cdi/CdiWicketTester.java
@@ -22,7 +22,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-import javax.annotation.PreDestroy;
+import jakarta.annotation.PreDestroy;
 import jakarta.inject.Inject;
 
 import org.apache.wicket.Page;
diff --git a/wicket-cdi/src/test/java/org/apache/wicket/cdi/ContextManager.java b/wicket-cdi/src/test/java/org/apache/wicket/cdi/ContextManager.java
index 2a6948f..6a3729e 100644
--- a/wicket-cdi/src/test/java/org/apache/wicket/cdi/ContextManager.java
+++ b/wicket-cdi/src/test/java/org/apache/wicket/cdi/ContextManager.java
@@ -16,7 +16,7 @@
  */
 package org.apache.wicket.cdi;
 
-import javax.annotation.PostConstruct;
+import jakarta.annotation.PostConstruct;
 import jakarta.enterprise.context.ApplicationScoped;
 import jakarta.enterprise.inject.spi.BeanManager;
 import jakarta.inject.Inject;
@@ -26,8 +26,6 @@ import jakarta.servlet.http.HttpSession;
 import org.jboss.weld.bean.builtin.BeanManagerProxy;
 import org.jboss.weld.module.web.servlet.HttpContextLifecycle;
 import org.jboss.weld.servlet.spi.helpers.AcceptingHttpContextActivationFilter;
-import org.jglue.cdiunit.internal.CdiUnitInitialListenerImpl;
-import org.jglue.cdiunit.internal.servlet.LifecycleAwareRequest;
 
 /**
  * @author jsarman
diff --git a/wicket-native-websocket/wicket-native-websocket-javax/src/main/java/module-info.java b/wicket-native-websocket/wicket-native-websocket-javax/src/main/java/module-info.java
index a710d7c..0ba939e 100644
--- a/wicket-native-websocket/wicket-native-websocket-javax/src/main/java/module-info.java
+++ b/wicket-native-websocket/wicket-native-websocket-javax/src/main/java/module-info.java
@@ -21,7 +21,7 @@ module org.apache.wicket.websocket.javax {
     requires org.apache.wicket.core;
     requires org.apache.wicket.websocket.core;
     requires jakarta.servlet;
-    requires jakarta.websocket.api;
+    requires jakarta.websocket;
     requires org.slf4j;
 
     exports org.apache.wicket.protocol.ws.javax;
diff --git a/wicket-spring/src/main/java/module-info.java b/wicket-spring/src/main/java/module-info.java
index 8c33925..ba868af 100644
--- a/wicket-spring/src/main/java/module-info.java
+++ b/wicket-spring/src/main/java/module-info.java
@@ -19,7 +19,7 @@ module org.apache.wicket.spring {
     requires org.apache.wicket.util;
     requires org.apache.wicket.core;
     requires org.apache.wicket.ioc;
-    requires javax.inject;
+    requires jakarta.inject;
     requires jakarta.servlet;
     requires spring.beans;
     requires spring.context;