James Hawkins : msi: Test the CCPSearch action.

Alexandre Julliard julliard at winehq.org
Mon Dec 3 09:17:52 CST 2007


Module: wine
Branch: master
Commit: 6a30e1b0b462f269066ccadcec3cee53f9cdf9a2
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=6a30e1b0b462f269066ccadcec3cee53f9cdf9a2

Author: James Hawkins <truiken at gmail.com>
Date:   Fri Nov 30 20:09:22 2007 -0600

msi: Test the CCPSearch action.

---

 dlls/msi/tests/package.c |  102 ++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 102 insertions(+), 0 deletions(-)

diff --git a/dlls/msi/tests/package.c b/dlls/msi/tests/package.c
index 6574a80..85dc646 100644
--- a/dlls/msi/tests/package.c
+++ b/dlls/msi/tests/package.c
@@ -210,6 +210,25 @@ static UINT create_media_table( MSIHANDLE hdb )
             "PRIMARY KEY `DiskId`)" );
 }
 
+static UINT create_ccpsearch_table( MSIHANDLE hdb )
+{
+    return run_query( hdb,
+            "CREATE TABLE `CCPSearch` ("
+            "`Signature_` CHAR(72) NOT NULL "
+            "PRIMARY KEY `Signature_`)" );
+}
+
+static UINT create_drlocator_table( MSIHANDLE hdb )
+{
+    return run_query( hdb,
+            "CREATE TABLE `DrLocator` ("
+            "`Signature_` CHAR(72) NOT NULL, "
+            "`Parent` CHAR(72), "
+            "`Path` CHAR(255), "
+            "`Depth` SHORT "
+            "PRIMARY KEY `Signature_`, `Parent`, `Path`)" );
+}
+
 static UINT add_component_entry( MSIHANDLE hdb, const char *values )
 {
     char insert[] = "INSERT INTO `Component`  "
@@ -386,6 +405,36 @@ static UINT add_media_entry( MSIHANDLE hdb, const char *values )
     return r;
 }
 
+static UINT add_ccpsearch_entry( MSIHANDLE hdb, const char *values )
+{
+    char insert[] = "INSERT INTO `CCPSearch` (`Signature_`) VALUES( %s )";
+    char *query;
+    UINT sz, r;
+
+    sz = strlen(values) + sizeof insert;
+    query = HeapAlloc(GetProcessHeap(),0,sz);
+    sprintf(query,insert,values);
+    r = run_query( hdb, query );
+    HeapFree(GetProcessHeap(), 0, query);
+    return r;
+}
+
+static UINT add_drlocator_entry( MSIHANDLE hdb, const char *values )
+{
+    char insert[] = "INSERT INTO `DrLocator` "
+            "(`Signature_`, `Parent`, `Path`, `Depth`) "
+            "VALUES( %s )";
+    char *query;
+    UINT sz, r;
+
+    sz = strlen(values) + sizeof insert;
+    query = HeapAlloc(GetProcessHeap(),0,sz);
+    sprintf(query,insert,values);
+    r = run_query( hdb, query );
+    HeapFree(GetProcessHeap(), 0, query);
+    return r;
+}
+
 static UINT set_summary_info(MSIHANDLE hdb)
 {
     UINT res;
@@ -4773,6 +4822,58 @@ static void test_launchconditions(void)
     DeleteFile( msifile );
 }
 
+static void test_ccpsearch(void)
+{
+    MSIHANDLE hdb, hpkg;
+    CHAR prop[MAX_PATH];
+    DWORD size = MAX_PATH;
+    UINT r;
+
+    MsiSetInternalUI(INSTALLUILEVEL_NONE, NULL);
+
+    hdb = create_package_db();
+    ok(hdb, "failed to create package database\n");
+
+    r = create_ccpsearch_table(hdb);
+    ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+
+    r = add_ccpsearch_entry(hdb, "'CCP_random'");
+    ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+
+    r = add_ccpsearch_entry(hdb, "'RMCCP_random'");
+    ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+
+    r = create_reglocator_table(hdb);
+    ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+
+    r = add_reglocator_entry(hdb, "'CCP_random', 0, 'htmlfile\\shell\\open\\nonexistent', '', 1");
+    ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+
+    r = create_drlocator_table(hdb);
+    ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+
+    r = add_drlocator_entry(hdb, "'RMCCP_random', '', 'C:\\', '0'");
+    ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+
+    r = create_signature_table(hdb);
+    ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+
+    hpkg = package_from_db(hdb);
+    ok(hpkg, "failed to create package\n");
+
+    MsiCloseHandle(hdb);
+
+    r = MsiDoAction(hpkg, "CCPSearch");
+    ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+
+    r = MsiGetPropertyA(hpkg, "CCP_Success", prop, &size);
+    ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+    ok(!lstrcmpA(prop, "1"), "Expected 1, got %s\n", prop);
+
+    MsiCloseHandle(hpkg);
+    DeleteFileA(msifile);
+}
+
 START_TEST(package)
 {
     test_createpackage();
@@ -4795,4 +4896,5 @@ START_TEST(package)
     test_sourcedirprop();
     test_prop_path();
     test_launchconditions();
+    test_ccpsearch();
 }




More information about the wine-cvs mailing list