| Index: base/files/important_file_writer_unittest.cc
|
| diff --git a/base/files/important_file_writer_unittest.cc b/base/files/important_file_writer_unittest.cc
|
| index 02a5f76b2b6e7a9d775d4b0f4551d205a2aa4c8d..3f62fe4953b8f1792df05a7d065863dad20e093f 100644
|
| --- a/base/files/important_file_writer_unittest.cc
|
| +++ b/base/files/important_file_writer_unittest.cc
|
| @@ -4,6 +4,7 @@
|
|
|
| #include "base/files/important_file_writer.h"
|
|
|
| +#include "base/bind.h"
|
| #include "base/compiler_specific.h"
|
| #include "base/file_util.h"
|
| #include "base/files/file_path.h"
|
| @@ -41,6 +42,41 @@ class DataSerializer : public ImportantFileWriter::DataSerializer {
|
| const std::string data_;
|
| };
|
|
|
| +class SuccessfulWriteObserver {
|
| + public:
|
| + SuccessfulWriteObserver() : successful_write_observed_(false) {}
|
| +
|
| + // Register on_successful_write() to be called on the next successful write
|
| + // of |writer|.
|
| + void ObserveNextSuccessfulWrite(ImportantFileWriter* writer);
|
| +
|
| + // Returns true if a successful write was observed via on_successful_write()
|
| + // and resets the observation state to false regardless.
|
| + bool GetAndResetObservationState();
|
| +
|
| + private:
|
| + void on_successful_write() {
|
| + EXPECT_FALSE(successful_write_observed_);
|
| + successful_write_observed_ = true;
|
| + }
|
| +
|
| + bool successful_write_observed_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(SuccessfulWriteObserver);
|
| +};
|
| +
|
| +void SuccessfulWriteObserver::ObserveNextSuccessfulWrite(
|
| + ImportantFileWriter* writer) {
|
| + writer->RegisterOnNextSuccessfulWriteCallback(base::Bind(
|
| + &SuccessfulWriteObserver::on_successful_write, base::Unretained(this)));
|
| +}
|
| +
|
| +bool SuccessfulWriteObserver::GetAndResetObservationState() {
|
| + bool was_successful_write_observed = successful_write_observed_;
|
| + successful_write_observed_ = false;
|
| + return was_successful_write_observed;
|
| +}
|
| +
|
| } // namespace
|
|
|
| class ImportantFileWriterTest : public testing::Test {
|
| @@ -52,6 +88,7 @@ class ImportantFileWriterTest : public testing::Test {
|
| }
|
|
|
| protected:
|
| + SuccessfulWriteObserver successful_write_observer_;
|
| FilePath file_;
|
| MessageLoop loop_;
|
|
|
| @@ -62,11 +99,47 @@ class ImportantFileWriterTest : public testing::Test {
|
| TEST_F(ImportantFileWriterTest, Basic) {
|
| ImportantFileWriter writer(file_, MessageLoopProxy::current().get());
|
| EXPECT_FALSE(PathExists(writer.path()));
|
| + EXPECT_FALSE(successful_write_observer_.GetAndResetObservationState());
|
| + writer.WriteNow("foo");
|
| + RunLoop().RunUntilIdle();
|
| +
|
| + EXPECT_FALSE(successful_write_observer_.GetAndResetObservationState());
|
| + ASSERT_TRUE(PathExists(writer.path()));
|
| + EXPECT_EQ("foo", GetFileContent(writer.path()));
|
| +}
|
| +
|
| +TEST_F(ImportantFileWriterTest, BasicWithSuccessfulWriteObserver) {
|
| + ImportantFileWriter writer(file_, MessageLoopProxy::current().get());
|
| + EXPECT_FALSE(PathExists(writer.path()));
|
| + EXPECT_FALSE(successful_write_observer_.GetAndResetObservationState());
|
| + successful_write_observer_.ObserveNextSuccessfulWrite(&writer);
|
| writer.WriteNow("foo");
|
| RunLoop().RunUntilIdle();
|
|
|
| + // Confirm that the observer is invoked.
|
| + EXPECT_TRUE(successful_write_observer_.GetAndResetObservationState());
|
| ASSERT_TRUE(PathExists(writer.path()));
|
| EXPECT_EQ("foo", GetFileContent(writer.path()));
|
| +
|
| + // Confirm that re-installing the observer works for another write.
|
| + EXPECT_FALSE(successful_write_observer_.GetAndResetObservationState());
|
| + successful_write_observer_.ObserveNextSuccessfulWrite(&writer);
|
| + writer.WriteNow("bar");
|
| + RunLoop().RunUntilIdle();
|
| +
|
| + EXPECT_TRUE(successful_write_observer_.GetAndResetObservationState());
|
| + ASSERT_TRUE(PathExists(writer.path()));
|
| + EXPECT_EQ("bar", GetFileContent(writer.path()));
|
| +
|
| + // Confirm that writing again without re-installing the observer doesn't
|
| + // result in a notification.
|
| + EXPECT_FALSE(successful_write_observer_.GetAndResetObservationState());
|
| + writer.WriteNow("baz");
|
| + RunLoop().RunUntilIdle();
|
| +
|
| + EXPECT_FALSE(successful_write_observer_.GetAndResetObservationState());
|
| + ASSERT_TRUE(PathExists(writer.path()));
|
| + EXPECT_EQ("baz", GetFileContent(writer.path()));
|
| }
|
|
|
| TEST_F(ImportantFileWriterTest, ScheduleWrite) {
|
|
|