tests/gui/visitor.cpp

Go to the documentation of this file.
00001 /* $Id: visitor.cpp 52869 2012-02-03 20:18:33Z shadowmaster $ */
00002 /*
00003    Copyright (C) 2011 - 2012 by Mark de Wever <koraq@xs4all.nl>
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-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     /***** INITIAL STATE *****/
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     /***** VISITING WIDGET *****/
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     /***** POST END *****/
00080 
00081     BOOST_CHECK_EQUAL(visitor->next(gui2::iterator::twalker_::widget), gui2::iterator::twalker_::fail);
00082 }
00083 
00084 static void test_control()
00085 {
00086     /* Could add more widgets to the list. */
00087     test_control<gui2::tlabel>();
00088 
00089 }
00090 
00091 static void test_grid()
00092 {
00093     /* An empty grid behaves the same as a control so test here. */
00094     test_control<gui2::tgrid>();
00095 
00096     std::cerr << __func__ << ": Detailed test.\n";
00097 
00098     /* Test the child part here. */
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     /***** LABEL 1,1 *****/
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     /***** LABEL 2,1 *****/
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     /***** LABEL 1,2 *****/
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     /***** LABEL 2,2 *****/
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     /***** END *****/
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     /***** POST END *****/
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     /**** Initialize the environment. *****/
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 
 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