1// Copyright 2014 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 11namespace crazy { 12 13static const char kFilePath[] = "/tmp/foo.txt"; 14 15TEST(LineReader, EmptyConstructor) { 16 LineReader reader; 17 EXPECT_FALSE(reader.GetNextLine()); 18} 19 20TEST(LineReader, EmptyFile) { 21 SystemMock sys; 22 sys.AddRegularFile(kFilePath, "", 0); 23 24 LineReader reader(kFilePath); 25 EXPECT_FALSE(reader.GetNextLine()); 26} 27 28TEST(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 41TEST(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 56TEST(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