Author: zaroth
Date: Thu Jun  9 11:52:58 2011
New Revision: 49814

URL: http://svn.gna.org/viewcvs/wesnoth?rev=49814&view=rev
Log:
added support for positional options in commandline_options

Modified:
    trunk/src/commandline_options.cpp
    trunk/src/game.cpp
    trunk/src/game_controller.cpp
    trunk/src/tests/test_commandline_options.cpp

Modified: trunk/src/commandline_options.cpp
URL: 
http://svn.gna.org/viewcvs/wesnoth/trunk/src/commandline_options.cpp?rev=49814&r1=49813&r2=49814&view=diff
==============================================================================
--- trunk/src/commandline_options.cpp (original)
+++ trunk/src/commandline_options.cpp Thu Jun  9 11:52:58 2011
@@ -21,6 +21,7 @@
 
 namespace po = boost::program_options;
 
+// this class is needed since boost has some templated operators>> declared 
internally for tuples and we don't want them to interfere. Existence of such 
operator>> apparently causes program_options to cause the custom class somehow 
specially... well, the boost::tuple default operator>>  format doesn't suit our 
needs anyway.
 class two_strings : public boost::tuple<std::string,std::string> {};
 
 void validate(boost::any& v, const std::vector<std::string>& values,
@@ -175,9 +176,12 @@
        
        all_.add(visible_).add(hidden_);
 
+       po::positional_options_description positional;
+       positional.add("data-dir",1);
+
        po::variables_map vm;
        const int parsing_style = po::command_line_style::default_style ^ 
po::command_line_style::allow_guessing;
-       po::store(po::parse_command_line(argc_,argv_,all_,parsing_style),vm);
+       
po::store(po::command_line_parser(argc_,argv_).options(all_).positional(positional).style(parsing_style).run(),vm);
 
        if (vm.count("ai-config"))
                multiplayer_ai_config = 
parse_to_int_string_tuples_(vm["ai-config"].as<std::vector<std::string> >());

Modified: trunk/src/game.cpp
URL: 
http://svn.gna.org/viewcvs/wesnoth/trunk/src/game.cpp?rev=49814&r1=49813&r2=49814&view=diff
==============================================================================
--- trunk/src/game.cpp (original)
+++ trunk/src/game.cpp Thu Jun  9 11:52:58 2011
@@ -192,6 +192,7 @@
                        throw config::error("directory not found");
                }
        // don't update font as we already updating it in game ctor
+       //font_manager_.update_font_path();
        }
        if(cmdline_opts.gunzip) {
                const std::string input_file(*cmdline_opts.gunzip);

Modified: trunk/src/game_controller.cpp
URL: 
http://svn.gna.org/viewcvs/wesnoth/trunk/src/game_controller.cpp?rev=49814&r1=49813&r2=49814&view=diff
==============================================================================
--- trunk/src/game_controller.cpp (original)
+++ trunk/src/game_controller.cpp Thu Jun  9 11:52:58 2011
@@ -306,25 +306,6 @@
                } else if(val[0] == '-') {
                        std::cerr << "unknown option: " << val << std::endl;
                        //throw config::error("unknown option"); TODO will be 
unnecessary here once commandline_options is completed
-               } else {
-                       std::cerr << "Overriding data directory with " << val 
<< std::endl;
-#ifdef _WIN32
-                       // use c_str to ensure that index 1 points to valid 
element since c_str() returns null-terminated string
-                       if(val.c_str()[1] == ':') {
-#else
-                       if(val[0] == '/') {
-#endif
-                               game_config::path = val;
-                       } else {
-                               game_config::path = get_cwd() + '/' + val;
-                       }
-
-                       if(!is_directory(game_config::path)) {
-                               std::cerr << "Could not find directory '" << 
game_config::path << "'\n";
-                               throw config::error("directory not found");
-                       }
-
-                       font_manager_.update_font_path();
                }
        }
        std::cerr << '\n';

Modified: trunk/src/tests/test_commandline_options.cpp
URL: 
http://svn.gna.org/viewcvs/wesnoth/trunk/src/tests/test_commandline_options.cpp?rev=49814&r1=49813&r2=49814&view=diff
==============================================================================
--- trunk/src/tests/test_commandline_options.cpp (original)
+++ trunk/src/tests/test_commandline_options.cpp Thu Jun  9 11:52:58 2011
@@ -90,7 +90,6 @@
        BOOST_CHECK(!co.version);
        BOOST_CHECK(!co.windowed);
        BOOST_CHECK(!co.with_replay);
