@@ -149,4 +149,98 @@ public void testMainClass_synthetic() throws URISyntaxException, IOException {
149149 MatcherAssert .assertThat (
150150 mainClassFinderResult .getFoundMainClass (), CoreMatchers .containsString ("HelloWorldKt" ));
151151 }
152+
153+ @ Test
154+ public void testMainClass_java25StaticNoArgs () throws URISyntaxException , IOException {
155+ Path rootDirectory =
156+ Paths .get (Resources .getResource ("core/class-finder-tests/java25-flexible-main" ).toURI ());
157+ Path classFile = rootDirectory .resolve ("StaticMainNoArgs.class" );
158+ MainClassFinder .Result mainClassFinderResult =
159+ MainClassFinder .find (java .util .Collections .singletonList (classFile ), logEventConsumer );
160+ Assert .assertSame (
161+ MainClassFinder .Result .Type .MAIN_CLASS_FOUND , mainClassFinderResult .getType ());
162+ MatcherAssert .assertThat (
163+ mainClassFinderResult .getFoundMainClass (), CoreMatchers .containsString ("StaticMainNoArgs" ));
164+ }
165+
166+ @ Test
167+ public void testMainClass_java25InstanceWithArgs () throws URISyntaxException , IOException {
168+ Path rootDirectory =
169+ Paths .get (Resources .getResource ("core/class-finder-tests/java25-flexible-main" ).toURI ());
170+ Path classFile = rootDirectory .resolve ("InstanceMainWithArgs.class" );
171+ MainClassFinder .Result mainClassFinderResult =
172+ MainClassFinder .find (java .util .Collections .singletonList (classFile ), logEventConsumer );
173+ Assert .assertSame (
174+ MainClassFinder .Result .Type .MAIN_CLASS_FOUND , mainClassFinderResult .getType ());
175+ MatcherAssert .assertThat (
176+ mainClassFinderResult .getFoundMainClass (),
177+ CoreMatchers .containsString ("InstanceMainWithArgs" ));
178+ }
179+
180+ @ Test
181+ public void testMainClass_java25InstanceNoArgs () throws URISyntaxException , IOException {
182+ Path rootDirectory =
183+ Paths .get (Resources .getResource ("core/class-finder-tests/java25-flexible-main" ).toURI ());
184+ Path classFile = rootDirectory .resolve ("InstanceMainNoArgs.class" );
185+ MainClassFinder .Result mainClassFinderResult =
186+ MainClassFinder .find (java .util .Collections .singletonList (classFile ), logEventConsumer );
187+ Assert .assertSame (
188+ MainClassFinder .Result .Type .MAIN_CLASS_FOUND , mainClassFinderResult .getType ());
189+ MatcherAssert .assertThat (
190+ mainClassFinderResult .getFoundMainClass (),
191+ CoreMatchers .containsString ("InstanceMainNoArgs" ));
192+ }
193+
194+ @ Test
195+ public void testMainClass_java25ProtectedMain () throws URISyntaxException , IOException {
196+ Path rootDirectory =
197+ Paths .get (Resources .getResource ("core/class-finder-tests/java25-flexible-main" ).toURI ());
198+ Path classFile = rootDirectory .resolve ("ProtectedMain.class" );
199+ MainClassFinder .Result mainClassFinderResult =
200+ MainClassFinder .find (java .util .Collections .singletonList (classFile ), logEventConsumer );
201+ Assert .assertSame (
202+ MainClassFinder .Result .Type .MAIN_CLASS_FOUND , mainClassFinderResult .getType ());
203+ MatcherAssert .assertThat (
204+ mainClassFinderResult .getFoundMainClass (), CoreMatchers .containsString ("ProtectedMain" ));
205+ }
206+
207+ @ Test
208+ public void testMainClass_java25PackagePrivateMain () throws URISyntaxException , IOException {
209+ Path rootDirectory =
210+ Paths .get (Resources .getResource ("core/class-finder-tests/java25-flexible-main" ).toURI ());
211+ Path classFile = rootDirectory .resolve ("PackagePrivateMain.class" );
212+ MainClassFinder .Result mainClassFinderResult =
213+ MainClassFinder .find (java .util .Collections .singletonList (classFile ), logEventConsumer );
214+ Assert .assertSame (
215+ MainClassFinder .Result .Type .MAIN_CLASS_FOUND , mainClassFinderResult .getType ());
216+ MatcherAssert .assertThat (
217+ mainClassFinderResult .getFoundMainClass (),
218+ CoreMatchers .containsString ("PackagePrivateMain" ));
219+ }
220+
221+ @ Test
222+ public void testMainClass_java25MultipleFlexibleMains () throws URISyntaxException , IOException {
223+ Path rootDirectory =
224+ Paths .get (Resources .getResource ("core/class-finder-tests/java25-flexible-main" ).toURI ());
225+ MainClassFinder .Result mainClassFinderResult =
226+ MainClassFinder .find (new DirectoryWalker (rootDirectory ).walk (), logEventConsumer );
227+ Assert .assertEquals (Result .Type .MULTIPLE_MAIN_CLASSES , mainClassFinderResult .getType ());
228+ Assert .assertEquals (5 , mainClassFinderResult .getFoundMainClasses ().size ());
229+ Assert .assertTrue (mainClassFinderResult .getFoundMainClasses ().contains ("StaticMainNoArgs" ));
230+ Assert .assertTrue (mainClassFinderResult .getFoundMainClasses ().contains ("InstanceMainWithArgs" ));
231+ Assert .assertTrue (mainClassFinderResult .getFoundMainClasses ().contains ("InstanceMainNoArgs" ));
232+ Assert .assertTrue (mainClassFinderResult .getFoundMainClasses ().contains ("ProtectedMain" ));
233+ Assert .assertTrue (mainClassFinderResult .getFoundMainClasses ().contains ("PackagePrivateMain" ));
234+ }
235+
236+ @ Test
237+ public void testMainClass_java25PrivateMainNotAllowed () throws URISyntaxException , IOException {
238+ Path rootDirectory =
239+ Paths .get (Resources .getResource ("core/class-finder-tests/java25-flexible-main" ).toURI ());
240+ Path classFile = rootDirectory .resolve ("PrivateMain.class" );
241+ MainClassFinder .Result mainClassFinderResult =
242+ MainClassFinder .find (java .util .Collections .singletonList (classFile ), logEventConsumer );
243+ Assert .assertSame (
244+ MainClassFinder .Result .Type .MAIN_CLASS_NOT_FOUND , mainClassFinderResult .getType ());
245+ }
152246}
0 commit comments