diff options
Diffstat (limited to 'test/API/driver/kwsys/testEncoding.cxx')
-rw-r--r-- | test/API/driver/kwsys/testEncoding.cxx | 286 |
1 files changed, 0 insertions, 286 deletions
diff --git a/test/API/driver/kwsys/testEncoding.cxx b/test/API/driver/kwsys/testEncoding.cxx deleted file mode 100644 index 988697b..0000000 --- a/test/API/driver/kwsys/testEncoding.cxx +++ /dev/null @@ -1,286 +0,0 @@ -/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying - file Copyright.txt or https://cmake.org/licensing#kwsys for details. */ -#include "kwsysPrivate.h" - -#if defined(_MSC_VER) -# pragma warning(disable : 4786) -#endif - -#include KWSYS_HEADER(Encoding.hxx) -#include KWSYS_HEADER(Encoding.h) - -#include <algorithm> -#include <iostream> -#include <locale.h> -#include <stdlib.h> -#include <string.h> - -// Work-around CMake dependency scanning limitation. This must -// duplicate the above list of headers. -#if 0 -# include "Encoding.h.in" -# include "Encoding.hxx.in" -#endif - -static const unsigned char helloWorldStrings[][32] = { - // English - { 'H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd', 0 }, - // Japanese - { 0xE3, 0x81, 0x93, 0xE3, 0x82, 0x93, 0xE3, 0x81, 0xAB, 0xE3, 0x81, - 0xA1, 0xE3, 0x81, 0xAF, 0xE4, 0xB8, 0x96, 0xE7, 0x95, 0x8C, 0 }, - // Arabic - { 0xD9, 0x85, 0xD8, 0xB1, 0xD8, 0xAD, 0xD8, 0xA8, 0xD8, 0xA7, 0x20, 0xD8, - 0xA7, 0xD9, 0x84, 0xD8, 0xB9, 0xD8, 0xA7, 0xD9, 0x84, 0xD9, 0x85, 0 }, - // Yiddish - { 0xD7, 0x94, 0xD7, 0xA2, 0xD7, 0x9C, 0xD7, 0x90, 0x20, 0xD7, - 0x95, 0xD7, 0x95, 0xD7, 0xA2, 0xD7, 0x9C, 0xD7, 0x98, 0 }, - // Russian - { 0xD0, 0xBF, 0xD1, 0x80, 0xD0, 0xB8, 0xD0, 0xB2, 0xD0, 0xB5, - 0xD1, 0x82, 0x20, 0xD0, 0xBC, 0xD0, 0xB8, 0xD1, 0x80, 0 }, - // Latin - { 0x4D, 0x75, 0x6E, 0x64, 0x75, 0x73, 0x20, 0x73, 0x61, 0x6C, 0x76, 0x65, - 0 }, - // Swahili - { 0x68, 0x75, 0x6A, 0x61, 0x6D, 0x62, 0x6F, 0x20, 0x44, 0x75, 0x6E, 0x69, - 0x61, 0 }, - // Icelandic - { 0x48, 0x61, 0x6C, 0x6C, 0xC3, 0xB3, 0x20, 0x68, 0x65, 0x69, 0x6D, 0x75, - 0x72, 0 }, - { 0 } -}; - -static int testHelloWorldEncoding() -{ - int ret = 0; - for (int i = 0; helloWorldStrings[i][0] != 0; i++) { - std::string str = reinterpret_cast<const char*>(helloWorldStrings[i]); - std::cout << str << std::endl; - std::wstring wstr = kwsys::Encoding::ToWide(str); - std::string str2 = kwsys::Encoding::ToNarrow(wstr); - wchar_t* c_wstr = kwsysEncoding_DupToWide(str.c_str()); - char* c_str2 = kwsysEncoding_DupToNarrow(c_wstr); - if (!wstr.empty() && (str != str2 || strcmp(c_str2, str.c_str()))) { - std::cout << "converted string was different: " << str2 << std::endl; - std::cout << "converted string was different: " << c_str2 << std::endl; - ret++; - } - free(c_wstr); - free(c_str2); - } - return ret; -} - -static int testRobustEncoding() -{ - // test that the conversion functions handle invalid - // unicode correctly/gracefully - - // we manipulate the format flags of stdout, remember - // the original state here to restore before return - std::ios::fmtflags const& flags = std::cout.flags(); - - int ret = 0; - char cstr[] = { (char)-1, 0 }; - // this conversion could fail - std::wstring wstr = kwsys::Encoding::ToWide(cstr); - - wstr = kwsys::Encoding::ToWide(nullptr); - if (wstr != L"") { - const wchar_t* wcstr = wstr.c_str(); - std::cout << "ToWide(NULL) returned"; - for (size_t i = 0; i < wstr.size(); i++) { - std::cout << " " << std::hex << (int)wcstr[i]; - } - std::cout << std::endl; - ret++; - } - wstr = kwsys::Encoding::ToWide(""); - if (wstr != L"") { - const wchar_t* wcstr = wstr.c_str(); - std::cout << "ToWide(\"\") returned"; - for (size_t i = 0; i < wstr.size(); i++) { - std::cout << " " << std::hex << (int)wcstr[i]; - } - std::cout << std::endl; - ret++; - } - -#ifdef _WIN32 - // 16 bit wchar_t - we make an invalid surrogate pair - wchar_t cwstr[] = { 0xD801, 0xDA00, 0 }; - // this conversion could fail - std::string win_str = kwsys::Encoding::ToNarrow(cwstr); -#endif - - std::string str = kwsys::Encoding::ToNarrow(nullptr); - if (str != "") { - std::cout << "ToNarrow(NULL) returned " << str << std::endl; - ret++; - } - - str = kwsys::Encoding::ToNarrow(L""); - if (wstr != L"") { - std::cout << "ToNarrow(\"\") returned " << str << std::endl; - ret++; - } - - std::cout.flags(flags); - return ret; -} - -static int testWithNulls() -{ - int ret = 0; - std::vector<std::string> strings; - strings.push_back(std::string("ab") + '\0' + 'c'); - strings.push_back(std::string("d") + '\0' + '\0' + 'e'); - strings.push_back(std::string() + '\0' + 'f'); - strings.push_back(std::string() + '\0' + '\0' + "gh"); - strings.push_back(std::string("ij") + '\0'); - strings.push_back(std::string("k") + '\0' + '\0'); - strings.push_back(std::string("\0\0\0\0", 4) + "lmn" + - std::string("\0\0\0\0", 4)); - for (std::vector<std::string>::iterator it = strings.begin(); - it != strings.end(); ++it) { - std::wstring wstr = kwsys::Encoding::ToWide(*it); - std::string str = kwsys::Encoding::ToNarrow(wstr); - std::string s(*it); - std::replace(s.begin(), s.end(), '\0', ' '); - std::cout << "'" << s << "' (" << it->size() << ")" << std::endl; - if (str != *it) { - std::replace(str.begin(), str.end(), '\0', ' '); - std::cout << "string with null was different: '" << str << "' (" - << str.size() << ")" << std::endl; - ret++; - } - } - return ret; -} - -static int testCommandLineArguments() -{ - int status = 0; - - char const* argv[2] = { "./app.exe", (char const*)helloWorldStrings[1] }; - - kwsys::Encoding::CommandLineArguments args(2, argv); - kwsys::Encoding::CommandLineArguments arg2 = - kwsys::Encoding::CommandLineArguments(args); - - char const* const* u8_argv = args.argv(); - for (int i = 0; i < args.argc(); i++) { - char const* u8_arg = u8_argv[i]; - if (strcmp(argv[i], u8_arg) != 0) { - std::cout << "argv[" << i << "] " << argv[i] << " != " << u8_arg - << std::endl; - status++; - } - } - - kwsys::Encoding::CommandLineArguments args3 = - kwsys::Encoding::CommandLineArguments::Main(2, argv); - - return status; -} - -static int testToWindowsExtendedPath() -{ -#ifdef _WIN32 - int ret = 0; - if (kwsys::Encoding::ToWindowsExtendedPath( - "L:\\Local Mojo\\Hex Power Pack\\Iffy Voodoo") != - L"\\\\?\\L:\\Local Mojo\\Hex Power Pack\\Iffy Voodoo") { - std::cout << "Problem with ToWindowsExtendedPath " - << "\"L:\\Local Mojo\\Hex Power Pack\\Iffy Voodoo\"" - << std::endl; - ++ret; - } - - if (kwsys::Encoding::ToWindowsExtendedPath( - "L:/Local Mojo/Hex Power Pack/Iffy Voodoo") != - L"\\\\?\\L:\\Local Mojo\\Hex Power Pack\\Iffy Voodoo") { - std::cout << "Problem with ToWindowsExtendedPath " - << "\"L:/Local Mojo/Hex Power Pack/Iffy Voodoo\"" << std::endl; - ++ret; - } - - if (kwsys::Encoding::ToWindowsExtendedPath( - "\\\\Foo\\Local Mojo\\Hex Power Pack\\Iffy Voodoo") != - L"\\\\?\\UNC\\Foo\\Local Mojo\\Hex Power Pack\\Iffy Voodoo") { - std::cout << "Problem with ToWindowsExtendedPath " - << "\"\\\\Foo\\Local Mojo\\Hex Power Pack\\Iffy Voodoo\"" - << std::endl; - ++ret; - } - - if (kwsys::Encoding::ToWindowsExtendedPath( - "//Foo/Local Mojo/Hex Power Pack/Iffy Voodoo") != - L"\\\\?\\UNC\\Foo\\Local Mojo\\Hex Power Pack\\Iffy Voodoo") { - std::cout << "Problem with ToWindowsExtendedPath " - << "\"//Foo/Local Mojo/Hex Power Pack/Iffy Voodoo\"" - << std::endl; - ++ret; - } - - if (kwsys::Encoding::ToWindowsExtendedPath("//") != L"//") { - std::cout << "Problem with ToWindowsExtendedPath " - << "\"//\"" << std::endl; - ++ret; - } - - if (kwsys::Encoding::ToWindowsExtendedPath("\\\\.\\") != L"\\\\.\\") { - std::cout << "Problem with ToWindowsExtendedPath " - << "\"\\\\.\\\"" << std::endl; - ++ret; - } - - if (kwsys::Encoding::ToWindowsExtendedPath("\\\\.\\X") != L"\\\\.\\X") { - std::cout << "Problem with ToWindowsExtendedPath " - << "\"\\\\.\\X\"" << std::endl; - ++ret; - } - - if (kwsys::Encoding::ToWindowsExtendedPath("\\\\.\\X:") != L"\\\\?\\X:") { - std::cout << "Problem with ToWindowsExtendedPath " - << "\"\\\\.\\X:\"" << std::endl; - ++ret; - } - - if (kwsys::Encoding::ToWindowsExtendedPath("\\\\.\\X:\\") != - L"\\\\?\\X:\\") { - std::cout << "Problem with ToWindowsExtendedPath " - << "\"\\\\.\\X:\\\"" << std::endl; - ++ret; - } - - if (kwsys::Encoding::ToWindowsExtendedPath("NUL") != L"\\\\.\\NUL") { - std::cout << "Problem with ToWindowsExtendedPath " - << "\"NUL\"" << std::endl; - ++ret; - } - - return ret; -#else - return 0; -#endif -} - -int testEncoding(int, char* []) -{ - const char* loc = setlocale(LC_ALL, ""); - if (loc) { - std::cout << "Locale: " << loc << std::endl; - } else { - std::cout << "Locale: None" << std::endl; - } - - int ret = 0; - - ret |= testHelloWorldEncoding(); - ret |= testRobustEncoding(); - ret |= testCommandLineArguments(); - ret |= testWithNulls(); - ret |= testToWindowsExtendedPath(); - - return ret; -} |