22
33import static org .junit .jupiter .api .Assertions .assertEquals ;
44
5+ import java .util .Map ;
6+ import java .util .Set ;
7+ import java .util .function .Predicate ;
8+
59import jakarta .inject .Inject ;
610
711import org .jboss .shrinkwrap .api .asset .StringAsset ;
812import org .junit .jupiter .api .Test ;
913import org .junit .jupiter .api .extension .RegisterExtension ;
1014
15+ import io .quarkus .qute .Engine ;
16+ import io .quarkus .qute .RawString ;
1117import io .quarkus .qute .Template ;
18+ import io .quarkus .qute .TemplateExtension ;
19+ import io .quarkus .qute .UserTagSectionHelper ;
20+ import io .quarkus .qute .UserTagSectionHelper .Arguments ;
1221import io .quarkus .test .QuarkusUnitTest ;
1322
1423public class UserTagArgumentsTest {
@@ -19,14 +28,37 @@ public class UserTagArgumentsTest {
1928 .addAsResource (new StringAsset (
2029 "{_args.size}::{_args.empty}::{_args.get('name')}::{_args.asHtmlAttributes}::{_args.skip('foo','baz').size}::{#each _args.filter('name')}{it.value}{/each}" ),
2130 "templates/tags/hello.txt" )
22- .addAsResource (new StringAsset ("{#hello name=val /}" ), "templates/foo.txt" ));
31+ .addAsResource (new StringAsset ("{#hello name=val /}" ), "templates/foo.txt" )
32+ .addAsResource (new StringAsset ("{_args.startsWith('hx-','x-')}" ),
33+ "templates/tags/startsWith.txt" ));
2334
2435 @ Inject
2536 Template foo ;
2637
38+ @ Inject
39+ Engine engine ;
40+
2741 @ Test
2842 public void testInjection () {
2943 assertEquals ("1::false::Lu::name=\" Lu\" ::1::Lu" , foo .data ("val" , "Lu" ).render ());
3044 }
3145
46+ @ Test
47+ public void testNotBuiltInTemplateExtension () {
48+ assertEquals ("hx-get=\" /endpoint\" x-data=\" {}\" " ,
49+ engine .parse ("{#startsWith hx-get='/endpoint' x-data='{}' ignored-arg='ignored' /}" ).render ());
50+ }
51+
52+ @ TemplateExtension
53+ public static class Extensions {
54+
55+ public static RawString startsWith (UserTagSectionHelper .Arguments obj , String ... startsWithPrefix ) {
56+ Set <String > startsWithSet = Set .of (startsWithPrefix );
57+ Predicate <Map .Entry <String , Object >> predicate = e -> startsWithSet .stream ()
58+ .anyMatch (k -> e .getKey ().startsWith (k ));
59+ return obj .filter (predicate ).asHtmlAttributes ();
60+ }
61+
62+ }
63+
3264}
0 commit comments