summaryrefslogtreecommitdiff
path: root/unittests/Support/SourceMgrTest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'unittests/Support/SourceMgrTest.cpp')
-rw-r--r--unittests/Support/SourceMgrTest.cpp314
1 files changed, 314 insertions, 0 deletions
diff --git a/unittests/Support/SourceMgrTest.cpp b/unittests/Support/SourceMgrTest.cpp
index 2a84a89912ad..7bb76f556f70 100644
--- a/unittests/Support/SourceMgrTest.cpp
+++ b/unittests/Support/SourceMgrTest.cpp
@@ -107,6 +107,320 @@ TEST_F(SourceMgrTest, LocationAtNewline) {
Output);
}
+TEST_F(SourceMgrTest, LocationAtEmptyBuffer) {
+ setMainBuffer("", "file.in");
+ printMessage(getLoc(0), SourceMgr::DK_Error, "message", None, None);
+
+ EXPECT_EQ("file.in:1:1: error: message\n"
+ "\n"
+ "^\n",
+ Output);
+}
+
+TEST_F(SourceMgrTest, LocationJustOnSoleNewline) {
+ setMainBuffer("\n", "file.in");
+ printMessage(getLoc(0), SourceMgr::DK_Error, "message", None, None);
+
+ EXPECT_EQ("file.in:1:1: error: message\n"
+ "\n"
+ "^\n",
+ Output);
+}
+
+TEST_F(SourceMgrTest, LocationJustAfterSoleNewline) {
+ setMainBuffer("\n", "file.in");
+ printMessage(getLoc(1), SourceMgr::DK_Error, "message", None, None);
+
+ EXPECT_EQ("file.in:2:1: error: message\n"
+ "\n"
+ "^\n",
+ Output);
+}
+
+TEST_F(SourceMgrTest, LocationJustAfterNonNewline) {
+ setMainBuffer("123", "file.in");
+ printMessage(getLoc(3), SourceMgr::DK_Error, "message", None, None);
+
+ EXPECT_EQ("file.in:1:4: error: message\n"
+ "123\n"
+ " ^\n",
+ Output);
+}
+
+TEST_F(SourceMgrTest, LocationOnFirstLineOfMultiline) {
+ setMainBuffer("1234\n6789\n", "file.in");
+ printMessage(getLoc(3), SourceMgr::DK_Error, "message", None, None);
+
+ EXPECT_EQ("file.in:1:4: error: message\n"
+ "1234\n"
+ " ^\n",
+ Output);
+}
+
+TEST_F(SourceMgrTest, LocationOnEOLOfFirstLineOfMultiline) {
+ setMainBuffer("1234\n6789\n", "file.in");
+ printMessage(getLoc(4), SourceMgr::DK_Error, "message", None, None);
+
+ EXPECT_EQ("file.in:1:5: error: message\n"
+ "1234\n"
+ " ^\n",
+ Output);
+}
+
+TEST_F(SourceMgrTest, LocationOnSecondLineOfMultiline) {
+ setMainBuffer("1234\n6789\n", "file.in");
+ printMessage(getLoc(5), SourceMgr::DK_Error, "message", None, None);
+
+ EXPECT_EQ("file.in:2:1: error: message\n"
+ "6789\n"
+ "^\n",
+ Output);
+}
+
+TEST_F(SourceMgrTest, LocationOnSecondLineOfMultilineNoSecondEOL) {
+ setMainBuffer("1234\n6789", "file.in");
+ printMessage(getLoc(5), SourceMgr::DK_Error, "message", None, None);
+
+ EXPECT_EQ("file.in:2:1: error: message\n"
+ "6789\n"
+ "^\n",
+ Output);
+}
+
+TEST_F(SourceMgrTest, LocationOnEOLOfSecondSecondLineOfMultiline) {
+ setMainBuffer("1234\n6789\n", "file.in");
+ printMessage(getLoc(9), SourceMgr::DK_Error, "message", None, None);
+
+ EXPECT_EQ("file.in:2:5: error: message\n"
+ "6789\n"
+ " ^\n",
+ Output);
+}
+
+#define STRING_LITERAL_253_BYTES \
+ "1234567890\n1234567890\n" \
+ "1234567890\n1234567890\n" \
+ "1234567890\n1234567890\n" \
+ "1234567890\n1234567890\n" \
+ "1234567890\n1234567890\n" \
+ "1234567890\n1234567890\n" \
+ "1234567890\n1234567890\n" \
+ "1234567890\n1234567890\n" \
+ "1234567890\n1234567890\n" \
+ "1234567890\n1234567890\n" \
+ "1234567890\n1234567890\n" \
+ "1234567890\n"
+
+//===----------------------------------------------------------------------===//
+// 255-byte buffer tests
+//===----------------------------------------------------------------------===//
+
+TEST_F(SourceMgrTest, LocationBeforeEndOf255ByteBuffer) {
+ setMainBuffer(STRING_LITERAL_253_BYTES // first 253 bytes
+ "12" // + 2 = 255 bytes
+ , "file.in");
+ printMessage(getLoc(253), SourceMgr::DK_Error, "message", None, None);
+ EXPECT_EQ("file.in:24:1: error: message\n"
+ "12\n"
+ "^\n",
+ Output);
+}
+
+TEST_F(SourceMgrTest, LocationAtEndOf255ByteBuffer) {
+ setMainBuffer(STRING_LITERAL_253_BYTES // first 253 bytes
+ "12" // + 2 = 255 bytes
+ , "file.in");
+ printMessage(getLoc(254), SourceMgr::DK_Error, "message", None, None);
+ EXPECT_EQ("file.in:24:2: error: message\n"
+ "12\n"
+ " ^\n",
+ Output);
+}
+
+TEST_F(SourceMgrTest, LocationPastEndOf255ByteBuffer) {
+ setMainBuffer(STRING_LITERAL_253_BYTES // first 253 bytes
+ "12" // + 2 = 255 bytes
+ , "file.in");
+ printMessage(getLoc(255), SourceMgr::DK_Error, "message", None, None);
+ EXPECT_EQ("file.in:24:3: error: message\n"
+ "12\n"
+ " ^\n",
+ Output);
+}
+
+TEST_F(SourceMgrTest, LocationBeforeEndOf255ByteBufferEndingInNewline) {
+ setMainBuffer(STRING_LITERAL_253_BYTES // first 253 bytes
+ "1\n" // + 2 = 255 bytes
+ , "file.in");
+ printMessage(getLoc(253), SourceMgr::DK_Error, "message", None, None);
+ EXPECT_EQ("file.in:24:1: error: message\n"
+ "1\n"
+ "^\n",
+ Output);
+}
+
+TEST_F(SourceMgrTest, LocationAtEndOf255ByteBufferEndingInNewline) {
+ setMainBuffer(STRING_LITERAL_253_BYTES // first 253 bytes
+ "1\n" // + 2 = 255 bytes
+ , "file.in");
+ printMessage(getLoc(254), SourceMgr::DK_Error, "message", None, None);
+ EXPECT_EQ("file.in:24:2: error: message\n"
+ "1\n"
+ " ^\n",
+ Output);
+}
+
+TEST_F(SourceMgrTest, LocationPastEndOf255ByteBufferEndingInNewline) {
+ setMainBuffer(STRING_LITERAL_253_BYTES // first 253 bytes
+ "1\n" // + 2 = 255 bytes
+ , "file.in");
+ printMessage(getLoc(255), SourceMgr::DK_Error, "message", None, None);
+ EXPECT_EQ("file.in:25:1: error: message\n"
+ "\n"
+ "^\n",
+ Output);
+}
+
+//===----------------------------------------------------------------------===//
+// 256-byte buffer tests
+//===----------------------------------------------------------------------===//
+
+TEST_F(SourceMgrTest, LocationBeforeEndOf256ByteBuffer) {
+ setMainBuffer(STRING_LITERAL_253_BYTES // first 253 bytes
+ "123" // + 3 = 256 bytes
+ , "file.in");
+ printMessage(getLoc(254), SourceMgr::DK_Error, "message", None, None);
+ EXPECT_EQ("file.in:24:2: error: message\n"
+ "123\n"
+ " ^\n",
+ Output);
+}
+
+TEST_F(SourceMgrTest, LocationAtEndOf256ByteBuffer) {
+ setMainBuffer(STRING_LITERAL_253_BYTES // first 253 bytes
+ "123" // + 3 = 256 bytes
+ , "file.in");
+ printMessage(getLoc(255), SourceMgr::DK_Error, "message", None, None);
+ EXPECT_EQ("file.in:24:3: error: message\n"
+ "123\n"
+ " ^\n",
+ Output);
+}
+
+TEST_F(SourceMgrTest, LocationPastEndOf256ByteBuffer) {
+ setMainBuffer(STRING_LITERAL_253_BYTES // first 253 bytes
+ "123" // + 3 = 256 bytes
+ , "file.in");
+ printMessage(getLoc(256), SourceMgr::DK_Error, "message", None, None);
+ EXPECT_EQ("file.in:24:4: error: message\n"
+ "123\n"
+ " ^\n",
+ Output);
+}
+
+TEST_F(SourceMgrTest, LocationBeforeEndOf256ByteBufferEndingInNewline) {
+ setMainBuffer(STRING_LITERAL_253_BYTES // first 253 bytes
+ "12\n" // + 3 = 256 bytes
+ , "file.in");
+ printMessage(getLoc(254), SourceMgr::DK_Error, "message", None, None);
+ EXPECT_EQ("file.in:24:2: error: message\n"
+ "12\n"
+ " ^\n",
+ Output);
+}
+
+TEST_F(SourceMgrTest, LocationAtEndOf256ByteBufferEndingInNewline) {
+ setMainBuffer(STRING_LITERAL_253_BYTES // first 253 bytes
+ "12\n" // + 3 = 256 bytes
+ , "file.in");
+ printMessage(getLoc(255), SourceMgr::DK_Error, "message", None, None);
+ EXPECT_EQ("file.in:24:3: error: message\n"
+ "12\n"
+ " ^\n",
+ Output);
+}
+
+TEST_F(SourceMgrTest, LocationPastEndOf256ByteBufferEndingInNewline) {
+ setMainBuffer(STRING_LITERAL_253_BYTES // first 253 bytes
+ "12\n" // + 3 = 256 bytes
+ , "file.in");
+ printMessage(getLoc(256), SourceMgr::DK_Error, "message", None, None);
+ EXPECT_EQ("file.in:25:1: error: message\n"
+ "\n"
+ "^\n",
+ Output);
+}
+
+//===----------------------------------------------------------------------===//
+// 257-byte buffer tests
+//===----------------------------------------------------------------------===//
+
+TEST_F(SourceMgrTest, LocationBeforeEndOf257ByteBuffer) {
+ setMainBuffer(STRING_LITERAL_253_BYTES // first 253 bytes
+ "1234" // + 4 = 257 bytes
+ , "file.in");
+ printMessage(getLoc(255), SourceMgr::DK_Error, "message", None, None);
+ EXPECT_EQ("file.in:24:3: error: message\n"
+ "1234\n"
+ " ^\n",
+ Output);
+}
+
+TEST_F(SourceMgrTest, LocationAtEndOf257ByteBuffer) {
+ setMainBuffer(STRING_LITERAL_253_BYTES // first 253 bytes
+ "1234" // + 4 = 257 bytes
+ , "file.in");
+ printMessage(getLoc(256), SourceMgr::DK_Error, "message", None, None);
+ EXPECT_EQ("file.in:24:4: error: message\n"
+ "1234\n"
+ " ^\n",
+ Output);
+}
+
+TEST_F(SourceMgrTest, LocationPastEndOf257ByteBuffer) {
+ setMainBuffer(STRING_LITERAL_253_BYTES // first 253 bytes
+ "1234" // + 4 = 257 bytes
+ , "file.in");
+ printMessage(getLoc(257), SourceMgr::DK_Error, "message", None, None);
+ EXPECT_EQ("file.in:24:5: error: message\n"
+ "1234\n"
+ " ^\n",
+ Output);
+}
+
+TEST_F(SourceMgrTest, LocationBeforeEndOf257ByteBufferEndingInNewline) {
+ setMainBuffer(STRING_LITERAL_253_BYTES // first 253 bytes
+ "123\n" // + 4 = 257 bytes
+ , "file.in");
+ printMessage(getLoc(255), SourceMgr::DK_Error, "message", None, None);
+ EXPECT_EQ("file.in:24:3: error: message\n"
+ "123\n"
+ " ^\n",
+ Output);
+}
+
+TEST_F(SourceMgrTest, LocationAtEndOf257ByteBufferEndingInNewline) {
+ setMainBuffer(STRING_LITERAL_253_BYTES // first 253 bytes
+ "123\n" // + 4 = 257 bytes
+ , "file.in");
+ printMessage(getLoc(256), SourceMgr::DK_Error, "message", None, None);
+ EXPECT_EQ("file.in:24:4: error: message\n"
+ "123\n"
+ " ^\n",
+ Output);
+}
+
+TEST_F(SourceMgrTest, LocationPastEndOf257ByteBufferEndingInNewline) {
+ setMainBuffer(STRING_LITERAL_253_BYTES // first 253 bytes
+ "123\n" // + 4 = 257 bytes
+ , "file.in");
+ printMessage(getLoc(257), SourceMgr::DK_Error, "message", None, None);
+ EXPECT_EQ("file.in:25:1: error: message\n"
+ "\n"
+ "^\n",
+ Output);
+}
+
TEST_F(SourceMgrTest, BasicRange) {
setMainBuffer("aaa bbb\nccc ddd\n", "file.in");
printMessage(getLoc(4), SourceMgr::DK_Error, "message", getRange(4, 3), None);