aboutsummaryrefslogtreecommitdiff
path: root/llvm/unittests/Support/LineIteratorTest.cpp
diff options
context:
space:
mode:
authorJustin Bogner <mail@justinbogner.com>2014-09-17 15:43:01 +0000
committerJustin Bogner <mail@justinbogner.com>2014-09-17 15:43:01 +0000
commit69fe4e98fa00cce06d64c8bf81882dfea0851302 (patch)
treebe94d5979419e62fa61aba9b303f9d165b165868 /llvm/unittests/Support/LineIteratorTest.cpp
parent253e5da7ad727b518ccfe7befe1d9cd43530cf60 (diff)
downloadllvm-69fe4e98fa00cce06d64c8bf81882dfea0851302.zip
llvm-69fe4e98fa00cce06d64c8bf81882dfea0851302.tar.gz
llvm-69fe4e98fa00cce06d64c8bf81882dfea0851302.tar.bz2
LineIterator: Provide a variant that keeps blank lines
It isn't always useful to skip blank lines, as evidenced by the somewhat awkward use of line_iterator in llvm-cov. This adds a knob to control whether or not to skip blanks. llvm-svn: 217960
Diffstat (limited to 'llvm/unittests/Support/LineIteratorTest.cpp')
-rw-r--r--llvm/unittests/Support/LineIteratorTest.cpp96
1 files changed, 87 insertions, 9 deletions
diff --git a/llvm/unittests/Support/LineIteratorTest.cpp b/llvm/unittests/Support/LineIteratorTest.cpp
index 8ec6c93..67f9d97 100644
--- a/llvm/unittests/Support/LineIteratorTest.cpp
+++ b/llvm/unittests/Support/LineIteratorTest.cpp
@@ -40,15 +40,17 @@ TEST(LineIteratorTest, Basic) {
EXPECT_EQ(E, I);
}
-TEST(LineIteratorTest, CommentSkipping) {
+TEST(LineIteratorTest, CommentAndBlankSkipping) {
std::unique_ptr<MemoryBuffer> Buffer(
MemoryBuffer::getMemBuffer("line 1\n"
"line 2\n"
"# Comment 1\n"
- "line 4\n"
+ "\n"
+ "line 5\n"
+ "\n"
"# Comment 2"));
- line_iterator I = line_iterator(*Buffer, '#'), E;
+ line_iterator I = line_iterator(*Buffer, true, '#'), E;
EXPECT_FALSE(I.is_at_eof());
EXPECT_NE(E, I);
@@ -59,14 +61,51 @@ TEST(LineIteratorTest, CommentSkipping) {
EXPECT_EQ("line 2", *I);
EXPECT_EQ(2, I.line_number());
++I;
- EXPECT_EQ("line 4", *I);
- EXPECT_EQ(4, I.line_number());
+ EXPECT_EQ("line 5", *I);
+ EXPECT_EQ(5, I.line_number());
+ ++I;
+
+ EXPECT_TRUE(I.is_at_eof());
+ EXPECT_EQ(E, I);
+}
+
+TEST(LineIteratorTest, CommentSkippingKeepBlanks) {
+ std::unique_ptr<MemoryBuffer> Buffer(
+ MemoryBuffer::getMemBuffer("line 1\n"
+ "line 2\n"
+ "# Comment 1\n"
+ "# Comment 2\n"
+ "\n"
+ "line 6\n"
+ "\n"
+ "# Comment 3"));
+
+ line_iterator I = line_iterator(*Buffer, false, '#'), E;
+
+ EXPECT_FALSE(I.is_at_eof());
+ EXPECT_NE(E, I);
+
+ EXPECT_EQ("line 1", *I);
+ EXPECT_EQ(1, I.line_number());
+ ++I;
+ EXPECT_EQ("line 2", *I);
+ EXPECT_EQ(2, I.line_number());
+ ++I;
+ EXPECT_EQ("", *I);
+ EXPECT_EQ(5, I.line_number());
+ ++I;
+ EXPECT_EQ("line 6", *I);
+ EXPECT_EQ(6, I.line_number());
+ ++I;
+ EXPECT_EQ("", *I);
+ EXPECT_EQ(7, I.line_number());
++I;
EXPECT_TRUE(I.is_at_eof());
EXPECT_EQ(E, I);
}
+
TEST(LineIteratorTest, BlankSkipping) {
std::unique_ptr<MemoryBuffer> Buffer = MemoryBuffer::getMemBuffer("\n\n\n"
"line 1\n"
@@ -90,10 +129,49 @@ TEST(LineIteratorTest, BlankSkipping) {
EXPECT_EQ(E, I);
}
+TEST(LineIteratorTest, BlankKeeping) {
+ std::unique_ptr<MemoryBuffer> Buffer = MemoryBuffer::getMemBuffer("\n\n"
+ "line 3\n"
+ "\n"
+ "line 5\n"
+ "\n\n");
+ line_iterator I = line_iterator(*Buffer, false), E;
+
+ EXPECT_FALSE(I.is_at_eof());
+ EXPECT_NE(E, I);
+
+ EXPECT_EQ("", *I);
+ EXPECT_EQ(1, I.line_number());
+ ++I;
+ EXPECT_EQ("", *I);
+ EXPECT_EQ(2, I.line_number());
+ ++I;
+ EXPECT_EQ("line 3", *I);
+ EXPECT_EQ(3, I.line_number());
+ ++I;
+ EXPECT_EQ("", *I);
+ EXPECT_EQ(4, I.line_number());
+ ++I;
+ EXPECT_EQ("line 5", *I);
+ EXPECT_EQ(5, I.line_number());
+ ++I;
+ EXPECT_EQ("", *I);
+ EXPECT_EQ(6, I.line_number());
+ ++I;
+ EXPECT_EQ("", *I);
+ EXPECT_EQ(7, I.line_number());
+ ++I;
+
+ EXPECT_TRUE(I.is_at_eof());
+ EXPECT_EQ(E, I);
+}
+
TEST(LineIteratorTest, EmptyBuffers) {
std::unique_ptr<MemoryBuffer> Buffer = MemoryBuffer::getMemBuffer("");
EXPECT_TRUE(line_iterator(*Buffer).is_at_eof());
EXPECT_EQ(line_iterator(), line_iterator(*Buffer));
+ EXPECT_TRUE(line_iterator(*Buffer, false).is_at_eof());
+ EXPECT_EQ(line_iterator(), line_iterator(*Buffer, false));
Buffer = MemoryBuffer::getMemBuffer("\n\n\n");
EXPECT_TRUE(line_iterator(*Buffer).is_at_eof());
@@ -102,14 +180,14 @@ TEST(LineIteratorTest, EmptyBuffers) {
Buffer = MemoryBuffer::getMemBuffer("# foo\n"
"\n"
"# bar");
- EXPECT_TRUE(line_iterator(*Buffer, '#').is_at_eof());
- EXPECT_EQ(line_iterator(), line_iterator(*Buffer, '#'));
+ EXPECT_TRUE(line_iterator(*Buffer, true, '#').is_at_eof());
+ EXPECT_EQ(line_iterator(), line_iterator(*Buffer, true, '#'));
Buffer = MemoryBuffer::getMemBuffer("\n"
"# baz\n"
"\n");
- EXPECT_TRUE(line_iterator(*Buffer, '#').is_at_eof());
- EXPECT_EQ(line_iterator(), line_iterator(*Buffer, '#'));
+ EXPECT_TRUE(line_iterator(*Buffer, true, '#').is_at_eof());
+ EXPECT_EQ(line_iterator(), line_iterator(*Buffer, true, '#'));
}
} // anonymous namespace