2
2
3
3
import static org .junit .jupiter .api .Assertions .assertEquals ;
4
4
5
+ import java .util .Map ;
6
+ import java .util .Set ;
7
+ import java .util .function .Predicate ;
8
+
5
9
import jakarta .inject .Inject ;
6
10
7
11
import org .jboss .shrinkwrap .api .asset .StringAsset ;
8
12
import org .junit .jupiter .api .Test ;
9
13
import org .junit .jupiter .api .extension .RegisterExtension ;
10
14
15
+ import io .quarkus .qute .Engine ;
16
+ import io .quarkus .qute .RawString ;
11
17
import io .quarkus .qute .Template ;
18
+ import io .quarkus .qute .TemplateExtension ;
19
+ import io .quarkus .qute .UserTagSectionHelper ;
20
+ import io .quarkus .qute .UserTagSectionHelper .Arguments ;
12
21
import io .quarkus .test .QuarkusUnitTest ;
13
22
14
23
public class UserTagArgumentsTest {
@@ -19,14 +28,37 @@ public class UserTagArgumentsTest {
19
28
.addAsResource (new StringAsset (
20
29
"{_args.size}::{_args.empty}::{_args.get('name')}::{_args.asHtmlAttributes}::{_args.skip('foo','baz').size}::{#each _args.filter('name')}{it.value}{/each}" ),
21
30
"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" ));
23
34
24
35
@ Inject
25
36
Template foo ;
26
37
38
+ @ Inject
39
+ Engine engine ;
40
+
27
41
@ Test
28
42
public void testInjection () {
29
43
assertEquals ("1::false::Lu::name=\" Lu\" ::1::Lu" , foo .data ("val" , "Lu" ).render ());
30
44
}
31
45
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
+
32
64
}
0 commit comments