1 //===- LineIterator.cpp - Unit tests --------------------------------------===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 #include "llvm/Support/LineIterator.h"
11 #include "llvm/Support/MemoryBuffer.h"
12 #include "gtest/gtest.h"
15 using namespace llvm::sys;
19 TEST(LineIteratorTest, Basic) {
20 std::unique_ptr<MemoryBuffer> Buffer = MemoryBuffer::getMemBuffer("line 1\n"
24 line_iterator I = line_iterator(*Buffer), E;
26 EXPECT_FALSE(I.is_at_eof());
29 EXPECT_EQ("line 1", *I);
30 EXPECT_EQ(1, I.line_number());
32 EXPECT_EQ("line 2", *I);
33 EXPECT_EQ(2, I.line_number());
35 EXPECT_EQ("line 3", *I);
36 EXPECT_EQ(3, I.line_number());
39 EXPECT_TRUE(I.is_at_eof());
43 TEST(LineIteratorTest, CommentAndBlankSkipping) {
44 std::unique_ptr<MemoryBuffer> Buffer(
45 MemoryBuffer::getMemBuffer("line 1\n"
53 line_iterator I = line_iterator(*Buffer, true, '#'), E;
55 EXPECT_FALSE(I.is_at_eof());
58 EXPECT_EQ("line 1", *I);
59 EXPECT_EQ(1, I.line_number());
61 EXPECT_EQ("line 2", *I);
62 EXPECT_EQ(2, I.line_number());
64 EXPECT_EQ("line 5", *I);
65 EXPECT_EQ(5, I.line_number());
68 EXPECT_TRUE(I.is_at_eof());
72 TEST(LineIteratorTest, CommentSkippingKeepBlanks) {
73 std::unique_ptr<MemoryBuffer> Buffer(
74 MemoryBuffer::getMemBuffer("line 1\n"
83 line_iterator I = line_iterator(*Buffer, false, '#'), E;
85 EXPECT_FALSE(I.is_at_eof());
88 EXPECT_EQ("line 1", *I);
89 EXPECT_EQ(1, I.line_number());
91 EXPECT_EQ("line 2", *I);
92 EXPECT_EQ(2, I.line_number());
95 EXPECT_EQ(5, I.line_number());
97 EXPECT_EQ("line 6", *I);
98 EXPECT_EQ(6, I.line_number());
101 EXPECT_EQ(7, I.line_number());
104 EXPECT_TRUE(I.is_at_eof());
109 TEST(LineIteratorTest, BlankSkipping) {
110 std::unique_ptr<MemoryBuffer> Buffer = MemoryBuffer::getMemBuffer("\n\n\n"
116 line_iterator I = line_iterator(*Buffer), E;
118 EXPECT_FALSE(I.is_at_eof());
121 EXPECT_EQ("line 1", *I);
122 EXPECT_EQ(4, I.line_number());
124 EXPECT_EQ("line 2", *I);
125 EXPECT_EQ(8, I.line_number());
128 EXPECT_TRUE(I.is_at_eof());
132 TEST(LineIteratorTest, BlankKeeping) {
133 std::unique_ptr<MemoryBuffer> Buffer = MemoryBuffer::getMemBuffer("\n\n"
138 line_iterator I = line_iterator(*Buffer, false), E;
140 EXPECT_FALSE(I.is_at_eof());
144 EXPECT_EQ(1, I.line_number());
147 EXPECT_EQ(2, I.line_number());
149 EXPECT_EQ("line 3", *I);
150 EXPECT_EQ(3, I.line_number());
153 EXPECT_EQ(4, I.line_number());
155 EXPECT_EQ("line 5", *I);
156 EXPECT_EQ(5, I.line_number());
159 EXPECT_EQ(6, I.line_number());
162 EXPECT_EQ(7, I.line_number());
165 EXPECT_TRUE(I.is_at_eof());
169 TEST(LineIteratorTest, EmptyBuffers) {
170 std::unique_ptr<MemoryBuffer> Buffer = MemoryBuffer::getMemBuffer("");
171 EXPECT_TRUE(line_iterator(*Buffer).is_at_eof());
172 EXPECT_EQ(line_iterator(), line_iterator(*Buffer));
173 EXPECT_TRUE(line_iterator(*Buffer, false).is_at_eof());
174 EXPECT_EQ(line_iterator(), line_iterator(*Buffer, false));
176 Buffer = MemoryBuffer::getMemBuffer("\n\n\n");
177 EXPECT_TRUE(line_iterator(*Buffer).is_at_eof());
178 EXPECT_EQ(line_iterator(), line_iterator(*Buffer));
180 Buffer = MemoryBuffer::getMemBuffer("# foo\n"
183 EXPECT_TRUE(line_iterator(*Buffer, true, '#').is_at_eof());
184 EXPECT_EQ(line_iterator(), line_iterator(*Buffer, true, '#'));
186 Buffer = MemoryBuffer::getMemBuffer("\n"
189 EXPECT_TRUE(line_iterator(*Buffer, true, '#').is_at_eof());
190 EXPECT_EQ(line_iterator(), line_iterator(*Buffer, true, '#'));
193 } // anonymous namespace