diff options
author | Adam Lesinski <adamlesinski@google.com> | 2017-10-02 16:37:20 -0700 |
---|---|---|
committer | Adam Lesinski <adamlesinski@google.com> | 2017-10-02 17:00:07 -0700 |
commit | 0da683bd8da55a0cfa46dfe8076b729b945d6650 (patch) | |
tree | cbfd404fadce2b7e664ec8ddba5aad6b8881a900 /tools/aapt2/xml/XmlDom_test.cpp | |
parent | 96b9ddbcb26f39bc26010d44856998967e384930 (diff) |
AAPT2: Preserve line numbers when deserializing from binary XML
Bug: 65827146
Test: make aapt2_tests
Change-Id: Idbfea640eb8727fe209ebc6eb072296845d9f282
Diffstat (limited to 'tools/aapt2/xml/XmlDom_test.cpp')
-rw-r--r-- | tools/aapt2/xml/XmlDom_test.cpp | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/tools/aapt2/xml/XmlDom_test.cpp b/tools/aapt2/xml/XmlDom_test.cpp index 6ed2d616f782..b501cfd4b8b9 100644 --- a/tools/aapt2/xml/XmlDom_test.cpp +++ b/tools/aapt2/xml/XmlDom_test.cpp @@ -18,6 +18,7 @@ #include <string> +#include "flatten/XmlFlattener.h" #include "io/StringInputStream.h" #include "test/Test.h" @@ -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"( |