1116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Copyright 2014 The Chromium Authors. All rights reserved.
2116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Use of this source code is governed by a BSD-style license that can be
3116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// found in the LICENSE file.
4116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
5116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "crazy_linker_line_reader.h"
6116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
7116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include <minitest/minitest.h>
8116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
9116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "crazy_linker_system_mock.h"
10116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
11116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace crazy {
12116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
13116680a4aac90f2aa7413d9095a592090648e557Ben Murdochstatic const char kFilePath[] = "/tmp/foo.txt";
14116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
15116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST(LineReader, EmptyConstructor) {
16116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  LineReader reader;
17116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_FALSE(reader.GetNextLine());
18116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
19116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
20116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST(LineReader, EmptyFile) {
21116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  SystemMock sys;
22116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  sys.AddRegularFile(kFilePath, "", 0);
23116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
24116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  LineReader reader(kFilePath);
25116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_FALSE(reader.GetNextLine());
26116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
27116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
28116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST(LineReader, SingleLineFile) {
29116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  SystemMock sys;
30116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  static const char kFile[] = "foo bar\n";
31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  static const size_t kFileSize = sizeof(kFile) - 1;
32116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  sys.AddRegularFile(kFilePath, kFile, kFileSize);
33116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
34116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  LineReader reader(kFilePath);
35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_TRUE(reader.GetNextLine());
36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(kFileSize, reader.length());
37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_MEMEQ(kFile, kFileSize, reader.line(), reader.length());
38116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_FALSE(reader.GetNextLine());
39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
40116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
41116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST(LineReader, SingleLineFileUnterminated) {
42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  SystemMock sys;
43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  static const char kFile[] = "foo bar";
44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  static const size_t kFileSize = sizeof(kFile) - 1;
45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  sys.AddRegularFile(kFilePath, kFile, kFileSize);
46116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  LineReader reader(kFilePath);
48116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_TRUE(reader.GetNextLine());
49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // The LineReader will add a newline to the last line.
50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(kFileSize + 1, reader.length());
51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_MEMEQ(kFile, kFileSize, reader.line(), reader.length() - 1);
52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ('\n', reader.line()[reader.length() - 1]);
53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_FALSE(reader.GetNextLine());
54116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
55116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
56116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST(LineReader, MultiLineFile) {
57116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  SystemMock sys;
58116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  static const char kFile[] =
59116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      "This is a multi\n"
60116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      "line text file that to test the crazy::LineReader class implementation\n"
61116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      "And this is a very long text line to check that the class properly "
62116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      "handles them, through the help of dynamic allocation or something. "
63116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      "Yadda yadda yadda yadda. No newline";
64116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  static const size_t kFileSize = sizeof(kFile) - 1;
65116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  sys.AddRegularFile(kFilePath, kFile, kFileSize);
66116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
67116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  LineReader reader(kFilePath);
68116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
69116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_TRUE(reader.GetNextLine());
70116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_MEMEQ("This is a multi\n", 16, reader.line(), reader.length());
71116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
72116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_TRUE(reader.GetNextLine());
73116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_MEMEQ(
74116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      "line text file that to test the crazy::LineReader class "
75116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      "implementation\n",
76116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      88 - 17,
77116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      reader.line(),
78116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      reader.length());
79116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
80116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_TRUE(reader.GetNextLine());
81116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_MEMEQ(
82116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      "And this is a very long text line to check that the class properly "
83116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      "handles them, through the help of dynamic allocation or something. "
84116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      "Yadda yadda yadda yadda. No newline\n",
85116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      187 - 17,
86116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      reader.line(),
87116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      reader.length());
88116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
89116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_FALSE(reader.GetNextLine());
90116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
91116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
92116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}  // namespace crazy
93116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch