1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221
|
// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CONTENT_BROWSER_RENDERER_HOST_INPUT_MOCK_TFHANDWRITING_H_
#define CONTENT_BROWSER_RENDERER_HOST_INPUT_MOCK_TFHANDWRITING_H_
#include <ShellHandwriting.h>
#include <msctf.h>
#include <winerror.h>
#include <wrl/implements.h>
#include "testing/gmock/include/gmock/gmock.h"
namespace content {
class MockTfHandwritingRequest;
// Assign Com pointer to the variable pointed by the k-th (0-based) argument if
// the result param value is S_OK. Returns the result param value.
ACTION_TEMPLATE(SetComPointeeAndReturnResult,
HAS_1_TEMPLATE_PARAMS(int, k),
AND_2_VALUE_PARAMS(pointer, result)) {
if (result != S_OK) {
return result;
}
pointer->AddRef();
*std::get<k>(args) = pointer;
return S_OK;
}
ACTION_TEMPLATE(SetValueParamAndReturnResult,
HAS_1_TEMPLATE_PARAMS(int, k),
AND_2_VALUE_PARAMS(value, result)) {
if (result != S_OK) {
return result;
}
*std::get<k>(args) = value;
return S_OK;
}
ACTION_P(RequestHandwritingForPointerDefault, p) {
p->AddRef();
*arg3 = p; // request
*arg2 = *arg3 ? TRUE : FALSE; // requestAccepted
return S_OK;
}
// Mock various ITf interfaces used for testing SHell Handwriting API.
class MockTfImpl
: public Microsoft::WRL::RuntimeClass<
Microsoft::WRL::RuntimeClassFlags<Microsoft::WRL::ClassicCom>,
ITfThreadMgr,
ITfSource,
::ITfHandwriting,
::ITfHandwritingSink> {
public:
MockTfImpl();
MockTfImpl(const MockTfImpl&) = delete;
MockTfImpl& operator=(const MockTfImpl&) = delete;
~MockTfImpl() override;
// IUnknown:
MOCK_METHOD(HRESULT,
QueryInterface,
(REFIID interface_id,
_Outptr_result_nullonfailure_ void** result),
(final, Calltype(STDMETHODCALLTYPE)));
// ITfThreadMgr:
MOCK_METHOD(HRESULT,
Activate,
(__RPC__out TfClientId * ptid),
(final, Calltype(STDMETHODCALLTYPE)));
MOCK_METHOD(HRESULT, Deactivate, (), (final, Calltype(STDMETHODCALLTYPE)));
MOCK_METHOD(HRESULT,
CreateDocumentMgr,
(__RPC__deref_out_opt ITfDocumentMgr * *ppdim),
(final, Calltype(STDMETHODCALLTYPE)));
MOCK_METHOD(HRESULT,
EnumDocumentMgrs,
(__RPC__deref_out_opt IEnumTfDocumentMgrs * *ppEnum),
(final, Calltype(STDMETHODCALLTYPE)));
MOCK_METHOD(HRESULT,
GetFocus,
(__RPC__deref_out_opt ITfDocumentMgr * *ppdimFocus),
(final, Calltype(STDMETHODCALLTYPE)));
MOCK_METHOD(HRESULT,
SetFocus,
(__RPC__in_opt ITfDocumentMgr * pdimFocus),
(final, Calltype(STDMETHODCALLTYPE)));
MOCK_METHOD(HRESULT,
AssociateFocus,
(__RPC__in HWND hwnd,
__RPC__in_opt ITfDocumentMgr* pdimNew,
__RPC__deref_out_opt ITfDocumentMgr** ppdimPrev),
(final, Calltype(STDMETHODCALLTYPE)));
MOCK_METHOD(HRESULT,
IsThreadFocus,
(__RPC__out BOOL * pfThreadFocus),
(final, Calltype(STDMETHODCALLTYPE)));
MOCK_METHOD(HRESULT,
GetFunctionProvider,
(__RPC__in REFCLSID clsid,
__RPC__deref_out_opt ITfFunctionProvider** ppFuncProv),
(final, Calltype(STDMETHODCALLTYPE)));
MOCK_METHOD(HRESULT,
EnumFunctionProviders,
(__RPC__deref_out_opt IEnumTfFunctionProviders * *ppEnum),
(final, Calltype(STDMETHODCALLTYPE)));
MOCK_METHOD(HRESULT,
GetGlobalCompartment,
(__RPC__deref_out_opt ITfCompartmentMgr * *ppCompMgr),
(final, Calltype(STDMETHODCALLTYPE)));
// ITfSource:
MOCK_METHOD(HRESULT,
AdviseSink,
(__RPC__in REFIID riid,
__RPC__in_opt IUnknown* punk,
__RPC__out DWORD* pdwCookie),
(final, Calltype(STDMETHODCALLTYPE)));
MOCK_METHOD(HRESULT,
UnadviseSink,
(DWORD dwCookie),
(final, Calltype(STDMETHODCALLTYPE)));
// ::ITfHandwriting:
MOCK_METHOD(HRESULT,
GetHandwritingState,
(::TfHandwritingState * handwriting_state),
(final, Calltype(STDMETHODCALLTYPE)));
MOCK_METHOD(HRESULT,
SetHandwritingState,
(::TfHandwritingState handwriting_state),
(final, Calltype(STDMETHODCALLTYPE)));
MOCK_METHOD(HRESULT,
RequestHandwritingForPointer,
(UINT32 pointerId,
UINT64 handwritingStrokeId,
BOOL* requestAccepted,
::ITfHandwritingRequest** request),
(final, Calltype(STDMETHODCALLTYPE)));
MOCK_METHOD(HRESULT,
GetHandwritingDistanceThreshold,
(SIZE * distance_buffer_pixels),
(final, Calltype(STDMETHODCALLTYPE)));
// ::ITfHandwritingSink:
MOCK_METHOD(HRESULT,
DetermineProximateHandwritingTarget,
(::ITfDetermineProximateHandwritingTargetArgs *
determineProximateHandwritingTargetArgs),
(final, Calltype(STDMETHODCALLTYPE)));
MOCK_METHOD(HRESULT,
FocusHandwritingTarget,
(::ITfFocusHandwritingTargetArgs * focusHandwritingTargetArgs),
(final, Calltype(STDMETHODCALLTYPE)));
};
class MockTfHandwritingRequest
: public Microsoft::WRL::RuntimeClass<
Microsoft::WRL::RuntimeClassFlags<Microsoft::WRL::ClassicCom>,
::ITfHandwritingRequest> {
public:
MockTfHandwritingRequest();
MockTfHandwritingRequest(const MockTfHandwritingRequest&) = delete;
MockTfHandwritingRequest& operator=(const MockTfHandwritingRequest&) = delete;
~MockTfHandwritingRequest() override;
// IUnknown:
MOCK_METHOD(HRESULT,
QueryInterface,
(REFIID interface_id,
_Outptr_result_nullonfailure_ void** result),
(final, Calltype(STDMETHODCALLTYPE)));
// ::ITfHandwritingRequest:
MOCK_METHOD(HRESULT,
SetInputEvaluation,
(::TfInputEvaluation inputEvaluation),
(final, Calltype(STDMETHODCALLTYPE)));
};
class MockTfFocusHandwritingTargetArgsImpl
: public Microsoft::WRL::RuntimeClass<
Microsoft::WRL::RuntimeClassFlags<Microsoft::WRL::ClassicCom>,
::ITfFocusHandwritingTargetArgs> {
public:
MockTfFocusHandwritingTargetArgsImpl();
MockTfFocusHandwritingTargetArgsImpl(
const MockTfFocusHandwritingTargetArgsImpl&) = delete;
MockTfFocusHandwritingTargetArgsImpl& operator=(
const MockTfFocusHandwritingTargetArgsImpl&) = delete;
~MockTfFocusHandwritingTargetArgsImpl() override;
// IUnknown:
MOCK_METHOD(HRESULT,
QueryInterface,
(REFIID interface_id,
_Outptr_result_nullonfailure_ void** result),
(final, Calltype(STDMETHODCALLTYPE)));
// ITfFocusHandwritingTargetArgs:
MOCK_METHOD(HRESULT,
GetPointerTargetInfo,
(/*[out]*/ HWND * targetWindow,
/*[out]*/ RECT* targetScreenArea,
/*[out]*/ SIZE* distanceThreshold),
(final, Calltype(STDMETHODCALLTYPE)));
MOCK_METHOD(HRESULT,
SetResponse,
(::TfHandwritingFocusTargetResponse response),
(final, Calltype(STDMETHODCALLTYPE)));
};
} // namespace content
#endif // CONTENT_BROWSER_RENDERER_HOST_INPUT_MOCK_TFHANDWRITING_H_
|