-
 }
 
 BOOST_AUTO_TEST_CASE (test_default_options)
@@ -303,4 +302,80 @@
        BOOST_CHECK(co.with_replay);
 }
 
+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));
+
+       BOOST_CHECK(!co.bpp);
+       BOOST_CHECK(!co.campaign);
+       BOOST_CHECK(!co.campaign_difficulty);
+       BOOST_CHECK(!co.campaign_scenario);
+       BOOST_CHECK(!co.clock);
+       BOOST_CHECK(!co.config_path);
+       BOOST_CHECK(!co.config_dir);
+       BOOST_CHECK(co.data_dir && *co.data_dir == "datadirfoo");
+       BOOST_CHECK(!co.debug);
+#ifdef DEBUG_WINDOW_LAYOUT_GRAPHS
+       BOOST_CHECK(!co.debug_dot_domain);
+       BOOST_CHECK(!co.debug_dot_level);
+#endif
+       BOOST_CHECK(!co.editor);
+       BOOST_CHECK(!co.fps);
+       BOOST_CHECK(!co.fullscreen);
+       BOOST_CHECK(!co.gunzip);
+       BOOST_CHECK(!co.gzip);
+       BOOST_CHECK(!co.help);
+       BOOST_CHECK(!co.log);
+       BOOST_CHECK(!co.load);
+       BOOST_CHECK(!co.logdomains);
+       BOOST_CHECK(!co.multiplayer);
+       BOOST_CHECK(!co.multiplayer_ai_config);
+       BOOST_CHECK(!co.multiplayer_algorithm);
+       BOOST_CHECK(!co.multiplayer_controller);
+       BOOST_CHECK(!co.multiplayer_era);
+       BOOST_CHECK(!co.multiplayer_label);
+       BOOST_CHECK(!co.multiplayer_parm);
+       BOOST_CHECK(!co.multiplayer_side);
+       BOOST_CHECK(!co.multiplayer_turns);
+       BOOST_CHECK(!co.max_fps);
+       BOOST_CHECK(!co.nocache);
+       BOOST_CHECK(!co.nodelay);
+       BOOST_CHECK(!co.nogui);
+       BOOST_CHECK(!co.nomusic);
+       BOOST_CHECK(!co.nosound);
+       BOOST_CHECK(!co.new_storyscreens);
+       BOOST_CHECK(!co.new_syntax);
+       BOOST_CHECK(!co.new_widgets);
+       BOOST_CHECK(!co.path);
+       BOOST_CHECK(!co.preprocess);
+       BOOST_CHECK(!co.preprocess_defines);
+       BOOST_CHECK(!co.preprocess_input_macros);
+       BOOST_CHECK(!co.preprocess_output_macros);
+       BOOST_CHECK(!co.preprocess_path);
+       BOOST_CHECK(!co.preprocess_target);
+       BOOST_CHECK(!co.proxy);
+       BOOST_CHECK(!co.proxy_address);
+       BOOST_CHECK(!co.proxy_password);
+       BOOST_CHECK(!co.proxy_port);
+       BOOST_CHECK(!co.proxy_user);
+       BOOST_CHECK(!co.resolution);
+       BOOST_CHECK(!co.rng_seed);
+       BOOST_CHECK(!co.server);
+       BOOST_CHECK(!co.screenshot);
+       BOOST_CHECK(!co.screenshot_map_file);
+       BOOST_CHECK(!co.screenshot_output_file);
+       BOOST_CHECK(!co.smallgui);
+       BOOST_CHECK(!co.test);
+       BOOST_CHECK(!co.validcache);
+       BOOST_CHECK(!co.version);
+       BOOST_CHECK(!co.windowed);
+       BOOST_CHECK(!co.with_replay);
+}
+
 BOOST_AUTO_TEST_SUITE_END()


_______________________________________________
Wesnoth-commits mailing list
[email protected]
https://mail.gna.org/listinfo/wesnoth-commits

Reply via email to