[11/11] apphelp: Add tests.

Mislav Blazevic krofnica996 at gmail.com
Thu Aug 1 17:23:33 CDT 2013


---
 dlls/apphelp/tests/apphelp.c | 144 +++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 144 insertions(+)

diff --git a/dlls/apphelp/tests/apphelp.c b/dlls/apphelp/tests/apphelp.c
index 5b5670c..9809d39 100644
--- a/dlls/apphelp/tests/apphelp.c
+++ b/dlls/apphelp/tests/apphelp.c
@@ -1,5 +1,6 @@
 /*
  * Copyright 2012 Detlef Riekenberg
+ * Copyright 2013 Mislav Blažević
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -24,11 +25,24 @@
 #include <exdisp.h>
 #include <shlobj.h>
 #include <urlmon.h>
+#include <appcompatapi.h>
+#include <winbase.h>
+#include "../apphelp.h"

 #include "wine/test.h"

 static HMODULE hdll;
 static BOOL (WINAPI *pApphelpCheckShellObject)(REFCLSID, BOOL, ULONGLONG *);
+static LPCWSTR (WINAPI *pSdbTagToString)(TAG);
+static PDB (WINAPI *pSdbOpenDatabase)(LPCWSTR, PATH_TYPE);
+static void (WINAPI *pSdbCloseDatabase)(PDB);
+static TAG (WINAPI *pSdbGetTagFromTagID)(PDB, TAGID);
+static DWORD (WINAPI *pSdbReadDWORDTag)(PDB, TAGID, DWORD);
+static QWORD (WINAPI *pSdbReadQWORDTag)(PDB, TAGID, QWORD);
+static TAGID (WINAPI *pSdbGetFirstChild)(PDB, TAGID);
+static TAGID (WINAPI *pSdbGetNextChild)(PDB, TAGID, TAGID);
+static LPWSTR (WINAPI *pSdbGetStringTagPtr)(PDB, TAGID);
+static BOOL (WINAPI *pSdbReadStringTag)(PDB, TAGID, LPWSTR, DWORD);

 DEFINE_GUID(GUID_NULL,0,0,0,0,0,0,0,0,0,0,0);

@@ -102,6 +116,124 @@ static void test_ApphelpCheckShellObject(void)
     }
 }

+static void test_SdbTagToString(void)
+{
+    WORD i;
+    static const TAG invalid_values[] = {
+        1, TAG_TYPE_WORD, TAG_TYPE_MASK,
+        TAG_TYPE_DWORD | 0xFF,
+        TAG_TYPE_DWORD | (0x800 + 0xEE),
+        0x900, 0xFFFF, 0xDEAD, 0xBEEF
+    };
+    static const WCHAR invalid[] = {'I','n','v','a','l','i','d','T','a','g',0};
+    LPCWSTR ret;
+
+    for (i = 0; i < 9; ++i)
+    {
+        ret = pSdbTagToString(invalid_values[i]);
+        ok(lstrcmpW(ret, invalid) == 0, "unexpected string %s, should be %s\n",
+           wine_dbgstr_w(ret), wine_dbgstr_w(invalid));
+    }
+}
+
+static void Write(HANDLE file, LPCVOID buffer, DWORD size)
+{
+    WriteFile(file, buffer, size, NULL, NULL);
+}
+
+static void test_Sdb(void)
+{
+    static const WCHAR path[] = {'t','e','m','p',0};
+    static const WCHAR tag_size_string[] = {'S','I','Z','E',0};
+    static const WCHAR tag_flag_lua_string[] =
{'F','L','A','G','_','L','U','A',0};
+    static const TAG tags[5] = {
+        TAG_SIZE, TAG_FLAG_LUA, TAG_NAME,
+        TAG_STRINGTABLE, TAG_STRINGTABLE_ITEM
+    };
+    WCHAR buffer[6] = {0};
+    PDB db;
+    HANDLE file; /* temp file created for testing purpose */
+    DWORD two = 2, one = 1; /* version magic */
+    DWORD value = 5;
+    QWORD value2 = 0xDEADBEEF;
+    TAG tag;
+    DWORD path_size = 5 * sizeof(WCHAR); /* size of path variable */
+    TAGID tagid, stringref = 6, stringtable = path_size + 6;
+    LPCWSTR string;
+
+    file = CreateFileW(path, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL, 0);
+
+    if (file == INVALID_HANDLE_VALUE)
+    {
+        ok(FALSE, "could not perform test because temp file could not
be created\n");
+        return;
+    }
+
+    Write(file, &two, 4);
+    Write(file, &one, 4);
+    Write(file, "sdbf", 4);
+    Write(file, &tags[0], 2);
+    Write(file, &value, 4);
+    Write(file, &tags[1], 2);
+    Write(file, &value2, 8);
+    Write(file, &tags[2], 2);
+    Write(file, &stringref, 4);
+    Write(file, &tags[3], 2);
+    Write(file, &stringtable, 4);
+    Write(file, &tags[4], 2);
+    Write(file, &path_size, 4);
+    Write(file, path, path_size);
+    CloseHandle(file);
+
+    db = pSdbOpenDatabase(path, DOS_PATH);
+    ok(db != NULL, "unexpected NULL handle\n");
+
+    tagid = pSdbGetFirstChild(db, TAGID_ROOT);
+    ok(tagid == _TAGID_ROOT, "unexpected tagid %u, expected %u\n",
tagid, _TAGID_ROOT);
+
+    tag = pSdbGetTagFromTagID(db, tagid);
+    ok(tag == TAG_SIZE, "unexpected tag 0x%x, expected 0x%x\n", tag, TAG_SIZE);
+
+    string = pSdbTagToString(tag);
+    ok(lstrcmpW(string, tag_size_string) == 0, "unexpected string %s,
expected %s\n",
+       wine_dbgstr_w(string), wine_dbgstr_w(tag_size_string));
+
+    value = pSdbReadDWORDTag(db, tagid, 0);
+    ok(value == 5, "unexpected value %u, expected 5\n", value);
+
+    tagid = pSdbGetNextChild(db, TAGID_ROOT, tagid);
+    ok(tagid == _TAGID_ROOT + sizeof(TAG) + sizeof(DWORD),
"unexpected tagid %u, expected %u\n",
+       tagid, _TAGID_ROOT + sizeof(TAG) + sizeof(DWORD));
+
+    tag = pSdbGetTagFromTagID(db, tagid);
+    ok (tag == TAG_FLAG_LUA, "unexpected tag 0x%x, expected 0x%x\n",
tag, TAG_FLAG_LUA);
+
+    string = pSdbTagToString(tag);
+    ok(lstrcmpW(string, tag_flag_lua_string) == 0, "unexpected string
%s, expected %s\n",
+       wine_dbgstr_w(string), wine_dbgstr_w(tag_flag_lua_string));
+
+    value2 = pSdbReadQWORDTag(db, tagid, 0);
+    ok(value2 == 0xDEADBEEF, "unexpected value 0x%llx, expected
0x%x\n", value2, 0xDEADBEEF);
+
+    tagid = pSdbGetNextChild(db, TAGID_ROOT, tagid);
+    string = pSdbGetStringTagPtr(db, tagid);
+    ok (string && (lstrcmpW(string, path) == 0), "unexpected string
%s, expected %s\n",
+        wine_dbgstr_w(string), wine_dbgstr_w(path));
+
+    tagid = pSdbGetNextChild(db, TAGID_ROOT, tagid);
+    tagid = pSdbGetFirstChild(db, tagid);
+
+    string = pSdbGetStringTagPtr(db, tagid);
+    ok (string && (lstrcmpW(string, path) == 0), "unexpected string
%s, expected %s\n",
+        wine_dbgstr_w(string), wine_dbgstr_w(path));
+
+    ok (pSdbReadStringTag(db, tagid, buffer, 6), "failed to write
string to buffer\n");
+    ok (!pSdbReadStringTag(db, tagid, buffer, 3), "string was written
to buffer, but failure was expected");
+
+    pSdbCloseDatabase(db);
+    DeleteFileW(path);
+}
+
 START_TEST(apphelp)
 {

@@ -111,6 +243,18 @@ START_TEST(apphelp)
         return;
     }
     pApphelpCheckShellObject = (void *) GetProcAddress(hdll,
"ApphelpCheckShellObject");
+    pSdbTagToString = (void *) GetProcAddress(hdll, "SdbTagToString");
+    pSdbOpenDatabase = (void *) GetProcAddress(hdll, "SdbOpenDatabase");
+    pSdbCloseDatabase = (void *) GetProcAddress(hdll, "SdbCloseDatabase");
+    pSdbGetTagFromTagID = (void *) GetProcAddress(hdll, "SdbGetTagFromTagID");
+    pSdbGetFirstChild = (void *) GetProcAddress(hdll, "SdbGetFirstChild");
+    pSdbReadDWORDTag = (void *) GetProcAddress(hdll, "SdbReadDWORDTag");
+    pSdbReadQWORDTag = (void *) GetProcAddress(hdll, "SdbReadQWORDTag");
+    pSdbGetNextChild = (void *) GetProcAddress(hdll, "SdbGetNextChild");
+    pSdbGetStringTagPtr = (void *) GetProcAddress(hdll, "SdbGetStringTagPtr");
+    pSdbReadStringTag = (void *) GetProcAddress(hdll, "SdbReadStringTag");

+    test_Sdb();
+    test_SdbTagToString();
     test_ApphelpCheckShellObject();
 }
-- 
1.8.3.4



More information about the wine-patches mailing list