[llvm] 2522a95 - [llvm][mustache] Precommit test for Set Delimiter (#159186)
via llvm-commits
llvm-commits at lists.llvm.org
Mon Sep 29 11:19:51 PDT 2025
Author: Paul Kirth
Date: 2025-09-29T18:19:47Z
New Revision: 2522a953546dbbf1cc4ad45c3e5218b8c08c0620
URL: https://github.com/llvm/llvm-project/commit/2522a953546dbbf1cc4ad45c3e5218b8c08c0620
DIFF: https://github.com/llvm/llvm-project/commit/2522a953546dbbf1cc4ad45c3e5218b8c08c0620.diff
LOG: [llvm][mustache] Precommit test for Set Delimiter (#159186)
Adds a new unit test for the Mustache Set Delimiter feature.
This test is written with inverted logic (`EXPECT_NE`) so that it
passes with the current implementation, which does not support
the feature. Once the feature is implemented, this test will fail,
signaling that the test logic should be flipped to `EXPECT_EQ`.
Added:
Modified:
llvm/unittests/Support/MustacheTest.cpp
Removed:
################################################################################
diff --git a/llvm/unittests/Support/MustacheTest.cpp b/llvm/unittests/Support/MustacheTest.cpp
index 3635463cd7570..0ebbc58e023cc 100644
--- a/llvm/unittests/Support/MustacheTest.cpp
+++ b/llvm/unittests/Support/MustacheTest.cpp
@@ -1328,3 +1328,139 @@ TEST(MustacheTripleMustache, WithPadding) {
T.render(D, OS);
EXPECT_EQ("|---|", Out);
}
+
+TEST(MustacheDelimiters, PairBehavior) {
+ Value D = Object{{"text", "Hey!"}};
+ auto T = Template("{{=<% %>=}}(<%text%>)");
+ std::string Out;
+ raw_string_ostream OS(Out);
+ T.render(D, OS);
+ EXPECT_NE("(Hey!)", Out);
+}
+
+TEST(MustacheDelimiters, SpecialCharacters) {
+ Value D = Object{{"text", "It worked!"}};
+ auto T = Template("({{=[ ]=}}[text])");
+ std::string Out;
+ raw_string_ostream OS(Out);
+ T.render(D, OS);
+ EXPECT_NE("(It worked!)", Out);
+}
+
+TEST(MustacheDelimiters, Sections) {
+ Value D = Object{{"section", true}, {"data", "I got interpolated."}};
+ auto T =
+ Template("[\n{{#section}}\n {{data}}\n |data|\n{{/section}}\n\n{{= "
+ "| | =}}\n|#section|\n {{data}}\n |data|\n|/section|\n]\n");
+ std::string Out;
+ raw_string_ostream OS(Out);
+ T.render(D, OS);
+ EXPECT_NE("[\n I got interpolated.\n |data|\n\n {{data}}\n I got "
+ "interpolated.\n]\n",
+ Out);
+}
+
+TEST(MustacheDelimiters, InvertedSections) {
+ Value D = Object{{"section", false}, {"data", "I got interpolated."}};
+ auto T =
+ Template("[\n{{^section}}\n {{data}}\n |data|\n{{/section}}\n\n{{= "
+ "| | =}}\n|^section|\n {{data}}\n |data|\n|/section|\n]\n");
+ std::string Out;
+ raw_string_ostream OS(Out);
+ T.render(D, OS);
+ EXPECT_NE("[\n I got interpolated.\n |data|\n\n {{data}}\n I got "
+ "interpolated.\n]\n",
+ Out);
+}
+
+TEST(MustacheDelimiters, PartialInheritence) {
+ Value D = Object{{"value", "yes"}};
+ auto T = Template("[ {{>include}} ]\n{{= | | =}}\n[ |>include| ]\n");
+ T.registerPartial("include", ".{{value}}.");
+ std::string Out;
+ raw_string_ostream OS(Out);
+ T.render(D, OS);
+ EXPECT_NE("[ .yes. ]\n[ .yes. ]\n", Out);
+}
+
+TEST(MustacheDelimiters, PostPartialBehavior) {
+ Value D = Object{{"value", "yes"}};
+ auto T = Template("[ {{>include}} ]\n[ .{{value}}. .|value|. ]\n");
+ T.registerPartial("include", ".{{value}}. {{= | | =}} .|value|.");
+ std::string Out;
+ raw_string_ostream OS(Out);
+ T.render(D, OS);
+ EXPECT_NE("[ .yes. .yes. ]\n[ .yes. .|value|. ]\n", Out);
+}
+
+TEST(MustacheDelimiters, SurroundingWhitespace) {
+ Value D = Object{};
+ auto T = Template("| {{=@ @=}} |");
+ std::string Out;
+ raw_string_ostream OS(Out);
+ T.render(D, OS);
+ EXPECT_EQ("| |", Out);
+}
+
+TEST(MustacheDelimiters, OutlyingWhitespaceInline) {
+ Value D = Object{};
+ auto T = Template(" | {{=@ @=}}\n");
+ std::string Out;
+ raw_string_ostream OS(Out);
+ T.render(D, OS);
+ EXPECT_EQ(" | \n", Out);
+}
+
+TEST(MustacheDelimiters, StandaloneTag) {
+ Value D = Object{};
+ auto T = Template("Begin.\n{{=@ @=}}\nEnd.\n");
+ std::string Out;
+ raw_string_ostream OS(Out);
+ T.render(D, OS);
+ EXPECT_NE("Begin.\nEnd.\n", Out);
+}
+
+TEST(MustacheDelimiters, IndentedStandaloneTag) {
+ Value D = Object{};
+ auto T = Template("Begin.\n {{=@ @=}}\nEnd.\n");
+ std::string Out;
+ raw_string_ostream OS(Out);
+ T.render(D, OS);
+ EXPECT_NE("Begin.\nEnd.\n", Out);
+}
+
+TEST(MustacheDelimiters, StandaloneLineEndings) {
+ Value D = Object{};
+ auto T = Template("|\r\n{{= @ @ =}}\r\n|");
+ std::string Out;
+ raw_string_ostream OS(Out);
+ T.render(D, OS);
+ EXPECT_NE("|\r\n|", Out);
+}
+
+TEST(MustacheDelimiters, StandaloneWithoutPreviousLine) {
+ Value D = Object{};
+ auto T = Template(" {{=@ @=}}\n=");
+ std::string Out;
+ raw_string_ostream OS(Out);
+ T.render(D, OS);
+ EXPECT_NE("=", Out);
+}
+
+TEST(MustacheDelimiters, StandaloneWithoutNewline) {
+ Value D = Object{};
+ auto T = Template("=\n {{=@ @=}}");
+ std::string Out;
+ raw_string_ostream OS(Out);
+ T.render(D, OS);
+ EXPECT_NE("=\n", Out);
+}
+
+TEST(MustacheDelimiters, PairwithPadding) {
+ Value D = Object{};
+ auto T = Template("|{{= @ @ =}}|");
+ std::string Out;
+ raw_string_ostream OS(Out);
+ T.render(D, OS);
+ EXPECT_EQ("||", Out);
+}
More information about the llvm-commits
mailing list