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 // A handy class that takes care of setting up and destroying a 6 // syncable::Directory instance for unit tests that require one. 7 // 8 // The expected usage is to make this a component of your test fixture: 9 // 10 // class AwesomenessTest : public testing::Test { 11 // public: 12 // virtual void SetUp() { 13 // metadb_.SetUp(); 14 // } 15 // virtual void TearDown() { 16 // metadb_.TearDown(); 17 // } 18 // protected: 19 // TestDirectorySetterUpper metadb_; 20 // }; 21 // 22 // Then, in your tests, get at the directory like so: 23 // 24 // TEST_F(AwesomenessTest, IsMaximal) { 25 // ... now use metadb_.directory() to get at syncable::Entry objects ... 26 // } 27 // 28 29 #ifndef SYNC_TEST_ENGINE_TEST_DIRECTORY_SETTER_UPPER_H_ 30 #define SYNC_TEST_ENGINE_TEST_DIRECTORY_SETTER_UPPER_H_ 31 32 #include <string> 33 34 #include "base/basictypes.h" 35 #include "base/compiler_specific.h" 36 #include "base/memory/scoped_ptr.h" 37 #include "sync/test/fake_sync_encryption_handler.h" 38 #include "sync/test/null_directory_change_delegate.h" 39 #include "sync/util/test_unrecoverable_error_handler.h" 40 #include "testing/gmock/include/gmock/gmock.h" 41 42 namespace syncer { 43 44 namespace syncable { 45 class Directory; 46 class DirectoryBackingStore; 47 class TestTransactionObserver; 48 } 49 50 class TestDirectorySetterUpper { 51 public: 52 TestDirectorySetterUpper(); 53 virtual ~TestDirectorySetterUpper(); 54 55 // Create a Directory instance open it. 56 virtual void SetUp(); 57 58 // Create a Directory instance using |directory_store| as backend storage. 59 // Takes ownership of |directory_store|. 60 virtual void SetUpWith( 61 syncer::syncable::DirectoryBackingStore* directory_store); 62 63 // Undo everything done by SetUp(): close the directory and delete the 64 // backing files. Before closing the directory, this will run the directory 65 // invariant checks and perform the SaveChanges action on the directory. 66 virtual void TearDown(); 67 68 syncable::Directory* directory() { return directory_.get(); } 69 70 SyncEncryptionHandler* encryption_handler() { return &encryption_handler_; } 71 72 syncable::TestTransactionObserver* transaction_observer() { 73 return test_transaction_observer_.get(); 74 } 75 76 private: 77 syncable::NullDirectoryChangeDelegate delegate_; 78 scoped_ptr<syncable::TestTransactionObserver> test_transaction_observer_; 79 TestUnrecoverableErrorHandler handler_; 80 81 void RunInvariantCheck(); 82 83 FakeSyncEncryptionHandler encryption_handler_; 84 scoped_ptr<syncable::Directory> directory_; 85 std::string name_; 86 87 DISALLOW_COPY_AND_ASSIGN(TestDirectorySetterUpper); 88 }; 89 90 } // namespace syncer 91 92 #endif // SYNC_TEST_ENGINE_TEST_DIRECTORY_SETTER_UPPER_H_ 93