2525import org .junit .jupiter .api .BeforeEach ;
2626import org .junit .jupiter .api .Disabled ;
2727import org .junit .jupiter .api .Test ;
28+ import org .junit .jupiter .params .ParameterizedTest ;
29+ import org .junit .jupiter .params .provider .ValueSource ;
2830
2931import org .springframework .aot .hint .RuntimeHints ;
3032import org .springframework .aot .hint .predicate .RuntimeHintsPredicates ;
@@ -199,10 +201,13 @@ void whenUseMainMethodWhenAvailableAndNoMainMethod() {
199201 assertThat (applicationContext .getEnvironment ().getActiveProfiles ()).isEmpty ();
200202 }
201203
202- @ Test
203- void whenUseMainMethodWhenAvailableAndMainMethod () {
204- TestContext testContext = new ExposedTestContextManager (UseMainMethodWhenAvailableAndMainMethod .class )
205- .getExposedTestContext ();
204+ @ ParameterizedTest
205+ @ ValueSource (classes = { UsePublicMainMethodWhenAvailableAndMainMethod .class ,
206+ UsePublicParameterlessMainMethodWhenAvailableAndMainMethod .class ,
207+ UsePackagePrivateMainMethodWhenAvailableAndMainMethod .class ,
208+ UsePackagePrivateParameterlessMainMethodWhenAvailableAndMainMethod .class })
209+ void whenUseMainMethodWhenAvailableAndMainMethod (Class <?> testClass ) {
210+ TestContext testContext = new ExposedTestContextManager (testClass ).getExposedTestContext ();
206211 ApplicationContext applicationContext = testContext .getApplicationContext ();
207212 assertThat (applicationContext .getEnvironment ().getActiveProfiles ()).contains ("frommain" );
208213 }
@@ -264,11 +269,11 @@ void whenMainMethodNotAvailableReturnsNoAotContribution() throws Exception {
264269 void whenMainMethodPresentRegisterReflectionHints () throws Exception {
265270 SpringBootContextLoader contextLoader = new SpringBootContextLoader ();
266271 MergedContextConfiguration contextConfiguration = BootstrapUtils
267- .resolveTestContextBootstrapper (UseMainMethodWhenAvailableAndMainMethod .class )
272+ .resolveTestContextBootstrapper (UsePublicMainMethodWhenAvailableAndMainMethod .class )
268273 .buildMergedContextConfiguration ();
269274 RuntimeHints runtimeHints = new RuntimeHints ();
270275 contextLoader .loadContextForAotProcessing (contextConfiguration , runtimeHints );
271- assertThat (RuntimeHintsPredicates .reflection ().onMethodInvocation (ConfigWithMain .class , "main" ))
276+ assertThat (RuntimeHintsPredicates .reflection ().onMethodInvocation (ConfigWithPublicMain .class , "main" ))
272277 .accepts (runtimeHints );
273278 }
274279
@@ -371,12 +376,28 @@ static class UseMainMethodWhenAvailableAndNoMainMethod {
371376
372377 }
373378
374- @ SpringBootTest (classes = ConfigWithMain .class , useMainMethod = UseMainMethod .WHEN_AVAILABLE )
375- static class UseMainMethodWhenAvailableAndMainMethod {
379+ @ SpringBootTest (classes = ConfigWithPublicMain .class , useMainMethod = UseMainMethod .WHEN_AVAILABLE )
380+ static class UsePublicMainMethodWhenAvailableAndMainMethod {
381+
382+ }
383+
384+ @ SpringBootTest (classes = ConfigWithPublicParameterlessMain .class , useMainMethod = UseMainMethod .WHEN_AVAILABLE )
385+ static class UsePublicParameterlessMainMethodWhenAvailableAndMainMethod {
376386
377387 }
378388
379- @ SpringBootTest (classes = ConfigWithMain .class , useMainMethod = UseMainMethod .NEVER )
389+ @ SpringBootTest (classes = ConfigWithPackagePrivateMain .class , useMainMethod = UseMainMethod .WHEN_AVAILABLE )
390+ static class UsePackagePrivateMainMethodWhenAvailableAndMainMethod {
391+
392+ }
393+
394+ @ SpringBootTest (classes = ConfigWithPackagePrivateParameterlessMain .class ,
395+ useMainMethod = UseMainMethod .WHEN_AVAILABLE )
396+ static class UsePackagePrivateParameterlessMainMethodWhenAvailableAndMainMethod {
397+
398+ }
399+
400+ @ SpringBootTest (classes = ConfigWithPublicMain .class , useMainMethod = UseMainMethod .NEVER )
380401 static class UseMainMethodNever {
381402
382403 }
@@ -392,7 +413,7 @@ static class NoMainMethodWithBeanThrowingException {
392413 }
393414
394415 @ SpringBootTest (useMainMethod = UseMainMethod .ALWAYS )
395- @ ContextHierarchy ({ @ ContextConfiguration (classes = ConfigWithMain .class ),
416+ @ ContextHierarchy ({ @ ContextConfiguration (classes = ConfigWithPublicMain .class ),
396417 @ ContextConfiguration (classes = AnotherConfigWithMain .class ) })
397418 static class UseMainMethodWithContextHierarchy {
398419
@@ -423,10 +444,37 @@ static class Config {
423444 }
424445
425446 @ SpringBootConfiguration (proxyBeanMethods = false )
426- public static class ConfigWithMain {
447+ public static class ConfigWithPublicMain {
427448
428449 public static void main (String [] args ) {
429- new SpringApplication (ConfigWithMain .class ).run ("--spring.profiles.active=frommain" );
450+ new SpringApplication (ConfigWithPublicMain .class ).run ("--spring.profiles.active=frommain" );
451+ }
452+
453+ }
454+
455+ @ SpringBootConfiguration (proxyBeanMethods = false )
456+ public static class ConfigWithPublicParameterlessMain {
457+
458+ public static void main () {
459+ new SpringApplication (ConfigWithPublicMain .class ).run ("--spring.profiles.active=frommain" );
460+ }
461+
462+ }
463+
464+ @ SpringBootConfiguration (proxyBeanMethods = false )
465+ public static class ConfigWithPackagePrivateMain {
466+
467+ static void main (String [] args ) {
468+ new SpringApplication (ConfigWithPublicMain .class ).run ("--spring.profiles.active=frommain" );
469+ }
470+
471+ }
472+
473+ @ SpringBootConfiguration (proxyBeanMethods = false )
474+ public static class ConfigWithPackagePrivateParameterlessMain {
475+
476+ static void main () {
477+ new SpringApplication (ConfigWithPublicMain .class ).run ("--spring.profiles.active=frommain" );
430478 }
431479
432480 }
0 commit comments