[PATCH 9/9] sapi: Add a partial implementation of SpObjectTokenCategory::EnumTokens().

Huw Davies huw at codeweavers.com
Thu Sep 28 02:40:54 CDT 2017


Signed-off-by: Huw Davies <huw at codeweavers.com>
---
 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,
-- 
2.7.4




More information about the wine-patches mailing list