Huw Davies : sapi: Add a partial implementation of SpObjectTokenCategory:: EnumTokens().
Alexandre Julliard
julliard at winehq.org
Thu Sep 28 18:36:35 CDT 2017
Module: wine
Branch: master
Commit: 682c1b9532e234b1d2d22ff1c79846d08e4666c2
URL: http://source.winehq.org/git/wine.git/?a=commit;h=682c1b9532e234b1d2d22ff1c79846d08e4666c2
Author: Huw Davies <huw at codeweavers.com>
Date: Thu Sep 28 08:40:54 2017 +0100
sapi: Add a partial implementation of SpObjectTokenCategory::EnumTokens().
Signed-off-by: Huw Davies <huw at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/sapi/tests/token.c | 35 +++++++++++++++++++++++++++++++++++
dlls/sapi/token.c | 25 +++++++++++++++++++++++--
2 files changed, 58 insertions(+), 2 deletions(-)
diff --git a/dlls/sapi/tests/token.c b/dlls/sapi/tests/token.c
index 688ade7..9f6689b8 100644
--- a/dlls/sapi/tests/token.c
+++ b/dlls/sapi/tests/token.c
@@ -49,6 +49,40 @@ static void test_data_key(void)
ISpRegDataKey_Release( data_key );
}
+static void test_token_category(void)
+{
+ ISpObjectTokenCategory *cat;
+ IEnumSpObjectTokens *enum_tokens;
+ HRESULT hr;
+ WCHAR bogus[] = {'b','o','g','u','s',0};
+ ULONG count;
+
+ hr = CoCreateInstance( &CLSID_SpObjectTokenCategory, NULL, CLSCTX_INPROC_SERVER,
+ &IID_ISpObjectTokenCategory, (void **)&cat );
+ ok( hr == S_OK, "got %08x\n", hr );
+
+ hr = ISpObjectTokenCategory_EnumTokens( cat, NULL, NULL, &enum_tokens );
+ ok( hr == SPERR_UNINITIALIZED, "got %08x\n", hr );
+
+ hr = ISpObjectTokenCategory_SetId( cat, bogus, FALSE );
+ ok( hr == SPERR_INVALID_REGISTRY_KEY, "got %08x\n", hr );
+
+ hr = ISpObjectTokenCategory_SetId( cat, SPCAT_VOICES, FALSE );
+ ok( hr == S_OK, "got %08x\n", hr );
+
+ hr = ISpObjectTokenCategory_SetId( cat, SPCAT_VOICES, FALSE );
+ ok( hr == SPERR_ALREADY_INITIALIZED, "got %08x\n", hr );
+
+ hr = ISpObjectTokenCategory_EnumTokens( cat, NULL, NULL, &enum_tokens );
+ ok( hr == S_OK, "got %08x\n", hr );
+
+ hr = IEnumSpObjectTokens_GetCount( enum_tokens, &count );
+ ok( hr == S_OK, "got %08x\n", hr );
+
+ IEnumSpObjectTokens_Release( enum_tokens );
+ ISpObjectTokenCategory_Release( cat );
+}
+
static void test_token_enum(void)
{
ISpObjectTokenEnumBuilder *token_enum;
@@ -86,6 +120,7 @@ START_TEST(token)
{
CoInitialize( NULL );
test_data_key();
+ test_token_category();
test_token_enum();
CoUninitialize();
}
diff --git a/dlls/sapi/token.c b/dlls/sapi/token.c
index 9262641..781e3cc 100644
--- a/dlls/sapi/token.c
+++ b/dlls/sapi/token.c
@@ -455,8 +455,29 @@ static HRESULT WINAPI token_category_EnumTokens( ISpObjectTokenCategory *iface,
LPCWSTR req, LPCWSTR opt,
IEnumSpObjectTokens **enum_tokens )
{
- FIXME( "stub\n" );
- return E_NOTIMPL;
+ struct token_category *This = impl_from_ISpObjectTokenCategory( iface );
+ ISpObjectTokenEnumBuilder *builder;
+ HRESULT hr;
+
+ FIXME( "(%p)->(%s %s %p): semi-stub\n", This, debugstr_w( req ), debugstr_w( opt ), enum_tokens );
+
+ if (!This->data_key) return SPERR_UNINITIALIZED;
+
+ hr = CoCreateInstance( &CLSID_SpObjectTokenEnum, NULL, CLSCTX_ALL,
+ &IID_ISpObjectTokenEnumBuilder, (void **)&builder );
+ if (FAILED(hr)) return hr;
+
+ hr = ISpObjectTokenEnumBuilder_SetAttribs( builder, req, opt );
+ if (FAILED(hr)) goto fail;
+
+ /* FIXME: Build the enumerator */
+
+ hr = ISpObjectTokenEnumBuilder_QueryInterface( builder, &IID_IEnumSpObjectTokens,
+ (void **)enum_tokens );
+
+fail:
+ ISpObjectTokenEnumBuilder_Release( builder );
+ return hr;
}
static HRESULT WINAPI token_category_SetDefaultTokenId( ISpObjectTokenCategory *iface,
More information about the wine-cvs
mailing list