blob: b396f190c306f7e70e3d0a408fd4fef2d409054d [file] [log] [blame]
//
// Copyright (C) 2013 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
#include "shill/file_reader.h"
#include <string>
#include <vector>
#include <base/files/file_util.h>
#include <base/files/scoped_temp_dir.h>
#include <base/strings/string_util.h>
#include <gtest/gtest.h>
using base::FilePath;
using std::string;
using std::vector;
namespace shill {
class FileReaderTest : public ::testing::Test {
public:
void VerifyReadLines(const FilePath& path, const vector<string>& lines) {
string line;
EXPECT_FALSE(reader_.ReadLine(&line));
EXPECT_TRUE(reader_.Open(path));
for (size_t i = 0; i < lines.size(); ++i) {
EXPECT_TRUE(reader_.ReadLine(&line));
EXPECT_EQ(lines[i], line);
}
EXPECT_FALSE(reader_.ReadLine(&line));
reader_.Close();
EXPECT_FALSE(reader_.ReadLine(&line));
}
protected:
FileReader reader_;
};
TEST_F(FileReaderTest, OpenNonExistentFile) {
EXPECT_FALSE(reader_.Open(FilePath("a_nonexistent_file")));
}
TEST_F(FileReaderTest, OpenEmptyFile) {
base::ScopedTempDir temp_dir;
ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
FilePath path;
ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir.GetPath(), &path));
EXPECT_TRUE(reader_.Open(path));
string line;
EXPECT_FALSE(reader_.ReadLine(&line));
reader_.Close();
}
TEST_F(FileReaderTest, ReadLine) {
vector<string> lines;
lines.push_back("this is");
lines.push_back("a");
lines.push_back("");
lines.push_back("test");
string content = base::JoinString(lines, "\n");
base::ScopedTempDir temp_dir;
ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
FilePath path;
ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir.GetPath(), &path));
// Test a file not ending with a new-line character
ASSERT_EQ(content.size(),
base::WriteFile(path, content.c_str(), content.size()));
VerifyReadLines(path, lines);
// Test a file ending with a new-line character
content.push_back('\n');
ASSERT_EQ(content.size(),
base::WriteFile(path, content.c_str(), content.size()));
VerifyReadLines(path, lines);
}
} // namespace shill