xref: /minix3/external/bsd/llvm/dist/llvm/unittests/Support/LineIteratorTest.cpp (revision 0a6a1f1d05b60e214de2f05a7310ddd1f0e590e7)
1*0a6a1f1dSLionel Sambuc //===- LineIterator.cpp - Unit tests --------------------------------------===//
2*0a6a1f1dSLionel Sambuc //
3*0a6a1f1dSLionel Sambuc //                     The LLVM Compiler Infrastructure
4*0a6a1f1dSLionel Sambuc //
5*0a6a1f1dSLionel Sambuc // This file is distributed under the University of Illinois Open Source
6*0a6a1f1dSLionel Sambuc // License. See LICENSE.TXT for details.
7*0a6a1f1dSLionel Sambuc //
8*0a6a1f1dSLionel Sambuc //===----------------------------------------------------------------------===//
9*0a6a1f1dSLionel Sambuc 
10*0a6a1f1dSLionel Sambuc #include "llvm/Support/LineIterator.h"
11*0a6a1f1dSLionel Sambuc #include "llvm/Support/MemoryBuffer.h"
12*0a6a1f1dSLionel Sambuc #include "gtest/gtest.h"
13*0a6a1f1dSLionel Sambuc 
14*0a6a1f1dSLionel Sambuc using namespace llvm;
15*0a6a1f1dSLionel Sambuc using namespace llvm::sys;
16*0a6a1f1dSLionel Sambuc 
17*0a6a1f1dSLionel Sambuc namespace {
18*0a6a1f1dSLionel Sambuc 
TEST(LineIteratorTest,Basic)19*0a6a1f1dSLionel Sambuc TEST(LineIteratorTest, Basic) {
20*0a6a1f1dSLionel Sambuc   std::unique_ptr<MemoryBuffer> Buffer = MemoryBuffer::getMemBuffer("line 1\n"
21*0a6a1f1dSLionel Sambuc                                                                     "line 2\n"
22*0a6a1f1dSLionel Sambuc                                                                     "line 3");
23*0a6a1f1dSLionel Sambuc 
24*0a6a1f1dSLionel Sambuc   line_iterator I = line_iterator(*Buffer), E;
25*0a6a1f1dSLionel Sambuc 
26*0a6a1f1dSLionel Sambuc   EXPECT_FALSE(I.is_at_eof());
27*0a6a1f1dSLionel Sambuc   EXPECT_NE(E, I);
28*0a6a1f1dSLionel Sambuc 
29*0a6a1f1dSLionel Sambuc   EXPECT_EQ("line 1", *I);
30*0a6a1f1dSLionel Sambuc   EXPECT_EQ(1, I.line_number());
31*0a6a1f1dSLionel Sambuc   ++I;
32*0a6a1f1dSLionel Sambuc   EXPECT_EQ("line 2", *I);
33*0a6a1f1dSLionel Sambuc   EXPECT_EQ(2, I.line_number());
34*0a6a1f1dSLionel Sambuc   ++I;
35*0a6a1f1dSLionel Sambuc   EXPECT_EQ("line 3", *I);
36*0a6a1f1dSLionel Sambuc   EXPECT_EQ(3, I.line_number());
37*0a6a1f1dSLionel Sambuc   ++I;
38*0a6a1f1dSLionel Sambuc 
39*0a6a1f1dSLionel Sambuc   EXPECT_TRUE(I.is_at_eof());
40*0a6a1f1dSLionel Sambuc   EXPECT_EQ(E, I);
41*0a6a1f1dSLionel Sambuc }
42*0a6a1f1dSLionel Sambuc 
TEST(LineIteratorTest,CommentAndBlankSkipping)43*0a6a1f1dSLionel Sambuc TEST(LineIteratorTest, CommentAndBlankSkipping) {
44*0a6a1f1dSLionel Sambuc   std::unique_ptr<MemoryBuffer> Buffer(
45*0a6a1f1dSLionel Sambuc       MemoryBuffer::getMemBuffer("line 1\n"
46*0a6a1f1dSLionel Sambuc                                  "line 2\n"
47*0a6a1f1dSLionel Sambuc                                  "# Comment 1\n"
48*0a6a1f1dSLionel Sambuc                                  "\n"
49*0a6a1f1dSLionel Sambuc                                  "line 5\n"
50*0a6a1f1dSLionel Sambuc                                  "\n"
51*0a6a1f1dSLionel Sambuc                                  "# Comment 2"));
52*0a6a1f1dSLionel Sambuc 
53*0a6a1f1dSLionel Sambuc   line_iterator I = line_iterator(*Buffer, true, '#'), E;
54*0a6a1f1dSLionel Sambuc 
55*0a6a1f1dSLionel Sambuc   EXPECT_FALSE(I.is_at_eof());
56*0a6a1f1dSLionel Sambuc   EXPECT_NE(E, I);
57*0a6a1f1dSLionel Sambuc 
58*0a6a1f1dSLionel Sambuc   EXPECT_EQ("line 1", *I);
59*0a6a1f1dSLionel Sambuc   EXPECT_EQ(1, I.line_number());
60*0a6a1f1dSLionel Sambuc   ++I;
61*0a6a1f1dSLionel Sambuc   EXPECT_EQ("line 2", *I);
62*0a6a1f1dSLionel Sambuc   EXPECT_EQ(2, I.line_number());
63*0a6a1f1dSLionel Sambuc   ++I;
64*0a6a1f1dSLionel Sambuc   EXPECT_EQ("line 5", *I);
65*0a6a1f1dSLionel Sambuc   EXPECT_EQ(5, I.line_number());
66*0a6a1f1dSLionel Sambuc   ++I;
67*0a6a1f1dSLionel Sambuc 
68*0a6a1f1dSLionel Sambuc   EXPECT_TRUE(I.is_at_eof());
69*0a6a1f1dSLionel Sambuc   EXPECT_EQ(E, I);
70*0a6a1f1dSLionel Sambuc }
71*0a6a1f1dSLionel Sambuc 
TEST(LineIteratorTest,CommentSkippingKeepBlanks)72*0a6a1f1dSLionel Sambuc TEST(LineIteratorTest, CommentSkippingKeepBlanks) {
73*0a6a1f1dSLionel Sambuc   std::unique_ptr<MemoryBuffer> Buffer(
74*0a6a1f1dSLionel Sambuc       MemoryBuffer::getMemBuffer("line 1\n"
75*0a6a1f1dSLionel Sambuc                                  "line 2\n"
76*0a6a1f1dSLionel Sambuc                                  "# Comment 1\n"
77*0a6a1f1dSLionel Sambuc                                  "# Comment 2\n"
78*0a6a1f1dSLionel Sambuc                                  "\n"
79*0a6a1f1dSLionel Sambuc                                  "line 6\n"
80*0a6a1f1dSLionel Sambuc                                  "\n"
81*0a6a1f1dSLionel Sambuc                                  "# Comment 3"));
82*0a6a1f1dSLionel Sambuc 
83*0a6a1f1dSLionel Sambuc   line_iterator I = line_iterator(*Buffer, false, '#'), E;
84*0a6a1f1dSLionel Sambuc 
85*0a6a1f1dSLionel Sambuc   EXPECT_FALSE(I.is_at_eof());
86*0a6a1f1dSLionel Sambuc   EXPECT_NE(E, I);
87*0a6a1f1dSLionel Sambuc 
88*0a6a1f1dSLionel Sambuc   EXPECT_EQ("line 1", *I);
89*0a6a1f1dSLionel Sambuc   EXPECT_EQ(1, I.line_number());
90*0a6a1f1dSLionel Sambuc   ++I;
91*0a6a1f1dSLionel Sambuc   EXPECT_EQ("line 2", *I);
92*0a6a1f1dSLionel Sambuc   EXPECT_EQ(2, I.line_number());
93*0a6a1f1dSLionel Sambuc   ++I;
94*0a6a1f1dSLionel Sambuc   EXPECT_EQ("", *I);
95*0a6a1f1dSLionel Sambuc   EXPECT_EQ(5, I.line_number());
96*0a6a1f1dSLionel Sambuc   ++I;
97*0a6a1f1dSLionel Sambuc   EXPECT_EQ("line 6", *I);
98*0a6a1f1dSLionel Sambuc   EXPECT_EQ(6, I.line_number());
99*0a6a1f1dSLionel Sambuc   ++I;
100*0a6a1f1dSLionel Sambuc   EXPECT_EQ("", *I);
101*0a6a1f1dSLionel Sambuc   EXPECT_EQ(7, I.line_number());
102*0a6a1f1dSLionel Sambuc   ++I;
103*0a6a1f1dSLionel Sambuc 
104*0a6a1f1dSLionel Sambuc   EXPECT_TRUE(I.is_at_eof());
105*0a6a1f1dSLionel Sambuc   EXPECT_EQ(E, I);
106*0a6a1f1dSLionel Sambuc }
107*0a6a1f1dSLionel Sambuc 
108*0a6a1f1dSLionel Sambuc 
TEST(LineIteratorTest,BlankSkipping)109*0a6a1f1dSLionel Sambuc TEST(LineIteratorTest, BlankSkipping) {
110*0a6a1f1dSLionel Sambuc   std::unique_ptr<MemoryBuffer> Buffer = MemoryBuffer::getMemBuffer("\n\n\n"
111*0a6a1f1dSLionel Sambuc                                                                     "line 1\n"
112*0a6a1f1dSLionel Sambuc                                                                     "\n\n\n"
113*0a6a1f1dSLionel Sambuc                                                                     "line 2\n"
114*0a6a1f1dSLionel Sambuc                                                                     "\n\n\n");
115*0a6a1f1dSLionel Sambuc 
116*0a6a1f1dSLionel Sambuc   line_iterator I = line_iterator(*Buffer), E;
117*0a6a1f1dSLionel Sambuc 
118*0a6a1f1dSLionel Sambuc   EXPECT_FALSE(I.is_at_eof());
119*0a6a1f1dSLionel Sambuc   EXPECT_NE(E, I);
120*0a6a1f1dSLionel Sambuc 
121*0a6a1f1dSLionel Sambuc   EXPECT_EQ("line 1", *I);
122*0a6a1f1dSLionel Sambuc   EXPECT_EQ(4, I.line_number());
123*0a6a1f1dSLionel Sambuc   ++I;
124*0a6a1f1dSLionel Sambuc   EXPECT_EQ("line 2", *I);
125*0a6a1f1dSLionel Sambuc   EXPECT_EQ(8, I.line_number());
126*0a6a1f1dSLionel Sambuc   ++I;
127*0a6a1f1dSLionel Sambuc 
128*0a6a1f1dSLionel Sambuc   EXPECT_TRUE(I.is_at_eof());
129*0a6a1f1dSLionel Sambuc   EXPECT_EQ(E, I);
130*0a6a1f1dSLionel Sambuc }
131*0a6a1f1dSLionel Sambuc 
TEST(LineIteratorTest,BlankKeeping)132*0a6a1f1dSLionel Sambuc TEST(LineIteratorTest, BlankKeeping) {
133*0a6a1f1dSLionel Sambuc   std::unique_ptr<MemoryBuffer> Buffer = MemoryBuffer::getMemBuffer("\n\n"
134*0a6a1f1dSLionel Sambuc                                                                     "line 3\n"
135*0a6a1f1dSLionel Sambuc                                                                     "\n"
136*0a6a1f1dSLionel Sambuc                                                                     "line 5\n"
137*0a6a1f1dSLionel Sambuc                                                                     "\n\n");
138*0a6a1f1dSLionel Sambuc   line_iterator I = line_iterator(*Buffer, false), E;
139*0a6a1f1dSLionel Sambuc 
140*0a6a1f1dSLionel Sambuc   EXPECT_FALSE(I.is_at_eof());
141*0a6a1f1dSLionel Sambuc   EXPECT_NE(E, I);
142*0a6a1f1dSLionel Sambuc 
143*0a6a1f1dSLionel Sambuc   EXPECT_EQ("", *I);
144*0a6a1f1dSLionel Sambuc   EXPECT_EQ(1, I.line_number());
145*0a6a1f1dSLionel Sambuc   ++I;
146*0a6a1f1dSLionel Sambuc   EXPECT_EQ("", *I);
147*0a6a1f1dSLionel Sambuc   EXPECT_EQ(2, I.line_number());
148*0a6a1f1dSLionel Sambuc   ++I;
149*0a6a1f1dSLionel Sambuc   EXPECT_EQ("line 3", *I);
150*0a6a1f1dSLionel Sambuc   EXPECT_EQ(3, I.line_number());
151*0a6a1f1dSLionel Sambuc   ++I;
152*0a6a1f1dSLionel Sambuc   EXPECT_EQ("", *I);
153*0a6a1f1dSLionel Sambuc   EXPECT_EQ(4, I.line_number());
154*0a6a1f1dSLionel Sambuc   ++I;
155*0a6a1f1dSLionel Sambuc   EXPECT_EQ("line 5", *I);
156*0a6a1f1dSLionel Sambuc   EXPECT_EQ(5, I.line_number());
157*0a6a1f1dSLionel Sambuc   ++I;
158*0a6a1f1dSLionel Sambuc   EXPECT_EQ("", *I);
159*0a6a1f1dSLionel Sambuc   EXPECT_EQ(6, I.line_number());
160*0a6a1f1dSLionel Sambuc   ++I;
161*0a6a1f1dSLionel Sambuc   EXPECT_EQ("", *I);
162*0a6a1f1dSLionel Sambuc   EXPECT_EQ(7, I.line_number());
163*0a6a1f1dSLionel Sambuc   ++I;
164*0a6a1f1dSLionel Sambuc 
165*0a6a1f1dSLionel Sambuc   EXPECT_TRUE(I.is_at_eof());
166*0a6a1f1dSLionel Sambuc   EXPECT_EQ(E, I);
167*0a6a1f1dSLionel Sambuc }
168*0a6a1f1dSLionel Sambuc 
TEST(LineIteratorTest,EmptyBuffers)169*0a6a1f1dSLionel Sambuc TEST(LineIteratorTest, EmptyBuffers) {
170*0a6a1f1dSLionel Sambuc   std::unique_ptr<MemoryBuffer> Buffer = MemoryBuffer::getMemBuffer("");
171*0a6a1f1dSLionel Sambuc   EXPECT_TRUE(line_iterator(*Buffer).is_at_eof());
172*0a6a1f1dSLionel Sambuc   EXPECT_EQ(line_iterator(), line_iterator(*Buffer));
173*0a6a1f1dSLionel Sambuc   EXPECT_TRUE(line_iterator(*Buffer, false).is_at_eof());
174*0a6a1f1dSLionel Sambuc   EXPECT_EQ(line_iterator(), line_iterator(*Buffer, false));
175*0a6a1f1dSLionel Sambuc 
176*0a6a1f1dSLionel Sambuc   Buffer = MemoryBuffer::getMemBuffer("\n\n\n");
177*0a6a1f1dSLionel Sambuc   EXPECT_TRUE(line_iterator(*Buffer).is_at_eof());
178*0a6a1f1dSLionel Sambuc   EXPECT_EQ(line_iterator(), line_iterator(*Buffer));
179*0a6a1f1dSLionel Sambuc 
180*0a6a1f1dSLionel Sambuc   Buffer = MemoryBuffer::getMemBuffer("# foo\n"
181*0a6a1f1dSLionel Sambuc                                       "\n"
182*0a6a1f1dSLionel Sambuc                                       "# bar");
183*0a6a1f1dSLionel Sambuc   EXPECT_TRUE(line_iterator(*Buffer, true, '#').is_at_eof());
184*0a6a1f1dSLionel Sambuc   EXPECT_EQ(line_iterator(), line_iterator(*Buffer, true, '#'));
185*0a6a1f1dSLionel Sambuc 
186*0a6a1f1dSLionel Sambuc   Buffer = MemoryBuffer::getMemBuffer("\n"
187*0a6a1f1dSLionel Sambuc                                       "# baz\n"
188*0a6a1f1dSLionel Sambuc                                       "\n");
189*0a6a1f1dSLionel Sambuc   EXPECT_TRUE(line_iterator(*Buffer, true, '#').is_at_eof());
190*0a6a1f1dSLionel Sambuc   EXPECT_EQ(line_iterator(), line_iterator(*Buffer, true, '#'));
191*0a6a1f1dSLionel Sambuc }
192*0a6a1f1dSLionel Sambuc 
193*0a6a1f1dSLionel Sambuc } // anonymous namespace
194