James Hawkins : msi: Add more tests for MsiOpenPackage.

Alexandre Julliard julliard at winehq.org
Mon Dec 17 06:41:44 CST 2007


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

Author: James Hawkins <truiken at gmail.com>
Date:   Sun Dec 16 20:14:46 2007 -0600

msi: Add more tests for MsiOpenPackage.

---

 dlls/msi/package.c       |    2 -
 dlls/msi/tests/package.c |  131 ++++++++++++++++++++++++++++++++++++++-------
 2 files changed, 110 insertions(+), 23 deletions(-)

diff --git a/dlls/msi/package.c b/dlls/msi/package.c
index 1286641..5c42cd8 100644
--- a/dlls/msi/package.c
+++ b/dlls/msi/package.c
@@ -889,8 +889,6 @@ UINT MSI_OpenPackageW(LPCWSTR szPackage, MSIPACKAGE **pPackage)
         r = MSI_OpenDatabaseW( file, MSIDBOPEN_READONLY, &db );
         if( r != ERROR_SUCCESS )
         {
-            if (GetLastError() == ERROR_FILE_NOT_FOUND)
-                msi_ui_error( 4, MB_OK | MB_ICONWARNING );
             if (file != szPackage)
                 DeleteFileW( file );
 
diff --git a/dlls/msi/tests/package.c b/dlls/msi/tests/package.c
index b52aab8..f4b0a4d 100644
--- a/dlls/msi/tests/package.c
+++ b/dlls/msi/tests/package.c
@@ -23,6 +23,7 @@
 
 #include <stdio.h>
 #include <windows.h>
+#include <msidefs.h>
 #include <msi.h>
 #include <msiquery.h>
 
@@ -1992,6 +1993,40 @@ static UINT try_query( MSIHANDLE hdb, LPCSTR szQuery )
     return try_query_param( hdb, szQuery, 0 );
 }
 
