static void test_SetupDecompressOrCopyFile(void) { DWORD ret; char source[MAX_PATH], target[MAX_PATH], temp[MAX_PATH], *p; UINT type; int i; const struct { PCSTR source; PCSTR target; PUINT type; } invalid_parameters[] = { {NULL, NULL, NULL}, {NULL, NULL, &type}, {NULL, target, NULL}, {NULL, target, &type}, {source, NULL, NULL}, {source, NULL, &type}, }; const struct { const char *filename; const BYTE *expected_buffer; const size_t buffer_size; } zip_multi_tests[] = { {"tristram", laurence, sizeof(laurence)}, {"tristram.txt", laurence, sizeof(laurence)}, {"wine", laurence, sizeof(laurence)}, {"wine.txt", laurence, sizeof(laurence)}, {"shandy", laurence, sizeof(laurence)}, {"shandy.txt", laurence, sizeof(laurence)}, {"deadbeef", laurence, sizeof(laurence)}, {"deadbeef.txt", laurence, sizeof(laurence)}, }; GetTempPathA(sizeof(temp), temp); GetTempFileNameA(temp, "doc", 0, source); GetTempFileNameA(temp, "doc", 0, target); /* parameter tests */ create_source_file(source, uncompressed, sizeof(uncompressed)); for (i = 0; i < sizeof(invalid_parameters)/sizeof(invalid_parameters[0]); i++) { type = FILE_COMPRESSION_NONE; ret = SetupDecompressOrCopyFileA(invalid_parameters[i].source, invalid_parameters[i].target, invalid_parameters[i].type); ok(ret == ERROR_INVALID_PARAMETER, "[%d] Expected SetupDecompressOrCopyFileA to return ERROR_INVALID_PARAMETER, got %u\n", i, ret); /* try an invalid compression type */ type = 5; ret = SetupDecompressOrCopyFileA(invalid_parameters[i].source, invalid_parameters[i].target, invalid_parameters[i].type); ok(ret == ERROR_INVALID_PARAMETER, "[%d] Expected SetupDecompressOrCopyFileA to return ERROR_INVALID_PARAMETER, got %u\n", i, ret); } type = 5; /* try an invalid compression type */ ret = SetupDecompressOrCopyFileA(source, target, &type); ok(ret == ERROR_INVALID_PARAMETER, "SetupDecompressOrCopyFile failed unexpectedly\n"); DeleteFileA(target); /* no compression tests */ ret = SetupDecompressOrCopyFileA(source, target, NULL); ok(!ret, "SetupDecompressOrCopyFile failed unexpectedly: %d\n", ret); ok(compare_file_data(target, uncompressed, sizeof(uncompressed)), "incorrect target file\n"); /* try overwriting existing file */ ret = SetupDecompressOrCopyFileA(source, target, NULL); ok(!ret, "SetupDecompressOrCopyFile failed unexpectedly: %d\n", ret); DeleteFileA(target); type = FILE_COMPRESSION_NONE; ret = SetupDecompressOrCopyFileA(source, target, &type); ok(!ret, "SetupDecompressOrCopyFile failed unexpectedly: %d\n", ret); ok(compare_file_data(target, uncompressed, sizeof(uncompressed)), "incorrect target file\n"); DeleteFileA(target); type = FILE_COMPRESSION_WINLZA; ret = SetupDecompressOrCopyFileA(source, target, &type); ok(!ret, "SetupDecompressOrCopyFile failed unexpectedly: %d\n", ret); ok(compare_file_data(target, uncompressed, sizeof(uncompressed)), "incorrect target file\n"); DeleteFileA(target); /* lz compression tests */ create_source_file(source, comp_lzx, sizeof(comp_lzx)); ret = SetupDecompressOrCopyFileA(source, target, NULL); ok(!ret, "SetupDecompressOrCopyFile failed unexpectedly: %d\n", ret); DeleteFileA(target); /* zip compression tests */ create_source_file(source, comp_zip, sizeof(comp_zip)); ret = SetupDecompressOrCopyFileA(source, target, NULL); ok(!ret, "SetupDecompressOrCopyFile failed unexpectedly: %d\n", ret); ok(compare_file_data(target, comp_zip, sizeof(comp_zip)), "incorrect target file\n"); DeleteFileA(target); /* cabinet compression tests */ create_source_file(source, comp_cab_zip, sizeof(comp_cab_zip)); p = strrchr(target, '\\'); lstrcpyA(p + 1, "wine"); ret = SetupDecompressOrCopyFileA(source, target, NULL); ok(!ret, "SetupDecompressOrCopyFile failed unexpectedly: %d\n", ret); ok(compare_file_data(target, uncompressed, sizeof(uncompressed)), "incorrect target file\n"); /* try overwriting existing file */ ret = SetupDecompressOrCopyFileA(source, target, NULL); ok(!ret, "SetupDecompressOrCopyFile failed unexpectedly: %d\n", ret); /* try zip compression */ type = FILE_COMPRESSION_MSZIP; ret = SetupDecompressOrCopyFileA(source, target, &type); ok(!ret, "SetupDecompressOrCopyFile failed unexpectedly: %d\n", ret); ok(compare_file_data(target, uncompressed, sizeof(uncompressed)), "incorrect target file\n"); /* try no compression */ type = FILE_COMPRESSION_NONE; ret = SetupDecompressOrCopyFileA(source, target, &type); ok(!ret, "SetupDecompressOrCopyFile failed unexpectedly: %d\n", ret); ok(compare_file_data(target, comp_cab_zip, sizeof(comp_cab_zip)), "incorrect target file\n"); /* Show that SetupDecompressOrCopyFileA simply extracts the first file it * finds within the compressed cabinet. Contents are: * tristram -> "laurence\r\n" * wine -> "uncompressed\r\n" * shandy -> "sterne\r\n" */ create_source_file(source, comp_cab_zip_multi, sizeof(comp_cab_zip_multi)); p = strrchr(target, '\\'); for (i = 0; i < sizeof(zip_multi_tests)/sizeof(zip_multi_tests[0]); i++) { lstrcpyA(p + 1, zip_multi_tests[i].filename); ret = SetupDecompressOrCopyFileA(source, target, NULL); ok(!ret, "[%d] SetupDecompressOrCopyFile failed unexpectedly: %d\n", i, ret); ok(compare_file_data(target, zip_multi_tests[i].expected_buffer, zip_multi_tests[i].buffer_size), "[%d] incorrect target file\n", i); DeleteFileA(target); } DeleteFileA(source); }
static void test_SetupDecompressOrCopyFile(void) { DWORD ret; char source[MAX_PATH], target[MAX_PATH], temp[MAX_PATH], *p; UINT type; GetTempPathA(sizeof(temp), temp); GetTempFileNameA(temp, "doc", 0, source); GetTempFileNameA(temp, "doc", 0, target); /* parameter tests */ create_source_file(source, uncompressed, sizeof(uncompressed)); ret = SetupDecompressOrCopyFileA(NULL, NULL, NULL); ok(ret == ERROR_INVALID_PARAMETER, "SetupDecompressOrCopyFile failed unexpectedly\n"); type = FILE_COMPRESSION_NONE; ret = SetupDecompressOrCopyFileA(NULL, target, &type); ok(ret == ERROR_INVALID_PARAMETER, "SetupDecompressOrCopyFile failed unexpectedly\n"); ret = SetupDecompressOrCopyFileA(source, NULL, &type); ok(ret == ERROR_INVALID_PARAMETER, "SetupDecompressOrCopyFile failed unexpectedly\n"); type = 5; /* try an invalid compression type */ ret = SetupDecompressOrCopyFileA(source, target, &type); ok(ret == ERROR_INVALID_PARAMETER, "SetupDecompressOrCopyFile failed unexpectedly\n"); DeleteFileA(target); /* no compression tests */ ret = SetupDecompressOrCopyFileA(source, target, NULL); ok(!ret, "SetupDecompressOrCopyFile failed unexpectedly: %d\n", ret); ok(compare_file_data(target, uncompressed, sizeof(uncompressed)), "incorrect target file\n"); /* try overwriting existing file */ ret = SetupDecompressOrCopyFileA(source, target, NULL); ok(!ret, "SetupDecompressOrCopyFile failed unexpectedly: %d\n", ret); DeleteFileA(target); type = FILE_COMPRESSION_NONE; ret = SetupDecompressOrCopyFileA(source, target, &type); ok(!ret, "SetupDecompressOrCopyFile failed unexpectedly: %d\n", ret); ok(compare_file_data(target, uncompressed, sizeof(uncompressed)), "incorrect target file\n"); DeleteFileA(target); type = FILE_COMPRESSION_WINLZA; ret = SetupDecompressOrCopyFileA(source, target, &type); ok(!ret, "SetupDecompressOrCopyFile failed unexpectedly: %d\n", ret); ok(compare_file_data(target, uncompressed, sizeof(uncompressed)), "incorrect target file\n"); DeleteFileA(target); /* lz compression tests */ create_source_file(source, comp_lzx, sizeof(comp_lzx)); ret = SetupDecompressOrCopyFileA(source, target, NULL); ok(!ret, "SetupDecompressOrCopyFile failed unexpectedly: %d\n", ret); DeleteFileA(target); /* zip compression tests */ create_source_file(source, comp_zip, sizeof(comp_zip)); ret = SetupDecompressOrCopyFileA(source, target, NULL); ok(!ret, "SetupDecompressOrCopyFile failed unexpectedly: %d\n", ret); ok(compare_file_data(target, comp_zip, sizeof(comp_zip)), "incorrect target file\n"); DeleteFileA(target); /* cabinet compression tests */ create_source_file(source, comp_cab_zip, sizeof(comp_cab_zip)); p = strrchr(target, '\\'); lstrcpyA(p + 1, "wine"); ret = SetupDecompressOrCopyFileA(source, target, NULL); ok(!ret, "SetupDecompressOrCopyFile failed unexpectedly: %d\n", ret); ok(compare_file_data(target, uncompressed, sizeof(uncompressed)), "incorrect target file\n"); /* try overwriting existing file */ ret = SetupDecompressOrCopyFileA(source, target, NULL); ok(!ret, "SetupDecompressOrCopyFile failed unexpectedly: %d\n", ret); /* try zip compression */ type = FILE_COMPRESSION_MSZIP; ret = SetupDecompressOrCopyFileA(source, target, &type); ok(!ret, "SetupDecompressOrCopyFile failed unexpectedly: %d\n", ret); ok(compare_file_data(target, uncompressed, sizeof(uncompressed)), "incorrect target file\n"); /* try no compression */ type = FILE_COMPRESSION_NONE; ret = SetupDecompressOrCopyFileA(source, target, &type); ok(!ret, "SetupDecompressOrCopyFile failed unexpectedly: %d\n", ret); ok(compare_file_data(target, comp_cab_zip, sizeof(comp_cab_zip)), "incorrect target file\n"); DeleteFileA(target); DeleteFileA(source); }