00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #define GETTEXT_DOMAIN "wesnoth-lib"
00017
00018 #include <boost/test/unit_test.hpp>
00019
00020 #include "config_cache.hpp"
00021 #include "gui/auxiliary/iterator/walker.hpp"
00022 #include "gui/widgets/label.hpp"
00023 #include "gui/widgets/grid.hpp"
00024
00025 #include <iostream>
00026 #include <typeinfo>
00027
00028 static void add_widget(gui2::tgrid& grid
00029 , gui2::twidget* widget
00030 , const std::string& id
00031 , const unsigned row
00032 , const unsigned column)
00033 {
00034 BOOST_REQUIRE_NE(widget, static_cast<gui2::twidget*>(NULL));
00035
00036 widget->set_id(id);
00037 grid.set_child(widget
00038 , row
00039 , column
00040 , gui2::tgrid::VERTICAL_GROW_SEND_TO_CLIENT
00041 | gui2::tgrid::HORIZONTAL_GROW_SEND_TO_CLIENT
00042 , 0);
00043 }
00044
00045 template<class T>
00046 static void test_control()
00047 {
00048 std::cerr << __func__ << ": " << typeid(T).name() << ".\n";
00049
00050 T control;
00051 boost::scoped_ptr<gui2::iterator::twalker_> visitor(control.create_walker());
00052
00053 BOOST_REQUIRE_NE(visitor.get(), static_cast<void*>(NULL));
00054
00055
00056
00057 BOOST_CHECK_EQUAL(visitor->at_end(gui2::iterator::twalker_::widget), false);
00058 BOOST_CHECK_EQUAL(visitor->at_end(gui2::iterator::twalker_::grid), true);
00059 BOOST_CHECK_EQUAL(visitor->at_end(gui2::iterator::twalker_::child), true);
00060
00061 BOOST_CHECK_EQUAL(visitor->get(gui2::iterator::twalker_::widget), &control);
00062 BOOST_CHECK_EQUAL(visitor->get(gui2::iterator::twalker_::grid), static_cast<void*>(NULL));
00063 BOOST_CHECK_EQUAL(visitor->get(gui2::iterator::twalker_::child), static_cast<void*>(NULL));
00064
00065
00066
00067 BOOST_CHECK_EQUAL(visitor->next(gui2::iterator::twalker_::widget), gui2::iterator::twalker_::invalid);
00068 BOOST_CHECK_EQUAL(visitor->next(gui2::iterator::twalker_::grid), gui2::iterator::twalker_::fail);
00069 BOOST_CHECK_EQUAL(visitor->next(gui2::iterator::twalker_::child), gui2::iterator::twalker_::fail);
00070
00071 BOOST_CHECK_EQUAL(visitor->at_end(gui2::iterator::twalker_::widget), true);
00072 BOOST_CHECK_EQUAL(visitor->at_end(gui2::iterator::twalker_::grid), true);
00073 BOOST_CHECK_EQUAL(visitor->at_end(gui2::iterator::twalker_::child), true);
00074
00075 BOOST_CHECK_EQUAL(visitor->get(gui2::iterator::twalker_::widget), static_cast<void*>(NULL));
00076 BOOST_CHECK_EQUAL(visitor->get(gui2::iterator::twalker_::grid), static_cast<void*>(NULL));
00077 BOOST_CHECK_EQUAL(visitor->get(gui2::iterator::twalker_::child), static_cast<void*>(NULL));
00078
00079
00080
00081 BOOST_CHECK_EQUAL(visitor->next(gui2::iterator::twalker_::widget), gui2::iterator::twalker_::fail);
00082 }
00083
00084 static void test_control()
00085 {
00086
00087 test_control<gui2::tlabel>();
00088
00089 }
00090
00091 static void test_grid()
00092 {
00093
00094 test_control<gui2::tgrid>();
00095
00096 std::cerr << __func__ << ": Detailed test.\n";
00097
00098
00099 gui2::tgrid grid(2 ,2);
00100 add_widget(grid, new gui2::tlabel(), "(1,1)", 0, 0);
00101 add_widget(grid, new gui2::tlabel(), "(1,2)", 0, 1);
00102 add_widget(grid, new gui2::tlabel(), "(2,1)", 1, 0);
00103 add_widget(grid, new gui2::tlabel(), "(2,2)", 1, 1);
00104
00105 boost::scoped_ptr<gui2::iterator::twalker_> visitor(grid.create_walker());
00106
00107
00108
00109 BOOST_CHECK_EQUAL(visitor->at_end(gui2::iterator::twalker_::child), false);
00110
00111 BOOST_REQUIRE_NE(visitor->get(gui2::iterator::twalker_::child), static_cast<void*>(NULL));
00112 BOOST_CHECK_EQUAL(visitor->get(gui2::iterator::twalker_::child)->id(), "(1,1)");
00113
00114
00115
00116 BOOST_CHECK_EQUAL(visitor->next(gui2::iterator::twalker_::child), gui2::iterator::twalker_::valid);
00117
00118 BOOST_CHECK_EQUAL(visitor->at_end(gui2::iterator::twalker_::child), false);
00119
00120 BOOST_REQUIRE_NE(visitor->get(gui2::iterator::twalker_::child), static_cast<void*>(NULL));
00121 BOOST_CHECK_EQUAL(visitor->get(gui2::iterator::twalker_::child)->id(), "(2,1)");
00122
00123
00124
00125 BOOST_CHECK_EQUAL(visitor->next(gui2::iterator::twalker_::child), gui2::iterator::twalker_::valid);
00126
00127 BOOST_CHECK_EQUAL(visitor->at_end(gui2::iterator::twalker_::child), false);
00128
00129 BOOST_REQUIRE_NE(visitor->get(gui2::iterator::twalker_::child), static_cast<void*>(NULL));
00130 BOOST_CHECK_EQUAL(visitor->get(gui2::iterator::twalker_::child)->id(), "(1,2)");
00131
00132
00133
00134 BOOST_CHECK_EQUAL(visitor->next(gui2::iterator::twalker_::child), gui2::iterator::twalker_::valid);
00135
00136 BOOST_CHECK_EQUAL(visitor->at_end(gui2::iterator::twalker_::child), false);
00137
00138 BOOST_REQUIRE_NE(visitor->get(gui2::iterator::twalker_::child), static_cast<void*>(NULL));
00139 BOOST_CHECK_EQUAL(visitor->get(gui2::iterator::twalker_::child)->id(), "(2,2)");
00140
00141
00142
00143 BOOST_CHECK_EQUAL(visitor->next(gui2::iterator::twalker_::child), gui2::iterator::twalker_::invalid);
00144
00145 BOOST_CHECK_EQUAL(visitor->at_end(gui2::iterator::twalker_::child), true);
00146
00147 BOOST_CHECK_EQUAL(visitor->get(gui2::iterator::twalker_::child), static_cast<void*>(NULL));
00148
00149
00150
00151 BOOST_CHECK_EQUAL(visitor->next(gui2::iterator::twalker_::child), gui2::iterator::twalker_::fail);
00152 }
00153
00154 BOOST_AUTO_TEST_CASE(test_gui2_visitor)
00155 {
00156
00157
00158 game_config::config_cache& cache = game_config::config_cache::instance();
00159
00160 cache.clear_defines();
00161 cache.add_define("EDITOR");
00162 cache.add_define("MULTIPLAYER");
00163
00164 test_control();
00165 test_grid();
00166 }
00167
00168