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/XmlPullParser.h" 18 19#include <sstream> 20 21#include "androidfw/StringPiece.h" 22 23#include "test/Test.h" 24 25using android::StringPiece; 26 27namespace aapt { 28 29TEST(XmlPullParserTest, NextChildNodeTraversesCorrectly) { 30 std::stringstream str; 31 str << "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" 32 "<a><b><c xmlns:a=\"http://schema.org\"><d/></c><e/></b></a>"; 33 xml::XmlPullParser parser(str); 34 35 const size_t depth_outer = parser.depth(); 36 ASSERT_TRUE(xml::XmlPullParser::NextChildNode(&parser, depth_outer)); 37 38 EXPECT_EQ(xml::XmlPullParser::Event::kStartElement, parser.event()); 39 EXPECT_EQ(StringPiece("a"), StringPiece(parser.element_name())); 40 41 const size_t depth_a = parser.depth(); 42 ASSERT_TRUE(xml::XmlPullParser::NextChildNode(&parser, depth_a)); 43 EXPECT_EQ(xml::XmlPullParser::Event::kStartElement, parser.event()); 44 EXPECT_EQ(StringPiece("b"), StringPiece(parser.element_name())); 45 46 const size_t depth_b = parser.depth(); 47 ASSERT_TRUE(xml::XmlPullParser::NextChildNode(&parser, depth_b)); 48 EXPECT_EQ(xml::XmlPullParser::Event::kStartElement, parser.event()); 49 EXPECT_EQ(StringPiece("c"), StringPiece(parser.element_name())); 50 51 ASSERT_TRUE(xml::XmlPullParser::NextChildNode(&parser, depth_b)); 52 EXPECT_EQ(xml::XmlPullParser::Event::kStartElement, parser.event()); 53 EXPECT_EQ(StringPiece("e"), StringPiece(parser.element_name())); 54 55 ASSERT_FALSE(xml::XmlPullParser::NextChildNode(&parser, depth_outer)); 56 EXPECT_EQ(xml::XmlPullParser::Event::kEndDocument, parser.event()); 57} 58 59} // namespace aapt 60