msi: Test getting the source path from a package with compressed files.
This commit is contained in:
parent
45f9cb4d62
commit
e806a285ef
|
@ -5237,12 +5237,30 @@ static void test_complocator(void)
|
|||
DeleteFileA(msifile);
|
||||
}
|
||||
|
||||
static void set_suminfo_prop(MSIHANDLE db, DWORD prop, DWORD val)
|
||||
{
|
||||
MSIHANDLE summary;
|
||||
UINT r;
|
||||
|
||||
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);
|
||||
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;
|
||||
|
||||
|
@ -5253,15 +5271,29 @@ static void test_MsiGetSourcePath(void)
|
|||
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");
|
||||
|
||||
|
@ -5340,6 +5372,15 @@ static void test_MsiGetSourcePath(void)
|
|||
"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");
|
||||
|
||||
|
@ -5387,6 +5428,14 @@ static void test_MsiGetSourcePath(void)
|
|||
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");
|
||||
|
||||
|
@ -5431,6 +5480,14 @@ static void test_MsiGetSourcePath(void)
|
|||
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 = MsiDoAction(hpkg, "FileCost");
|
||||
ok(r == ERROR_SUCCESS, "file cost failed\n");
|
||||
|
||||
|
@ -5467,6 +5524,14 @@ static void test_MsiGetSourcePath(void)
|
|||
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 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);
|
||||
|
||||
r = MsiDoAction(hpkg, "CostFinalize");
|
||||
ok(r == ERROR_SUCCESS, "file cost failed\n");
|
||||
|
||||
|
@ -5503,6 +5568,14 @@ static void test_MsiGetSourcePath(void)
|
|||
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 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);
|
||||
|
||||
/* nonexistent directory */
|
||||
size = MAX_PATH;
|
||||
lstrcpyA(path, "kiwi");
|
||||
|
@ -5552,6 +5625,74 @@ static void test_MsiGetSourcePath(void)
|
|||
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);
|
||||
|
||||
/* 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);
|
||||
|
||||
/* 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);
|
||||
|
||||
/* try SOURCEDIR after CostFinalize */
|
||||
size = MAX_PATH;
|
||||
lstrcpyA(path, "kiwi");
|
||||
r = MsiGetSourcePath(hpkg, "SOURCEDIR", path, &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 CostFinalize */
|
||||
size = MAX_PATH;
|
||||
lstrcpyA(path, "kiwi");
|
||||
r = MsiGetSourcePath(hpkg, "SubDir", 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 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);
|
||||
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);
|
||||
}
|
||||
|
||||
MsiCloseHandle(hpkg);
|
||||
DeleteFile(msifile);
|
||||
}
|
||||
|
|
|
@ -207,6 +207,14 @@ enum msidbAssemblyAttributes
|
|||
msidbAssemblyAttributesWin32 = 0x00000001,
|
||||
};
|
||||
|
||||
enum msidbSumInfoSourceType
|
||||
{
|
||||
msidbSumInfoSourceTypeSFN = 0x00000001,
|
||||
msidbSumInfoSourceTypeCompressed = 0x00000002,
|
||||
msidbSumInfoSourceTypeAdminImage = 0x00000004,
|
||||
msidbSumInfoSourceTypeLUAPackage = 0x00000008,
|
||||
};
|
||||
|
||||
/*
|
||||
* Windows SDK braindamage alert
|
||||
*
|
||||
|
|
Loading…
Reference in New Issue