Loading tools/aapt2/xml/XmlDom.cpp +4 −1 Original line number Diff line number Diff line Loading @@ -274,6 +274,8 @@ std::unique_ptr<XmlResource> Inflate(const void* data, size_t data_len, IDiagnos switch (code) { case ResXMLParser::START_NAMESPACE: { NamespaceDecl decl; decl.line_number = tree.getLineNumber(); size_t len; const char16_t* str16 = tree.getNamespacePrefix(&len); if (str16) { Loading @@ -288,6 +290,7 @@ std::unique_ptr<XmlResource> Inflate(const void* data, size_t data_len, IDiagnos if (pending_element == nullptr) { pending_element = util::make_unique<Element>(); } pending_element->namespace_decls.push_back(std::move(decl)); break; } Loading @@ -297,8 +300,8 @@ std::unique_ptr<XmlResource> Inflate(const void* data, size_t data_len, IDiagnos el = std::move(pending_element); } else { el = util::make_unique<Element>(); ; } el->line_number = tree.getLineNumber(); size_t len; const char16_t* str16 = tree.getElementNamespace(&len); Loading tools/aapt2/xml/XmlDom_test.cpp +31 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ #include <string> #include "flatten/XmlFlattener.h" #include "io/StringInputStream.h" #include "test/Test.h" Loading Loading @@ -51,6 +52,36 @@ TEST(XmlDomTest, Inflate) { EXPECT_THAT(el->namespace_decls[0].prefix, StrEq("android")); } TEST(XmlDomTest, BinaryInflate) { std::unique_ptr<IAaptContext> context = test::ContextBuilder().Build(); std::unique_ptr<XmlResource> doc = util::make_unique<XmlResource>(); doc->root = util::make_unique<Element>(); doc->root->name = "Layout"; doc->root->line_number = 2u; NamespaceDecl decl; decl.uri = kSchemaAndroid; decl.prefix = "android"; decl.line_number = 2u; doc->root->namespace_decls.push_back(decl); BigBuffer buffer(4096); XmlFlattener flattener(&buffer, {}); ASSERT_TRUE(flattener.Consume(context.get(), doc.get())); auto block = util::Copy(buffer); std::unique_ptr<XmlResource> new_doc = Inflate(block.get(), buffer.size(), context->GetDiagnostics(), Source("test.xml")); ASSERT_THAT(new_doc, NotNull()); EXPECT_THAT(new_doc->root->name, StrEq("Layout")); EXPECT_THAT(new_doc->root->line_number, Eq(2u)); ASSERT_THAT(new_doc->root->namespace_decls, SizeIs(1u)); EXPECT_THAT(new_doc->root->namespace_decls[0].uri, StrEq(kSchemaAndroid)); EXPECT_THAT(new_doc->root->namespace_decls[0].prefix, StrEq("android")); EXPECT_THAT(new_doc->root->namespace_decls[0].line_number, Eq(2u)); } // Escaping is handled after parsing of the values for resource-specific values. TEST(XmlDomTest, ForwardEscapes) { std::unique_ptr<XmlResource> doc = test::BuildXmlDom(R"( Loading Loading
tools/aapt2/xml/XmlDom.cpp +4 −1 Original line number Diff line number Diff line Loading @@ -274,6 +274,8 @@ std::unique_ptr<XmlResource> Inflate(const void* data, size_t data_len, IDiagnos switch (code) { case ResXMLParser::START_NAMESPACE: { NamespaceDecl decl; decl.line_number = tree.getLineNumber(); size_t len; const char16_t* str16 = tree.getNamespacePrefix(&len); if (str16) { Loading @@ -288,6 +290,7 @@ std::unique_ptr<XmlResource> Inflate(const void* data, size_t data_len, IDiagnos if (pending_element == nullptr) { pending_element = util::make_unique<Element>(); } pending_element->namespace_decls.push_back(std::move(decl)); break; } Loading @@ -297,8 +300,8 @@ std::unique_ptr<XmlResource> Inflate(const void* data, size_t data_len, IDiagnos el = std::move(pending_element); } else { el = util::make_unique<Element>(); ; } el->line_number = tree.getLineNumber(); size_t len; const char16_t* str16 = tree.getElementNamespace(&len); Loading
tools/aapt2/xml/XmlDom_test.cpp +31 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ #include <string> #include "flatten/XmlFlattener.h" #include "io/StringInputStream.h" #include "test/Test.h" Loading Loading @@ -51,6 +52,36 @@ TEST(XmlDomTest, Inflate) { EXPECT_THAT(el->namespace_decls[0].prefix, StrEq("android")); } TEST(XmlDomTest, BinaryInflate) { std::unique_ptr<IAaptContext> context = test::ContextBuilder().Build(); std::unique_ptr<XmlResource> doc = util::make_unique<XmlResource>(); doc->root = util::make_unique<Element>(); doc->root->name = "Layout"; doc->root->line_number = 2u; NamespaceDecl decl; decl.uri = kSchemaAndroid; decl.prefix = "android"; decl.line_number = 2u; doc->root->namespace_decls.push_back(decl); BigBuffer buffer(4096); XmlFlattener flattener(&buffer, {}); ASSERT_TRUE(flattener.Consume(context.get(), doc.get())); auto block = util::Copy(buffer); std::unique_ptr<XmlResource> new_doc = Inflate(block.get(), buffer.size(), context->GetDiagnostics(), Source("test.xml")); ASSERT_THAT(new_doc, NotNull()); EXPECT_THAT(new_doc->root->name, StrEq("Layout")); EXPECT_THAT(new_doc->root->line_number, Eq(2u)); ASSERT_THAT(new_doc->root->namespace_decls, SizeIs(1u)); EXPECT_THAT(new_doc->root->namespace_decls[0].uri, StrEq(kSchemaAndroid)); EXPECT_THAT(new_doc->root->namespace_decls[0].prefix, StrEq("android")); EXPECT_THAT(new_doc->root->namespace_decls[0].line_number, Eq(2u)); } // Escaping is handled after parsing of the values for resource-specific values. TEST(XmlDomTest, ForwardEscapes) { std::unique_ptr<XmlResource> doc = test::BuildXmlDom(R"( Loading