/* * Copyright (C) 2016 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "link/Linkers.h" #include "test/Test.h" using ::testing::NotNull; using ::testing::SizeIs; using ::testing::StrEq; namespace aapt { class XmlUriTestVisitor : public xml::Visitor { public: XmlUriTestVisitor() = default; void Visit(xml::Element* el) override { EXPECT_THAT(el->namespace_decls, SizeIs(0u)); for (const auto& attr : el->attributes) { EXPECT_THAT(attr.namespace_uri, StrEq("")); } EXPECT_THAT(el->namespace_uri, StrEq("")); xml::Visitor::Visit(el); } private: DISALLOW_COPY_AND_ASSIGN(XmlUriTestVisitor); }; class XmlNamespaceTestVisitor : public xml::Visitor { public: XmlNamespaceTestVisitor() = default; void Visit(xml::Element* el) override { EXPECT_THAT(el->namespace_decls, SizeIs(0u)); xml::Visitor::Visit(el); } private: DISALLOW_COPY_AND_ASSIGN(XmlNamespaceTestVisitor); }; class XmlNamespaceRemoverTest : public ::testing::Test { public: void SetUp() override { context_ = test::ContextBuilder().SetCompilationPackage("com.app.test").Build(); } protected: std::unique_ptr context_; }; TEST_F(XmlNamespaceRemoverTest, RemoveUris) { std::unique_ptr doc = test::BuildXmlDomForPackageName(context_.get(), R"EOF( )EOF"); XmlNamespaceRemover remover; ASSERT_TRUE(remover.Consume(context_.get(), doc.get())); xml::Node* root = doc->root.get(); ASSERT_THAT(root, NotNull()); XmlUriTestVisitor visitor; root->Accept(&visitor); } TEST_F(XmlNamespaceRemoverTest, RemoveNamespaces) { std::unique_ptr doc = test::BuildXmlDomForPackageName(context_.get(), R"EOF( )EOF"); XmlNamespaceRemover remover; ASSERT_TRUE(remover.Consume(context_.get(), doc.get())); xml::Node* root = doc->root.get(); ASSERT_THAT(root, NotNull()); XmlNamespaceTestVisitor visitor; root->Accept(&visitor); } TEST_F(XmlNamespaceRemoverTest, RemoveNestedNamespaces) { std::unique_ptr doc = test::BuildXmlDomForPackageName(context_.get(), R"EOF( )EOF"); XmlNamespaceRemover remover; ASSERT_TRUE(remover.Consume(context_.get(), doc.get())); xml::Node* root = doc->root.get(); ASSERT_THAT(root, NotNull()); XmlNamespaceTestVisitor visitor; root->Accept(&visitor); } } // namespace aapt