17 #define GETTEXT_DOMAIN "wesnoth-lib"
133 #include <boost/test/unit_test.hpp>
135 #include <functional>
143 , dummy_args({
"wesnoth",
"--noaddons"})
200 T* create() {
return new T(); }
203 typedef std::pair<unsigned, unsigned> resolution;
204 typedef std::vector<std::pair<unsigned, unsigned>> resolution_list;
207 void test_resolutions(
const resolution_list& resolutions)
209 for(
const resolution& resolution : resolutions) {
212 dialog_tester<T> ctor;
213 const std::unique_ptr<modal_dialog> dlg(ctor.create());
214 BOOST_REQUIRE_MESSAGE(dlg.get(),
"Failed to create a dialog.");
219 std::string exception;
223 exception =
"gui2::layout_exception_width_modified";
225 exception =
"gui2::layout_exception_width_resize_failed";
227 exception =
"gui2::layout_exception_height_resize_failed";
229 exception =
e.dev_message;
230 }
catch(
const std::exception&
e) {
231 exception =
e.what();
235 BOOST_CHECK_MESSAGE(exception.empty(),
238 <<
" resolution = " << resolution.first
239 <<
'x' << resolution.second
240 <<
"\nException caught: " << exception <<
'.');
245 void test_popup_resolutions(
const resolution_list& resolutions)
247 bool interact =
false;
248 for(
int i = 0;
i < 2; ++
i) {
249 for(
const resolution& resolution : resolutions) {
251 if(resolution.first == 800 && resolution.second == 600) {
256 dialog_tester<T> ctor;
257 const std::unique_ptr<modeless_dialog> dlg(ctor.create());
258 BOOST_REQUIRE_MESSAGE(dlg.get(),
"Failed to create a dialog.");
263 std::string exception;
267 BOOST_REQUIRE_NE(window,
static_cast<void*
>(
nullptr));
270 exception =
"gui2::layout_exception_width_modified";
272 exception =
"gui2::layout_exception_width_resize_failed";
274 exception =
"gui2::layout_exception_height_resize_failed";
276 exception =
e.dev_message;
277 }
catch(
const std::exception&
e) {
278 exception =
e.what();
282 BOOST_CHECK_MESSAGE(exception.empty(),
285 <<
" resolution = " << resolution.first
286 <<
'x' << resolution.second
287 <<
"\nException caught: " << exception <<
'.');
295 #pragma warning(push)
296 #pragma warning(disable: 4702)
298 void test_tip_resolutions(
const resolution_list& resolutions
299 ,
const std::string&
id)
301 for(
const auto& resolution : resolutions) {
306 std::string exception;
309 ,
"Test message for a tooltip."
314 exception =
"gui2::layout_exception_width_modified";
316 exception =
"gui2::layout_exception_width_resize_failed";
318 exception =
"gui2::layout_exception_height_resize_failed";
320 exception =
e.dev_message;
321 }
catch(
const std::exception&
e) {
322 exception =
e.what();
326 BOOST_CHECK_MESSAGE(exception.empty(),
327 "Test for tip '" <<
id
329 <<
" resolution = " << resolution.first
330 <<
'x' << resolution.second
331 <<
"\nException caught: " << exception <<
'.');
338 const resolution_list& get_gui_resolutions()
340 static resolution_list result {
357 test_resolutions<T>(get_gui_resolutions());
369 for(std::size_t
i = 0;
i < 2; ++
i) {
371 test_popup_resolutions<T>(get_gui_resolutions());
377 void test_tip(
const std::string&
id)
381 for(std::size_t
i = 0;
i < 2; ++
i) {
383 test_tip_resolutions(get_gui_resolutions(),
id);
399 test<addon_connect>();
403 test<addon_license_prompt>();
407 test<campaign_difficulty>();
415 test<editor_choose_addon>();
423 test<core_selection>();
431 test<depcheck_confirm_change>();
435 test<depcheck_select_new>();
443 test<editor_edit_pbl>();
447 test<editor_edit_pbl_translation>();
455 test<editor_edit_label>();
459 test<editor_edit_side>();
463 test<editor_edit_scenario>();
467 test<editor_generate_map>();
471 test<editor_new_map>();
475 test<editor_resize_map>();
479 test<faction_select>();
487 test<folder_create>();
491 test<formula_debugger>();
495 test<game_cache_options>();
503 test<game_version>();
511 test<game_save_message>();
515 test<game_save_oos>();
519 test<generator_settings>();
523 test<gui_test_dialog>();
531 test<install_dependencies>();
535 test<language_selection>();
543 test<lobby_player_info>();
547 test<log_settings>();
555 test<mp_alerts_options>();
563 test<mp_join_game_password_prompt>();
571 test<mp_method_selection>();
579 test<simple_item_selector>();
583 test<screenshot_notification>();
587 test<select_orb_colors>();
591 test<statistics_dialog>();
595 test<surrender_quit>();
603 test<transient_message>();
611 test<wml_message_left>();
615 test<wml_message_right>();
619 test<wml_message_double>();
623 test<achievements_dialog>();
627 test<mp_match_history>();
631 test<gui2::dialogs::migrate_version_selection>();
635 test_popup<debug_clock>();
639 test_tip(
"tooltip_large");
647 test<tod_new_schedule>();
652 test<editor_edit_unit>();
660 std::set<std::string> omitted {
675 "addon_uninstall_list",
678 "network_transmission",
679 "synched_choice_wait",
681 "preferences_dialog",
684 "mp_host_game_prompt",
692 "attack_predictions",
698 "gamestate_inspector",
700 "sp_options_configure",
701 "campaign_selection",
707 for(
const std::string& item : widgets_tested)
709 widget_list.erase(item);
711 BOOST_CHECK_EQUAL(omitted.count(item), 0);
713 for(
const std::string& item : omitted)
715 widget_list.erase(item);
719 BOOST_CHECK_EQUAL(widget_list.size(), 0);
720 for(
const std::string&
id : widget_list) {
721 PLAIN_LOG <<
"Window '" <<
id <<
"' registered but not tested.";
730 message dlg(
"title",
"message",
true,
false,
false);
733 BOOST_CHECK(
e.user_message ==
_(
"Failed to show a dialog, which doesn’t fit on the screen."));
738 BOOST_ERROR(
"Didn't catch the wanted exception, instead caught nothing.");
741 BOOST_AUTO_TEST_SUITE_END()
758 std::string host_name =
"host_name";
768 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.
770 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.)";
796 const config items(
"difficulty");
807 dialog_tester() : state(
config {
"campaign_type",
"scenario"}),
ng(state)
823 dialog_tester() : vcfg(cfg), r(rbase) {}
841 struct dialog_tester<
prompt>
853 std::vector<config> cores;
867 std::vector<time_of_day> times;
882 std::string
label =
"Label text to modify";
883 bool team_only =
false;
893 std::string text =
"text to modify";
896 return new edit_text(
"title",
"label", text);
903 std::string
label =
"Label text to modify";
904 std::string category =
"test";
905 bool immutable =
false, fog =
false, shroud =
false;
939 std::string
id, name, descr;
940 int turns = 0, xp_mod = 50;
941 bool defeat_enemies =
false, random_start =
false;
953 dialog_tester() :
info(
t) {}
993 std::string title =
"Title";
1005 std::string title =
"Title";
1007 std::string
message =
"message";
1018 bool ignore_all =
false;
1019 std::string title =
"Title";
1021 std::string
message =
"message";
1042 std::string
id =
"";
1057 dialog_tester() : connection(
"",
""), li()
1062 return new mp_lobby(li, connection, selected_game);
1070 dialog_tester() : connection(
"",
"")
1080 struct dialog_tester<
gui2::dialogs::migrate_version_selection>
1089 void add_chat_message(
const std::time_t&,
1090 const std::string&,
int,
const std::string&,
1092 void send_chat_message(
const std::string&,
bool) {}
1094 void clear_messages() {}
1101 fake_chat_handler ch;
1106 : connection(
"",
"")
1130 return new message(
"Title",
"Message",
false,
false,
false);
1138 dialog_tester() : state(
config {
"campaign_type",
"multiplayer"})
1150 std::string password;
1160 std::string report_text;
1167 static std::vector<std::string> depcheck_mods {
"mod_one",
"some other",
"more"};
1192 return new mp_login(
"wesnoth.org",
"label",
true);
1217 static theme_info make_theme(
const std::string& name)
1225 static std::vector<theme_info> themes;
1231 std::vector<theme_info> dialog_tester<theme_list>::themes {make_theme(
"classic"), make_theme(
"new"), make_theme(
"more"), make_theme(
"themes")};
1236 std::vector<std::unique_ptr<map_generator>> map_generators;
1240 if(
i[
"scenario_generation"] ==
"default") {
1241 auto generator_cfg =
i.optional_child(
"generator");
1242 if (generator_cfg) {
1249 BOOST_REQUIRE_MESSAGE(result,
"Failed to create a dialog.");
1291 std::string folder_name;
1310 std::vector<std::string> args;
1313 dialog_tester() : opts(args),
game(opts) {}
1323 static std::vector<std::string> files;
1326 return new wml_error(
"Summary",
"Post summary", files,
"Details");
1329 std::vector<std::string> dialog_tester<wml_error>::files {
"some",
"files",
"here"};
1361 config era_cfg, side_cfg;
1362 std::vector<const config*> eras;
1366 : era_cfg(), side_cfg(), eras(1, &era_cfg)
1367 , flg(eras, side_cfg, false, false, false)
1380 dialog_tester() :
data(cfg) {}
1393 dialog_tester() : create_eng(state)
1394 , config_eng(create_eng.get_state()) {}
1407 dialog_tester() :
t() , stats_record(), stats(stats_record) {}
1427 std::string
id =
"id";
1448 movetype[
"name"] =
"Test Movetype";
1451 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)
Add a special kind of assert to validate whether the input from WML doesn't contain any problems that...