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