// // Copyright (c) 2012 Artyom Beilis (Tonkikh) // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // #include "test.hpp" #include #include #include #include int main(int argc, char** argv, char** env) { try { std::string example = "\xd7\xa9-\xd0\xbc-\xce\xbd"; boost::nowide::args a(argc, argv, env); if(argc == 2 && argv[1][0] != '-') { TEST(argv[1] == example); TEST(argv[2] == 0); TEST(boost::nowide::getenv("BOOST_NOWIDE_TEST")); TEST(boost::nowide::getenv("BOOST_NOWIDE_TEST_NONE") == 0); TEST(boost::nowide::getenv("BOOST_NOWIDE_TEST") == example); // Empty variables are unreliable on windows, hence skip. E.g. using "set FOO=" unsets FOO #ifndef BOOST_WINDOWS TEST(boost::nowide::getenv("BOOST_NOWIDE_EMPTY")); TEST(boost::nowide::getenv("BOOST_NOWIDE_EMPTY") == std::string()); #endif // !_WIN32 std::string sample = "BOOST_NOWIDE_TEST=" + example; bool found = false; for(char** e = env; *e != 0; e++) { char* eptr = *e; std::cout << "Checking " << eptr << std::endl; char* key_end = strchr(eptr, '='); TEST(key_end); std::string key = std::string(eptr, key_end); std::string value = key_end + 1; #ifdef BOOST_WINDOWS if(value.empty()) continue; #endif std::cout << "Key: " << key << " Value: " << value << std::endl; TEST(boost::nowide::getenv(key.c_str())); TEST(boost::nowide::getenv(key.c_str()) == value); if(*e == sample) found = true; } TEST(found); std::cout << "Subprocess ok" << std::endl; } else if(argc == 1) { #if BOOST_NOWIDE_TEST_USE_NARROW TEST(boost::nowide::setenv("BOOST_NOWIDE_TEST", example.c_str(), 1) == 0); TEST(boost::nowide::setenv("BOOST_NOWIDE_TEST_NONE", example.c_str(), 1) == 0); TEST(boost::nowide::unsetenv("BOOST_NOWIDE_TEST_NONE") == 0); TEST(boost::nowide::setenv("BOOST_NOWIDE_EMPTY", "", 1) == 0); TEST(boost::nowide::getenv("BOOST_NOWIDE_EMPTY")); std::string command = "\""; command += argv[0]; command += "\" "; command += example; TEST(boost::nowide::system(command.c_str()) == 0); std::cout << "Parent ok" << std::endl; #else std::wstring envVar = L"BOOST_NOWIDE_TEST=" + boost::nowide::widen(example); TEST(_wputenv(envVar.c_str()) == 0); std::wstring wcommand = boost::nowide::widen(argv[0]) + L" " + boost::nowide::widen(example); TEST(_wsystem(wcommand.c_str()) == 0); std::cout << "Wide Parent ok" << std::endl; #endif } } catch(const std::exception& e) { std::cerr << "Failed " << e.what() << std::endl; return 1; } return 0; }