15 #define GETTEXT_DOMAIN "wesnoth-test" 17 #include <boost/test/unit_test.hpp> 27 #include <boost/assign.hpp> 42 std::unique_ptr<saved_game> state;
43 std::unique_ptr<randomness::mt_rng> rng;
51 dummy_args({
"wesnoth",
"--noaddons"}),
52 cmdline_opts(dummy_args),
60 state->classification().campaign_type = game_classification::CAMPAIGN_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;
68 state->set_scenario(config_manager->
69 game_config().find_child(
"multiplayer",
"id", state->mp_settings().name));
71 state->mp_settings().num_turns = state->get_starting_point()[
"turns"];
101 side_cfg.
append(defaults);
116 state->mp_settings().use_map_settings =
true;
118 std::unique_ptr<test_connect_engine>
125 side[
"recruit"] =
"Elvish Archer";
129 BOOST_CHECK_EQUAL(
side_engine->new_config()[
"recruit"],
"Elvish Archer" );
133 side[
"faction"] =
"Custom";
136 BOOST_CHECK_EQUAL(
side_engine->flg().current_faction()[
"id"],
"Custom" );
137 BOOST_CHECK_EQUAL(
side_engine->new_config()[
"recruit"].empty(), true );
141 side[
"faction"] =
"Random";
144 BOOST_CHECK_EQUAL(
side_engine->flg().current_faction()[
"id"],
"Random" );
148 side[
"faction"] =
"Rebels";
151 BOOST_CHECK_EQUAL(
side_engine->flg().current_faction()[
"id"],
"Rebels" );
155 side[
"faction"] =
"ThisFactionDoesNotExist";
157 BOOST_CHECK(
side_engine->flg().choosable_factions().size() > 1 );
158 BOOST_CHECK_EQUAL(
side_engine->flg().current_faction()[
"id"],
"Random" );
162 side[
"recruit"] =
"Elvish Archer";
163 side[
"faction"] =
"Undead";
171 side[
"previous_recruits"] =
"Elvish Archer";
174 BOOST_CHECK_EQUAL(
side_engine->new_config()[
"previous_recruits"],
179 side[
"type"] =
"Shadow";
181 BOOST_CHECK_EQUAL(
side_engine->flg().choosable_leaders().size(), 1 );
182 BOOST_CHECK_EQUAL(
side_engine->flg().current_leader(),
"Shadow" );
183 BOOST_CHECK_EQUAL(
side_engine->new_config()[
"type"],
"Shadow" );
187 side[
"type"] =
"ThisUnitDoesNotExist";
189 BOOST_CHECK_EQUAL(
side_engine->flg().choosable_leaders().size(), 1 );
190 BOOST_CHECK_EQUAL(
side_engine->flg().current_leader(),
"null" );
194 side[
"faction"] =
"Custom";
196 BOOST_CHECK(
side_engine->flg().choosable_leaders().size() > 1 );
197 BOOST_CHECK_EQUAL(
side_engine->flg().current_leader(),
"random" );
201 side[
"faction"] =
"Random";
203 BOOST_CHECK_EQUAL(
side_engine->flg().choosable_leaders().size(), 1 );
204 BOOST_CHECK_EQUAL(
side_engine->flg().current_leader(),
"null" );
208 side[
"faction"] =
"Undead";
210 BOOST_CHECK(
side_engine->flg().choosable_leaders().size() > 1 );
211 BOOST_CHECK_EQUAL(
side_engine->flg().current_leader(),
"random" );
215 side[
"id"] =
"LeaderID";
216 side[
"type"] =
"Elvish Archer";
218 unit[
"id"] =
"LeaderID";
219 unit[
"type"] =
"Elvish Ranger";
221 BOOST_CHECK_EQUAL(
side_engine->flg().choosable_leaders().size(), 1 );
222 BOOST_CHECK_EQUAL(
side_engine->flg().current_leader(),
"Elvish Ranger" );
226 side[
"type"] =
"random";
228 BOOST_CHECK_EQUAL(
side_engine->flg().choosable_leaders().size(), 1 );
232 side[
"type"] =
"Elvish Archer";
234 BOOST_CHECK_EQUAL(
side_engine->flg().choosable_genders().size(), 3 );
235 BOOST_CHECK_EQUAL(
side_engine->flg().current_gender(),
"random" );
239 side[
"type"] =
"Swordsman";
241 BOOST_CHECK_EQUAL(
side_engine->flg().choosable_genders().size(), 1 );
242 BOOST_CHECK_EQUAL(
side_engine->flg().current_gender(),
"male" );
246 side[
"type"] =
"Elvish Druid";
248 BOOST_CHECK_EQUAL(
side_engine->flg().choosable_genders().size(), 1 );
249 BOOST_CHECK_EQUAL(
side_engine->flg().current_gender(),
"female" );
253 side[
"type"] =
"White Mage";
254 side[
"gender"] =
"female";
257 BOOST_CHECK_EQUAL(
side_engine->flg().current_gender(),
"female" );
261 side[
"type"] =
"Troll";
262 side[
"gender"] =
"female";
264 BOOST_CHECK_EQUAL(
side_engine->flg().choosable_genders().size(), 1 );
265 BOOST_CHECK_EQUAL(
side_engine->flg().current_gender(),
"male" );
269 side[
"type"] =
"White Mage";
270 side[
"gender"] =
"random";
273 BOOST_CHECK_EQUAL(
side_engine->flg().current_gender(),
"random" );
277 side[
"leader_lock"] =
true;
279 BOOST_CHECK_EQUAL(
side_engine->flg().choosable_leaders().size(), 1 );
280 BOOST_CHECK_EQUAL(
side_engine->flg().current_leader(),
"null" );
284 side[
"faction"] =
"Random";
287 BOOST_CHECK(
side_engine->flg().current_faction()[
"id"] !=
"Random" );
288 BOOST_CHECK(
side_engine->flg().current_leader() !=
"random" &&
290 BOOST_CHECK(
side_engine->flg().current_gender() !=
"random" &&
295 side[
"faction"] =
"Random";
296 side[
"type"] =
"Troll";
299 BOOST_CHECK(
side_engine->flg().current_faction()[
"id"] !=
"Random" );
300 BOOST_CHECK_EQUAL(
side_engine->flg().current_leader(),
"Troll" );
301 BOOST_CHECK(
side_engine->flg().current_gender() !=
"random" &&
306 side[
"faction"] =
"Random";
307 side[
"type"] =
"White Mage";
308 side[
"gender"] =
"male";
311 BOOST_CHECK(
side_engine->flg().current_faction()[
"id"] !=
"Random" );
312 BOOST_CHECK_EQUAL(
side_engine->flg().current_leader(),
"White Mage" );
313 BOOST_CHECK_EQUAL(
side_engine->flg().current_gender(),
"male" );
317 side[
"type"] =
"random";
320 BOOST_CHECK(
side_engine->flg().current_leader() !=
"random" );
326 state->mp_settings().use_map_settings =
false;
328 const std::unique_ptr<test_connect_engine>
335 side[
"recruit"] =
"Elvish Archer";
337 BOOST_CHECK( side_engine->flg().choosable_factions().size() > 1 );
342 side[
"faction"] =
"Custom";
344 BOOST_CHECK( side_engine->flg().choosable_factions().size() > 1 );
345 BOOST_CHECK_EQUAL( side_engine->flg().current_faction()[
"id"],
"Custom" );
346 BOOST_CHECK_EQUAL( side_engine->new_config()[
"recruit"].empty(), true );
350 side[
"previous_recruits"] =
"Elvish Archer";
352 BOOST_CHECK( side_engine->flg().choosable_factions().size() > 1 );
353 BOOST_CHECK_EQUAL( side_engine->new_config()[
"previous_recruits"],
358 side[
"type"] =
"Goblin Impaler";
360 side_engine->flg().set_current_faction(
"Rebels");
361 BOOST_CHECK( side_engine->flg().choosable_leaders().size() > 1 );
365 side[
"faction"] =
"Custom";
366 side[
"type"] =
"Swordsman";
368 BOOST_CHECK( side_engine->flg().choosable_leaders().size() > 1 );
369 const std::vector<std::string>& leaders =
370 side_engine->flg().choosable_leaders();
371 BOOST_CHECK_EQUAL( std::count(leaders.begin(), leaders.end(),
"Swordsman"),
376 side[
"gender"] =
"female";
378 side_engine->flg().set_current_faction(
"Rebels");
379 side_engine->flg().set_current_leader(
"Elvish Ranger");
380 BOOST_CHECK_EQUAL( side_engine->flg().current_gender(),
"random" );
388 BOOST_AUTO_TEST_SUITE_END()
config & child(config_key_type key, int n=0)
Returns the nth child with the given key, or a reference to an invalid config if there is none...
void clear_children(T... keys)
This class represents a single unit of a specific type.
void append(const config &cfg)
Append data from another config object to this one.
this class is initialized once at game start put all initialization and wipe code in the methods here...
void remove_attributes(T... keys)
BOOST_GLOBAL_FIXTURE(mp_connect_fixture)
Don't reload if the previous defines equal the new defines.
static ng::side_engine * create_side_engine(const config &defaults, test_connect_engine *connect_engine)
BOOST_AUTO_TEST_CASE(flg_map_settings)
BOOST_AUTO_TEST_SUITE(filesystem)
config * current_config()
Default, unset return value.
Game configuration data as global variables.
std::unique_ptr< game_config_manager > config_manager
static test_connect_engine * create_test_connect_engine()
std::vector< std::string > dummy_args
std::shared_ptr< side_engine > side_engine_ptr
config & add_child(config_key_type key)
commandline_options cmdline_opts
hotkey::manager hotkey_manager
connect_engine(saved_game &state, const bool first_scenario, mp_game_metadata *metadata)
A config object defines a single node in a WML file, with access to child nodes.
test_connect_engine(saved_game &gamestate)