From 931a7cbb250166072065abe48feeb55ffaaaa380 Mon Sep 17 00:00:00 2001 From: Amine Khaldi Date: Tue, 21 Oct 2014 15:50:16 +0000 Subject: [PATCH 1/1] [XCOPY_WINETEST] * Import from Wine 1.7.27. CORE-8540 svn path=/trunk/; revision=64869 --- rostests/winetests/CMakeLists.txt | 1 + rostests/winetests/xcopy/CMakeLists.txt | 5 ++ rostests/winetests/xcopy/testlist.c | 12 +++ rostests/winetests/xcopy/xcopy.c | 97 +++++++++++++++++++++++++ 4 files changed, 115 insertions(+) create mode 100644 rostests/winetests/xcopy/CMakeLists.txt create mode 100644 rostests/winetests/xcopy/testlist.c create mode 100644 rostests/winetests/xcopy/xcopy.c diff --git a/rostests/winetests/CMakeLists.txt b/rostests/winetests/CMakeLists.txt index 53df93c5c0b..896856af6f1 100644 --- a/rostests/winetests/CMakeLists.txt +++ b/rostests/winetests/CMakeLists.txt @@ -114,5 +114,6 @@ add_subdirectory(wintrust) add_subdirectory(wlanapi) add_subdirectory(wldap32) add_subdirectory(ws2_32) +add_subdirectory(xcopy) add_subdirectory(xinput1_3) add_subdirectory(xmllite) diff --git a/rostests/winetests/xcopy/CMakeLists.txt b/rostests/winetests/xcopy/CMakeLists.txt new file mode 100644 index 00000000000..bcba418691f --- /dev/null +++ b/rostests/winetests/xcopy/CMakeLists.txt @@ -0,0 +1,5 @@ + +add_executable(xcopy_winetest xcopy.c testlist.c) +set_module_type(xcopy_winetest win32cui) +add_importlibs(xcopy_winetest msvcrt kernel32) +add_cd_file(TARGET xcopy_winetest DESTINATION reactos/bin FOR all) diff --git a/rostests/winetests/xcopy/testlist.c b/rostests/winetests/xcopy/testlist.c new file mode 100644 index 00000000000..388f4567d50 --- /dev/null +++ b/rostests/winetests/xcopy/testlist.c @@ -0,0 +1,12 @@ +/* Automatically generated by make depend; DO NOT EDIT!! */ + +#define STANDALONE +#include + +extern void func_xcopy(void); + +const struct test winetest_testlist[] = +{ + { "xcopy", func_xcopy }, + { 0, 0 } +}; diff --git a/rostests/winetests/xcopy/xcopy.c b/rostests/winetests/xcopy/xcopy.c new file mode 100644 index 00000000000..2bb8cbb43d7 --- /dev/null +++ b/rostests/winetests/xcopy/xcopy.c @@ -0,0 +1,97 @@ +/* + * Copyright 2013 Francois Gouget + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include + +static DWORD runcmd(const char* cmd) +{ + STARTUPINFOA si = {sizeof(STARTUPINFOA)}; + PROCESS_INFORMATION pi; + char* wcmd; + DWORD rc; + + /* Create a writable copy for CreateProcessA() */ + wcmd = HeapAlloc(GetProcessHeap(), 0, strlen(cmd) + 1); + strcpy(wcmd, cmd); + + /* On Windows 2003 and older, xcopy.exe fails if stdin is not a console + * handle, even with '/I /Y' options. + */ + rc = CreateProcessA(NULL, wcmd, NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi); + HeapFree(GetProcessHeap(), 0, wcmd); + if (!rc) + return 260; + + rc = WaitForSingleObject(pi.hProcess, 5000); + if (rc == WAIT_OBJECT_0) + GetExitCodeProcess(pi.hProcess, &rc); + else + TerminateProcess(pi.hProcess, 1); + CloseHandle(pi.hThread); + CloseHandle(pi.hProcess); + + return rc; +} + +static void test_date_format(void) +{ + DWORD rc; + + rc = runcmd("xcopy /D:20-01-2000 xcopy1 xcopytest"); + ok(rc == 4, "xcopy /D:d-m-y test returned rc=%u\n", rc); + ok(GetFileAttributesA("xcopytest\\xcopy1") == INVALID_FILE_ATTRIBUTES, + "xcopy should not have created xcopytest\\xcopy1\n"); + + rc = runcmd("xcopy /D:01-20-2000 xcopy1 xcopytest"); + ok(rc == 0, "xcopy /D:m-d-y test failed rc=%u\n", rc); + ok(GetFileAttributesA("xcopytest\\xcopy1") != INVALID_FILE_ATTRIBUTES, + "xcopy did not create xcopytest\\xcopy1\n"); + DeleteFileA("xcopytest\\xcopy1"); + + rc = runcmd("xcopy /D:1-20-2000 xcopy1 xcopytest"); + ok(rc == 0, "xcopy /D:m-d-y test failed rc=%u\n", rc); + ok(GetFileAttributesA("xcopytest\\xcopy1") != INVALID_FILE_ATTRIBUTES, + "xcopy did not create xcopytest\\xcopy1\n"); + DeleteFileA("xcopytest\\xcopy1"); +} + +START_TEST(xcopy) +{ + char tmpdir[MAX_PATH]; + HANDLE hfile; + + GetTempPathA(MAX_PATH, tmpdir); + SetCurrentDirectoryA(tmpdir); + trace("%s\n", tmpdir); + + CreateDirectoryA("xcopytest", NULL); + hfile = CreateFileA("xcopy1", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, + FILE_ATTRIBUTE_NORMAL, NULL); + ok(hfile != INVALID_HANDLE_VALUE, "Failed to create xcopy1 file\n"); + if (hfile == INVALID_HANDLE_VALUE) + { + skip("skipping xcopy tests\n"); + return; + } + CloseHandle(hfile); + + test_date_format(); + + DeleteFileA("xcopy1"); + RemoveDirectoryA("xcopytest"); +} -- 2.17.1