blob: 67f9d9777363b9a1a4f3b7c02e7ea3efe1a0d1ee [file] [log] [blame]
Chandler Carruthf8c52812013-12-27 04:28:57 +00001//===- LineIterator.cpp - Unit tests --------------------------------------===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10#include "llvm/Support/LineIterator.h"
Chandler Carruthf8c52812013-12-27 04:28:57 +000011#include "llvm/Support/MemoryBuffer.h"
12#include "gtest/gtest.h"
13
14using namespace llvm;
15using namespace llvm::sys;
16
17namespace {
18
19TEST(LineIteratorTest, Basic) {
David Blaikiedfbe3d62014-08-27 20:14:18 +000020 std::unique_ptr<MemoryBuffer> Buffer = MemoryBuffer::getMemBuffer("line 1\n"
21 "line 2\n"
22 "line 3");
Chandler Carruthf8c52812013-12-27 04:28:57 +000023
24 line_iterator I = line_iterator(*Buffer), E;
25
26 EXPECT_FALSE(I.is_at_eof());
27 EXPECT_NE(E, I);
28
29 EXPECT_EQ("line 1", *I);
30 EXPECT_EQ(1, I.line_number());
31 ++I;
32 EXPECT_EQ("line 2", *I);
33 EXPECT_EQ(2, I.line_number());
34 ++I;
35 EXPECT_EQ("line 3", *I);
36 EXPECT_EQ(3, I.line_number());
37 ++I;
38
39 EXPECT_TRUE(I.is_at_eof());
40 EXPECT_EQ(E, I);
41}
42
Justin Bogner69fe4e92014-09-17 15:43:01 +000043TEST(LineIteratorTest, CommentAndBlankSkipping) {
Ahmed Charles56440fd2014-03-06 05:51:42 +000044 std::unique_ptr<MemoryBuffer> Buffer(
45 MemoryBuffer::getMemBuffer("line 1\n"
46 "line 2\n"
47 "# Comment 1\n"
Justin Bogner69fe4e92014-09-17 15:43:01 +000048 "\n"
49 "line 5\n"
50 "\n"
Ahmed Charles56440fd2014-03-06 05:51:42 +000051 "# Comment 2"));
Chandler Carruthf8c52812013-12-27 04:28:57 +000052
Justin Bogner69fe4e92014-09-17 15:43:01 +000053 line_iterator I = line_iterator(*Buffer, true, '#'), E;
Chandler Carruthf8c52812013-12-27 04:28:57 +000054
55 EXPECT_FALSE(I.is_at_eof());
56 EXPECT_NE(E, I);
57
58 EXPECT_EQ("line 1", *I);
59 EXPECT_EQ(1, I.line_number());
60 ++I;
61 EXPECT_EQ("line 2", *I);
62 EXPECT_EQ(2, I.line_number());
63 ++I;
Justin Bogner69fe4e92014-09-17 15:43:01 +000064 EXPECT_EQ("line 5", *I);
65 EXPECT_EQ(5, I.line_number());
Chandler Carruthf8c52812013-12-27 04:28:57 +000066 ++I;
67
68 EXPECT_TRUE(I.is_at_eof());
69 EXPECT_EQ(E, I);
70}
71
Justin Bogner69fe4e92014-09-17 15:43:01 +000072TEST(LineIteratorTest, CommentSkippingKeepBlanks) {
73 std::unique_ptr<MemoryBuffer> Buffer(
74 MemoryBuffer::getMemBuffer("line 1\n"
75 "line 2\n"
76 "# Comment 1\n"
77 "# Comment 2\n"
78 "\n"
79 "line 6\n"
80 "\n"
81 "# Comment 3"));
82
83 line_iterator I = line_iterator(*Buffer, false, '#'), E;
84
85 EXPECT_FALSE(I.is_at_eof());
86 EXPECT_NE(E, I);
87
88 EXPECT_EQ("line 1", *I);
89 EXPECT_EQ(1, I.line_number());
90 ++I;
91 EXPECT_EQ("line 2", *I);
92 EXPECT_EQ(2, I.line_number());
93 ++I;
94 EXPECT_EQ("", *I);
95 EXPECT_EQ(5, I.line_number());
96 ++I;
97 EXPECT_EQ("line 6", *I);
98 EXPECT_EQ(6, I.line_number());
99 ++I;
100 EXPECT_EQ("", *I);
101 EXPECT_EQ(7, I.line_number());
102 ++I;
103
104 EXPECT_TRUE(I.is_at_eof());
105 EXPECT_EQ(E, I);
106}
107
108
Chandler Carruthf8c52812013-12-27 04:28:57 +0000109TEST(LineIteratorTest, BlankSkipping) {
David Blaikiedfbe3d62014-08-27 20:14:18 +0000110 std::unique_ptr<MemoryBuffer> Buffer = MemoryBuffer::getMemBuffer("\n\n\n"
111 "line 1\n"
112 "\n\n\n"
113 "line 2\n"
114 "\n\n\n");
Chandler Carruthf8c52812013-12-27 04:28:57 +0000115
116 line_iterator I = line_iterator(*Buffer), E;
117
118 EXPECT_FALSE(I.is_at_eof());
119 EXPECT_NE(E, I);
120
121 EXPECT_EQ("line 1", *I);
122 EXPECT_EQ(4, I.line_number());
123 ++I;
124 EXPECT_EQ("line 2", *I);
125 EXPECT_EQ(8, I.line_number());
126 ++I;
127
128 EXPECT_TRUE(I.is_at_eof());
129 EXPECT_EQ(E, I);
130}
131
Justin Bogner69fe4e92014-09-17 15:43:01 +0000132TEST(LineIteratorTest, BlankKeeping) {
133 std::unique_ptr<MemoryBuffer> Buffer = MemoryBuffer::getMemBuffer("\n\n"
134 "line 3\n"
135 "\n"
136 "line 5\n"
137 "\n\n");
138 line_iterator I = line_iterator(*Buffer, false), E;
139
140 EXPECT_FALSE(I.is_at_eof());
141 EXPECT_NE(E, I);
142
143 EXPECT_EQ("", *I);
144 EXPECT_EQ(1, I.line_number());
145 ++I;
146 EXPECT_EQ("", *I);
147 EXPECT_EQ(2, I.line_number());
148 ++I;
149 EXPECT_EQ("line 3", *I);
150 EXPECT_EQ(3, I.line_number());
151 ++I;
152 EXPECT_EQ("", *I);
153 EXPECT_EQ(4, I.line_number());
154 ++I;
155 EXPECT_EQ("line 5", *I);
156 EXPECT_EQ(5, I.line_number());
157 ++I;
158 EXPECT_EQ("", *I);
159 EXPECT_EQ(6, I.line_number());
160 ++I;
161 EXPECT_EQ("", *I);
162 EXPECT_EQ(7, I.line_number());
163 ++I;
164
165 EXPECT_TRUE(I.is_at_eof());
166 EXPECT_EQ(E, I);
167}
168
Chandler Carruthf8c52812013-12-27 04:28:57 +0000169TEST(LineIteratorTest, EmptyBuffers) {
David Blaikiedfbe3d62014-08-27 20:14:18 +0000170 std::unique_ptr<MemoryBuffer> Buffer = MemoryBuffer::getMemBuffer("");
Chandler Carruthf8c52812013-12-27 04:28:57 +0000171 EXPECT_TRUE(line_iterator(*Buffer).is_at_eof());
172 EXPECT_EQ(line_iterator(), line_iterator(*Buffer));
Justin Bogner69fe4e92014-09-17 15:43:01 +0000173 EXPECT_TRUE(line_iterator(*Buffer, false).is_at_eof());
174 EXPECT_EQ(line_iterator(), line_iterator(*Buffer, false));
Chandler Carruthf8c52812013-12-27 04:28:57 +0000175
Rafael Espindola3560ff22014-08-27 20:03:13 +0000176 Buffer = MemoryBuffer::getMemBuffer("\n\n\n");
Chandler Carruthf8c52812013-12-27 04:28:57 +0000177 EXPECT_TRUE(line_iterator(*Buffer).is_at_eof());
178 EXPECT_EQ(line_iterator(), line_iterator(*Buffer));
179
Rafael Espindola3560ff22014-08-27 20:03:13 +0000180 Buffer = MemoryBuffer::getMemBuffer("# foo\n"
181 "\n"
182 "# bar");
Justin Bogner69fe4e92014-09-17 15:43:01 +0000183 EXPECT_TRUE(line_iterator(*Buffer, true, '#').is_at_eof());
184 EXPECT_EQ(line_iterator(), line_iterator(*Buffer, true, '#'));
Chandler Carruthf8c52812013-12-27 04:28:57 +0000185
Rafael Espindola3560ff22014-08-27 20:03:13 +0000186 Buffer = MemoryBuffer::getMemBuffer("\n"
187 "# baz\n"
188 "\n");
Justin Bogner69fe4e92014-09-17 15:43:01 +0000189 EXPECT_TRUE(line_iterator(*Buffer, true, '#').is_at_eof());
190 EXPECT_EQ(line_iterator(), line_iterator(*Buffer, true, '#'));
Chandler Carruthf8c52812013-12-27 04:28:57 +0000191}
192
193} // anonymous namespace