1cc5609d8e484ec82ef1dced793af7f674f059b1cAdam Lesinski/* 2cc5609d8e484ec82ef1dced793af7f674f059b1cAdam Lesinski * Copyright (C) 2016 The Android Open Source Project 3cc5609d8e484ec82ef1dced793af7f674f059b1cAdam Lesinski * 4cc5609d8e484ec82ef1dced793af7f674f059b1cAdam Lesinski * Licensed under the Apache License, Version 2.0 (the "License"); 5cc5609d8e484ec82ef1dced793af7f674f059b1cAdam Lesinski * you may not use this file except in compliance with the License. 6cc5609d8e484ec82ef1dced793af7f674f059b1cAdam Lesinski * You may obtain a copy of the License at 7cc5609d8e484ec82ef1dced793af7f674f059b1cAdam Lesinski * 8cc5609d8e484ec82ef1dced793af7f674f059b1cAdam Lesinski * http://www.apache.org/licenses/LICENSE-2.0 9cc5609d8e484ec82ef1dced793af7f674f059b1cAdam Lesinski * 10cc5609d8e484ec82ef1dced793af7f674f059b1cAdam Lesinski * Unless required by applicable law or agreed to in writing, software 11cc5609d8e484ec82ef1dced793af7f674f059b1cAdam Lesinski * distributed under the License is distributed on an "AS IS" BASIS, 12cc5609d8e484ec82ef1dced793af7f674f059b1cAdam Lesinski * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13cc5609d8e484ec82ef1dced793af7f674f059b1cAdam Lesinski * See the License for the specific language governing permissions and 14cc5609d8e484ec82ef1dced793af7f674f059b1cAdam Lesinski * limitations under the License. 15cc5609d8e484ec82ef1dced793af7f674f059b1cAdam Lesinski */ 16cc5609d8e484ec82ef1dced793af7f674f059b1cAdam Lesinski 17cc5609d8e484ec82ef1dced793af7f674f059b1cAdam Lesinski#include "test/Test.h" 18cc5609d8e484ec82ef1dced793af7f674f059b1cAdam Lesinski#include "xml/XmlActionExecutor.h" 19cc5609d8e484ec82ef1dced793af7f674f059b1cAdam Lesinski 20cc5609d8e484ec82ef1dced793af7f674f059b1cAdam Lesinskinamespace aapt { 21cc5609d8e484ec82ef1dced793af7f674f059b1cAdam Lesinskinamespace xml { 22cc5609d8e484ec82ef1dced793af7f674f059b1cAdam Lesinski 23cc5609d8e484ec82ef1dced793af7f674f059b1cAdam LesinskiTEST(XmlActionExecutorTest, BuildsAccessibleNestedPattern) { 24cc5609d8e484ec82ef1dced793af7f674f059b1cAdam Lesinski XmlActionExecutor executor; 25cc5609d8e484ec82ef1dced793af7f674f059b1cAdam Lesinski XmlNodeAction& manifestAction = executor[u"manifest"]; 26cc5609d8e484ec82ef1dced793af7f674f059b1cAdam Lesinski XmlNodeAction& applicationAction = manifestAction[u"application"]; 27cc5609d8e484ec82ef1dced793af7f674f059b1cAdam Lesinski 28cc5609d8e484ec82ef1dced793af7f674f059b1cAdam Lesinski Element* manifestEl = nullptr; 29cc5609d8e484ec82ef1dced793af7f674f059b1cAdam Lesinski manifestAction.action([&](Element* manifest) -> bool { 30cc5609d8e484ec82ef1dced793af7f674f059b1cAdam Lesinski manifestEl = manifest; 31cc5609d8e484ec82ef1dced793af7f674f059b1cAdam Lesinski return true; 32cc5609d8e484ec82ef1dced793af7f674f059b1cAdam Lesinski }); 33cc5609d8e484ec82ef1dced793af7f674f059b1cAdam Lesinski 34cc5609d8e484ec82ef1dced793af7f674f059b1cAdam Lesinski Element* applicationEl = nullptr; 35cc5609d8e484ec82ef1dced793af7f674f059b1cAdam Lesinski applicationAction.action([&](Element* application) -> bool { 36cc5609d8e484ec82ef1dced793af7f674f059b1cAdam Lesinski applicationEl = application; 37cc5609d8e484ec82ef1dced793af7f674f059b1cAdam Lesinski return true; 38cc5609d8e484ec82ef1dced793af7f674f059b1cAdam Lesinski }); 39cc5609d8e484ec82ef1dced793af7f674f059b1cAdam Lesinski 40cc5609d8e484ec82ef1dced793af7f674f059b1cAdam Lesinski std::unique_ptr<XmlResource> doc = test::buildXmlDom("<manifest><application /></manifest>"); 41cc5609d8e484ec82ef1dced793af7f674f059b1cAdam Lesinski 42cc5609d8e484ec82ef1dced793af7f674f059b1cAdam Lesinski StdErrDiagnostics diag; 43cc5609d8e484ec82ef1dced793af7f674f059b1cAdam Lesinski ASSERT_TRUE(executor.execute(XmlActionExecutorPolicy::None, &diag, doc.get())); 44cc5609d8e484ec82ef1dced793af7f674f059b1cAdam Lesinski ASSERT_NE(nullptr, manifestEl); 45cc5609d8e484ec82ef1dced793af7f674f059b1cAdam Lesinski EXPECT_EQ(std::u16string(u"manifest"), manifestEl->name); 46cc5609d8e484ec82ef1dced793af7f674f059b1cAdam Lesinski 47cc5609d8e484ec82ef1dced793af7f674f059b1cAdam Lesinski ASSERT_NE(nullptr, applicationEl); 48cc5609d8e484ec82ef1dced793af7f674f059b1cAdam Lesinski EXPECT_EQ(std::u16string(u"application"), applicationEl->name); 49cc5609d8e484ec82ef1dced793af7f674f059b1cAdam Lesinski} 50cc5609d8e484ec82ef1dced793af7f674f059b1cAdam Lesinski 51cc5609d8e484ec82ef1dced793af7f674f059b1cAdam LesinskiTEST(XmlActionExecutorTest, FailsWhenUndefinedHierarchyExists) { 52cc5609d8e484ec82ef1dced793af7f674f059b1cAdam Lesinski XmlActionExecutor executor; 53cc5609d8e484ec82ef1dced793af7f674f059b1cAdam Lesinski executor[u"manifest"][u"application"]; 54cc5609d8e484ec82ef1dced793af7f674f059b1cAdam Lesinski 55cc5609d8e484ec82ef1dced793af7f674f059b1cAdam Lesinski std::unique_ptr<XmlResource> doc = test::buildXmlDom( 56cc5609d8e484ec82ef1dced793af7f674f059b1cAdam Lesinski "<manifest><application /><activity /></manifest>"); 57cc5609d8e484ec82ef1dced793af7f674f059b1cAdam Lesinski StdErrDiagnostics diag; 58cc5609d8e484ec82ef1dced793af7f674f059b1cAdam Lesinski ASSERT_FALSE(executor.execute(XmlActionExecutorPolicy::Whitelist, &diag, doc.get())); 59cc5609d8e484ec82ef1dced793af7f674f059b1cAdam Lesinski} 60cc5609d8e484ec82ef1dced793af7f674f059b1cAdam Lesinski 61cc5609d8e484ec82ef1dced793af7f674f059b1cAdam Lesinski} // namespace xml 62cc5609d8e484ec82ef1dced793af7f674f059b1cAdam Lesinski} // namespace aapt 63