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