Module: wine Branch: master Commit: 8fab39cc6083fdfc4ae932164a2028e2a41fdb29 URL: http://source.winehq.org/git/wine.git/?a=commit;h=8fab39cc6083fdfc4ae932164a...
Author: James Hawkins truiken@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); }