Mike McCormack : msi:
Add tests for creating packages and formatting records.
Alexandre Julliard
julliard at wine.codeweavers.com
Mon Jun 12 10:02:28 CDT 2006
Module: wine
Branch: refs/heads/master
Commit: bef879cb2413e42435bbfa73298b12345059ad19
URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=bef879cb2413e42435bbfa73298b12345059ad19
Author: Mike McCormack <mike at codeweavers.com>
Date: Mon Jun 12 13:21:11 2006 +0900
msi: Add tests for creating packages and formatting records.
---
dlls/msi/tests/package.c | 168 ++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 168 insertions(+), 0 deletions(-)
diff --git a/dlls/msi/tests/package.c b/dlls/msi/tests/package.c
index 89e0403..48fde61 100644
--- a/dlls/msi/tests/package.c
+++ b/dlls/msi/tests/package.c
@@ -844,6 +844,172 @@ static void test_props(void)
DeleteFile(msifile);
}
+static UINT try_query_param( MSIHANDLE hdb, LPSTR szQuery, MSIHANDLE hrec )
+{
+ MSIHANDLE htab = 0;
+ UINT res;
+
+ res = MsiDatabaseOpenView( hdb, szQuery, &htab );
+ if( res == ERROR_SUCCESS )
+ {
+ UINT r;
+
+ r = MsiViewExecute( htab, hrec );
+ if( r != ERROR_SUCCESS )
+ {
+ res = r;
+ fprintf(stderr,"MsiViewExecute failed %08x\n", res);
+ }
+
+ r = MsiViewClose( htab );
+ if( r != ERROR_SUCCESS )
+ res = r;
+
+ r = MsiCloseHandle( htab );
+ if( r != ERROR_SUCCESS )
+ res = r;
+ }
+ return res;
+}
+
+static UINT try_query( MSIHANDLE hdb, LPSTR szQuery )
+{
+ return try_query_param( hdb, szQuery, 0 );
+}
+
+static void test_msipackage(void)
+{
+ MSIHANDLE hdb = 0, hpack = 100;
+ UINT r;
+ char *query;
+ char name[10];
+
+ DeleteFile(msifile);
+
+ 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");
+ }
+
+ /* just MsiOpenDatabase should not create a file */
+ r = MsiOpenDatabase(msifile, MSIDBOPEN_CREATE, &hdb);
+ ok(r == ERROR_SUCCESS, "MsiOpenDatabase failed\n");
+
+ name[0]='#';
+ name[1]=0;
+ r = MsiOpenPackage(name, &hpack);
+ ok(r == ERROR_INVALID_HANDLE, "MsiOpenPackage returned wrong code\n");
+
+ todo_wine {
+ /* now try again with our empty database */
+ sprintf(name, "#%ld", hdb);
+ r = MsiOpenPackage(name, &hpack);
+ ok(r == ERROR_INSTALL_PACKAGE_INVALID, "MsiOpenPackage returned wrong code\n");
+ if (!r) MsiCloseHandle(hpack);
+ }
+
+ /* create a table */
+ query = "CREATE TABLE `Property` ( "
+ "`Property` CHAR(72), `Value` CHAR(0) "
+ "PRIMARY KEY `Property`)";
+ r = try_query(hdb, query);
+ ok(r == ERROR_SUCCESS, "failed to create Properties table\n");
+
+ todo_wine {
+ query = "CREATE TABLE `InstallExecuteSequence` ("
+ "`Action` CHAR(72), `Condition` CHAR(0), `Sequence` INTEGER "
+ "PRIMARY KEY `Action`)";
+ r = try_query(hdb, query);
+ ok(r == ERROR_SUCCESS, "failed to create InstallExecuteSequence table\n");
+
+ sprintf(name, "#%ld", hdb);
+ r = MsiOpenPackage(name, &hpack);
+ ok(r == ERROR_INSTALL_PACKAGE_INVALID, "MsiOpenPackage returned wrong code\n");
+ if (!r) MsiCloseHandle(hpack);
+ }
+
+ r = MsiCloseHandle(hdb);
+ ok(r == ERROR_SUCCESS, "MsiCloseHandle(database) failed\n");
+ DeleteFile(msifile);
+}
+
+static void test_formatrecord2(void)
+{
+ MSIHANDLE hpkg, hrec ;
+ char buffer[0x100];
+ DWORD sz;
+ UINT r;
+
+ hpkg = package_from_db(create_package_db());
+ ok( hpkg, "failed to create package\n");
+
+ r = MsiSetProperty(hpkg, "Manufacturer", " " );
+ ok( r == ERROR_SUCCESS, "set property failed\n");
+
+ hrec = MsiCreateRecord(2);
+ ok(hrec, "create record failed\n");
+
+ r = MsiRecordSetString( hrec, 0, "[ProgramFilesFolder][Manufacturer]\\asdf");
+ ok( r == ERROR_SUCCESS, "format record failed\n");
+
+ buffer[0] = 0;
+ sz = sizeof buffer;
+ r = MsiFormatRecord( hpkg, hrec, buffer, &sz );
+
+ r = MsiRecordSetString(hrec, 0, "[foo][1]");
+ r = MsiRecordSetString(hrec, 1, "hoo");
+ sz = sizeof buffer;
+ r = MsiFormatRecord(hpkg, hrec, buffer, &sz);
+ ok( sz == 3, "size wrong\n");
+ ok( 0 == strcmp(buffer,"hoo"), "wrong output %s\n",buffer);
+ ok( r == ERROR_SUCCESS, "format failed\n");
+
+ r = MsiRecordSetString(hrec, 0, "x[~]x");
+ sz = sizeof buffer;
+ r = MsiFormatRecord(hpkg, hrec, buffer, &sz);
+ ok( sz == 3, "size wrong\n");
+ ok( 0 == strcmp(buffer,"x"), "wrong output %s\n",buffer);
+ ok( r == ERROR_SUCCESS, "format failed\n");
+
+ r = MsiRecordSetString(hrec, 0, "[foo.$%}][1]");
+ r = MsiRecordSetString(hrec, 1, "hoo");
+ sz = sizeof buffer;
+ r = MsiFormatRecord(hpkg, hrec, buffer, &sz);
+ ok( sz == 3, "size wrong\n");
+ ok( 0 == strcmp(buffer,"hoo"), "wrong output %s\n",buffer);
+ ok( r == ERROR_SUCCESS, "format failed\n");
+
+ r = MsiRecordSetString(hrec, 0, "[\\[]");
+ sz = sizeof buffer;
+ r = MsiFormatRecord(hpkg, hrec, buffer, &sz);
+ ok( sz == 1, "size wrong\n");
+ ok( 0 == strcmp(buffer,"["), "wrong output %s\n",buffer);
+ ok( r == ERROR_SUCCESS, "format failed\n");
+
+ SetEnvironmentVariable("FOO", "BAR");
+ r = MsiRecordSetString(hrec, 0, "[%FOO]");
+ sz = sizeof buffer;
+ r = MsiFormatRecord(hpkg, hrec, buffer, &sz);
+ ok( sz == 3, "size wrong\n");
+ ok( 0 == strcmp(buffer,"BAR"), "wrong output %s\n",buffer);
+ ok( r == ERROR_SUCCESS, "format failed\n");
+
+ r = MsiRecordSetString(hrec, 0, "[[1]]");
+ r = MsiRecordSetString(hrec, 1, "%FOO");
+ sz = sizeof buffer;
+ r = MsiFormatRecord(hpkg, hrec, buffer, &sz);
+ ok( sz == 3, "size wrong\n");
+ ok( 0 == strcmp(buffer,"BAR"), "wrong output %s\n",buffer);
+ ok( r == ERROR_SUCCESS, "format failed\n");
+
+ MsiCloseHandle( hrec );
+ MsiCloseHandle( hpkg );
+ DeleteFile(msifile);
+}
+
START_TEST(package)
{
test_createpackage();
@@ -854,4 +1020,6 @@ START_TEST(package)
test_settargetpath_bad();
test_props();
test_condition();
+ test_msipackage();
+ test_formatrecord2();
}
More information about the wine-cvs
mailing list