Home | History | Annotate | Download | only in sync_file_system
      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/sync_file_system/sync_file_system_test_util.h"
      6 
      7 #include "base/memory/scoped_ptr.h"
      8 #include "base/run_loop.h"
      9 #include "chrome/browser/sync_file_system/remote_file_sync_service.h"
     10 #include "chrome/browser/sync_file_system/sync_status_code.h"
     11 #include "content/public/test/test_utils.h"
     12 #include "google_apis/drive/gdata_errorcode.h"
     13 
     14 using content::BrowserThread;
     15 
     16 namespace sync_file_system {
     17 
     18 namespace drive_backend {
     19 class MetadataDatabase;
     20 }  // drive_backend
     21 
     22 template <typename R>
     23 void AssignAndQuit(base::RunLoop* run_loop, R* result_out, R result) {
     24   DCHECK(result_out);
     25   DCHECK(run_loop);
     26   *result_out = result;
     27   run_loop->Quit();
     28 }
     29 
     30 template <typename R> base::Callback<void(R)>
     31 AssignAndQuitCallback(base::RunLoop* run_loop, R* result) {
     32   return base::Bind(&AssignAndQuit<R>, run_loop, base::Unretained(result));
     33 }
     34 
     35 template <typename Arg, typename Param>
     36 void ReceiveResult1(bool* done, Arg* arg_out, Param arg) {
     37   EXPECT_FALSE(*done);
     38   *done = true;
     39   *arg_out = base::internal::CallbackForward(arg);
     40 }
     41 
     42 template <typename Arg>
     43 base::Callback<void(typename TypeTraits<Arg>::ParamType)>
     44 CreateResultReceiver(Arg* arg_out) {
     45   typedef typename TypeTraits<Arg>::ParamType Param;
     46   return base::Bind(&ReceiveResult1<Arg, Param>,
     47                     base::Owned(new bool(false)), arg_out);
     48 }
     49 
     50 // Instantiate versions we know callers will need.
     51 template base::Callback<void(SyncStatusCode)>
     52 AssignAndQuitCallback(base::RunLoop*, SyncStatusCode*);
     53 
     54 #define INSTANTIATE_RECEIVER(type)                                  \
     55   template base::Callback<void(type)> CreateResultReceiver(type*);
     56 INSTANTIATE_RECEIVER(SyncStatusCode);
     57 INSTANTIATE_RECEIVER(google_apis::GDataErrorCode);
     58 INSTANTIATE_RECEIVER(scoped_ptr<RemoteFileSyncService::OriginStatusMap>);
     59 #undef INSTANTIATE_RECEIVER
     60 
     61 }  // namespace sync_file_system
     62