blob: 342f305bb11d834a0ff4285be58d7ef739e0f88a [file] [log] [blame]
Adam Lesinski6f6ceb72014-11-14 14:48:12 -08001/*
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 "ScopedXmlPullParser.h"
18#include "SourceXmlPullParser.h"
19
20#include <gtest/gtest.h>
21#include <sstream>
22#include <string>
23
24namespace aapt {
25
26TEST(ScopedXmlPullParserTest, StopIteratingAtNoNZeroDepth) {
27 std::stringstream input;
28 input << "<?xml version=\"1.0\" encoding=\"utf-8\"?>" << std::endl
29 << "<resources><string></string></resources>" << std::endl;
30
31 SourceXmlPullParser sourceParser(input);
32 EXPECT_EQ(XmlPullParser::Event::kStartElement, sourceParser.next());
33 EXPECT_EQ(std::u16string(u"resources"), sourceParser.getElementName());
34
35 EXPECT_EQ(XmlPullParser::Event::kStartElement, sourceParser.next());
36 EXPECT_EQ(std::u16string(u"string"), sourceParser.getElementName());
37
38 {
39 ScopedXmlPullParser scopedParser(&sourceParser);
40 EXPECT_EQ(XmlPullParser::Event::kEndElement, scopedParser.next());
41 EXPECT_EQ(std::u16string(u"string"), sourceParser.getElementName());
42
43 EXPECT_EQ(XmlPullParser::Event::kEndDocument, scopedParser.next());
44 }
45
46 EXPECT_EQ(XmlPullParser::Event::kEndElement, sourceParser.next());
47 EXPECT_EQ(std::u16string(u"resources"), sourceParser.getElementName());
48
49 EXPECT_EQ(XmlPullParser::Event::kEndDocument, sourceParser.next());
50}
51
52TEST(ScopedXmlPullParserTest, FinishCurrentElementOnDestruction) {
53 std::stringstream input;
54 input << "<?xml version=\"1.0\" encoding=\"utf-8\"?>" << std::endl
55 << "<resources><string></string></resources>" << std::endl;
56
57 SourceXmlPullParser sourceParser(input);
58 EXPECT_EQ(XmlPullParser::Event::kStartElement, sourceParser.next());
59 EXPECT_EQ(std::u16string(u"resources"), sourceParser.getElementName());
60
61 EXPECT_EQ(XmlPullParser::Event::kStartElement, sourceParser.next());
62 EXPECT_EQ(std::u16string(u"string"), sourceParser.getElementName());
63
64 {
65 ScopedXmlPullParser scopedParser(&sourceParser);
66 EXPECT_EQ(std::u16string(u"string"), sourceParser.getElementName());
67 }
68
69 EXPECT_EQ(XmlPullParser::Event::kEndElement, sourceParser.next());
70 EXPECT_EQ(std::u16string(u"resources"), sourceParser.getElementName());
71
72 EXPECT_EQ(XmlPullParser::Event::kEndDocument, sourceParser.next());
73}
74
75TEST(ScopedXmlPullParserTest, NestedParsersOperateCorrectly) {
76 std::stringstream input;
77 input << "<?xml version=\"1.0\" encoding=\"utf-8\"?>" << std::endl
78 << "<resources><string><foo></foo></string></resources>" << std::endl;
79
80 SourceXmlPullParser sourceParser(input);
81 EXPECT_EQ(XmlPullParser::Event::kStartElement, sourceParser.next());
82 EXPECT_EQ(std::u16string(u"resources"), sourceParser.getElementName());
83
84 EXPECT_EQ(XmlPullParser::Event::kStartElement, sourceParser.next());
85 EXPECT_EQ(std::u16string(u"string"), sourceParser.getElementName());
86
87 {
88 ScopedXmlPullParser scopedParser(&sourceParser);
89 EXPECT_EQ(std::u16string(u"string"), scopedParser.getElementName());
90 while (XmlPullParser::isGoodEvent(scopedParser.next())) {
91 if (scopedParser.getEvent() != XmlPullParser::Event::kStartElement) {
92 continue;
93 }
94
95 ScopedXmlPullParser subScopedParser(&scopedParser);
96 EXPECT_EQ(std::u16string(u"foo"), subScopedParser.getElementName());
97 }
98 }
99
100 EXPECT_EQ(XmlPullParser::Event::kEndElement, sourceParser.next());
101 EXPECT_EQ(std::u16string(u"resources"), sourceParser.getElementName());
102
103 EXPECT_EQ(XmlPullParser::Event::kEndDocument, sourceParser.next());
104}
105
106} // namespace aapt