James Hawkins : msi: Add tests for opening a package from a database.

Alexandre Julliard julliard at winehq.org
Wed Jul 9 06:10:05 CDT 2008


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

Author: James Hawkins <jhawkins at codeweavers.com>
Date:   Tue Jul  8 23:52:48 2008 -0500

msi: Add tests for opening a package from a database.

---

 dlls/msi/tests/db.c |  173 +++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 167 insertions(+), 6 deletions(-)

diff --git a/dlls/msi/tests/db.c b/dlls/msi/tests/db.c
index 10c2a4a..78a6ca2 100644
--- a/dlls/msi/tests/db.c
+++ b/dlls/msi/tests/db.c
@@ -190,6 +190,27 @@ static UINT create_component_table( MSIHANDLE hdb )
             "PRIMARY KEY `Component`)" );
 }
 
+static UINT create_custom_action_table( MSIHANDLE hdb )
+{
+    return run_query( hdb, 0,
+            "CREATE TABLE `CustomAction` ( "
+            "`Action` CHAR(72) NOT NULL, "
+            "`Type` SHORT NOT NULL, "
+            "`Source` CHAR(72), "
+            "`Target` CHAR(255) "
+            "PRIMARY KEY `Action`)" );
+}
+
+static UINT create_directory_table( MSIHANDLE hdb )
+{
+    return run_query( hdb, 0,
+            "CREATE TABLE `Directory` ( "
+            "`Directory` CHAR(255) NOT NULL, "
+            "`Directory_Parent` CHAR(255), "
+            "`DefaultDir` CHAR(255) NOT NULL "
+            "PRIMARY KEY `Directory`)" );
+}
+
 static UINT create_feature_components_table( MSIHANDLE hdb )
 {
     return run_query( hdb, 0,
@@ -233,6 +254,22 @@ static UINT add_component_entry( MSIHANDLE hdb, const char *values )
     return r;
 }
 
+static UINT add_custom_action_entry( MSIHANDLE hdb, const char *values )
+{
+    char insert[] = "INSERT INTO `CustomAction`  "
+            "(`Action`, `Type`, `Source`, `Target`) "
+            "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, 0, query );
+    HeapFree(GetProcessHeap(), 0, query);
+    return r;
+}
+
 static UINT add_feature_components_entry( MSIHANDLE hdb, const char *values )
 {
     char insert[] = "INSERT INTO `FeatureComponents` "
@@ -2331,12 +2368,7 @@ static MSIHANDLE create_package_db(LPCSTR filename)
 
     res = set_summary_info(hdb);
 
-    res = run_query( hdb, 0,
-            "CREATE TABLE `Directory` ( "
-            "`Directory` CHAR(255) NOT NULL, "
-            "`Directory_Parent` CHAR(255), "
-            "`DefaultDir` CHAR(255) NOT NULL "
-            "PRIMARY KEY `Directory`)" );
+    res = create_directory_table(hdb);
     ok( res == ERROR_SUCCESS , "Failed to create directory table\n" );
 
     return hdb;
@@ -6153,6 +6185,134 @@ static void test_storages_table(void)
     DeleteFileA(msifile);
 }
 
+static void test_dbtopackage(void)
+{
+    MSIHANDLE hdb, hpkg;
+    CHAR package[10];
+    CHAR buf[MAX_PATH];
+    DWORD size;
+    UINT r;
+
+    /* create an empty database, transact mode */
+    r = MsiOpenDatabase(msifile, MSIDBOPEN_CREATE, &hdb);
+    ok(r == ERROR_SUCCESS, "Failed to create database\n");
+
+    set_summary_info(hdb);
+
+    r = create_directory_table(hdb);
+    ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+
+    r = create_custom_action_table(hdb);
+    ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+
+    r = add_custom_action_entry(hdb, "'SetProp', 51, 'MYPROP', 'grape'");
+    ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+
+    sprintf(package, "#%li", hdb);
+    r = MsiOpenPackage(package, &hpkg);
+    ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+
+    /* property is not set yet */
+    size = MAX_PATH;
+    lstrcpyA(buf, "kiwi");
+    r = MsiGetProperty(hpkg, "MYPROP", buf, &size);
+    ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+    ok(!lstrcmpA(buf, ""), "Expected \"\", got \"%s\"\n", buf);
+    ok(size == 0, "Expected 0, got %d\n", size);
+
+    /* run the custom action to set the property */
+    r = MsiDoAction(hpkg, "SetProp");
+    ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+
+    /* property is now set */
+    size = MAX_PATH;
+    lstrcpyA(buf, "kiwi");
+    r = MsiGetProperty(hpkg, "MYPROP", buf, &size);
+    ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+    ok(!lstrcmpA(buf, "grape"), "Expected \"grape\", got \"%s\"\n", buf);
+    ok(size == 5, "Expected 5, got %d\n", size);
+
+    MsiCloseHandle(hpkg);
+
+    /* reset the package */
+    r = MsiOpenPackage(package, &hpkg);
+    ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+
+    /* property is not set anymore */
+    size = MAX_PATH;
+    lstrcpyA(buf, "kiwi");
+    r = MsiGetProperty(hpkg, "MYPROP", buf, &size);
+    ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+    todo_wine
+    {
+        ok(!lstrcmpA(buf, ""), "Expected \"\", got \"%s\"\n", buf);
+        ok(size == 0, "Expected 0, got %d\n", size);
+    }
+
+    MsiCloseHandle(hdb);
+    MsiCloseHandle(hpkg);
+
+    /* create an empty database, direct mode */
+    r = MsiOpenDatabase(msifile, MSIDBOPEN_CREATEDIRECT, &hdb);
+    ok(r == ERROR_SUCCESS, "Failed to create database\n");
+
+    set_summary_info(hdb);
+
+    r = create_directory_table(hdb);
+    ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+
+    r = create_custom_action_table(hdb);
+    ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+
+    r = add_custom_action_entry(hdb, "'SetProp', 51, 'MYPROP', 'grape'");
+    ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+
+    sprintf(package, "#%li", hdb);
+    r = MsiOpenPackage(package, &hpkg);
+    ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+
+    /* property is not set yet */
+    size = MAX_PATH;
+    lstrcpyA(buf, "kiwi");
+    r = MsiGetProperty(hpkg, "MYPROP", buf, &size);
+    ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+    ok(!lstrcmpA(buf, ""), "Expected \"\", got \"%s\"\n", buf);
+    ok(size == 0, "Expected 0, got %d\n", size);
+
+    /* run the custom action to set the property */
+    r = MsiDoAction(hpkg, "SetProp");
+    ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+
+    /* property is now set */
+    size = MAX_PATH;
+    lstrcpyA(buf, "kiwi");
+    r = MsiGetProperty(hpkg, "MYPROP", buf, &size);
+    ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+    ok(!lstrcmpA(buf, "grape"), "Expected \"grape\", got \"%s\"\n", buf);
+    ok(size == 5, "Expected 5, got %d\n", size);
+
+    MsiCloseHandle(hpkg);
+
+    /* reset the package */
+    r = MsiOpenPackage(package, &hpkg);
+    ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+
+    /* property is not set anymore */
+    size = MAX_PATH;
+    lstrcpyA(buf, "kiwi");
+    r = MsiGetProperty(hpkg, "MYPROP", buf, &size);
+    ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+    todo_wine
+    {
+        ok(!lstrcmpA(buf, ""), "Expected \"\", got \"%s\"\n", buf);
+        ok(size == 0, "Expected 0, got %d\n", size);
+    }
+
+    MsiCloseHandle(hdb);
+    MsiCloseHandle(hpkg);
+    DeleteFileA(msifile);
+}
+
 START_TEST(db)
 {
     test_msidatabase();
@@ -6191,4 +6351,5 @@ START_TEST(db)
     test_viewmodify_refresh();
     test_where_viewmodify();
     test_storages_table();
+    test_dbtopackage();
 }




More information about the wine-cvs mailing list