blob: 26bafaa99a539221e11d6fe8a57f70c1df028a58 [file] [log] [blame]
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_SYNC_FILE_SYSTEM_SYNC_FILE_SYSTEM_TEST_UTIL_H_
#define CHROME_BROWSER_SYNC_FILE_SYSTEM_SYNC_FILE_SYSTEM_TEST_UTIL_H_
#include <utility>
#include <vector>
#include "base/bind.h"
#include "base/callback.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace base {
class RunLoop;
}
namespace storage {
class FileSystemURL;
}
namespace sync_file_system {
template <typename T>
struct TypeTraits {
typedef T ParamType;
};
template <>
struct TypeTraits<storage::FileSystemURL> {
typedef const storage::FileSystemURL& ParamType;
};
template <typename T>
struct TypeTraits<std::vector<T> > {
typedef const std::vector<T>& ParamType;
};
template <typename Arg1, typename Arg2, typename Param1, typename Param2>
void ReceiveResult2(bool* done,
Arg1* arg1_out,
Arg2* arg2_out,
Param1 arg1,
Param2 arg2) {
EXPECT_FALSE(*done);
*done = true;
*arg1_out = std::forward<Param1>(arg1);
*arg2_out = std::forward<Param2>(arg2);
}
template <typename R>
void AssignAndQuit(base::RunLoop* run_loop, R* result_out, R result);
template <typename R> base::Callback<void(R)>
AssignAndQuitCallback(base::RunLoop* run_loop, R* result);
template <typename Arg>
base::Callback<void(typename TypeTraits<Arg>::ParamType)>
CreateResultReceiver(Arg* arg_out);
template <typename Arg1, typename Arg2>
base::Callback<void(typename TypeTraits<Arg1>::ParamType,
typename TypeTraits<Arg2>::ParamType)>
CreateResultReceiver(Arg1* arg1_out,
Arg2* arg2_out) {
typedef typename TypeTraits<Arg1>::ParamType Param1;
typedef typename TypeTraits<Arg2>::ParamType Param2;
return base::Bind(&ReceiveResult2<Arg1, Arg2, Param1, Param2>,
base::Owned(new bool(false)),
arg1_out, arg2_out);
}
} // namespace sync_file_system
#endif // CHROME_BROWSER_SYNC_FILE_SYSTEM_SYNC_FILE_SYSTEM_TEST_UTIL_H_