LineIteratorTest.cpp 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. //===- LineIterator.cpp - Unit tests --------------------------------------===//
  2. //
  3. // The LLVM Compiler Infrastructure
  4. //
  5. // This file is distributed under the University of Illinois Open Source
  6. // License. See LICENSE.TXT for details.
  7. //
  8. //===----------------------------------------------------------------------===//
  9. #include "llvm/Support/LineIterator.h"
  10. #include "llvm/Support/MemoryBuffer.h"
  11. #include "gtest/gtest.h"
  12. using namespace llvm;
  13. using namespace llvm::sys;
  14. namespace {
  15. TEST(LineIteratorTest, Basic) {
  16. std::unique_ptr<MemoryBuffer> Buffer = MemoryBuffer::getMemBuffer("line 1\n"
  17. "line 2\n"
  18. "line 3");
  19. line_iterator I = line_iterator(*Buffer), E;
  20. EXPECT_FALSE(I.is_at_eof());
  21. EXPECT_NE(E, I);
  22. EXPECT_EQ("line 1", *I);
  23. EXPECT_EQ(1, I.line_number());
  24. ++I;
  25. EXPECT_EQ("line 2", *I);
  26. EXPECT_EQ(2, I.line_number());
  27. ++I;
  28. EXPECT_EQ("line 3", *I);
  29. EXPECT_EQ(3, I.line_number());
  30. ++I;
  31. EXPECT_TRUE(I.is_at_eof());
  32. EXPECT_EQ(E, I);
  33. }
  34. TEST(LineIteratorTest, CommentAndBlankSkipping) {
  35. std::unique_ptr<MemoryBuffer> Buffer(
  36. MemoryBuffer::getMemBuffer("line 1\n"
  37. "line 2\n"
  38. "# Comment 1\n"
  39. "\n"
  40. "line 5\n"
  41. "\n"
  42. "# Comment 2"));
  43. line_iterator I = line_iterator(*Buffer, true, '#'), E;
  44. EXPECT_FALSE(I.is_at_eof());
  45. EXPECT_NE(E, I);
  46. EXPECT_EQ("line 1", *I);
  47. EXPECT_EQ(1, I.line_number());
  48. ++I;
  49. EXPECT_EQ("line 2", *I);
  50. EXPECT_EQ(2, I.line_number());
  51. ++I;
  52. EXPECT_EQ("line 5", *I);
  53. EXPECT_EQ(5, I.line_number());
  54. ++I;
  55. EXPECT_TRUE(I.is_at_eof());
  56. EXPECT_EQ(E, I);
  57. }
  58. TEST(LineIteratorTest, CommentSkippingKeepBlanks) {
  59. std::unique_ptr<MemoryBuffer> Buffer(
  60. MemoryBuffer::getMemBuffer("line 1\n"
  61. "line 2\n"
  62. "# Comment 1\n"
  63. "# Comment 2\n"
  64. "\n"
  65. "line 6\n"
  66. "\n"
  67. "# Comment 3"));
  68. line_iterator I = line_iterator(*Buffer, false, '#'), E;
  69. EXPECT_FALSE(I.is_at_eof());
  70. EXPECT_NE(E, I);
  71. EXPECT_EQ("line 1", *I);
  72. EXPECT_EQ(1, I.line_number());
  73. ++I;
  74. EXPECT_EQ("line 2", *I);
  75. EXPECT_EQ(2, I.line_number());
  76. ++I;
  77. EXPECT_EQ("", *I);
  78. EXPECT_EQ(5, I.line_number());
  79. ++I;
  80. EXPECT_EQ("line 6", *I);
  81. EXPECT_EQ(6, I.line_number());
  82. ++I;
  83. EXPECT_EQ("", *I);
  84. EXPECT_EQ(7, I.line_number());
  85. ++I;
  86. EXPECT_TRUE(I.is_at_eof());
  87. EXPECT_EQ(E, I);
  88. }
  89. TEST(LineIteratorTest, BlankSkipping) {
  90. std::unique_ptr<MemoryBuffer> Buffer = MemoryBuffer::getMemBuffer("\n\n\n"
  91. "line 1\n"
  92. "\n\n\n"
  93. "line 2\n"
  94. "\n\n\n");
  95. line_iterator I = line_iterator(*Buffer), E;
  96. EXPECT_FALSE(I.is_at_eof());
  97. EXPECT_NE(E, I);
  98. EXPECT_EQ("line 1", *I);
  99. EXPECT_EQ(4, I.line_number());
  100. ++I;
  101. EXPECT_EQ("line 2", *I);
  102. EXPECT_EQ(8, I.line_number());
  103. ++I;
  104. EXPECT_TRUE(I.is_at_eof());
  105. EXPECT_EQ(E, I);
  106. }
  107. TEST(LineIteratorTest, BlankKeeping) {
  108. std::unique_ptr<MemoryBuffer> Buffer = MemoryBuffer::getMemBuffer("\n\n"
  109. "line 3\n"
  110. "\n"
  111. "line 5\n"
  112. "\n\n");
  113. line_iterator I = line_iterator(*Buffer, false), E;
  114. EXPECT_FALSE(I.is_at_eof());
  115. EXPECT_NE(E, I);
  116. EXPECT_EQ("", *I);
  117. EXPECT_EQ(1, I.line_number());
  118. ++I;
  119. EXPECT_EQ("", *I);
  120. EXPECT_EQ(2, I.line_number());
  121. ++I;
  122. EXPECT_EQ("line 3", *I);
  123. EXPECT_EQ(3, I.line_number());
  124. ++I;
  125. EXPECT_EQ("", *I);
  126. EXPECT_EQ(4, I.line_number());
  127. ++I;
  128. EXPECT_EQ("line 5", *I);
  129. EXPECT_EQ(5, I.line_number());
  130. ++I;
  131. EXPECT_EQ("", *I);
  132. EXPECT_EQ(6, I.line_number());
  133. ++I;
  134. EXPECT_EQ("", *I);
  135. EXPECT_EQ(7, I.line_number());
  136. ++I;
  137. EXPECT_TRUE(I.is_at_eof());
  138. EXPECT_EQ(E, I);
  139. }
  140. TEST(LineIteratorTest, EmptyBuffers) {
  141. std::unique_ptr<MemoryBuffer> Buffer = MemoryBuffer::getMemBuffer("");
  142. EXPECT_TRUE(line_iterator(*Buffer).is_at_eof());
  143. EXPECT_EQ(line_iterator(), line_iterator(*Buffer));
  144. EXPECT_TRUE(line_iterator(*Buffer, false).is_at_eof());
  145. EXPECT_EQ(line_iterator(), line_iterator(*Buffer, false));
  146. Buffer = MemoryBuffer::getMemBuffer("\n\n\n");
  147. EXPECT_TRUE(line_iterator(*Buffer).is_at_eof());
  148. EXPECT_EQ(line_iterator(), line_iterator(*Buffer));
  149. Buffer = MemoryBuffer::getMemBuffer("# foo\n"
  150. "\n"
  151. "# bar");
  152. EXPECT_TRUE(line_iterator(*Buffer, true, '#').is_at_eof());
  153. EXPECT_EQ(line_iterator(), line_iterator(*Buffer, true, '#'));
  154. Buffer = MemoryBuffer::getMemBuffer("\n"
  155. "# baz\n"
  156. "\n");
  157. EXPECT_TRUE(line_iterator(*Buffer, true, '#').is_at_eof());
  158. EXPECT_EQ(line_iterator(), line_iterator(*Buffer, true, '#'));
  159. }
  160. } // anonymous namespace