17 #define GETTEXT_DOMAIN "wesnoth-lib"
134 #include <boost/test/unit_test.hpp>
136 #include <functional>
144 , dummy_args({
"wesnoth",
"--noaddons"})
201 T* create() {
return new T(); }
204 typedef std::pair<unsigned, unsigned> resolution;
205 typedef std::vector<std::pair<unsigned, unsigned>> resolution_list;
208 void test_resolutions(
const resolution_list& resolutions)
210 for(
const resolution& resolution : resolutions) {
213 dialog_tester<T> ctor;
214 const std::unique_ptr<modal_dialog> dlg(ctor.create());
215 BOOST_REQUIRE_MESSAGE(dlg.get(),
"Failed to create a dialog.");
220 std::string exception;
224 exception =
"gui2::layout_exception_width_modified";
226 exception =
"gui2::layout_exception_width_resize_failed";
228 exception =
"gui2::layout_exception_height_resize_failed";
230 exception =
e.dev_message;
231 }
catch(
const std::exception&
e) {
232 exception =
e.what();
236 BOOST_CHECK_MESSAGE(exception.empty(),
239 <<
" resolution = " << resolution.first
240 <<
'x' << resolution.second
241 <<
"\nException caught: " << exception <<
'.');
246 void test_popup_resolutions(
const resolution_list& resolutions)
248 bool interact =
false;
249 for(
int i = 0;
i < 2; ++
i) {
250 for(
const resolution& resolution : resolutions) {
252 if(resolution.first == 800 && resolution.second == 600) {
257 dialog_tester<T> ctor;
258 const std::unique_ptr<modeless_dialog> dlg(ctor.create());
259 BOOST_REQUIRE_MESSAGE(dlg.get(),
"Failed to create a dialog.");
264 std::string exception;
268 BOOST_REQUIRE_NE(window,
static_cast<void*
>(
nullptr));
271 exception =
"gui2::layout_exception_width_modified";
273 exception =
"gui2::layout_exception_width_resize_failed";
275 exception =
"gui2::layout_exception_height_resize_failed";
277 exception =
e.dev_message;
278 }
catch(
const std::exception&
e) {
279 exception =
e.what();
283 BOOST_CHECK_MESSAGE(exception.empty(),
286 <<
" resolution = " << resolution.first
287 <<
'x' << resolution.second
288 <<
"\nException caught: " << exception <<
'.');
296 #pragma warning(push)
297 #pragma warning(disable: 4702)
299 void test_tip_resolutions(
const resolution_list& resolutions
300 ,
const std::string&
id)
302 for(
const auto& resolution : resolutions) {
307 std::string exception;
310 ,
"Test message for a tooltip."
315 exception =
"gui2::layout_exception_width_modified";
317 exception =
"gui2::layout_exception_width_resize_failed";
319 exception =
"gui2::layout_exception_height_resize_failed";
321 exception =
e.dev_message;
322 }
catch(
const std::exception&
e) {
323 exception =
e.what();
327 BOOST_CHECK_MESSAGE(exception.empty(),
328 "Test for tip '" <<
id
330 <<
" resolution = " << resolution.first
331 <<
'x' << resolution.second
332 <<
"\nException caught: " << exception <<
'.');
339 const resolution_list& get_gui_resolutions()
341 static resolution_list result {
358 test_resolutions<T>(get_gui_resolutions());
370 for(std::size_t
i = 0;
i < 2; ++
i) {
372 test_popup_resolutions<T>(get_gui_resolutions());
378 void test_tip(
const std::string&
id)
382 for(std::size_t
i = 0;
i < 2; ++
i) {
384 test_tip_resolutions(get_gui_resolutions(),
id);
400 test<addon_connect>();
404 test<addon_license_prompt>();
408 test<campaign_difficulty>();
416 test<editor_choose_addon>();
424 test<core_selection>();
432 test<depcheck_confirm_change>();
436 test<depcheck_select_new>();
444 test<editor_edit_pbl>();
448 test<editor_edit_pbl_translation>();
456 test<editor_edit_label>();
460 test<editor_edit_side>();
464 test<editor_edit_scenario>();
468 test<editor_generate_map>();
472 test<editor_new_map>();
476 test<editor_resize_map>();
480 test<faction_select>();
488 test<folder_create>();
492 test<formula_debugger>();
496 test<game_cache_options>();
504 test<game_version>();
512 test<game_save_message>();
516 test<game_save_oos>();
520 test<generator_settings>();
524 test<gui_test_dialog>();
532 test<install_dependencies>();
536 test<language_selection>();
544 test<lobby_player_info>();
548 test<log_settings>();
556 test<mp_alerts_options>();
564 test<mp_join_game_password_prompt>();
572 test<mp_method_selection>();
580 test<simple_item_selector>();
584 test<screenshot_notification>();
588 test<select_orb_colors>();
592 test<statistics_dialog>();
596 test<surrender_quit>();
604 test<transient_message>();
612 test<wml_message_left>();
616 test<wml_message_right>();
620 test<wml_message_double>();
624 test<achievements_dialog>();
628 test<addon_server_info>();
632 test<mp_match_history>();
636 test<gui2::dialogs::migrate_version_selection>();
640 test_popup<debug_clock>();
644 test_tip(
"tooltip_large");
652 test<tod_new_schedule>();
657 test<editor_edit_unit>();
665 std::set<std::string> omitted {
680 "addon_uninstall_list",
683 "network_transmission",
684 "synched_choice_wait",
686 "preferences_dialog",
689 "mp_host_game_prompt",
697 "attack_predictions",
703 "gamestate_inspector",
705 "sp_options_configure",
706 "campaign_selection",
712 for(
const std::string& item : widgets_tested)
714 widget_list.erase(item);
716 BOOST_CHECK_EQUAL(omitted.count(item), 0);
718 for(
const std::string& item : omitted)
720 widget_list.erase(item);
724 BOOST_CHECK_EQUAL(widget_list.size(), 0);
725 for(
const std::string&
id : widget_list) {
726 PLAIN_LOG <<
"Window '" <<
id <<
"' registered but not tested.";
735 message dlg(
"title",
"message",
true,
false,
false);
738 BOOST_CHECK(
e.user_message ==
_(
"Failed to show a dialog, which doesn’t fit on the screen."));
743 BOOST_ERROR(
"Didn't catch the wanted exception, instead caught nothing.");
746 BOOST_AUTO_TEST_SUITE_END()
775 std::string host_name =
"host_name";
785 std::string license_terms = R
"(Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis ante nibh, dignissim ullamcorper tristique eget, condimentum sit amet enim. Aenean dictum pulvinar lacinia. Etiam eleifend, leo sed efficitur consectetur, augue nulla ornare lectus, vitae molestie lacus risus vitae libero. Quisque odio nunc, porttitor eget fermentum sit amet, faucibus eu risus. Praesent sit amet lacus tortor. Suspendisse volutpat quam vitae ipsum fermentum, in vulputate metus egestas. Nulla id consequat ex. Nulla ac dignissim nisl, nec euismod lectus. Duis vitae dolor ornare, convallis justo in, porta dui.
787 Sed faucibus nibh sit amet ligula porta, non malesuada nibh tristique. Maecenas aliquam diam non eros convallis mattis. Proin rhoncus condimentum leo, sed condimentum magna. Phasellus cursus condimentum lacus, sed sodales lacus. Sed pharetra dictum metus, eget dictum nibh lobortis imperdiet. Nunc tempus sollicitudin bibendum. In porttitor interdum orci. Curabitur vitae nibh vestibulum, condimentum lectus quis, condimentum dui. In quis cursus nisl. Maecenas semper neque eu ipsum aliquam, id porta ligula lacinia. Integer sed blandit ex, eu accumsan magna.)";
813 const config items(
"difficulty");
824 dialog_tester() : state(
config {
"campaign_type",
"scenario"}),
ng(state)
840 dialog_tester() : vcfg(cfg), r(rbase) {}
858 struct dialog_tester<
prompt>
870 std::vector<config> cores;
884 std::vector<time_of_day> times;
899 std::string
label =
"Label text to modify";
900 bool team_only =
false;
910 std::string text =
"text to modify";
913 return new edit_text(
"title",
"label", text);
920 std::string
label =
"Label text to modify";
921 std::string category =
"test";
922 bool immutable =
false, fog =
false, shroud =
false;
956 std::string
id, name, descr;
957 int turns = 0, xp_mod = 50;
958 bool defeat_enemies =
false, random_start =
false;
970 dialog_tester() :
info(
t) {}
1010 std::string title =
"Title";
1022 std::string title =
"Title";
1024 std::string
message =
"message";
1035 bool ignore_all =
false;
1036 std::string title =
"Title";
1038 std::string
message =
"message";
1059 std::string
id =
"";
1074 dialog_tester() : connection(
"",
""), li()
1079 return new mp_lobby(li, connection, selected_game);
1087 dialog_tester() : connection(
"",
"")
1097 struct dialog_tester<
gui2::dialogs::migrate_version_selection>
1106 void add_chat_message(
const std::time_t&,
1107 const std::string&,
int,
const std::string&,
1109 void send_chat_message(
const std::string&,
bool) {}
1111 void clear_messages() {}
1118 fake_chat_handler ch;
1123 : connection(
"",
"")
1147 return new message(
"Title",
"Message",
false,
false,
false);
1155 dialog_tester() : state(
config {
"campaign_type",
"multiplayer"})
1167 std::string password;
1177 std::string report_text;
1184 static std::vector<std::string> depcheck_mods {
"mod_one",
"some other",
"more"};
1209 return new mp_login(
"wesnoth.org",
"label",
true);
1234 static theme_info make_theme(
const std::string& name)
1242 static std::vector<theme_info> themes;
1248 std::vector<theme_info> dialog_tester<theme_list>::themes {make_theme(
"classic"), make_theme(
"new"), make_theme(
"more"), make_theme(
"themes")};
1253 std::vector<std::unique_ptr<map_generator>> map_generators;
1257 if(
i[
"scenario_generation"] ==
"default") {
1258 auto generator_cfg =
i.optional_child(
"generator");
1259 if (generator_cfg) {
1266 BOOST_REQUIRE_MESSAGE(result,
"Failed to create a dialog.");
1308 std::string folder_name;
1327 std::vector<std::string> args;
1330 dialog_tester() : opts(args),
game(opts) {}
1340 static std::vector<std::string> files;
1343 return new wml_error(
"Summary",
"Post summary", files,
"Details");
1346 std::vector<std::string> dialog_tester<wml_error>::files {
"some",
"files",
"here"};
1378 config era_cfg, side_cfg;
1379 std::vector<const config*> eras;
1383 : era_cfg(), side_cfg(), eras(1, &era_cfg)
1384 , flg(eras, side_cfg, false, false, false)
1397 dialog_tester() :
data(cfg) {}
1410 dialog_tester() : create_eng(state)
1411 , config_eng(create_eng.get_state()) {}
1424 dialog_tester() :
t() , stats_record(), stats(stats_record) {}
1444 std::string
id =
"id";
1465 movetype[
"name"] =
"Test Movetype";
1468 movetype.add_child(
"movement_costs");
Add-ons (campaignd) client class.
A config object defines a single node in a WML file, with access to child nodes.
config & add_child(config_key_type key)
Singleton class to manage game config file caching.
void add_define(const std::string &define)
Add a entry to preproc defines map.
static config_cache & instance()
Get reference to the singleton object.
void clear_defines()
Clear stored defines map to default values.
void get_config(const std::string &path, config &cfg, abstract_validator *validator=nullptr)
Gets a config object from given path.
A class grating read only view to a vector of config objects, viewed as one config with all children ...
static game_config_view wrap(const config &cfg)
Dialog that allows user to create custom unit types.
A test dialog for testing various gui2 features.
Main class to show messages to the user.
This shows the dialog to select a previous version of Wesnoth to migrate preferences from and redownl...
Abstract base class for all modal dialogs.
virtual const std::string & window_id() const =0
The ID of the window to build.
bool show(const unsigned auto_close_time=0)
Shows the window.
The popup class shows windows that are shown non-modal.
virtual const std::string & window_id() const
The ID of the window to build.
This shows the dialog to confirm surrender and/or quitting the game.
This class implements the title screen.
Dialog that takes new schedule ID and name from the player.
Shows a transient message.
Shows a dialog with two portraits, one on each side.
Shows a dialog with the portrait on the left side.
Shows a dialog with the portrait on the right side.
base class of top level items, the only item which needs to store the final canvases to draw on.
void draw()
Draws the window.
The basic "size" of the unit - flying, small land, large land, etc.
This class represents the collective information the client has about the players and games on the se...
FLG stands for faction, leader and gender.
static std::shared_ptr< save_index_class > default_saves_dir()
Returns an instance for managing saves in filesystem::get_saves_dir()
This class stores all the data for a single 'side' (in game nomenclature).
A variable-expanding proxy for the config class.
A class that represents a TCP/IP connection to the wesnothd server.
Networked add-ons (campaignd) client interface.
Declarations for File-IO.
static std::string _(const char *str)
std::string label
What to show in the filter's drop-down list.
std::string id
Text to match against addon_info.tags()
std::map< std::string, addon_info > addons_list
bool load_language_list()
Defines the exception classes for the layout algorithm.
map_generator * create_map_generator(const std::string &name, const config &cfg, const config *vars)
Various uncategorised dialogs.
void point(int x, int y)
Draw a single point.
bool delete_file(const std::string &filename)
std::string read_file(const std::string &fname)
Basic disk I/O - read file.
void write_file(const std::string &fname, const std::string &data, std::ios_base::openmode mode)
Throws io_exception if an error occurs.
Game configuration data as global variables.
void load_config(const config &v)
void show(const std::string &window_id, const t_string &message, const point &mouse, const SDL_Rect &source_rect)
Shows a tip.
void remove()
Removes a tip.
std::string get_modal_dialog_id(const modal_dialog &dialog)
std::string get_modeless_dialog_id(const modeless_dialog &dialog)
std::set< std::string > & registered_window_types()
Returns the list of registered windows.
bool new_widgets
Do we wish to use the new library or not.
void send_to_server(const config &data)
Attempts to send given data to server if a connection is open.
game_display & get_fake_display(const int width, const int height)
Gets a fake test display.
std::string get_unknown_exception_type()
Utility function for finding the type of thing caught with catch(...).
std::vector< std::string > split(const config_attribute_value &val)
This file contains the settings handling of the widget library.
std::string filename
Filename.
The basic class for representing 8-bit RGB or RGBA colour values.
The paths manager is responsible for recording the various paths that binary files may be located at.
Exception thrown when the height resizing has failed.
Exception thrown when the width has been modified during resizing.
Exception thrown when the width resizing has failed.
This class represents the information a client has about another player.
static config main_config
std::unique_ptr< game_config_manager > config_manager
std::vector< std::string > dummy_args
static const std::string widgets_file
Helper class, don't construct this directly.
BOOST_AUTO_TEST_CASE(modal_dialog_test_addon_auth)
BOOST_FIXTURE_TEST_SUITE(test_map_location, MLFixture)
static map_location::direction s
Add a special kind of assert to validate whether the input from WML doesn't contain any problems that...