1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "crazy_linker_line_reader.h"
6
7 #include <minitest/minitest.h>
8
9 #include "crazy_linker_system_mock.h"
10
11 namespace crazy {
12
13 static const char kFilePath[] = "/tmp/foo.txt";
14
TEST(LineReader,EmptyConstructor)15 TEST(LineReader, EmptyConstructor) {
16 LineReader reader;
17 EXPECT_FALSE(reader.GetNextLine());
18 }
19
TEST(LineReader,EmptyFile)20 TEST(LineReader, EmptyFile) {
21 SystemMock sys;
22 sys.AddRegularFile(kFilePath, "", 0);
23
24 LineReader reader(kFilePath);
25 EXPECT_FALSE(reader.GetNextLine());
26 }
27
TEST(LineReader,SingleLineFile)28 TEST(LineReader, SingleLineFile) {
29 SystemMock sys;
30 static const char kFile[] = "foo bar\n";
31 static const size_t kFileSize = sizeof(kFile) - 1;
32 sys.AddRegularFile(kFilePath, kFile, kFileSize);
33
34 LineReader reader(kFilePath);
35 EXPECT_TRUE(reader.GetNextLine());
36 EXPECT_EQ(kFileSize, reader.length());
37 EXPECT_MEMEQ(kFile, kFileSize, reader.line(), reader.length());
38 EXPECT_FALSE(reader.GetNextLine());
39 }
40
TEST(LineReader,SingleLineFileUnterminated)41 TEST(LineReader, SingleLineFileUnterminated) {
42 SystemMock sys;
43 static const char kFile[] = "foo bar";
44 static const size_t kFileSize = sizeof(kFile) - 1;
45 sys.AddRegularFile(kFilePath, kFile, kFileSize);
46
47 LineReader reader(kFilePath);
48 EXPECT_TRUE(reader.GetNextLine());
49 // The LineReader will add a newline to the last line.
50 EXPECT_EQ(kFileSize + 1, reader.length());
51 EXPECT_MEMEQ(kFile, kFileSize, reader.line(), reader.length() - 1);
52 EXPECT_EQ('\n', reader.line()[reader.length() - 1]);
53 EXPECT_FALSE(reader.GetNextLine());
54 }
55
TEST(LineReader,MultiLineFile)56 TEST(LineReader, MultiLineFile) {
57 SystemMock sys;
58 static const char kFile[] =
59 "This is a multi\n"
60 "line text file that to test the crazy::LineReader class implementation\n"
61 "And this is a very long text line to check that the class properly "
62 "handles them, through the help of dynamic allocation or something. "
63 "Yadda yadda yadda yadda. No newline";
64 static const size_t kFileSize = sizeof(kFile) - 1;
65 sys.AddRegularFile(kFilePath, kFile, kFileSize);
66
67 LineReader reader(kFilePath);
68
69 EXPECT_TRUE(reader.GetNextLine());
70 EXPECT_MEMEQ("This is a multi\n", 16, reader.line(), reader.length());
71
72 EXPECT_TRUE(reader.GetNextLine());
73 EXPECT_MEMEQ(
74 "line text file that to test the crazy::LineReader class "
75 "implementation\n",
76 88 - 17,
77 reader.line(),
78 reader.length());
79
80 EXPECT_TRUE(reader.GetNextLine());
81 EXPECT_MEMEQ(
82 "And this is a very long text line to check that the class properly "
83 "handles them, through the help of dynamic allocation or something. "
84 "Yadda yadda yadda yadda. No newline\n",
85 187 - 17,
86 reader.line(),
87 reader.length());
88
89 EXPECT_FALSE(reader.GetNextLine());
90 }
91
92 } // namespace crazy
93