root/library/tests/test_user_info.cpp @ 425

Revision 425, 5.6 kB (checked in by vbarta, 15 years ago)

moved logger test to testsuite, updated logger docs (a bit)

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