16 #define GETTEXT_DOMAIN "wesnoth-test"
18 #include <boost/test/unit_test.hpp>
41 std::unique_ptr<saved_game> state;
42 std::unique_ptr<randomness::mt_rng> rng;
60 state->classification().type = campaign_type::type::multiplayer;
61 state->classification().era_id =
"era_default";
62 config_manager->load_game_config_for_game(state->classification(), state->get_scenario_id());
64 state->mp_settings().name =
"multiplayer_The_Freelands";
65 state->mp_settings().use_map_settings =
true;
66 state->mp_settings().saved_game = saved_game_mode::type::no;
68 state->set_scenario(
config_manager->game_config().find_mandatory_child(
"multiplayer",
"id", state->mp_settings().name));
70 state->mp_settings().num_turns = state->get_starting_point()[
"turns"].to_int();
91 return connect_engine;
101 side_cfg.
append(defaults);
115 state->mp_settings().use_map_settings =
true;
116 state->mp_settings().saved_game = saved_game_mode::type::no;
123 side[
"recruit"] =
"Elvish Archer";
125 BOOST_CHECK_EQUAL( side_engine->new_config()[
"recruit"],
"Elvish Archer" );
131 state->mp_settings().use_map_settings =
true;
132 state->mp_settings().saved_game = saved_game_mode::type::no;
139 side[
"faction"] =
"Custom";
141 BOOST_CHECK_EQUAL( side_engine->flg().current_faction()[
"id"],
"Custom" );
142 BOOST_CHECK_EQUAL( side_engine->new_config()[
"recruit"].empty(),
true );
148 state->mp_settings().use_map_settings =
true;
149 state->mp_settings().saved_game = saved_game_mode::type::no;
156 side[
"faction"] =
"Random";
158 BOOST_CHECK_EQUAL( side_engine->flg().current_faction()[
"id"],
"Random" );
164 state->mp_settings().use_map_settings =
true;
165 state->mp_settings().saved_game = saved_game_mode::type::no;
172 side[
"faction"] =
"Rebels";
174 BOOST_CHECK_EQUAL( side_engine->flg().current_faction()[
"id"],
"Rebels" );
180 state->mp_settings().use_map_settings =
true;
181 state->mp_settings().saved_game = saved_game_mode::type::no;
188 side[
"faction"] =
"ThisFactionDoesNotExist";
190 BOOST_CHECK( side_engine->flg().choosable_factions().size() > 1 );
191 BOOST_CHECK_EQUAL( side_engine->flg().current_faction()[
"id"],
"Random" );
197 state->mp_settings().use_map_settings =
true;
198 state->mp_settings().saved_game = saved_game_mode::type::no;
205 side[
"recruit"] =
"Elvish Archer";
206 side[
"faction"] =
"Undead";
213 state->mp_settings().use_map_settings =
true;
214 state->mp_settings().saved_game = saved_game_mode::type::no;
221 side[
"previous_recruits"] =
"Elvish Archer";
223 BOOST_CHECK_EQUAL( side_engine->new_config()[
"previous_recruits"],
"Elvish Archer" );
229 state->mp_settings().use_map_settings =
true;
230 state->mp_settings().saved_game = saved_game_mode::type::no;
243 BOOST_CHECK_EQUAL( side_engine->flg().choosable_leaders().size(), 1 );
244 BOOST_CHECK_EQUAL( side_engine->flg().current_leader(),
"Shadow" );
245 BOOST_CHECK_EQUAL( side_engine->new_config().mandatory_child(
"leader")[
"type"],
"Shadow" );
251 state->mp_settings().use_map_settings =
true;
252 state->mp_settings().saved_game = saved_game_mode::type::no;
260 "type",
"ThisUnitDoesNotExist",
265 BOOST_CHECK_EQUAL( side_engine->flg().choosable_leaders().size(), 1 );
266 BOOST_CHECK_EQUAL( side_engine->flg().current_leader(),
"null" );
272 state->mp_settings().use_map_settings =
true;
273 state->mp_settings().saved_game = saved_game_mode::type::no;
280 side[
"faction"] =
"Custom";
282 BOOST_CHECK( side_engine->flg().choosable_leaders().size() > 1 );
283 BOOST_CHECK_EQUAL( side_engine->flg().current_leader(),
"random" );
289 state->mp_settings().use_map_settings =
true;
290 state->mp_settings().saved_game = saved_game_mode::type::no;
297 side[
"faction"] =
"Random";
299 BOOST_CHECK_EQUAL( side_engine->flg().choosable_leaders().size(), 1 );
300 BOOST_CHECK_EQUAL( side_engine->flg().current_leader(),
"null" );
306 state->mp_settings().use_map_settings =
true;
307 state->mp_settings().saved_game = saved_game_mode::type::no;
318 state->mp_settings().use_map_settings =
true;
319 state->mp_settings().saved_game = saved_game_mode::type::no;
326 side[
"faction"] =
"Undead";
328 BOOST_CHECK( side_engine->flg().choosable_leaders().size() > 1 );
329 BOOST_CHECK_EQUAL( side_engine->flg().current_leader(),
"random" );
335 state->mp_settings().use_map_settings =
true;
336 state->mp_settings().saved_game = saved_game_mode::type::no;
344 "type",
"Elvish Archer",
348 "type",
"Elvish Ranger",
354 BOOST_CHECK_EQUAL( side_engine->flg().choosable_leaders().size(), 1 );
355 BOOST_CHECK_EQUAL( side_engine->flg().current_leader(),
"Elvish Ranger" );
361 state->mp_settings().use_map_settings =
true;
362 state->mp_settings().saved_game = saved_game_mode::type::no;
373 state->mp_settings().use_map_settings =
true;
374 state->mp_settings().saved_game = saved_game_mode::type::no;
386 BOOST_CHECK_EQUAL( side_engine->flg().choosable_leaders().size(), 1 );
392 state->mp_settings().use_map_settings =
true;
393 state->mp_settings().saved_game = saved_game_mode::type::no;
401 "type",
"Elvish Archer",
405 BOOST_CHECK_EQUAL( side_engine->flg().choosable_genders().size(), 3 );
406 BOOST_CHECK_EQUAL( side_engine->flg().current_gender(),
"random" );
412 state->mp_settings().use_map_settings =
true;
413 state->mp_settings().saved_game = saved_game_mode::type::no;
425 BOOST_CHECK_EQUAL( side_engine->flg().choosable_genders().size(), 1 );
426 BOOST_CHECK_EQUAL( side_engine->flg().current_gender(),
"male" );
432 state->mp_settings().use_map_settings =
true;
433 state->mp_settings().saved_game = saved_game_mode::type::no;
441 "type",
"Elvish Druid",
445 BOOST_CHECK_EQUAL( side_engine->flg().choosable_genders().size(), 1 );
446 BOOST_CHECK_EQUAL( side_engine->flg().current_gender(),
"female" );
452 state->mp_settings().use_map_settings =
true;
453 state->mp_settings().saved_game = saved_game_mode::type::no;
461 "type",
"White Mage",
466 BOOST_CHECK_EQUAL( side_engine->flg().current_gender(),
"female" );
472 state->mp_settings().use_map_settings =
true;
473 state->mp_settings().saved_game = saved_game_mode::type::no;
486 BOOST_CHECK_EQUAL( side_engine->flg().choosable_genders().size(), 1 );
487 BOOST_CHECK_EQUAL( side_engine->flg().current_gender(),
"male" );
493 state->mp_settings().use_map_settings =
true;
494 state->mp_settings().saved_game = saved_game_mode::type::no;
502 "type",
"White Mage",
507 BOOST_CHECK_EQUAL( side_engine->flg().current_gender(),
"random" );
513 state->mp_settings().use_map_settings =
true;
514 state->mp_settings().saved_game = saved_game_mode::type::no;
525 state->mp_settings().use_map_settings =
true;
526 state->mp_settings().saved_game = saved_game_mode::type::no;
533 side[
"leader_lock"] =
true;
535 BOOST_CHECK_EQUAL( side_engine->flg().choosable_leaders().size(), 1 );
536 BOOST_CHECK_EQUAL( side_engine->flg().current_leader(),
"null" );
542 state->mp_settings().use_map_settings =
true;
543 state->mp_settings().saved_game = saved_game_mode::type::no;
550 side[
"faction"] =
"Random";
552 side_engine->resolve_random(*rng);
553 BOOST_CHECK( side_engine->flg().current_faction()[
"id"] !=
"Random" );
554 BOOST_CHECK( side_engine->flg().current_leader() !=
"random" && side_engine->flg().current_leader() !=
"null");
555 BOOST_CHECK( side_engine->flg().current_gender() !=
"random" && side_engine->flg().current_gender() !=
"null");
561 state->mp_settings().use_map_settings =
true;
562 state->mp_settings().saved_game = saved_game_mode::type::no;
569 "faction" ,
"Random",
575 side_engine->resolve_random(*rng);
576 BOOST_CHECK( side_engine->flg().current_faction()[
"id"] !=
"Random" );
577 BOOST_CHECK_EQUAL( side_engine->flg().current_leader(),
"Troll" );
578 BOOST_CHECK( side_engine->flg().current_gender() !=
"random" && side_engine->flg().current_gender() !=
"null" );
584 state->mp_settings().use_map_settings =
true;
585 state->mp_settings().saved_game = saved_game_mode::type::no;
592 "faction" ,
"Random",
594 "type",
"White Mage",
599 side_engine->resolve_random(*rng);
600 BOOST_CHECK( side_engine->flg().current_faction()[
"id"] !=
"Random" );
601 BOOST_CHECK_EQUAL( side_engine->flg().current_leader(),
"White Mage" );
602 BOOST_CHECK_EQUAL( side_engine->flg().current_gender(),
"male" );
608 state->mp_settings().use_map_settings =
true;
609 state->mp_settings().saved_game = saved_game_mode::type::no;
621 side_engine->resolve_random(*rng);
622 BOOST_CHECK( side_engine->flg().current_leader() !=
"random" );
632 state->mp_settings().use_map_settings =
false;
633 state->mp_settings().saved_game = saved_game_mode::type::no;
640 side[
"recruit"] =
"Elvish Archer";
642 BOOST_CHECK( side_engine->flg().choosable_factions().size() > 1 );
648 state->mp_settings().use_map_settings =
false;
649 state->mp_settings().saved_game = saved_game_mode::type::no;
656 side[
"faction"] =
"Custom";
658 BOOST_CHECK( side_engine->flg().choosable_factions().size() > 1 );
659 BOOST_CHECK_EQUAL( side_engine->flg().current_faction()[
"id"],
"Custom" );
660 BOOST_CHECK_EQUAL( side_engine->new_config()[
"recruit"].empty(),
true );
666 state->mp_settings().use_map_settings =
false;
667 state->mp_settings().saved_game = saved_game_mode::type::no;
674 side[
"previous_recruits"] =
"Elvish Archer";
676 BOOST_CHECK( side_engine->flg().choosable_factions().size() > 1 );
677 BOOST_CHECK_EQUAL( side_engine->new_config()[
"previous_recruits"],
"Elvish Archer" );
683 state->mp_settings().use_map_settings =
false;
684 state->mp_settings().saved_game = saved_game_mode::type::no;
692 "type",
"Goblin Impaler",
696 side_engine->flg().set_current_faction(
"Rebels");
697 BOOST_CHECK( side_engine->flg().choosable_leaders().size() > 1 );
703 state->mp_settings().use_map_settings =
false;
704 state->mp_settings().saved_game = saved_game_mode::type::no;
711 "faction" ,
"Custom",
717 BOOST_CHECK( side_engine->flg().choosable_leaders().size() > 1 );
718 const std::vector<std::string>& leaders = side_engine->flg().choosable_leaders();
719 BOOST_CHECK_EQUAL( std::count(leaders.begin(), leaders.end(),
"Swordsman"), 1 );
725 state->mp_settings().use_map_settings =
false;
726 state->mp_settings().saved_game = saved_game_mode::type::no;
738 side_engine->flg().set_current_faction(
"Rebels");
739 side_engine->flg().set_current_leader(
"Elvish Ranger");
744 BOOST_AUTO_TEST_SUITE_END()
A config object defines a single node in a WML file, with access to child nodes.
void append(const config &cfg)
Append data from another config object to this one.
void remove_attributes(T... keys)
config & mandatory_child(config_key_type key, int n=0)
Returns the nth child with the given key, or throws an error if there is none.
void clear_children(T... keys)
const attribute_value * get(config_key_type key) const
Returns a pointer to the attribute with the given key or nullptr if it does not exist.
@ NO_FORCE_RELOAD
Don't reload if the previous defines equal the new defines.
this class is initialized once at game start put all initialization and wipe code in the methods here...
config * current_config()
connect_engine(saved_game &state, const bool first_scenario, mp_game_metadata *metadata)
test_connect_engine(saved_game &gamestate)
std::shared_ptr< side_engine > side_engine_ptr
game_display & get_fake_display(const int width, const int height)
Gets a fake test display.
std::vector< std::string > dummy_args
hotkey::manager hotkey_manager
commandline_options cmdline_opts
std::unique_ptr< game_config_manager > config_manager
BOOST_FIXTURE_TEST_SUITE(test_map_location, MLFixture)
static ng::side_engine * create_side_engine(const config &defaults, test_connect_engine *connect_engine)
static test_connect_engine * create_test_connect_engine()
BOOST_AUTO_TEST_CASE(flg_map_settings2)