tests/gui/test_save_dialog.cpp

Go to the documentation of this file.
00001 /* $Id: test_save_dialog.cpp 52533 2012-01-07 02:35:17Z shadowmaster $ */
00002 /*
00003    Copyright (C) 2008 - 2012 by Pauli Nieminen <paniemin@cc.hut.fi>
00004    Part of the Battle for Wesnoth Project http://www.wesnoth.org/
00005 
00006    This program is free software; you can redistribute it and/or modify
00007    it under the terms of the GNU General Public License as published by
00008    the Free Software Foundation; either version 2 of the License, or
00009    (at your option) any later version.
00010    This program is distributed in the hope that it will be useful,
00011    but WITHOUT ANY WARRANTY.
00012 
00013    See the COPYING file for more details.
00014 */
00015 
00016 #define GETTEXT_DOMAIN "wesnoth-test"
00017 
00018 #include <boost/test/unit_test.hpp>
00019 
00020 #include <boost/test/unit_test_suite.hpp>
00021 
00022 
00023 #include "dialogs.hpp"
00024 #include "key.hpp"
00025 #include "filesystem.hpp"
00026 #include "savegame.hpp"
00027 #include "unit_types.hpp"
00028 //
00029 
00030 #include "SDL.h"
00031 
00032 #include "tests/utils/fake_event_source.hpp"
00033 #include "tests/utils/fake_display.hpp"
00034 #include "tests/utils/auto_parameterized.hpp"
00035 
00036 
00037 // Linker workarounds end here
00038 
00039 namespace test {
00040 
00041     struct save_dialog_fixture {
00042         save_dialog_fixture()
00043             : source()
00044         {
00045         }
00046         test_utils::fake_event_source source;
00047     };
00048 
00049 
00050 
00051     BOOST_FIXTURE_TEST_SUITE( save_dialog , save_dialog_fixture)
00052 
00053         SDLKey fake_input_keys[] =  {SDLK_KP_ENTER, SDLK_RETURN, SDLK_ESCAPE, SDLK_a};
00054 
00055         WESNOTH_PARAMETERIZED_TEST_CASE( test_fake_input, SDLKey,fake_input_keys, keyid)
00056         {
00057             test_utils::event_node_ptr new_keypress = source.press_key(2, keyid);
00058             test_utils::event_node_ptr new_keyrelease = source.release_key(4,keyid);
00059 
00060             // Protection against forever loop
00061             source.press_key(6, keyid);
00062             source.release_key(8,keyid);
00063             CKey key;
00064 
00065             while(true)
00066             {
00067                 events::pump();
00068 
00069                 BOOST_CHECK_EQUAL(key[keyid], new_keypress->is_fired());
00070                 if (key[keyid])
00071                     break;
00072             }
00073             while(true)
00074             {
00075                 events::pump();
00076                 BOOST_CHECK_EQUAL(key[keyid], !new_keyrelease->is_fired());
00077                 if (!key[keyid])
00078                     break;
00079             }
00080         }
00081 
00082         SDLKey dialog_get_save_name_enter_pressed[] =  {SDLK_KP_ENTER, SDLK_RETURN};
00083 
00084         WESNOTH_PARAMETERIZED_TEST_CASE( test_dialog_get_save_name_enter_pressed, SDLKey, dialog_get_save_name_enter_pressed, keyid )
00085         {
00086             // fill in events to be used in test
00087             test_utils::event_node_ptr press_return_before = source.press_key(0, keyid);
00088             test_utils::event_node_ptr release_return_before = source.release_key(3, keyid);
00089             test_utils::event_node_ptr press_return_after = source.press_key(5, keyid);
00090             test_utils::event_node_ptr release_return_after = source.release_key(7, keyid);
00091 
00092             // Protection agains for ever loop
00093             source.press_key(10, keyid);
00094             source.release_key(13, keyid);
00095 
00096             std::string fname("test_save");
00097             write_file(get_saves_dir() + "/" + fname +".gz", "böö");
00098             // Start test (set ticks start time)
00099 
00100             // Activated enter press
00101             events::pump();
00102 
00103             BOOST_CHECK_MESSAGE(press_return_before->is_fired(), "Enter wasn't activated");
00104             BOOST_CHECK_MESSAGE(!release_return_before->is_fired(), "Enter was released before test");
00105 
00106 
00107             /*
00108             After moving the savegame code to savegame.cpp, there need to be a lot more parameters to pass to the
00109             savegame class, that are not available here. Just to give an impression, this could be the code to call
00110             the dialog:
00111 
00112             game_savegame save(gamestate, level, gui, teams, units, gamestatus, map, game_preferences::compress_saves());
00113             save.save_game_interactive(gui, "Save game", gui::OK_CANCEL, false, false);
00114 
00115             This code however does not compile anymore:
00116 
00117             BOOST_CHECK_EQUAL(dialogs::get_save_name_oos(test_utils::get_fake_display(1024, 768),
00118                     "Save game?", "file", &fname,gui::OK_CANCEL, "Save game"), 0);
00119 
00120             Not sure how to fix it best.
00121 
00122             BOOST_CHECK_MESSAGE(release_return_before->is_fired(), "get_save_name returned before releasing first enter.");
00123             BOOST_CHECK_MESSAGE(press_return_after->is_fired(), "get_save_name returned before 2nd enter event was sent");
00124             BOOST_CHECK_MESSAGE(!release_return_after->is_fired(), "get_save_name returned after 2nd release event was sent");
00125             */
00126             remove((get_saves_dir() + "/" + fname + ".gz").c_str());
00127         }
00128 
00129     BOOST_AUTO_TEST_SUITE_END()
00130 }
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines

Generated by doxygen 1.7.1 on Fri May 25 2012 01:03:11 for The Battle for Wesnoth
Gna! | Forum | Wiki | CIA | devdocs