diff --git a/extensions/qute/deployment/src/test/java/io/quarkus/qute/deployment/TreeMapDataTest.java b/extensions/qute/deployment/src/test/java/io/quarkus/qute/deployment/TreeMapDataTest.java new file mode 100644 index 000000000..ba4aa55b0 --- /dev/null +++ b/extensions/qute/deployment/src/test/java/io/quarkus/qute/deployment/TreeMapDataTest.java @@ -0,0 +1,37 @@ +package io.quarkus.qute.deployment; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.Map; +import java.util.TreeMap; + +import javax.inject.Inject; + +import org.jboss.shrinkwrap.api.ShrinkWrap; +import org.jboss.shrinkwrap.api.asset.StringAsset; +import org.jboss.shrinkwrap.api.spec.JavaArchive; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.RegisterExtension; + +import io.quarkus.qute.Template; +import io.quarkus.test.QuarkusUnitTest; + +public class TreeMapDataTest { + + @RegisterExtension + static final QuarkusUnitTest config = new QuarkusUnitTest() + .setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class) + .addAsResource(new StringAsset("{map.get(1)}:{map.entrySet.iterator.next.value}"), "templates/map.html")); + + @Inject + Template map; + + @Test + public void testTreeMap() { + Map treeMap = new TreeMap<>(Integer::compare); + treeMap.put(2, "bar"); + treeMap.put(1, "foo"); + assertEquals("foo:foo", map.data("map", treeMap).render()); + } + +} diff --git a/extensions/qute/runtime/src/main/java/io/quarkus/qute/runtime/BuiltinTemplateExtensions.java b/extensions/qute/runtime/src/main/java/io/quarkus/qute/runtime/BuiltinTemplateExtensions.java index 4ef4b0fdb..f2acbd8bf 100644 --- a/extensions/qute/runtime/src/main/java/io/quarkus/qute/runtime/BuiltinTemplateExtensions.java +++ b/extensions/qute/runtime/src/main/java/io/quarkus/qute/runtime/BuiltinTemplateExtensions.java @@ -14,16 +14,14 @@ public class BuiltinTemplateExtensions { @SuppressWarnings({ "rawtypes", "unchecked" }) @TemplateExtension(matchName = ANY) static Object map(Map map, String name) { - Object val = map.get(name); - if (val != null) { - return val; - } switch (name) { case "keys": case "keySet": return map.keySet(); case "values": return map.values(); + case "entrySet": + return map.entrySet(); case "size": return map.size(); case "empty": diff --git a/independent-projects/qute/core/src/main/java/io/quarkus/qute/ValueResolvers.java b/independent-projects/qute/core/src/main/java/io/quarkus/qute/ValueResolvers.java index 874d06fae..7ebfd8c7d 100644 --- a/independent-projects/qute/core/src/main/java/io/quarkus/qute/ValueResolvers.java +++ b/independent-projects/qute/core/src/main/java/io/quarkus/qute/ValueResolvers.java @@ -199,6 +199,8 @@ public final class ValueResolvers { return CompletableFuture.completedFuture(map.keySet()); case "values": return CompletableFuture.completedFuture(map.values()); + case "entrySet": + return CompletableFuture.completedFuture(map.entrySet()); case "size": return CompletableFuture.completedFuture(map.size()); case "empty":