root/library/tests/user_info_test.cpp @ 499

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

standartized testsuite source file names

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