root/library/tests/test_user_info.cpp @ 480

Revision 480, 5.7 kB (checked in by vbarta, 15 years ago)

fixed tests for new UI::get & UI::build

  • Property svn:eol-style set to native
Line 
1#include <memory>
2#include <string>
3#include <string.h>
4#include "base/user_info.h"
5#include "test_util.h"
6#include "UnitTest++.h"
7
8using namespace std;
9using namespace bdm;
10
11class Passenger : public root {
12public:
13
14        Passenger() {
15        }
16};
17
18class Human : public Passenger {
19public:
20        string name;
21
22        Human() {
23                name = "none";
24        }
25
26        virtual void from_setting ( const Setting &set ) {
27                UI::get ( name, set, "name" );
28        }
29
30        virtual void to_setting ( Setting &set ) const {
31                Setting &name_setting = set.add ( "name", Setting::TypeString );
32                name_setting = name;
33        }
34
35        string to_string() {
36                return name;
37        }
38};
39
40UIREGISTER ( Human );
41
42class Robot : public Passenger {
43public:
44        int number;
45        Array<string> software;
46
47        Robot() : software() {
48                number = -1;
49        }
50
51        virtual void from_setting ( const Setting &set ) {
52                UI::get ( number, set, "number" );
53                UI::get ( software, set, "software" );
54        }
55
56        virtual void to_setting ( Setting &set ) const {
57                Setting &number_setting = set.add ( "number", Setting::TypeInt );
58                number_setting = number;
59
60                UI::save ( software, set, "software" );
61        }
62
63        string to_string() {
64                stringstream stream;
65                stream << number;
66                for ( int i = 0; i < software.length(); i++ )
67                        stream << "_" + software ( i );
68                return stream.str();
69        }
70};
71
72UIREGISTER ( Robot );
73
74class Transport : public root {
75public:
76        int year;
77        string manufacturer;
78
79        Transport() {
80                year = 1900;
81                manufacturer = "unknown";
82        }
83
84        Transport ( int year, string manufacturer )
85                        : year ( year ), manufacturer ( manufacturer ) {
86        }
87
88        virtual void from_setting ( const Setting &set ) {
89                UI::get ( year, set, "year" );
90                UI::get ( manufacturer, set, "manufacturer" );
91        }
92
93        virtual void to_setting ( Setting &set ) const {
94                Setting &year_setting = set.add ( "year", Setting::TypeInt );
95                year_setting = year;
96
97                Setting &manufacturer_setting = set.add ( "manufacturer", Setting::TypeString );
98                manufacturer_setting = manufacturer;
99        }
100};
101
102class Car : public Transport {
103public:
104        int kilometers;
105        Array<Passenger*> passengers;
106
107        Car() : Transport() {
108                kilometers = 0;
109        }
110
111
112        Car ( int year, string manufacturer, int kilometers )
113                        : Transport ( year, manufacturer ), kilometers ( kilometers ) {
114        }
115
116        virtual void from_setting ( const Setting &set ) {
117                Transport::from_setting ( set );
118
119                UI::get ( kilometers, set, "kilometers" );
120                UI::get ( passengers, set, "passengers" );
121        }
122
123        virtual void to_setting ( Setting &set ) const {
124                Transport::to_setting ( set );
125
126                Setting &kilometers_setting = set.add ( "kilometers", Setting::TypeInt );
127                kilometers_setting = kilometers;
128
129                UI::save ( passengers, set, "passengers" );
130        }
131
132        string to_string() {
133                stringstream stream;
134                stream << "A car made in " << year << " by " << manufacturer << ", having " << kilometers << " kilometers on the clock.";
135                if ( passengers.length() ) {
136                        stream << "The names of passengers are as follows: ";
137                        for ( int i = 0; i < passengers.length(); i++ )
138                                stream << passengers ( i )->to_string() << " ";
139                }
140                return stream.str();
141        }
142};
143
144UIREGISTER ( Car );
145
146class Bike : public Transport {
147public:
148        bool electricLights;
149        mat matr;
150
151        Bike() : Transport(), matr ( "2,2;3,4" ) {
152                electricLights = false;
153        }
154
155        Bike ( int year, string manufacturer, bool electricLights )
156                        : Transport ( year, manufacturer ), electricLights ( electricLights ) {
157        }
158
159        ~Bike() {
160        }
161
162        void from_setting ( const Setting &set ) {
163                Transport::from_setting ( set );
164
165                int elights;
166                if ( UI::get ( elights, set, "electricLights", UI::optional ) ) {
167                    electricLights = !!elights;
168                }
169
170                UI::get ( matr, set, "matr" );
171        }
172
173        void to_setting ( Setting &set ) const {
174                Transport::to_setting ( set );
175
176                Setting &electricLights_setting = set.add ( "electricLights", Setting::TypeBoolean );
177                electricLights_setting = electricLights;
178
179                UI::save ( matr, set, "matr" );
180        }
181
182        string to_string() {
183                stringstream stream;
184                stream << "a bike made in " << year << " by " << manufacturer;
185                if ( electricLights ) stream << " with electric lights included";
186                return stream.str();
187        }
188};
189
190UIREGISTER ( Bike );
191
192TEST ( test_load ) {
193        UIFile in ( "test_user_info_input.cfg" );
194        auto_ptr<Transport> pepikovo ( UI::build<Transport> ( in, "pepikovo", UI::compulsory ) );
195        CHECK_EQUAL ( string ( "A car made in 1998 by audi, having 25000 kilometers on the clock.The names of passengers are as follows: Karlos Novak -1_CygWin_Matlab_Aimsun Karlosik Novacek " ), pepikovo->to_string() );
196
197        auto_ptr<Transport> jardovo ( UI::build<Transport> ( in, "jardovo", UI::compulsory ) );
198        CHECK_EQUAL ( string ( "A car made in 1992 by liaz, having 1555000 kilometers on the clock." ), jardovo->to_string() );
199
200        auto_ptr<Transport> ondrejovo ( UI::build<Transport> ( in, "ondrejovo", UI::compulsory ) );
201        CHECK_EQUAL ( string ( "a bike made in 1996 by author with electric lights included" ), ondrejovo->to_string() );
202
203        auto_ptr<Transport> elisky ( UI::build<Transport> ( in, "elisky", UI::compulsory ) );
204        CHECK_EQUAL ( string ( "A car made in 1992 by liaz, having 1555000 kilometers on the clock." ), elisky->to_string() );
205
206        auto_ptr<Transport> kati ( UI::build<Transport> ( in, "kati", UI::compulsory ) );
207        CHECK_EQUAL ( string ( "A car made in 1980 by vecernicek, having 250000 kilometers on the clock." ), kati->to_string() );
208}
209
210TEST ( test_save ) {
211        UIFile in ( "test_user_info_input.cfg" );
212        auto_ptr<Transport> pepikovo ( UI::build<Transport> ( in, "pepikovo", UI::compulsory ) );
213
214        Car audi ( 1968, "zyl", 200 );
215        Car liaz ( 1989, "skoda", 1000 );
216        Bike author ( 2001, "noname", false );
217        UIFile out;
218
219        UI::save ( &audi, out, "marty" );
220        UI::save ( &liaz, out, "bohousovo" );
221        UI::save ( &author, out, "karlovo" );
222        UI::save ( pepikovo.get(), out, "pepikovo" );
223        out.save ( "testUI_out.cfg" );
224
225        string expected ( load_test_file ( "testUI_out.matrix" ) );
226        string actual ( load_test_file ( "testUI_out.cfg" ) );
227        CHECK_EQUAL ( expected, actual );
228}
Note: See TracBrowser for help on using the browser.