Index: base/file_reader_unittest.cc |
diff --git a/base/file_reader_unittest.cc b/base/file_reader_unittest.cc |
deleted file mode 100644 |
index 1897033a6888a82e0adb298ee11fd4894ee95aff..0000000000000000000000000000000000000000 |
--- a/base/file_reader_unittest.cc |
+++ /dev/null |
@@ -1,304 +0,0 @@ |
-// Copyright 2003-2009 Google Inc. |
-// |
-// 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. |
-// ======================================================================== |
- |
-// TODO(omaha): improve unit test. For example, test we are handling correctly |
-// different types of line termination. |
- |
-#include <vector> |
-#include "base/scoped_ptr.h" |
-#include "omaha/base/file_reader.h" |
-#include "omaha/testing/unit_test.h" |
- |
-namespace omaha { |
- |
-class ReadingFilesTest : public testing::Test { |
- protected: |
- ReadingFilesTest() { |
- temp_file_[0] = '\0'; |
- } |
- |
- virtual void SetUp() { |
- // create a temporary file |
- TCHAR temp_path[MAX_PATH] = {0}; |
- EXPECT_LT(::GetTempPath(arraysize(temp_path), temp_path), |
- arraysize(temp_path)); |
- EXPECT_NE(::GetTempFileName(temp_path, _T("ut_"), 0, temp_file_), 0); |
- } |
- |
- virtual void TearDown() { |
- // remove the temporary file |
- if (::lstrlen(temp_file_) > 0) { |
- ASSERT_SUCCEEDED(File::Remove(temp_file_)); |
- } |
- } |
- |
- void Compare(const std::vector<char*>& lines1, |
- const std::vector<char*>& lines2, |
- byte** orig_lines, int* lengths, int* copies) { |
- // verify that all three things match |
- // * The lines read using the File class, |
- // * The lines read using the FileReader class, |
- // * The original data used to write the files |
- EXPECT_EQ(lines1.size(), lines2.size()); |
- |
- for (uint32 line_number = 0; line_number < lines1.size(); line_number++) { |
- int index = 0; |
- int data_length = lengths[line_number]; |
- int data_copies = copies[line_number]; |
- for (int copy = 0; copy < data_copies; copy++) { |
- for (int index_data = 0; index_data < data_length; index_data++) { |
- EXPECT_EQ(lines1[line_number][index], lines2[line_number][index]); |
- EXPECT_EQ(lines1[line_number][index], |
- orig_lines[line_number][index_data]); |
- index++; |
- } |
- } |
- EXPECT_EQ(lines1[line_number][index], lines2[line_number][index]); |
- EXPECT_EQ(lines1[line_number][index], '\0'); |
- } |
- } |
- |
- void DeleteContainedArrays(std::vector<char*>* lines) { |
- for (uint32 line_number = 0; line_number < lines->size(); line_number++) { |
- delete[] (*lines)[line_number]; |
- (*lines)[line_number] = NULL; |
- } |
- } |
- |
- HRESULT WriteCStringW(File* file, CStringW* str) { |
- return file->Write(reinterpret_cast<const byte*>(str->GetBuffer()), |
- str->GetLength() * sizeof(WCHAR), |
- NULL); |
- } |
- |
- void TestReadFileStringUnicode(int buffer_size) { |
- CStringW line1 = L"hello there, here's some data"; |
- CStringW line2 = L"i've got more\tdata over here."; |
- CStringW eol1 = L"\r"; |
- CStringW eol2 = L"\r\n"; |
- CStringW eol3 = L"\n"; |
- |
- std::vector<CString> expected_lines; |
- expected_lines.push_back(CString(line1)); |
- expected_lines.push_back(CString(line2)); |
- expected_lines.push_back(CString(line1)); |
- expected_lines.push_back(CString(line1)); |
- expected_lines.push_back(CString(line2)); |
- |
- File file_write; |
- EXPECT_SUCCEEDED(file_write.Open(temp_file_, true, false)); |
- |
- // Write the unicode marker to the beginning of the file. |
- byte buf[2] = {0xff, 0xfe}; |
- EXPECT_SUCCEEDED(file_write.Write(buf, sizeof(buf), NULL)); |
- |
- EXPECT_SUCCEEDED(WriteCStringW(&file_write, &line1)); |
- EXPECT_SUCCEEDED(WriteCStringW(&file_write, &eol1)); |
- EXPECT_SUCCEEDED(WriteCStringW(&file_write, &line2)); |
- EXPECT_SUCCEEDED(WriteCStringW(&file_write, &eol1)); |
- EXPECT_SUCCEEDED(WriteCStringW(&file_write, &line1)); |
- EXPECT_SUCCEEDED(WriteCStringW(&file_write, &eol3)); |
- EXPECT_SUCCEEDED(WriteCStringW(&file_write, &line1)); |
- EXPECT_SUCCEEDED(WriteCStringW(&file_write, &eol2)); |
- EXPECT_SUCCEEDED(WriteCStringW(&file_write, &line2)); |
- file_write.Close(); |
- |
- FileReader reader; |
- EXPECT_SUCCEEDED(reader.Init(temp_file_, buffer_size)); |
- |
- std::vector<CString> read_lines; |
- CString current_string; |
- while (SUCCEEDED(reader.ReadLineString(¤t_string))) { |
- read_lines.push_back(current_string); |
- } |
- |
- ASSERT_EQ(expected_lines.size(), read_lines.size()); |
- |
- if (expected_lines.size() == read_lines.size()) { |
- for (size_t i = 0; i < expected_lines.size(); ++i) { |
- CString expected_str = expected_lines[i]; |
- CString read_str = read_lines[i]; |
- ASSERT_STREQ(expected_str, read_str); |
- } |
- } |
- } |
- |
- TCHAR temp_file_[MAX_PATH]; |
- |
- DISALLOW_EVIL_CONSTRUCTORS(ReadingFilesTest); |
-}; |
- |
- |
-TEST_F(ReadingFilesTest, ReadFile1) { |
- // write the data to the file |
- File file_write; |
- EXPECT_SUCCEEDED(file_write.Open(temp_file_, true, false)); |
- byte data1[] = {'a', 'b', 'c', 'z', '!', '&', '\t'}; |
- int data1_copies = 1; |
- EXPECT_SUCCEEDED(file_write.WriteN(data1, arraysize(data1), data1_copies, |
- NULL)); |
- byte return_data = '\n'; |
- EXPECT_SUCCEEDED(file_write.WriteN(&return_data, 1, 1, NULL)); |
- |
- byte data2[] = {'d', 'a', 'v', 'e', ' ', ' ', '\t', '\\'}; |
- int data2_copies = 2; |
- EXPECT_SUCCEEDED(file_write.WriteN(data2, arraysize(data2), data2_copies, |
- NULL)); |
- file_write.Close(); |
- |
- // read in the file line by line using the File class |
- std::vector<char*> lines1; |
- File file_read1; |
- ASSERT_SUCCEEDED(file_read1.Open(temp_file_, false, false)); |
- while (true) { |
- uint32 bytes_read; |
- scoped_array<char> line(new char[256]); |
- if (FAILED(file_read1.ReadLineAnsi(256, line.get(), &bytes_read))) { |
- break; |
- } |
- lines1.push_back(line.release()); |
- } |
- |
- file_read1.Close(); |
- |
- // read in the file line by line using the FileReader class |
- std::vector<char*> lines2; |
- FileReader file_read2; |
- size_t buffer_size = 512; |
- ASSERT_SUCCEEDED(file_read2.Init(temp_file_, buffer_size)); |
- while (true) { |
- scoped_array<char> line(new char[256]); |
- if (FAILED(file_read2.ReadLineAnsi(256, line.get()))) { |
- break; |
- } |
- lines2.push_back(line.release()); |
- } |
- |
- // Verify that everything matches |
- byte* (orig_lines[]) = {data1, data2}; |
- int copies[] = {data1_copies, data2_copies}; |
- int lengths[] = {arraysize(data1), arraysize(data2)}; |
- Compare(lines1, lines2, orig_lines, lengths, copies); |
- |
- // Free the allocated memory |
- DeleteContainedArrays(&lines1); |
- DeleteContainedArrays(&lines1); |
-} |
- |
-// Two readers should be able to read from the same file. |
-TEST_F(ReadingFilesTest, ReadFileShare) { |
- File file; |
- EXPECT_SUCCEEDED(file.Open(temp_file_, true, false)); |
- file.Close(); |
- |
- const size_t kBufferSize = 0x100; |
- |
- FileReader reader1; |
- EXPECT_SUCCEEDED(reader1.Init(temp_file_, kBufferSize)); |
- |
- FileReader reader2; |
- EXPECT_SUCCEEDED(reader2.Init(temp_file_, kBufferSize)); |
-} |
- |
-HRESULT WriteCStringA(File* file, CStringA* str) { |
- return file->Write(reinterpret_cast<const byte*>(str->GetBuffer()), |
- str->GetLength(), |
- NULL); |
-} |
- |
-TEST_F(ReadingFilesTest, ReadFileStringAnsi) { |
- CStringA line1 = "hello there, here's some data"; |
- CStringA line2 = "i've got more\tdata over here."; |
- CStringA eol1 = "\r"; |
- CStringA eol2 = "\r\n"; |
- CStringA eol3 = "\n"; |
- |
- std::vector<CString> expected_lines; |
- expected_lines.push_back(CString(line1)); |
- expected_lines.push_back(CString(line2)); |
- expected_lines.push_back(CString(line1)); |
- expected_lines.push_back(CString(line1)); |
- expected_lines.push_back(CString(line2)); |
- |
- File file_write; |
- EXPECT_SUCCEEDED(file_write.Open(temp_file_, true, false)); |
- EXPECT_SUCCEEDED(WriteCStringA(&file_write, &line1)); |
- EXPECT_SUCCEEDED(WriteCStringA(&file_write, &eol1)); |
- EXPECT_SUCCEEDED(WriteCStringA(&file_write, &line2)); |
- EXPECT_SUCCEEDED(WriteCStringA(&file_write, &eol1)); |
- EXPECT_SUCCEEDED(WriteCStringA(&file_write, &line1)); |
- EXPECT_SUCCEEDED(WriteCStringA(&file_write, &eol3)); |
- EXPECT_SUCCEEDED(WriteCStringA(&file_write, &line1)); |
- EXPECT_SUCCEEDED(WriteCStringA(&file_write, &eol2)); |
- EXPECT_SUCCEEDED(WriteCStringA(&file_write, &line2)); |
- file_write.Close(); |
- |
- FileReader reader; |
- EXPECT_SUCCEEDED(reader.Init(temp_file_, 20)); |
- |
- std::vector<CString> read_lines; |
- CString current_string; |
- while (SUCCEEDED(reader.ReadLineString(¤t_string))) { |
- read_lines.push_back(current_string); |
- } |
- |
- ASSERT_EQ(expected_lines.size(), read_lines.size()); |
- |
- if (expected_lines.size() == read_lines.size()) { |
- for (size_t i = 0; i < expected_lines.size(); ++i) { |
- CString expected_str = expected_lines[i]; |
- CString read_str = read_lines[i]; |
- ASSERT_STREQ(expected_str, read_str); |
- } |
- } |
-} |
- |
-TEST_F(ReadingFilesTest, ReadFileStringUnicodeSmallBuffer) { |
- TestReadFileStringUnicode(20); |
-} |
- |
-TEST_F(ReadingFilesTest, ReadFileStringUnicodeHugeBuffer) { |
- TestReadFileStringUnicode(4096); |
-} |
- |
-TEST_F(ReadingFilesTest, ReadFileStringUnicodeSmallOddBufferBuffer) { |
- TestReadFileStringUnicode(19); |
-} |
- |
-TEST_F(ReadingFilesTest, ReadFileStringUnicodeTinyOddBuffer) { |
- TestReadFileStringUnicode(3); |
-} |
- |
-TEST_F(ReadingFilesTest, ReadFileStringUnicodeTinyEvenBuffer) { |
- TestReadFileStringUnicode(2); |
-} |
- |
-TEST_F(ReadingFilesTest, ReadFileStringUnicodeOneByteBuffer) { |
- File file_write; |
- EXPECT_SUCCEEDED(file_write.Open(temp_file_, true, false)); |
- |
- // Write the unicode marker to the beginning of the file. |
- byte buf[2] = {0xff, 0xfe}; |
- EXPECT_SUCCEEDED(file_write.Write(buf, sizeof(buf), NULL)); |
- |
- file_write.Close(); |
- |
- FileReader reader; |
- EXPECT_EQ(HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER), |
- reader.Init(temp_file_, 1)); |
-} |
- |
-} // namespace omaha |
- |