XmlDom_test.cpp revision ac6edc501b61e14e3b70ccbbd4d8ed112d92b96c
1/* 2 * Copyright (C) 2015 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17#include "xml/XmlDom.h" 18 19#include <sstream> 20#include <string> 21 22#include "test/Test.h" 23 24namespace aapt { 25 26constexpr const char* kXmlPreamble = 27 "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"; 28 29TEST(XmlDomTest, Inflate) { 30 std::stringstream in(kXmlPreamble); 31 in << R"EOF( 32 <Layout xmlns:android="http://schemas.android.com/apk/res/android" 33 android:layout_width="match_parent" 34 android:layout_height="wrap_content"> 35 <TextView android:id="@+id/id" 36 android:layout_width="wrap_content" 37 android:layout_height="wrap_content" /> 38 </Layout> 39 )EOF"; 40 41 const Source source = {"test.xml"}; 42 StdErrDiagnostics diag; 43 std::unique_ptr<xml::XmlResource> doc = xml::Inflate(&in, &diag, source); 44 ASSERT_NE(doc, nullptr); 45 46 xml::Namespace* ns = xml::NodeCast<xml::Namespace>(doc->root.get()); 47 ASSERT_NE(ns, nullptr); 48 EXPECT_EQ(ns->namespace_uri, xml::kSchemaAndroid); 49 EXPECT_EQ(ns->namespace_prefix, "android"); 50} 51 52TEST(XmlDomTest, HandleEscapes) { 53 std::unique_ptr<xml::XmlResource> doc = test::BuildXmlDom( 54 R"EOF(<shortcode pattern="\\d{5}">\\d{5}</shortcode>)EOF"); 55 56 xml::Element* el = xml::FindRootElement(doc->root.get()); 57 ASSERT_NE(nullptr, el); 58 59 xml::Attribute* attr = el->FindAttribute({}, "pattern"); 60 ASSERT_NE(nullptr, attr); 61 62 EXPECT_EQ("\\d{5}", attr->value); 63 64 ASSERT_EQ(1u, el->children.size()); 65 66 xml::Text* text = xml::NodeCast<xml::Text>(el->children[0].get()); 67 ASSERT_NE(nullptr, text); 68 EXPECT_EQ("\\d{5}", text->text); 69} 70 71} // namespace aapt 72