17 #define GETTEXT_DOMAIN "wesnoth-lib"
136 #include <boost/test/unit_test.hpp>
138 #include <functional>
146 , dummy_args({
"wesnoth",
"--noaddons"})
203 T* create() {
return new T(); }
206 typedef std::pair<unsigned, unsigned> resolution;
207 typedef std::vector<std::pair<unsigned, unsigned>> resolution_list;
210 void test_resolutions(
const resolution_list& resolutions)
212 for(
const resolution& resolution : resolutions) {
215 dialog_tester<T> ctor;
216 const std::unique_ptr<modal_dialog> dlg(ctor.create());
217 BOOST_REQUIRE_MESSAGE(dlg.get(),
"Failed to create a dialog.");
222 std::string exception;
226 exception =
"gui2::layout_exception_width_modified";
228 exception =
"gui2::layout_exception_width_resize_failed";
230 exception =
"gui2::layout_exception_height_resize_failed";
232 exception =
e.dev_message;
233 }
catch(
const std::exception&
e) {
234 exception =
e.what();
238 BOOST_CHECK_MESSAGE(exception.empty(),
241 <<
" resolution = " << resolution.first
242 <<
'x' << resolution.second
243 <<
"\nException caught: " << exception <<
'.');
248 void test_popup_resolutions(
const resolution_list& resolutions)
250 bool interact =
false;
251 for(
int i = 0;
i < 2; ++
i) {
252 for(
const resolution& resolution : resolutions) {
254 if(resolution.first == 800 && resolution.second == 600) {
259 dialog_tester<T> ctor;
260 const std::unique_ptr<modeless_dialog> dlg(ctor.create());
261 BOOST_REQUIRE_MESSAGE(dlg.get(),
"Failed to create a dialog.");
266 std::string exception;
270 BOOST_REQUIRE_NE(window,
static_cast<void*
>(
nullptr));
273 exception =
"gui2::layout_exception_width_modified";
275 exception =
"gui2::layout_exception_width_resize_failed";
277 exception =
"gui2::layout_exception_height_resize_failed";
279 exception =
e.dev_message;
280 }
catch(
const std::exception&
e) {
281 exception =
e.what();
285 BOOST_CHECK_MESSAGE(exception.empty(),
288 <<
" resolution = " << resolution.first
289 <<
'x' << resolution.second
290 <<
"\nException caught: " << exception <<
'.');
298 #pragma warning(push)
299 #pragma warning(disable: 4702)
301 void test_tip_resolutions(
const resolution_list& resolutions
302 ,
const std::string&
id)
304 for(
const auto& resolution : resolutions) {
309 std::string exception;
312 ,
"Test message for a tooltip."
317 exception =
"gui2::layout_exception_width_modified";
319 exception =
"gui2::layout_exception_width_resize_failed";
321 exception =
"gui2::layout_exception_height_resize_failed";
323 exception =
e.dev_message;
324 }
catch(
const std::exception&
e) {
325 exception =
e.what();
329 BOOST_CHECK_MESSAGE(exception.empty(),
330 "Test for tip '" <<
id
332 <<
" resolution = " << resolution.first
333 <<
'x' << resolution.second
334 <<
"\nException caught: " << exception <<
'.');
341 const resolution_list& get_gui_resolutions()
343 static resolution_list result {
360 test_resolutions<T>(get_gui_resolutions());
372 for(std::size_t
i = 0;
i < 2; ++
i) {
374 test_popup_resolutions<T>(get_gui_resolutions());
380 void test_tip(
const std::string&
id)
384 for(std::size_t
i = 0;
i < 2; ++
i) {
386 test_tip_resolutions(get_gui_resolutions(),
id);
402 test<addon_connect>();
406 test<addon_license_prompt>();
410 test<campaign_difficulty>();
418 test<editor_choose_addon>();
426 test<core_selection>();
434 test<depcheck_confirm_change>();
438 test<depcheck_select_new>();
446 test<editor_edit_pbl>();
450 test<editor_edit_pbl_translation>();
458 test<editor_edit_label>();
462 test<editor_edit_side>();
466 test<editor_edit_scenario>();
470 test<editor_generate_map>();
474 test<editor_new_map>();
478 test<editor_resize_map>();
482 test<faction_select>();
490 test<folder_create>();
494 test<formula_debugger>();
498 test<game_cache_options>();
506 test<game_version>();
514 test<game_save_message>();
518 test<game_save_oos>();
522 test<generator_settings>();
526 test<gui_test_dialog>();
534 test<install_dependencies>();
538 test<language_selection>();
546 test<lobby_player_info>();
550 test<log_settings>();
558 test<mp_alerts_options>();
566 test<mp_join_game_password_prompt>();
574 test<mp_method_selection>();
582 test<simple_item_selector>();
586 test<screenshot_notification>();
590 test<select_orb_colors>();
594 test<statistics_dialog>();
598 test<surrender_quit>();
606 test<transient_message>();
618 test<wml_message_left>();
622 test<wml_message_right>();
626 test<wml_message_double>();
630 test<achievements_dialog>();
634 test<mp_match_history>();
638 test<gui2::dialogs::migrate_version_selection>();
642 test_popup<debug_clock>();
646 test_tip(
"tooltip_large");
654 test<tod_new_schedule>();
659 test<editor_edit_unit>();
667 std::set<std::string> omitted {
682 "addon_uninstall_list",
685 "network_transmission",
686 "synched_choice_wait",
688 "preferences_dialog",
693 "mp_host_game_prompt",
701 "attack_predictions",
707 "gamestate_inspector",
709 "sp_options_configure",
710 "campaign_selection",
716 for(
const std::string& item : widgets_tested)
718 widget_list.erase(item);
720 BOOST_CHECK_EQUAL(omitted.count(item), 0);
722 for(
const std::string& item : omitted)
724 widget_list.erase(item);
728 BOOST_CHECK_EQUAL(widget_list.size(), 0);
729 for(
const std::string&
id : widget_list) {
730 PLAIN_LOG <<
"Window '" <<
id <<
"' registered but not tested.";
739 message dlg(
"title",
"message",
true,
false,
false);
742 BOOST_CHECK(
e.user_message ==
_(
"Failed to show a dialog, which doesn’t fit on the screen."));
747 BOOST_ERROR(
"Didn't catch the wanted exception, instead caught nothing.");
750 BOOST_AUTO_TEST_SUITE_END()
767 std::string host_name =
"host_name";
777 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.
779 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.)";
805 const config items(
"difficulty");
816 dialog_tester() : state(
config {
"campaign_type",
"scenario"}),
ng(state)
832 dialog_tester() : vcfg(cfg), r(rbase) {}
850 struct dialog_tester<
prompt>
862 std::vector<config> cores;
876 std::vector<time_of_day> times;
891 std::string
label =
"Label text to modify";
892 bool team_only =
false;
902 std::string text =
"text to modify";
905 return new edit_text(
"title",
"label", text);
912 std::string
label =
"Label text to modify";
913 std::string category =
"test";
914 bool immutable =
false, fog =
false, shroud =
false;
948 std::string
id, name, descr;
949 int turns = 0, xp_mod = 50;
950 bool defeat_enemies =
false, random_start =
false;
962 dialog_tester() :
info(
t) {}
1002 std::string title =
"Title";
1014 std::string title =
"Title";
1016 std::string
message =
"message";
1027 bool ignore_all =
false;
1028 std::string title =
"Title";
1030 std::string
message =
"message";
1051 std::string
id =
"";
1066 dialog_tester() : connection(
"",
""), li()
1071 return new mp_lobby(li, connection, selected_game);
1079 dialog_tester() : connection(
"",
"")
1089 struct dialog_tester<
gui2::dialogs::migrate_version_selection>
1098 void add_chat_message(
const std::time_t&,
1099 const std::string&,
int,
const std::string&,
1101 void send_chat_message(
const std::string&,
bool) {}
1103 void clear_messages() {}
1110 fake_chat_handler ch;
1115 : connection(
"",
"")
1139 return new message(
"Title",
"Message",
false,
false,
false);
1147 dialog_tester() : state(
config {
"campaign_type",
"multiplayer"})
1159 std::string password;
1169 std::string report_text;
1176 static std::vector<std::string> depcheck_mods {
"mod_one",
"some other",
"more"};
1201 return new mp_login(
"wesnoth.org",
"label",
true);
1226 static theme_info make_theme(
const std::string& name)
1234 static std::vector<theme_info> themes;
1240 std::vector<theme_info> dialog_tester<theme_list>::themes {make_theme(
"classic"), make_theme(
"new"), make_theme(
"more"), make_theme(
"themes")};
1245 std::vector<std::unique_ptr<map_generator>> map_generators;
1249 if(
i[
"scenario_generation"] ==
"default") {
1250 auto generator_cfg =
i.optional_child(
"generator");
1251 if (generator_cfg) {
1258 BOOST_REQUIRE_MESSAGE(result,
"Failed to create a dialog.");
1300 std::string folder_name;
1319 std::vector<std::string> args;
1322 dialog_tester() : opts(args),
game(opts) {}
1332 static std::vector<std::string> files;
1335 return new wml_error(
"Summary",
"Post summary", files,
"Details");
1338 std::vector<std::string> dialog_tester<wml_error>::files {
"some",
"files",
"here"};
1370 config era_cfg, side_cfg;
1371 std::vector<const config*> eras;
1375 : era_cfg(), side_cfg(), eras(1, &era_cfg)
1376 , flg(eras, side_cfg, false, false, false)
1389 dialog_tester() :
data(cfg) {}
1402 dialog_tester() : create_eng(state)
1403 , config_eng(create_eng.get_state()) {}
1416 dialog_tester() :
t() , stats_record(), stats(stats_record) {}
1436 std::string
id =
"id";
1457 movetype[
"name"] =
"Test Movetype";
1460 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...