// Copyright 2016 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "tools/gn/xml_element_writer.h" #include #include "testing/gtest/include/gtest/gtest.h" namespace { class MockValueWriter { public: explicit MockValueWriter(const std::string& value) : value_(value) {} void operator()(std::ostream& out) const { out << value_; } private: std::string value_; }; } // namespace TEST(XmlElementWriter, EmptyElement) { std::ostringstream out; { XmlElementWriter writer(out, "foo", XmlAttributes()); } EXPECT_EQ("\n", out.str()); std::ostringstream out_attr; { XmlElementWriter writer(out_attr, "foo", XmlAttributes("bar", "abc").add("baz", "123")); } EXPECT_EQ("\n", out_attr.str()); std::ostringstream out_indent; { XmlElementWriter writer(out_indent, "foo", XmlAttributes("bar", "baz"), 2); } EXPECT_EQ(" \n", out_indent.str()); std::ostringstream out_writer; { XmlElementWriter writer(out_writer, "foo", "bar", MockValueWriter("baz"), 2); } EXPECT_EQ(" \n", out_writer.str()); } TEST(XmlElementWriter, ElementWithText) { std::ostringstream out; { XmlElementWriter writer(out, "foo", XmlAttributes("bar", "baz")); writer.Text("Hello world!"); } EXPECT_EQ("Hello world!\n", out.str()); } TEST(XmlElementWriter, SubElements) { std::ostringstream out; { XmlElementWriter writer(out, "root", XmlAttributes("aaa", "000")); writer.SubElement("foo", XmlAttributes()); writer.SubElement("bar", XmlAttributes("bbb", "111"))->Text("hello"); writer.SubElement("baz", "ccc", MockValueWriter("222")) ->SubElement("grandchild"); } std::string expected = "\n" " \n" " hello\n" " \n" " \n" " \n" "\n"; EXPECT_EQ(expected, out.str()); } TEST(XmlElementWriter, StartContent) { std::ostringstream out; { XmlElementWriter writer(out, "foo", XmlAttributes("bar", "baz")); writer.StartContent(false) << "Hello world!"; } EXPECT_EQ("Hello world!\n", out.str()); }