+static void set_summary_str(MSIHANDLE hdb, DWORD pid, LPCSTR value)
+{
+    MSIHANDLE summary;
+    UINT r;
+
+    r = MsiGetSummaryInformationA(hdb, NULL, 1, &summary);
+    ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+
+    r = MsiSummaryInfoSetPropertyA(summary, pid, VT_LPSTR, 0, NULL, value);
+    ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
+
+    r = MsiSummaryInfoPersist(summary);
+    ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
+
+    MsiCloseHandle(summary);
+}
+
+static void set_summary_dword(MSIHANDLE hdb, DWORD pid, DWORD value)
+{
+    MSIHANDLE summary;
+    UINT r;
+
+    r = MsiGetSummaryInformationA(hdb, NULL, 1, &summary);
+    ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+
+    r = MsiSummaryInfoSetPropertyA(summary, pid, VT_I4, value, NULL, NULL);
+    ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
+
+    r = MsiSummaryInfoPersist(summary);
+    ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
+
+    MsiCloseHandle(summary);
+}
+
 static void test_msipackage(void)
 {
     MSIHANDLE hdb = 0, hpack = 100;
@@ -1999,34 +2034,53 @@ static void test_msipackage(void)
     const char *query;
     char name[10];
 
-    DeleteFile(msifile);
+    /* NULL szPackagePath */
+    r = MsiOpenPackage(NULL, &hpack);
+    ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", r);
 
-    todo_wine {
-    name[0] = 0;
-    r = MsiOpenPackage(name, &hpack);
-    ok(r == ERROR_SUCCESS, "failed to open package with no name\n");
-    r = MsiCloseHandle(hpack);
-    ok(r == ERROR_SUCCESS, "failed to close package\n");
+    /* empty szPackagePath */
+    r = MsiOpenPackage("", &hpack);
+    todo_wine
+    {
+        ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
     }
 
-    /* just MsiOpenDatabase should not create a file */
-    r = MsiOpenDatabase(msifile, MSIDBOPEN_CREATE, &hdb);
-    ok(r == ERROR_SUCCESS, "MsiOpenDatabase failed\n");
+    MsiCloseHandle(hpack);
+
+    /* nonexistent szPackagePath */
+    r = MsiOpenPackage("nonexistent", &hpack);
+    todo_wine
+    {
+        ok(r == ERROR_FILE_NOT_FOUND, "Expected ERROR_FILE_NOT_FOUND, got %d\n", r);
+    }
+
+    /* NULL hProduct */
+    r = MsiOpenPackage(msifile, NULL);
+    todo_wine
+    {
+        ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", r);
+    }
 
     name[0]='#';
     name[1]=0;
     r = MsiOpenPackage(name, &hpack);
-    ok(r == ERROR_INVALID_HANDLE, "MsiOpenPackage returned wrong code\n");
+    ok(r == ERROR_INVALID_HANDLE, "Expected ERROR_INVALID_HANDLE, got %d\n", r);
 
-    todo_wine {
-    /* now try again with our empty database */
+    r = MsiOpenDatabase(msifile, MSIDBOPEN_CREATE, &hdb);
+    ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+
+    /* database exists, but is emtpy */
     sprintf(name, "#%ld", hdb);
     r = MsiOpenPackage(name, &hpack);
-    ok(r == ERROR_INSTALL_PACKAGE_INVALID, "MsiOpenPackage returned wrong code\n");
-    if (!r)    MsiCloseHandle(hpack);
+    todo_wine
+    {
+        ok(r == ERROR_INSTALL_PACKAGE_INVALID,
+           "Expected ERROR_INSTALL_PACKAGE_INVALID, got %d\n", r);
     }
 
-    /* create a table */
+    if (r == ERROR_SUCCESS)
+        MsiCloseHandle(hpack);
+
     query = "CREATE TABLE `Property` ( "
             "`Property` CHAR(72), `Value` CHAR(0) "
             "PRIMARY KEY `Property`)";
@@ -2039,15 +2093,50 @@ static void test_msipackage(void)
     r = try_query(hdb, query);
     ok(r == ERROR_SUCCESS, "failed to create InstallExecuteSequence table\n");
 
-    todo_wine {
+    /* a few key tables exist */
+    sprintf(name, "#%ld", hdb);
+    r = MsiOpenPackage(name, &hpack);
+    todo_wine
+    {
+        ok(r == ERROR_INSTALL_PACKAGE_INVALID,
+           "Expected ERROR_INSTALL_PACKAGE_INVALID, got %d\n", r);
+    }
+
+    if (r == ERROR_SUCCESS)
+        MsiCloseHandle(hpack);
+
+    MsiCloseHandle(hdb);
+    DeleteFile(msifile);
+
+    /* start with a clean database to show what constitutes a valid package */
+    r = MsiOpenDatabase(msifile, MSIDBOPEN_CREATE, &hdb);
+    ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+
     sprintf(name, "#%ld", hdb);
+
+    /* The following summary information props must exist:
+     *  - PID_REVNUMBER
+     *  - PID_PAGECOUNT
+     */
+
+    set_summary_dword(hdb, PID_PAGECOUNT, 100);
     r = MsiOpenPackage(name, &hpack);
-    ok(r == ERROR_INSTALL_PACKAGE_INVALID, "MsiOpenPackage returned wrong code\n");
-    if (!r)    MsiCloseHandle(hpack);
+    todo_wine
+    {
+        ok(r == ERROR_INSTALL_PACKAGE_INVALID,
+           "Expected ERROR_INSTALL_PACKAGE_INVALID, got %d\n", r);
     }
 
-    r = MsiCloseHandle(hdb);
-    ok(r == ERROR_SUCCESS, "MsiCloseHandle(database) failed\n");
+    if (r == ERROR_SUCCESS)
+        MsiCloseHandle(hpack);
+
+    set_summary_str(hdb, PID_REVNUMBER, "{004757CD-5092-49c2-AD20-28E1CE0DF5F2}");
+    r = MsiOpenPackage(name, &hpack);
+    ok(r == ERROR_SUCCESS,
+       "Expected ERROR_SUCCESS, got %d\n", r);
+
+    MsiCloseHandle(hpack);
+    MsiCloseHandle(hdb);
     DeleteFile(msifile);
 }
 




More information about the wine-cvs mailing list