Moved/renamed EscapeString from visual_studio_writer to XmlEscape in xml_element_writer.
Added XmlEscape unit test.
BUG=708705
Review-Url: https://codereview.chromium.org/2813213002
Cr-Original-Commit-Position: refs/heads/master@{#464756}
Cr-Mirrored-From: https://chromium.googlesource.com/chromium/src
Cr-Mirrored-Commit: ac2df0acb000d21cd5493fdcc529212d1ba65198
diff --git a/tools/gn/visual_studio_writer.cc b/tools/gn/visual_studio_writer.cc
index 76ebc56..aa01d82 100644
--- a/tools/gn/visual_studio_writer.cc
+++ b/tools/gn/visual_studio_writer.cc
@@ -37,41 +37,9 @@
namespace {
-std::string EscapeString(const std::string& value) {
- std::string result;
- for (char c : value) {
- switch (c) {
- case '\n':
- result += " ";
- break;
- case '\r':
- result += " ";
- break;
- case '\t':
- result += "	";
- break;
- case '"':
- result += """;
- break;
- case '<':
- result += "<";
- break;
- case '>':
- result += ">";
- break;
- case '&':
- result += "&";
- break;
- default:
- result += c;
- }
- }
- return result;
-}
-
struct SemicolonSeparatedWriter {
void operator()(const std::string& value, std::ostream& out) const {
- out << EscapeString(value) + ';';
+ out << XmlEscape(value) + ';';
}
};
diff --git a/tools/gn/xml_element_writer.cc b/tools/gn/xml_element_writer.cc
index fcf34b2..bb0d232 100644
--- a/tools/gn/xml_element_writer.cc
+++ b/tools/gn/xml_element_writer.cc
@@ -81,3 +81,35 @@
return out_;
}
+
+std::string XmlEscape(const std::string& value) {
+ std::string result;
+ for (char c : value) {
+ switch (c) {
+ case '\n':
+ result += " ";
+ break;
+ case '\r':
+ result += " ";
+ break;
+ case '\t':
+ result += "	";
+ break;
+ case '"':
+ result += """;
+ break;
+ case '<':
+ result += "<";
+ break;
+ case '>':
+ result += ">";
+ break;
+ case '&':
+ result += "&";
+ break;
+ default:
+ result += c;
+ }
+ }
+ return result;
+}
diff --git a/tools/gn/xml_element_writer.h b/tools/gn/xml_element_writer.h
index 8a83df0..01346d2 100644
--- a/tools/gn/xml_element_writer.h
+++ b/tools/gn/xml_element_writer.h
@@ -120,4 +120,6 @@
out_, tag, attribute_name, attribute_value_writer, indent_ + 2));
}
+std::string XmlEscape(const std::string& value);
+
#endif // TOOLS_GN_XML_ELEMENT_WRITER_H_
diff --git a/tools/gn/xml_element_writer_unittest.cc b/tools/gn/xml_element_writer_unittest.cc
index 93dfd47..cc21c4b 100644
--- a/tools/gn/xml_element_writer_unittest.cc
+++ b/tools/gn/xml_element_writer_unittest.cc
@@ -84,3 +84,10 @@
}
EXPECT_EQ("<foo bar=\"baz\">Hello world!</foo>\n", out.str());
}
+
+TEST(XmlElementWriter, TestXmlEscape) {
+ std::string input = "\r \n \t & < > \"";
+ std::string output = XmlEscape(input);
+ std::string expected = " 	 & < > "";
+ EXPECT_EQ(expected, output);
+}