⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unicode_test.cpp

📁 Boost provides free peer-reviewed portable C++ source libraries. We emphasize libraries that work
💻 CPP
字号:
// Copyright Vladimir Prus 2002-2004.// 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 <boost/program_options/variables_map.hpp>#include <boost/program_options/options_description.hpp>#include <boost/program_options/parsers.hpp>#include <boost/program_options/detail/utf8_codecvt_facet.hpp>using namespace boost::program_options;// We'll use po::value everywhere to workaround vc6 bug.namespace po = boost::program_options;#include <boost/function.hpp>using namespace boost;#include <sstream>using namespace std;#include "minitest.hpp"// Test that unicode input is forwarded to unicode option without// problems.void test_unicode_to_unicode(){    options_description desc;    desc.add_options()        ("foo", po::wvalue<wstring>(), "unicode option")        ;    vector<wstring> args;    args.push_back(L"--foo=\x044F");    variables_map vm;    store(wcommand_line_parser(args).options(desc).run(), vm);    BOOST_CHECK(vm["foo"].as<wstring>() == L"\x044F");           }// Test that unicode input is property converted into// local 8 bit string. To test this, make local 8 bit encoding// be utf8.void test_unicode_to_native(){    std::codecvt<wchar_t, char, mbstate_t>* facet =         new boost::program_options::detail::utf8_codecvt_facet;    locale::global(locale(locale(), facet));    options_description desc;    desc.add_options()        ("foo", po::value<string>(), "unicode option")        ;    vector<wstring> args;    args.push_back(L"--foo=\x044F");    variables_map vm;    store(wcommand_line_parser(args).options(desc).run(), vm);    BOOST_CHECK(vm["foo"].as<string>() == "\xD1\x8F");    }void test_native_to_unicode(){    std::codecvt<wchar_t, char, mbstate_t>* facet =         new boost::program_options::detail::utf8_codecvt_facet;    locale::global(locale(locale(), facet));    options_description desc;    desc.add_options()        ("foo", po::wvalue<wstring>(), "unicode option")        ;    vector<string> args;    args.push_back("--foo=\xD1\x8F");    variables_map vm;    store(command_line_parser(args).options(desc).run(), vm);    BOOST_CHECK(vm["foo"].as<wstring>() == L"\x044F");    }vector<wstring> sv(wchar_t* array[], unsigned size){    vector<wstring> r;    for (unsigned i = 0; i < size; ++i)        r.push_back(array[i]);    return r;}void check_value(const woption& option, const char* name, const wchar_t* value){    BOOST_CHECK(option.string_key == name);    BOOST_REQUIRE(option.value.size() == 1);    BOOST_CHECK(option.value.front() == value);}void test_command_line(){    options_description desc;    desc.add_options()        ("foo,f", new untyped_value(), "")        // Explicit qualification is a workaround for vc6        ("bar,b", po::value<std::string>(), "")        ("baz", new untyped_value())        ("plug*", new untyped_value())        ;    wchar_t* cmdline4_[] = { L"--foo=1\u0FF52", L"-f4", L"--bar=11",                             L"-b4", L"--plug3=10"};    vector<wstring> cmdline4 = sv(cmdline4_,                                  sizeof(cmdline4_)/sizeof(cmdline4_[0]));    vector<woption> a4 =         wcommand_line_parser(cmdline4).options(desc).run().options;    BOOST_REQUIRE(a4.size() == 5);    check_value(a4[0], "foo", L"1\u0FF52");    check_value(a4[1], "foo", L"4");    check_value(a4[2], "bar", L"11");}// Since we've already tested conversion between parser encoding and// option encoding, all we need to check for config file is that// when reading wistream, it generates proper UTF8 data.void test_config_file(){    std::codecvt<wchar_t, char, mbstate_t>* facet =         new boost::program_options::detail::utf8_codecvt_facet;    locale::global(locale(locale(), facet));    options_description desc;    desc.add_options()        ("foo", po::value<string>(), "unicode option")        ;    std::wstringstream stream(L"foo = \x044F");    variables_map vm;    store(parse_config_file(stream, desc), vm);    BOOST_CHECK(vm["foo"].as<string>() == "\xD1\x8F");    }int main(int, char* []){    test_unicode_to_unicode();    test_unicode_to_native();    test_native_to_unicode();    test_command_line();    test_config_file();    return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -