Home | History | Annotate | Download | only in engine
      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