114 lines
3.8 KiB
C++
114 lines
3.8 KiB
C++
////////////////////////////////////////////////////////////////////////////////
|
|
// (c) Copyright, Ubisoft Entertainment Inc. || Created by Harbour //
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
#pragma once
|
|
#include <gmock/gmock.h>
|
|
#include <ubiservices/core/configs/config.h>
|
|
#include "ubiservices/core/http/msApi/httpRequestXHRFactory.h"
|
|
#include "ubiservices/core/http/httpRequestContext.h"
|
|
#if defined(US_TARGET_XONE)
|
|
# include <ixmlhttprequest2.h>
|
|
#elif defined(US_TARGET_UWP)
|
|
# include <MsXml6.h>
|
|
#endif
|
|
|
|
namespace US_NS {;
|
|
|
|
namespace MockXmlHttpRequest_BF
|
|
{
|
|
#pragma warning(push)
|
|
#pragma warning(disable : 4100) // Unused templates argument warning
|
|
|
|
ACTION_P2(CreateRequestXHR, xml, callback)
|
|
{
|
|
return US_NEW(HttpRequestXHR, arg0, xml, callback);
|
|
}
|
|
|
|
ACTION_P(SetAllHeaders, headers)
|
|
{
|
|
size_t headerLength = wcslen(headers);
|
|
// Allocate a buffer a large enough for the wmemcpy (headerLength is not enough)
|
|
WCHAR* hPtr = (WCHAR*) ::CoTaskMemAlloc(headerLength*4);
|
|
memset(hPtr, 0, headerLength*4);
|
|
wmemcpy(hPtr, headers, headerLength);
|
|
*arg0 = hPtr;
|
|
}
|
|
|
|
ACTION_P(DoSequentialStreamRead, body)
|
|
{
|
|
// arg0 : buffer
|
|
// arg1 : buffer size
|
|
// arg2 : number of bytes read (output)
|
|
memcpy(arg0, body.getUtf8(), body.getLength()+1);
|
|
*arg2 = static_cast<ULONG>(body.getLength()+1);
|
|
}
|
|
|
|
#pragma warning(pop)
|
|
}
|
|
|
|
class MockHttpRequestXHRFactory : public IHttpRequestXHRFactory
|
|
{
|
|
public:
|
|
MOCK_METHOD1(createHttpRequest, HttpRequestXHR*(const HttpRequestContext& context));
|
|
};
|
|
|
|
class MockSequentialStream : public ISequentialStream, public RootObject
|
|
{
|
|
public:
|
|
MockSequentialStream();
|
|
|
|
MOCK_METHOD3_WITH_CALLTYPE(STDMETHODCALLTYPE, Read, HRESULT(void* pv, ULONG cb, ULONG* pcbRead));
|
|
MOCK_METHOD3_WITH_CALLTYPE(STDMETHODCALLTYPE, Write, HRESULT(const void* pv, ULONG cb, ULONG* pcbWritten));
|
|
|
|
// IUnknown
|
|
STDMETHODIMP_(ULONG) AddRef();
|
|
STDMETHODIMP_(ULONG) Release();
|
|
STDMETHODIMP QueryInterface(REFIID riid, void** ppvObject);
|
|
|
|
private:
|
|
LONG m_cRef;
|
|
};
|
|
|
|
class MockXmlHttpRequest : public IXMLHTTPRequest2, public RootObject
|
|
{
|
|
public:
|
|
MockXmlHttpRequest();
|
|
|
|
MOCK_METHOD7_WITH_CALLTYPE(STDMETHODCALLTYPE, Open,
|
|
HRESULT(const WCHAR *pwszMethod,
|
|
const WCHAR *pwszUrl,
|
|
IXMLHTTPRequest2Callback* pStatusCallback,
|
|
const WCHAR *pwszUserName,
|
|
const WCHAR *pwszPassword,
|
|
const WCHAR *pwszProxyUserName,
|
|
const WCHAR *pwszProxyPassword));
|
|
|
|
MOCK_METHOD2_WITH_CALLTYPE(STDMETHODCALLTYPE, Send, HRESULT(ISequentialStream* pBody, ULONGLONG cbBody));
|
|
|
|
MOCK_METHOD0_WITH_CALLTYPE(STDMETHODCALLTYPE, Abort, HRESULT(void));
|
|
|
|
MOCK_METHOD2_WITH_CALLTYPE(STDMETHODCALLTYPE, SetCookie, HRESULT(const XHR_COOKIE* pCookie, DWORD *pdwCookieState));
|
|
|
|
MOCK_METHOD1_WITH_CALLTYPE(STDMETHODCALLTYPE, SetCustomResponseStream, HRESULT(ISequentialStream *pSequentialStream));
|
|
|
|
MOCK_METHOD2_WITH_CALLTYPE(STDMETHODCALLTYPE, SetProperty, HRESULT(XHR_PROPERTY eProperty, ULONGLONG ullValue));
|
|
|
|
MOCK_METHOD2_WITH_CALLTYPE(STDMETHODCALLTYPE, SetRequestHeader, HRESULT(const WCHAR* pwszHeader, const WCHAR *pwszValue));
|
|
|
|
MOCK_METHOD1_WITH_CALLTYPE(STDMETHODCALLTYPE, GetAllResponseHeaders, HRESULT(WCHAR** ppwszHeaders));
|
|
|
|
MOCK_METHOD5_WITH_CALLTYPE(STDMETHODCALLTYPE, GetCookie, HRESULT(const WCHAR* pwszUrl, const WCHAR *pwszName,
|
|
DWORD dwFlags, ULONG *pcCookies, XHR_COOKIE **ppCookies));
|
|
|
|
MOCK_METHOD2_WITH_CALLTYPE(STDMETHODCALLTYPE, GetResponseHeader, HRESULT(const WCHAR* pwszHeader, WCHAR **ppwszValue));
|
|
|
|
// IUnknown
|
|
STDMETHODIMP_(ULONG) AddRef();
|
|
STDMETHODIMP_(ULONG) Release();
|
|
STDMETHODIMP QueryInterface(REFIID riid, void** ppvObject);
|
|
|
|
private:
|
|
LONG m_cRef;
|
|
};
|
|
|
|
};
|