1515 */
1616package org .springframework .data .util ;
1717
18- import static org .assertj .core .api .Assertions .*;
18+ import static org .assertj .core .api .Assertions .assertThat ;
19+ import static org .assertj .core .api .Assertions .assertThatNoException ;
20+
21+ import java .net .URLClassLoader ;
22+ import java .util .HashSet ;
23+ import java .util .Set ;
1924
2025import org .junit .jupiter .api .Test ;
2126import org .springframework .aot .generate .ClassNameGenerator ;
2631import org .springframework .data .aot .sample .ConfigWithQuerydslPredicateExecutor .Person ;
2732import org .springframework .data .aot .sample .QConfigWithQuerydslPredicateExecutor_Person ;
2833import org .springframework .data .classloadersupport .HidingClassLoader ;
29- import org .springframework .data .querydsl .User ;
3034import org .springframework .javapoet .ClassName ;
3135
3236import com .querydsl .core .types .EntityPath ;
3337
3438/**
3539 * Unit tests for {@link QTypeContributor}.
3640 *
41+ * @author Christoph Strobl
3742 * @author ckdgus08
3843 */
3944class QTypeContributorUnitTests {
@@ -75,8 +80,8 @@ void doesNotAddQTypeHintIfQuerydslNotPresent() {
7580 RuntimeHintsPredicates .reflection ().onType (QConfigWithQuerydslPredicateExecutor_Person .class ).negate ());
7681 }
7782
78- @ Test // DATAMONGO-4958
79- void doesNotAddQTypeHintForArrayType () {
83+ @ Test // GH-3284
84+ void addsQTypeHintForArrayType () {
8085
8186 GenerationContext generationContext = new DefaultGenerationContext (
8287 new ClassNameGenerator (ClassName .get (this .getClass ())), new InMemoryGeneratedFiles ());
@@ -85,48 +90,47 @@ void doesNotAddQTypeHintForArrayType() {
8590
8691 assertThat (generationContext .getRuntimeHints ()).matches (
8792 RuntimeHintsPredicates .reflection ().onType (QConfigWithQuerydslPredicateExecutor_Person .class ).negate ());
88- assertThat (generationContext .getRuntimeHints ()). matches (
89- RuntimeHintsPredicates .reflection ().onType (QConfigWithQuerydslPredicateExecutor_Person [].class ). negate ( ));
93+ assertThat (generationContext .getRuntimeHints ())
94+ . matches ( RuntimeHintsPredicates .reflection ().onType (QConfigWithQuerydslPredicateExecutor_Person [].class ));
9095 }
9196
92- @ Test // DATAMONGO-4958
93- void addsQTypeHintForQUserType () {
97+ @ Test // GH-3284
98+ void doesNotAddQTypeHintForPrimitiveType () {
9499
95100 GenerationContext generationContext = new DefaultGenerationContext (
96101 new ClassNameGenerator (ClassName .get (this .getClass ())), new InMemoryGeneratedFiles ());
97102
98- QTypeContributor .contributeEntityPath (User .class , generationContext , getClass ().getClassLoader ());
103+ QTypeContributor .contributeEntityPath (int .class , generationContext , getClass ().getClassLoader ());
99104
100- var qUserHintCount = generationContext .getRuntimeHints ().reflection ().typeHints ()
101- .filter (hint -> hint .getType ().getName ().equals ("org.springframework.data.querydsl.QUser" ))
102- .count ();
103- assertThat (qUserHintCount ).isEqualTo (1 );
105+ assertThat (generationContext .getRuntimeHints ().reflection ().typeHints ()).isEmpty ();
104106 }
105107
106- @ Test // DATAMONGO-4958
107- void doesNotAddQTypeHintForQUserArrayType () {
108+ @ Test // GH-3284
109+ void doesNotFailForTypeInDefaultPackage () throws Exception {
108110
109111 GenerationContext generationContext = new DefaultGenerationContext (
110112 new ClassNameGenerator (ClassName .get (this .getClass ())), new InMemoryGeneratedFiles ());
111- var classLoader = getClass ().getClassLoader ();
112113
113- QTypeContributor . contributeEntityPath ( User []. class , generationContext , classLoader );
114+ class CapturingClassLoader extends ClassLoader {
114115
115- assertThat (generationContext .getRuntimeHints ().reflection ().typeHints ()).isEmpty ();
116- var qUserHintCount = generationContext .getRuntimeHints ().reflection ().typeHints ()
117- .filter (hint -> hint .getType ().getName ().equals ("org.springframework.data.querydsl.QUser" ))
118- .count ();
119- assertThat (qUserHintCount ).isEqualTo (0 );
120- }
116+ final Set <String > lookups = new HashSet <>(10 );
121117
122- @ Test // DATAMONGO-4958
123- void doesNotAddQTypeHintForPrimitiveType () {
118+ CapturingClassLoader () {
119+ super (URLClassLoader .getSystemClassLoader ());
120+ }
124121
125- GenerationContext generationContext = new DefaultGenerationContext (
126- new ClassNameGenerator (ClassName .get (this .getClass ())), new InMemoryGeneratedFiles ());
122+ @ Override
123+ public Class <?> loadClass (String name ) throws ClassNotFoundException {
124+ lookups .add (name );
125+ return super .loadClass (name );
126+ }
127+ }
127128
128- QTypeContributor . contributeEntityPath ( int . class , generationContext , getClass (). getClassLoader () );
129+ CapturingClassLoader classLoaderToUse = new CapturingClassLoader ( );
129130
130- assertThat (generationContext .getRuntimeHints ().reflection ().typeHints ()).isEmpty ();
131+ var typeInDefaultPackage = Class .forName ("TypeInDefaultPackage" );
132+ assertThatNoException ().isThrownBy (
133+ () -> QTypeContributor .contributeEntityPath (typeInDefaultPackage , generationContext , classLoaderToUse ));
134+ assertThat (classLoaderToUse .lookups ).contains ("QTypeInDefaultPackage" );
131135 }
132136}
0 commit comments