Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
0cdb39fa
Commit
0cdb39fa
authored
Apr 21, 2009
by
Aric Stewart
Committed by
Alexandre Julliard
Apr 22, 2009
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
msctf/tests: Setup test framework for ITfThreadMgrEventSink.
parent
3280bfe6
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
162 additions
and
0 deletions
+162
-0
inputprocessor.c
dlls/msctf/tests/inputprocessor.c
+162
-0
No files found.
dlls/msctf/tests/inputprocessor.c
View file @
0cdb39fa
...
...
@@ -34,8 +34,12 @@ static LANGID gLangid;
static
ITfCategoryMgr
*
g_cm
=
NULL
;
static
ITfThreadMgr
*
g_tm
=
NULL
;
static
DWORD
tmSinkCookie
;
static
DWORD
tmSinkRefCount
;
HRESULT
RegisterTextService
(
REFCLSID
rclsid
);
HRESULT
UnregisterTextService
();
HRESULT
ThreadMgrEventSink_Constructor
(
IUnknown
**
ppOut
);
DEFINE_GUID
(
CLSID_FakeService
,
0xEDE1A7AD
,
0x66DE
,
0x47E0
,
0xB6
,
0x20
,
0x3E
,
0x92
,
0xF8
,
0x24
,
0x6B
,
0xF3
);
DEFINE_GUID
(
CLSID_TF_InputProcessorProfiles
,
0x33c53a50
,
0xf456
,
0x4884
,
0xb0
,
0x49
,
0x85
,
0xfd
,
0x64
,
0x3e
,
0xcf
,
0xed
);
...
...
@@ -194,6 +198,48 @@ static void test_Disable(void)
ok
(
SUCCEEDED
(
hr
),
"Failed to disable text service
\n
"
);
}
static
void
test_ThreadMgrAdviseSinks
(
void
)
{
ITfSource
*
source
=
NULL
;
HRESULT
hr
;
IUnknown
*
sink
;
hr
=
ITfThreadMgr_QueryInterface
(
g_tm
,
&
IID_ITfSource
,
(
LPVOID
*
)
&
source
);
ok
(
SUCCEEDED
(
hr
),
"Failed to get IID_ITfSource for ThreadMgr
\n
"
);
if
(
!
source
)
return
;
ThreadMgrEventSink_Constructor
(
&
sink
);
tmSinkRefCount
=
1
;
tmSinkCookie
=
0
;
hr
=
ITfSource_AdviseSink
(
source
,
&
IID_ITfThreadMgrEventSink
,
sink
,
&
tmSinkCookie
);
ok
(
SUCCEEDED
(
hr
),
"Failed to Advise Sink
\n
"
);
ok
(
tmSinkCookie
!=
0
,
"Failed to get sink cookie
\n
"
);
/* Advising the sink adds a ref, Relesing here lets the object be deleted
when unadvised */
tmSinkRefCount
=
2
;
IUnknown_Release
(
sink
);
ITfSource_Release
(
source
);
}
static
void
test_ThreadMgrUnadviseSinks
(
void
)
{
ITfSource
*
source
=
NULL
;
HRESULT
hr
;
hr
=
ITfThreadMgr_QueryInterface
(
g_tm
,
&
IID_ITfSource
,
(
LPVOID
*
)
&
source
);
ok
(
SUCCEEDED
(
hr
),
"Failed to get IID_ITfSource for ThreadMgr
\n
"
);
if
(
!
source
)
return
;
tmSinkRefCount
=
1
;
hr
=
ITfSource_UnadviseSink
(
source
,
tmSinkCookie
);
ok
(
SUCCEEDED
(
hr
),
"Failed to unadvise Sink
\n
"
);
ITfSource_Release
(
source
);
}
START_TEST
(
inputprocessor
)
{
if
(
SUCCEEDED
(
initialize
()))
...
...
@@ -203,9 +249,11 @@ START_TEST(inputprocessor)
test_RegisterCategory
();
test_EnumInputProcessorInfo
();
test_Enable
();
test_ThreadMgrAdviseSinks
();
test_EnumLanguageProfiles
();
test_FindClosestCategory
();
test_Disable
();
test_ThreadMgrUnadviseSinks
();
test_UnregisterCategory
();
test_Unregister
();
}
...
...
@@ -214,6 +262,120 @@ START_TEST(inputprocessor)
cleanup
();
}
/**********************************************************************
* ITfThreadMgrEventSink
**********************************************************************/
typedef
struct
tagThreadMgrEventSink
{
const
ITfThreadMgrEventSinkVtbl
*
ThreadMgrEventSinkVtbl
;
LONG
refCount
;
}
ThreadMgrEventSink
;
static
void
ThreadMgrEventSink_Destructor
(
ThreadMgrEventSink
*
This
)
{
HeapFree
(
GetProcessHeap
(),
0
,
This
);
}
static
HRESULT
WINAPI
ThreadMgrEventSink_QueryInterface
(
ITfThreadMgrEventSink
*
iface
,
REFIID
iid
,
LPVOID
*
ppvOut
)
{
ThreadMgrEventSink
*
This
=
(
ThreadMgrEventSink
*
)
iface
;
*
ppvOut
=
NULL
;
if
(
IsEqualIID
(
iid
,
&
IID_IUnknown
)
||
IsEqualIID
(
iid
,
&
IID_ITfThreadMgrEventSink
))
{
*
ppvOut
=
This
;
}
if
(
*
ppvOut
)
{
IUnknown_AddRef
(
iface
);
return
S_OK
;
}
return
E_NOINTERFACE
;
}
static
ULONG
WINAPI
ThreadMgrEventSink_AddRef
(
ITfThreadMgrEventSink
*
iface
)
{
ThreadMgrEventSink
*
This
=
(
ThreadMgrEventSink
*
)
iface
;
ok
(
tmSinkRefCount
==
This
->
refCount
,
"ThreadMgrEventSink refcount off %i vs %i
\n
"
,
This
->
refCount
,
tmSinkRefCount
);
return
InterlockedIncrement
(
&
This
->
refCount
);
}
static
ULONG
WINAPI
ThreadMgrEventSink_Release
(
ITfThreadMgrEventSink
*
iface
)
{
ThreadMgrEventSink
*
This
=
(
ThreadMgrEventSink
*
)
iface
;
ULONG
ret
;
ok
(
tmSinkRefCount
==
This
->
refCount
,
"ThreadMgrEventSink refcount off %i vs %i
\n
"
,
This
->
refCount
,
tmSinkRefCount
);
ret
=
InterlockedDecrement
(
&
This
->
refCount
);
if
(
ret
==
0
)
ThreadMgrEventSink_Destructor
(
This
);
return
ret
;
}
static
HRESULT
WINAPI
ThreadMgrEventSink_OnInitDocumentMgr
(
ITfThreadMgrEventSink
*
iface
,
ITfDocumentMgr
*
pdim
)
{
trace
(
"
\n
"
);
return
S_OK
;
}
static
HRESULT
WINAPI
ThreadMgrEventSink_OnUninitDocumentMgr
(
ITfThreadMgrEventSink
*
iface
,
ITfDocumentMgr
*
pdim
)
{
trace
(
"
\n
"
);
return
S_OK
;
}
static
HRESULT
WINAPI
ThreadMgrEventSink_OnSetFocus
(
ITfThreadMgrEventSink
*
iface
,
ITfDocumentMgr
*
pdimFocus
,
ITfDocumentMgr
*
pdimPrevFocus
)
{
trace
(
"
\n
"
);
return
S_OK
;
}
static
HRESULT
WINAPI
ThreadMgrEventSink_OnPushContext
(
ITfThreadMgrEventSink
*
iface
,
ITfContext
*
pic
)
{
trace
(
"
\n
"
);
return
S_OK
;
}
static
HRESULT
WINAPI
ThreadMgrEventSink_OnPopContext
(
ITfThreadMgrEventSink
*
iface
,
ITfContext
*
pic
)
{
trace
(
"
\n
"
);
return
S_OK
;
}
static
const
ITfThreadMgrEventSinkVtbl
ThreadMgrEventSink_ThreadMgrEventSinkVtbl
=
{
ThreadMgrEventSink_QueryInterface
,
ThreadMgrEventSink_AddRef
,
ThreadMgrEventSink_Release
,
ThreadMgrEventSink_OnInitDocumentMgr
,
ThreadMgrEventSink_OnUninitDocumentMgr
,
ThreadMgrEventSink_OnSetFocus
,
ThreadMgrEventSink_OnPushContext
,
ThreadMgrEventSink_OnPopContext
};
HRESULT
ThreadMgrEventSink_Constructor
(
IUnknown
**
ppOut
)
{
ThreadMgrEventSink
*
This
;
This
=
HeapAlloc
(
GetProcessHeap
(),
HEAP_ZERO_MEMORY
,
sizeof
(
ThreadMgrEventSink
));
if
(
This
==
NULL
)
return
E_OUTOFMEMORY
;
This
->
ThreadMgrEventSinkVtbl
=
&
ThreadMgrEventSink_ThreadMgrEventSinkVtbl
;
This
->
refCount
=
1
;
*
ppOut
=
(
IUnknown
*
)
This
;
return
S_OK
;
}
/********************************************************************************************
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment