136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines//===- LineIterator.cpp - Unit tests --------------------------------------===//
236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines//
336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines//                     The LLVM Compiler Infrastructure
436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines//
536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines// This file is distributed under the University of Illinois Open Source
636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines// License. See LICENSE.TXT for details.
736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines//
836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines//===----------------------------------------------------------------------===//
936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
1036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#include "llvm/Support/LineIterator.h"
1136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#include "llvm/Support/MemoryBuffer.h"
1236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#include "gtest/gtest.h"
1336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
1436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesusing namespace llvm;
1536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesusing namespace llvm::sys;
1636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
1736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesnamespace {
1836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
1936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen HinesTEST(LineIteratorTest, Basic) {
2036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  std::unique_ptr<MemoryBuffer> Buffer(MemoryBuffer::getMemBuffer("line 1\n"
2136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines                                                                  "line 2\n"
2236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines                                                                  "line 3"));
2336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
2436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  line_iterator I = line_iterator(*Buffer), E;
2536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
2636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  EXPECT_FALSE(I.is_at_eof());
2736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  EXPECT_NE(E, I);
2836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
2936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  EXPECT_EQ("line 1", *I);
3036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  EXPECT_EQ(1, I.line_number());
3136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  ++I;
3236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  EXPECT_EQ("line 2", *I);
3336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  EXPECT_EQ(2, I.line_number());
3436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  ++I;
3536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  EXPECT_EQ("line 3", *I);
3636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  EXPECT_EQ(3, I.line_number());
3736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  ++I;
3836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
3936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  EXPECT_TRUE(I.is_at_eof());
4036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  EXPECT_EQ(E, I);
4136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines}
4236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
4336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen HinesTEST(LineIteratorTest, CommentSkipping) {
4436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  std::unique_ptr<MemoryBuffer> Buffer(
4536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines      MemoryBuffer::getMemBuffer("line 1\n"
4636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines                                 "line 2\n"
4736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines                                 "# Comment 1\n"
4836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines                                 "line 4\n"
4936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines                                 "# Comment 2"));
5036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
5136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  line_iterator I = line_iterator(*Buffer, '#'), E;
5236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
5336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  EXPECT_FALSE(I.is_at_eof());
5436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  EXPECT_NE(E, I);
5536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
5636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  EXPECT_EQ("line 1", *I);
5736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  EXPECT_EQ(1, I.line_number());
5836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  ++I;
5936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  EXPECT_EQ("line 2", *I);
6036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  EXPECT_EQ(2, I.line_number());
6136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  ++I;
6236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  EXPECT_EQ("line 4", *I);
6336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  EXPECT_EQ(4, I.line_number());
6436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  ++I;
6536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
6636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  EXPECT_TRUE(I.is_at_eof());
6736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  EXPECT_EQ(E, I);
6836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines}
6936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
7036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen HinesTEST(LineIteratorTest, BlankSkipping) {
7136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  std::unique_ptr<MemoryBuffer> Buffer(MemoryBuffer::getMemBuffer("\n\n\n"
7236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines                                                                  "line 1\n"
7336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines                                                                  "\n\n\n"
7436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines                                                                  "line 2\n"
7536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines                                                                  "\n\n\n"));
7636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
7736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  line_iterator I = line_iterator(*Buffer), E;
7836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
7936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  EXPECT_FALSE(I.is_at_eof());
8036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  EXPECT_NE(E, I);
8136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
8236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  EXPECT_EQ("line 1", *I);
8336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  EXPECT_EQ(4, I.line_number());
8436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  ++I;
8536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  EXPECT_EQ("line 2", *I);
8636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  EXPECT_EQ(8, I.line_number());
8736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  ++I;
8836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
8936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  EXPECT_TRUE(I.is_at_eof());
9036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  EXPECT_EQ(E, I);
9136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines}
9236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
9336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen HinesTEST(LineIteratorTest, EmptyBuffers) {
9436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  std::unique_ptr<MemoryBuffer> Buffer(MemoryBuffer::getMemBuffer(""));
9536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  EXPECT_TRUE(line_iterator(*Buffer).is_at_eof());
9636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  EXPECT_EQ(line_iterator(), line_iterator(*Buffer));
9736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
9836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  Buffer.reset(MemoryBuffer::getMemBuffer("\n\n\n"));
9936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  EXPECT_TRUE(line_iterator(*Buffer).is_at_eof());
10036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  EXPECT_EQ(line_iterator(), line_iterator(*Buffer));
10136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
10236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  Buffer.reset(MemoryBuffer::getMemBuffer("# foo\n"
10336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines                                          "\n"
10436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines                                          "# bar"));
10536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  EXPECT_TRUE(line_iterator(*Buffer, '#').is_at_eof());
10636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  EXPECT_EQ(line_iterator(), line_iterator(*Buffer, '#'));
10736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
10836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  Buffer.reset(MemoryBuffer::getMemBuffer("\n"
10936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines                                          "# baz\n"
11036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines                                          "\n"));
11136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  EXPECT_TRUE(line_iterator(*Buffer, '#').is_at_eof());
11236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  EXPECT_EQ(line_iterator(), line_iterator(*Buffer, '#'));
11336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines}
11436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
11536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines} // anonymous namespace
116