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