Skip to content

Commit

Permalink
use unicode programm args on windows
Browse files Browse the repository at this point in the history
  • Loading branch information
gfgtdf committed Oct 23, 2014
1 parent 0586bec commit fa67d14
Show file tree
Hide file tree
Showing 5 changed files with 176 additions and 114 deletions.
10 changes: 5 additions & 5 deletions src/commandline_options.cpp
Expand Up @@ -64,7 +64,7 @@ bad_commandline_tuple::bad_commandline_tuple(const std::string& str,
{
}

commandline_options::commandline_options ( int argc, char** argv ) :
commandline_options::commandline_options (const std::vector<std::string>& args) :
bpp(),
bunzip2(),
bzip2(),
Expand Down Expand Up @@ -144,8 +144,8 @@ commandline_options::commandline_options ( int argc, char** argv ) :
version(false),
windowed(false),
with_replay(false),
argc_(argc),
argv_(argv),
args_(args.begin() + 1 , args.end()),
args0_(*args.begin()),
all_(),
visible_(),
hidden_()
Expand Down Expand Up @@ -278,7 +278,7 @@ commandline_options::commandline_options ( int argc, char** argv ) :

po::variables_map vm;
const int parsing_style = po::command_line_style::default_style ^ po::command_line_style::allow_guessing;
po::store(po::command_line_parser(argc_,argv_).options(all_).positional(positional).style(parsing_style).run(),vm);
po::store(po::command_line_parser(args_).options(all_).positional(positional).style(parsing_style).run(),vm);

if (vm.count("ai-config"))
multiplayer_ai_config = parse_to_uint_string_tuples_(vm["ai-config"].as<std::vector<std::string> >());
Expand Down Expand Up @@ -559,7 +559,7 @@ std::vector<boost::tuple<unsigned int,std::string,std::string> > commandline_opt

std::ostream& operator<<(std::ostream &os, const commandline_options& cmdline_opts)
{
os << "Usage: " << cmdline_opts.argv_[0] << " [<options>] [<data-directory>]\n";
os << "Usage: " << cmdline_opts.args0_ << " [<options>] [<data-directory>]\n";
os << cmdline_opts.visible_;
return os;
}
6 changes: 3 additions & 3 deletions src/commandline_options.hpp
Expand Up @@ -41,7 +41,7 @@ class commandline_options
friend std::ostream& operator<<(std::ostream &os, const commandline_options& cmdline_opts);

public:
commandline_options(int argc, char **argv);
commandline_options(const std::vector<std::string>& args);

/// BitsPerPixel specified by --bpp option.
boost::optional<int> bpp;
Expand Down Expand Up @@ -212,8 +212,8 @@ friend std::ostream& operator<<(std::ostream &os, const commandline_options& cmd
std::vector<boost::tuple<unsigned int,std::string> > parse_to_uint_string_tuples_(const std::vector<std::string> &strings, char separator = ':');
/// A helper function splitting vector of strings of format unsigned int:string:string to vector of tuples (unsigned int,string,string)
std::vector<boost::tuple<unsigned int,std::string,std::string> > parse_to_uint_string_string_tuples_(const std::vector<std::string> &strings, char separator = ':');
int argc_;
char **argv_;
std::vector<std::string> args_;
std::string args0_;
boost::program_options::options_description all_;
boost::program_options::options_description visible_;
boost::program_options::options_description hidden_;
Expand Down
188 changes: 91 additions & 97 deletions src/tests/test_commandline_options.cpp
Expand Up @@ -16,14 +16,15 @@
#include "commandline_options.hpp"

#include <boost/test/unit_test.hpp>
#include <boost/assign.hpp>

BOOST_AUTO_TEST_SUITE( cmdline_opts )

BOOST_AUTO_TEST_CASE (test_empty_options)
{
const char *argv[] = {"wesnoth"};
const int argc = sizeof(argv)/sizeof(const char *);
commandline_options co(argc,const_cast<char**>(argv));

std::vector<std::string> args = boost::assign::list_of("wesnoth");
commandline_options co(args);

BOOST_CHECK(!co.bpp);
BOOST_CHECK(!co.campaign);
Expand Down Expand Up @@ -96,19 +97,16 @@ BOOST_AUTO_TEST_CASE (test_empty_options)

BOOST_AUTO_TEST_CASE (test_default_options)
{
const char *argv[] =
{
"wesnoth",
"--campaign",
"--editor",
"--logdomains",
"--preprocess-output-macros",
"--server",
"--test"
};
const int argc = sizeof(argv)/sizeof(const char *);
commandline_options co(argc,const_cast<char**>(argv));
std::vector<std::string> args = boost::assign::list_of
("wesnoth")
("--campaign")
("--editor")
("--logdomains")
("--preprocess-output-macros")
("--server")
("--test");

commandline_options co(args);
BOOST_CHECK(!co.bpp);
BOOST_CHECK(co.campaign && co.campaign->empty());
BOOST_CHECK(!co.campaign_difficulty);
Expand Down Expand Up @@ -180,83 +178,81 @@ BOOST_AUTO_TEST_CASE (test_default_options)

BOOST_AUTO_TEST_CASE (test_full_options)
{
const char *argv[] =
{
"wesnoth",
"--ai-config=1:aifoo",
"--ai-config=2:aibar",
"--algorithm=3:algfoo",
"--algorithm=4:algbar",
"--bpp=32",
"--campaign=campfoo",
"--campaign-difficulty=16",
"--campaign-scenario=scenfoo",
"--clock",
"--controller=5:confoo",
"--controller=6:conbar",
"--data-dir=datadirfoo",
"--data-path",
"--debug",
std::vector<std::string> args = boost::assign::list_of
("wesnoth")
("--ai-config=1:aifoo")
("--ai-config=2:aibar")
("--algorithm=3:algfoo")
("--algorithm=4:algbar")
("--bpp=32")
("--campaign=campfoo")
("--campaign-difficulty=16")
("--campaign-scenario=scenfoo")
("--clock")
("--controller=5:confoo")
("--controller=6:conbar")
("--data-dir=datadirfoo")
("--data-path")
("--debug")
#ifdef DEBUG_WINDOW_LAYOUT_GRAPHS
"--debug-dot-domain=ddfoo",
"--debug-dot-level=dlfoo",
("--debug-dot-domain=ddfoo")
("--debug-dot-level=dlfoo")
#endif
"--editor=editfoo",
"--era=erafoo",
"--exit-at-end",
"--fps",
"--fullscreen",
"--gunzip=gunzipfoo.gz",
"--gzip=gzipfoo",
"--help",
"--ignore-map-settings",
"--label=labelfoo",
"--load=loadfoo",
"--log-error=errfoo,errbar/*",
"--log-warning=warnfoo,warnfoo/bar",
"--log-info=infofoo",
"--log-debug=dbgfoo,dbgbar,dbg/foo/bar/baz",
"--logdomains=filterfoo",
"--max-fps=100",
"--multiplayer",
"--new-widgets",
"--nocache",
"--nodelay",
"--nomusic",
"--nosound",
"--nogui",
"--parm=7:parmfoo:valfoo",
"--parm=8:parmbar:valbar",
"--path",
"--preprocess", "preppathfoo", "preptargfoo",
"--preprocess-defines=DEFFOO,DEFBAR",
"--preprocess-input-macros=inmfoo",
"--preprocess-output-macros=outmfoo",
"--proxy",
"--proxy-address=addressfoo",
"--proxy-password=passfoo",
"--proxy-port=portfoo",
"--proxy-user=userfoo",
"--resolution=800x600",
"--rng-seed=1234",
"--scenario=scenfoo",
"--screenshot", "mapfoo", "outssfoo",
"--side=9:sidefoo",
"--side=10:sidebar",
"--server=servfoo",
"--test=testfoo",
"--turns=42",
"--userconfig-dir=userconfigdirfoo",
"--userconfig-path",
"--userdata-dir=userdatadirfoo",
"--userdata-path",
"--validcache",
"--version",
"--windowed",
"--with-replay"
};
const int argc = sizeof(argv)/sizeof(const char *);
commandline_options co(argc,const_cast<char**>(argv));
("--editor=editfoo")
("--era=erafoo")
("--exit-at-end")
("--fps")
("--fullscreen")
("--gunzip=gunzipfoo.gz")
("--gzip=gzipfoo")
("--help")
("--ignore-map-settings")
("--label=labelfoo")
("--load=loadfoo")
("--log-error=errfoo,errbar/*")
("--log-warning=warnfoo,warnfoo/bar")
("--log-info=infofoo")
("--log-debug=dbgfoo,dbgbar,dbg/foo/bar/baz")
("--logdomains=filterfoo")
("--max-fps=100")
("--multiplayer")
("--new-widgets")
("--nocache")
("--nodelay")
("--nomusic")
("--nosound")
("--nogui")
("--parm=7:parmfoo:valfoo")
("--parm=8:parmbar:valbar")
("--path")
("--preprocess") ("preppathfoo") ("preptargfoo")
("--preprocess-defines=DEFFOO,DEFBAR")
("--preprocess-input-macros=inmfoo")
("--preprocess-output-macros=outmfoo")
("--proxy")
("--proxy-address=addressfoo")
("--proxy-password=passfoo")
("--proxy-port=portfoo")
("--proxy-user=userfoo")
("--resolution=800x600")
("--rng-seed=1234")
("--scenario=scenfoo")
("--screenshot") ("mapfoo") ("outssfoo")
("--side=9:sidefoo")
("--side=10:sidebar")
("--server=servfoo")
("--test=testfoo")
("--turns=42")
("--userconfig-dir=userconfigdirfoo")
("--userconfig-path")
("--userdata-dir=userdatadirfoo")
("--userdata-path")
("--validcache")
("--version")
("--windowed")
("--with-replay");

commandline_options co(args);

BOOST_CHECK(co.bpp && *co.bpp == 32);
BOOST_CHECK(co.campaign && *co.campaign == "campfoo");
Expand Down Expand Up @@ -350,13 +346,11 @@ BOOST_AUTO_TEST_CASE (test_full_options)

BOOST_AUTO_TEST_CASE (test_positional_options)
{
const char *argv[] =
{
"wesnoth",
"datadirfoo"
};
const int argc = sizeof(argv)/sizeof(const char *);
commandline_options co(argc,const_cast<char**>(argv));
std::vector<std::string> args = boost::assign::list_of
("wesnoth")
("datadirfoo");

commandline_options co(args);

BOOST_CHECK(!co.bpp);
BOOST_CHECK(!co.campaign);
Expand Down
7 changes: 4 additions & 3 deletions src/tests/test_mp_connect.cpp
Expand Up @@ -25,6 +25,7 @@

#include <boost/foreach.hpp>
#include <boost/scoped_ptr.hpp>
#include <boost/assign.hpp>


/* Definitions */
Expand Down Expand Up @@ -61,8 +62,8 @@ boost::scoped_ptr<saved_game> state;
struct mp_connect_fixture {
mp_connect_fixture() :
video(),
dummy_argv(),
cmdline_opts(1, dummy_argv),
dummy_args(boost::assign::list_of("wesnoth").convert_to_container<std::vector<std::string> >()),
cmdline_opts(dummy_args),
hotkey_manager(),
config_manager()
{
Expand Down Expand Up @@ -91,7 +92,7 @@ struct mp_connect_fixture {
{
}
CVideo video;
char** dummy_argv;
std::vector<std::string> dummy_args;
commandline_options cmdline_opts;
hotkey::manager hotkey_manager;
boost::scoped_ptr<game_config_manager> config_manager;
Expand Down

0 comments on commit fa67d14

Please sign in to comment.