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