| OLD | NEW |
| (Empty) |
| 1 // Copyright (c) 2012 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 "chrome/browser/chromeos/drive/file_write_helper.h" | |
| 6 | |
| 7 #include "base/bind.h" | |
| 8 #include "chrome/browser/chromeos/drive/dummy_file_system.h" | |
| 9 #include "chrome/browser/chromeos/drive/test_util.h" | |
| 10 #include "content/public/test/test_browser_thread_bundle.h" | |
| 11 #include "testing/gtest/include/gtest/gtest.h" | |
| 12 | |
| 13 namespace drive { | |
| 14 | |
| 15 namespace { | |
| 16 | |
| 17 const base::FilePath::CharType kDrivePath[] = | |
| 18 FILE_PATH_LITERAL("drive/root/file.txt"); | |
| 19 const base::FilePath::CharType kInvalidPath[] = | |
| 20 FILE_PATH_LITERAL("drive/invalid/path"); | |
| 21 const base::FilePath::CharType kLocalPath[] = | |
| 22 FILE_PATH_LITERAL("/tmp/local.txt"); | |
| 23 | |
| 24 class TestFileSystem : public DummyFileSystem { | |
| 25 public: | |
| 26 TestFileSystem() : num_closed_(0) { | |
| 27 } | |
| 28 | |
| 29 int num_closed() const { return num_closed_; } | |
| 30 | |
| 31 // Mimics OpenFile. It fails if the |file_path| points to a hosted document. | |
| 32 virtual void OpenFile(const base::FilePath& file_path, | |
| 33 OpenMode open_mode, | |
| 34 const OpenFileCallback& callback) OVERRIDE { | |
| 35 EXPECT_EQ(OPEN_OR_CREATE_FILE, open_mode); | |
| 36 | |
| 37 // Emulate a case of opening a hosted document. | |
| 38 if (file_path == base::FilePath(kInvalidPath)) { | |
| 39 callback.Run(FILE_ERROR_INVALID_OPERATION, base::FilePath(), | |
| 40 base::Closure()); | |
| 41 return; | |
| 42 } | |
| 43 | |
| 44 callback.Run(FILE_ERROR_OK, base::FilePath(kLocalPath), | |
| 45 base::Bind(&TestFileSystem::CloseFile, | |
| 46 base::Unretained(this))); | |
| 47 } | |
| 48 | |
| 49 private: | |
| 50 | |
| 51 void CloseFile() { | |
| 52 ++num_closed_; | |
| 53 } | |
| 54 | |
| 55 int num_closed_; | |
| 56 }; | |
| 57 | |
| 58 } // namespace | |
| 59 | |
| 60 class FileWriteHelperTest : public testing::Test { | |
| 61 public: | |
| 62 FileWriteHelperTest() | |
| 63 : test_file_system_(new TestFileSystem) { | |
| 64 } | |
| 65 | |
| 66 protected: | |
| 67 content::TestBrowserThreadBundle thread_bundle_; | |
| 68 scoped_ptr<TestFileSystem> test_file_system_; | |
| 69 }; | |
| 70 | |
| 71 TEST_F(FileWriteHelperTest, PrepareFileForWritingSuccess) { | |
| 72 FileWriteHelper file_write_helper(test_file_system_.get()); | |
| 73 FileError error = FILE_ERROR_FAILED; | |
| 74 base::FilePath path; | |
| 75 // The file should successfully be opened. | |
| 76 file_write_helper.PrepareWritableFileAndRun( | |
| 77 base::FilePath(kDrivePath), | |
| 78 google_apis::test_util::CreateCopyResultCallback(&error, &path)); | |
| 79 test_util::RunBlockingPoolTask(); | |
| 80 | |
| 81 EXPECT_EQ(FILE_ERROR_OK, error); | |
| 82 EXPECT_EQ(kLocalPath, path.value()); | |
| 83 | |
| 84 // Make sure that the file is actually closed. | |
| 85 EXPECT_EQ(1, test_file_system_->num_closed()); | |
| 86 } | |
| 87 | |
| 88 TEST_F(FileWriteHelperTest, PrepareFileForWritingCreateFail) { | |
| 89 FileWriteHelper file_write_helper(test_file_system_.get()); | |
| 90 FileError error = FILE_ERROR_FAILED; | |
| 91 base::FilePath path; | |
| 92 // Access to kInvalidPath should fail, and FileWriteHelper should not try to | |
| 93 // open or close the file. | |
| 94 file_write_helper.PrepareWritableFileAndRun( | |
| 95 base::FilePath(kInvalidPath), | |
| 96 google_apis::test_util::CreateCopyResultCallback(&error, &path)); | |
| 97 test_util::RunBlockingPoolTask(); | |
| 98 | |
| 99 EXPECT_EQ(FILE_ERROR_INVALID_OPERATION, error); | |
| 100 EXPECT_TRUE(path.empty()); | |
| 101 } | |
| 102 | |
| 103 } // namespace drive | |
| OLD | NEW |