OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "webkit/fileapi/file_system_operation.h" | 5 #include "webkit/fileapi/file_system_operation.h" |
6 | 6 |
7 #include "base/logging.h" | 7 #include "base/logging.h" |
8 #include "base/message_loop.h" | 8 #include "base/message_loop.h" |
9 #include "base/scoped_ptr.h" | 9 #include "base/scoped_ptr.h" |
10 #include "base/scoped_temp_dir.h" | 10 #include "base/scoped_temp_dir.h" |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
45 virtual void DidReadDirectory( | 45 virtual void DidReadDirectory( |
46 const std::vector<base::file_util_proxy::Entry>& entries, | 46 const std::vector<base::file_util_proxy::Entry>& entries, |
47 bool /* has_more */) { | 47 bool /* has_more */) { |
48 entries_ = entries; | 48 entries_ = entries; |
49 } | 49 } |
50 | 50 |
51 virtual void DidOpenFileSystem(const std::string&, const FilePath&) { | 51 virtual void DidOpenFileSystem(const std::string&, const FilePath&) { |
52 NOTREACHED(); | 52 NOTREACHED(); |
53 } | 53 } |
54 | 54 |
55 virtual void DidWrite(int64 bytes, bool complete) { | |
56 NOTREACHED(); | |
57 } | |
58 | |
59 // Helpers for testing. | 55 // Helpers for testing. |
60 int status() const { return status_; } | 56 int status() const { return status_; } |
61 int request_id() const { return request_id_; } | 57 int request_id() const { return request_id_; } |
62 const base::PlatformFileInfo& info() const { return info_; } | 58 const base::PlatformFileInfo& info() const { return info_; } |
63 const std::vector<base::file_util_proxy::Entry>& entries() const { | 59 const std::vector<base::file_util_proxy::Entry>& entries() const { |
64 return entries_; | 60 return entries_; |
65 } | 61 } |
66 | 62 |
67 private: | 63 private: |
68 int status_; | 64 int status_; |
(...skipping 481 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
550 ScopedTempDir empty_dir; | 546 ScopedTempDir empty_dir; |
551 ASSERT_TRUE(empty_dir.CreateUniqueTempDir()); | 547 ASSERT_TRUE(empty_dir.CreateUniqueTempDir()); |
552 EXPECT_TRUE(file_util::DirectoryExists(empty_dir.path())); | 548 EXPECT_TRUE(file_util::DirectoryExists(empty_dir.path())); |
553 | 549 |
554 operation()->Remove(empty_dir.path()); | 550 operation()->Remove(empty_dir.path()); |
555 MessageLoop::current()->RunAllPending(); | 551 MessageLoop::current()->RunAllPending(); |
556 EXPECT_EQ(kFileOperationSucceeded, mock_dispatcher_->status()); | 552 EXPECT_EQ(kFileOperationSucceeded, mock_dispatcher_->status()); |
557 EXPECT_FALSE(file_util::DirectoryExists(empty_dir.path())); | 553 EXPECT_FALSE(file_util::DirectoryExists(empty_dir.path())); |
558 EXPECT_EQ(request_id_, mock_dispatcher_->request_id()); | 554 EXPECT_EQ(request_id_, mock_dispatcher_->request_id()); |
559 } | 555 } |
560 | |
561 TEST_F(FileSystemOperationTest, TestTruncate) { | |
562 ScopedTempDir dir; | |
563 ASSERT_TRUE(dir.CreateUniqueTempDir()); | |
564 FilePath file; | |
565 file_util::CreateTemporaryFileInDir(dir.path(), &file); | |
566 | |
567 char test_data[] = "test data"; | |
568 EXPECT_EQ(sizeof(test_data), | |
569 file_util::WriteFile(file, test_data, sizeof(test_data))); | |
570 | |
571 // Check that its length is the size of the data written. | |
572 operation()->GetMetadata(file); | |
573 MessageLoop::current()->RunAllPending(); | |
574 EXPECT_EQ(kFileOperationSucceeded, mock_dispatcher_->status()); | |
575 EXPECT_FALSE(mock_dispatcher_->info().is_directory); | |
576 EXPECT_EQ(sizeof(test_data), mock_dispatcher_->info().size); | |
577 EXPECT_EQ(request_id_, mock_dispatcher_->request_id()); | |
578 | |
579 // Extend the file by truncating it. | |
580 int length = 17; | |
581 operation()->Truncate(file, length); | |
582 MessageLoop::current()->RunAllPending(); | |
583 EXPECT_EQ(kFileOperationSucceeded, mock_dispatcher_->status()); | |
584 EXPECT_EQ(request_id_, mock_dispatcher_->request_id()); | |
585 | |
586 // Check that its length is now 17 and that it's all zeroes after the test | |
587 // data. | |
588 base::PlatformFileInfo info; | |
589 EXPECT_TRUE(file_util::GetFileInfo(file, &info)); | |
590 EXPECT_EQ(length, info.size); | |
591 char data[100]; | |
592 EXPECT_EQ(length, file_util::ReadFile(file, data, length)); | |
593 for (int i = 0; i < length; ++i) { | |
594 if (i < sizeof(test_data)) | |
595 EXPECT_EQ(test_data[i], data[i]); | |
596 else | |
597 EXPECT_EQ(0, data[i]); | |
598 } | |
599 | |
600 // Shorten the file by truncating it. | |
601 length = 3; | |
602 operation()->Truncate(file, length); | |
603 MessageLoop::current()->RunAllPending(); | |
604 EXPECT_EQ(kFileOperationSucceeded, mock_dispatcher_->status()); | |
605 EXPECT_EQ(request_id_, mock_dispatcher_->request_id()); | |
606 | |
607 // Check that its length is now 3 and that it contains only bits of test data. | |
608 EXPECT_TRUE(file_util::GetFileInfo(file, &info)); | |
609 EXPECT_EQ(length, info.size); | |
610 EXPECT_EQ(length, file_util::ReadFile(file, data, length)); | |
611 for (int i = 0; i < length; ++i) | |
612 EXPECT_EQ(test_data[i], data[i]); | |
613 } | |
OLD | NEW |