17 #define GETTEXT_DOMAIN "wesnoth-lib"
135 #include <boost/test/unit_test.hpp>
137 #include <functional>
145 , dummy_args({
"wesnoth",
"--noaddons"})
202 T* create() {
return new T(); }
205 typedef std::pair<unsigned, unsigned>
resolution;
206 typedef std::vector<std::pair<unsigned, unsigned>> resolution_list;
209 void test_resolutions(
const resolution_list& resolutions)
214 dialog_tester<T> ctor;
215 const std::unique_ptr<modal_dialog> dlg(ctor.create());
216 BOOST_REQUIRE_MESSAGE(dlg.get(),
"Failed to create a dialog.");
221 std::string exception;
225 exception =
"gui2::layout_exception_width_modified";
227 exception =
"gui2::layout_exception_width_resize_failed";
229 exception =
"gui2::layout_exception_height_resize_failed";
231 exception =
e.dev_message;
232 }
catch(
const std::exception&
e) {
233 exception =
e.what();
237 BOOST_CHECK_MESSAGE(exception.empty(),
242 <<
"\nException caught: " << exception <<
'.');
247 void test_popup_resolutions(
const resolution_list& resolutions)
249 bool interact =
false;
250 for(
int i = 0;
i < 2; ++
i) {
258 dialog_tester<T> ctor;
259 const std::unique_ptr<modeless_dialog> dlg(ctor.create());
260 BOOST_REQUIRE_MESSAGE(dlg.get(),
"Failed to create a dialog.");
265 std::string exception;
269 BOOST_REQUIRE_NE(window,
static_cast<void*
>(
nullptr));
272 exception =
"gui2::layout_exception_width_modified";
274 exception =
"gui2::layout_exception_width_resize_failed";
276 exception =
"gui2::layout_exception_height_resize_failed";
278 exception =
e.dev_message;
279 }
catch(
const std::exception&
e) {
280 exception =
e.what();
284 BOOST_CHECK_MESSAGE(exception.empty(),
289 <<
"\nException caught: " << exception <<
'.');
297 #pragma warning(push)
298 #pragma warning(disable: 4702)
300 void test_tip_resolutions(
const resolution_list& resolutions
301 ,
const std::string&
id)
308 std::string exception;
311 ,
"Test message for a tooltip."
316 exception =
"gui2::layout_exception_width_modified";
318 exception =
"gui2::layout_exception_width_resize_failed";
320 exception =
"gui2::layout_exception_height_resize_failed";
322 exception =
e.dev_message;
323 }
catch(
const std::exception&
e) {
324 exception =
e.what();
328 BOOST_CHECK_MESSAGE(exception.empty(),
329 "Test for tip '" <<
id
333 <<
"\nException caught: " << exception <<
'.');
340 const resolution_list& get_gui_resolutions()
342 static resolution_list result {
359 test_resolutions<T>(get_gui_resolutions());
371 for(std::size_t
i = 0;
i < 2; ++
i) {
373 test_popup_resolutions<T>(get_gui_resolutions());
379 void test_tip(
const std::string&
id)
383 for(std::size_t
i = 0;
i < 2; ++
i) {
385 test_tip_resolutions(get_gui_resolutions(),
id);
401 test<addon_connect>();
405 test<addon_license_prompt>();
409 test<campaign_difficulty>();
417 test<editor_choose_addon>();
425 test<core_selection>();
433 test<depcheck_confirm_change>();
437 test<depcheck_select_new>();
445 test<editor_edit_pbl>();
449 test<editor_edit_pbl_translation>();
457 test<editor_edit_label>();
461 test<editor_edit_side>();
465 test<editor_edit_scenario>();
469 test<editor_generate_map>();
473 test<editor_new_map>();
477 test<editor_resize_map>();
481 test<faction_select>();
489 test<folder_create>();
493 test<formula_debugger>();
497 test<game_cache_options>();
505 test<game_version>();
513 test<game_save_message>();
517 test<game_save_oos>();
521 test<generator_settings>();
529 test<install_dependencies>();
533 test<language_selection>();
541 test<lobby_player_info>();
545 test<log_settings>();
553 test<mp_alerts_options>();
561 test<mp_join_game_password_prompt>();
569 test<mp_method_selection>();
577 test<simple_item_selector>();
581 test<screenshot_notification>();
585 test<select_orb_colors>();
589 test<statistics_dialog>();
593 test<surrender_quit>();
601 test<transient_message>();
613 test<wml_message_left>();
617 test<wml_message_right>();
621 test<wml_message_double>();
625 test<achievements_dialog>();
629 test<community_dialog>();
633 test<mp_match_history>();
637 test_popup<debug_clock>();
641 test_tip(
"tooltip_large");
649 test<tod_new_schedule>();
654 test<editor_edit_unit>();
662 std::set<std::string> omitted {
677 "addon_uninstall_list",
680 "network_transmission",
681 "synched_choice_wait",
683 "preferences_dialog",
688 "mp_host_game_prompt",
696 "attack_predictions",
702 "gamestate_inspector",
704 "sp_options_configure",
705 "campaign_selection",
711 for(
const std::string&
item : widgets_tested)
713 widget_list.erase(
item);
715 BOOST_CHECK_EQUAL(omitted.count(
item), 0);
717 for(
const std::string&
item : omitted)
719 widget_list.erase(
item);
723 BOOST_CHECK_EQUAL(widget_list.size(), 0);
724 for(
const std::string&
id : widget_list) {
725 PLAIN_LOG <<
"Window '" <<
id <<
"' registered but not tested.";
734 message dlg(
"title",
"message",
true,
false,
false);
737 BOOST_CHECK(
e.user_message ==
_(
"Failed to show a dialog, which doesn't fit on the screen."));
742 BOOST_ERROR(
"Didn't catch the wanted exception, instead caught nothing.");
745 BOOST_AUTO_TEST_SUITE_END()
762 std::string host_name =
"host_name";
772 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.
774 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.)";
811 dialog_tester() : state(
config {
"campaign_type",
"scenario"}),
ng(state)
827 dialog_tester() : vcfg(cfg), r(rbase) {}
845 struct dialog_tester<
prompt>
857 std::vector<config> cores;
871 std::vector<time_of_day> times;
886 std::string
label =
"Label text to modify";
887 bool team_only =
false;
897 std::string text =
"text to modify";
900 return new edit_text(
"title",
"label", text);
907 std::string
label =
"Label text to modify";
908 std::string category =
"test";
909 bool immutable =
false,
fog =
false,
shroud =
false;
943 std::string
id, name, descr;
944 int turns = 0, xp_mod = 50;
945 bool defeat_enemies =
false, random_start =
false;
957 dialog_tester() :
info(
t) {}
997 std::string title =
"Title";
998 std::string filename =
"filename";
1009 std::string title =
"Title";
1010 std::string filename =
"filename";
1011 std::string
message =
"message";
1022 bool ignore_all =
false;
1023 std::string title =
"Title";
1024 std::string filename =
"filename";
1025 std::string
message =
"message";
1046 std::string
id =
"";
1061 dialog_tester() : connection(
"",
""), li()
1066 return new mp_lobby(li, connection, selected_game);
1074 dialog_tester() : connection(
"",
"")
1084 void add_chat_message(
const std::time_t&,
1085 const std::string&,
int,
const std::string&,
1087 void send_chat_message(
const std::string&,
bool) {}
1089 void clear_messages() {}
1096 fake_chat_handler ch;
1101 : connection(
"",
"")
1125 return new message(
"Title",
"Message",
false,
false,
false);
1133 dialog_tester() : state(
config {
"campaign_type",
"multiplayer"})
1155 std::string report_text;
1162 static std::vector<std::string> depcheck_mods {
"mod_one",
"some other",
"more"};
1187 return new mp_login(
"wesnoth.org",
"label",
true);
1212 static theme_info make_theme(
const std::string& name)
1220 static std::vector<theme_info> themes;
1226 std::vector<theme_info> dialog_tester<theme_list>::themes {make_theme(
"classic"), make_theme(
"new"), make_theme(
"more"), make_theme(
"themes")};
1231 std::vector<std::unique_ptr<map_generator>> map_generators;
1235 if(
i[
"scenario_generation"] ==
"default") {
1236 auto generator_cfg =
i.optional_child(
"generator");
1237 if (generator_cfg) {
1244 BOOST_REQUIRE_MESSAGE(result,
"Failed to create a dialog.");
1286 std::string folder_name;
1305 std::vector<std::string> args;
1308 dialog_tester() : opts(args),
game(opts) {}
1318 static std::vector<std::string> files;
1321 return new wml_error(
"Summary",
"Post summary", files,
"Details");
1324 std::vector<std::string> dialog_tester<wml_error>::files {
"some",
"files",
"here"};
1356 config era_cfg, side_cfg;
1357 std::vector<const config*> eras;
1361 : era_cfg(), side_cfg(), eras(1, &era_cfg)
1362 , flg(eras, side_cfg, false, false, false)
1375 dialog_tester() :
data(cfg) {}
1388 dialog_tester() : create_eng(state)
1389 , config_eng(create_eng.get_state()) {}
1402 dialog_tester() :
t() , stats_record(), stats(stats_record) {}
1422 std::string
id =
"id";
1423 std::string name =
"name";
1443 movetype[
"name"] =
"Test Movetype";
1446 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)
This shows the dialog to provide a password when uploading an add-on.
This shows the dialog for managing addons and connecting to the addon server.
Shows the list of addons on the server available for installation.
The campaign mode difficulty menu.
This shows the dialog which allows the user to choose which campaign to play.
This shows the dialog which allows the user to choose which core to play.
This shows the dialog to modify tod schedules.
Asks the user to confirm a change required to proceed.
Offers a list of compatible items if a currently selected one is incompatible.
Dialog for editing gamemap labels.
Dialog for renaming units in-game.
Dialog for adding a translation while editing an add-on's _server.pbl.
Dialog for editing gamemap labels.
Dialog for adding a translation while editing an add-on's _server.pbl.
Dialog for editing an add-on's _server.pbl.
Dialog for editing gamemap scenarios.
Dialog for editing gamemap sides.
Dialog that allows user to create custom unit types.
The dialog for selecting which random generator to use in the editor.
This shows the dialog to resize the current map.
Dialog for providing the name of a new folder to create.
This shows the dialog to select and load a savegame file.
This shows the dialog to create a savegame file.
Main class to show messages to the user.
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.
Dialog for entering a password for joining a password-protected MP game.
This shows the dialog to log in to the MP server.
This shows a dialog to report players on the multiplayer server.
Dialog for getting a single text value from the player.
Notification dialog used after saving a game or map screenshot to display information about it for th...
A simple one-column listbox with OK and Cancel buttons.
This shows the dialog to confirm surrender and/or quitting the game.
Dialog for selecting a GUI theme.
This class implements the title screen.
Dialog that takes new schedule ID and name from the player.
Shows a transient message.
WML preprocessor/parser error report dialog.
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.
std::pair< std::string, unsigned > item
const std::vector< std::string > items
void send_to_server(const config &data)
Attempts to send given data to server if a connection is open.
std::string password(const std::string &server, const std::string &login)
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.
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)
Add a special kind of assert to validate whether the input from WML doesn't contain any problems that...