JD2022-TU1/main/extern/UbiServices/custom/testsUnit/http/msApi/mockXmlHttpRequest.h

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;
};
};