msi: Add tests for opening a package from a database.
This commit is contained in:
parent
3e1fad5350
commit
1ed12b76e1
@ -190,6 +190,27 @@ static UINT create_component_table( MSIHANDLE hdb )
|
|||||||
"PRIMARY KEY `Component`)" );
|
"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 )
|
static UINT create_feature_components_table( MSIHANDLE hdb )
|
||||||
{
|
{
|
||||||
return run_query( hdb, 0,
|
return run_query( hdb, 0,
|
||||||
@ -233,6 +254,22 @@ static UINT add_component_entry( MSIHANDLE hdb, const char *values )
|
|||||||
return r;
|
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 )
|
static UINT add_feature_components_entry( MSIHANDLE hdb, const char *values )
|
||||||
{
|
{
|
||||||
char insert[] = "INSERT INTO `FeatureComponents` "
|
char insert[] = "INSERT INTO `FeatureComponents` "
|
||||||
@ -2331,12 +2368,7 @@ static MSIHANDLE create_package_db(LPCSTR filename)
|
|||||||
|
|
||||||
res = set_summary_info(hdb);
|
res = set_summary_info(hdb);
|
||||||
|
|
||||||
res = run_query( hdb, 0,
|
res = create_directory_table(hdb);
|
||||||
"CREATE TABLE `Directory` ( "
|
|
||||||
"`Directory` CHAR(255) NOT NULL, "
|
|
||||||
"`Directory_Parent` CHAR(255), "
|
|
||||||
"`DefaultDir` CHAR(255) NOT NULL "
|
|
||||||
"PRIMARY KEY `Directory`)" );
|
|
||||||
ok( res == ERROR_SUCCESS , "Failed to create directory table\n" );
|
ok( res == ERROR_SUCCESS , "Failed to create directory table\n" );
|
||||||
|
|
||||||
return hdb;
|
return hdb;
|
||||||
@ -6153,6 +6185,134 @@ static void test_storages_table(void)
|
|||||||
DeleteFileA(msifile);
|
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)
|
START_TEST(db)
|
||||||
{
|
{
|
||||||
test_msidatabase();
|
test_msidatabase();
|
||||||
@ -6191,4 +6351,5 @@ START_TEST(db)
|
|||||||
test_viewmodify_refresh();
|
test_viewmodify_refresh();
|
||||||
test_where_viewmodify();
|
test_where_viewmodify();
|
||||||
test_storages_table();
|
test_storages_table();
|
||||||
|
test_dbtopackage();
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user