18
18
package net .kyori .moonshine ;
19
19
20
20
import static java .util .Collections .emptyMap ;
21
- import static net .kyori .moonshine .Unit .UNIT ;
21
+ import static net .kyori .moonshine .util . Unit .UNIT ;
22
22
import static org .assertj .core .api .Assertions .assertThatCode ;
23
23
import static org .assertj .core .api .Assertions .fail ;
24
24
import static org .mockito .ArgumentMatchers .any ;
44
44
import net .kyori .moonshine .strategy .StandardPlaceholderResolverStrategy ;
45
45
import net .kyori .moonshine .strategy .supertype .StandardSupertypeThenInterfaceSupertypeStrategy ;
46
46
import net .kyori .moonshine .util .Either ;
47
+ import net .kyori .moonshine .util .Unit ;
47
48
import org .checkerframework .checker .nullness .qual .Nullable ;
48
49
import org .junit .jupiter .api .Test ;
49
50
@@ -75,7 +76,7 @@ void singleEmptyMethod() throws Exception {
75
76
76
77
assertThatCode (() ->
77
78
Moonshine .<SingleEmptyMethodMoonshineType , Unit >builder (
78
- TypeToken .get (SingleEmptyMethodMoonshineType .class ))
79
+ TypeToken .get (SingleEmptyMethodMoonshineType .class ))
79
80
.receiverLocatorResolver ((method , proxy ) -> (method1 , proxy1 , parameters ) -> UNIT ,
80
81
2 )
81
82
.sourced (messageSource )
@@ -99,7 +100,7 @@ void singleMethodStringPlaceholders() throws Exception {
99
100
100
101
assertThatCode (() ->
101
102
Moonshine .<SingleMethodStringPlaceholdersMoonshineType , TestableReceiver >builder (
102
- TypeToken .get (SingleMethodStringPlaceholdersMoonshineType .class ))
103
+ TypeToken .get (SingleMethodStringPlaceholdersMoonshineType .class ))
103
104
.receiverLocatorResolver ((method , proxy ) -> (method1 , proxy1 , parameters ) -> receiver ,
104
105
-1 )
105
106
.sourced (messageSource )
@@ -131,6 +132,39 @@ void singleMethodStringPlaceholders() throws Exception {
131
132
verify (messageSender ).send (receiver , "Hello, second!" );
132
133
}
133
134
135
+ @ Test
136
+ void defaultMethodOneParam () throws Exception {
137
+ final IMessageSource <TestableReceiver , String > messageSource = mock (IMessageSource .class );
138
+ final IMessageRenderer <TestableReceiver , String , String , String > messageRenderer = spy (
139
+ new SimpleStringFormatRenderer <>());
140
+ final IMessageSender <TestableReceiver , String > messageSender = mock (IMessageSender .class );
141
+ final TestableReceiver receiver = mock (TestableReceiver .class );
142
+ when (messageSource .messageOf (any (), any ())).thenReturn ("Hello, %1$s!" );
143
+
144
+ assertThatCode (() ->
145
+ Moonshine .<DefaultMethodNoParams , TestableReceiver >builder (TypeToken .get (DefaultMethodNoParams .class ))
146
+ .receiverLocatorResolver ((method , proxy ) -> (method1 , proxy1 , parameters ) -> receiver , -1 )
147
+ .sourced (messageSource )
148
+ .rendered (messageRenderer )
149
+ .sent (messageSender )
150
+ .resolvingWithStrategy (new StandardPlaceholderResolverStrategy <>(
151
+ new StandardSupertypeThenInterfaceSupertypeStrategy (false )
152
+ ))
153
+ .weightedPlaceholderResolver (String .class ,
154
+ (placeholderName , value , receiver1 , owner , method , parameters ) ->
155
+ Map .of (placeholderName , Either .left (ConclusionValue .conclusionValue (value ))), 1 )
156
+ .create ()
157
+ .method (receiver )
158
+ ).doesNotThrowAnyException ();
159
+
160
+ verify (messageSource ).messageOf (receiver , "test" );
161
+ verify (messageRenderer ).render (receiver , "Hello, %1$s!" ,
162
+ new LinkedHashMap <>(Map .of ("placeholder" , "placeholder value" )),
163
+ DefaultMethodNoParams .class .getMethods ()[0 ],
164
+ TypeToken .get (DefaultMethodNoParams .class ).getType ());
165
+ verify (messageSender ).send (receiver , "Hello, placeholder value!" );
166
+ }
167
+
134
168
interface EmptyMoonshineType {
135
169
}
136
170
@@ -148,6 +182,18 @@ void method(
148
182
);
149
183
}
150
184
185
+ interface DefaultMethodNoParams {
186
+ @ Message ("test" )
187
+ void method (
188
+ final TestableReceiver receiver ,
189
+ @ Placeholder final String placeholder
190
+ );
191
+
192
+ default void method (final TestableReceiver receiver ) {
193
+ this .method (receiver , "placeholder value" );
194
+ }
195
+ }
196
+
151
197
private static class TestableReceiver {
152
198
void send (final Object message ) {
153
199
fail ("TestableReceiver#send must be mocked" );
0 commit comments