brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.1 KiB · 7d1bae1 Raw
217 lines · cpp
1//===- LineIterator.cpp - Unit tests --------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#include "llvm/Support/LineIterator.h"10#include "llvm/Support/MemoryBuffer.h"11#include "gtest/gtest.h"12 13using namespace llvm;14using namespace llvm::sys;15 16namespace {17 18TEST(LineIteratorTest, Basic) {19  std::unique_ptr<MemoryBuffer> Buffer = MemoryBuffer::getMemBuffer("line 1\n"20                                                                    "line 2\n"21                                                                    "line 3");22 23  line_iterator I = line_iterator(*Buffer), E;24 25  EXPECT_FALSE(I.is_at_eof());26  EXPECT_NE(E, I);27 28  EXPECT_EQ("line 1", *I);29  EXPECT_EQ(1, I.line_number());30  ++I;31  EXPECT_EQ("line 2", *I);32  EXPECT_EQ(2, I.line_number());33  ++I;34  EXPECT_EQ("line 3", *I);35  EXPECT_EQ(3, I.line_number());36  ++I;37 38  EXPECT_TRUE(I.is_at_eof());39  EXPECT_EQ(E, I);40}41 42TEST(LineIteratorTest, Ref) {43  std::unique_ptr<MemoryBuffer> Buffer = MemoryBuffer::getMemBuffer("line 1\n"44                                                                    "line 2\n"45                                                                    "line 3");46 47  line_iterator I = line_iterator(Buffer->getMemBufferRef()), E;48 49  EXPECT_FALSE(I.is_at_eof());50  EXPECT_NE(E, I);51 52  EXPECT_EQ("line 1", *I);53  EXPECT_EQ(1, I.line_number());54  ++I;55  EXPECT_EQ("line 2", *I);56  EXPECT_EQ(2, I.line_number());57  ++I;58  EXPECT_EQ("line 3", *I);59  EXPECT_EQ(3, I.line_number());60  ++I;61 62  EXPECT_TRUE(I.is_at_eof());63  EXPECT_EQ(E, I);64}65 66TEST(LineIteratorTest, CommentAndBlankSkipping) {67  std::unique_ptr<MemoryBuffer> Buffer(68      MemoryBuffer::getMemBuffer("line 1\n"69                                 "line 2\n"70                                 "# Comment 1\n"71                                 "\n"72                                 "line 5\n"73                                 "\n"74                                 "# Comment 2"));75 76  line_iterator I = line_iterator(*Buffer, true, '#'), E;77 78  EXPECT_FALSE(I.is_at_eof());79  EXPECT_NE(E, I);80 81  EXPECT_EQ("line 1", *I);82  EXPECT_EQ(1, I.line_number());83  ++I;84  EXPECT_EQ("line 2", *I);85  EXPECT_EQ(2, I.line_number());86  ++I;87  EXPECT_EQ("line 5", *I);88  EXPECT_EQ(5, I.line_number());89  ++I;90 91  EXPECT_TRUE(I.is_at_eof());92  EXPECT_EQ(E, I);93}94 95TEST(LineIteratorTest, CommentSkippingKeepBlanks) {96  std::unique_ptr<MemoryBuffer> Buffer(97      MemoryBuffer::getMemBuffer("line 1\n"98                                 "line 2\n"99                                 "# Comment 1\n"100                                 "# Comment 2\n"101                                 "\n"102                                 "line 6\n"103                                 "\n"104                                 "# Comment 3"));105 106  line_iterator I = line_iterator(*Buffer, false, '#'), E;107 108  EXPECT_FALSE(I.is_at_eof());109  EXPECT_NE(E, I);110 111  EXPECT_EQ("line 1", *I);112  EXPECT_EQ(1, I.line_number());113  ++I;114  EXPECT_EQ("line 2", *I);115  EXPECT_EQ(2, I.line_number());116  ++I;117  EXPECT_EQ("", *I);118  EXPECT_EQ(5, I.line_number());119  ++I;120  EXPECT_EQ("line 6", *I);121  EXPECT_EQ(6, I.line_number());122  ++I;123  EXPECT_EQ("", *I);124  EXPECT_EQ(7, I.line_number());125  ++I;126 127  EXPECT_TRUE(I.is_at_eof());128  EXPECT_EQ(E, I);129}130 131 132TEST(LineIteratorTest, BlankSkipping) {133  std::unique_ptr<MemoryBuffer> Buffer = MemoryBuffer::getMemBuffer("\n\n\n"134                                                                    "line 1\n"135                                                                    "\n\n\n"136                                                                    "line 2\n"137                                                                    "\n\n\n");138 139  line_iterator I = line_iterator(*Buffer), E;140 141  EXPECT_FALSE(I.is_at_eof());142  EXPECT_NE(E, I);143 144  EXPECT_EQ("line 1", *I);145  EXPECT_EQ(4, I.line_number());146  ++I;147  EXPECT_EQ("line 2", *I);148  EXPECT_EQ(8, I.line_number());149  ++I;150 151  EXPECT_TRUE(I.is_at_eof());152  EXPECT_EQ(E, I);153}154 155TEST(LineIteratorTest, BlankKeeping) {156  std::unique_ptr<MemoryBuffer> Buffer = MemoryBuffer::getMemBuffer("\n\n"157                                                                    "line 3\n"158                                                                    "\n"159                                                                    "line 5\n"160                                                                    "\n\n");161  line_iterator I = line_iterator(*Buffer, false), E;162 163  EXPECT_FALSE(I.is_at_eof());164  EXPECT_NE(E, I);165 166  EXPECT_EQ("", *I);167  EXPECT_EQ(1, I.line_number());168  ++I;169  EXPECT_EQ("", *I);170  EXPECT_EQ(2, I.line_number());171  ++I;172  EXPECT_EQ("line 3", *I);173  EXPECT_EQ(3, I.line_number());174  ++I;175  EXPECT_EQ("", *I);176  EXPECT_EQ(4, I.line_number());177  ++I;178  EXPECT_EQ("line 5", *I);179  EXPECT_EQ(5, I.line_number());180  ++I;181  EXPECT_EQ("", *I);182  EXPECT_EQ(6, I.line_number());183  ++I;184  EXPECT_EQ("", *I);185  EXPECT_EQ(7, I.line_number());186  ++I;187 188  EXPECT_TRUE(I.is_at_eof());189  EXPECT_EQ(E, I);190}191 192TEST(LineIteratorTest, EmptyBuffers) {193  std::unique_ptr<MemoryBuffer> Buffer = MemoryBuffer::getMemBuffer("");194  EXPECT_TRUE(line_iterator(*Buffer).is_at_eof());195  EXPECT_EQ(line_iterator(), line_iterator(*Buffer));196  EXPECT_TRUE(line_iterator(*Buffer, false).is_at_eof());197  EXPECT_EQ(line_iterator(), line_iterator(*Buffer, false));198 199  Buffer = MemoryBuffer::getMemBuffer("\n\n\n");200  EXPECT_TRUE(line_iterator(*Buffer).is_at_eof());201  EXPECT_EQ(line_iterator(), line_iterator(*Buffer));202 203  Buffer = MemoryBuffer::getMemBuffer("# foo\n"204                                      "\n"205                                      "# bar");206  EXPECT_TRUE(line_iterator(*Buffer, true, '#').is_at_eof());207  EXPECT_EQ(line_iterator(), line_iterator(*Buffer, true, '#'));208 209  Buffer = MemoryBuffer::getMemBuffer("\n"210                                      "# baz\n"211                                      "\n");212  EXPECT_TRUE(line_iterator(*Buffer, true, '#').is_at_eof());213  EXPECT_EQ(line_iterator(), line_iterator(*Buffer, true, '#'));214}215 216} // anonymous namespace217