Author: cwittich Date: Sat Feb 6 22:29:15 2010 New Revision: 45469
URL: http://svn.reactos.org/svn/reactos?rev=45469&view=rev Log: [MSI_WINETEST] sync msi_winetest to wine 1.1.38
Modified: trunk/rostests/winetests/msi/db.c trunk/rostests/winetests/msi/install.c trunk/rostests/winetests/msi/package.c trunk/rostests/winetests/msi/record.c
Modified: trunk/rostests/winetests/msi/db.c URL: http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/msi/db.c?rev=454... ============================================================================== --- trunk/rostests/winetests/msi/db.c [iso-8859-1] (original) +++ trunk/rostests/winetests/msi/db.c [iso-8859-1] Sat Feb 6 22:29:15 2010 @@ -1454,8 +1454,30 @@ MsiViewClose( view ); MsiCloseHandle( view );
+ /* insert another one */ + create_file( "test1.txt" ); + + rec = MsiCreateRecord( 2 ); + MsiRecordSetString( rec, 1, "data1" ); + + r = MsiRecordSetStream( rec, 2, "test1.txt" ); + ok( r == ERROR_SUCCESS, "Failed to add stream data to the record: %d\n", r); + + DeleteFile("test1.txt"); + r = MsiDatabaseOpenView( hdb, - "SELECT `Name`, `Data` FROM `_Streams`", &view ); + "INSERT INTO `_Streams` ( `Name`, `Data` ) VALUES ( ?, ? )", &view ); + ok( r == ERROR_SUCCESS, "Failed to open database view: %d\n", r); + + r = MsiViewExecute( view, rec ); + ok( r == ERROR_SUCCESS, "Failed to execute view: %d\n", r); + + MsiCloseHandle( rec ); + MsiViewClose( view ); + MsiCloseHandle( view ); + + r = MsiDatabaseOpenView( hdb, + "SELECT `Name`, `Data` FROM `_Streams` WHERE `Name` = 'data'", &view ); ok( r == ERROR_SUCCESS, "Failed to open database view: %d\n", r);
r = MsiViewExecute( view, 0 ); @@ -1476,10 +1498,76 @@ ok( !lstrcmp(buf, "test.txt\n"), "Expected 'test.txt\n', got %s\n", buf);
MsiCloseHandle( rec ); + MsiViewClose( view ); + MsiCloseHandle( view ); + + r = MsiDatabaseOpenView( hdb, + "SELECT `Name`, `Data` FROM `_Streams` WHERE `Name` = 'data1'", &view ); + ok( r == ERROR_SUCCESS, "Failed to open database view: %d\n", r); + + r = MsiViewExecute( view, 0 ); + ok( r == ERROR_SUCCESS, "Failed to execute view: %d\n", r);
r = MsiViewFetch( view, &rec ); - ok( r == ERROR_NO_MORE_ITEMS, "Expected ERROR_NO_MORE_ITEMS, got %d\n", r); - + ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); + + size = MAX_PATH; + r = MsiRecordGetString( rec, 1, file, &size ); + ok( r == ERROR_SUCCESS, "Failed to get string: %d\n", r); + ok( !lstrcmp(file, "data1"), "Expected 'data1', got %s\n", file); + + size = MAX_PATH; + memset(buf, 0, MAX_PATH); + r = MsiRecordReadStream( rec, 2, buf, &size ); + ok( r == ERROR_SUCCESS, "Failed to get stream: %d\n", r); + ok( !lstrcmp(buf, "test1.txt\n"), "Expected 'test1.txt\n', got %s\n", buf); + + MsiCloseHandle( rec ); + MsiViewClose( view ); + MsiCloseHandle( view ); + + /* perform an update */ + create_file( "test2.txt" ); + rec = MsiCreateRecord( 1 ); + + r = MsiRecordSetStream( rec, 1, "test2.txt" ); + ok( r == ERROR_SUCCESS, "Failed to add stream data to the record: %d\n", r); + + DeleteFile("test2.txt"); + + r = MsiDatabaseOpenView( hdb, + "UPDATE `_Streams` SET `Data` = ? WHERE `Name` = 'data1'", &view ); + ok( r == ERROR_SUCCESS, "Failed to open database view: %d\n", r); + + r = MsiViewExecute( view, rec ); + ok( r == ERROR_SUCCESS, "Failed to execute view: %d\n", r); + + MsiCloseHandle( rec ); + MsiViewClose( view ); + MsiCloseHandle( view ); + + r = MsiDatabaseOpenView( hdb, + "SELECT `Name`, `Data` FROM `_Streams` WHERE `Name` = 'data1'", &view ); + ok( r == ERROR_SUCCESS, "Failed to open database view: %d\n", r); + + r = MsiViewExecute( view, 0 ); + ok( r == ERROR_SUCCESS, "Failed to execute view: %d\n", r); + + r = MsiViewFetch( view, &rec ); + ok( r == ERROR_SUCCESS, "Failed to fetch record: %d\n", r); + + size = MAX_PATH; + r = MsiRecordGetString( rec, 1, file, &size ); + ok( r == ERROR_SUCCESS, "Failed to get string: %d\n", r); + ok( !lstrcmp(file, "data1"), "Expected 'data1', got %s\n", file); + + size = MAX_PATH; + memset(buf, 0, MAX_PATH); + r = MsiRecordReadStream( rec, 2, buf, &size ); + ok( r == ERROR_SUCCESS, "Failed to get stream: %d\n", r); + todo_wine ok( !lstrcmp(buf, "test2.txt\n"), "Expected 'test2.txt\n', got %s\n", buf); + + MsiCloseHandle( rec ); MsiViewClose( view ); MsiCloseHandle( view ); MsiCloseHandle( hdb ); @@ -3644,6 +3732,63 @@ r = MsiDatabaseOpenView(hdb, query, &hview); ok( r == ERROR_BAD_QUERY_SYNTAX, "Expected ERROR_BAD_QUERY_SYNTAX, got %d\n", r ); + + /* try updating a row in a join table */ + query = "SELECT `Component`.`ComponentId`, `FeatureComponents`.`Feature_` " + "FROM `Component`, `FeatureComponents` " + "WHERE `Component`.`Component` = `FeatureComponents`.`Component_` " + "ORDER BY `Feature_`"; + r = MsiDatabaseOpenView(hdb, query, &hview); + ok( r == ERROR_SUCCESS, "failed to open view: %d\n", r ); + + r = MsiViewExecute(hview, 0); + ok( r == ERROR_SUCCESS, "failed to execute view: %d\n", r ); + + r = MsiViewFetch(hview, &hrec); + ok( r == ERROR_SUCCESS, "failed to fetch view: %d\n", r ); + + r = MsiRecordSetString( hrec, 1, "epicranius" ); + ok( r == ERROR_SUCCESS, "failed to set string: %d\n", r ); + + r = MsiViewModify(hview, MSIMODIFY_UPDATE, hrec); + ok( r == ERROR_SUCCESS, "failed to update row: %d\n", r ); + + /* try another valid operation for joins */ + r = MsiViewModify(hview, MSIMODIFY_REFRESH, hrec); + todo_wine ok( r == ERROR_SUCCESS, "failed to refresh row: %d\n", r ); + + /* try an invalid operation for joins */ + r = MsiViewModify(hview, MSIMODIFY_DELETE, hrec); + ok( r == ERROR_FUNCTION_FAILED, "unexpected result: %d\n", r ); + + r = MsiRecordSetString( hrec, 2, "epicranius" ); + ok( r == ERROR_SUCCESS, "failed to set string: %d\n", r ); + + /* primary key cannot be updated */ + r = MsiViewModify(hview, MSIMODIFY_UPDATE, hrec); + todo_wine ok( r == ERROR_FUNCTION_FAILED, "failed to update row: %d\n", r ); + + MsiCloseHandle(hrec); + MsiViewClose(hview); + MsiCloseHandle(hview); + + r = MsiDatabaseOpenView(hdb, query, &hview); + ok(r == ERROR_SUCCESS, "MsiDatabaseOpenView failed\n"); + + r = MsiViewExecute(hview, 0); + ok(r == ERROR_SUCCESS, "MsiViewExecute failed\n"); + + r = MsiViewFetch(hview, &hrec); + ok(r == ERROR_SUCCESS, "MsiViewFetch failed\n"); + + size = MAX_PATH; + r = MsiRecordGetString( hrec, 1, buf, &size ); + ok( r == ERROR_SUCCESS, "failed to get record string: %d\n", r ); + ok( !lstrcmp( buf, "epicranius" ), "expected 'epicranius', got %s\n", buf ); + + MsiCloseHandle(hrec); + MsiViewClose(hview); + MsiCloseHandle(hview);
MsiCloseHandle(hdb); DeleteFile(msifile);
Modified: trunk/rostests/winetests/msi/install.c URL: http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/msi/install.c?re... ============================================================================== --- trunk/rostests/winetests/msi/install.c [iso-8859-1] (original) +++ trunk/rostests/winetests/msi/install.c [iso-8859-1] Sat Feb 6 22:29:15 2010 @@ -226,7 +226,36 @@ "Var7\t!-MSITESTVAR7\t\tOne\n" "Var8\t!-*MSITESTVAR8\t\tOne\n" "Var9\t=-MSITESTVAR9\t\tOne\n" - "Var10\t=MSITESTVAR10\t\tOne\n"; + "Var10\t=MSITESTVAR10\t\tOne\n" + "Var11\t+-MSITESTVAR11\t[~];1\tOne\n" + "Var12\t+-MSITESTVAR11\t[~];2\tOne\n" + "Var13\t+-MSITESTVAR12\t[~];1\tOne\n" + "Var14\t=MSITESTVAR13\t[~];1\tOne\n" + "Var15\t=MSITESTVAR13\t[~];2\tOne\n" + "Var16\t=MSITESTVAR14\t;1;\tOne\n" + "Var17\t=MSITESTVAR15\t;;1;;\tOne\n" + "Var18\t=MSITESTVAR16\t 1 \tOne\n" + "Var19\t+-MSITESTVAR17\t1\tOne\n" + "Var20\t+-MSITESTVAR17\t;;2;;[~]\tOne\n" + "Var21\t+-MSITESTVAR18\t1\tOne\n" + "Var22\t+-MSITESTVAR18\t[~];;2;;\tOne\n" + "Var23\t+-MSITESTVAR19\t1\tOne\n" + "Var24\t+-MSITESTVAR19\t[~]2\tOne\n" + "Var25\t+-MSITESTVAR20\t1\tOne\n" + "Var26\t+-MSITESTVAR20\t2[~]\tOne\n"; + +/* Expected results, starting from MSITESTVAR11 onwards */ +static const CHAR *environment_dat_results[] = {"1;2", /*MSITESTVAR11*/ + "1", /*MSITESTVAR12*/ + "1;2", /*MSITESTVAR13*/ + ";1;", /*MSITESTVAR14*/ + ";;1;;", /*MSITESTVAR15*/ + " 1 ", /*MSITESTVAR16*/ + ";;2;;1", /*MSITESTVAR17*/ + "1;;2;;", /*MSITESTVAR18*/ + "1", /*MSITESTVAR19*/ + "1", /*MSITESTVAR20*/ + NULL};
static const CHAR condition_dat[] = "Feature_\tLevel\tCondition\n" "s38\ti2\tS255\n" @@ -320,6 +349,30 @@ "ServiceControl\tServiceControl\n" "ServiceControl\tTestService\t8\t\t0\tservice_comp";
+static const CHAR sss_service_control_dat[] = "ServiceControl\tName\tEvent\tArguments\tWait\tComponent_\n" + "s72\tl255\ti2\tL255\tI2\ts72\n" + "ServiceControl\tServiceControl\n" + "ServiceControl\tSpooler\t1\t\t0\tservice_comp"; + +static const CHAR sss_install_exec_seq_dat[] = "Action\tCondition\tSequence\n" + "s72\tS255\tI2\n" + "InstallExecuteSequence\tAction\n" + "CostFinalize\t\t1000\n" + "CostInitialize\t\t800\n" + "FileCost\t\t900\n" + "ResolveSource\t\t950\n" + "MoveFiles\t\t1700\n" + "InstallFiles\t\t4000\n" + "DuplicateFiles\t\t4500\n" + "WriteEnvironmentStrings\t\t4550\n" + "CreateShortcuts\t\t4600\n" + "StartServices\t\t5000\n" + "DeleteServices\t\t5500\n" + "InstallFinalize\t\t6600\n" + "InstallInitialize\t\t1500\n" + "InstallValidate\t\t1400\n" + "LaunchConditions\t\t100\n"; + /* tables for test_continuouscabs */ static const CHAR cc_component_dat[] = "Component\tComponentId\tDirectory_\tAttributes\tCondition\tKeyPath\n" "s72\tS38\ts72\ti2\tS255\tS72\n" @@ -785,7 +838,8 @@ "s72\ts72\ts72\tS255\tS72\n" "DuplicateFile\tFileKey\n" "maximus\tmaximus\tmaximus\taugustus\t\n" - "caesar\tmaximus\tmaximus\t\tNONEXISTENT\n"; + "caesar\tmaximus\tmaximus\t\tNONEXISTENT\n" + "augustus\tnosuchcomponent\tmaximus\t\tMSITESTDIR\n";
static const CHAR wrv_component_dat[] = "Component\tComponentId\tDirectory_\tAttributes\tCondition\tKeyPath\n" "s72\tS38\ts72\ti2\tS255\tS72\n" @@ -1034,6 +1088,87 @@ "CustomAction\tAction\n" "TestAllUsersProp\t19\t\tTest failed\t\n";
+static const CHAR cf_create_folders_dat[] = "Directory_\tComponent_\n" + "s72\ts72\n" + "CreateFolder\tDirectory_\tComponent_\n" + "MSITESTDIR\tOne\n"; + +static const CHAR cf_install_exec_seq_dat[] = "Action\tCondition\tSequence\n" + "s72\tS255\tI2\n" + "InstallExecuteSequence\tAction\n" + "CostFinalize\t\t1000\n" + "ValidateProductID\t\t700\n" + "CostInitialize\t\t800\n" + "FileCost\t\t900\n" + "RemoveFiles\t\t3500\n" + "CreateFolders\t\t3700\n" + "InstallExecute\t\t3800\n" + "TestCreateFolders\t\t3900\n" + "InstallFiles\t\t4000\n" + "RegisterUser\t\t6000\n" + "RegisterProduct\t\t6100\n" + "PublishFeatures\t\t6300\n" + "PublishProduct\t\t6400\n" + "InstallFinalize\t\t6600\n" + "InstallInitialize\t\t1500\n" + "ProcessComponents\t\t1600\n" + "UnpublishFeatures\t\t1800\n" + "InstallValidate\t\t1400\n" + "LaunchConditions\t\t100\n"; + +static const CHAR cf_custom_action_dat[] = "Action\tType\tSource\tTarget\tISComments\n" + "s72\ti2\tS64\tS0\tS255\n" + "CustomAction\tAction\n" + "TestCreateFolders\t19\t\tHalts installation\t\n"; + +static const CHAR rf_install_exec_seq_dat[] = "Action\tCondition\tSequence\n" + "s72\tS255\tI2\n" + "InstallExecuteSequence\tAction\n" + "CostFinalize\t\t1000\n" + "ValidateProductID\t\t700\n" + "CostInitialize\t\t800\n" + "FileCost\t\t900\n" + "RemoveFiles\t\t3500\n" + "CreateFolders\t\t3600\n" + "RemoveFolders\t\t3700\n" + "InstallExecute\t\t3800\n" + "TestCreateFolders\t\t3900\n" + "InstallFiles\t\t4000\n" + "RegisterUser\t\t6000\n" + "RegisterProduct\t\t6100\n" + "PublishFeatures\t\t6300\n" + "PublishProduct\t\t6400\n" + "InstallFinalize\t\t6600\n" + "InstallInitialize\t\t1500\n" + "ProcessComponents\t\t1600\n" + "UnpublishFeatures\t\t1800\n" + "InstallValidate\t\t1400\n" + "LaunchConditions\t\t100\n"; + + +static const CHAR sr_selfreg_dat[] = "File_\tCost\n" + "s72\tI2\n" + "SelfReg\tFile_\n" + "one.txt\t1\n"; + +static const CHAR sr_install_exec_seq_dat[] = "Action\tCondition\tSequence\n" + "s72\tS255\tI2\n" + "InstallExecuteSequence\tAction\n" + "CostFinalize\t\t1000\n" + "CostInitialize\t\t800\n" + "FileCost\t\t900\n" + "ResolveSource\t\t950\n" + "MoveFiles\t\t1700\n" + "SelfUnregModules\t\t3900\n" + "InstallFiles\t\t4000\n" + "DuplicateFiles\t\t4500\n" + "WriteEnvironmentStrings\t\t4550\n" + "CreateShortcuts\t\t4600\n" + "InstallFinalize\t\t6600\n" + "InstallInitialize\t\t1500\n" + "InstallValidate\t\t1400\n" + "LaunchConditions\t\t100\n"; + typedef struct _msi_table { const CHAR *filename; @@ -1735,6 +1870,73 @@ ADD_TABLE(pp_install_exec_seq), ADD_TABLE(rofc_media), ADD_TABLE(property), +}; + +static const msi_table cf_tables[] = +{ + ADD_TABLE(component), + ADD_TABLE(directory), + ADD_TABLE(feature), + ADD_TABLE(feature_comp), + ADD_TABLE(file), + ADD_TABLE(cf_create_folders), + ADD_TABLE(cf_install_exec_seq), + ADD_TABLE(cf_custom_action), + ADD_TABLE(media), + ADD_TABLE(property) +}; + +static const msi_table rf_tables[] = +{ + ADD_TABLE(component), + ADD_TABLE(directory), + ADD_TABLE(feature), + ADD_TABLE(feature_comp), + ADD_TABLE(file), + ADD_TABLE(cf_create_folders), + ADD_TABLE(rf_install_exec_seq), + ADD_TABLE(cf_custom_action), + ADD_TABLE(media), + ADD_TABLE(property) +}; + +static const msi_table sss_tables[] = +{ + ADD_TABLE(component), + ADD_TABLE(directory), + ADD_TABLE(feature), + ADD_TABLE(feature_comp), + ADD_TABLE(file), + ADD_TABLE(sss_install_exec_seq), + ADD_TABLE(sss_service_control), + ADD_TABLE(media), + ADD_TABLE(property) +}; + +static const msi_table sds_tables[] = +{ + ADD_TABLE(component), + ADD_TABLE(directory), + ADD_TABLE(feature), + ADD_TABLE(feature_comp), + ADD_TABLE(file), + ADD_TABLE(sss_install_exec_seq), + ADD_TABLE(service_control), + ADD_TABLE(media), + ADD_TABLE(property) +}; + +static const msi_table sr_tables[] = +{ + ADD_TABLE(component), + ADD_TABLE(directory), + ADD_TABLE(feature), + ADD_TABLE(feature_comp), + ADD_TABLE(file), + ADD_TABLE(sr_selfreg), + ADD_TABLE(sr_install_exec_seq), + ADD_TABLE(media), + ADD_TABLE(property) };
/* cabinet definitions */ @@ -6732,6 +6934,7 @@ LONG res; DWORD type, size; char buffer[16]; + UINT i;
if (on_win9x) { @@ -6800,8 +7003,27 @@ res = RegDeleteValueA(env, "MSITESTVAR10"); ok(res == ERROR_FILE_NOT_FOUND, "Expected ERROR_FILE_NOT_FOUND, got %d\n", res);
+ i = 11; + while (environment_dat_results[(i-11)]) { + char name[20]; + sprintf(name, "MSITESTVAR%d", i); + + type = REG_NONE; + size = sizeof(buffer); + buffer[0] = 0; + res = RegQueryValueExA(env, name, NULL, &type, (LPBYTE)buffer, &size); + ok(res == ERROR_SUCCESS, "%d: Expected ERROR_SUCCESS, got %d\n", i, res); + ok(type == REG_SZ, "%d: Expected REG_SZ, got %u\n", i, type); + ok(!lstrcmp(buffer, environment_dat_results[(i-11)]), "%d: Expected %s, got %s\n", + i, environment_dat_results[(i-11)], buffer); + + res = RegDeleteValueA(env, name); + ok(res == ERROR_SUCCESS, "%d: Expected ERROR_SUCCESS, got %d\n", i, res); + i++; + } + + RegCloseKey(env); - delete_pf("msitest\cabout\new\five.txt", TRUE); delete_pf("msitest\cabout\new", FALSE); delete_pf("msitest\cabout\four.txt", TRUE); @@ -6836,9 +7058,9 @@ ok(!delete_pf("msitest\first\two.txt", TRUE), "File installed\n"); ok(!delete_pf("msitest\first", FALSE), "File installed\n"); ok(!delete_pf("msitest\filename", TRUE), "File installed\n"); - todo_wine ok(delete_pf("msitest\one.txt", TRUE), "File not installed\n"); + ok(delete_pf("msitest\one.txt", TRUE), "File not installed\n"); ok(!delete_pf("msitest\service.exe", TRUE), "File installed\n"); - todo_wine ok(delete_pf("msitest", FALSE), "File not installed\n"); + ok(delete_pf("msitest", FALSE), "File not installed\n");
r = MsiInstallProductA(msifile, NULL); ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r); @@ -6988,7 +7210,31 @@
/* ALLUSERS property set to 2, conditioned on ALLUSERS = 1 */ r = MsiInstallProductA(msifile, "FULL=1"); - ok(r == ERROR_INSTALL_FAILURE, "Expected ERROR_INSTALL_FAILURE, got %u\n", r); + if (r == ERROR_SUCCESS) + { + /* Win9x/WinMe */ + win_skip("Win9x and WinMe act differently with respect to ALLUSERS\n"); + + ok(delete_pf("msitest\cabout\new\five.txt", TRUE), "File not installed\n"); + ok(delete_pf("msitest\cabout\new", FALSE), "File not installed\n"); + ok(delete_pf("msitest\cabout\four.txt", TRUE), "File not installed\n"); + ok(delete_pf("msitest\cabout", FALSE), "File not installed\n"); + ok(delete_pf("msitest\changed\three.txt", TRUE), "File not installed\n"); + ok(delete_pf("msitest\changed", FALSE), "File not installed\n"); + ok(delete_pf("msitest\first\two.txt", TRUE), "File not installed\n"); + ok(delete_pf("msitest\first", FALSE), "File not installed\n"); + ok(delete_pf("msitest\filename", TRUE), "File not installed\n"); + ok(delete_pf("msitest\one.txt", TRUE), "File installed\n"); + ok(delete_pf("msitest\service.exe", TRUE), "File not installed\n"); + ok(delete_pf("msitest", FALSE), "File not installed\n"); + + r = MsiInstallProductA(msifile, "REMOVE=ALL"); + ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r); + + delete_test_files(); + } + else + ok(r == ERROR_INSTALL_FAILURE, "Expected ERROR_INSTALL_FAILURE, got %u\n", r); }
static char session_manager[] = "System\CurrentControlSet\Control\Session Manager"; @@ -7235,6 +7481,223 @@
error = pMsiSetExternalUIRecord(NULL, 0, NULL, NULL); ok(!error, "MsiSetExternalUIRecord failed %u\n", error); +} + +static void test_feature_override(void) +{ + UINT r; + + create_test_files(); + create_database(msifile, tables, sizeof(tables) / sizeof(msi_table)); + + r = MsiInstallProductA(msifile, "ADDLOCAL=One"); + ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r); + + ok(!delete_pf("msitest\cabout\new\five.txt", TRUE), "File installed\n"); + ok(!delete_pf("msitest\cabout\new", FALSE), "File installed\n"); + ok(!delete_pf("msitest\cabout\four.txt", TRUE), "File installed\n"); + ok(!delete_pf("msitest\cabout", FALSE), "File installed\n"); + ok(!delete_pf("msitest\changed\three.txt", TRUE), "File installed\n"); + ok(!delete_pf("msitest\changed", FALSE), "File installed\n"); + ok(!delete_pf("msitest\first\two.txt", TRUE), "File installed\n"); + ok(!delete_pf("msitest\first", FALSE), "File installed\n"); + ok(!delete_pf("msitest\filename", TRUE), "File installed\n"); + ok(delete_pf("msitest\one.txt", TRUE), "File not installed\n"); + ok(!delete_pf("msitest\service.exe", TRUE), "File installed\n"); + ok(delete_pf("msitest", FALSE), "File not installed\n"); + + delete_test_files(); +} + +static void test_create_folder(void) +{ + UINT r; + + create_test_files(); + create_database(msifile, cf_tables, sizeof(cf_tables) / sizeof(msi_table)); + + MsiSetInternalUI(INSTALLUILEVEL_NONE, NULL); + + r = MsiInstallProductA(msifile, NULL); + ok(r == ERROR_INSTALL_FAILURE, "Expected ERROR_INSTALL_FAILURE, got %u\n", r); + + ok(!delete_pf("msitest\cabout\new\five.txt", TRUE), "File installed\n"); + ok(!delete_pf("msitest\cabout\new", FALSE), "Directory created\n"); + ok(!delete_pf("msitest\cabout\four.txt", TRUE), "File installed\n"); + ok(!delete_pf("msitest\cabout", FALSE), "Directory created\n"); + ok(!delete_pf("msitest\changed\three.txt", TRUE), "File installed\n"); + ok(!delete_pf("msitest\changed", FALSE), "Directory created\n"); + ok(!delete_pf("msitest\first\two.txt", TRUE), "File installed\n"); + ok(!delete_pf("msitest\first", FALSE), "Directory created\n"); + ok(!delete_pf("msitest\filename", TRUE), "File installed\n"); + ok(!delete_pf("msitest\one.txt", TRUE), "File installed\n"); + ok(!delete_pf("msitest\service.exe", TRUE), "File installed\n"); + todo_wine ok(!delete_pf("msitest", FALSE), "Directory created\n"); + + delete_test_files(); +} + +static void test_remove_folder(void) +{ + UINT r; + + create_test_files(); + create_database(msifile, rf_tables, sizeof(rf_tables) / sizeof(msi_table)); + + MsiSetInternalUI(INSTALLUILEVEL_NONE, NULL); + + r = MsiInstallProductA(msifile, NULL); + ok(r == ERROR_INSTALL_FAILURE, "Expected ERROR_INSTALL_FAILURE, got %u\n", r); + + ok(!delete_pf("msitest\cabout\new\five.txt", TRUE), "File installed\n"); + ok(!delete_pf("msitest\cabout\new", FALSE), "Directory created\n"); + ok(!delete_pf("msitest\cabout\four.txt", TRUE), "File installed\n"); + ok(!delete_pf("msitest\cabout", FALSE), "Directory created\n"); + ok(!delete_pf("msitest\changed\three.txt", TRUE), "File installed\n"); + ok(!delete_pf("msitest\changed", FALSE), "Directory created\n"); + ok(!delete_pf("msitest\first\two.txt", TRUE), "File installed\n"); + ok(!delete_pf("msitest\first", FALSE), "Directory created\n"); + ok(!delete_pf("msitest\filename", TRUE), "File installed\n"); + ok(!delete_pf("msitest\one.txt", TRUE), "File installed\n"); + ok(!delete_pf("msitest\service.exe", TRUE), "File installed\n"); + ok(!delete_pf("msitest", FALSE), "Directory created\n"); + + delete_test_files(); +} + +static void test_start_services(void) +{ + UINT r; + SC_HANDLE scm, service; + BOOL ret; + DWORD error = ERROR_SUCCESS; + + if (on_win9x) + { + win_skip("Services are not implemented on Win9x and WinMe\n"); + return; + } + scm = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS); + ok(scm != NULL, "Failed to open the SC Manager\n"); + if (!scm) return; + + service = OpenService(scm, "Spooler", SC_MANAGER_ALL_ACCESS); + if (!service && GetLastError() == ERROR_SERVICE_DOES_NOT_EXIST) + { + win_skip("The 'Spooler' service does not exist\n"); + CloseServiceHandle(scm); + return; + } + ok(service != NULL, "Failed to open Spooler, error %d\n", GetLastError()); + if (!service) { + CloseServiceHandle(scm); + return; + } + + ret = StartService(service, 0, NULL); + if (!ret && (error = GetLastError()) != ERROR_SERVICE_ALREADY_RUNNING) + { + skip("Terminal service not available, skipping test\n"); + CloseServiceHandle(service); + CloseServiceHandle(scm); + return; + } + + CloseServiceHandle(service); + CloseServiceHandle(scm); + + create_test_files(); + create_database(msifile, sss_tables, sizeof(sss_tables) / sizeof(msi_table)); + + MsiSetInternalUI(INSTALLUILEVEL_NONE, NULL); + + r = MsiInstallProductA(msifile, NULL); + ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r); + + ok(delete_pf("msitest\cabout\new\five.txt", TRUE), "File not installed\n"); + ok(delete_pf("msitest\cabout\new", FALSE), "Directory not created\n"); + ok(delete_pf("msitest\cabout\four.txt", TRUE), "File not installed\n"); + ok(delete_pf("msitest\cabout", FALSE), "Directory not created\n"); + ok(delete_pf("msitest\changed\three.txt", TRUE), "File not installed\n"); + ok(delete_pf("msitest\changed", FALSE), "Directory not created\n"); + ok(delete_pf("msitest\first\two.txt", TRUE), "File not installed\n"); + ok(delete_pf("msitest\first", FALSE), "Directory not created\n"); + ok(delete_pf("msitest\filename", TRUE), "File not installed\n"); + ok(delete_pf("msitest\one.txt", TRUE), "File not installed\n"); + ok(delete_pf("msitest\service.exe", TRUE), "File not installed\n"); + ok(delete_pf("msitest", FALSE), "Directory not created\n"); + + delete_test_files(); + + if (error == ERROR_SUCCESS) + { + SERVICE_STATUS status; + + scm = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS); + service = OpenService(scm, "Spooler", SC_MANAGER_ALL_ACCESS); + + ret = ControlService(service, SERVICE_CONTROL_STOP, &status); + ok(ret, "ControlService failed %u\n", GetLastError()); + + CloseServiceHandle(service); + CloseServiceHandle(scm); + } +} + +static void test_delete_services(void) +{ + UINT r; + + create_test_files(); + create_database(msifile, sds_tables, sizeof(sds_tables) / sizeof(msi_table)); + + MsiSetInternalUI(INSTALLUILEVEL_NONE, NULL); + + r = MsiInstallProductA(msifile, NULL); + ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r); + + ok(delete_pf("msitest\cabout\new\five.txt", TRUE), "File not installed\n"); + ok(delete_pf("msitest\cabout\new", FALSE), "Directory not created\n"); + ok(delete_pf("msitest\cabout\four.txt", TRUE), "File not installed\n"); + ok(delete_pf("msitest\cabout", FALSE), "Directory not created\n"); + ok(delete_pf("msitest\changed\three.txt", TRUE), "File not installed\n"); + ok(delete_pf("msitest\changed", FALSE), "Directory not created\n"); + ok(delete_pf("msitest\first\two.txt", TRUE), "File not installed\n"); + ok(delete_pf("msitest\first", FALSE), "Directory not created\n"); + ok(delete_pf("msitest\filename", TRUE), "File not installed\n"); + ok(delete_pf("msitest\one.txt", TRUE), "File not installed\n"); + ok(delete_pf("msitest\service.exe", TRUE), "File not installed\n"); + ok(delete_pf("msitest", FALSE), "Directory not created\n"); + + delete_test_files(); +} + +static void test_self_registration(void) +{ + UINT r; + + create_test_files(); + create_database(msifile, sr_tables, sizeof(sr_tables) / sizeof(msi_table)); + + MsiSetInternalUI(INSTALLUILEVEL_NONE, NULL); + + r = MsiInstallProductA(msifile, NULL); + ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r); + + ok(delete_pf("msitest\cabout\new\five.txt", TRUE), "File not installed\n"); + ok(delete_pf("msitest\cabout\new", FALSE), "Directory not created\n"); + ok(delete_pf("msitest\cabout\four.txt", TRUE), "File not installed\n"); + ok(delete_pf("msitest\cabout", FALSE), "Directory not created\n"); + ok(delete_pf("msitest\changed\three.txt", TRUE), "File not installed\n"); + ok(delete_pf("msitest\changed", FALSE), "Directory not created\n"); + ok(delete_pf("msitest\first\two.txt", TRUE), "File not installed\n"); + ok(delete_pf("msitest\first", FALSE), "Directory not created\n"); + ok(delete_pf("msitest\filename", TRUE), "File not installed\n"); + ok(delete_pf("msitest\one.txt", TRUE), "File not installed\n"); + ok(delete_pf("msitest\service.exe", TRUE), "File not installed\n"); + ok(delete_pf("msitest", FALSE), "Directory not created\n"); + + delete_test_files(); }
START_TEST(install) @@ -7327,6 +7790,12 @@ test_file_in_use_cab(); test_MsiSetExternalUI(); test_allusers_prop(); + test_feature_override(); + test_create_folder(); + test_remove_folder(); + test_start_services(); + test_delete_services(); + test_self_registration();
DeleteFileA(log_file);
Modified: trunk/rostests/winetests/msi/package.c URL: http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/msi/package.c?re... ============================================================================== --- trunk/rostests/winetests/msi/package.c [iso-8859-1] (original) +++ trunk/rostests/winetests/msi/package.c [iso-8859-1] Sat Feb 6 22:29:15 2010 @@ -1046,6 +1046,14 @@ r = MsiGetTargetPath( hpkg, "TestParent", buffer, &sz ); ok( r == ERROR_SUCCESS, "failed to get target path: %d\n", r); ok( !lstrcmpi(buffer, "C:\one\two\"), "Expected C:\one\two\, got %s\n", buffer); + + r = MsiSetTargetPath( hpkg, "TestParent", "C:\one\two\three" ); + ok( r == ERROR_SUCCESS, "MsiSetTargetPath returned %d\n", r ); + + sz = sizeof buffer - 1; + r = MsiGetTargetPath( hpkg, "TestParent", buffer, &sz ); + ok( r == ERROR_SUCCESS, "failed to get target path: %d\n", r); + ok( !lstrcmpi(buffer, "C:\one\two\three\"), "Expected C:\one\two\three\, got %s\n", buffer);
MsiCloseHandle( hpkg ); }
Modified: trunk/rostests/winetests/msi/record.c URL: http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/msi/record.c?rev... ============================================================================== --- trunk/rostests/winetests/msi/record.c [iso-8859-1] (original) +++ trunk/rostests/winetests/msi/record.c [iso-8859-1] Sat Feb 6 22:29:15 2010 @@ -334,7 +334,6 @@ ok(r == ERROR_SUCCESS, "failed to add stream to record\n"); r = MsiRecordReadStream(h, 1, buf, NULL); ok(r == ERROR_INVALID_PARAMETER, "should return error\n"); - /* http://test.winehq.org/data/200503181000/98_jmelgarejo98casa/msi:record.txt */ DeleteFile(filename); /* Windows 98 doesn't like this at all, so don't check return. */ r = MsiRecordReadStream(h, 1, NULL, NULL); ok(r == ERROR_INVALID_PARAMETER, "should return error\n");