| Index: chrome/browser/google_apis/test_util.h
|
| diff --git a/chrome/browser/google_apis/test_util.h b/chrome/browser/google_apis/test_util.h
|
| deleted file mode 100644
|
| index 2976937c973e35060d68b7e6afb92d197906e0b9..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/google_apis/test_util.h
|
| +++ /dev/null
|
| @@ -1,299 +0,0 @@
|
| -// 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_GOOGLE_APIS_TEST_UTIL_H_
|
| -#define CHROME_BROWSER_GOOGLE_APIS_TEST_UTIL_H_
|
| -
|
| -#include <string>
|
| -#include <utility>
|
| -#include <vector>
|
| -
|
| -#include "base/bind.h"
|
| -#include "base/callback.h"
|
| -#include "base/memory/scoped_ptr.h"
|
| -#include "base/memory/scoped_vector.h"
|
| -#include "base/template_util.h"
|
| -#include "chrome/browser/google_apis/base_requests.h"
|
| -#include "chrome/browser/google_apis/gdata_errorcode.h"
|
| -#include "chrome/browser/google_apis/task_util.h"
|
| -
|
| -class GURL;
|
| -
|
| -namespace base {
|
| -class FilePath;
|
| -class RunLoop;
|
| -class Value;
|
| -}
|
| -
|
| -namespace net {
|
| -namespace test_server {
|
| -class BasicHttpResponse;
|
| -class HttpResponse;
|
| -struct HttpRequest;
|
| -}
|
| -}
|
| -
|
| -namespace google_apis {
|
| -namespace test_util {
|
| -
|
| -// Runs the closure, and then quits the |run_loop|.
|
| -void RunAndQuit(base::RunLoop* run_loop, const base::Closure& closure);
|
| -
|
| -// Returns callback which runs the given |callback| and then quits |run_loop|.
|
| -template<typename CallbackType>
|
| -CallbackType CreateQuitCallback(base::RunLoop* run_loop,
|
| - const CallbackType& callback) {
|
| - return CreateComposedCallback(base::Bind(&RunAndQuit, run_loop), callback);
|
| -}
|
| -
|
| -// Removes |prefix| from |input| and stores the result in |output|. Returns
|
| -// true if the prefix is removed.
|
| -bool RemovePrefix(const std::string& input,
|
| - const std::string& prefix,
|
| - std::string* output);
|
| -
|
| -// Returns the absolute path for a test file stored under
|
| -// chrome/test/data.
|
| -base::FilePath GetTestFilePath(const std::string& relative_path);
|
| -
|
| -// Returns the base URL for communicating with the local test server for
|
| -// testing, running at the specified port number.
|
| -GURL GetBaseUrlForTesting(int port);
|
| -
|
| -// Writes the |content| to the file at |file_path|. Returns true on success,
|
| -// otherwise false.
|
| -bool WriteStringToFile(const base::FilePath& file_path,
|
| - const std::string& content);
|
| -
|
| -// Creates a |size| byte file. The file is filled with random bytes so that
|
| -// the test assertions can identify correct portion/position of the file is
|
| -// used.
|
| -// Returns true on success with the created file's |path| and |data|, otherwise
|
| -// false.
|
| -bool CreateFileOfSpecifiedSize(const base::FilePath& temp_dir,
|
| - size_t size,
|
| - base::FilePath* path,
|
| - std::string* data);
|
| -
|
| -// Loads a test JSON file as a base::Value, from a test file stored under
|
| -// chrome/test/data.
|
| -scoped_ptr<base::Value> LoadJSONFile(const std::string& relative_path);
|
| -
|
| -// Returns a HttpResponse created from the given file path.
|
| -scoped_ptr<net::test_server::BasicHttpResponse> CreateHttpResponseFromFile(
|
| - const base::FilePath& file_path);
|
| -
|
| -// Handles a request for downloading a file. Reads a file from the test
|
| -// directory and returns the content. Also, copies the |request| to the memory
|
| -// pointed by |out_request|.
|
| -// |base_url| must be set to the server's base url.
|
| -scoped_ptr<net::test_server::HttpResponse> HandleDownloadFileRequest(
|
| - const GURL& base_url,
|
| - net::test_server::HttpRequest* out_request,
|
| - const net::test_server::HttpRequest& request);
|
| -
|
| -// Parses a value of Content-Range header, which looks like
|
| -// "bytes <start_position>-<end_position>/<length>".
|
| -// Returns true on success.
|
| -bool ParseContentRangeHeader(const std::string& value,
|
| - int64* start_position,
|
| - int64* end_position,
|
| - int64* length);
|
| -
|
| -// Google API related code and Drive File System code work on asynchronous
|
| -// architecture and return the results via callbacks.
|
| -// Following code implements a callback to copy such results.
|
| -// Here is how to use:
|
| -//
|
| -// // Prepare result storage.
|
| -// ResultType1 result1;
|
| -// ResultType2 result2;
|
| -// :
|
| -//
|
| -// PerformAsynchronousTask(
|
| -// param1, param2, ...,
|
| -// CreateCopyResultCallback(&result1, &result2, ...));
|
| -// base::RunLoop().RunUntilIdle(); // Run message loop to complete
|
| -// // the async task.
|
| -//
|
| -// // Hereafter, we can write expectation with results.
|
| -// EXPECT_EQ(expected_result1, result1);
|
| -// EXPECT_EQ(expected_result2, result2);
|
| -// :
|
| -//
|
| -// Note: The max arity of the supported function is 4 based on the usage.
|
| -namespace internal {
|
| -// Following helper templates are to support Chrome's move semantics.
|
| -// Their goal is defining helper methods which are similar to:
|
| -// void CopyResultCallback1(T1* out1, T1&& in1)
|
| -// void CopyResultCallback2(T1* out1, T2* out2, T1&& in1, T2&& in2)
|
| -// :
|
| -// in C++11.
|
| -
|
| -// Declare if the type is movable or not. Currently limited to scoped_ptr only.
|
| -// We can add more types upon the usage.
|
| -template<typename T> struct IsMovable : base::false_type {};
|
| -template<typename T, typename D>
|
| -struct IsMovable<scoped_ptr<T, D> > : base::true_type {};
|
| -
|
| -// InType is const T& if |UseConstRef| is true, otherwise |T|.
|
| -template<bool UseConstRef, typename T> struct InTypeHelper {
|
| - typedef const T& InType;
|
| -};
|
| -template<typename T> struct InTypeHelper<false, T> {
|
| - typedef T InType;
|
| -};
|
| -
|
| -// Simulates the std::move function in C++11. We use pointer here for argument,
|
| -// instead of rvalue reference.
|
| -template<bool IsMovable, typename T> struct MoveHelper {
|
| - static const T& Move(const T* in) { return *in; }
|
| -};
|
| -template<typename T> struct MoveHelper<true, T> {
|
| - static T Move(T* in) { return in->Pass(); }
|
| -};
|
| -
|
| -// Helper to handle Chrome's move semantics correctly.
|
| -template<typename T>
|
| -struct CopyResultCallbackHelper
|
| - // It is necessary to calculate the exact signature of callbacks we want
|
| - // to create here. In our case, as we use value-parameters for primitive
|
| - // types and movable types in the callback declaration.
|
| - // Thus the incoming type is as follows:
|
| - // 1) If the argument type |T| is class type but doesn't movable,
|
| - // |InType| is const T&.
|
| - // 2) Otherwise, |T| as is.
|
| - : InTypeHelper<
|
| - base::is_class<T>::value && !IsMovable<T>::value, // UseConstRef
|
| - T>,
|
| - MoveHelper<IsMovable<T>::value, T> {
|
| -};
|
| -
|
| -// Copies the |in|'s value to |out|.
|
| -template<typename T1>
|
| -void CopyResultCallback(
|
| - T1* out,
|
| - typename CopyResultCallbackHelper<T1>::InType in) {
|
| - *out = CopyResultCallbackHelper<T1>::Move(&in);
|
| -}
|
| -
|
| -// Copies the |in1|'s value to |out1|, and |in2|'s to |out2|.
|
| -template<typename T1, typename T2>
|
| -void CopyResultCallback(
|
| - T1* out1,
|
| - T2* out2,
|
| - typename CopyResultCallbackHelper<T1>::InType in1,
|
| - typename CopyResultCallbackHelper<T2>::InType in2) {
|
| - *out1 = CopyResultCallbackHelper<T1>::Move(&in1);
|
| - *out2 = CopyResultCallbackHelper<T2>::Move(&in2);
|
| -}
|
| -
|
| -// Copies the |in1|'s value to |out1|, |in2|'s to |out2|, and |in3|'s to |out3|.
|
| -template<typename T1, typename T2, typename T3>
|
| -void CopyResultCallback(
|
| - T1* out1,
|
| - T2* out2,
|
| - T3* out3,
|
| - typename CopyResultCallbackHelper<T1>::InType in1,
|
| - typename CopyResultCallbackHelper<T2>::InType in2,
|
| - typename CopyResultCallbackHelper<T3>::InType in3) {
|
| - *out1 = CopyResultCallbackHelper<T1>::Move(&in1);
|
| - *out2 = CopyResultCallbackHelper<T2>::Move(&in2);
|
| - *out3 = CopyResultCallbackHelper<T3>::Move(&in3);
|
| -}
|
| -
|
| -// Holds the pointers for output. This is introduced for the workaround of
|
| -// the arity limitation of Callback.
|
| -template<typename T1, typename T2, typename T3, typename T4>
|
| -struct OutputParams {
|
| - OutputParams(T1* out1, T2* out2, T3* out3, T4* out4)
|
| - : out1(out1), out2(out2), out3(out3), out4(out4) {}
|
| - T1* out1;
|
| - T2* out2;
|
| - T3* out3;
|
| - T4* out4;
|
| -};
|
| -
|
| -// Copies the |in1|'s value to |output->out1|, |in2|'s to |output->out2|,
|
| -// and so on.
|
| -template<typename T1, typename T2, typename T3, typename T4>
|
| -void CopyResultCallback(
|
| - const OutputParams<T1, T2, T3, T4>& output,
|
| - typename CopyResultCallbackHelper<T1>::InType in1,
|
| - typename CopyResultCallbackHelper<T2>::InType in2,
|
| - typename CopyResultCallbackHelper<T3>::InType in3,
|
| - typename CopyResultCallbackHelper<T4>::InType in4) {
|
| - *output.out1 = CopyResultCallbackHelper<T1>::Move(&in1);
|
| - *output.out2 = CopyResultCallbackHelper<T2>::Move(&in2);
|
| - *output.out3 = CopyResultCallbackHelper<T3>::Move(&in3);
|
| - *output.out4 = CopyResultCallbackHelper<T4>::Move(&in4);
|
| -}
|
| -
|
| -} // namespace internal
|
| -
|
| -template<typename T1>
|
| -base::Callback<void(typename internal::CopyResultCallbackHelper<T1>::InType)>
|
| -CreateCopyResultCallback(T1* out1) {
|
| - return base::Bind(&internal::CopyResultCallback<T1>, out1);
|
| -}
|
| -
|
| -template<typename T1, typename T2>
|
| -base::Callback<void(typename internal::CopyResultCallbackHelper<T1>::InType,
|
| - typename internal::CopyResultCallbackHelper<T2>::InType)>
|
| -CreateCopyResultCallback(T1* out1, T2* out2) {
|
| - return base::Bind(&internal::CopyResultCallback<T1, T2>, out1, out2);
|
| -}
|
| -
|
| -template<typename T1, typename T2, typename T3>
|
| -base::Callback<void(typename internal::CopyResultCallbackHelper<T1>::InType,
|
| - typename internal::CopyResultCallbackHelper<T2>::InType,
|
| - typename internal::CopyResultCallbackHelper<T3>::InType)>
|
| -CreateCopyResultCallback(T1* out1, T2* out2, T3* out3) {
|
| - return base::Bind(
|
| - &internal::CopyResultCallback<T1, T2, T3>, out1, out2, out3);
|
| -}
|
| -
|
| -template<typename T1, typename T2, typename T3, typename T4>
|
| -base::Callback<void(typename internal::CopyResultCallbackHelper<T1>::InType,
|
| - typename internal::CopyResultCallbackHelper<T2>::InType,
|
| - typename internal::CopyResultCallbackHelper<T3>::InType,
|
| - typename internal::CopyResultCallbackHelper<T4>::InType)>
|
| -CreateCopyResultCallback(T1* out1, T2* out2, T3* out3, T4* out4) {
|
| - return base::Bind(
|
| - &internal::CopyResultCallback<T1, T2, T3, T4>,
|
| - internal::OutputParams<T1, T2, T3, T4>(out1, out2, out3, out4));
|
| -}
|
| -
|
| -typedef std::pair<int64, int64> ProgressInfo;
|
| -
|
| -// Helper utility for recording the results via ProgressCallback.
|
| -void AppendProgressCallbackResult(std::vector<ProgressInfo>* progress_values,
|
| - int64 progress,
|
| - int64 total);
|
| -
|
| -// Helper utility for recording the content via GetContentCallback.
|
| -class TestGetContentCallback {
|
| - public:
|
| - TestGetContentCallback();
|
| - ~TestGetContentCallback();
|
| -
|
| - const GetContentCallback& callback() const { return callback_; }
|
| - const ScopedVector<std::string>& data() const { return data_; }
|
| - ScopedVector<std::string>* mutable_data() { return &data_; }
|
| - std::string GetConcatenatedData() const;
|
| -
|
| - private:
|
| - void OnGetContent(google_apis::GDataErrorCode error,
|
| - scoped_ptr<std::string> data);
|
| -
|
| - const GetContentCallback callback_;
|
| - ScopedVector<std::string> data_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(TestGetContentCallback);
|
| -};
|
| -
|
| -} // namespace test_util
|
| -} // namespace google_apis
|
| -
|
| -#endif // CHROME_BROWSER_GOOGLE_APIS_TEST_UTIL_H_
|
|
|