#include <msidefs.h>
#include <msi.h>
#include <msiquery.h>
+#include <srrestoreptapi.h>
#include "wine/test.h"
static const char msifile[] = "winetest.msi";
char CURR_DIR[MAX_PATH];
-static void get_user_sid(LPSTR *usersid)
+static UINT (WINAPI *pMsiApplyMultiplePatchesA)(LPCSTR, LPCSTR, LPCSTR);
+
+static BOOL (WINAPI *pConvertSidToStringSidA)(PSID, LPSTR*);
+
+static BOOL (WINAPI *pSRRemoveRestorePoint)(DWORD);
+static BOOL (WINAPI *pSRSetRestorePointA)(RESTOREPOINTINFOA*, STATEMGRSTATUS*);
+
+static void init_functionpointers(void)
+{
+ HMODULE hmsi = GetModuleHandleA("msi.dll");
+ HMODULE hadvapi32 = GetModuleHandleA("advapi32.dll");
+ HMODULE hsrclient;
+
+#define GET_PROC(mod, func) \
+ p ## func = (void*)GetProcAddress(mod, #func);
+
+ GET_PROC(hmsi, MsiApplyMultiplePatchesA);
+
+ GET_PROC(hadvapi32, ConvertSidToStringSidA);
+
+ hsrclient = LoadLibraryA("srclient.dll");
+ GET_PROC(hsrclient, SRRemoveRestorePoint);
+ GET_PROC(hsrclient, SRSetRestorePointA);
+#undef GET_PROC
+}
+
+
+static LPSTR get_user_sid(LPSTR *usersid)
{
HANDLE token;
BYTE buf[1024];
DWORD size;
PTOKEN_USER user;
- HMODULE hadvapi32 = GetModuleHandleA("advapi32.dll");
- static BOOL (WINAPI *pConvertSidToStringSidA)(PSID, LPSTR*);
- *usersid = NULL;
- pConvertSidToStringSidA = (void *)GetProcAddress(hadvapi32, "ConvertSidToStringSidA");
if (!pConvertSidToStringSidA)
- return;
+ {
+ win_skip("ConvertSidToStringSidA is not available\n");
+ return NULL;
+ }
+ *usersid = NULL;
OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &token);
size = sizeof(buf);
GetTokenInformation(token, TokenUser, buf, size, &size);
user = (PTOKEN_USER)buf;
pConvertSidToStringSidA(user->User.Sid, usersid);
+ ok(*usersid != NULL, "pConvertSidToStringSidA failed lre=%d\n", GetLastError());
CloseHandle(token);
+ return *usersid;
}
/* RegDeleteTreeW from dlls/advapi32/registry.c */
BOOL ret = FALSE;
GetSystemDirectory(path, MAX_PATH);
- lstrcatA(path, "\\kernel32.dll");
+ /* Some dlls can't be updated on Vista/W2K8 */
+ lstrcatA(path, "\\version.dll");
CopyFileA(path, name, FALSE);
return ret;
}
+static BOOL notify_system_change(DWORD event_type, STATEMGRSTATUS *status)
+{
+ RESTOREPOINTINFOA spec;
+
+ spec.dwEventType = event_type;
+ spec.dwRestorePtType = APPLICATION_INSTALL;
+ spec.llSequenceNumber = status->llSequenceNumber;
+ lstrcpyA(spec.szDescription, "msitest restore point");
+
+ return pSRSetRestorePointA(&spec, status);
+}
+
+static void remove_restore_point(DWORD seq_number)
+{
+ DWORD res;
+
+ res = pSRRemoveRestorePoint(seq_number);
+ if (res != ERROR_SUCCESS)
+ trace("Failed to remove the restore point : %08x\n", res);
+}
+
static void test_createpackage(void)
{
MSIHANDLE hPackage = 0;
static void test_gettargetpath_bad(void)
{
+ static const WCHAR boo[] = {'b','o','o',0};
+ static const WCHAR empty[] = {0};
char buffer[0x80];
+ WCHAR bufferW[0x80];
MSIHANDLE hpkg;
DWORD sz;
UINT r;
r = MsiGetTargetPath( hpkg, "boo", buffer, NULL );
ok( r == ERROR_DIRECTORY, "wrong return val\n");
+ sz = 0;
+ r = MsiGetTargetPath( hpkg, "", buffer, &sz );
+ ok( r == ERROR_DIRECTORY, "wrong return val\n");
+
+ r = MsiGetTargetPathW( 0, NULL, NULL, NULL );
+ ok( r == ERROR_INVALID_PARAMETER, "wrong return val\n");
+
+ r = MsiGetTargetPathW( 0, NULL, NULL, &sz );
+ ok( r == ERROR_INVALID_PARAMETER, "wrong return val\n");
+
+ r = MsiGetTargetPathW( 0, boo, NULL, NULL );
+ ok( r == ERROR_INVALID_HANDLE, "wrong return val\n");
+
+ r = MsiGetTargetPathW( 0, boo, NULL, NULL );
+ ok( r == ERROR_INVALID_HANDLE, "wrong return val\n");
+
+ r = MsiGetTargetPathW( hpkg, boo, NULL, NULL );
+ ok( r == ERROR_DIRECTORY, "wrong return val\n");
+
+ r = MsiGetTargetPathW( hpkg, boo, bufferW, NULL );
+ ok( r == ERROR_DIRECTORY, "wrong return val\n");
+
+ sz = 0;
+ r = MsiGetTargetPathW( hpkg, empty, bufferW, &sz );
+ ok( r == ERROR_DIRECTORY, "wrong return val\n");
+
MsiCloseHandle( hpkg );
DeleteFile(msifile);
}
sz = sizeof tempdir - 1;
r = MsiGetTargetPath( hpkg, "TARGETDIR", tempdir, &sz );
sprintf( file, "%srootfile.txt", tempdir );
+ buffer[0] = 0;
query_file_path( hpkg, "[#RootFile]", buffer );
ok( r == ERROR_SUCCESS, "failed to get target path: %d\n", r);
ok( !lstrcmp(buffer, file), "Expected %s, got %s\n", file, buffer );
ok( r == ERROR_SUCCESS, "MsiSetTargetPath returned %d\n", r );
query_file_path( hpkg, "[#TestFile]", buffer );
- ok( !lstrcmp(buffer, "C:\\one\\two\\TestDir\\testfile.txt"),
+ ok( !lstrcmpi(buffer, "C:\\one\\two\\TestDir\\testfile.txt"),
"Expected C:\\one\\two\\TestDir\\testfile.txt, got %s\n", buffer );
sz = sizeof buffer - 1;
r = MsiGetTargetPath( hpkg, "TestParent", buffer, &sz );
ok( r == ERROR_SUCCESS, "failed to get target path: %d\n", r);
- ok( !lstrcmp(buffer, "C:\\one\\two\\"), "Expected C:\\one\\two\\, got %s\n", buffer);
+ ok( !lstrcmpi(buffer, "C:\\one\\two\\"), "Expected C:\\one\\two\\, got %s\n", buffer);
MsiCloseHandle( hpkg );
}
r = MsiEvaluateCondition(hpkg, "not LicView");
ok( r == MSICONDITION_TRUE, "wrong return val\n");
+ r = MsiEvaluateCondition(hpkg, "\"Testing\" ~<< \"Testing\"");
+ ok (r == MSICONDITION_TRUE, "wrong return val\n");
+
+ r = MsiEvaluateCondition(hpkg, "LicView ~<< \"Testing\"");
+ ok (r == MSICONDITION_FALSE, "wrong return val\n");
+
+ r = MsiEvaluateCondition(hpkg, "Not LicView ~<< \"Testing\"");
+ ok (r == MSICONDITION_TRUE, "wrong return val\n");
+
r = MsiEvaluateCondition(hpkg, "not \"A\"");
ok( r == MSICONDITION_FALSE, "wrong return val\n");
static const CHAR msifile2[] = "winetest2.msi";
static const CHAR msifile3[] = "winetest3.msi";
+ static const CHAR msifile4[] = "winetest4.msi";
hdb = create_package_db();
ok ( hdb, "failed to create package database\n" );
r = add_component_entry( hdb, "'sigma', '{5CE9DDA8-B67B-4736-9D93-99D61C5B93E7}', 'TARGETDIR', 8, '', 'sigma_file'" );
ok( r == ERROR_SUCCESS, "cannot add component: %d\n", r );
+ /* msidbFeatureAttributesFavorLocal */
+ r = add_feature_entry( hdb, "'eight', '', '', '', 2, 1, '', 0" );
+ ok( r == ERROR_SUCCESS, "cannot add feature: %d\n", r );
+
+ r = add_component_entry( hdb, "'tau', '{07DEB510-677C-4A6F-A0A6-7CD8EFEA77ED}', 'TARGETDIR', 1, '', 'tau_file'" );
+ ok( r == ERROR_SUCCESS, "cannot add component: %d\n", r );
+
+ /* msidbFeatureAttributesFavorSource */
+ r = add_feature_entry( hdb, "'nine', '', '', '', 2, 1, '', 1" );
+ ok( r == ERROR_SUCCESS, "cannot add feature: %d\n", r );
+
+ r = add_component_entry( hdb, "'phi', '{9F0594C5-35AD-43EA-94DD-8DF73FAA664D}', 'TARGETDIR', 1, '', 'phi_file'" );
+ ok( r == ERROR_SUCCESS, "cannot add component: %d\n", r );
+
+ /* msidbFeatureAttributesFavorAdvertise */
+ r = add_feature_entry( hdb, "'ten', '', '', '', 2, 1, '', 4" );
+ ok( r == ERROR_SUCCESS, "cannot add feature: %d\n", r );
+
+ r = add_component_entry( hdb, "'chi', '{E6B539AB-5DA9-4236-A2D2-E341A50B4C38}', 'TARGETDIR', 1, '', 'chi_file'" );
+ ok( r == ERROR_SUCCESS, "cannot add component: %d\n", r );
+
r = create_feature_components_table( hdb );
ok( r == ERROR_SUCCESS, "cannot create FeatureComponents table: %d\n", r );
r = add_feature_components_entry( hdb, "'seven', 'sigma'" );
ok( r == ERROR_SUCCESS, "cannot add feature components: %d\n", r );
+ r = add_feature_components_entry( hdb, "'eight', 'tau'" );
+ ok( r == ERROR_SUCCESS, "cannot add feature components: %d\n", r );
+
+ r = add_feature_components_entry( hdb, "'nine', 'phi'" );
+ ok( r == ERROR_SUCCESS, "cannot add feature components: %d\n", r );
+
+ r = add_feature_components_entry( hdb, "'ten', 'chi'" );
+ ok( r == ERROR_SUCCESS, "cannot add feature components: %d\n", r );
+
r = create_file_table( hdb );
ok( r == ERROR_SUCCESS, "cannot create File table: %d\n", r );
r = add_file_entry( hdb, "'sigma_file', 'sigma', 'sigma.txt', 100, '', '1033', 8192, 1" );
ok( r == ERROR_SUCCESS, "cannot add file: %d\n", r);
+ r = add_file_entry( hdb, "'tau_file', 'tau', 'tau.txt', 100, '', '1033', 8192, 1" );
+ ok( r == ERROR_SUCCESS, "cannot add file: %d\n", r);
+
+ r = add_file_entry( hdb, "'phi_file', 'phi', 'phi.txt', 100, '', '1033', 8192, 1" );
+ ok( r == ERROR_SUCCESS, "cannot add file: %d\n", r);
+
+ r = add_file_entry( hdb, "'chi_file', 'chi', 'chi.txt', 100, '', '1033', 8192, 1" );
+ ok( r == ERROR_SUCCESS, "cannot add file: %d\n", r);
+
MsiDatabaseCommit(hdb);
/* these properties must not be in the saved msi file */
r = add_property_entry( hdb, "'REMOVE', 'six,seven'");
ok( r == ERROR_SUCCESS, "cannot add property: %d\n", r );
+ r = add_property_entry( hdb, "'REINSTALL', 'eight,nine,ten'");
+ ok( r == ERROR_SUCCESS, "cannot add property: %d\n", r );
+
+ r = add_property_entry( hdb, "'REINSTALLMODE', 'omus'");
+ ok( r == ERROR_SUCCESS, "cannot add property: %d\n", r );
+
hpkg = package_from_db( hdb );
ok( hpkg, "failed to create package\n");
CopyFileA(msifile, msifile2, FALSE);
CopyFileA(msifile, msifile3, FALSE);
+ CopyFileA(msifile, msifile4, FALSE);
state = 0xdeadbee;
action = 0xdeadbee;
ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "eight", &state, &action);
+ ok( r == ERROR_UNKNOWN_FEATURE, "Expected ERROR_UNKNOWN_FEATURE, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "nine", &state, &action);
+ ok( r == ERROR_UNKNOWN_FEATURE, "Expected ERROR_UNKNOWN_FEATURE, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "ten", &state, &action);
+ ok( r == ERROR_UNKNOWN_FEATURE, "Expected ERROR_UNKNOWN_FEATURE, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
state = 0xdeadbee;
action = 0xdeadbee;
r = MsiGetComponentState(hpkg, "alpha", &state, &action);
ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "tau", &state, &action);
+ ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "phi", &state, &action);
+ ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "chi", &state, &action);
+ ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
r = MsiDoAction( hpkg, "CostInitialize");
ok( r == ERROR_SUCCESS, "cost init failed\n");
ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "eight", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "nine", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "ten", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
state = 0xdeadbee;
action = 0xdeadbee;
r = MsiGetComponentState(hpkg, "alpha", &state, &action);
ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "tau", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "phi", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "chi", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
r = MsiDoAction( hpkg, "FileCost");
ok( r == ERROR_SUCCESS, "file cost failed\n");
ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "eight", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "nine", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "ten", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
state = 0xdeadbee;
action = 0xdeadbee;
r = MsiGetComponentState(hpkg, "alpha", &state, &action);
ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "tau", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "phi", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "chi", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
r = MsiDoAction( hpkg, "CostFinalize");
ok( r == ERROR_SUCCESS, "cost finalize failed: %d\n", r);
ok( state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state);
ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "eight", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "nine", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "ten", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
state = 0xdeadbee;
action = 0xdeadbee;
r = MsiGetComponentState(hpkg, "alpha", &state, &action);
ok( state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state);
ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "tau", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "phi", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "chi", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
MsiCloseHandle( hpkg );
/* publish the features and components */
- r = MsiInstallProduct(msifile, "ADDLOCAL=one,four ADDSOURCE=two,three REMOVE=six,seven");
+ r = MsiInstallProduct(msifile, "ADDLOCAL=one,four ADDSOURCE=two,three REMOVE=six,seven REINSTALL=eight,nine,ten");
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
r = MsiOpenDatabase(msifile, MSIDBOPEN_DIRECT, &hdb);
r = add_property_entry( hdb, "'REMOVE', 'six,seven'");
ok( r == ERROR_SUCCESS, "cannot add property: %d\n", r );
+ r = add_property_entry( hdb, "'REINSTALL', 'eight,nine,ten'");
+ ok( r == ERROR_SUCCESS, "cannot add property: %d\n", r );
+
hpkg = package_from_db( hdb );
ok( hpkg, "failed to create package\n");
ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "eight", &state, &action);
+ ok( r == ERROR_UNKNOWN_FEATURE, "Expected ERROR_UNKNOWN_FEATURE, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "nine", &state, &action);
+ ok( r == ERROR_UNKNOWN_FEATURE, "Expected ERROR_UNKNOWN_FEATURE, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "ten", &state, &action);
+ ok( r == ERROR_UNKNOWN_FEATURE, "Expected ERROR_UNKNOWN_FEATURE, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
state = 0xdeadbee;
action = 0xdeadbee;
r = MsiGetComponentState(hpkg, "alpha", &state, &action);
ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
- r = MsiDoAction( hpkg, "CostInitialize");
- ok( r == ERROR_SUCCESS, "cost init failed\n");
-
state = 0xdeadbee;
action = 0xdeadbee;
- r = MsiGetFeatureState(hpkg, "one", &state, &action);
- ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
- ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
- ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+ r = MsiGetComponentState(hpkg, "tau", &state, &action);
+ ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
state = 0xdeadbee;
action = 0xdeadbee;
- r = MsiGetFeatureState(hpkg, "two", &state, &action);
- ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ r = MsiGetComponentState(hpkg, "phi", &state, &action);
+ ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "chi", &state, &action);
+ ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ r = MsiDoAction( hpkg, "CostInitialize");
+ ok( r == ERROR_SUCCESS, "cost init failed\n");
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "one", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "two", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "eight", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "nine", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "ten", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
state = 0xdeadbee;
action = 0xdeadbee;
r = MsiGetComponentState(hpkg, "alpha", &state, &action);
ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "tau", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "phi", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "chi", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
r = MsiDoAction( hpkg, "FileCost");
ok( r == ERROR_SUCCESS, "file cost failed\n");
ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "eight", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "nine", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
state = 0xdeadbee;
action = 0xdeadbee;
r = MsiGetComponentState(hpkg, "alpha", &state, &action);
ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "tau", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "phi", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "chi", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
r = MsiDoAction( hpkg, "CostFinalize");
ok( r == ERROR_SUCCESS, "cost finalize failed: %d\n", r);
ok( state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state);
ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "eight", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "nine", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "ten", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
state = 0xdeadbee;
action = 0xdeadbee;
r = MsiGetComponentState(hpkg, "alpha", &state, &action);
ok( state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state);
ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "tau", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "phi", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "chi", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
MsiCloseHandle(hpkg);
/* uninstall the product */
ok(r == ERROR_SUCCESS, "failed to open database: %d\n", r);
/* these properties must not be in the saved msi file */
- r = add_property_entry( hdb, "'ADDLOCAL', 'one,two,three,four,five,six,seven'");
+ r = add_property_entry( hdb, "'ADDLOCAL', 'one,two,three,four,five,six,seven,eight,nine,ten'");
ok( r == ERROR_SUCCESS, "cannot add property: %d\n", r );
hpkg = package_from_db( hdb );
ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "eight", &state, &action);
+ ok( r == ERROR_UNKNOWN_FEATURE, "Expected ERROR_UNKNOWN_FEATURE, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "nine", &state, &action);
+ ok( r == ERROR_UNKNOWN_FEATURE, "Expected ERROR_UNKNOWN_FEATURE, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "ten", &state, &action);
+ ok( r == ERROR_UNKNOWN_FEATURE, "Expected ERROR_UNKNOWN_FEATURE, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
state = 0xdeadbee;
action = 0xdeadbee;
r = MsiGetComponentState(hpkg, "alpha", &state, &action);
ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "tau", &state, &action);
+ ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "phi", &state, &action);
+ ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "chi", &state, &action);
+ ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
r = MsiDoAction( hpkg, "CostInitialize");
ok( r == ERROR_SUCCESS, "cost init failed\n");
ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "eight", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "nine", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "ten", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
state = 0xdeadbee;
action = 0xdeadbee;
r = MsiGetComponentState(hpkg, "alpha", &state, &action);
ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "tau", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "phi", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "chi", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
r = MsiDoAction( hpkg, "FileCost");
ok( r == ERROR_SUCCESS, "file cost failed\n");
ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "eight", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "nine", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "ten", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
state = 0xdeadbee;
action = 0xdeadbee;
r = MsiGetComponentState(hpkg, "alpha", &state, &action);
ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "tau", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "phi", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "chi", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
r = MsiDoAction( hpkg, "CostFinalize");
ok( r == ERROR_SUCCESS, "cost finalize failed: %d\n", r);
ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
ok( action == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", action);
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "eight", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+ todo_wine ok( action == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "nine", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+ todo_wine ok( action == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "ten", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+ todo_wine ok( action == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", action);
+
state = 0xdeadbee;
action = 0xdeadbee;
r = MsiGetComponentState(hpkg, "alpha", &state, &action);
ok( state == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", state);
ok( state == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", state);
- MsiCloseHandle(hpkg);
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "tau", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
- /* uninstall the product */
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "phi", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "chi", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+
+ MsiCloseHandle(hpkg);
+
+ /* uninstall the product */
r = MsiInstallProduct(msifile2, "REMOVE=ALL");
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
ok(r == ERROR_SUCCESS, "failed to open database: %d\n", r);
/* this property must not be in the saved msi file */
- r = add_property_entry( hdb, "'ADDSOURCE', 'one,two,three,four,five,six,seven'");
+ r = add_property_entry( hdb, "'ADDSOURCE', 'one,two,three,four,five,six,seven,eight,nine,ten'");
ok( r == ERROR_SUCCESS, "cannot add property: %d\n", r );
hpkg = package_from_db( hdb );
ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "eight", &state, &action);
+ ok( r == ERROR_UNKNOWN_FEATURE, "Expected ERROR_UNKNOWN_FEATURE, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "nine", &state, &action);
+ ok( r == ERROR_UNKNOWN_FEATURE, "Expected ERROR_UNKNOWN_FEATURE, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "ten", &state, &action);
+ ok( r == ERROR_UNKNOWN_FEATURE, "Expected ERROR_UNKNOWN_FEATURE, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
state = 0xdeadbee;
action = 0xdeadbee;
r = MsiGetComponentState(hpkg, "alpha", &state, &action);
ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "tau", &state, &action);
+ ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "phi", &state, &action);
+ ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "chi", &state, &action);
+ ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
r = MsiDoAction( hpkg, "CostInitialize");
ok( r == ERROR_SUCCESS, "cost init failed\n");
ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "eight", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "nine", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "ten", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
state = 0xdeadbee;
action = 0xdeadbee;
r = MsiGetComponentState(hpkg, "alpha", &state, &action);
ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "tau", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "phi", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "chi", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
r = MsiDoAction( hpkg, "FileCost");
ok( r == ERROR_SUCCESS, "file cost failed\n");
ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "eight", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "nine", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "ten", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
state = 0xdeadbee;
action = 0xdeadbee;
r = MsiGetComponentState(hpkg, "alpha", &state, &action);
ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "tau", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "phi", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "chi", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
r = MsiDoAction( hpkg, "CostFinalize");
ok( r == ERROR_SUCCESS, "cost finalize failed: %d\n", r);
ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "eight", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "nine", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "ten", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+
state = 0xdeadbee;
action = 0xdeadbee;
r = MsiGetComponentState(hpkg, "alpha", &state, &action);
ok( state == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", state);
ok( state == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", state);
- MsiCloseHandle(hpkg);
-
- /* uninstall the product */
- r = MsiInstallProduct(msifile3, "REMOVE=ALL");
- ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "tau", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
- DeleteFileA(msifile);
- DeleteFileA(msifile2);
- DeleteFileA(msifile3);
-}
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "phi", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
-static void test_getproperty(void)
-{
- MSIHANDLE hPackage = 0;
- char prop[100];
- static CHAR empty[] = "";
- DWORD size;
- UINT r;
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "chi", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
- hPackage = package_from_db(create_package_db());
- ok( hPackage != 0, " Failed to create package\n");
+ MsiCloseHandle(hpkg);
- /* set the property */
- r = MsiSetProperty(hPackage, "Name", "Value");
- ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ /* reinstall the product */
+ r = MsiInstallProduct(msifile3, "REINSTALL=ALL");
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
- /* retrieve the size, NULL pointer */
- size = 0;
- r = MsiGetProperty(hPackage, "Name", NULL, &size);
- ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
- ok( size == 5, "Expected 5, got %d\n", size);
+ r = MsiOpenDatabase(msifile4, MSIDBOPEN_DIRECT, &hdb);
+ ok(r == ERROR_SUCCESS, "failed to open database: %d\n", r);
- /* retrieve the size, empty string */
- size = 0;
- r = MsiGetProperty(hPackage, "Name", empty, &size);
- ok( r == ERROR_MORE_DATA, "Expected ERROR_MORE_DATA, got %d\n", r);
- ok( size == 5, "Expected 5, got %d\n", size);
+ /* this property must not be in the saved msi file */
+ r = add_property_entry( hdb, "'ADDSOURCE', 'one,two,three,four,five,six,seven,eight,nine,ten'");
+ ok( r == ERROR_SUCCESS, "cannot add property: %d\n", r );
- /* don't change size */
- r = MsiGetProperty(hPackage, "Name", prop, &size);
- ok( r == ERROR_MORE_DATA, "Expected ERROR_MORE_DATA, got %d\n", r);
- ok( size == 5, "Expected 5, got %d\n", size);
- ok( !lstrcmp(prop, "Valu"), "Expected Valu, got %s\n", prop);
+ hpkg = package_from_db( hdb );
+ ok( hpkg, "failed to create package\n");
- /* increase the size by 1 */
- size++;
- r = MsiGetProperty(hPackage, "Name", prop, &size);
- ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
- ok( size == 5, "Expected 5, got %d\n", size);
- ok( !lstrcmp(prop, "Value"), "Expected Value, got %s\n", prop);
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "one", &state, &action);
+ ok( r == ERROR_UNKNOWN_FEATURE, "Expected ERROR_UNKNOWN_FEATURE, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
- r = MsiCloseHandle( hPackage);
- ok( r == ERROR_SUCCESS , "Failed to close package\n" );
- DeleteFile(msifile);
-}
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "two", &state, &action);
+ ok( r == ERROR_UNKNOWN_FEATURE, "Expected ERROR_UNKNOWN_FEATURE, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
-static void test_removefiles(void)
-{
- MSIHANDLE hpkg;
- UINT r;
- MSIHANDLE hdb;
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "three", &state, &action);
+ ok( r == ERROR_UNKNOWN_FEATURE, "Expected ERROR_UNKNOWN_FEATURE, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
- hdb = create_package_db();
- ok ( hdb, "failed to create package database\n" );
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "four", &state, &action);
+ ok( r == ERROR_UNKNOWN_FEATURE, "Expected ERROR_UNKNOWN_FEATURE, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
- r = add_directory_entry( hdb, "'TARGETDIR', '', 'SourceDir'");
- ok( r == ERROR_SUCCESS, "cannot add directory: %d\n", r );
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "five", &state, &action);
+ ok( r == ERROR_UNKNOWN_FEATURE, "Expected ERROR_UNKNOWN_FEATURE, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
- r = create_feature_table( hdb );
- ok( r == ERROR_SUCCESS, "cannot create Feature table: %d\n", r );
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "six", &state, &action);
+ ok( r == ERROR_UNKNOWN_FEATURE, "Expected ERROR_UNKNOWN_FEATURE, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
- r = create_component_table( hdb );
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "seven", &state, &action);
+ ok( r == ERROR_UNKNOWN_FEATURE, "Expected ERROR_UNKNOWN_FEATURE, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "eight", &state, &action);
+ ok( r == ERROR_UNKNOWN_FEATURE, "Expected ERROR_UNKNOWN_FEATURE, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "nine", &state, &action);
+ ok( r == ERROR_UNKNOWN_FEATURE, "Expected ERROR_UNKNOWN_FEATURE, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "ten", &state, &action);
+ ok( r == ERROR_UNKNOWN_FEATURE, "Expected ERROR_UNKNOWN_FEATURE, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "alpha", &state, &action);
+ ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "beta", &state, &action);
+ ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "gamma", &state, &action);
+ ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "theta", &state, &action);
+ ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "delta", &state, &action);
+ ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "epsilon", &state, &action);
+ ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "zeta", &state, &action);
+ ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "iota", &state, &action);
+ ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "eta", &state, &action);
+ ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "kappa", &state, &action);
+ ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "lambda", &state, &action);
+ ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "mu", &state, &action);
+ ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "nu", &state, &action);
+ ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "xi", &state, &action);
+ ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "omicron", &state, &action);
+ ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "pi", &state, &action);
+ ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "rho", &state, &action);
+ ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "sigma", &state, &action);
+ ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "tau", &state, &action);
+ ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "phi", &state, &action);
+ ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "chi", &state, &action);
+ ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ r = MsiDoAction( hpkg, "CostInitialize");
+ ok( r == ERROR_SUCCESS, "cost init failed\n");
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "one", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "two", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "three", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "four", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "five", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "six", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "seven", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "eight", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "nine", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "ten", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "alpha", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "beta", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "gamma", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "theta", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "delta", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "epsilon", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "zeta", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "iota", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "eta", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "kappa", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "lambda", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "mu", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "nu", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "xi", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "omicron", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "pi", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "rho", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "sigma", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "tau", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "phi", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "chi", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ r = MsiDoAction( hpkg, "FileCost");
+ ok( r == ERROR_SUCCESS, "file cost failed\n");
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "one", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "two", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "three", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "four", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "five", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "six", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "seven", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "eight", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "nine", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "ten", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "alpha", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "beta", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "gamma", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "theta", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "delta", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "epsilon", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "zeta", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "iota", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "eta", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "kappa", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "lambda", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "mu", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "nu", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "xi", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "omicron", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "pi", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "rho", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "sigma", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "tau", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "phi", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "chi", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ r = MsiDoAction( hpkg, "CostFinalize");
+ ok( r == ERROR_SUCCESS, "cost finalize failed: %d\n", r);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "one", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+ ok( action == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "two", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+ ok( action == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "three", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", state);
+ ok( action == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "four", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", state);
+ ok( action == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "five", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "six", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+ ok( action == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "seven", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+ ok( action == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "eight", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+ ok( action == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "nine", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+ ok( action == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "ten", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+ ok( action == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "alpha", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", state);
+ ok( action == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "beta", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "gamma", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "theta", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", state);
+ ok( action == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "delta", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", state);
+ ok( action == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "epsilon", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "zeta", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "iota", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", state);
+ ok( action == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "eta", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", state);
+ ok( action == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "kappa", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "lambda", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", state);
+ ok( state == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", state);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "mu", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "nu", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "xi", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", state);
+ ok( state == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", state);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "omicron", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", state);
+ ok( state == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", state);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "pi", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "rho", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "sigma", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", state);
+ ok( state == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", state);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "tau", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "phi", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "chi", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+
+ MsiCloseHandle(hpkg);
+
+ /* uninstall the product */
+ r = MsiInstallProduct(msifile4, "REMOVE=ALL");
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+
+ DeleteFileA(msifile);
+ DeleteFileA(msifile2);
+ DeleteFileA(msifile3);
+ DeleteFileA(msifile4);
+}
+
+static void test_getproperty(void)
+{
+ MSIHANDLE hPackage = 0;
+ char prop[100];
+ static CHAR empty[] = "";
+ DWORD size;
+ UINT r;
+
+ hPackage = package_from_db(create_package_db());
+ ok( hPackage != 0, " Failed to create package\n");
+
+ /* set the property */
+ r = MsiSetProperty(hPackage, "Name", "Value");
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+
+ /* retrieve the size, NULL pointer */
+ size = 0;
+ r = MsiGetProperty(hPackage, "Name", NULL, &size);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok( size == 5, "Expected 5, got %d\n", size);
+
+ /* retrieve the size, empty string */
+ size = 0;
+ r = MsiGetProperty(hPackage, "Name", empty, &size);
+ ok( r == ERROR_MORE_DATA, "Expected ERROR_MORE_DATA, got %d\n", r);
+ ok( size == 5, "Expected 5, got %d\n", size);
+
+ /* don't change size */
+ r = MsiGetProperty(hPackage, "Name", prop, &size);
+ ok( r == ERROR_MORE_DATA, "Expected ERROR_MORE_DATA, got %d\n", r);
+ ok( size == 5, "Expected 5, got %d\n", size);
+ ok( !lstrcmp(prop, "Valu"), "Expected Valu, got %s\n", prop);
+
+ /* increase the size by 1 */
+ size++;
+ r = MsiGetProperty(hPackage, "Name", prop, &size);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok( size == 5, "Expected 5, got %d\n", size);
+ ok( !lstrcmp(prop, "Value"), "Expected Value, got %s\n", prop);
+
+ r = MsiCloseHandle( hPackage);
+ ok( r == ERROR_SUCCESS , "Failed to close package\n" );
+ DeleteFile(msifile);
+}
+
+static void test_removefiles(void)
+{
+ MSIHANDLE hpkg;
+ UINT r;
+ MSIHANDLE hdb;
+
+ hdb = create_package_db();
+ ok ( hdb, "failed to create package database\n" );
+
+ r = add_directory_entry( hdb, "'TARGETDIR', '', 'SourceDir'");
+ ok( r == ERROR_SUCCESS, "cannot add directory: %d\n", r );
+
+ r = create_feature_table( hdb );
+ ok( r == ERROR_SUCCESS, "cannot create Feature table: %d\n", r );
+
+ r = create_component_table( hdb );
ok( r == ERROR_SUCCESS, "cannot create Component table: %d\n", r );
r = add_feature_entry( hdb, "'one', '', '', '', 2, 1, '', 0" );
DWORD size;
UINT r;
- get_user_sid(&usersid);
- if (!usersid)
- {
- skip("ConvertSidToStringSidA is not available\n");
+ if (!get_user_sid(&usersid))
return;
- }
create_test_file("FileName1");
create_test_file("FileName4");
DeleteFileA("FileName10.dll");
MsiCloseHandle(hpkg);
DeleteFileA(msifile);
+ LocalFree(usersid);
}
static void test_appsearch_reglocator(void)
BOOL space, version;
HKEY hklm, classes;
HKEY hkcu, users;
+ LPSTR pathdata;
+ LPSTR pathvar;
LPCSTR str;
LPSTR ptr;
LONG res;
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
ok(!lstrcmpA(prop, "#-42"), "Expected \"#-42\", got \"%s\"\n", prop);
- ExpandEnvironmentStringsA("%PATH%", path, MAX_PATH);
+ size = ExpandEnvironmentStringsA("%PATH%", NULL, 0);
+ if (size == 0 && GetLastError() == ERROR_INVALID_PARAMETER)
+ {
+ /* Workaround for Win95 */
+ CHAR tempbuf[1];
+ size = ExpandEnvironmentStringsA("%PATH%", tempbuf, 0);
+ }
+ pathvar = HeapAlloc(GetProcessHeap(), 0, size);
+ ExpandEnvironmentStringsA("%PATH%", pathvar, size);
- size = MAX_PATH;
- r = MsiGetPropertyA(hpkg, "SIGPROP4", prop, &size);
+ size = 0;
+ r = MsiGetPropertyA(hpkg, "SIGPROP4", NULL, &size);
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
- ok(!lstrcmpA(prop, path), "Expected \"%s\", got \"%s\"\n", path, prop);
+
+ pathdata = HeapAlloc(GetProcessHeap(), 0, ++size);
+ r = MsiGetPropertyA(hpkg, "SIGPROP4", pathdata, &size);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA(pathdata, pathvar),
+ "Expected \"%s\", got \"%s\"\n", pathvar, pathdata);
+
+ HeapFree(GetProcessHeap(), 0, pathvar);
+ HeapFree(GetProcessHeap(), 0, pathdata);
size = MAX_PATH;
r = MsiGetPropertyA(hpkg, "SIGPROP5", prop, &size);
DeleteFileA(msifile);
}
+/*
+ * MSI AppSearch action on DrLocator table always returns absolute paths.
+ * If a relative path was set, it returns the first absolute path that
+ * matches or an empty string if it didn't find anything.
+ * This helper function replicates this behaviour.
+ */
+static void search_absolute_directory(LPSTR absolute, LPCSTR relative)
+{
+ int i, size;
+ DWORD attr, drives;
+
+ size = lstrlenA(relative);
+ drives = GetLogicalDrives();
+ lstrcpyA(absolute, "A:\\");
+ for (i = 0; i < 26; absolute[0] = '\0', i++)
+ {
+ if (!(drives & (1 << i)))
+ continue;
+
+ absolute[0] = 'A' + i;
+ if (GetDriveType(absolute) != DRIVE_FIXED)
+ continue;
+
+ lstrcpynA(absolute + 3, relative, size + 1);
+ attr = GetFileAttributesA(absolute);
+ if (attr != INVALID_FILE_ATTRIBUTES &&
+ (attr & FILE_ATTRIBUTE_DIRECTORY))
+ {
+ if (absolute[3 + size - 1] != '\\')
+ lstrcatA(absolute, "\\");
+ break;
+ }
+ absolute[3] = '\0';
+ }
+}
+
static void test_appsearch_drlocator(void)
{
MSIHANDLE hpkg, hdb;
r = add_appsearch_entry(hdb, "'SIGPROP10', 'NewSignature10'");
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ r = add_appsearch_entry(hdb, "'SIGPROP11', 'NewSignature11'");
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+
r = create_drlocator_table(hdb);
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
r = add_drlocator_entry(hdb, path);
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ /* no parent, relative empty path, depth 0, no signature */
+ sprintf(path, "'NewSignature11', '', '', 0");
+ r = add_drlocator_entry(hdb, path);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+
r = create_signature_table(hdb);
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
ok(!lstrcmpA(prop, path), "Expected \"%s\", got \"%s\"\n", path, prop);
size = MAX_PATH;
- sprintf(path, "%s\\", CURR_DIR);
+ search_absolute_directory(path, CURR_DIR + 3);
r = MsiGetPropertyA(hpkg, "SIGPROP3", prop, &size);
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
- ok(!lstrcmpA(prop, path), "Expected \"%s\", got \"%s\"\n", path, prop);
+ ok(!lstrcmpiA(prop, path), "Expected \"%s\", got \"%s\"\n", path, prop);
size = MAX_PATH;
r = MsiGetPropertyA(hpkg, "SIGPROP4", prop, &size);
ok(!lstrcmpA(prop, ""), "Expected \"\", got \"%s\"\n", prop);
}
+ size = MAX_PATH;
+ search_absolute_directory(path, "");
+ r = MsiGetPropertyA(hpkg, "SIGPROP11", prop, &size);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpiA(prop, path), "Expected \"%s\", got \"%s\"\n", path, prop);
+
DeleteFileA("FileName1");
DeleteFileA("FileName3.dll");
DeleteFileA("FileName4.dll");
r = MsiGetSummaryInformationA(db, NULL, 1, &summary);
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
- r = MsiSummaryInfoSetPropertyA(summary, prop, VT_I4, val, NULL, NULL);
+ r = MsiSummaryInfoSetPropertyA(summary, prop, VT_I4, val, NULL, NULL);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+
+ r = MsiSummaryInfoPersist(summary);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
+
+ MsiCloseHandle(summary);
+}
+
+static void test_MsiGetSourcePath(void)
+{
+ MSIHANDLE hdb, hpkg;
+ CHAR path[MAX_PATH];
+ CHAR cwd[MAX_PATH];
+ CHAR subsrc[MAX_PATH];
+ CHAR sub2[MAX_PATH];
+ DWORD size;
+ UINT r;
+
+ lstrcpyA(cwd, CURR_DIR);
+ lstrcatA(cwd, "\\");
+
+ lstrcpyA(subsrc, cwd);
+ lstrcatA(subsrc, "subsource");
+ lstrcatA(subsrc, "\\");
+
+ lstrcpyA(sub2, subsrc);
+ lstrcatA(sub2, "sub2");
+ lstrcatA(sub2, "\\");
+
+ /* uncompressed source */
+
+ hdb = create_package_db();
+ ok( hdb, "failed to create database\n");
+
+ set_suminfo_prop(hdb, PID_WORDCOUNT, 0);
+
+ r = add_directory_entry(hdb, "'TARGETDIR', '', 'SourceDir'");
+ ok(r == S_OK, "failed\n");
+
+ r = add_directory_entry(hdb, "'SubDir', 'TARGETDIR', 'subtarget:subsource'");
+ ok(r == S_OK, "failed\n");
+
+ r = add_directory_entry(hdb, "'SubDir2', 'SubDir', 'sub2'");
+ ok(r == S_OK, "failed\n");
+
+ r = MsiDatabaseCommit(hdb);
+ ok(r == ERROR_SUCCESS , "Failed to commit database\n");
+
+ hpkg = package_from_db(hdb);
+ ok(hpkg, "failed to create package\n");
+
+ MsiCloseHandle(hdb);
+
+ /* invalid database handle */
+ size = MAX_PATH;
+ lstrcpyA(path, "kiwi");
+ r = MsiGetSourcePath(-1, "TARGETDIR", path, &size);
+ ok(r == ERROR_INVALID_HANDLE,
+ "Expected ERROR_INVALID_HANDLE, got %d\n", r);
+ ok(!lstrcmpA(path, "kiwi"),
+ "Expected path to be unchanged, got \"%s\"\n", path);
+ ok(size == MAX_PATH, "Expected size to be unchanged, got %d\n", size);
+
+ /* NULL szFolder */
+ size = MAX_PATH;
+ lstrcpyA(path, "kiwi");
+ r = MsiGetSourcePath(hpkg, NULL, path, &size);
+ ok(r == ERROR_INVALID_PARAMETER,
+ "Expected ERROR_INVALID_PARAMETER, got %d\n", r);
+ ok(!lstrcmpA(path, "kiwi"),
+ "Expected path to be unchanged, got \"%s\"\n", path);
+ ok(size == MAX_PATH, "Expected size to be unchanged, got %d\n", size);
+
+ /* empty szFolder */
+ size = MAX_PATH;
+ lstrcpyA(path, "kiwi");
+ r = MsiGetSourcePath(hpkg, "", path, &size);
+ ok(r == ERROR_DIRECTORY, "Expected ERROR_DIRECTORY, got %d\n", r);
+ ok(!lstrcmpA(path, "kiwi"),
+ "Expected path to be unchanged, got \"%s\"\n", path);
+ ok(size == MAX_PATH, "Expected size to be unchanged, got %d\n", size);
+
+ /* try TARGETDIR */
+ size = MAX_PATH;
+ lstrcpyA(path, "kiwi");
+ r = MsiGetSourcePath(hpkg, "TARGETDIR", path, &size);
+ ok(r == ERROR_DIRECTORY, "Expected ERROR_DIRECTORY, got %d\n", r);
+ ok(!lstrcmpA(path, "kiwi"),
+ "Expected path to be unchanged, got \"%s\"\n", path);
+ ok(size == MAX_PATH, "Expected size to be unchanged, got %d\n", size);
+
+ /* try SourceDir */
+ size = MAX_PATH;
+ lstrcpyA(path, "kiwi");
+ r = MsiGetSourcePath(hpkg, "SourceDir", path, &size);
+ ok(r == ERROR_DIRECTORY, "Expected ERROR_DIRECTORY, got %d\n", r);
+ ok(!lstrcmpA(path, "kiwi"),
+ "Expected path to be unchanged, got \"%s\"\n", path);
+ ok(size == MAX_PATH, "Expected size to be unchanged, got %d\n", size);
+
+ /* try SOURCEDIR */
+ size = MAX_PATH;
+ lstrcpyA(path, "kiwi");
+ r = MsiGetSourcePath(hpkg, "SOURCEDIR", path, &size);
+ ok(r == ERROR_DIRECTORY, "Expected ERROR_DIRECTORY, got %d\n", r);
+ ok(!lstrcmpA(path, "kiwi"),
+ "Expected path to be unchanged, got \"%s\"\n", path);
+ ok(size == MAX_PATH, "Expected size to be unchanged, got %d\n", size);
+
+ /* source path does not exist, but the property exists */
+ size = MAX_PATH;
+ lstrcpyA(path, "kiwi");
+ r = MsiGetProperty(hpkg, "SOURCEDIR", path, &size);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA(path, ""), "Expected \"\", got \"%s\"\n", path);
+ ok(size == 0, "Expected 0, got %d\n", size);
+
+ /* try SubDir */
+ size = MAX_PATH;
+ lstrcpyA(path, "kiwi");
+ r = MsiGetSourcePath(hpkg, "SubDir", path, &size);
+ ok(r == ERROR_DIRECTORY, "Expected ERROR_DIRECTORY, got %d\n", r);
+ ok(!lstrcmpA(path, "kiwi"),
+ "Expected path to be unchanged, got \"%s\"\n", path);
+ ok(size == MAX_PATH, "Expected size to be unchanged, got %d\n", size);
+
+ /* try SubDir2 */
+ size = MAX_PATH;
+ lstrcpyA(path, "kiwi");
+ r = MsiGetSourcePath(hpkg, "SubDir2", path, &size);
+ ok(r == ERROR_DIRECTORY, "Expected ERROR_DIRECTORY, got %d\n", r);
+ ok(!lstrcmpA(path, "kiwi"),
+ "Expected path to be unchanged, got \"%s\"\n", path);
+ ok(size == MAX_PATH, "Expected size to be unchanged, got %d\n", size);
+
+ r = MsiDoAction(hpkg, "CostInitialize");
+ ok(r == ERROR_SUCCESS, "cost init failed\n");
+
+ /* try TARGETDIR after CostInitialize */
+ size = MAX_PATH;
+ lstrcpyA(path, "kiwi");
+ r = MsiGetSourcePath(hpkg, "TARGETDIR", path, &size);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA(path, cwd), "Expected \"%s\", got \"%s\"\n", cwd, path);
+ ok(size == lstrlenA(cwd), "Expected %d, got %d\n", lstrlenA(cwd), size);
+
+ /* try SourceDir after CostInitialize */
+ size = MAX_PATH;
+ lstrcpyA(path, "kiwi");
+ r = MsiGetSourcePath(hpkg, "SourceDir", path, &size);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA(path, cwd), "Expected \"%s\", got \"%s\"\n", cwd, path);
+ ok(size == lstrlenA(cwd), "Expected %d, got %d\n", lstrlenA(cwd), size);
+
+ /* try SOURCEDIR after CostInitialize */
+ size = MAX_PATH;
+ lstrcpyA(path, "kiwi");
+ r = MsiGetSourcePath(hpkg, "SOURCEDIR", path, &size);
+ ok(r == ERROR_DIRECTORY, "Expected ERROR_DIRECTORY, got %d\n", r);
+ ok(!lstrcmpA(path, "kiwi"),
+ "Expected path to be unchanged, got \"%s\"\n", path);
+ ok(size == MAX_PATH, "Expected size to be unchanged, got %d\n", size);
+
+ /* source path does not exist, but the property exists */
+ size = MAX_PATH;
+ lstrcpyA(path, "kiwi");
+ r = MsiGetProperty(hpkg, "SOURCEDIR", path, &size);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ todo_wine
+ {
+ ok(!lstrcmpA(path, cwd), "Expected \"%s\", got \"%s\"\n", cwd, path);
+ ok(size == lstrlenA(cwd), "Expected %d, got %d\n", lstrlenA(cwd), size);
+ }
+
+ /* try SubDir after CostInitialize */
+ size = MAX_PATH;
+ lstrcpyA(path, "kiwi");
+ r = MsiGetSourcePath(hpkg, "SubDir", path, &size);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA(path, subsrc), "Expected \"%s\", got \"%s\"\n", subsrc, path);
+ ok(size == lstrlenA(subsrc), "Expected %d, got %d\n", lstrlenA(subsrc), size);
+
+ /* try SubDir2 after CostInitialize */
+ size = MAX_PATH;
+ lstrcpyA(path, "kiwi");
+ r = MsiGetSourcePath(hpkg, "SubDir2", path, &size);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA(path, sub2), "Expected \"%s\", got \"%s\"\n", sub2, path);
+ ok(size == lstrlenA(sub2), "Expected %d, got %d\n", lstrlenA(sub2), size);
+
+ r = MsiDoAction(hpkg, "ResolveSource");
+ ok(r == ERROR_SUCCESS, "file cost failed\n");
+
+ /* try TARGETDIR after ResolveSource */
+ size = MAX_PATH;
+ lstrcpyA(path, "kiwi");
+ r = MsiGetSourcePath(hpkg, "TARGETDIR", path, &size);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA(path, cwd), "Expected \"%s\", got \"%s\"\n", cwd, path);
+ ok(size == lstrlenA(cwd), "Expected %d, got %d\n", lstrlenA(cwd), size);
+
+ /* try SourceDir after ResolveSource */
+ size = MAX_PATH;
+ lstrcpyA(path, "kiwi");
+ r = MsiGetSourcePath(hpkg, "SourceDir", path, &size);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA(path, cwd), "Expected \"%s\", got \"%s\"\n", cwd, path);
+ ok(size == lstrlenA(cwd), "Expected %d, got %d\n", lstrlenA(cwd), size);
+
+ /* try SOURCEDIR after ResolveSource */
+ size = MAX_PATH;
+ lstrcpyA(path, "kiwi");
+ r = MsiGetSourcePath(hpkg, "SOURCEDIR", path, &size);
+ ok(r == ERROR_DIRECTORY, "Expected ERROR_DIRECTORY, got %d\n", r);
+ ok(!lstrcmpA(path, "kiwi"),
+ "Expected path to be unchanged, got \"%s\"\n", path);
+ ok(size == MAX_PATH, "Expected size to be unchanged, got %d\n", size);
+
+ /* source path does not exist, but the property exists */
+ size = MAX_PATH;
+ lstrcpyA(path, "kiwi");
+ r = MsiGetProperty(hpkg, "SOURCEDIR", path, &size);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA(path, cwd), "Expected \"%s\", got \"%s\"\n", cwd, path);
+ ok(size == lstrlenA(cwd), "Expected %d, got %d\n", lstrlenA(cwd), size);
+
+ /* try SubDir after ResolveSource */
+ size = MAX_PATH;
+ lstrcpyA(path, "kiwi");
+ r = MsiGetSourcePath(hpkg, "SubDir", path, &size);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA(path, subsrc), "Expected \"%s\", got \"%s\"\n", subsrc, path);
+ ok(size == lstrlenA(subsrc), "Expected %d, got %d\n", lstrlenA(subsrc), size);
+
+ /* try SubDir2 after ResolveSource */
+ size = MAX_PATH;
+ lstrcpyA(path, "kiwi");
+ r = MsiGetSourcePath(hpkg, "SubDir2", path, &size);
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA(path, sub2), "Expected \"%s\", got \"%s\"\n", sub2, path);
+ ok(size == lstrlenA(sub2), "Expected %d, got %d\n", lstrlenA(sub2), size);
- r = MsiSummaryInfoPersist(summary);
- ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
-
- MsiCloseHandle(summary);
-}
+ r = MsiDoAction(hpkg, "FileCost");
+ ok(r == ERROR_SUCCESS, "file cost failed\n");
-static void test_MsiGetSourcePath(void)
-{
- MSIHANDLE hdb, hpkg;
- CHAR path[MAX_PATH];
- CHAR cwd[MAX_PATH];
- CHAR subsrc[MAX_PATH];
- CHAR sub2[MAX_PATH];
- DWORD size;
- UINT r;
+ /* try TARGETDIR after FileCost */
+ size = MAX_PATH;
+ lstrcpyA(path, "kiwi");
+ r = MsiGetSourcePath(hpkg, "TARGETDIR", path, &size);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA(path, cwd), "Expected \"%s\", got \"%s\"\n", cwd, path);
+ ok(size == lstrlenA(cwd), "Expected %d, got %d\n", lstrlenA(cwd), size);
- lstrcpyA(cwd, CURR_DIR);
- lstrcatA(cwd, "\\");
+ /* try SourceDir after FileCost */
+ size = MAX_PATH;
+ lstrcpyA(path, "kiwi");
+ r = MsiGetSourcePath(hpkg, "SourceDir", path, &size);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA(path, cwd), "Expected \"%s\", got \"%s\"\n", cwd, path);
+ ok(size == lstrlenA(cwd), "Expected %d, got %d\n", lstrlenA(cwd), size);
- lstrcpyA(subsrc, cwd);
- lstrcatA(subsrc, "subsource");
- lstrcatA(subsrc, "\\");
+ /* try SOURCEDIR after FileCost */
+ size = MAX_PATH;
+ lstrcpyA(path, "kiwi");
+ r = MsiGetSourcePath(hpkg, "SOURCEDIR", path, &size);
+ ok(r == ERROR_DIRECTORY, "Expected ERROR_DIRECTORY, got %d\n", r);
+ ok(!lstrcmpA(path, "kiwi"),
+ "Expected path to be unchanged, got \"%s\"\n", path);
+ ok(size == MAX_PATH, "Expected size to be unchanged, got %d\n", size);
- lstrcpyA(sub2, subsrc);
- lstrcatA(sub2, "sub2");
- lstrcatA(sub2, "\\");
+ /* source path does not exist, but the property exists */
+ size = MAX_PATH;
+ lstrcpyA(path, "kiwi");
+ r = MsiGetProperty(hpkg, "SOURCEDIR", path, &size);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA(path, cwd), "Expected \"%s\", got \"%s\"\n", cwd, path);
+ ok(size == lstrlenA(cwd), "Expected %d, got %d\n", lstrlenA(cwd), size);
- /* uncompressed source */
+ /* try SubDir after FileCost */
+ size = MAX_PATH;
+ lstrcpyA(path, "kiwi");
+ r = MsiGetSourcePath(hpkg, "SubDir", path, &size);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA(path, subsrc), "Expected \"%s\", got \"%s\"\n", subsrc, path);
+ ok(size == lstrlenA(subsrc), "Expected %d, got %d\n", lstrlenA(subsrc), size);
- hdb = create_package_db();
- ok( hdb, "failed to create database\n");
+ /* try SubDir2 after FileCost */
+ size = MAX_PATH;
+ lstrcpyA(path, "kiwi");
+ r = MsiGetSourcePath(hpkg, "SubDir2", path, &size);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA(path, sub2), "Expected \"%s\", got \"%s\"\n", sub2, path);
+ ok(size == lstrlenA(sub2), "Expected %d, got %d\n", lstrlenA(sub2), size);
- set_suminfo_prop(hdb, PID_WORDCOUNT, 0);
+ r = MsiDoAction(hpkg, "CostFinalize");
+ ok(r == ERROR_SUCCESS, "file cost failed\n");
- r = add_directory_entry(hdb, "'TARGETDIR', '', 'SourceDir'");
- ok(r == S_OK, "failed\n");
+ /* try TARGETDIR after CostFinalize */
+ size = MAX_PATH;
+ lstrcpyA(path, "kiwi");
+ r = MsiGetSourcePath(hpkg, "TARGETDIR", path, &size);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA(path, cwd), "Expected \"%s\", got \"%s\"\n", cwd, path);
+ ok(size == lstrlenA(cwd), "Expected %d, got %d\n", lstrlenA(cwd), size);
- r = add_directory_entry(hdb, "'SubDir', 'TARGETDIR', 'subtarget:subsource'");
- ok(r == S_OK, "failed\n");
+ /* try SourceDir after CostFinalize */
+ size = MAX_PATH;
+ lstrcpyA(path, "kiwi");
+ r = MsiGetSourcePath(hpkg, "SourceDir", path, &size);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA(path, cwd), "Expected \"%s\", got \"%s\"\n", cwd, path);
+ ok(size == lstrlenA(cwd), "Expected %d, got %d\n", lstrlenA(cwd), size);
- r = add_directory_entry(hdb, "'SubDir2', 'SubDir', 'sub2'");
- ok(r == S_OK, "failed\n");
+ /* try SOURCEDIR after CostFinalize */
+ size = MAX_PATH;
+ lstrcpyA(path, "kiwi");
+ r = MsiGetSourcePath(hpkg, "SOURCEDIR", path, &size);
+ ok(r == ERROR_DIRECTORY, "Expected ERROR_DIRECTORY, got %d\n", r);
+ ok(!lstrcmpA(path, "kiwi"),
+ "Expected path to be unchanged, got \"%s\"\n", path);
+ ok(size == MAX_PATH, "Expected size to be unchanged, got %d\n", size);
- r = MsiDatabaseCommit(hdb);
- ok(r == ERROR_SUCCESS , "Failed to commit database\n");
+ /* source path does not exist, but the property exists */
+ size = MAX_PATH;
+ lstrcpyA(path, "kiwi");
+ r = MsiGetProperty(hpkg, "SOURCEDIR", path, &size);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA(path, cwd), "Expected \"%s\", got \"%s\"\n", cwd, path);
+ ok(size == lstrlenA(cwd), "Expected %d, got %d\n", lstrlenA(cwd), size);
- hpkg = package_from_db(hdb);
- ok(hpkg, "failed to create package\n");
+ /* try SubDir after CostFinalize */
+ size = MAX_PATH;
+ lstrcpyA(path, "kiwi");
+ r = MsiGetSourcePath(hpkg, "SubDir", path, &size);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA(path, subsrc), "Expected \"%s\", got \"%s\"\n", subsrc, path);
+ ok(size == lstrlenA(subsrc), "Expected %d, got %d\n", lstrlenA(subsrc), size);
- MsiCloseHandle(hdb);
+ /* try SubDir2 after CostFinalize */
+ size = MAX_PATH;
+ lstrcpyA(path, "kiwi");
+ r = MsiGetSourcePath(hpkg, "SubDir2", path, &size);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA(path, sub2), "Expected \"%s\", got \"%s\"\n", sub2, path);
+ ok(size == lstrlenA(sub2), "Expected %d, got %d\n", lstrlenA(sub2), size);
- /* invalid database handle */
+ /* nonexistent directory */
size = MAX_PATH;
lstrcpyA(path, "kiwi");
- r = MsiGetSourcePath(-1, "TARGETDIR", path, &size);
- ok(r == ERROR_INVALID_HANDLE,
- "Expected ERROR_INVALID_HANDLE, got %d\n", r);
+ r = MsiGetSourcePath(hpkg, "IDontExist", path, &size);
+ ok(r == ERROR_DIRECTORY, "Expected ERROR_DIRECTORY, got %d\n", r);
ok(!lstrcmpA(path, "kiwi"),
"Expected path to be unchanged, got \"%s\"\n", path);
ok(size == MAX_PATH, "Expected size to be unchanged, got %d\n", size);
- /* NULL szFolder */
+ /* NULL szPathBuf */
size = MAX_PATH;
+ r = MsiGetSourcePath(hpkg, "SourceDir", NULL, &size);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(size == lstrlenA(cwd), "Expected %d, got %d\n", lstrlenA(cwd), size);
+
+ /* NULL pcchPathBuf */
lstrcpyA(path, "kiwi");
- r = MsiGetSourcePath(hpkg, NULL, path, &size);
+ r = MsiGetSourcePath(hpkg, "SourceDir", path, NULL);
ok(r == ERROR_INVALID_PARAMETER,
"Expected ERROR_INVALID_PARAMETER, got %d\n", r);
ok(!lstrcmpA(path, "kiwi"),
"Expected path to be unchanged, got \"%s\"\n", path);
- ok(size == MAX_PATH, "Expected size to be unchanged, got %d\n", size);
- /* empty szFolder */
- size = MAX_PATH;
+ /* pcchPathBuf is 0 */
+ size = 0;
lstrcpyA(path, "kiwi");
- r = MsiGetSourcePath(hpkg, "", path, &size);
- ok(r == ERROR_DIRECTORY, "Expected ERROR_DIRECTORY, got %d\n", r);
+ r = MsiGetSourcePath(hpkg, "SourceDir", path, &size);
+ ok(r == ERROR_MORE_DATA, "Expected ERROR_MORE_DATA, got %d\n", r);
ok(!lstrcmpA(path, "kiwi"),
"Expected path to be unchanged, got \"%s\"\n", path);
- ok(size == MAX_PATH, "Expected size to be unchanged, got %d\n", size);
+ ok(size == lstrlenA(cwd), "Expected %d, got %d\n", lstrlenA(cwd), size);
+
+ /* pcchPathBuf does not have room for NULL terminator */
+ size = lstrlenA(cwd);
+ lstrcpyA(path, "kiwi");
+ r = MsiGetSourcePath(hpkg, "SourceDir", path, &size);
+ ok(r == ERROR_MORE_DATA, "Expected ERROR_MORE_DATA, got %d\n", r);
+ ok(!strncmp(path, cwd, lstrlenA(cwd) - 1),
+ "Expected path with no backslash, got \"%s\"\n", path);
+ ok(size == lstrlenA(cwd), "Expected %d, got %d\n", lstrlenA(cwd), size);
+
+ /* pcchPathBuf has room for NULL terminator */
+ size = lstrlenA(cwd) + 1;
+ lstrcpyA(path, "kiwi");
+ r = MsiGetSourcePath(hpkg, "SourceDir", path, &size);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA(path, cwd), "Expected \"%s\", got \"%s\"\n", cwd, path);
+ ok(size == lstrlenA(cwd), "Expected %d, got %d\n", lstrlenA(cwd), size);
+
+ MsiCloseHandle(hpkg);
+
+ /* compressed source */
+
+ r = MsiOpenDatabase(msifile, MSIDBOPEN_DIRECT, &hdb);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+
+ set_suminfo_prop(hdb, PID_WORDCOUNT, msidbSumInfoSourceTypeCompressed);
+
+ hpkg = package_from_db(hdb);
+ ok(hpkg, "failed to create package\n");
/* try TARGETDIR */
size = MAX_PATH;
"Expected path to be unchanged, got \"%s\"\n", path);
ok(size == MAX_PATH, "Expected size to be unchanged, got %d\n", size);
- /* source path does not exist, but the property exists */
+ /* source path nor the property exist */
size = MAX_PATH;
lstrcpyA(path, "kiwi");
r = MsiGetProperty(hpkg, "SOURCEDIR", path, &size);
ok(size == MAX_PATH, "Expected size to be unchanged, got %d\n", size);
r = MsiDoAction(hpkg, "CostInitialize");
- ok(r == ERROR_SUCCESS, "cost init failed\n");
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
/* try TARGETDIR after CostInitialize */
size = MAX_PATH;
size = MAX_PATH;
lstrcpyA(path, "kiwi");
r = MsiGetSourcePath(hpkg, "SOURCEDIR", path, &size);
- ok(r == ERROR_DIRECTORY, "Expected ERROR_DIRECTORY, got %d\n", r);
- ok(!lstrcmpA(path, "kiwi"),
- "Expected path to be unchanged, got \"%s\"\n", path);
- ok(size == MAX_PATH, "Expected size to be unchanged, got %d\n", size);
-
- /* source path does not exist, but the property exists */
- size = MAX_PATH;
- lstrcpyA(path, "kiwi");
- r = MsiGetProperty(hpkg, "SOURCEDIR", path, &size);
- ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
todo_wine
{
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
ok(!lstrcmpA(path, cwd), "Expected \"%s\", got \"%s\"\n", cwd, path);
ok(size == lstrlenA(cwd), "Expected %d, got %d\n", lstrlenA(cwd), size);
}
- /* try SubDir after CostInitialize */
- size = MAX_PATH;
- lstrcpyA(path, "kiwi");
- r = MsiGetSourcePath(hpkg, "SubDir", path, &size);
- ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
- ok(!lstrcmpA(path, subsrc), "Expected \"%s\", got \"%s\"\n", subsrc, path);
- ok(size == lstrlenA(subsrc), "Expected %d, got %d\n", lstrlenA(subsrc), size);
-
- /* try SubDir2 after CostInitialize */
- size = MAX_PATH;
- lstrcpyA(path, "kiwi");
- r = MsiGetSourcePath(hpkg, "SubDir2", path, &size);
- ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
- ok(!lstrcmpA(path, sub2), "Expected \"%s\", got \"%s\"\n", sub2, path);
- ok(size == lstrlenA(sub2), "Expected %d, got %d\n", lstrlenA(sub2), size);
-
- r = MsiDoAction(hpkg, "ResolveSource");
- ok(r == ERROR_SUCCESS, "file cost failed\n");
-
- /* try TARGETDIR after ResolveSource */
- size = MAX_PATH;
- lstrcpyA(path, "kiwi");
- r = MsiGetSourcePath(hpkg, "TARGETDIR", path, &size);
- ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
- ok(!lstrcmpA(path, cwd), "Expected \"%s\", got \"%s\"\n", cwd, path);
- ok(size == lstrlenA(cwd), "Expected %d, got %d\n", lstrlenA(cwd), size);
-
- /* try SourceDir after ResolveSource */
- size = MAX_PATH;
- lstrcpyA(path, "kiwi");
- r = MsiGetSourcePath(hpkg, "SourceDir", path, &size);
- ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
- ok(!lstrcmpA(path, cwd), "Expected \"%s\", got \"%s\"\n", cwd, path);
- ok(size == lstrlenA(cwd), "Expected %d, got %d\n", lstrlenA(cwd), size);
-
- /* try SOURCEDIR after ResolveSource */
- size = MAX_PATH;
- lstrcpyA(path, "kiwi");
- r = MsiGetSourcePath(hpkg, "SOURCEDIR", path, &size);
- ok(r == ERROR_DIRECTORY, "Expected ERROR_DIRECTORY, got %d\n", r);
- ok(!lstrcmpA(path, "kiwi"),
- "Expected path to be unchanged, got \"%s\"\n", path);
- ok(size == MAX_PATH, "Expected size to be unchanged, got %d\n", size);
-
/* source path does not exist, but the property exists */
size = MAX_PATH;
lstrcpyA(path, "kiwi");
r = MsiGetProperty(hpkg, "SOURCEDIR", path, &size);
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
- ok(!lstrcmpA(path, cwd), "Expected \"%s\", got \"%s\"\n", cwd, path);
- ok(size == lstrlenA(cwd), "Expected %d, got %d\n", lstrlenA(cwd), size);
+ todo_wine
+ {
+ ok(!lstrcmpA(path, cwd), "Expected \"%s\", got \"%s\"\n", cwd, path);
+ ok(size == lstrlenA(cwd), "Expected %d, got %d\n", lstrlenA(cwd), size);
+ }
- /* try SubDir after ResolveSource */
+ /* try SubDir after CostInitialize */
size = MAX_PATH;
lstrcpyA(path, "kiwi");
r = MsiGetSourcePath(hpkg, "SubDir", path, &size);
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
- ok(!lstrcmpA(path, subsrc), "Expected \"%s\", got \"%s\"\n", subsrc, path);
- ok(size == lstrlenA(subsrc), "Expected %d, got %d\n", lstrlenA(subsrc), size);
+ ok(!lstrcmpA(path, cwd), "Expected \"%s\", got \"%s\"\n", cwd, path);
+ ok(size == lstrlenA(cwd), "Expected %d, got %d\n", lstrlenA(cwd), size);
- /* try SubDir2 after ResolveSource */
+ /* try SubDir2 after CostInitialize */
size = MAX_PATH;
lstrcpyA(path, "kiwi");
r = MsiGetSourcePath(hpkg, "SubDir2", path, &size);
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
- ok(!lstrcmpA(path, sub2), "Expected \"%s\", got \"%s\"\n", sub2, path);
- ok(size == lstrlenA(sub2), "Expected %d, got %d\n", lstrlenA(sub2), size);
+ ok(!lstrcmpA(path, cwd), "Expected \"%s\", got \"%s\"\n", cwd, path);
+ ok(size == lstrlenA(cwd), "Expected %d, got %d\n", lstrlenA(cwd), size);
- r = MsiDoAction(hpkg, "FileCost");
+ r = MsiDoAction(hpkg, "ResolveSource");
ok(r == ERROR_SUCCESS, "file cost failed\n");
- /* try TARGETDIR after FileCost */
+ /* try TARGETDIR after ResolveSource */
size = MAX_PATH;
lstrcpyA(path, "kiwi");
r = MsiGetSourcePath(hpkg, "TARGETDIR", path, &size);
ok(!lstrcmpA(path, cwd), "Expected \"%s\", got \"%s\"\n", cwd, path);
ok(size == lstrlenA(cwd), "Expected %d, got %d\n", lstrlenA(cwd), size);
- /* try SourceDir after FileCost */
+ /* try SourceDir after ResolveSource */
size = MAX_PATH;
lstrcpyA(path, "kiwi");
r = MsiGetSourcePath(hpkg, "SourceDir", path, &size);
ok(!lstrcmpA(path, cwd), "Expected \"%s\", got \"%s\"\n", cwd, path);
ok(size == lstrlenA(cwd), "Expected %d, got %d\n", lstrlenA(cwd), size);
- /* try SOURCEDIR after FileCost */
+ /* try SOURCEDIR after ResolveSource */
size = MAX_PATH;
lstrcpyA(path, "kiwi");
r = MsiGetSourcePath(hpkg, "SOURCEDIR", path, &size);
- ok(r == ERROR_DIRECTORY, "Expected ERROR_DIRECTORY, got %d\n", r);
- ok(!lstrcmpA(path, "kiwi"),
- "Expected path to be unchanged, got \"%s\"\n", path);
- ok(size == MAX_PATH, "Expected size to be unchanged, got %d\n", size);
+ todo_wine
+ {
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA(path, cwd), "Expected \"%s\", got \"%s\"\n", cwd, path);
+ ok(size == lstrlenA(cwd), "Expected %d, got %d\n", lstrlenA(cwd), size);
+ }
- /* try SubDir after FileCost */
+ /* source path and the property exist */
+ size = MAX_PATH;
+ lstrcpyA(path, "kiwi");
+ r = MsiGetProperty(hpkg, "SOURCEDIR", path, &size);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA(path, cwd), "Expected \"%s\", got \"%s\"\n", cwd, path);
+ ok(size == lstrlenA(cwd), "Expected %d, got %d\n", lstrlenA(cwd), size);
+
+ /* try SubDir after ResolveSource */
size = MAX_PATH;
lstrcpyA(path, "kiwi");
r = MsiGetSourcePath(hpkg, "SubDir", path, &size);
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
- ok(!lstrcmpA(path, subsrc), "Expected \"%s\", got \"%s\"\n", subsrc, path);
- ok(size == lstrlenA(subsrc), "Expected %d, got %d\n", lstrlenA(subsrc), size);
+ ok(!lstrcmpA(path, cwd), "Expected \"%s\", got \"%s\"\n", cwd, path);
+ ok(size == lstrlenA(cwd), "Expected %d, got %d\n", lstrlenA(cwd), size);
- /* try SubDir2 after FileCost */
+ /* try SubDir2 after ResolveSource */
size = MAX_PATH;
lstrcpyA(path, "kiwi");
r = MsiGetSourcePath(hpkg, "SubDir2", path, &size);
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
- ok(!lstrcmpA(path, sub2), "Expected \"%s\", got \"%s\"\n", sub2, path);
- ok(size == lstrlenA(sub2), "Expected %d, got %d\n", lstrlenA(sub2), size);
+ ok(!lstrcmpA(path, cwd), "Expected \"%s\", got \"%s\"\n", cwd, path);
+ ok(size == lstrlenA(cwd), "Expected %d, got %d\n", lstrlenA(cwd), size);
- r = MsiDoAction(hpkg, "CostFinalize");
- ok(r == ERROR_SUCCESS, "file cost failed\n");
+ r = MsiDoAction(hpkg, "FileCost");
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
/* try TARGETDIR after CostFinalize */
size = MAX_PATH;
size = MAX_PATH;
lstrcpyA(path, "kiwi");
r = MsiGetSourcePath(hpkg, "SOURCEDIR", path, &size);
- ok(r == ERROR_DIRECTORY, "Expected ERROR_DIRECTORY, got %d\n", r);
- ok(!lstrcmpA(path, "kiwi"),
- "Expected path to be unchanged, got \"%s\"\n", path);
- ok(size == MAX_PATH, "Expected size to be unchanged, got %d\n", size);
-
- /* try SubDir after CostFinalize */
- size = MAX_PATH;
- lstrcpyA(path, "kiwi");
- r = MsiGetSourcePath(hpkg, "SubDir", path, &size);
- ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
- ok(!lstrcmpA(path, subsrc), "Expected \"%s\", got \"%s\"\n", subsrc, path);
- ok(size == lstrlenA(subsrc), "Expected %d, got %d\n", lstrlenA(subsrc), size);
+ todo_wine
+ {
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA(path, cwd), "Expected \"%s\", got \"%s\"\n", cwd, path);
+ ok(size == lstrlenA(cwd), "Expected %d, got %d\n", lstrlenA(cwd), size);
+ }
- /* try SubDir2 after CostFinalize */
+ /* source path and the property exist */
size = MAX_PATH;
lstrcpyA(path, "kiwi");
- r = MsiGetSourcePath(hpkg, "SubDir2", path, &size);
+ r = MsiGetProperty(hpkg, "SOURCEDIR", path, &size);
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
- ok(!lstrcmpA(path, sub2), "Expected \"%s\", got \"%s\"\n", sub2, path);
- ok(size == lstrlenA(sub2), "Expected %d, got %d\n", lstrlenA(sub2), size);
+ ok(!lstrcmpA(path, cwd), "Expected \"%s\", got \"%s\"\n", cwd, path);
+ ok(size == lstrlenA(cwd), "Expected %d, got %d\n", lstrlenA(cwd), size);
- /* nonexistent directory */
+ /* try SubDir after CostFinalize */
size = MAX_PATH;
lstrcpyA(path, "kiwi");
- r = MsiGetSourcePath(hpkg, "IDontExist", path, &size);
- ok(r == ERROR_DIRECTORY, "Expected ERROR_DIRECTORY, got %d\n", r);
- ok(!lstrcmpA(path, "kiwi"),
- "Expected path to be unchanged, got \"%s\"\n", path);
- ok(size == MAX_PATH, "Expected size to be unchanged, got %d\n", size);
-
- /* NULL szPathBuf */
- size = MAX_PATH;
- r = MsiGetSourcePath(hpkg, "SourceDir", NULL, &size);
+ r = MsiGetSourcePath(hpkg, "SubDir", path, &size);
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA(path, cwd), "Expected \"%s\", got \"%s\"\n", cwd, path);
ok(size == lstrlenA(cwd), "Expected %d, got %d\n", lstrlenA(cwd), size);
- /* NULL pcchPathBuf */
- lstrcpyA(path, "kiwi");
- r = MsiGetSourcePath(hpkg, "SourceDir", path, NULL);
- ok(r == ERROR_INVALID_PARAMETER,
- "Expected ERROR_INVALID_PARAMETER, got %d\n", r);
- ok(!lstrcmpA(path, "kiwi"),
- "Expected path to be unchanged, got \"%s\"\n", path);
-
- /* pcchPathBuf is 0 */
- size = 0;
- lstrcpyA(path, "kiwi");
- r = MsiGetSourcePath(hpkg, "SourceDir", path, &size);
- ok(r == ERROR_MORE_DATA, "Expected ERROR_MORE_DATA, got %d\n", r);
- ok(!lstrcmpA(path, "kiwi"),
- "Expected path to be unchanged, got \"%s\"\n", path);
- ok(size == lstrlenA(cwd), "Expected %d, got %d\n", lstrlenA(cwd), size);
-
- /* pcchPathBuf does not have room for NULL terminator */
- size = lstrlenA(cwd);
- lstrcpyA(path, "kiwi");
- r = MsiGetSourcePath(hpkg, "SourceDir", path, &size);
- ok(r == ERROR_MORE_DATA, "Expected ERROR_MORE_DATA, got %d\n", r);
- ok(!strncmp(path, cwd, lstrlenA(cwd) - 1),
- "Expected path with no backslash, got \"%s\"\n", path);
- ok(size == lstrlenA(cwd), "Expected %d, got %d\n", lstrlenA(cwd), size);
-
- /* pcchPathBuf has room for NULL terminator */
- size = lstrlenA(cwd) + 1;
+ /* try SubDir2 after CostFinalize */
+ size = MAX_PATH;
lstrcpyA(path, "kiwi");
- r = MsiGetSourcePath(hpkg, "SourceDir", path, &size);
+ r = MsiGetSourcePath(hpkg, "SubDir2", path, &size);
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
ok(!lstrcmpA(path, cwd), "Expected \"%s\", got \"%s\"\n", cwd, path);
ok(size == lstrlenA(cwd), "Expected %d, got %d\n", lstrlenA(cwd), size);
- MsiCloseHandle(hpkg);
-
- /* compressed source */
-
- r = MsiOpenDatabase(msifile, MSIDBOPEN_DIRECT, &hdb);
- ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
-
- set_suminfo_prop(hdb, PID_WORDCOUNT, msidbSumInfoSourceTypeCompressed);
-
- hpkg = package_from_db(hdb);
- ok(hpkg, "failed to create package\n");
-
- r = MsiDoAction(hpkg, "CostInitialize");
- ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
- r = MsiDoAction(hpkg, "FileCost");
- ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
r = MsiDoAction(hpkg, "CostFinalize");
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
ok(size == lstrlenA(cwd), "Expected %d, got %d\n", lstrlenA(cwd), size);
}
+ /* source path and the property exist */
+ size = MAX_PATH;
+ lstrcpyA(path, "kiwi");
+ r = MsiGetProperty(hpkg, "SOURCEDIR", path, &size);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA(path, cwd), "Expected \"%s\", got \"%s\"\n", cwd, path);
+ ok(size == lstrlenA(cwd), "Expected %d, got %d\n", lstrlenA(cwd), size);
+
/* try SubDir after CostFinalize */
size = MAX_PATH;
lstrcpyA(path, "kiwi");
static void test_emptypackage(void)
{
- MSIHANDLE hpkg, hdb, hsuminfo;
- MSIHANDLE hview, hrec;
+ MSIHANDLE hpkg = 0, hdb = 0, hsuminfo = 0;
+ MSIHANDLE hview = 0, hrec = 0;
MSICONDITION condition;
CHAR buffer[MAX_PATH];
DWORD size;
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
}
+ buffer[0] = 0;
size = MAX_PATH;
r = MsiRecordGetString(hrec, 1, buffer, &size);
todo_wine
CHAR prodcode[MAX_PATH];
CHAR prod_squashed[MAX_PATH];
HKEY prodkey, userkey, props;
- LPSTR usersid;
DWORD size;
LONG res;
UINT r;
lstrcatA(path, "\\");
create_test_guid(prodcode, prod_squashed);
- get_user_sid(&usersid);
r = MsiOpenDatabase(msifile, MSIDBOPEN_CREATE, &hdb);
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
DeleteFileA(msifile);
}
+static void test_MsiSetProperty(void)
+{
+ MSIHANDLE hpkg, hdb, hrec;
+ CHAR buf[MAX_PATH];
+ LPCSTR query;
+ DWORD size;
+ UINT r;
+
+ hpkg = package_from_db(create_package_db());
+ ok(hpkg != 0, "Expected a valid package\n");
+
+ /* invalid hInstall */
+ r = MsiSetPropertyA(0, "Prop", "Val");
+ ok(r == ERROR_INVALID_HANDLE,
+ "Expected ERROR_INVALID_HANDLE, got %d\n", r);
+
+ /* invalid hInstall */
+ r = MsiSetPropertyA(0xdeadbeef, "Prop", "Val");
+ ok(r == ERROR_INVALID_HANDLE,
+ "Expected ERROR_INVALID_HANDLE, got %d\n", r);
+
+ /* szName is NULL */
+ r = MsiSetPropertyA(hpkg, NULL, "Val");
+ ok(r == ERROR_INVALID_PARAMETER,
+ "Expected ERROR_INVALID_PARAMETER, got %d\n", r);
+
+ /* both szName and szValue are NULL */
+ r = MsiSetPropertyA(hpkg, NULL, NULL);
+ ok(r == ERROR_INVALID_PARAMETER,
+ "Expected ERROR_INVALID_PARAMETER, got %d\n", r);
+
+ /* szName is empty */
+ r = MsiSetPropertyA(hpkg, "", "Val");
+ ok(r == ERROR_FUNCTION_FAILED,
+ "Expected ERROR_FUNCTION_FAILED, got %d\n", r);
+
+ /* szName is empty and szValue is NULL */
+ r = MsiSetPropertyA(hpkg, "", NULL);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+
+ /* set a property */
+ r = MsiSetPropertyA(hpkg, "Prop", "Val");
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+
+ /* get the property */
+ size = MAX_PATH;
+ r = MsiGetPropertyA(hpkg, "Prop", buf, &size);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA(buf, "Val"), "Expected \"Val\", got \"%s\"\n", buf);
+ ok(size == 3, "Expected 3, got %d\n", size);
+
+ /* update the property */
+ r = MsiSetPropertyA(hpkg, "Prop", "Nuvo");
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+
+ /* get the property */
+ size = MAX_PATH;
+ r = MsiGetPropertyA(hpkg, "Prop", buf, &size);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA(buf, "Nuvo"), "Expected \"Nuvo\", got \"%s\"\n", buf);
+ ok(size == 4, "Expected 4, got %d\n", size);
+
+ hdb = MsiGetActiveDatabase(hpkg);
+ ok(hdb != 0, "Expected a valid database handle\n");
+
+ /* set prop is not in the _Property table */
+ query = "SELECT * FROM `_Property` WHERE `Property` = 'Prop'";
+ r = do_query(hdb, query, &hrec);
+ ok(r == ERROR_BAD_QUERY_SYNTAX,
+ "Expected ERROR_BAD_QUERY_SYNTAX, got %d\n", r);
+
+ /* set prop is not in the Property table */
+ query = "SELECT * FROM `Property` WHERE `Property` = 'Prop'";
+ r = do_query(hdb, query, &hrec);
+ ok(r == ERROR_BAD_QUERY_SYNTAX,
+ "Expected ERROR_BAD_QUERY_SYNTAX, got %d\n", r);
+
+ MsiCloseHandle(hdb);
+
+ /* szValue is an empty string */
+ r = MsiSetPropertyA(hpkg, "Prop", "");
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+
+ /* try to get the property */
+ size = MAX_PATH;
+ r = MsiGetPropertyA(hpkg, "Prop", 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);
+
+ /* reset the property */
+ r = MsiSetPropertyA(hpkg, "Prop", "BlueTap");
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+
+ /* delete the property */
+ r = MsiSetPropertyA(hpkg, "Prop", NULL);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+
+ /* try to get the property */
+ size = MAX_PATH;
+ r = MsiGetPropertyA(hpkg, "Prop", 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);
+
+ MsiCloseHandle(hpkg);
+ DeleteFileA(msifile);
+}
+
+static void test_MsiApplyMultiplePatches(void)
+{
+ UINT r, type = GetDriveType(NULL);
+
+ if (!pMsiApplyMultiplePatchesA) {
+ win_skip("MsiApplyMultiplePatchesA not found\n");
+ return;
+ }
+
+ r = pMsiApplyMultiplePatchesA(NULL, NULL, NULL);
+ ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %u\n", r);
+
+ r = pMsiApplyMultiplePatchesA("", NULL, NULL);
+ ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %u\n", r);
+
+ r = pMsiApplyMultiplePatchesA(";", NULL, NULL);
+ todo_wine
+ {
+ if (type == DRIVE_FIXED)
+ ok(r == ERROR_PATH_NOT_FOUND,
+ "Expected ERROR_PATH_NOT_FOUND, got %u\n", r);
+ else
+ ok(r == ERROR_INVALID_NAME,
+ "Expected ERROR_INVALID_NAME, got %u\n", r);
+ }
+
+ r = pMsiApplyMultiplePatchesA(" ;", NULL, NULL);
+ todo_wine
+ {
+ if (type == DRIVE_FIXED)
+ ok(r == ERROR_PATCH_PACKAGE_OPEN_FAILED,
+ "Expected ERROR_PATCH_PACKAGE_OPEN_FAILED, got %u\n", r);
+ else
+ ok(r == ERROR_INVALID_NAME,
+ "Expected ERROR_INVALID_NAME, got %u\n", r);
+ }
+
+ r = pMsiApplyMultiplePatchesA(";;", NULL, NULL);
+ todo_wine
+ {
+ if (type == DRIVE_FIXED)
+ ok(r == ERROR_PATH_NOT_FOUND,
+ "Expected ERROR_PATH_NOT_FOUND, got %u\n", r);
+ else
+ ok(r == ERROR_INVALID_NAME,
+ "Expected ERROR_INVALID_NAME, got %u\n", r);
+ }
+
+ r = pMsiApplyMultiplePatchesA("nosuchpatchpackage;", NULL, NULL);
+ todo_wine ok(r == ERROR_FILE_NOT_FOUND, "Expected ERROR_FILE_NOT_FOUND, got %u\n", r);
+
+ r = pMsiApplyMultiplePatchesA(";nosuchpatchpackage", NULL, NULL);
+ todo_wine
+ {
+ if (type == DRIVE_FIXED)
+ ok(r == ERROR_PATH_NOT_FOUND,
+ "Expected ERROR_PATH_NOT_FOUND, got %u\n", r);
+ else
+ ok(r == ERROR_INVALID_NAME,
+ "Expected ERROR_INVALID_NAME, got %u\n", r);
+ }
+
+ r = pMsiApplyMultiplePatchesA("nosuchpatchpackage;nosuchpatchpackage", NULL, NULL);
+ todo_wine ok(r == ERROR_FILE_NOT_FOUND, "Expected ERROR_FILE_NOT_FOUND, got %u\n", r);
+
+ r = pMsiApplyMultiplePatchesA(" nosuchpatchpackage ; nosuchpatchpackage ", NULL, NULL);
+ todo_wine ok(r == ERROR_FILE_NOT_FOUND, "Expected ERROR_FILE_NOT_FOUND, got %u\n", r);
+}
+
+static void test_MsiApplyPatch(void)
+{
+ UINT r;
+
+ r = MsiApplyPatch(NULL, NULL, INSTALLTYPE_DEFAULT, NULL);
+ ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %u\n", r);
+
+ r = MsiApplyPatch("", NULL, INSTALLTYPE_DEFAULT, NULL);
+ ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %u\n", r);
+}
+
START_TEST(package)
{
+ STATEMGRSTATUS status;
+ BOOL ret = FALSE;
+
+ init_functionpointers();
+
GetCurrentDirectoryA(MAX_PATH, CURR_DIR);
+ /* Create a restore point ourselves so we circumvent the multitude of restore points
+ * that would have been created by all the installation and removal tests.
+ */
+ if (pSRSetRestorePointA)
+ {
+ memset(&status, 0, sizeof(status));
+ ret = notify_system_change(BEGIN_NESTED_SYSTEM_CHANGE, &status);
+ }
+
test_createpackage();
test_doaction();
test_gettargetpath_bad();
test_access();
test_emptypackage();
test_MsiGetProductProperty();
+ test_MsiSetProperty();
+ test_MsiApplyMultiplePatches();
+ test_MsiApplyPatch();
+
+ if (pSRSetRestorePointA && ret)
+ {
+ ret = notify_system_change(END_NESTED_SYSTEM_CHANGE, &status);
+ if (ret)
+ remove_restore_point(status.llSequenceNumber);
+ }
}