119 lines
3.5 KiB
C++
119 lines
3.5 KiB
C++
|
// Copyright (c) 2013 Google Inc. All rights reserved.
|
||
|
// Use of this source code is governed by a BSD-style license tha can be
|
||
|
// found in the LICENSE file.
|
||
|
|
||
|
#include "media/file/file.h"
|
||
|
|
||
|
#include "base/file_util.h"
|
||
|
#include "testing/gtest/include/gtest/gtest.h"
|
||
|
|
||
|
namespace {
|
||
|
const int kDataSize = 1024;
|
||
|
const char* kTestLocalFileName = "/tmp/local_file_test";
|
||
|
}
|
||
|
|
||
|
namespace media {
|
||
|
|
||
|
class LocalFileTest : public testing::Test {
|
||
|
protected:
|
||
|
virtual void SetUp() {
|
||
|
data_.resize(kDataSize);
|
||
|
for (int i = 0; i < kDataSize; ++i)
|
||
|
data_[i] = i % 256;
|
||
|
|
||
|
// Test file path for file_util API.
|
||
|
test_file_path_ = base::FilePath(kTestLocalFileName);
|
||
|
|
||
|
// Local file name with prefix for File API.
|
||
|
local_file_name_ = kLocalFilePrefix;
|
||
|
local_file_name_ += kTestLocalFileName;
|
||
|
}
|
||
|
|
||
|
virtual void TearDown() {
|
||
|
// Remove test file if created.
|
||
|
base::DeleteFile(base::FilePath(kTestLocalFileName), false);
|
||
|
}
|
||
|
|
||
|
std::string data_;
|
||
|
base::FilePath test_file_path_;
|
||
|
std::string local_file_name_;
|
||
|
};
|
||
|
|
||
|
TEST_F(LocalFileTest, ReadNotExist) {
|
||
|
// Remove test file if it exists.
|
||
|
base::DeleteFile(base::FilePath(kTestLocalFileName), false);
|
||
|
ASSERT_TRUE(File::Open(local_file_name_.c_str(), "r") == NULL);
|
||
|
}
|
||
|
|
||
|
TEST_F(LocalFileTest, Size) {
|
||
|
ASSERT_EQ(kDataSize,
|
||
|
file_util::WriteFile(test_file_path_, data_.data(), kDataSize));
|
||
|
ASSERT_EQ(kDataSize, File::GetFileSize(local_file_name_.c_str()));
|
||
|
}
|
||
|
|
||
|
TEST_F(LocalFileTest, Write) {
|
||
|
// Write file using File API.
|
||
|
File* file = File::Open(local_file_name_.c_str(), "w");
|
||
|
ASSERT_TRUE(file != NULL);
|
||
|
EXPECT_EQ(kDataSize, file->Write(&data_[0], kDataSize));
|
||
|
EXPECT_EQ(kDataSize, file->Size());
|
||
|
EXPECT_TRUE(file->Close());
|
||
|
|
||
|
// Read file using file_util API.
|
||
|
std::string read_data(kDataSize, 0);
|
||
|
ASSERT_EQ(kDataSize,
|
||
|
file_util::ReadFile(test_file_path_, &read_data[0], kDataSize));
|
||
|
|
||
|
// Compare data written and read.
|
||
|
EXPECT_EQ(data_, read_data);
|
||
|
}
|
||
|
|
||
|
TEST_F(LocalFileTest, Read_And_Eof) {
|
||
|
// Write file using file_util API.
|
||
|
ASSERT_EQ(kDataSize,
|
||
|
file_util::WriteFile(test_file_path_, data_.data(), kDataSize));
|
||
|
|
||
|
// Read file using File API.
|
||
|
File* file = File::Open(local_file_name_.c_str(), "r");
|
||
|
ASSERT_TRUE(file != NULL);
|
||
|
|
||
|
// Read half of the file and verify that Eof is not true.
|
||
|
const int kFirstReadBytes = kDataSize / 2;
|
||
|
std::string read_data(kFirstReadBytes + kDataSize, 0);
|
||
|
EXPECT_EQ(kFirstReadBytes, file->Read(&read_data[0], kFirstReadBytes));
|
||
|
EXPECT_FALSE(file->Eof());
|
||
|
|
||
|
// Read the remaining half of the file and verify Eof is true.
|
||
|
EXPECT_EQ(kDataSize - kFirstReadBytes,
|
||
|
file->Read(&read_data[kFirstReadBytes], kDataSize));
|
||
|
EXPECT_TRUE(file->Eof());
|
||
|
EXPECT_TRUE(file->Close());
|
||
|
|
||
|
// Compare data written and read.
|
||
|
read_data.resize(kDataSize);
|
||
|
EXPECT_EQ(data_, read_data);
|
||
|
}
|
||
|
|
||
|
TEST_F(LocalFileTest, WriteRead) {
|
||
|
// Write file using File API, using file name directly (without prefix).
|
||
|
File* file = File::Open(kTestLocalFileName, "w");
|
||
|
ASSERT_TRUE(file != NULL);
|
||
|
EXPECT_EQ(kDataSize, file->Write(&data_[0], kDataSize));
|
||
|
EXPECT_EQ(kDataSize, file->Size());
|
||
|
EXPECT_TRUE(file->Close());
|
||
|
|
||
|
// Read file using File API, using local file prefix + file name.
|
||
|
file = File::Open(local_file_name_.c_str(), "r");
|
||
|
ASSERT_TRUE(file != NULL);
|
||
|
|
||
|
// Read half of the file and verify that Eof is not true.
|
||
|
std::string read_data(kDataSize, 0);
|
||
|
EXPECT_EQ(kDataSize, file->Read(&read_data[0], kDataSize));
|
||
|
EXPECT_TRUE(file->Close());
|
||
|
|
||
|
// Compare data written and read.
|
||
|
EXPECT_EQ(data_, read_data);
|
||
|
}
|
||
|
|
||
|
} // namespace media
|