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