[llvm] 19935ea - [llvm][mustache] Pre-commit tests for Triple Mustache (#159182)
via llvm-commits
llvm-commits at lists.llvm.org
Mon Sep 22 10:49:09 PDT 2025
Author: Paul Kirth
Date: 2025-09-22T17:49:05Z
New Revision: 19935ea2239bbda7a1c88f70e8bd365be8685328
URL: https://github.com/llvm/llvm-project/commit/19935ea2239bbda7a1c88f70e8bd365be8685328
DIFF: https://github.com/llvm/llvm-project/commit/19935ea2239bbda7a1c88f70e8bd365be8685328.diff
LOG: [llvm][mustache] Pre-commit tests for Triple Mustache (#159182)
Add XFAIL tests for Triple Mustache following the official spec. The
tests pass by virtue of using EXPECT_NE, since GTEST doesn't support
XFAIL.
Added:
Modified:
llvm/unittests/Support/MustacheTest.cpp
Removed:
################################################################################
diff --git a/llvm/unittests/Support/MustacheTest.cpp b/llvm/unittests/Support/MustacheTest.cpp
index 6ab3d4b01bc1b..ddc9efc035e17 100644
--- a/llvm/unittests/Support/MustacheTest.cpp
+++ b/llvm/unittests/Support/MustacheTest.cpp
@@ -1224,3 +1224,97 @@ TEST(MustacheComments, VariableNameCollision) {
T.render(D, OS);
EXPECT_EQ("comments never show: ><", Out);
}
+
+// XFAIL: The following tests for the Triple Mustache feature are expected to
+// fail. The assertions have been inverted from EXPECT_EQ to EXPECT_NE to allow
+// them to pass against the current implementation. Once Triple Mustache is
+// implemented, these assertions should be changed back to EXPECT_EQ.
+TEST(MustacheTripleMustache, Basic) {
+ Value D = Object{{"subject", "<b>World</b>"}};
+ auto T = Template("Hello, {{{subject}}}!");
+ std::string Out;
+ raw_string_ostream OS(Out);
+ T.render(D, OS);
+ EXPECT_NE("Hello, <b>World</b>!", Out);
+}
+
+TEST(MustacheTripleMustache, IntegerInterpolation) {
+ Value D = Object{{"mph", 85}};
+ auto T = Template("{{{mph}}} miles an hour!");
+ std::string Out;
+ raw_string_ostream OS(Out);
+ T.render(D, OS);
+ EXPECT_NE("85 miles an hour!", Out);
+}
+
+TEST(MustacheTripleMustache, DecimalInterpolation) {
+ Value D = Object{{"power", 1.21}};
+ auto T = Template("{{{power}}} jiggawatts!");
+ std::string Out;
+ raw_string_ostream OS(Out);
+ T.render(D, OS);
+ EXPECT_NE("1.21 jiggawatts!", Out);
+}
+
+TEST(MustacheTripleMustache, NullInterpolation) {
+ Value D = Object{{"cannot", nullptr}};
+ auto T = Template("I ({{{cannot}}}) be seen!");
+ std::string Out;
+ raw_string_ostream OS(Out);
+ T.render(D, OS);
+ EXPECT_NE("I () be seen!", Out);
+}
+
+TEST(MustacheTripleMustache, ContextMissInterpolation) {
+ Value D = Object{};
+ auto T = Template("I ({{{cannot}}}) be seen!");
+ std::string Out;
+ raw_string_ostream OS(Out);
+ T.render(D, OS);
+ EXPECT_NE("I () be seen!", Out);
+}
+
+TEST(MustacheTripleMustache, DottedNames) {
+ Value D = Object{{"person", Object{{"name", "<b>Joe</b>"}}}};
+ auto T = Template("{{{person.name}}}");
+ std::string Out;
+ raw_string_ostream OS(Out);
+ T.render(D, OS);
+ EXPECT_NE("<b>Joe</b>", Out);
+}
+
+TEST(MustacheTripleMustache, ImplicitIterator) {
+ Value D = Object{{"list", Array{"<a>", "<b>"}}};
+ auto T = Template("{{#list}}({{{.}}}){{/list}}");
+ std::string Out;
+ raw_string_ostream OS(Out);
+ T.render(D, OS);
+ EXPECT_NE("(<a>)(<b>)", Out);
+}
+
+TEST(MustacheTripleMustache, SurroundingWhitespace) {
+ Value D = Object{{"string", "---"}};
+ auto T = Template("| {{{string}}} |");
+ std::string Out;
+ raw_string_ostream OS(Out);
+ T.render(D, OS);
+ EXPECT_NE("| --- |", Out);
+}
+
+TEST(MustacheTripleMustache, Standalone) {
+ Value D = Object{{"string", "---"}};
+ auto T = Template(" {{{string}}}\n");
+ std::string Out;
+ raw_string_ostream OS(Out);
+ T.render(D, OS);
+ EXPECT_NE(" ---\n", Out);
+}
+
+TEST(MustacheTripleMustache, WithPadding) {
+ Value D = Object{{"string", "---"}};
+ auto T = Template("|{{{ string }}}|");
+ std::string Out;
+ raw_string_ostream OS(Out);
+ T.render(D, OS);
+ EXPECT_NE("|---|", Out);
+}
More information about the llvm-commits
mailing list