11ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski/* 21ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski * Copyright (C) 2015 The Android Open Source Project 31ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski * 41ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski * Licensed under the Apache License, Version 2.0 (the "License"); 51ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski * you may not use this file except in compliance with the License. 61ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski * You may obtain a copy of the License at 71ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski * 81ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski * http://www.apache.org/licenses/LICENSE-2.0 91ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski * 101ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski * Unless required by applicable law or agreed to in writing, software 111ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski * distributed under the License is distributed on an "AS IS" BASIS, 121ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 131ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski * See the License for the specific language governing permissions and 141ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski * limitations under the License. 151ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski */ 161ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski 17467f171315f9c2037fcd3eb5edcfabc40671bf7bAdam Lesinski#include "xml/XmlPullParser.h" 181ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski 19d5083f6f6b9bc76bbe64052bcec639eee752a321Adam Lesinski#include "androidfw/StringPiece.h" 20d5083f6f6b9bc76bbe64052bcec639eee752a321Adam Lesinski 21004511660671511ae88e0e837a6f92db28eadaefAdam Lesinski#include "io/StringStream.h" 22ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski#include "test/Test.h" 23d5083f6f6b9bc76bbe64052bcec639eee752a321Adam Lesinski 24efeb7af13be4446ce4a511a2ca707691e9a67c1eAdam Lesinskiusing ::aapt::io::StringInputStream; 25efeb7af13be4446ce4a511a2ca707691e9a67c1eAdam Lesinskiusing ::android::StringPiece; 26004511660671511ae88e0e837a6f92db28eadaefAdam Lesinskiusing ::testing::Eq; 27004511660671511ae88e0e837a6f92db28eadaefAdam Lesinskiusing ::testing::StrEq; 28004511660671511ae88e0e837a6f92db28eadaefAdam Lesinski 29004511660671511ae88e0e837a6f92db28eadaefAdam Lesinskiusing Event = ::aapt::xml::XmlPullParser::Event; 30ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski 311ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinskinamespace aapt { 32004511660671511ae88e0e837a6f92db28eadaefAdam Lesinskinamespace xml { 331ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski 341ab598f46c3ff520a67f9d80194847741f3467abAdam LesinskiTEST(XmlPullParserTest, NextChildNodeTraversesCorrectly) { 35efeb7af13be4446ce4a511a2ca707691e9a67c1eAdam Lesinski std::string str = 36efeb7af13be4446ce4a511a2ca707691e9a67c1eAdam Lesinski R"(<?xml version="1.0" encoding="utf-8"?> 37efeb7af13be4446ce4a511a2ca707691e9a67c1eAdam Lesinski <a><b><c xmlns:a="http://schema.org"><d/></c><e/></b></a>)"; 38efeb7af13be4446ce4a511a2ca707691e9a67c1eAdam Lesinski StringInputStream input(str); 39004511660671511ae88e0e837a6f92db28eadaefAdam Lesinski XmlPullParser parser(&input); 401ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski 41ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski const size_t depth_outer = parser.depth(); 42004511660671511ae88e0e837a6f92db28eadaefAdam Lesinski ASSERT_TRUE(XmlPullParser::NextChildNode(&parser, depth_outer)); 431ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski 44004511660671511ae88e0e837a6f92db28eadaefAdam Lesinski EXPECT_THAT(parser.event(), Eq(XmlPullParser::Event::kStartElement)); 45004511660671511ae88e0e837a6f92db28eadaefAdam Lesinski EXPECT_THAT(parser.element_name(), StrEq("a")); 461ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski 47ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski const size_t depth_a = parser.depth(); 48004511660671511ae88e0e837a6f92db28eadaefAdam Lesinski ASSERT_TRUE(XmlPullParser::NextChildNode(&parser, depth_a)); 49004511660671511ae88e0e837a6f92db28eadaefAdam Lesinski EXPECT_THAT(parser.event(), Eq(XmlPullParser::Event::kStartElement)); 50004511660671511ae88e0e837a6f92db28eadaefAdam Lesinski EXPECT_THAT(parser.element_name(), StrEq("b")); 511ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski 52ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski const size_t depth_b = parser.depth(); 53004511660671511ae88e0e837a6f92db28eadaefAdam Lesinski ASSERT_TRUE(XmlPullParser::NextChildNode(&parser, depth_b)); 54004511660671511ae88e0e837a6f92db28eadaefAdam Lesinski EXPECT_THAT(parser.event(), Eq(XmlPullParser::Event::kStartElement)); 55004511660671511ae88e0e837a6f92db28eadaefAdam Lesinski EXPECT_THAT(parser.element_name(), StrEq("c")); 561ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski 57004511660671511ae88e0e837a6f92db28eadaefAdam Lesinski ASSERT_TRUE(XmlPullParser::NextChildNode(&parser, depth_b)); 58004511660671511ae88e0e837a6f92db28eadaefAdam Lesinski EXPECT_THAT(parser.event(), Eq(XmlPullParser::Event::kStartElement)); 59004511660671511ae88e0e837a6f92db28eadaefAdam Lesinski EXPECT_THAT(parser.element_name(), StrEq("e")); 601ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski 61004511660671511ae88e0e837a6f92db28eadaefAdam Lesinski ASSERT_FALSE(XmlPullParser::NextChildNode(&parser, depth_outer)); 62004511660671511ae88e0e837a6f92db28eadaefAdam Lesinski EXPECT_THAT(parser.event(), Eq(XmlPullParser::Event::kEndDocument)); 631ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski} 641ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski 65004511660671511ae88e0e837a6f92db28eadaefAdam Lesinski} // namespace xml 66ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski} // namespace aapt 67