15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROME_BROWSER_SYNC_FILE_SYSTEM_SYNC_FILE_SYSTEM_TEST_UTIL_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_SYNC_FILE_SYSTEM_SYNC_FILE_SYSTEM_TEST_UTIL_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include <vector> 9a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 108bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "base/bind.h" 118bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "base/callback.h" 128bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace base { 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class RunLoop; 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)namespace storage { 19a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)class FileSystemURL; 20a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 21a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace sync_file_system { 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 24a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)template <typename T> 25a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)struct TypeTraits { 26a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) typedef T ParamType; 27a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}; 28a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 29a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)template <> 3003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)struct TypeTraits<storage::FileSystemURL> { 3103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) typedef const storage::FileSystemURL& ParamType; 32a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}; 33a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 34a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)template <typename T> 35a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)struct TypeTraits<std::vector<T> > { 36a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) typedef const std::vector<T>& ParamType; 37a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}; 38a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 39a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)template <typename Arg1, typename Arg2, typename Param1, typename Param2> 408bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)void ReceiveResult2(bool* done, 418bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) Arg1* arg1_out, 428bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) Arg2* arg2_out, 43a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) Param1 arg1, 44a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) Param2 arg2) { 458bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_FALSE(*done); 468bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) *done = true; 478bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) *arg1_out = base::internal::CallbackForward(arg1); 488bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) *arg2_out = base::internal::CallbackForward(arg2); 498bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)} 508bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <typename R> 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AssignAndQuit(base::RunLoop* run_loop, R* result_out, R result); 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <typename R> base::Callback<void(R)> 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AssignAndQuitCallback(base::RunLoop* run_loop, R* result); 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 57d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)template <typename Arg> 58a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)base::Callback<void(typename TypeTraits<Arg>::ParamType)> 59a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)CreateResultReceiver(Arg* arg_out); 60d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 61d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)template <typename Arg1, typename Arg2> 62a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)base::Callback<void(typename TypeTraits<Arg1>::ParamType, 63a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) typename TypeTraits<Arg2>::ParamType)> 64a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)CreateResultReceiver(Arg1* arg1_out, 65a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) Arg2* arg2_out) { 66a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) typedef typename TypeTraits<Arg1>::ParamType Param1; 67a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) typedef typename TypeTraits<Arg2>::ParamType Param2; 68a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return base::Bind(&ReceiveResult2<Arg1, Arg2, Param1, Param2>, 698bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) base::Owned(new bool(false)), 708bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) arg1_out, arg2_out); 718bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)} 72d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace sync_file_system 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CHROME_BROWSER_SYNC_FILE_SYSTEM_SYNC_FILE_SYSTEM_TEST_UTIL_H_ 76