PropertiesTests.cpp
Go to the documentation of this file.
1 // -*- C++ -*-
13 /*
14  * $Log: PropertiesTests.cpp,v $
15  * Revision 1.3 2008/01/09 04:12:46 arafune
16  * *** empty log message ***
17  *
18  * Revision 1.2 2008/01/08 07:53:11 arafune
19  * *** empty log message ***
20  *
21  * Revision 1.1 2007/12/20 07:50:18 arafune
22  * *** empty log message ***
23  *
24  * Revision 1.1 2006/11/27 08:23:25 n-ando
25  * TestSuites are devided into each directory.
26  *
27  * Revision 1.3 2006/10/18 05:59:55 kurihara
28  *
29  * test_list(),test_load(),test_store() added and It is a revision generally.
30  *
31  */
32 
33 #ifndef Properties_cpp
34 #define Properties_cpp
35 
36 #include <cppunit/ui/text/TestRunner.h>
37 #include <cppunit/TextOutputter.h>
38 #include <cppunit/extensions/TestFactoryRegistry.h>
39 #include <cppunit/extensions/HelperMacros.h>
40 #include <cppunit/TestAssert.h>
41 #include <fstream>
42 #include <coil/Properties.h>
43 #include <algorithm>
44 
49 using namespace std;
50 
51 typedef std::map<std::string, std::string>::iterator Itr;
52 
53 namespace Properties
54 {
56  : public CppUnit::TestFixture
57  {
58  CPPUNIT_TEST_SUITE(PropertiesTests);
59 
60  CPPUNIT_TEST(test_ctor_map);
61  CPPUNIT_TEST(test_Properties_key_value);
62  CPPUNIT_TEST(test_Properties_char);
63  CPPUNIT_TEST(test_Properties_copy);
64  CPPUNIT_TEST(test_Properties_destructor);
65  CPPUNIT_TEST(test_substitute);
66  CPPUNIT_TEST(test_Properties_destructor);
67 
68  CPPUNIT_TEST(test_getName);
69  CPPUNIT_TEST(test_getValue);
70  CPPUNIT_TEST(test_getDefaultValue);
71  CPPUNIT_TEST(test_getLeaf);
72  CPPUNIT_TEST(test_getRoot);
73 
74  CPPUNIT_TEST(test_getProperty);
75  CPPUNIT_TEST(test_getDefault);
76  CPPUNIT_TEST(test_setProperty);
77  CPPUNIT_TEST(test_setDefaults);
78 
79  CPPUNIT_TEST(test_list);
80  CPPUNIT_TEST(test_load);
81  CPPUNIT_TEST(test_store);
82 
83  CPPUNIT_TEST(test_propertyNames);
84  CPPUNIT_TEST(test_size);
85  CPPUNIT_TEST(test_findNode);
86  CPPUNIT_TEST(test_getNode);
87  CPPUNIT_TEST(test_createNode);
88  CPPUNIT_TEST(test_removeNode);
89  CPPUNIT_TEST(test_hasKey);
90  CPPUNIT_TEST(test_clear);
91  CPPUNIT_TEST(test_streamInput);
92  CPPUNIT_TEST(test_splitKeyValue);
93 
94 
95 
96  CPPUNIT_TEST_SUITE_END();
97 
98  private:
99  string EMPTY_STRING;
100  map<string, string> DEFAULTS_CONF;
101 
102 // RTC::Properties* m_prop;
104 
105  public:
110  {
111  }
112 
117  {
118  }
119 
123  virtual void setUp()
124  {
125  EMPTY_STRING = "";
126 
127  DEFAULTS_CONF["rtc.openrtm.version"] = "0.4.0";
128  DEFAULTS_CONF["rtc.openrtm.release"] = "aist";
129  DEFAULTS_CONF["rtc.openrtm.vendor"] = "AIST";
130  DEFAULTS_CONF["rtc.openrtm.author"] = "Noriaki Ando";
131  DEFAULTS_CONF["rtc.manager.nameserver"] = "zonu.a02.aist.go.jp";
132  DEFAULTS_CONF["rtc.manager.debug.level"] = "PARANOID";
133  DEFAULTS_CONF["rtc.manager.orb"] = "omniORB";
134  DEFAULTS_CONF["rtc.manager.orb.options"] =
135  "IIOPAddrPort, -ORBendPoint, giop:tcp:";
136  DEFAULTS_CONF["rtc.manager.arch"] = "i386";
137  DEFAULTS_CONF["rtc.manager.os"] = "FreeBSD";
138  DEFAULTS_CONF["rtc.manager.os.release"] = "6.1-RELEASE";
139  DEFAULTS_CONF["rtc.manager.language"] = "C++";
140  DEFAULTS_CONF["rtc.manager.subsystems"] =
141  "Camera, Manipulator, Force Sensor";
142  DEFAULTS_CONF["rtc.component.conf.path"] =
143  "C:\\\\Program\\\\ Files\\\\OpenRTM-aist";
144  DEFAULTS_CONF["rtc.manager.opening_message"] = "\"Hello \" World\"";
145  }
146 
150  virtual void tearDown()
151  {
152  }
153 
154 
163  {
164  /* key,valueによるデフォルト値指定でPropertiesオブジェクトを生成する */
165  string value("test");
166 
167  /*
168  // プロパティの名称と値が、コンストラクタで指定した値で取得されることを確認する // (1) キーを階層化しないでテスト */ string key0("manager"); coil::Properties prop0(key0.c_str(),value.c_str()); string retkey(prop0.getName()); CPPUNIT_ASSERT_EQUAL(key0, retkey); string retval(prop0.getValue()); CPPUNIT_ASSERT_EQUAL(value, retval); /* // (2) キーを階層化してテスト */ string key1("manager.test.test"); coil::Properties prop1(key1.c_str(),value.c_str()); retkey = prop1.getName(); CPPUNIT_ASSERT_EQUAL(key1, retkey); retval = prop1.getValue(); CPPUNIT_ASSERT_EQUAL(value, retval); } /*! * @brief Properties(std::map<string, string>&)コンストラクタのテスト * * <ul> * <li>std::mapで指定したデフォルト値が、デフォルト値として正しく取 * 得されるか?</li> * </ul> */ void test_ctor_map() { map<string, string> defaults; defaults["rtc.component.conf.path"] = "C:\\Program\\ Files\\OpenRTM-aist"; defaults["rtc.manager.arch"] = "i386"; defaults["rtc.manager.debug.level"] = "PARANOID"; defaults["rtc.manager.language"] = "C++"; defaults["rtc.manager.nameserver"] = "zonu.a02.aist.go.jp"; defaults["rtc.manager.opening_message"] = "Hello World"; defaults["rtc.manager.orb.name"] = "omniORB"; defaults["rtc.manager.orb.options"] = "IIOPAddrPort, -ORBendPoint, giop:tcp:"; defaults["rtc.manager.os.name"] = "FreeBSD"; defaults["rtc.manager.os.release"] = "6.1-RELEASE"; defaults["rtc.manager.subsystems"] = "Camera, Manipulator, Force Sensor"; defaults["rtc.openrtm.author"] = "Noriaki Ando"; defaults["rtc.openrtm.release"] = "aist"; defaults["rtc.openrtm.vendor"] = "AIST TaskIntelligence"; defaults["rtc.openrtm.version"] = "0.4.0"; /* mapによるデフォルト値指定でPropertiesオブジェクトを生成する */ coil::Properties prop(defaults); /* 各プロパティのデフォルト値および通常値がいずれも、コンストラク */ /* タで指定した値で取得されることを確認する */ map<string, string>::iterator it; it = defaults.begin(); for (; it != defaults.end(); ++it) { string key = it->first; string value = it->second; CPPUNIT_ASSERT_EQUAL(value, prop.getDefault(key)); CPPUNIT_ASSERT_EQUAL(value, prop.getProperty(key)); } } void test_Properties_char() { const char* defaults[] = { "rtc.component.conf.path", "C:\\Program\\ Files\\OpenRTM-aist", "rtc.manager.arch", "i386", "rtc.manager.debug.level", "PARANOID", "rtc.manager.language", "C++", "rtc.manager.nameserver", "zonu.a02.aist.go.jp", "rtc.manager.opening_message", "Hello World", "rtc.manager.orb.name", "omniORB", "rtc.manager.orb.options", "IIOPAddrPort, -ORBendPoint, giop:tcp:", "rtc.manager.os.name", "FreeBSD", "rtc.manager.os.release", "6.1-RELEASE", "rtc.manager.subsystems", "Camera, Manipulator, Force Sensor", "rtc.openrtm.author", "Noriaki Ando", "rtc.openrtm.release", "aist", "rtc.openrtm.vendor", "AIST TaskIntelligence", "rtc.openrtm.version", "0.4.0", "" }; coil::Properties prop(defaults); /* // 各プロパティのデフォルト値および通常値がいずれも、コンストラクタで指定した値で取得されることを確認する */ for (int i = 0; defaults[i] != ""; i += 2) { string key = defaults[i]; string value = defaults[i + 1]; CPPUNIT_ASSERT_EQUAL(value, prop.getDefault(key)); CPPUNIT_ASSERT_EQUAL(value, prop.getProperty(key)); } } /*! * @brief Properties(const Properties& prop)コピーコンストラクタのテスト * * <ul> * <li>propで指定したデフォルト値が、コピーオブジェクトから正しく取得されるか?</li> * </ul> */ void test_Properties_copy() { map<string, string> defaults; defaults["rtc.component.conf.path"] = "C:\\Program\\ Files\\OpenRTM-aist"; defaults["rtc.manager.arch"] = "i386"; defaults["rtc.manager.debug.level"] = "PARANOID"; defaults["rtc.manager.language"] = "C++"; defaults["rtc.manager.nameserver"] = "zonu.a02.aist.go.jp"; defaults["rtc.manager.opening_message"] = "Hello World"; defaults["rtc.manager.orb.name"] = "omniORB"; defaults["rtc.manager.orb.options"] = "IIOPAddrPort, -ORBendPoint, giop:tcp:"; defaults["rtc.manager.os.name"] = "FreeBSD"; defaults["rtc.manager.os.release"] = "6.1-RELEASE"; defaults["rtc.manager.subsystems"] = "Camera, Manipulator, Force Sensor"; defaults["rtc.openrtm.author"] = "Noriaki Ando"; defaults["rtc.openrtm.release"] = "aist"; defaults["rtc.openrtm.vendor"] = "AIST TaskIntelligence"; defaults["rtc.openrtm.version"] = "0.4.0"; /* mapによるデフォルト値指定でPropertiesオブジェクトを生成する */ coil::Properties prop(defaults); coil::Properties cprop(prop); /* 各プロパティのデフォルト値および通常値がいずれも、コンストラクタで指定した値で取得されることを確認する */ for (map<string, string>::iterator it = defaults.begin(); it != defaults.end(); it++) { string key = it->first; string value = it->second; CPPUNIT_ASSERT_EQUAL(value, cprop.getDefault(key)); CPPUNIT_ASSERT_EQUAL(value, cprop.getProperty(key)); } } /*! * @brief ~Properties(void)デストラクタのテスト * * <ul> * <li>デストラクタによりオブジェクトからデータが正しく削除されるか?</li> * </ul> */ void test_Properties_destructor() { map<string, string> defaults; defaults["rtc.component.conf.path"] = "C:\\Program\\ Files\\OpenRTM-aist"; defaults["rtc.manager.arch"] = "i386"; defaults["rtc.manager.debug.level"] = "PARANOID"; defaults["rtc.manager.language"] = "C++"; defaults["rtc.manager.nameserver"] = "zonu.a02.aist.go.jp"; defaults["rtc.manager.opening_message"] = "Hello World"; defaults["rtc.manager.orb.name"] = "omniORB"; defaults["rtc.manager.orb.options"] = "IIOPAddrPort, -ORBendPoint, giop:tcp:"; defaults["rtc.manager.os.name"] = "FreeBSD"; defaults["rtc.manager.os.release"] = "6.1-RELEASE"; defaults["rtc.manager.subsystems"] = "Camera, Manipulator, Force Sensor"; defaults["rtc.openrtm.author"] = "Noriaki Ando"; defaults["rtc.openrtm.release"] = "aist"; defaults["rtc.openrtm.vendor"] = "AIST TaskIntelligence"; defaults["rtc.openrtm.version"] = "0.4.0"; /* mapによるデフォルト値指定でPropertiesオブジェクトを生成する */ coil::Properties prop(defaults); std::vector<coil::Properties*> leaf0(prop.getNode("rtc").getLeaf()); CPPUNIT_ASSERT(leaf0.size() == 3); /* rtc.managerノードを削除する */ delete &prop.getNode("rtc.manager"); /* rtcノードからmanagerが削除されている事を確認する。*/ std::vector<coil::Properties*> leaf1(prop.getNode("rtc").getLeaf()); CPPUNIT_ASSERT(leaf1.size() == 2); std::string getval(prop.getNode("rtc.manager").getValue()); CPPUNIT_ASSERT("" == getval); } /*! * @brief =演算子(代入演算子)のテスト * * <ul> * <li>デフォルト値、通常値のいずれも設定されている場合に、それら両 * 方が正しく代入されるか?</li> * <li>デフォルト値のみ設定されており、通常値が設定されていない場合 * に、それら両方が正しく代入されるか?</li> * <li>デフォルト値が設定されていないが、通常値が設定されている場合 * に、それら両方が正しく代入されるか?</li> * </ul> */ void test_substitute() { /* 代入元となるPropertiesを作成する */ coil::Properties propSrc; /* (1) デフォルト値、通常値のいずれも設定されている場合 */ string key1 = "key1"; string key1DefaultValue = "key1-default-value"; string key1Value = "key1-value"; propSrc.setDefault(key1, key1DefaultValue); propSrc.setProperty(key1, key1Value); /* (2) デフォルト値のみ設定されており、通常値が設定されていない場合 */ string key2 = "key2"; string key2DefaultValue = "key2-default-value"; propSrc.setDefault(key2, key2DefaultValue); /* (3) デフォルト値が設定されていないが、通常値が設定されている場合 */ string key3 = "key3"; string key3Value = "key3-value"; propSrc.setProperty(key3, key3Value); /* 代入を行い、それぞれの場合で、正しく代入されたことを確認する */ coil::Properties prop; prop = propSrc; CPPUNIT_ASSERT_EQUAL(key1DefaultValue, prop.getDefault(key1)); CPPUNIT_ASSERT_EQUAL(key1Value, prop.getProperty(key1)); CPPUNIT_ASSERT_EQUAL(key2DefaultValue, prop.getDefault(key2)); CPPUNIT_ASSERT_EQUAL(key2DefaultValue, prop.getProperty(key2)); CPPUNIT_ASSERT_EQUAL(EMPTY_STRING, prop.getDefault(key3)); CPPUNIT_ASSERT_EQUAL(key3Value, prop.getProperty(key3)); } /*! * @brief getProperty()メソッドのテスト * * <ul> * <li>デフォルト値が設定されており、かつ通常の値も設定されている場 * 合に、プロパティ値として正しく通常の値が取得されるか?</li> * <li>デフォルト値が設定されているが、通常の値は設定されていない場 * 合に、プロパティ値として正しくデフォルト値が取得されるか?</li> * <li>デフォルト値は設定されていないが、通常の値は設定されている場 * 合に、プロパティ値として正しく通常の値が取得されるか?</li> * <li>デフォルト値、通常の値のいずれも設定されていない場合に、プロ * パティ値として正しく空文字列が取得されるか?</li> * </ul> */ void test_getProperty() { coil::Properties prop; prop.setDefault("property_1", "default_1"); prop.setProperty("property_1", "value_1"); prop.setDefault("property_2", "default_2"); prop.setProperty("property_3", "value_3"); /* (1) デフォルト値が設定されており、かつ通常の値も設定されている */ /* 場合に、プロパティ値として正しく通常の値が取得されるか? */ string expected_1 = "value_1"; CPPUNIT_ASSERT_EQUAL(expected_1, prop.getProperty("property_1")); /* (2) デフォルト値が設定されているが、通常の値は設定されていない */ /*/ 場合に、プロパティ値として正しくデフォルト値が取得されるか? */ string expected_2 = "default_2"; CPPUNIT_ASSERT_EQUAL(expected_2, prop.getProperty("property_2")); /* (3) デフォルト値は設定されていないが、通常の値は設定されている */ /* 場合に、プロパティ値として正しく通常の値が取得されるか? */ string expected_3 = "value_3"; CPPUNIT_ASSERT_EQUAL(expected_3, prop.getProperty("property_3")); /* (4) デフォルト値、通常の値のいずれも設定されていない場合に、プ */ /* ロパティ値として正しく空文字列が取得されるか? */ string expected_4 = ""; CPPUNIT_ASSERT_EQUAL(expected_4, prop.getProperty("property_4")); } /*! * @brief getDefault()のテスト * * <ul> * * <li>デフォルト値が設定されており、かつ通常の値も設定されている場 * 合に、正しく設定されているデフォルト値を取得できるか?</li> * * <li>デフォルト値が設定されているが、通常の値は設定されていない場 * 合に、正しく設定されているデフォルト値を取得できるか?</li> * * <li>デフォルト値は設定されていないが、通常の値は設定されている場 * 合に、デフォルト値として空文字列が取得されるか?</li> * * <li>デフォルト値、通常の値のいずれも設定されていない場合に、デフォ * ルト値として空文字列が取得されるか?</li> * * </ul> */ void test_getDefault() { coil::Properties prop; string key1 = "key1"; string key1DefaultValue = "key1-default-value"; string key1Value = "key1-value"; prop.setDefault(key1, key1DefaultValue); prop.setProperty(key1, key1Value); string key2 = "key2"; string key2DefaultValue = "key2-default-value"; prop.setDefault(key2, key2DefaultValue); string key3 = "key3"; string key3Value = "key3-value"; prop.setProperty(key3, key3Value); /* (1) デフォルト値が設定されており、かつ通常の値も設定されている */ /* 場合に、正しく設定されているデフォルト値を取得できるか? */ CPPUNIT_ASSERT_EQUAL(key1DefaultValue, prop.getDefault(key1)); /* (2) デフォルト値が設定されているが、通常の値は設定されていない */ /* 場合に、正しく設定されているデフォルト値を取得できるか? */ CPPUNIT_ASSERT_EQUAL(key2DefaultValue, prop.getDefault(key2)); /* (3) デフォルト値は設定されていないが、通常の値は設定されている */ /* 場合に、デフォルト値として空文字列が取得されるか? */ CPPUNIT_ASSERT_EQUAL(EMPTY_STRING, prop.getDefault(key3)); /* (4) デフォルト値、通常の値のいずれも設定されていない場合に、デ */ /* フォルト値として空文字列が取得されるか? */ string keyNonExist = "key-non-exist"; CPPUNIT_ASSERT_EQUAL(EMPTY_STRING, prop.getDefault(keyNonExist)); } /*! * @brief setProperty()メソッドのテスト * * <ul> * <li>設定時に指定した値が、正しく設定されるか?</li> * <li>設定時の戻り値として、元の設定値が正しく取得されるか?</li> * </ul> */ void test_setProperty() { string key = "key"; string oldValue = "old-value"; string newValue = "new-value"; coil::Properties prop; prop.setProperty(key, oldValue); /* (1) 設定時に指定した値が、正しく設定されるか? */ CPPUNIT_ASSERT_EQUAL(oldValue, prop.getProperty(key)); /* (2) 設定時の戻り値として、元の設定値が正しく取得されるか? */ CPPUNIT_ASSERT_EQUAL(oldValue, prop.setProperty(key, newValue)); /* (1) 設定時に指定した値が、正しく設定されるか?(その2) */ CPPUNIT_ASSERT_EQUAL(newValue, prop.getProperty(key)); } /*! * @brief list()メソッドのテスト * * <ul> * * <li>設定されているプロパティ値が、正しく出力されるか?</li> * * <li>\(バックスラッシュ)を含む値が、正しくエスケープ処理されて * 出力されるか?</li> * * </ul> */ void test_list() { coil::Properties prop; prop.setProperty("rtc.component.conf.path", "C:\\Program\\ Files\\OpenRTM-aist"); prop.setProperty("rtc.manager.arch", "i386"); prop.setProperty("rtc.manager.debug.level", "PARANOID"); prop.setProperty("rtc.manager.language", "C++"); prop.setProperty("rtc.manager.nameserver", "zonu.a02.aist.go.jp"); prop.setProperty("rtc.manager.opening_message", "Hello World"); prop.setProperty("rtc.manager.orb.name", "omniORB"); prop.setProperty("rtc.manager.orb.options", "IIOPAddrPort, -ORBendPoint, giop:tcp:"); prop.setProperty("rtc.manager.os.name", "FreeBSD"); prop.setProperty("rtc.manager.os.release", "6.1-RELEASE"); prop.setProperty("rtc.manager.subsystems", "Camera, Manipulator, Force Sensor"); prop.setProperty("rtc.openrtm.author", "Noriaki Ando"); prop.setProperty("rtc.openrtm.release", "aist"); prop.setProperty("rtc.openrtm.vendor", "AIST TaskIntelligence"); prop.setProperty("rtc.openrtm.version", "0.4.0"); std::ofstream outFile("listed.conf"); prop.list(outFile); outFile.close(); vector<string> expectedLines; expectedLines.push_back("rtc.component.conf.path: C:\\\\Program\\\\ Files\\\\OpenRTM-aist"); expectedLines.push_back("rtc.manager.arch: i386"); expectedLines.push_back("rtc.manager.debug.level: PARANOID"); expectedLines.push_back("rtc.manager.language: C++"); expectedLines.push_back("rtc.manager.nameserver: zonu.a02.aist.go.jp"); expectedLines.push_back("rtc.manager.opening_message: Hello World"); expectedLines.push_back("rtc.manager.orb.name: omniORB"); expectedLines.push_back("rtc.manager.orb.options: IIOPAddrPort, -ORBendPoint, giop:tcp:"); expectedLines.push_back("rtc.manager.os.name: FreeBSD"); expectedLines.push_back("rtc.manager.os.release: 6.1-RELEASE"); expectedLines.push_back("rtc.manager.subsystems: Camera, Manipulator, Force Sensor"); expectedLines.push_back("rtc.openrtm.author: Noriaki Ando"); expectedLines.push_back("rtc.openrtm.release: aist"); expectedLines.push_back("rtc.openrtm.vendor: AIST TaskIntelligence"); expectedLines.push_back("rtc.openrtm.version: 0.4.0"); vector<string> storedLines; std::ifstream inFile("listed.conf"); string str; while (getline(inFile, str)) { storedLines.push_back(str); } inFile.close(); /* ファイルに書き込まれた内容と期待値を比較する */ sort(expectedLines.begin(), expectedLines.end()); sort(storedLines.begin(), storedLines.end()); CPPUNIT_ASSERT_EQUAL(expectedLines.size(), storedLines.size()); for (vector<string>::size_type i = 0; i < expectedLines.size(); i++) { CPPUNIT_ASSERT_EQUAL(expectedLines[i], storedLines[i]); } } /*! * @brief load()メソッドのテスト * <ul> * * <li>プロパティリストをファイルからPropertiesオブジェクトへ正しく * 読み込めるか?</li> * * </ul> */ void test_load() { /* プロパティリストをファイルからPropertiesオブジェクトへ読み込む */ coil::Properties prop; std::ifstream ifl("defaults.conf"); prop.load(ifl); ifl.close(); /* 期待値と比較して、正しく読み込まれたことを確認する */ map<string, string>::iterator expected; for (expected = DEFAULTS_CONF.begin(); expected != DEFAULTS_CONF.end(); expected++) { string key = expected->first; string value = expected->second; CPPUNIT_ASSERT_EQUAL(value, prop.getProperty(key)); } } /*! * @brief store()メソッドのテスト * * <ul> * * <li>設定されているプロパティ値が、正しく出力されるか?</li> * * <li>指定したヘッダ文字列が、正しく出力されるか?</li> * * <li>\(バックスラッシュ)を含む値が、正しくエスケープ処理されて * 出力されるか?</li> * * </ul> */ void test_store() { /* テスト用のプロパティを設定する */ coil::Properties prop; prop.setProperty("rtc.component.conf.path", "C:\\Program\\ Files\\OpenRTM-aist"); prop.setProperty("rtc.manager.arch", "i386"); prop.setProperty("rtc.manager.debug.level", "PARANOID"); prop.setProperty("rtc.manager.language", "C++"); prop.setProperty("rtc.manager.nameserver", "zonu.a02.aist.go.jp"); prop.setProperty("rtc.manager.opening_message", "Hello World"); prop.setProperty("rtc.manager.orb.name", "omniORB"); prop.setProperty("rtc.manager.orb.options", "IIOPAddrPort, -ORBendPoint, giop:tcp:"); prop.setProperty("rtc.manager.os.name", "FreeBSD"); prop.setProperty("rtc.manager.os.release", "6.1-RELEASE"); prop.setProperty("rtc.manager.subsystems", "Camera, Manipulator, Force Sensor"); prop.setProperty("rtc.openrtm.author", "Noriaki Ando"); prop.setProperty("rtc.openrtm.release", "aist"); prop.setProperty("rtc.openrtm.vendor", "AIST TaskIntelligence"); prop.setProperty("rtc.openrtm.version", "0.4.0"); prop.setProperty("hello", "\tHello\t"); std::ofstream outFile("stored.conf"); prop.store(outFile, "stored data"); outFile.close(); /* 比較のための期待値を準備する */ vector<string> expectedLines; expectedLines.push_back("# stored data"); expectedLines.push_back("rtc.component.conf.path: C:\\\\Program\\\\ Files\\\\OpenRTM-aist"); expectedLines.push_back("rtc.manager.arch: i386"); expectedLines.push_back("rtc.manager.debug.level: PARANOID"); expectedLines.push_back("rtc.manager.language: C++"); expectedLines.push_back("rtc.manager.nameserver: zonu.a02.aist.go.jp"); expectedLines.push_back("rtc.manager.opening_message: Hello World"); expectedLines.push_back("rtc.manager.orb.name: omniORB"); expectedLines.push_back("rtc.manager.orb.options: IIOPAddrPort, -ORBendPoint, giop:tcp:"); expectedLines.push_back("rtc.manager.os.name: FreeBSD"); expectedLines.push_back("rtc.manager.os.release: 6.1-RELEASE"); expectedLines.push_back("rtc.manager.subsystems: Camera, Manipulator, Force Sensor"); expectedLines.push_back("rtc.openrtm.author: Noriaki Ando"); expectedLines.push_back("rtc.openrtm.release: aist"); expectedLines.push_back("rtc.openrtm.vendor: AIST TaskIntelligence"); expectedLines.push_back("rtc.openrtm.version: 0.4.0"); expectedLines.push_back("hello: \\tHello\\t"); /* 出力されたファイルの中身を1行づつ読み込む */ vector<string> storedLines; std::ifstream inFile("stored.conf"); string str; while (getline(inFile, str)) { storedLines.push_back(str); } inFile.close(); /* ファイルに書き込まれた内容と期待値を比較する */ sort(expectedLines.begin(), expectedLines.end()); sort(storedLines.begin(), storedLines.end()); CPPUNIT_ASSERT_EQUAL(expectedLines.size(), storedLines.size()); for (vector<string>::size_type i = 0; i < expectedLines.size(); i++) { CPPUNIT_ASSERT_EQUAL(expectedLines[i], storedLines[i]); } } /*! * @brief propertyNames()メソッドのテスト * * <ul> * * <li>通常のプロパティ値とデフォルト値の両方が設定されているプロパ * ティについて、キー名が取得されるか?</li> * * <li>通常のプロパティ値のみが設定されているプロパティについて、キー * 名が取得されるか?</li> * * <li>デフォルト値のみが設定されているプロパティについて、キー名が * 取得されるか?</li> * * </ul> */ void test_propertyNames() { coil::Properties prop; /* (1) 通常のプロパティ値とデフォルト値の両方を設定する */ prop.setProperty("property_01", "value_01"); prop.setDefault("property_01", "default_01"); /* (2) 通常のプロパティ値のみを設定する */ prop.setProperty("property_02", "value_02"); /* (3) デフォルト値のみを設定する */ prop.setDefault("property_03", "default_03"); /* (1),(2),(3)いずれの場合についてもキー名が取得されることを確認する */ vector<string> keys = prop.propertyNames(); CPPUNIT_ASSERT_EQUAL(3, (int) keys.size()); CPPUNIT_ASSERT(find(keys.begin(), keys.end(), "property_01") != keys.end()); CPPUNIT_ASSERT(find(keys.begin(), keys.end(), "property_02") != keys.end()); CPPUNIT_ASSERT(find(keys.begin(), keys.end(), "property_03") != keys.end()); } /*! * @brief getName(void)メソッドのテスト * * <ul> * <li>コンストラクタで指定したプロパティの名称が正しく取得されるか?</li> * </ul> */ void test_getName() { string value("test"); /* (1) キーを階層化していない場合 */ /* key,valueによるデフォルト値指定でPropertiesオブジェクトを生成する */ string key0("manager"); coil::Properties prop0(key0.c_str(),value.c_str()); string retkey(prop0.getName()); CPPUNIT_ASSERT_EQUAL(key0, retkey); /* (1) キーを階層化した場合 */ /* key,valueによるデフォルト値指定でPropertiesオブジェクトを生成する */ string key1("manager.hoge"); coil::Properties prop1(key1.c_str(),value.c_str()); retkey= prop1.getName(); CPPUNIT_ASSERT_EQUAL(key1, retkey); } /*! * @brief getValue(void)メソッドのテスト * * <ul> * <li>コンストラクタで指定したプロパティの値が正しく取得されるか?</li> * </ul> */ void test_getValue() { /* key,valueによるデフォルト値指定でPropertiesオブジェクトを生成する */ string key("manager"); string value("test.test"); coil::Properties prop(key.c_str(),value.c_str()); /* コンストラクタで指定したプロパティの値が取得されることを確認する */ string retval(prop.getValue()); CPPUNIT_ASSERT_EQUAL(value, retval); } /*! * @brief getDefaultValue(void)メソッドのテスト * * <ul> * <li>setDefaultで指定したプロパティの値が正しく取得されるか?</li> * </ul> */ void test_getDefaultValue() { coil::Properties prop; string key("property_1"); string value("default_1"); /* デフォルト値を設定する */ prop.setDefault(key.c_str(), value.c_str()); /* デフォルト値を取得する */ string retval(prop.getNode(key.c_str()).getDefaultValue()); CPPUNIT_ASSERT_EQUAL(value, retval); } /*! * @brief getLeaf(void)メソッドのテスト * * <ul> * <li>getLeafで子要素が正しく取得されるか?</li> * </ul> */ void test_getLeaf() { map<string, string> defaults; defaults["rtc.component.conf.path"] = "C:\\Program\\ Files\\OpenRTM-aist"; defaults["rtc.manager.arch"] = "i386"; defaults["rtc.manager.debug.level"] = "PARANOID"; defaults["rtc.manager.language"] = "C++"; defaults["rtc.manager.nameserver"] = "zonu.a02.aist.go.jp"; defaults["rtc.manager.opening_message"] = "Hello World"; defaults["rtc.manager.orb.name"] = "omniORB"; defaults["rtc.manager.orb.options"] = "IIOPAddrPort, -ORBendPoint, giop:tcp:"; defaults["rtc.manager.os.name"] = "FreeBSD"; defaults["rtc.manager.os.release"] = "6.1-RELEASE"; defaults["rtc.manager.subsystems"] = "Camera, Manipulator, Force Sensor"; defaults["rtc.openrtm.author"] = "Noriaki Ando"; defaults["rtc.openrtm.release"] = "aist"; defaults["rtc.openrtm.vendor"] = "AIST TaskIntelligence"; defaults["rtc.openrtm.version"] = "0.4.0"; /* mapによるデフォルト値指定でPropertiesオブジェクトを生成する */ coil::Properties prop(defaults); /* getLeaf()で子要素を取得 */ std::vector<coil::Properties*> leaf(prop.getNode("rtc").getLeaf()); CPPUNIT_ASSERT(leaf[1]->getProperty("arch") == "i386"); CPPUNIT_ASSERT(leaf[1]->getProperty("debug.level") == "PARANOID"); } /*! * @brief getRoot(void)メソッドのテスト * * <ul> * <li>getRootでルート要素が正しく取得されるか?</li> * </ul> */ void test_getRoot() { map<string, string> defaults; defaults["rtc.component.conf.path"] = "C:\\Program\\ Files\\OpenRTM-aist"; defaults["rtc.manager.arch"] = "i386"; defaults["rtc.manager.debug.level"] = "PARANOID"; defaults["rtc.manager.language"] = "C++"; defaults["rtc.manager.nameserver"] = "zonu.a02.aist.go.jp"; defaults["rtc.manager.opening_message"] = "Hello World"; defaults["rtc.manager.orb.name"] = "omniORB"; defaults["rtc.manager.orb.options"] = "IIOPAddrPort, -ORBendPoint, giop:tcp:"; defaults["rtc.manager.os.name"] = "FreeBSD"; defaults["rtc.manager.os.release"] = "6.1-RELEASE"; defaults["rtc.manager.subsystems"] = "Camera, Manipulator, Force Sensor"; defaults["rtc.openrtm.author"] = "Noriaki Ando"; defaults["rtc.openrtm.release"] = "aist"; defaults["rtc.openrtm.vendor"] = "AIST TaskIntelligence"; defaults["rtc.openrtm.version"] = "0.4.0"; /* mapによるデフォルト値指定でPropertiesオブジェクトを生成する */ coil::Properties prop(defaults); /* getLeaf()でルート要素を取得 */ const coil::Properties* root(prop.getNode("rtc.manager.os").getRoot()); CPPUNIT_ASSERT(root->getProperty("arch") == "i386"); CPPUNIT_ASSERT(root->getProperty("debug.level") == "PARANOID"); } /*! * @brief operator[]()メソッドのテスト * * <ul> * <li>指定されたキーを持つプロパティを、プロパティリストから探せるか?</li> * </ul> */ void test_operator() { map<string, string> defaults; defaults["rtc.component.conf.path"] = "C:\\Program\\ Files\\OpenRTM-aist"; defaults["rtc.manager.arch"] = "i386"; defaults["rtc.manager.debug.level"] = "PARANOID"; defaults["rtc.manager.language"] = "C++"; defaults["rtc.manager.nameserver"] = "zonu.a02.aist.go.jp"; defaults["rtc.manager.opening_message"] = "Hello World"; defaults["rtc.manager.orb.name"] = "omniORB"; defaults["rtc.manager.orb.options"] = "IIOPAddrPort, -ORBendPoint, giop:tcp:"; defaults["rtc.manager.os.name"] = "FreeBSD"; defaults["rtc.manager.os.release"] = "6.1-RELEASE"; defaults["rtc.manager.subsystems"] = "Camera, Manipulator, Force Sensor"; defaults["rtc.openrtm.author"] = "Noriaki Ando"; defaults["rtc.openrtm.release"] = "aist"; defaults["rtc.openrtm.vendor"] = "AIST TaskIntelligence"; defaults["rtc.openrtm.version"] = "0.4.0"; // const std::string& // Properties::operator[](const std::string& key) const // のテスト const coil::Properties prop0(defaults); const string& retval0(prop0["rtc.manager.arch"]); CPPUNIT_ASSERT(retval0 == "i386"); // std::string& // Properties::operator[](const std::string& key) // のテスト coil::Properties prop1(defaults); string retval1(prop1["rtc.manager.arch"]); CPPUNIT_ASSERT(retval1 == "i386"); } /*! * @brief setDefaults()メソッドのテスト * * <ul> * <li>デフォルト値を登録し、その値が正しく取得できるか?</li> * </ul> */ void test_setDefaults() { const char* defaults[] = { "rtc.component.conf.path", "C:\\Program\\ Files\\OpenRTM-aist", "rtc.manager.arch", "i386", "rtc.manager.debug.level", "PARANOID", "rtc.manager.language", "C++", "rtc.manager.nameserver", "zonu.a02.aist.go.jp", "rtc.manager.opening_message", "Hello World", "rtc.manager.orb.name", "omniORB", "rtc.manager.orb.options", "IIOPAddrPort, -ORBendPoint, giop:tcp:", "rtc.manager.os.name", "FreeBSD", "rtc.manager.os.release", "6.1-RELEASE", "rtc.manager.subsystems", "Camera, Manipulator, Force Sensor", "rtc.openrtm.author", "Noriaki Ando", "rtc.openrtm.release", "aist", "rtc.openrtm.vendor", "AIST TaskIntelligence", "rtc.openrtm.version", "0.4.0", "" }; coil::Properties prop; prop.setDefaults(defaults); /* // 各プロパティのデフォルト値がsetDefaultsで指定した値で取得されることを確認する */ for (int i = 0; defaults[i] != ""; i += 2) { string key = defaults[i]; string value = defaults[i + 1]; CPPUNIT_ASSERT_EQUAL(value, prop.getDefault(key)); } } /*! * @brief size()メソッドのテスト * * <ul> * <li>プロパティの数が正しく取得できるか?</li> * </ul> */ void test_size() { map<string, string> defaults; defaults["rtc.component.conf.path"] = "C:\\Program\\ Files\\OpenRTM-aist"; defaults["rtc.manager.arch"] = "i386"; defaults["rtc.manager.debug.level"] = "PARANOID"; defaults["rtc.manager.language"] = "C++"; defaults["rtc.manager.nameserver"] = "zonu.a02.aist.go.jp"; defaults["rtc.manager.opening_message"] = "Hello World"; defaults["rtc.manager.orb.name"] = "omniORB"; defaults["rtc.manager.orb.options"] = "IIOPAddrPort, -ORBendPoint, giop:tcp:"; defaults["rtc.manager.os.name"] = "FreeBSD"; defaults["rtc.manager.os.release"] = "6.1-RELEASE"; defaults["rtc.manager.subsystems"] = "Camera, Manipulator, Force Sensor"; defaults["rtc.openrtm.author"] = "Noriaki Ando"; defaults["rtc.openrtm.release"] = "aist"; defaults["rtc.openrtm.vendor"] = "AIST TaskIntelligence"; defaults["rtc.openrtm.version"] = "0.4.0"; coil::Properties prop(defaults); /* (1) コンストラクタ引数にて指定したプロパティの数が正しく取得できるか? */ CPPUNIT_ASSERT(15 == prop.size()); /* (2) 新たに追加後のプロパティの数が正しく取得できるか? */ string key = "key"; string newValue = "new-value"; prop.setProperty(key, newValue); CPPUNIT_ASSERT(16 == prop.size()); } /*! * @brief findNode()メソッドのテスト * * <ul> * <li>キーで指定したノードが正しく検索できるか?</li> * </ul> */ void test_findNode() { map<string, string> defaults; defaults["rtc.component.conf.path"] = "C:\\Program\\ Files\\OpenRTM-aist"; defaults["rtc.manager.arch"] = "i386"; defaults["rtc.manager.debug.level"] = "PARANOID"; defaults["rtc.manager.language"] = "C++"; defaults["rtc.manager.nameserver"] = "zonu.a02.aist.go.jp"; defaults["rtc.manager.opening_message"] = "Hello World"; defaults["rtc.manager.orb.name"] = "omniORB"; defaults["rtc.manager.orb.options"] = "IIOPAddrPort, -ORBendPoint, giop:tcp:"; defaults["rtc.manager.os.name"] = "FreeBSD"; defaults["rtc.manager.os.release"] = "6.1-RELEASE"; defaults["rtc.manager.subsystems"] = "Camera, Manipulator, Force Sensor"; defaults["rtc.openrtm.author"] = "Noriaki Ando"; defaults["rtc.openrtm.release"] = "aist"; defaults["rtc.openrtm.vendor"] = "AIST TaskIntelligence"; defaults["rtc.openrtm.version"] = "0.4.0"; /* mapによるデフォルト値指定でPropertiesオブジェクトを生成する */ coil::Properties prop(defaults); /* (1) 存在するノードを指定しノードを取得 */ CPPUNIT_ASSERT(prop.findNode("rtc.manager")->getProperty("arch") == "i386"); CPPUNIT_ASSERT(prop.findNode("rtc.manager")->getProperty("debug.level") == "PARANOID"); CPPUNIT_ASSERT(prop.findNode("rtc.manager") != NULL); /* (2) 存在しないノードを指定しノードを取得 */ CPPUNIT_ASSERT(prop.findNode("manager") == NULL); CPPUNIT_ASSERT(prop.findNode("rtc.MANAGER") == NULL); } /*! * @brief getNode()メソッドのテスト * * <ul> * <li>キーで指定したノードが正しく取得できるか?</li> * </ul> */ void test_getNode() { map<string, string> defaults; defaults["rtc.component.conf.path"] = "C:\\Program\\ Files\\OpenRTM-aist"; defaults["rtc.manager.arch"] = "i386"; defaults["rtc.manager.debug.level"] = "PARANOID"; defaults["rtc.manager.language"] = "C++"; defaults["rtc.manager.nameserver"] = "zonu.a02.aist.go.jp"; defaults["rtc.manager.opening_message"] = "Hello World"; defaults["rtc.manager.orb.name"] = "omniORB"; defaults["rtc.manager.orb.options"] = "IIOPAddrPort, -ORBendPoint, giop:tcp:"; defaults["rtc.manager.os.name"] = "FreeBSD"; defaults["rtc.manager.os.release"] = "6.1-RELEASE"; defaults["rtc.manager.subsystems"] = "Camera, Manipulator, Force Sensor"; defaults["rtc.openrtm.author"] = "Noriaki Ando"; defaults["rtc.openrtm.release"] = "aist"; defaults["rtc.openrtm.vendor"] = "AIST TaskIntelligence"; defaults["rtc.openrtm.version"] = "0.4.0"; /* mapによるデフォルト値指定でPropertiesオブジェクトを生成する */ coil::Properties prop(defaults); /* (1) 既に存在するノードを取得 */ CPPUNIT_ASSERT(prop.getNode("rtc.manager").getProperty("arch") == "i386"); CPPUNIT_ASSERT(prop.getNode("rtc.manager").getProperty("debug.level") == "PARANOID"); /* (2) 存在しないノードを取得 */ std::string getval(prop.getNode("manager").getValue()); CPPUNIT_ASSERT(getval == ""); // CPPUNIT_ASSERT(prop.getNode("rtc.manager") != NULL); } /*! * @brief removeNode()メソッドのテスト * * <ul> * <li>指定したノードが正しく削除できるか?</li> * </ul> */ void test_removeNode() { map<string, string> defaults; defaults["rtc.component.conf.path"] = "C:\\Program\\ Files\\OpenRTM-aist"; defaults["rtc.manager.arch"] = "i386"; defaults["rtc.manager.debug.level"] = "PARANOID"; defaults["rtc.manager.language"] = "C++"; defaults["rtc.manager.nameserver"] = "zonu.a02.aist.go.jp"; defaults["rtc.manager.opening_message"] = "Hello World"; defaults["rtc.manager.orb.name"] = "omniORB"; defaults["rtc.manager.orb.options"] = "IIOPAddrPort, -ORBendPoint, giop:tcp:"; defaults["rtc.manager.os.name"] = "FreeBSD"; defaults["rtc.manager.os.release"] = "6.1-RELEASE"; defaults["rtc.manager.subsystems"] = "Camera, Manipulator, Force Sensor"; defaults["rtc.openrtm.author"] = "Noriaki Ando"; defaults["rtc.openrtm.release"] = "aist"; defaults["rtc.openrtm.vendor"] = "AIST TaskIntelligence"; defaults["rtc.openrtm.version"] = "0.4.0"; /* mapによるデフォルト値指定でPropertiesオブジェクトを生成する */ coil::Properties prop(defaults); /* "rtc.manager"のように指定した場合、削除できない。 */ CPPUNIT_ASSERT(prop.removeNode("rtc.manager") == NULL); /* "rtc.manager"ノードの削除 */ CPPUNIT_ASSERT(prop.getNode("rtc").removeNode("manager") != NULL); /* (1) 削除したノードを検索 */ CPPUNIT_ASSERT(prop.findNode("rtc.manager") == NULL); /* (2) 削除したノードを取得 */ std::string getval0(prop.getNode("rtc.manager").getValue()); CPPUNIT_ASSERT(getval0 == ""); } /*! * @brief hasKey()メソッドのテスト * * <ul> * <li>子ノードにkeyがあるかどうか?</li> * </ul> */ void test_hasKey() { map<string, string> defaults; defaults["rtc.component.conf.path"] = "C:\\Program\\ Files\\OpenRTM-aist"; defaults["rtc.manager.arch"] = "i386"; defaults["rtc.manager.debug.level"] = "PARANOID"; defaults["rtc.manager.language"] = "C++"; defaults["rtc.manager.nameserver"] = "zonu.a02.aist.go.jp"; defaults["rtc.manager.opening_message"] = "Hello World"; defaults["rtc.manager.orb.name"] = "omniORB"; defaults["rtc.manager.orb.options"] = "IIOPAddrPort, -ORBendPoint, giop:tcp:"; defaults["rtc.manager.os.name"] = "FreeBSD"; defaults["rtc.manager.os.release"] = "6.1-RELEASE"; defaults["rtc.manager.subsystems"] = "Camera, Manipulator, Force Sensor"; defaults["rtc.openrtm.author"] = "Noriaki Ando"; defaults["rtc.openrtm.release"] = "aist"; defaults["rtc.openrtm.vendor"] = "AIST TaskIntelligence"; defaults["rtc.openrtm.version"] = "0.4.0"; /* mapによるデフォルト値指定でPropertiesオブジェクトを生成する */ coil::Properties prop(defaults); /* (1) 存在するキーでテスト */ CPPUNIT_ASSERT(prop.hasKey("rtc") != NULL); /* (2) 存在しないキーでテスト */ CPPUNIT_ASSERT(prop.hasKey("hoge") == NULL); /* (3) 存在するキーでテスト */ CPPUNIT_ASSERT(prop.getNode("rtc").hasKey("manager") != NULL); /* (4) 存在しないキーでテスト */ CPPUNIT_ASSERT(prop.getNode("rtc").hasKey("hoge") == NULL); } /*! * @brief clear()メソッドのテスト * * <ul> * <li>子ノードがすべて削除されるかどうか?</li> * </ul> */ void test_clear() { map<string, string> defaults; defaults["rtc.component.conf.path"] = "C:\\Program\\ Files\\OpenRTM-aist"; defaults["rtc.manager.arch"] = "i386"; defaults["rtc.manager.debug.level"] = "PARANOID"; defaults["rtc.manager.language"] = "C++"; defaults["rtc.manager.nameserver"] = "zonu.a02.aist.go.jp"; defaults["rtc.manager.opening_message"] = "Hello World"; defaults["rtc.manager.orb.name"] = "omniORB"; defaults["rtc.manager.orb.options"] = "IIOPAddrPort, -ORBendPoint, giop:tcp:"; defaults["rtc.manager.os.name"] = "FreeBSD"; defaults["rtc.manager.os.release"] = "6.1-RELEASE"; defaults["rtc.manager.subsystems"] = "Camera, Manipulator, Force Sensor"; defaults["rtc.openrtm.author"] = "Noriaki Ando"; defaults["rtc.openrtm.release"] = "aist"; defaults["rtc.openrtm.vendor"] = "AIST TaskIntelligence"; defaults["rtc.openrtm.version"] = "0.4.0"; /* mapによるデフォルト値指定でPropertiesオブジェクトを生成する */ coil::Properties prop(defaults); prop.getNode("rtc.manager.os").clear(); /* (1) "rtc.manager.os"以下のノードが削除されているか? */ CPPUNIT_ASSERT(prop.findNode("rtc.manager.os.name") == NULL); CPPUNIT_ASSERT(prop.findNode("rtc.manager.os.release") == NULL); /* (2) "rtc.manager.os"以外のノードは削除されていないか? */ CPPUNIT_ASSERT(prop.findNode("rtc.manager.arch") != NULL); CPPUNIT_ASSERT(prop.findNode("rtc.manager.orb") != NULL); /* (3) すべてのノードが削除されているか? */ prop.clear(); CPPUNIT_ASSERT(prop.findNode("rtc.manager.os") == NULL); CPPUNIT_ASSERT(prop.findNode("rtc.manager") == NULL); CPPUNIT_ASSERT(prop.findNode("rtc.openrtm") == NULL); CPPUNIT_ASSERT(prop.findNode("rtc.component") == NULL); CPPUNIT_ASSERT(prop.findNode("rtc") == NULL); } /*! * @brief createNode()のテスト * * <ul> * * <li>デフォルト値が設定されており、かつ通常の値も設定されている場 * 合に、当該キー名の新規ノード作成が、意図どおり失敗するか?</li> * * <li>デフォルト値が設定されているが、通常の値は設定されていない場 * 合に、当該キー名の新規ノード作成が、意図どおり失敗するか?</li> * * <li>デフォルト値は設定されていないが、通常の値は設定されている場 * 合に、当該キー名の新規ノード作成が、意図どおり失敗するか?</li> * * <li>デフォルト値、通常の値のいずれも設定されていない場合に、新規 * ノード作成が成功するか?</li> * * </ul> */ void test_createNode() { coil::Properties prop; string key1 = "key1"; string key1DefaultValue = "key1-default-value"; string key1Value = "key1-value"; prop.setDefault(key1, key1DefaultValue); prop.setProperty(key1, key1Value); string key2 = "key2"; string key2DefaultValue = "key2-default-value"; prop.setDefault(key2, key2DefaultValue); string key3 = "key3"; string key3Value = "key3-value"; prop.setProperty(key3, key3Value); /* // (1) デフォルト値が設定されており、かつ通常の値も設定されている // 場合に、当該キー名の新規ノード作成が、意図どおり失敗するか? */ CPPUNIT_ASSERT(! prop.createNode(key1.c_str())); /* // (2) デフォルト値が設定されているが、通常の値は設定されていない // 場合に、当該キー名の新規ノード作成が、意図どおり失敗するか? */ CPPUNIT_ASSERT(! prop.createNode(key2.c_str())); /* // (3) デフォルト値は設定されていないが、通常の値は設定されている // 場合に、当該キー名の新規ノード作成が、意図どおり失敗するか? */ CPPUNIT_ASSERT(! prop.createNode(key3.c_str())); /* // (4) デフォルト値、通常の値のいずれも設定されていない場合に、新 // 規ノード作成が成功するか? */ string keyNonExist = "key-non-exist"; CPPUNIT_ASSERT(prop.createNode(keyNonExist.c_str())); } /*! * @brief <<演算子のテスト * * <ul> * * <li>デフォルト値は、入力されないことを確認する
169  // (1) キーを階層化しないでテスト */ string key0("manager"); coil::Properties prop0(key0.c_str(),value.c_str()); string retkey(prop0.getName()); CPPUNIT_ASSERT_EQUAL(key0, retkey); string retval(prop0.getValue()); CPPUNIT_ASSERT_EQUAL(value, retval); /* // (2) キーを階層化してテスト */ string key1("manager.test.test"); coil::Properties prop1(key1.c_str(),value.c_str()); retkey = prop1.getName(); CPPUNIT_ASSERT_EQUAL(key1, retkey); retval = prop1.getValue(); CPPUNIT_ASSERT_EQUAL(value, retval); } /*! * @brief Properties(std::map<string, string>&)コンストラクタのテスト * * <ul> * <li>std::mapで指定したデフォルト値が、デフォルト値として正しく取 * 得されるか?</li> * </ul> */ void test_ctor_map() { map<string, string> defaults; defaults["rtc.component.conf.path"] = "C:\\Program\\ Files\\OpenRTM-aist"; defaults["rtc.manager.arch"] = "i386"; defaults["rtc.manager.debug.level"] = "PARANOID"; defaults["rtc.manager.language"] = "C++"; defaults["rtc.manager.nameserver"] = "zonu.a02.aist.go.jp"; defaults["rtc.manager.opening_message"] = "Hello World"; defaults["rtc.manager.orb.name"] = "omniORB"; defaults["rtc.manager.orb.options"] = "IIOPAddrPort, -ORBendPoint, giop:tcp:"; defaults["rtc.manager.os.name"] = "FreeBSD"; defaults["rtc.manager.os.release"] = "6.1-RELEASE"; defaults["rtc.manager.subsystems"] = "Camera, Manipulator, Force Sensor"; defaults["rtc.openrtm.author"] = "Noriaki Ando"; defaults["rtc.openrtm.release"] = "aist"; defaults["rtc.openrtm.vendor"] = "AIST TaskIntelligence"; defaults["rtc.openrtm.version"] = "0.4.0"; /* mapによるデフォルト値指定でPropertiesオブジェクトを生成する */ coil::Properties prop(defaults); /* 各プロパティのデフォルト値および通常値がいずれも、コンストラク */ /* タで指定した値で取得されることを確認する */ map<string, string>::iterator it; it = defaults.begin(); for (; it != defaults.end(); ++it) { string key = it->first; string value = it->second; CPPUNIT_ASSERT_EQUAL(value, prop.getDefault(key)); CPPUNIT_ASSERT_EQUAL(value, prop.getProperty(key)); } } void test_Properties_char() { const char* defaults[] = { "rtc.component.conf.path", "C:\\Program\\ Files\\OpenRTM-aist", "rtc.manager.arch", "i386", "rtc.manager.debug.level", "PARANOID", "rtc.manager.language", "C++", "rtc.manager.nameserver", "zonu.a02.aist.go.jp", "rtc.manager.opening_message", "Hello World", "rtc.manager.orb.name", "omniORB", "rtc.manager.orb.options", "IIOPAddrPort, -ORBendPoint, giop:tcp:", "rtc.manager.os.name", "FreeBSD", "rtc.manager.os.release", "6.1-RELEASE", "rtc.manager.subsystems", "Camera, Manipulator, Force Sensor", "rtc.openrtm.author", "Noriaki Ando", "rtc.openrtm.release", "aist", "rtc.openrtm.vendor", "AIST TaskIntelligence", "rtc.openrtm.version", "0.4.0", "" }; coil::Properties prop(defaults); /* // 各プロパティのデフォルト値および通常値がいずれも、コンストラクタで指定した値で取得されることを確認する */ for (int i = 0; defaults[i] != ""; i += 2) { string key = defaults[i]; string value = defaults[i + 1]; CPPUNIT_ASSERT_EQUAL(value, prop.getDefault(key)); CPPUNIT_ASSERT_EQUAL(value, prop.getProperty(key)); } } /*! * @brief Properties(const Properties& prop)コピーコンストラクタのテスト * * <ul> * <li>propで指定したデフォルト値が、コピーオブジェクトから正しく取得されるか?</li> * </ul> */ void test_Properties_copy() { map<string, string> defaults; defaults["rtc.component.conf.path"] = "C:\\Program\\ Files\\OpenRTM-aist"; defaults["rtc.manager.arch"] = "i386"; defaults["rtc.manager.debug.level"] = "PARANOID"; defaults["rtc.manager.language"] = "C++"; defaults["rtc.manager.nameserver"] = "zonu.a02.aist.go.jp"; defaults["rtc.manager.opening_message"] = "Hello World"; defaults["rtc.manager.orb.name"] = "omniORB"; defaults["rtc.manager.orb.options"] = "IIOPAddrPort, -ORBendPoint, giop:tcp:"; defaults["rtc.manager.os.name"] = "FreeBSD"; defaults["rtc.manager.os.release"] = "6.1-RELEASE"; defaults["rtc.manager.subsystems"] = "Camera, Manipulator, Force Sensor"; defaults["rtc.openrtm.author"] = "Noriaki Ando"; defaults["rtc.openrtm.release"] = "aist"; defaults["rtc.openrtm.vendor"] = "AIST TaskIntelligence"; defaults["rtc.openrtm.version"] = "0.4.0"; /* mapによるデフォルト値指定でPropertiesオブジェクトを生成する */ coil::Properties prop(defaults); coil::Properties cprop(prop); /* 各プロパティのデフォルト値および通常値がいずれも、コンストラクタで指定した値で取得されることを確認する */ for (map<string, string>::iterator it = defaults.begin(); it != defaults.end(); it++) { string key = it->first; string value = it->second; CPPUNIT_ASSERT_EQUAL(value, cprop.getDefault(key)); CPPUNIT_ASSERT_EQUAL(value, cprop.getProperty(key)); } } /*! * @brief ~Properties(void)デストラクタのテスト * * <ul> * <li>デストラクタによりオブジェクトからデータが正しく削除されるか?</li> * </ul> */ void test_Properties_destructor() { map<string, string> defaults; defaults["rtc.component.conf.path"] = "C:\\Program\\ Files\\OpenRTM-aist"; defaults["rtc.manager.arch"] = "i386"; defaults["rtc.manager.debug.level"] = "PARANOID"; defaults["rtc.manager.language"] = "C++"; defaults["rtc.manager.nameserver"] = "zonu.a02.aist.go.jp"; defaults["rtc.manager.opening_message"] = "Hello World"; defaults["rtc.manager.orb.name"] = "omniORB"; defaults["rtc.manager.orb.options"] = "IIOPAddrPort, -ORBendPoint, giop:tcp:"; defaults["rtc.manager.os.name"] = "FreeBSD"; defaults["rtc.manager.os.release"] = "6.1-RELEASE"; defaults["rtc.manager.subsystems"] = "Camera, Manipulator, Force Sensor"; defaults["rtc.openrtm.author"] = "Noriaki Ando"; defaults["rtc.openrtm.release"] = "aist"; defaults["rtc.openrtm.vendor"] = "AIST TaskIntelligence"; defaults["rtc.openrtm.version"] = "0.4.0"; /* mapによるデフォルト値指定でPropertiesオブジェクトを生成する */ coil::Properties prop(defaults); std::vector<coil::Properties*> leaf0(prop.getNode("rtc").getLeaf()); CPPUNIT_ASSERT(leaf0.size() == 3); /* rtc.managerノードを削除する */ delete &prop.getNode("rtc.manager"); /* rtcノードからmanagerが削除されている事を確認する。*/ std::vector<coil::Properties*> leaf1(prop.getNode("rtc").getLeaf()); CPPUNIT_ASSERT(leaf1.size() == 2); std::string getval(prop.getNode("rtc.manager").getValue()); CPPUNIT_ASSERT("" == getval); } /*! * @brief =演算子(代入演算子)のテスト * * <ul> * <li>デフォルト値、通常値のいずれも設定されている場合に、それら両 * 方が正しく代入されるか?</li> * <li>デフォルト値のみ設定されており、通常値が設定されていない場合 * に、それら両方が正しく代入されるか?</li> * <li>デフォルト値が設定されていないが、通常値が設定されている場合 * に、それら両方が正しく代入されるか?</li> * </ul> */ void test_substitute() { /* 代入元となるPropertiesを作成する */ coil::Properties propSrc; /* (1) デフォルト値、通常値のいずれも設定されている場合 */ string key1 = "key1"; string key1DefaultValue = "key1-default-value"; string key1Value = "key1-value"; propSrc.setDefault(key1, key1DefaultValue); propSrc.setProperty(key1, key1Value); /* (2) デフォルト値のみ設定されており、通常値が設定されていない場合 */ string key2 = "key2"; string key2DefaultValue = "key2-default-value"; propSrc.setDefault(key2, key2DefaultValue); /* (3) デフォルト値が設定されていないが、通常値が設定されている場合 */ string key3 = "key3"; string key3Value = "key3-value"; propSrc.setProperty(key3, key3Value); /* 代入を行い、それぞれの場合で、正しく代入されたことを確認する */ coil::Properties prop; prop = propSrc; CPPUNIT_ASSERT_EQUAL(key1DefaultValue, prop.getDefault(key1)); CPPUNIT_ASSERT_EQUAL(key1Value, prop.getProperty(key1)); CPPUNIT_ASSERT_EQUAL(key2DefaultValue, prop.getDefault(key2)); CPPUNIT_ASSERT_EQUAL(key2DefaultValue, prop.getProperty(key2)); CPPUNIT_ASSERT_EQUAL(EMPTY_STRING, prop.getDefault(key3)); CPPUNIT_ASSERT_EQUAL(key3Value, prop.getProperty(key3)); } /*! * @brief getProperty()メソッドのテスト * * <ul> * <li>デフォルト値が設定されており、かつ通常の値も設定されている場 * 合に、プロパティ値として正しく通常の値が取得されるか?</li> * <li>デフォルト値が設定されているが、通常の値は設定されていない場 * 合に、プロパティ値として正しくデフォルト値が取得されるか?</li> * <li>デフォルト値は設定されていないが、通常の値は設定されている場 * 合に、プロパティ値として正しく通常の値が取得されるか?</li> * <li>デフォルト値、通常の値のいずれも設定されていない場合に、プロ * パティ値として正しく空文字列が取得されるか?</li> * </ul> */ void test_getProperty() { coil::Properties prop; prop.setDefault("property_1", "default_1"); prop.setProperty("property_1", "value_1"); prop.setDefault("property_2", "default_2"); prop.setProperty("property_3", "value_3"); /* (1) デフォルト値が設定されており、かつ通常の値も設定されている */ /* 場合に、プロパティ値として正しく通常の値が取得されるか? */ string expected_1 = "value_1"; CPPUNIT_ASSERT_EQUAL(expected_1, prop.getProperty("property_1")); /* (2) デフォルト値が設定されているが、通常の値は設定されていない */ /*/ 場合に、プロパティ値として正しくデフォルト値が取得されるか? */ string expected_2 = "default_2"; CPPUNIT_ASSERT_EQUAL(expected_2, prop.getProperty("property_2")); /* (3) デフォルト値は設定されていないが、通常の値は設定されている */ /* 場合に、プロパティ値として正しく通常の値が取得されるか? */ string expected_3 = "value_3"; CPPUNIT_ASSERT_EQUAL(expected_3, prop.getProperty("property_3")); /* (4) デフォルト値、通常の値のいずれも設定されていない場合に、プ */ /* ロパティ値として正しく空文字列が取得されるか? */ string expected_4 = ""; CPPUNIT_ASSERT_EQUAL(expected_4, prop.getProperty("property_4")); } /*! * @brief getDefault()のテスト * * <ul> * * <li>デフォルト値が設定されており、かつ通常の値も設定されている場 * 合に、正しく設定されているデフォルト値を取得できるか?</li> * * <li>デフォルト値が設定されているが、通常の値は設定されていない場 * 合に、正しく設定されているデフォルト値を取得できるか?</li> * * <li>デフォルト値は設定されていないが、通常の値は設定されている場 * 合に、デフォルト値として空文字列が取得されるか?</li> * * <li>デフォルト値、通常の値のいずれも設定されていない場合に、デフォ * ルト値として空文字列が取得されるか?</li> * * </ul> */ void test_getDefault() { coil::Properties prop; string key1 = "key1"; string key1DefaultValue = "key1-default-value"; string key1Value = "key1-value"; prop.setDefault(key1, key1DefaultValue); prop.setProperty(key1, key1Value); string key2 = "key2"; string key2DefaultValue = "key2-default-value"; prop.setDefault(key2, key2DefaultValue); string key3 = "key3"; string key3Value = "key3-value"; prop.setProperty(key3, key3Value); /* (1) デフォルト値が設定されており、かつ通常の値も設定されている */ /* 場合に、正しく設定されているデフォルト値を取得できるか? */ CPPUNIT_ASSERT_EQUAL(key1DefaultValue, prop.getDefault(key1)); /* (2) デフォルト値が設定されているが、通常の値は設定されていない */ /* 場合に、正しく設定されているデフォルト値を取得できるか? */ CPPUNIT_ASSERT_EQUAL(key2DefaultValue, prop.getDefault(key2)); /* (3) デフォルト値は設定されていないが、通常の値は設定されている */ /* 場合に、デフォルト値として空文字列が取得されるか? */ CPPUNIT_ASSERT_EQUAL(EMPTY_STRING, prop.getDefault(key3)); /* (4) デフォルト値、通常の値のいずれも設定されていない場合に、デ */ /* フォルト値として空文字列が取得されるか? */ string keyNonExist = "key-non-exist"; CPPUNIT_ASSERT_EQUAL(EMPTY_STRING, prop.getDefault(keyNonExist)); } /*! * @brief setProperty()メソッドのテスト * * <ul> * <li>設定時に指定した値が、正しく設定されるか?</li> * <li>設定時の戻り値として、元の設定値が正しく取得されるか?</li> * </ul> */ void test_setProperty() { string key = "key"; string oldValue = "old-value"; string newValue = "new-value"; coil::Properties prop; prop.setProperty(key, oldValue); /* (1) 設定時に指定した値が、正しく設定されるか? */ CPPUNIT_ASSERT_EQUAL(oldValue, prop.getProperty(key)); /* (2) 設定時の戻り値として、元の設定値が正しく取得されるか? */ CPPUNIT_ASSERT_EQUAL(oldValue, prop.setProperty(key, newValue)); /* (1) 設定時に指定した値が、正しく設定されるか?(その2) */ CPPUNIT_ASSERT_EQUAL(newValue, prop.getProperty(key)); } /*! * @brief list()メソッドのテスト * * <ul> * * <li>設定されているプロパティ値が、正しく出力されるか?</li> * * <li>\(バックスラッシュ)を含む値が、正しくエスケープ処理されて * 出力されるか?</li> * * </ul> */ void test_list() { coil::Properties prop; prop.setProperty("rtc.component.conf.path", "C:\\Program\\ Files\\OpenRTM-aist"); prop.setProperty("rtc.manager.arch", "i386"); prop.setProperty("rtc.manager.debug.level", "PARANOID"); prop.setProperty("rtc.manager.language", "C++"); prop.setProperty("rtc.manager.nameserver", "zonu.a02.aist.go.jp"); prop.setProperty("rtc.manager.opening_message", "Hello World"); prop.setProperty("rtc.manager.orb.name", "omniORB"); prop.setProperty("rtc.manager.orb.options", "IIOPAddrPort, -ORBendPoint, giop:tcp:"); prop.setProperty("rtc.manager.os.name", "FreeBSD"); prop.setProperty("rtc.manager.os.release", "6.1-RELEASE"); prop.setProperty("rtc.manager.subsystems", "Camera, Manipulator, Force Sensor"); prop.setProperty("rtc.openrtm.author", "Noriaki Ando"); prop.setProperty("rtc.openrtm.release", "aist"); prop.setProperty("rtc.openrtm.vendor", "AIST TaskIntelligence"); prop.setProperty("rtc.openrtm.version", "0.4.0"); std::ofstream outFile("listed.conf"); prop.list(outFile); outFile.close(); vector<string> expectedLines; expectedLines.push_back("rtc.component.conf.path: C:\\\\Program\\\\ Files\\\\OpenRTM-aist"); expectedLines.push_back("rtc.manager.arch: i386"); expectedLines.push_back("rtc.manager.debug.level: PARANOID"); expectedLines.push_back("rtc.manager.language: C++"); expectedLines.push_back("rtc.manager.nameserver: zonu.a02.aist.go.jp"); expectedLines.push_back("rtc.manager.opening_message: Hello World"); expectedLines.push_back("rtc.manager.orb.name: omniORB"); expectedLines.push_back("rtc.manager.orb.options: IIOPAddrPort, -ORBendPoint, giop:tcp:"); expectedLines.push_back("rtc.manager.os.name: FreeBSD"); expectedLines.push_back("rtc.manager.os.release: 6.1-RELEASE"); expectedLines.push_back("rtc.manager.subsystems: Camera, Manipulator, Force Sensor"); expectedLines.push_back("rtc.openrtm.author: Noriaki Ando"); expectedLines.push_back("rtc.openrtm.release: aist"); expectedLines.push_back("rtc.openrtm.vendor: AIST TaskIntelligence"); expectedLines.push_back("rtc.openrtm.version: 0.4.0"); vector<string> storedLines; std::ifstream inFile("listed.conf"); string str; while (getline(inFile, str)) { storedLines.push_back(str); } inFile.close(); /* ファイルに書き込まれた内容と期待値を比較する */ sort(expectedLines.begin(), expectedLines.end()); sort(storedLines.begin(), storedLines.end()); CPPUNIT_ASSERT_EQUAL(expectedLines.size(), storedLines.size()); for (vector<string>::size_type i = 0; i < expectedLines.size(); i++) { CPPUNIT_ASSERT_EQUAL(expectedLines[i], storedLines[i]); } } /*! * @brief load()メソッドのテスト * <ul> * * <li>プロパティリストをファイルからPropertiesオブジェクトへ正しく * 読み込めるか?</li> * * </ul> */ void test_load() { /* プロパティリストをファイルからPropertiesオブジェクトへ読み込む */ coil::Properties prop; std::ifstream ifl("defaults.conf"); prop.load(ifl); ifl.close(); /* 期待値と比較して、正しく読み込まれたことを確認する */ map<string, string>::iterator expected; for (expected = DEFAULTS_CONF.begin(); expected != DEFAULTS_CONF.end(); expected++) { string key = expected->first; string value = expected->second; CPPUNIT_ASSERT_EQUAL(value, prop.getProperty(key)); } } /*! * @brief store()メソッドのテスト * * <ul> * * <li>設定されているプロパティ値が、正しく出力されるか?</li> * * <li>指定したヘッダ文字列が、正しく出力されるか?</li> * * <li>\(バックスラッシュ)を含む値が、正しくエスケープ処理されて * 出力されるか?</li> * * </ul> */ void test_store() { /* テスト用のプロパティを設定する */ coil::Properties prop; prop.setProperty("rtc.component.conf.path", "C:\\Program\\ Files\\OpenRTM-aist"); prop.setProperty("rtc.manager.arch", "i386"); prop.setProperty("rtc.manager.debug.level", "PARANOID"); prop.setProperty("rtc.manager.language", "C++"); prop.setProperty("rtc.manager.nameserver", "zonu.a02.aist.go.jp"); prop.setProperty("rtc.manager.opening_message", "Hello World"); prop.setProperty("rtc.manager.orb.name", "omniORB"); prop.setProperty("rtc.manager.orb.options", "IIOPAddrPort, -ORBendPoint, giop:tcp:"); prop.setProperty("rtc.manager.os.name", "FreeBSD"); prop.setProperty("rtc.manager.os.release", "6.1-RELEASE"); prop.setProperty("rtc.manager.subsystems", "Camera, Manipulator, Force Sensor"); prop.setProperty("rtc.openrtm.author", "Noriaki Ando"); prop.setProperty("rtc.openrtm.release", "aist"); prop.setProperty("rtc.openrtm.vendor", "AIST TaskIntelligence"); prop.setProperty("rtc.openrtm.version", "0.4.0"); prop.setProperty("hello", "\tHello\t"); std::ofstream outFile("stored.conf"); prop.store(outFile, "stored data"); outFile.close(); /* 比較のための期待値を準備する */ vector<string> expectedLines; expectedLines.push_back("# stored data"); expectedLines.push_back("rtc.component.conf.path: C:\\\\Program\\\\ Files\\\\OpenRTM-aist"); expectedLines.push_back("rtc.manager.arch: i386"); expectedLines.push_back("rtc.manager.debug.level: PARANOID"); expectedLines.push_back("rtc.manager.language: C++"); expectedLines.push_back("rtc.manager.nameserver: zonu.a02.aist.go.jp"); expectedLines.push_back("rtc.manager.opening_message: Hello World"); expectedLines.push_back("rtc.manager.orb.name: omniORB"); expectedLines.push_back("rtc.manager.orb.options: IIOPAddrPort, -ORBendPoint, giop:tcp:"); expectedLines.push_back("rtc.manager.os.name: FreeBSD"); expectedLines.push_back("rtc.manager.os.release: 6.1-RELEASE"); expectedLines.push_back("rtc.manager.subsystems: Camera, Manipulator, Force Sensor"); expectedLines.push_back("rtc.openrtm.author: Noriaki Ando"); expectedLines.push_back("rtc.openrtm.release: aist"); expectedLines.push_back("rtc.openrtm.vendor: AIST TaskIntelligence"); expectedLines.push_back("rtc.openrtm.version: 0.4.0"); expectedLines.push_back("hello: \\tHello\\t"); /* 出力されたファイルの中身を1行づつ読み込む */ vector<string> storedLines; std::ifstream inFile("stored.conf"); string str; while (getline(inFile, str)) { storedLines.push_back(str); } inFile.close(); /* ファイルに書き込まれた内容と期待値を比較する */ sort(expectedLines.begin(), expectedLines.end()); sort(storedLines.begin(), storedLines.end()); CPPUNIT_ASSERT_EQUAL(expectedLines.size(), storedLines.size()); for (vector<string>::size_type i = 0; i < expectedLines.size(); i++) { CPPUNIT_ASSERT_EQUAL(expectedLines[i], storedLines[i]); } } /*! * @brief propertyNames()メソッドのテスト * * <ul> * * <li>通常のプロパティ値とデフォルト値の両方が設定されているプロパ * ティについて、キー名が取得されるか?</li> * * <li>通常のプロパティ値のみが設定されているプロパティについて、キー * 名が取得されるか?</li> * * <li>デフォルト値のみが設定されているプロパティについて、キー名が * 取得されるか?</li> * * </ul> */ void test_propertyNames() { coil::Properties prop; /* (1) 通常のプロパティ値とデフォルト値の両方を設定する */ prop.setProperty("property_01", "value_01"); prop.setDefault("property_01", "default_01"); /* (2) 通常のプロパティ値のみを設定する */ prop.setProperty("property_02", "value_02"); /* (3) デフォルト値のみを設定する */ prop.setDefault("property_03", "default_03"); /* (1),(2),(3)いずれの場合についてもキー名が取得されることを確認する */ vector<string> keys = prop.propertyNames(); CPPUNIT_ASSERT_EQUAL(3, (int) keys.size()); CPPUNIT_ASSERT(find(keys.begin(), keys.end(), "property_01") != keys.end()); CPPUNIT_ASSERT(find(keys.begin(), keys.end(), "property_02") != keys.end()); CPPUNIT_ASSERT(find(keys.begin(), keys.end(), "property_03") != keys.end()); } /*! * @brief getName(void)メソッドのテスト * * <ul> * <li>コンストラクタで指定したプロパティの名称が正しく取得されるか?</li> * </ul> */ void test_getName() { string value("test"); /* (1) キーを階層化していない場合 */ /* key,valueによるデフォルト値指定でPropertiesオブジェクトを生成する */ string key0("manager"); coil::Properties prop0(key0.c_str(),value.c_str()); string retkey(prop0.getName()); CPPUNIT_ASSERT_EQUAL(key0, retkey); /* (1) キーを階層化した場合 */ /* key,valueによるデフォルト値指定でPropertiesオブジェクトを生成する */ string key1("manager.hoge"); coil::Properties prop1(key1.c_str(),value.c_str()); retkey= prop1.getName(); CPPUNIT_ASSERT_EQUAL(key1, retkey); } /*! * @brief getValue(void)メソッドのテスト * * <ul> * <li>コンストラクタで指定したプロパティの値が正しく取得されるか?</li> * </ul> */ void test_getValue() { /* key,valueによるデフォルト値指定でPropertiesオブジェクトを生成する */ string key("manager"); string value("test.test"); coil::Properties prop(key.c_str(),value.c_str()); /* コンストラクタで指定したプロパティの値が取得されることを確認する */ string retval(prop.getValue()); CPPUNIT_ASSERT_EQUAL(value, retval); } /*! * @brief getDefaultValue(void)メソッドのテスト * * <ul> * <li>setDefaultで指定したプロパティの値が正しく取得されるか?</li> * </ul> */ void test_getDefaultValue() { coil::Properties prop; string key("property_1"); string value("default_1"); /* デフォルト値を設定する */ prop.setDefault(key.c_str(), value.c_str()); /* デフォルト値を取得する */ string retval(prop.getNode(key.c_str()).getDefaultValue()); CPPUNIT_ASSERT_EQUAL(value, retval); } /*! * @brief getLeaf(void)メソッドのテスト * * <ul> * <li>getLeafで子要素が正しく取得されるか?</li> * </ul> */ void test_getLeaf() { map<string, string> defaults; defaults["rtc.component.conf.path"] = "C:\\Program\\ Files\\OpenRTM-aist"; defaults["rtc.manager.arch"] = "i386"; defaults["rtc.manager.debug.level"] = "PARANOID"; defaults["rtc.manager.language"] = "C++"; defaults["rtc.manager.nameserver"] = "zonu.a02.aist.go.jp"; defaults["rtc.manager.opening_message"] = "Hello World"; defaults["rtc.manager.orb.name"] = "omniORB"; defaults["rtc.manager.orb.options"] = "IIOPAddrPort, -ORBendPoint, giop:tcp:"; defaults["rtc.manager.os.name"] = "FreeBSD"; defaults["rtc.manager.os.release"] = "6.1-RELEASE"; defaults["rtc.manager.subsystems"] = "Camera, Manipulator, Force Sensor"; defaults["rtc.openrtm.author"] = "Noriaki Ando"; defaults["rtc.openrtm.release"] = "aist"; defaults["rtc.openrtm.vendor"] = "AIST TaskIntelligence"; defaults["rtc.openrtm.version"] = "0.4.0"; /* mapによるデフォルト値指定でPropertiesオブジェクトを生成する */ coil::Properties prop(defaults); /* getLeaf()で子要素を取得 */ std::vector<coil::Properties*> leaf(prop.getNode("rtc").getLeaf()); CPPUNIT_ASSERT(leaf[1]->getProperty("arch") == "i386"); CPPUNIT_ASSERT(leaf[1]->getProperty("debug.level") == "PARANOID"); } /*! * @brief getRoot(void)メソッドのテスト * * <ul> * <li>getRootでルート要素が正しく取得されるか?</li> * </ul> */ void test_getRoot() { map<string, string> defaults; defaults["rtc.component.conf.path"] = "C:\\Program\\ Files\\OpenRTM-aist"; defaults["rtc.manager.arch"] = "i386"; defaults["rtc.manager.debug.level"] = "PARANOID"; defaults["rtc.manager.language"] = "C++"; defaults["rtc.manager.nameserver"] = "zonu.a02.aist.go.jp"; defaults["rtc.manager.opening_message"] = "Hello World"; defaults["rtc.manager.orb.name"] = "omniORB"; defaults["rtc.manager.orb.options"] = "IIOPAddrPort, -ORBendPoint, giop:tcp:"; defaults["rtc.manager.os.name"] = "FreeBSD"; defaults["rtc.manager.os.release"] = "6.1-RELEASE"; defaults["rtc.manager.subsystems"] = "Camera, Manipulator, Force Sensor"; defaults["rtc.openrtm.author"] = "Noriaki Ando"; defaults["rtc.openrtm.release"] = "aist"; defaults["rtc.openrtm.vendor"] = "AIST TaskIntelligence"; defaults["rtc.openrtm.version"] = "0.4.0"; /* mapによるデフォルト値指定でPropertiesオブジェクトを生成する */ coil::Properties prop(defaults); /* getLeaf()でルート要素を取得 */ const coil::Properties* root(prop.getNode("rtc.manager.os").getRoot()); CPPUNIT_ASSERT(root->getProperty("arch") == "i386"); CPPUNIT_ASSERT(root->getProperty("debug.level") == "PARANOID"); } /*! * @brief operator[]()メソッドのテスト * * <ul> * <li>指定されたキーを持つプロパティを、プロパティリストから探せるか?</li> * </ul> */ void test_operator() { map<string, string> defaults; defaults["rtc.component.conf.path"] = "C:\\Program\\ Files\\OpenRTM-aist"; defaults["rtc.manager.arch"] = "i386"; defaults["rtc.manager.debug.level"] = "PARANOID"; defaults["rtc.manager.language"] = "C++"; defaults["rtc.manager.nameserver"] = "zonu.a02.aist.go.jp"; defaults["rtc.manager.opening_message"] = "Hello World"; defaults["rtc.manager.orb.name"] = "omniORB"; defaults["rtc.manager.orb.options"] = "IIOPAddrPort, -ORBendPoint, giop:tcp:"; defaults["rtc.manager.os.name"] = "FreeBSD"; defaults["rtc.manager.os.release"] = "6.1-RELEASE"; defaults["rtc.manager.subsystems"] = "Camera, Manipulator, Force Sensor"; defaults["rtc.openrtm.author"] = "Noriaki Ando"; defaults["rtc.openrtm.release"] = "aist"; defaults["rtc.openrtm.vendor"] = "AIST TaskIntelligence"; defaults["rtc.openrtm.version"] = "0.4.0"; // const std::string& // Properties::operator[](const std::string& key) const // のテスト const coil::Properties prop0(defaults); const string& retval0(prop0["rtc.manager.arch"]); CPPUNIT_ASSERT(retval0 == "i386"); // std::string& // Properties::operator[](const std::string& key) // のテスト coil::Properties prop1(defaults); string retval1(prop1["rtc.manager.arch"]); CPPUNIT_ASSERT(retval1 == "i386"); } /*! * @brief setDefaults()メソッドのテスト * * <ul> * <li>デフォルト値を登録し、その値が正しく取得できるか?</li> * </ul> */ void test_setDefaults() { const char* defaults[] = { "rtc.component.conf.path", "C:\\Program\\ Files\\OpenRTM-aist", "rtc.manager.arch", "i386", "rtc.manager.debug.level", "PARANOID", "rtc.manager.language", "C++", "rtc.manager.nameserver", "zonu.a02.aist.go.jp", "rtc.manager.opening_message", "Hello World", "rtc.manager.orb.name", "omniORB", "rtc.manager.orb.options", "IIOPAddrPort, -ORBendPoint, giop:tcp:", "rtc.manager.os.name", "FreeBSD", "rtc.manager.os.release", "6.1-RELEASE", "rtc.manager.subsystems", "Camera, Manipulator, Force Sensor", "rtc.openrtm.author", "Noriaki Ando", "rtc.openrtm.release", "aist", "rtc.openrtm.vendor", "AIST TaskIntelligence", "rtc.openrtm.version", "0.4.0", "" }; coil::Properties prop; prop.setDefaults(defaults); /* // 各プロパティのデフォルト値がsetDefaultsで指定した値で取得されることを確認する */ for (int i = 0; defaults[i] != ""; i += 2) { string key = defaults[i]; string value = defaults[i + 1]; CPPUNIT_ASSERT_EQUAL(value, prop.getDefault(key)); } } /*! * @brief size()メソッドのテスト * * <ul> * <li>プロパティの数が正しく取得できるか?</li> * </ul> */ void test_size() { map<string, string> defaults; defaults["rtc.component.conf.path"] = "C:\\Program\\ Files\\OpenRTM-aist"; defaults["rtc.manager.arch"] = "i386"; defaults["rtc.manager.debug.level"] = "PARANOID"; defaults["rtc.manager.language"] = "C++"; defaults["rtc.manager.nameserver"] = "zonu.a02.aist.go.jp"; defaults["rtc.manager.opening_message"] = "Hello World"; defaults["rtc.manager.orb.name"] = "omniORB"; defaults["rtc.manager.orb.options"] = "IIOPAddrPort, -ORBendPoint, giop:tcp:"; defaults["rtc.manager.os.name"] = "FreeBSD"; defaults["rtc.manager.os.release"] = "6.1-RELEASE"; defaults["rtc.manager.subsystems"] = "Camera, Manipulator, Force Sensor"; defaults["rtc.openrtm.author"] = "Noriaki Ando"; defaults["rtc.openrtm.release"] = "aist"; defaults["rtc.openrtm.vendor"] = "AIST TaskIntelligence"; defaults["rtc.openrtm.version"] = "0.4.0"; coil::Properties prop(defaults); /* (1) コンストラクタ引数にて指定したプロパティの数が正しく取得できるか? */ CPPUNIT_ASSERT(15 == prop.size()); /* (2) 新たに追加後のプロパティの数が正しく取得できるか? */ string key = "key"; string newValue = "new-value"; prop.setProperty(key, newValue); CPPUNIT_ASSERT(16 == prop.size()); } /*! * @brief findNode()メソッドのテスト * * <ul> * <li>キーで指定したノードが正しく検索できるか?</li> * </ul> */ void test_findNode() { map<string, string> defaults; defaults["rtc.component.conf.path"] = "C:\\Program\\ Files\\OpenRTM-aist"; defaults["rtc.manager.arch"] = "i386"; defaults["rtc.manager.debug.level"] = "PARANOID"; defaults["rtc.manager.language"] = "C++"; defaults["rtc.manager.nameserver"] = "zonu.a02.aist.go.jp"; defaults["rtc.manager.opening_message"] = "Hello World"; defaults["rtc.manager.orb.name"] = "omniORB"; defaults["rtc.manager.orb.options"] = "IIOPAddrPort, -ORBendPoint, giop:tcp:"; defaults["rtc.manager.os.name"] = "FreeBSD"; defaults["rtc.manager.os.release"] = "6.1-RELEASE"; defaults["rtc.manager.subsystems"] = "Camera, Manipulator, Force Sensor"; defaults["rtc.openrtm.author"] = "Noriaki Ando"; defaults["rtc.openrtm.release"] = "aist"; defaults["rtc.openrtm.vendor"] = "AIST TaskIntelligence"; defaults["rtc.openrtm.version"] = "0.4.0"; /* mapによるデフォルト値指定でPropertiesオブジェクトを生成する */ coil::Properties prop(defaults); /* (1) 存在するノードを指定しノードを取得 */ CPPUNIT_ASSERT(prop.findNode("rtc.manager")->getProperty("arch") == "i386"); CPPUNIT_ASSERT(prop.findNode("rtc.manager")->getProperty("debug.level") == "PARANOID"); CPPUNIT_ASSERT(prop.findNode("rtc.manager") != NULL); /* (2) 存在しないノードを指定しノードを取得 */ CPPUNIT_ASSERT(prop.findNode("manager") == NULL); CPPUNIT_ASSERT(prop.findNode("rtc.MANAGER") == NULL); } /*! * @brief getNode()メソッドのテスト * * <ul> * <li>キーで指定したノードが正しく取得できるか?</li> * </ul> */ void test_getNode() { map<string, string> defaults; defaults["rtc.component.conf.path"] = "C:\\Program\\ Files\\OpenRTM-aist"; defaults["rtc.manager.arch"] = "i386"; defaults["rtc.manager.debug.level"] = "PARANOID"; defaults["rtc.manager.language"] = "C++"; defaults["rtc.manager.nameserver"] = "zonu.a02.aist.go.jp"; defaults["rtc.manager.opening_message"] = "Hello World"; defaults["rtc.manager.orb.name"] = "omniORB"; defaults["rtc.manager.orb.options"] = "IIOPAddrPort, -ORBendPoint, giop:tcp:"; defaults["rtc.manager.os.name"] = "FreeBSD"; defaults["rtc.manager.os.release"] = "6.1-RELEASE"; defaults["rtc.manager.subsystems"] = "Camera, Manipulator, Force Sensor"; defaults["rtc.openrtm.author"] = "Noriaki Ando"; defaults["rtc.openrtm.release"] = "aist"; defaults["rtc.openrtm.vendor"] = "AIST TaskIntelligence"; defaults["rtc.openrtm.version"] = "0.4.0"; /* mapによるデフォルト値指定でPropertiesオブジェクトを生成する */ coil::Properties prop(defaults); /* (1) 既に存在するノードを取得 */ CPPUNIT_ASSERT(prop.getNode("rtc.manager").getProperty("arch") == "i386"); CPPUNIT_ASSERT(prop.getNode("rtc.manager").getProperty("debug.level") == "PARANOID"); /* (2) 存在しないノードを取得 */ std::string getval(prop.getNode("manager").getValue()); CPPUNIT_ASSERT(getval == ""); // CPPUNIT_ASSERT(prop.getNode("rtc.manager") != NULL); } /*! * @brief removeNode()メソッドのテスト * * <ul> * <li>指定したノードが正しく削除できるか?</li> * </ul> */ void test_removeNode() { map<string, string> defaults; defaults["rtc.component.conf.path"] = "C:\\Program\\ Files\\OpenRTM-aist"; defaults["rtc.manager.arch"] = "i386"; defaults["rtc.manager.debug.level"] = "PARANOID"; defaults["rtc.manager.language"] = "C++"; defaults["rtc.manager.nameserver"] = "zonu.a02.aist.go.jp"; defaults["rtc.manager.opening_message"] = "Hello World"; defaults["rtc.manager.orb.name"] = "omniORB"; defaults["rtc.manager.orb.options"] = "IIOPAddrPort, -ORBendPoint, giop:tcp:"; defaults["rtc.manager.os.name"] = "FreeBSD"; defaults["rtc.manager.os.release"] = "6.1-RELEASE"; defaults["rtc.manager.subsystems"] = "Camera, Manipulator, Force Sensor"; defaults["rtc.openrtm.author"] = "Noriaki Ando"; defaults["rtc.openrtm.release"] = "aist"; defaults["rtc.openrtm.vendor"] = "AIST TaskIntelligence"; defaults["rtc.openrtm.version"] = "0.4.0"; /* mapによるデフォルト値指定でPropertiesオブジェクトを生成する */ coil::Properties prop(defaults); /* "rtc.manager"のように指定した場合、削除できない。 */ CPPUNIT_ASSERT(prop.removeNode("rtc.manager") == NULL); /* "rtc.manager"ノードの削除 */ CPPUNIT_ASSERT(prop.getNode("rtc").removeNode("manager") != NULL); /* (1) 削除したノードを検索 */ CPPUNIT_ASSERT(prop.findNode("rtc.manager") == NULL); /* (2) 削除したノードを取得 */ std::string getval0(prop.getNode("rtc.manager").getValue()); CPPUNIT_ASSERT(getval0 == ""); } /*! * @brief hasKey()メソッドのテスト * * <ul> * <li>子ノードにkeyがあるかどうか?</li> * </ul> */ void test_hasKey() { map<string, string> defaults; defaults["rtc.component.conf.path"] = "C:\\Program\\ Files\\OpenRTM-aist"; defaults["rtc.manager.arch"] = "i386"; defaults["rtc.manager.debug.level"] = "PARANOID"; defaults["rtc.manager.language"] = "C++"; defaults["rtc.manager.nameserver"] = "zonu.a02.aist.go.jp"; defaults["rtc.manager.opening_message"] = "Hello World"; defaults["rtc.manager.orb.name"] = "omniORB"; defaults["rtc.manager.orb.options"] = "IIOPAddrPort, -ORBendPoint, giop:tcp:"; defaults["rtc.manager.os.name"] = "FreeBSD"; defaults["rtc.manager.os.release"] = "6.1-RELEASE"; defaults["rtc.manager.subsystems"] = "Camera, Manipulator, Force Sensor"; defaults["rtc.openrtm.author"] = "Noriaki Ando"; defaults["rtc.openrtm.release"] = "aist"; defaults["rtc.openrtm.vendor"] = "AIST TaskIntelligence"; defaults["rtc.openrtm.version"] = "0.4.0"; /* mapによるデフォルト値指定でPropertiesオブジェクトを生成する */ coil::Properties prop(defaults); /* (1) 存在するキーでテスト */ CPPUNIT_ASSERT(prop.hasKey("rtc") != NULL); /* (2) 存在しないキーでテスト */ CPPUNIT_ASSERT(prop.hasKey("hoge") == NULL); /* (3) 存在するキーでテスト */ CPPUNIT_ASSERT(prop.getNode("rtc").hasKey("manager") != NULL); /* (4) 存在しないキーでテスト */ CPPUNIT_ASSERT(prop.getNode("rtc").hasKey("hoge") == NULL); } /*! * @brief clear()メソッドのテスト * * <ul> * <li>子ノードがすべて削除されるかどうか?</li> * </ul> */ void test_clear() { map<string, string> defaults; defaults["rtc.component.conf.path"] = "C:\\Program\\ Files\\OpenRTM-aist"; defaults["rtc.manager.arch"] = "i386"; defaults["rtc.manager.debug.level"] = "PARANOID"; defaults["rtc.manager.language"] = "C++"; defaults["rtc.manager.nameserver"] = "zonu.a02.aist.go.jp"; defaults["rtc.manager.opening_message"] = "Hello World"; defaults["rtc.manager.orb.name"] = "omniORB"; defaults["rtc.manager.orb.options"] = "IIOPAddrPort, -ORBendPoint, giop:tcp:"; defaults["rtc.manager.os.name"] = "FreeBSD"; defaults["rtc.manager.os.release"] = "6.1-RELEASE"; defaults["rtc.manager.subsystems"] = "Camera, Manipulator, Force Sensor"; defaults["rtc.openrtm.author"] = "Noriaki Ando"; defaults["rtc.openrtm.release"] = "aist"; defaults["rtc.openrtm.vendor"] = "AIST TaskIntelligence"; defaults["rtc.openrtm.version"] = "0.4.0"; /* mapによるデフォルト値指定でPropertiesオブジェクトを生成する */ coil::Properties prop(defaults); prop.getNode("rtc.manager.os").clear(); /* (1) "rtc.manager.os"以下のノードが削除されているか? */ CPPUNIT_ASSERT(prop.findNode("rtc.manager.os.name") == NULL); CPPUNIT_ASSERT(prop.findNode("rtc.manager.os.release") == NULL); /* (2) "rtc.manager.os"以外のノードは削除されていないか? */ CPPUNIT_ASSERT(prop.findNode("rtc.manager.arch") != NULL); CPPUNIT_ASSERT(prop.findNode("rtc.manager.orb") != NULL); /* (3) すべてのノードが削除されているか? */ prop.clear(); CPPUNIT_ASSERT(prop.findNode("rtc.manager.os") == NULL); CPPUNIT_ASSERT(prop.findNode("rtc.manager") == NULL); CPPUNIT_ASSERT(prop.findNode("rtc.openrtm") == NULL); CPPUNIT_ASSERT(prop.findNode("rtc.component") == NULL); CPPUNIT_ASSERT(prop.findNode("rtc") == NULL); } /*! * @brief createNode()のテスト * * <ul> * * <li>デフォルト値が設定されており、かつ通常の値も設定されている場 * 合に、当該キー名の新規ノード作成が、意図どおり失敗するか?</li> * * <li>デフォルト値が設定されているが、通常の値は設定されていない場 * 合に、当該キー名の新規ノード作成が、意図どおり失敗するか?</li> * * <li>デフォルト値は設定されていないが、通常の値は設定されている場 * 合に、当該キー名の新規ノード作成が、意図どおり失敗するか?</li> * * <li>デフォルト値、通常の値のいずれも設定されていない場合に、新規 * ノード作成が成功するか?</li> * * </ul> */ void test_createNode() { coil::Properties prop; string key1 = "key1"; string key1DefaultValue = "key1-default-value"; string key1Value = "key1-value"; prop.setDefault(key1, key1DefaultValue); prop.setProperty(key1, key1Value); string key2 = "key2"; string key2DefaultValue = "key2-default-value"; prop.setDefault(key2, key2DefaultValue); string key3 = "key3"; string key3Value = "key3-value"; prop.setProperty(key3, key3Value); /* // (1) デフォルト値が設定されており、かつ通常の値も設定されている // 場合に、当該キー名の新規ノード作成が、意図どおり失敗するか? */ CPPUNIT_ASSERT(! prop.createNode(key1.c_str())); /* // (2) デフォルト値が設定されているが、通常の値は設定されていない // 場合に、当該キー名の新規ノード作成が、意図どおり失敗するか? */ CPPUNIT_ASSERT(! prop.createNode(key2.c_str())); /* // (3) デフォルト値は設定されていないが、通常の値は設定されている // 場合に、当該キー名の新規ノード作成が、意図どおり失敗するか? */ CPPUNIT_ASSERT(! prop.createNode(key3.c_str())); /* // (4) デフォルト値、通常の値のいずれも設定されていない場合に、新 // 規ノード作成が成功するか? */ string keyNonExist = "key-non-exist"; CPPUNIT_ASSERT(prop.createNode(keyNonExist.c_str())); } /*! * @brief <<演算子のテスト * * <ul> * * <li>デフォルト値は、入力されないことを確認する
170  */
171  string key0("manager");
172  coil::Properties prop0(key0.c_str(),value.c_str());
173  string retkey(prop0.getName());
174  CPPUNIT_ASSERT_EQUAL(key0, retkey);
175  string retval(prop0.getValue());
176  CPPUNIT_ASSERT_EQUAL(value, retval);
177 
178 
179  /*
180  // (2) キーを階層化してテスト */ string key1("manager.test.test"); coil::Properties prop1(key1.c_str(),value.c_str()); retkey = prop1.getName(); CPPUNIT_ASSERT_EQUAL(key1, retkey); retval = prop1.getValue(); CPPUNIT_ASSERT_EQUAL(value, retval); } /*! * @brief Properties(std::map<string, string>&)コンストラクタのテスト * * <ul> * <li>std::mapで指定したデフォルト値が、デフォルト値として正しく取 * 得されるか?</li> * </ul> */ void test_ctor_map() { map<string, string> defaults; defaults["rtc.component.conf.path"] = "C:\\Program\\ Files\\OpenRTM-aist"; defaults["rtc.manager.arch"] = "i386"; defaults["rtc.manager.debug.level"] = "PARANOID"; defaults["rtc.manager.language"] = "C++"; defaults["rtc.manager.nameserver"] = "zonu.a02.aist.go.jp"; defaults["rtc.manager.opening_message"] = "Hello World"; defaults["rtc.manager.orb.name"] = "omniORB"; defaults["rtc.manager.orb.options"] = "IIOPAddrPort, -ORBendPoint, giop:tcp:"; defaults["rtc.manager.os.name"] = "FreeBSD"; defaults["rtc.manager.os.release"] = "6.1-RELEASE"; defaults["rtc.manager.subsystems"] = "Camera, Manipulator, Force Sensor"; defaults["rtc.openrtm.author"] = "Noriaki Ando"; defaults["rtc.openrtm.release"] = "aist"; defaults["rtc.openrtm.vendor"] = "AIST TaskIntelligence"; defaults["rtc.openrtm.version"] = "0.4.0"; /* mapによるデフォルト値指定でPropertiesオブジェクトを生成する */ coil::Properties prop(defaults); /* 各プロパティのデフォルト値および通常値がいずれも、コンストラク */ /* タで指定した値で取得されることを確認する */ map<string, string>::iterator it; it = defaults.begin(); for (; it != defaults.end(); ++it) { string key = it->first; string value = it->second; CPPUNIT_ASSERT_EQUAL(value, prop.getDefault(key)); CPPUNIT_ASSERT_EQUAL(value, prop.getProperty(key)); } } void test_Properties_char() { const char* defaults[] = { "rtc.component.conf.path", "C:\\Program\\ Files\\OpenRTM-aist", "rtc.manager.arch", "i386", "rtc.manager.debug.level", "PARANOID", "rtc.manager.language", "C++", "rtc.manager.nameserver", "zonu.a02.aist.go.jp", "rtc.manager.opening_message", "Hello World", "rtc.manager.orb.name", "omniORB", "rtc.manager.orb.options", "IIOPAddrPort, -ORBendPoint, giop:tcp:", "rtc.manager.os.name", "FreeBSD", "rtc.manager.os.release", "6.1-RELEASE", "rtc.manager.subsystems", "Camera, Manipulator, Force Sensor", "rtc.openrtm.author", "Noriaki Ando", "rtc.openrtm.release", "aist", "rtc.openrtm.vendor", "AIST TaskIntelligence", "rtc.openrtm.version", "0.4.0", "" }; coil::Properties prop(defaults); /* // 各プロパティのデフォルト値および通常値がいずれも、コンストラクタで指定した値で取得されることを確認する */ for (int i = 0; defaults[i] != ""; i += 2) { string key = defaults[i]; string value = defaults[i + 1]; CPPUNIT_ASSERT_EQUAL(value, prop.getDefault(key)); CPPUNIT_ASSERT_EQUAL(value, prop.getProperty(key)); } } /*! * @brief Properties(const Properties& prop)コピーコンストラクタのテスト * * <ul> * <li>propで指定したデフォルト値が、コピーオブジェクトから正しく取得されるか?</li> * </ul> */ void test_Properties_copy() { map<string, string> defaults; defaults["rtc.component.conf.path"] = "C:\\Program\\ Files\\OpenRTM-aist"; defaults["rtc.manager.arch"] = "i386"; defaults["rtc.manager.debug.level"] = "PARANOID"; defaults["rtc.manager.language"] = "C++"; defaults["rtc.manager.nameserver"] = "zonu.a02.aist.go.jp"; defaults["rtc.manager.opening_message"] = "Hello World"; defaults["rtc.manager.orb.name"] = "omniORB"; defaults["rtc.manager.orb.options"] = "IIOPAddrPort, -ORBendPoint, giop:tcp:"; defaults["rtc.manager.os.name"] = "FreeBSD"; defaults["rtc.manager.os.release"] = "6.1-RELEASE"; defaults["rtc.manager.subsystems"] = "Camera, Manipulator, Force Sensor"; defaults["rtc.openrtm.author"] = "Noriaki Ando"; defaults["rtc.openrtm.release"] = "aist"; defaults["rtc.openrtm.vendor"] = "AIST TaskIntelligence"; defaults["rtc.openrtm.version"] = "0.4.0"; /* mapによるデフォルト値指定でPropertiesオブジェクトを生成する */ coil::Properties prop(defaults); coil::Properties cprop(prop); /* 各プロパティのデフォルト値および通常値がいずれも、コンストラクタで指定した値で取得されることを確認する */ for (map<string, string>::iterator it = defaults.begin(); it != defaults.end(); it++) { string key = it->first; string value = it->second; CPPUNIT_ASSERT_EQUAL(value, cprop.getDefault(key)); CPPUNIT_ASSERT_EQUAL(value, cprop.getProperty(key)); } } /*! * @brief ~Properties(void)デストラクタのテスト * * <ul> * <li>デストラクタによりオブジェクトからデータが正しく削除されるか?</li> * </ul> */ void test_Properties_destructor() { map<string, string> defaults; defaults["rtc.component.conf.path"] = "C:\\Program\\ Files\\OpenRTM-aist"; defaults["rtc.manager.arch"] = "i386"; defaults["rtc.manager.debug.level"] = "PARANOID"; defaults["rtc.manager.language"] = "C++"; defaults["rtc.manager.nameserver"] = "zonu.a02.aist.go.jp"; defaults["rtc.manager.opening_message"] = "Hello World"; defaults["rtc.manager.orb.name"] = "omniORB"; defaults["rtc.manager.orb.options"] = "IIOPAddrPort, -ORBendPoint, giop:tcp:"; defaults["rtc.manager.os.name"] = "FreeBSD"; defaults["rtc.manager.os.release"] = "6.1-RELEASE"; defaults["rtc.manager.subsystems"] = "Camera, Manipulator, Force Sensor"; defaults["rtc.openrtm.author"] = "Noriaki Ando"; defaults["rtc.openrtm.release"] = "aist"; defaults["rtc.openrtm.vendor"] = "AIST TaskIntelligence"; defaults["rtc.openrtm.version"] = "0.4.0"; /* mapによるデフォルト値指定でPropertiesオブジェクトを生成する */ coil::Properties prop(defaults); std::vector<coil::Properties*> leaf0(prop.getNode("rtc").getLeaf()); CPPUNIT_ASSERT(leaf0.size() == 3); /* rtc.managerノードを削除する */ delete &prop.getNode("rtc.manager"); /* rtcノードからmanagerが削除されている事を確認する。*/ std::vector<coil::Properties*> leaf1(prop.getNode("rtc").getLeaf()); CPPUNIT_ASSERT(leaf1.size() == 2); std::string getval(prop.getNode("rtc.manager").getValue()); CPPUNIT_ASSERT("" == getval); } /*! * @brief =演算子(代入演算子)のテスト * * <ul> * <li>デフォルト値、通常値のいずれも設定されている場合に、それら両 * 方が正しく代入されるか?</li> * <li>デフォルト値のみ設定されており、通常値が設定されていない場合 * に、それら両方が正しく代入されるか?</li> * <li>デフォルト値が設定されていないが、通常値が設定されている場合 * に、それら両方が正しく代入されるか?</li> * </ul> */ void test_substitute() { /* 代入元となるPropertiesを作成する */ coil::Properties propSrc; /* (1) デフォルト値、通常値のいずれも設定されている場合 */ string key1 = "key1"; string key1DefaultValue = "key1-default-value"; string key1Value = "key1-value"; propSrc.setDefault(key1, key1DefaultValue); propSrc.setProperty(key1, key1Value); /* (2) デフォルト値のみ設定されており、通常値が設定されていない場合 */ string key2 = "key2"; string key2DefaultValue = "key2-default-value"; propSrc.setDefault(key2, key2DefaultValue); /* (3) デフォルト値が設定されていないが、通常値が設定されている場合 */ string key3 = "key3"; string key3Value = "key3-value"; propSrc.setProperty(key3, key3Value); /* 代入を行い、それぞれの場合で、正しく代入されたことを確認する */ coil::Properties prop; prop = propSrc; CPPUNIT_ASSERT_EQUAL(key1DefaultValue, prop.getDefault(key1)); CPPUNIT_ASSERT_EQUAL(key1Value, prop.getProperty(key1)); CPPUNIT_ASSERT_EQUAL(key2DefaultValue, prop.getDefault(key2)); CPPUNIT_ASSERT_EQUAL(key2DefaultValue, prop.getProperty(key2)); CPPUNIT_ASSERT_EQUAL(EMPTY_STRING, prop.getDefault(key3)); CPPUNIT_ASSERT_EQUAL(key3Value, prop.getProperty(key3)); } /*! * @brief getProperty()メソッドのテスト * * <ul> * <li>デフォルト値が設定されており、かつ通常の値も設定されている場 * 合に、プロパティ値として正しく通常の値が取得されるか?</li> * <li>デフォルト値が設定されているが、通常の値は設定されていない場 * 合に、プロパティ値として正しくデフォルト値が取得されるか?</li> * <li>デフォルト値は設定されていないが、通常の値は設定されている場 * 合に、プロパティ値として正しく通常の値が取得されるか?</li> * <li>デフォルト値、通常の値のいずれも設定されていない場合に、プロ * パティ値として正しく空文字列が取得されるか?</li> * </ul> */ void test_getProperty() { coil::Properties prop; prop.setDefault("property_1", "default_1"); prop.setProperty("property_1", "value_1"); prop.setDefault("property_2", "default_2"); prop.setProperty("property_3", "value_3"); /* (1) デフォルト値が設定されており、かつ通常の値も設定されている */ /* 場合に、プロパティ値として正しく通常の値が取得されるか? */ string expected_1 = "value_1"; CPPUNIT_ASSERT_EQUAL(expected_1, prop.getProperty("property_1")); /* (2) デフォルト値が設定されているが、通常の値は設定されていない */ /*/ 場合に、プロパティ値として正しくデフォルト値が取得されるか? */ string expected_2 = "default_2"; CPPUNIT_ASSERT_EQUAL(expected_2, prop.getProperty("property_2")); /* (3) デフォルト値は設定されていないが、通常の値は設定されている */ /* 場合に、プロパティ値として正しく通常の値が取得されるか? */ string expected_3 = "value_3"; CPPUNIT_ASSERT_EQUAL(expected_3, prop.getProperty("property_3")); /* (4) デフォルト値、通常の値のいずれも設定されていない場合に、プ */ /* ロパティ値として正しく空文字列が取得されるか? */ string expected_4 = ""; CPPUNIT_ASSERT_EQUAL(expected_4, prop.getProperty("property_4")); } /*! * @brief getDefault()のテスト * * <ul> * * <li>デフォルト値が設定されており、かつ通常の値も設定されている場 * 合に、正しく設定されているデフォルト値を取得できるか?</li> * * <li>デフォルト値が設定されているが、通常の値は設定されていない場 * 合に、正しく設定されているデフォルト値を取得できるか?</li> * * <li>デフォルト値は設定されていないが、通常の値は設定されている場 * 合に、デフォルト値として空文字列が取得されるか?</li> * * <li>デフォルト値、通常の値のいずれも設定されていない場合に、デフォ * ルト値として空文字列が取得されるか?</li> * * </ul> */ void test_getDefault() { coil::Properties prop; string key1 = "key1"; string key1DefaultValue = "key1-default-value"; string key1Value = "key1-value"; prop.setDefault(key1, key1DefaultValue); prop.setProperty(key1, key1Value); string key2 = "key2"; string key2DefaultValue = "key2-default-value"; prop.setDefault(key2, key2DefaultValue); string key3 = "key3"; string key3Value = "key3-value"; prop.setProperty(key3, key3Value); /* (1) デフォルト値が設定されており、かつ通常の値も設定されている */ /* 場合に、正しく設定されているデフォルト値を取得できるか? */ CPPUNIT_ASSERT_EQUAL(key1DefaultValue, prop.getDefault(key1)); /* (2) デフォルト値が設定されているが、通常の値は設定されていない */ /* 場合に、正しく設定されているデフォルト値を取得できるか? */ CPPUNIT_ASSERT_EQUAL(key2DefaultValue, prop.getDefault(key2)); /* (3) デフォルト値は設定されていないが、通常の値は設定されている */ /* 場合に、デフォルト値として空文字列が取得されるか? */ CPPUNIT_ASSERT_EQUAL(EMPTY_STRING, prop.getDefault(key3)); /* (4) デフォルト値、通常の値のいずれも設定されていない場合に、デ */ /* フォルト値として空文字列が取得されるか? */ string keyNonExist = "key-non-exist"; CPPUNIT_ASSERT_EQUAL(EMPTY_STRING, prop.getDefault(keyNonExist)); } /*! * @brief setProperty()メソッドのテスト * * <ul> * <li>設定時に指定した値が、正しく設定されるか?</li> * <li>設定時の戻り値として、元の設定値が正しく取得されるか?</li> * </ul> */ void test_setProperty() { string key = "key"; string oldValue = "old-value"; string newValue = "new-value"; coil::Properties prop; prop.setProperty(key, oldValue); /* (1) 設定時に指定した値が、正しく設定されるか? */ CPPUNIT_ASSERT_EQUAL(oldValue, prop.getProperty(key)); /* (2) 設定時の戻り値として、元の設定値が正しく取得されるか? */ CPPUNIT_ASSERT_EQUAL(oldValue, prop.setProperty(key, newValue)); /* (1) 設定時に指定した値が、正しく設定されるか?(その2) */ CPPUNIT_ASSERT_EQUAL(newValue, prop.getProperty(key)); } /*! * @brief list()メソッドのテスト * * <ul> * * <li>設定されているプロパティ値が、正しく出力されるか?</li> * * <li>\(バックスラッシュ)を含む値が、正しくエスケープ処理されて * 出力されるか?</li> * * </ul> */ void test_list() { coil::Properties prop; prop.setProperty("rtc.component.conf.path", "C:\\Program\\ Files\\OpenRTM-aist"); prop.setProperty("rtc.manager.arch", "i386"); prop.setProperty("rtc.manager.debug.level", "PARANOID"); prop.setProperty("rtc.manager.language", "C++"); prop.setProperty("rtc.manager.nameserver", "zonu.a02.aist.go.jp"); prop.setProperty("rtc.manager.opening_message", "Hello World"); prop.setProperty("rtc.manager.orb.name", "omniORB"); prop.setProperty("rtc.manager.orb.options", "IIOPAddrPort, -ORBendPoint, giop:tcp:"); prop.setProperty("rtc.manager.os.name", "FreeBSD"); prop.setProperty("rtc.manager.os.release", "6.1-RELEASE"); prop.setProperty("rtc.manager.subsystems", "Camera, Manipulator, Force Sensor"); prop.setProperty("rtc.openrtm.author", "Noriaki Ando"); prop.setProperty("rtc.openrtm.release", "aist"); prop.setProperty("rtc.openrtm.vendor", "AIST TaskIntelligence"); prop.setProperty("rtc.openrtm.version", "0.4.0"); std::ofstream outFile("listed.conf"); prop.list(outFile); outFile.close(); vector<string> expectedLines; expectedLines.push_back("rtc.component.conf.path: C:\\\\Program\\\\ Files\\\\OpenRTM-aist"); expectedLines.push_back("rtc.manager.arch: i386"); expectedLines.push_back("rtc.manager.debug.level: PARANOID"); expectedLines.push_back("rtc.manager.language: C++"); expectedLines.push_back("rtc.manager.nameserver: zonu.a02.aist.go.jp"); expectedLines.push_back("rtc.manager.opening_message: Hello World"); expectedLines.push_back("rtc.manager.orb.name: omniORB"); expectedLines.push_back("rtc.manager.orb.options: IIOPAddrPort, -ORBendPoint, giop:tcp:"); expectedLines.push_back("rtc.manager.os.name: FreeBSD"); expectedLines.push_back("rtc.manager.os.release: 6.1-RELEASE"); expectedLines.push_back("rtc.manager.subsystems: Camera, Manipulator, Force Sensor"); expectedLines.push_back("rtc.openrtm.author: Noriaki Ando"); expectedLines.push_back("rtc.openrtm.release: aist"); expectedLines.push_back("rtc.openrtm.vendor: AIST TaskIntelligence"); expectedLines.push_back("rtc.openrtm.version: 0.4.0"); vector<string> storedLines; std::ifstream inFile("listed.conf"); string str; while (getline(inFile, str)) { storedLines.push_back(str); } inFile.close(); /* ファイルに書き込まれた内容と期待値を比較する */ sort(expectedLines.begin(), expectedLines.end()); sort(storedLines.begin(), storedLines.end()); CPPUNIT_ASSERT_EQUAL(expectedLines.size(), storedLines.size()); for (vector<string>::size_type i = 0; i < expectedLines.size(); i++) { CPPUNIT_ASSERT_EQUAL(expectedLines[i], storedLines[i]); } } /*! * @brief load()メソッドのテスト * <ul> * * <li>プロパティリストをファイルからPropertiesオブジェクトへ正しく * 読み込めるか?</li> * * </ul> */ void test_load() { /* プロパティリストをファイルからPropertiesオブジェクトへ読み込む */ coil::Properties prop; std::ifstream ifl("defaults.conf"); prop.load(ifl); ifl.close(); /* 期待値と比較して、正しく読み込まれたことを確認する */ map<string, string>::iterator expected; for (expected = DEFAULTS_CONF.begin(); expected != DEFAULTS_CONF.end(); expected++) { string key = expected->first; string value = expected->second; CPPUNIT_ASSERT_EQUAL(value, prop.getProperty(key)); } } /*! * @brief store()メソッドのテスト * * <ul> * * <li>設定されているプロパティ値が、正しく出力されるか?</li> * * <li>指定したヘッダ文字列が、正しく出力されるか?</li> * * <li>\(バックスラッシュ)を含む値が、正しくエスケープ処理されて * 出力されるか?</li> * * </ul> */ void test_store() { /* テスト用のプロパティを設定する */ coil::Properties prop; prop.setProperty("rtc.component.conf.path", "C:\\Program\\ Files\\OpenRTM-aist"); prop.setProperty("rtc.manager.arch", "i386"); prop.setProperty("rtc.manager.debug.level", "PARANOID"); prop.setProperty("rtc.manager.language", "C++"); prop.setProperty("rtc.manager.nameserver", "zonu.a02.aist.go.jp"); prop.setProperty("rtc.manager.opening_message", "Hello World"); prop.setProperty("rtc.manager.orb.name", "omniORB"); prop.setProperty("rtc.manager.orb.options", "IIOPAddrPort, -ORBendPoint, giop:tcp:"); prop.setProperty("rtc.manager.os.name", "FreeBSD"); prop.setProperty("rtc.manager.os.release", "6.1-RELEASE"); prop.setProperty("rtc.manager.subsystems", "Camera, Manipulator, Force Sensor"); prop.setProperty("rtc.openrtm.author", "Noriaki Ando"); prop.setProperty("rtc.openrtm.release", "aist"); prop.setProperty("rtc.openrtm.vendor", "AIST TaskIntelligence"); prop.setProperty("rtc.openrtm.version", "0.4.0"); prop.setProperty("hello", "\tHello\t"); std::ofstream outFile("stored.conf"); prop.store(outFile, "stored data"); outFile.close(); /* 比較のための期待値を準備する */ vector<string> expectedLines; expectedLines.push_back("# stored data"); expectedLines.push_back("rtc.component.conf.path: C:\\\\Program\\\\ Files\\\\OpenRTM-aist"); expectedLines.push_back("rtc.manager.arch: i386"); expectedLines.push_back("rtc.manager.debug.level: PARANOID"); expectedLines.push_back("rtc.manager.language: C++"); expectedLines.push_back("rtc.manager.nameserver: zonu.a02.aist.go.jp"); expectedLines.push_back("rtc.manager.opening_message: Hello World"); expectedLines.push_back("rtc.manager.orb.name: omniORB"); expectedLines.push_back("rtc.manager.orb.options: IIOPAddrPort, -ORBendPoint, giop:tcp:"); expectedLines.push_back("rtc.manager.os.name: FreeBSD"); expectedLines.push_back("rtc.manager.os.release: 6.1-RELEASE"); expectedLines.push_back("rtc.manager.subsystems: Camera, Manipulator, Force Sensor"); expectedLines.push_back("rtc.openrtm.author: Noriaki Ando"); expectedLines.push_back("rtc.openrtm.release: aist"); expectedLines.push_back("rtc.openrtm.vendor: AIST TaskIntelligence"); expectedLines.push_back("rtc.openrtm.version: 0.4.0"); expectedLines.push_back("hello: \\tHello\\t"); /* 出力されたファイルの中身を1行づつ読み込む */ vector<string> storedLines; std::ifstream inFile("stored.conf"); string str; while (getline(inFile, str)) { storedLines.push_back(str); } inFile.close(); /* ファイルに書き込まれた内容と期待値を比較する */ sort(expectedLines.begin(), expectedLines.end()); sort(storedLines.begin(), storedLines.end()); CPPUNIT_ASSERT_EQUAL(expectedLines.size(), storedLines.size()); for (vector<string>::size_type i = 0; i < expectedLines.size(); i++) { CPPUNIT_ASSERT_EQUAL(expectedLines[i], storedLines[i]); } } /*! * @brief propertyNames()メソッドのテスト * * <ul> * * <li>通常のプロパティ値とデフォルト値の両方が設定されているプロパ * ティについて、キー名が取得されるか?</li> * * <li>通常のプロパティ値のみが設定されているプロパティについて、キー * 名が取得されるか?</li> * * <li>デフォルト値のみが設定されているプロパティについて、キー名が * 取得されるか?</li> * * </ul> */ void test_propertyNames() { coil::Properties prop; /* (1) 通常のプロパティ値とデフォルト値の両方を設定する */ prop.setProperty("property_01", "value_01"); prop.setDefault("property_01", "default_01"); /* (2) 通常のプロパティ値のみを設定する */ prop.setProperty("property_02", "value_02"); /* (3) デフォルト値のみを設定する */ prop.setDefault("property_03", "default_03"); /* (1),(2),(3)いずれの場合についてもキー名が取得されることを確認する */ vector<string> keys = prop.propertyNames(); CPPUNIT_ASSERT_EQUAL(3, (int) keys.size()); CPPUNIT_ASSERT(find(keys.begin(), keys.end(), "property_01") != keys.end()); CPPUNIT_ASSERT(find(keys.begin(), keys.end(), "property_02") != keys.end()); CPPUNIT_ASSERT(find(keys.begin(), keys.end(), "property_03") != keys.end()); } /*! * @brief getName(void)メソッドのテスト * * <ul> * <li>コンストラクタで指定したプロパティの名称が正しく取得されるか?</li> * </ul> */ void test_getName() { string value("test"); /* (1) キーを階層化していない場合 */ /* key,valueによるデフォルト値指定でPropertiesオブジェクトを生成する */ string key0("manager"); coil::Properties prop0(key0.c_str(),value.c_str()); string retkey(prop0.getName()); CPPUNIT_ASSERT_EQUAL(key0, retkey); /* (1) キーを階層化した場合 */ /* key,valueによるデフォルト値指定でPropertiesオブジェクトを生成する */ string key1("manager.hoge"); coil::Properties prop1(key1.c_str(),value.c_str()); retkey= prop1.getName(); CPPUNIT_ASSERT_EQUAL(key1, retkey); } /*! * @brief getValue(void)メソッドのテスト * * <ul> * <li>コンストラクタで指定したプロパティの値が正しく取得されるか?</li> * </ul> */ void test_getValue() { /* key,valueによるデフォルト値指定でPropertiesオブジェクトを生成する */ string key("manager"); string value("test.test"); coil::Properties prop(key.c_str(),value.c_str()); /* コンストラクタで指定したプロパティの値が取得されることを確認する */ string retval(prop.getValue()); CPPUNIT_ASSERT_EQUAL(value, retval); } /*! * @brief getDefaultValue(void)メソッドのテスト * * <ul> * <li>setDefaultで指定したプロパティの値が正しく取得されるか?</li> * </ul> */ void test_getDefaultValue() { coil::Properties prop; string key("property_1"); string value("default_1"); /* デフォルト値を設定する */ prop.setDefault(key.c_str(), value.c_str()); /* デフォルト値を取得する */ string retval(prop.getNode(key.c_str()).getDefaultValue()); CPPUNIT_ASSERT_EQUAL(value, retval); } /*! * @brief getLeaf(void)メソッドのテスト * * <ul> * <li>getLeafで子要素が正しく取得されるか?</li> * </ul> */ void test_getLeaf() { map<string, string> defaults; defaults["rtc.component.conf.path"] = "C:\\Program\\ Files\\OpenRTM-aist"; defaults["rtc.manager.arch"] = "i386"; defaults["rtc.manager.debug.level"] = "PARANOID"; defaults["rtc.manager.language"] = "C++"; defaults["rtc.manager.nameserver"] = "zonu.a02.aist.go.jp"; defaults["rtc.manager.opening_message"] = "Hello World"; defaults["rtc.manager.orb.name"] = "omniORB"; defaults["rtc.manager.orb.options"] = "IIOPAddrPort, -ORBendPoint, giop:tcp:"; defaults["rtc.manager.os.name"] = "FreeBSD"; defaults["rtc.manager.os.release"] = "6.1-RELEASE"; defaults["rtc.manager.subsystems"] = "Camera, Manipulator, Force Sensor"; defaults["rtc.openrtm.author"] = "Noriaki Ando"; defaults["rtc.openrtm.release"] = "aist"; defaults["rtc.openrtm.vendor"] = "AIST TaskIntelligence"; defaults["rtc.openrtm.version"] = "0.4.0"; /* mapによるデフォルト値指定でPropertiesオブジェクトを生成する */ coil::Properties prop(defaults); /* getLeaf()で子要素を取得 */ std::vector<coil::Properties*> leaf(prop.getNode("rtc").getLeaf()); CPPUNIT_ASSERT(leaf[1]->getProperty("arch") == "i386"); CPPUNIT_ASSERT(leaf[1]->getProperty("debug.level") == "PARANOID"); } /*! * @brief getRoot(void)メソッドのテスト * * <ul> * <li>getRootでルート要素が正しく取得されるか?</li> * </ul> */ void test_getRoot() { map<string, string> defaults; defaults["rtc.component.conf.path"] = "C:\\Program\\ Files\\OpenRTM-aist"; defaults["rtc.manager.arch"] = "i386"; defaults["rtc.manager.debug.level"] = "PARANOID"; defaults["rtc.manager.language"] = "C++"; defaults["rtc.manager.nameserver"] = "zonu.a02.aist.go.jp"; defaults["rtc.manager.opening_message"] = "Hello World"; defaults["rtc.manager.orb.name"] = "omniORB"; defaults["rtc.manager.orb.options"] = "IIOPAddrPort, -ORBendPoint, giop:tcp:"; defaults["rtc.manager.os.name"] = "FreeBSD"; defaults["rtc.manager.os.release"] = "6.1-RELEASE"; defaults["rtc.manager.subsystems"] = "Camera, Manipulator, Force Sensor"; defaults["rtc.openrtm.author"] = "Noriaki Ando"; defaults["rtc.openrtm.release"] = "aist"; defaults["rtc.openrtm.vendor"] = "AIST TaskIntelligence"; defaults["rtc.openrtm.version"] = "0.4.0"; /* mapによるデフォルト値指定でPropertiesオブジェクトを生成する */ coil::Properties prop(defaults); /* getLeaf()でルート要素を取得 */ const coil::Properties* root(prop.getNode("rtc.manager.os").getRoot()); CPPUNIT_ASSERT(root->getProperty("arch") == "i386"); CPPUNIT_ASSERT(root->getProperty("debug.level") == "PARANOID"); } /*! * @brief operator[]()メソッドのテスト * * <ul> * <li>指定されたキーを持つプロパティを、プロパティリストから探せるか?</li> * </ul> */ void test_operator() { map<string, string> defaults; defaults["rtc.component.conf.path"] = "C:\\Program\\ Files\\OpenRTM-aist"; defaults["rtc.manager.arch"] = "i386"; defaults["rtc.manager.debug.level"] = "PARANOID"; defaults["rtc.manager.language"] = "C++"; defaults["rtc.manager.nameserver"] = "zonu.a02.aist.go.jp"; defaults["rtc.manager.opening_message"] = "Hello World"; defaults["rtc.manager.orb.name"] = "omniORB"; defaults["rtc.manager.orb.options"] = "IIOPAddrPort, -ORBendPoint, giop:tcp:"; defaults["rtc.manager.os.name"] = "FreeBSD"; defaults["rtc.manager.os.release"] = "6.1-RELEASE"; defaults["rtc.manager.subsystems"] = "Camera, Manipulator, Force Sensor"; defaults["rtc.openrtm.author"] = "Noriaki Ando"; defaults["rtc.openrtm.release"] = "aist"; defaults["rtc.openrtm.vendor"] = "AIST TaskIntelligence"; defaults["rtc.openrtm.version"] = "0.4.0"; // const std::string& // Properties::operator[](const std::string& key) const // のテスト const coil::Properties prop0(defaults); const string& retval0(prop0["rtc.manager.arch"]); CPPUNIT_ASSERT(retval0 == "i386"); // std::string& // Properties::operator[](const std::string& key) // のテスト coil::Properties prop1(defaults); string retval1(prop1["rtc.manager.arch"]); CPPUNIT_ASSERT(retval1 == "i386"); } /*! * @brief setDefaults()メソッドのテスト * * <ul> * <li>デフォルト値を登録し、その値が正しく取得できるか?</li> * </ul> */ void test_setDefaults() { const char* defaults[] = { "rtc.component.conf.path", "C:\\Program\\ Files\\OpenRTM-aist", "rtc.manager.arch", "i386", "rtc.manager.debug.level", "PARANOID", "rtc.manager.language", "C++", "rtc.manager.nameserver", "zonu.a02.aist.go.jp", "rtc.manager.opening_message", "Hello World", "rtc.manager.orb.name", "omniORB", "rtc.manager.orb.options", "IIOPAddrPort, -ORBendPoint, giop:tcp:", "rtc.manager.os.name", "FreeBSD", "rtc.manager.os.release", "6.1-RELEASE", "rtc.manager.subsystems", "Camera, Manipulator, Force Sensor", "rtc.openrtm.author", "Noriaki Ando", "rtc.openrtm.release", "aist", "rtc.openrtm.vendor", "AIST TaskIntelligence", "rtc.openrtm.version", "0.4.0", "" }; coil::Properties prop; prop.setDefaults(defaults); /* // 各プロパティのデフォルト値がsetDefaultsで指定した値で取得されることを確認する */ for (int i = 0; defaults[i] != ""; i += 2) { string key = defaults[i]; string value = defaults[i + 1]; CPPUNIT_ASSERT_EQUAL(value, prop.getDefault(key)); } } /*! * @brief size()メソッドのテスト * * <ul> * <li>プロパティの数が正しく取得できるか?</li> * </ul> */ void test_size() { map<string, string> defaults; defaults["rtc.component.conf.path"] = "C:\\Program\\ Files\\OpenRTM-aist"; defaults["rtc.manager.arch"] = "i386"; defaults["rtc.manager.debug.level"] = "PARANOID"; defaults["rtc.manager.language"] = "C++"; defaults["rtc.manager.nameserver"] = "zonu.a02.aist.go.jp"; defaults["rtc.manager.opening_message"] = "Hello World"; defaults["rtc.manager.orb.name"] = "omniORB"; defaults["rtc.manager.orb.options"] = "IIOPAddrPort, -ORBendPoint, giop:tcp:"; defaults["rtc.manager.os.name"] = "FreeBSD"; defaults["rtc.manager.os.release"] = "6.1-RELEASE"; defaults["rtc.manager.subsystems"] = "Camera, Manipulator, Force Sensor"; defaults["rtc.openrtm.author"] = "Noriaki Ando"; defaults["rtc.openrtm.release"] = "aist"; defaults["rtc.openrtm.vendor"] = "AIST TaskIntelligence"; defaults["rtc.openrtm.version"] = "0.4.0"; coil::Properties prop(defaults); /* (1) コンストラクタ引数にて指定したプロパティの数が正しく取得できるか? */ CPPUNIT_ASSERT(15 == prop.size()); /* (2) 新たに追加後のプロパティの数が正しく取得できるか? */ string key = "key"; string newValue = "new-value"; prop.setProperty(key, newValue); CPPUNIT_ASSERT(16 == prop.size()); } /*! * @brief findNode()メソッドのテスト * * <ul> * <li>キーで指定したノードが正しく検索できるか?</li> * </ul> */ void test_findNode() { map<string, string> defaults; defaults["rtc.component.conf.path"] = "C:\\Program\\ Files\\OpenRTM-aist"; defaults["rtc.manager.arch"] = "i386"; defaults["rtc.manager.debug.level"] = "PARANOID"; defaults["rtc.manager.language"] = "C++"; defaults["rtc.manager.nameserver"] = "zonu.a02.aist.go.jp"; defaults["rtc.manager.opening_message"] = "Hello World"; defaults["rtc.manager.orb.name"] = "omniORB"; defaults["rtc.manager.orb.options"] = "IIOPAddrPort, -ORBendPoint, giop:tcp:"; defaults["rtc.manager.os.name"] = "FreeBSD"; defaults["rtc.manager.os.release"] = "6.1-RELEASE"; defaults["rtc.manager.subsystems"] = "Camera, Manipulator, Force Sensor"; defaults["rtc.openrtm.author"] = "Noriaki Ando"; defaults["rtc.openrtm.release"] = "aist"; defaults["rtc.openrtm.vendor"] = "AIST TaskIntelligence"; defaults["rtc.openrtm.version"] = "0.4.0"; /* mapによるデフォルト値指定でPropertiesオブジェクトを生成する */ coil::Properties prop(defaults); /* (1) 存在するノードを指定しノードを取得 */ CPPUNIT_ASSERT(prop.findNode("rtc.manager")->getProperty("arch") == "i386"); CPPUNIT_ASSERT(prop.findNode("rtc.manager")->getProperty("debug.level") == "PARANOID"); CPPUNIT_ASSERT(prop.findNode("rtc.manager") != NULL); /* (2) 存在しないノードを指定しノードを取得 */ CPPUNIT_ASSERT(prop.findNode("manager") == NULL); CPPUNIT_ASSERT(prop.findNode("rtc.MANAGER") == NULL); } /*! * @brief getNode()メソッドのテスト * * <ul> * <li>キーで指定したノードが正しく取得できるか?</li> * </ul> */ void test_getNode() { map<string, string> defaults; defaults["rtc.component.conf.path"] = "C:\\Program\\ Files\\OpenRTM-aist"; defaults["rtc.manager.arch"] = "i386"; defaults["rtc.manager.debug.level"] = "PARANOID"; defaults["rtc.manager.language"] = "C++"; defaults["rtc.manager.nameserver"] = "zonu.a02.aist.go.jp"; defaults["rtc.manager.opening_message"] = "Hello World"; defaults["rtc.manager.orb.name"] = "omniORB"; defaults["rtc.manager.orb.options"] = "IIOPAddrPort, -ORBendPoint, giop:tcp:"; defaults["rtc.manager.os.name"] = "FreeBSD"; defaults["rtc.manager.os.release"] = "6.1-RELEASE"; defaults["rtc.manager.subsystems"] = "Camera, Manipulator, Force Sensor"; defaults["rtc.openrtm.author"] = "Noriaki Ando"; defaults["rtc.openrtm.release"] = "aist"; defaults["rtc.openrtm.vendor"] = "AIST TaskIntelligence"; defaults["rtc.openrtm.version"] = "0.4.0"; /* mapによるデフォルト値指定でPropertiesオブジェクトを生成する */ coil::Properties prop(defaults); /* (1) 既に存在するノードを取得 */ CPPUNIT_ASSERT(prop.getNode("rtc.manager").getProperty("arch") == "i386"); CPPUNIT_ASSERT(prop.getNode("rtc.manager").getProperty("debug.level") == "PARANOID"); /* (2) 存在しないノードを取得 */ std::string getval(prop.getNode("manager").getValue()); CPPUNIT_ASSERT(getval == ""); // CPPUNIT_ASSERT(prop.getNode("rtc.manager") != NULL); } /*! * @brief removeNode()メソッドのテスト * * <ul> * <li>指定したノードが正しく削除できるか?</li> * </ul> */ void test_removeNode() { map<string, string> defaults; defaults["rtc.component.conf.path"] = "C:\\Program\\ Files\\OpenRTM-aist"; defaults["rtc.manager.arch"] = "i386"; defaults["rtc.manager.debug.level"] = "PARANOID"; defaults["rtc.manager.language"] = "C++"; defaults["rtc.manager.nameserver"] = "zonu.a02.aist.go.jp"; defaults["rtc.manager.opening_message"] = "Hello World"; defaults["rtc.manager.orb.name"] = "omniORB"; defaults["rtc.manager.orb.options"] = "IIOPAddrPort, -ORBendPoint, giop:tcp:"; defaults["rtc.manager.os.name"] = "FreeBSD"; defaults["rtc.manager.os.release"] = "6.1-RELEASE"; defaults["rtc.manager.subsystems"] = "Camera, Manipulator, Force Sensor"; defaults["rtc.openrtm.author"] = "Noriaki Ando"; defaults["rtc.openrtm.release"] = "aist"; defaults["rtc.openrtm.vendor"] = "AIST TaskIntelligence"; defaults["rtc.openrtm.version"] = "0.4.0"; /* mapによるデフォルト値指定でPropertiesオブジェクトを生成する */ coil::Properties prop(defaults); /* "rtc.manager"のように指定した場合、削除できない。 */ CPPUNIT_ASSERT(prop.removeNode("rtc.manager") == NULL); /* "rtc.manager"ノードの削除 */ CPPUNIT_ASSERT(prop.getNode("rtc").removeNode("manager") != NULL); /* (1) 削除したノードを検索 */ CPPUNIT_ASSERT(prop.findNode("rtc.manager") == NULL); /* (2) 削除したノードを取得 */ std::string getval0(prop.getNode("rtc.manager").getValue()); CPPUNIT_ASSERT(getval0 == ""); } /*! * @brief hasKey()メソッドのテスト * * <ul> * <li>子ノードにkeyがあるかどうか?</li> * </ul> */ void test_hasKey() { map<string, string> defaults; defaults["rtc.component.conf.path"] = "C:\\Program\\ Files\\OpenRTM-aist"; defaults["rtc.manager.arch"] = "i386"; defaults["rtc.manager.debug.level"] = "PARANOID"; defaults["rtc.manager.language"] = "C++"; defaults["rtc.manager.nameserver"] = "zonu.a02.aist.go.jp"; defaults["rtc.manager.opening_message"] = "Hello World"; defaults["rtc.manager.orb.name"] = "omniORB"; defaults["rtc.manager.orb.options"] = "IIOPAddrPort, -ORBendPoint, giop:tcp:"; defaults["rtc.manager.os.name"] = "FreeBSD"; defaults["rtc.manager.os.release"] = "6.1-RELEASE"; defaults["rtc.manager.subsystems"] = "Camera, Manipulator, Force Sensor"; defaults["rtc.openrtm.author"] = "Noriaki Ando"; defaults["rtc.openrtm.release"] = "aist"; defaults["rtc.openrtm.vendor"] = "AIST TaskIntelligence"; defaults["rtc.openrtm.version"] = "0.4.0"; /* mapによるデフォルト値指定でPropertiesオブジェクトを生成する */ coil::Properties prop(defaults); /* (1) 存在するキーでテスト */ CPPUNIT_ASSERT(prop.hasKey("rtc") != NULL); /* (2) 存在しないキーでテスト */ CPPUNIT_ASSERT(prop.hasKey("hoge") == NULL); /* (3) 存在するキーでテスト */ CPPUNIT_ASSERT(prop.getNode("rtc").hasKey("manager") != NULL); /* (4) 存在しないキーでテスト */ CPPUNIT_ASSERT(prop.getNode("rtc").hasKey("hoge") == NULL); } /*! * @brief clear()メソッドのテスト * * <ul> * <li>子ノードがすべて削除されるかどうか?</li> * </ul> */ void test_clear() { map<string, string> defaults; defaults["rtc.component.conf.path"] = "C:\\Program\\ Files\\OpenRTM-aist"; defaults["rtc.manager.arch"] = "i386"; defaults["rtc.manager.debug.level"] = "PARANOID"; defaults["rtc.manager.language"] = "C++"; defaults["rtc.manager.nameserver"] = "zonu.a02.aist.go.jp"; defaults["rtc.manager.opening_message"] = "Hello World"; defaults["rtc.manager.orb.name"] = "omniORB"; defaults["rtc.manager.orb.options"] = "IIOPAddrPort, -ORBendPoint, giop:tcp:"; defaults["rtc.manager.os.name"] = "FreeBSD"; defaults["rtc.manager.os.release"] = "6.1-RELEASE"; defaults["rtc.manager.subsystems"] = "Camera, Manipulator, Force Sensor"; defaults["rtc.openrtm.author"] = "Noriaki Ando"; defaults["rtc.openrtm.release"] = "aist"; defaults["rtc.openrtm.vendor"] = "AIST TaskIntelligence"; defaults["rtc.openrtm.version"] = "0.4.0"; /* mapによるデフォルト値指定でPropertiesオブジェクトを生成する */ coil::Properties prop(defaults); prop.getNode("rtc.manager.os").clear(); /* (1) "rtc.manager.os"以下のノードが削除されているか? */ CPPUNIT_ASSERT(prop.findNode("rtc.manager.os.name") == NULL); CPPUNIT_ASSERT(prop.findNode("rtc.manager.os.release") == NULL); /* (2) "rtc.manager.os"以外のノードは削除されていないか? */ CPPUNIT_ASSERT(prop.findNode("rtc.manager.arch") != NULL); CPPUNIT_ASSERT(prop.findNode("rtc.manager.orb") != NULL); /* (3) すべてのノードが削除されているか? */ prop.clear(); CPPUNIT_ASSERT(prop.findNode("rtc.manager.os") == NULL); CPPUNIT_ASSERT(prop.findNode("rtc.manager") == NULL); CPPUNIT_ASSERT(prop.findNode("rtc.openrtm") == NULL); CPPUNIT_ASSERT(prop.findNode("rtc.component") == NULL); CPPUNIT_ASSERT(prop.findNode("rtc") == NULL); } /*! * @brief createNode()のテスト * * <ul> * * <li>デフォルト値が設定されており、かつ通常の値も設定されている場 * 合に、当該キー名の新規ノード作成が、意図どおり失敗するか?</li> * * <li>デフォルト値が設定されているが、通常の値は設定されていない場 * 合に、当該キー名の新規ノード作成が、意図どおり失敗するか?</li> * * <li>デフォルト値は設定されていないが、通常の値は設定されている場 * 合に、当該キー名の新規ノード作成が、意図どおり失敗するか?</li> * * <li>デフォルト値、通常の値のいずれも設定されていない場合に、新規 * ノード作成が成功するか?</li> * * </ul> */ void test_createNode() { coil::Properties prop; string key1 = "key1"; string key1DefaultValue = "key1-default-value"; string key1Value = "key1-value"; prop.setDefault(key1, key1DefaultValue); prop.setProperty(key1, key1Value); string key2 = "key2"; string key2DefaultValue = "key2-default-value"; prop.setDefault(key2, key2DefaultValue); string key3 = "key3"; string key3Value = "key3-value"; prop.setProperty(key3, key3Value); /* // (1) デフォルト値が設定されており、かつ通常の値も設定されている // 場合に、当該キー名の新規ノード作成が、意図どおり失敗するか? */ CPPUNIT_ASSERT(! prop.createNode(key1.c_str())); /* // (2) デフォルト値が設定されているが、通常の値は設定されていない // 場合に、当該キー名の新規ノード作成が、意図どおり失敗するか? */ CPPUNIT_ASSERT(! prop.createNode(key2.c_str())); /* // (3) デフォルト値は設定されていないが、通常の値は設定されている // 場合に、当該キー名の新規ノード作成が、意図どおり失敗するか? */ CPPUNIT_ASSERT(! prop.createNode(key3.c_str())); /* // (4) デフォルト値、通常の値のいずれも設定されていない場合に、新 // 規ノード作成が成功するか? */ string keyNonExist = "key-non-exist"; CPPUNIT_ASSERT(prop.createNode(keyNonExist.c_str())); } /*! * @brief <<演算子のテスト * * <ul> * * <li>デフォルト値は、入力されないことを確認する
181  */
182  string key1("manager.test.test");
183  coil::Properties prop1(key1.c_str(),value.c_str());
184 
185  retkey = prop1.getName();
186  CPPUNIT_ASSERT_EQUAL(key1, retkey);
187  retval = prop1.getValue();
188  CPPUNIT_ASSERT_EQUAL(value, retval);
189  }
190 
200  {
201  map<string, string> defaults;
202  defaults["rtc.component.conf.path"] = "C:\\Program\\ Files\\OpenRTM-aist";
203  defaults["rtc.manager.arch"] = "i386";
204  defaults["rtc.manager.debug.level"] = "PARANOID";
205  defaults["rtc.manager.language"] = "C++";
206  defaults["rtc.manager.nameserver"] = "zonu.a02.aist.go.jp";
207  defaults["rtc.manager.opening_message"] = "Hello World";
208  defaults["rtc.manager.orb.name"] = "omniORB";
209  defaults["rtc.manager.orb.options"] =
210  "IIOPAddrPort, -ORBendPoint, giop:tcp:";
211  defaults["rtc.manager.os.name"] = "FreeBSD";
212  defaults["rtc.manager.os.release"] = "6.1-RELEASE";
213  defaults["rtc.manager.subsystems"] = "Camera, Manipulator, Force Sensor";
214  defaults["rtc.openrtm.author"] = "Noriaki Ando";
215  defaults["rtc.openrtm.release"] = "aist";
216  defaults["rtc.openrtm.vendor"] = "AIST TaskIntelligence";
217  defaults["rtc.openrtm.version"] = "0.4.0";
218 
219  /* mapによるデフォルト値指定でPropertiesオブジェクトを生成する */
220  coil::Properties prop(defaults);
221 
222  /* 各プロパティのデフォルト値および通常値がいずれも、コンストラク */
223  /* タで指定した値で取得されることを確認する */
224  map<string, string>::iterator it;
225  it = defaults.begin();
226  for (; it != defaults.end(); ++it) {
227  string key = it->first;
228  string value = it->second;
229  CPPUNIT_ASSERT_EQUAL(value, prop.getDefault(key));
230  CPPUNIT_ASSERT_EQUAL(value, prop.getProperty(key));
231  }
232  }
233 
234 
236  {
237  const char* defaults[] = {
238  "rtc.component.conf.path", "C:\\Program\\ Files\\OpenRTM-aist",
239  "rtc.manager.arch", "i386",
240  "rtc.manager.debug.level", "PARANOID",
241  "rtc.manager.language", "C++",
242  "rtc.manager.nameserver", "zonu.a02.aist.go.jp",
243  "rtc.manager.opening_message", "Hello World",
244  "rtc.manager.orb.name", "omniORB",
245  "rtc.manager.orb.options", "IIOPAddrPort, -ORBendPoint, giop:tcp:",
246  "rtc.manager.os.name", "FreeBSD",
247  "rtc.manager.os.release", "6.1-RELEASE",
248  "rtc.manager.subsystems", "Camera, Manipulator, Force Sensor",
249  "rtc.openrtm.author", "Noriaki Ando",
250  "rtc.openrtm.release", "aist",
251  "rtc.openrtm.vendor", "AIST TaskIntelligence",
252  "rtc.openrtm.version", "0.4.0",
253  ""
254  };
255 
256  coil::Properties prop(defaults);
257  /*
258  // 各プロパティのデフォルト値および通常値がいずれも、コンストラクタで指定した値で取得されることを確認する */ for (int i = 0; defaults[i] != ""; i += 2) { string key = defaults[i]; string value = defaults[i + 1]; CPPUNIT_ASSERT_EQUAL(value, prop.getDefault(key)); CPPUNIT_ASSERT_EQUAL(value, prop.getProperty(key)); } } /*! * @brief Properties(const Properties& prop)コピーコンストラクタのテスト * * <ul> * <li>propで指定したデフォルト値が、コピーオブジェクトから正しく取得されるか?</li> * </ul> */ void test_Properties_copy() { map<string, string> defaults; defaults["rtc.component.conf.path"] = "C:\\Program\\ Files\\OpenRTM-aist"; defaults["rtc.manager.arch"] = "i386"; defaults["rtc.manager.debug.level"] = "PARANOID"; defaults["rtc.manager.language"] = "C++"; defaults["rtc.manager.nameserver"] = "zonu.a02.aist.go.jp"; defaults["rtc.manager.opening_message"] = "Hello World"; defaults["rtc.manager.orb.name"] = "omniORB"; defaults["rtc.manager.orb.options"] = "IIOPAddrPort, -ORBendPoint, giop:tcp:"; defaults["rtc.manager.os.name"] = "FreeBSD"; defaults["rtc.manager.os.release"] = "6.1-RELEASE"; defaults["rtc.manager.subsystems"] = "Camera, Manipulator, Force Sensor"; defaults["rtc.openrtm.author"] = "Noriaki Ando"; defaults["rtc.openrtm.release"] = "aist"; defaults["rtc.openrtm.vendor"] = "AIST TaskIntelligence"; defaults["rtc.openrtm.version"] = "0.4.0"; /* mapによるデフォルト値指定でPropertiesオブジェクトを生成する */ coil::Properties prop(defaults); coil::Properties cprop(prop); /* 各プロパティのデフォルト値および通常値がいずれも、コンストラクタで指定した値で取得されることを確認する */ for (map<string, string>::iterator it = defaults.begin(); it != defaults.end(); it++) { string key = it->first; string value = it->second; CPPUNIT_ASSERT_EQUAL(value, cprop.getDefault(key)); CPPUNIT_ASSERT_EQUAL(value, cprop.getProperty(key)); } } /*! * @brief ~Properties(void)デストラクタのテスト * * <ul> * <li>デストラクタによりオブジェクトからデータが正しく削除されるか?</li> * </ul> */ void test_Properties_destructor() { map<string, string> defaults; defaults["rtc.component.conf.path"] = "C:\\Program\\ Files\\OpenRTM-aist"; defaults["rtc.manager.arch"] = "i386"; defaults["rtc.manager.debug.level"] = "PARANOID"; defaults["rtc.manager.language"] = "C++"; defaults["rtc.manager.nameserver"] = "zonu.a02.aist.go.jp"; defaults["rtc.manager.opening_message"] = "Hello World"; defaults["rtc.manager.orb.name"] = "omniORB"; defaults["rtc.manager.orb.options"] = "IIOPAddrPort, -ORBendPoint, giop:tcp:"; defaults["rtc.manager.os.name"] = "FreeBSD"; defaults["rtc.manager.os.release"] = "6.1-RELEASE"; defaults["rtc.manager.subsystems"] = "Camera, Manipulator, Force Sensor"; defaults["rtc.openrtm.author"] = "Noriaki Ando"; defaults["rtc.openrtm.release"] = "aist"; defaults["rtc.openrtm.vendor"] = "AIST TaskIntelligence"; defaults["rtc.openrtm.version"] = "0.4.0"; /* mapによるデフォルト値指定でPropertiesオブジェクトを生成する */ coil::Properties prop(defaults); std::vector<coil::Properties*> leaf0(prop.getNode("rtc").getLeaf()); CPPUNIT_ASSERT(leaf0.size() == 3); /* rtc.managerノードを削除する */ delete &prop.getNode("rtc.manager"); /* rtcノードからmanagerが削除されている事を確認する。*/ std::vector<coil::Properties*> leaf1(prop.getNode("rtc").getLeaf()); CPPUNIT_ASSERT(leaf1.size() == 2); std::string getval(prop.getNode("rtc.manager").getValue()); CPPUNIT_ASSERT("" == getval); } /*! * @brief =演算子(代入演算子)のテスト * * <ul> * <li>デフォルト値、通常値のいずれも設定されている場合に、それら両 * 方が正しく代入されるか?</li> * <li>デフォルト値のみ設定されており、通常値が設定されていない場合 * に、それら両方が正しく代入されるか?</li> * <li>デフォルト値が設定されていないが、通常値が設定されている場合 * に、それら両方が正しく代入されるか?</li> * </ul> */ void test_substitute() { /* 代入元となるPropertiesを作成する */ coil::Properties propSrc; /* (1) デフォルト値、通常値のいずれも設定されている場合 */ string key1 = "key1"; string key1DefaultValue = "key1-default-value"; string key1Value = "key1-value"; propSrc.setDefault(key1, key1DefaultValue); propSrc.setProperty(key1, key1Value); /* (2) デフォルト値のみ設定されており、通常値が設定されていない場合 */ string key2 = "key2"; string key2DefaultValue = "key2-default-value"; propSrc.setDefault(key2, key2DefaultValue); /* (3) デフォルト値が設定されていないが、通常値が設定されている場合 */ string key3 = "key3"; string key3Value = "key3-value"; propSrc.setProperty(key3, key3Value); /* 代入を行い、それぞれの場合で、正しく代入されたことを確認する */ coil::Properties prop; prop = propSrc; CPPUNIT_ASSERT_EQUAL(key1DefaultValue, prop.getDefault(key1)); CPPUNIT_ASSERT_EQUAL(key1Value, prop.getProperty(key1)); CPPUNIT_ASSERT_EQUAL(key2DefaultValue, prop.getDefault(key2)); CPPUNIT_ASSERT_EQUAL(key2DefaultValue, prop.getProperty(key2)); CPPUNIT_ASSERT_EQUAL(EMPTY_STRING, prop.getDefault(key3)); CPPUNIT_ASSERT_EQUAL(key3Value, prop.getProperty(key3)); } /*! * @brief getProperty()メソッドのテスト * * <ul> * <li>デフォルト値が設定されており、かつ通常の値も設定されている場 * 合に、プロパティ値として正しく通常の値が取得されるか?</li> * <li>デフォルト値が設定されているが、通常の値は設定されていない場 * 合に、プロパティ値として正しくデフォルト値が取得されるか?</li> * <li>デフォルト値は設定されていないが、通常の値は設定されている場 * 合に、プロパティ値として正しく通常の値が取得されるか?</li> * <li>デフォルト値、通常の値のいずれも設定されていない場合に、プロ * パティ値として正しく空文字列が取得されるか?</li> * </ul> */ void test_getProperty() { coil::Properties prop; prop.setDefault("property_1", "default_1"); prop.setProperty("property_1", "value_1"); prop.setDefault("property_2", "default_2"); prop.setProperty("property_3", "value_3"); /* (1) デフォルト値が設定されており、かつ通常の値も設定されている */ /* 場合に、プロパティ値として正しく通常の値が取得されるか? */ string expected_1 = "value_1"; CPPUNIT_ASSERT_EQUAL(expected_1, prop.getProperty("property_1")); /* (2) デフォルト値が設定されているが、通常の値は設定されていない */ /*/ 場合に、プロパティ値として正しくデフォルト値が取得されるか? */ string expected_2 = "default_2"; CPPUNIT_ASSERT_EQUAL(expected_2, prop.getProperty("property_2")); /* (3) デフォルト値は設定されていないが、通常の値は設定されている */ /* 場合に、プロパティ値として正しく通常の値が取得されるか? */ string expected_3 = "value_3"; CPPUNIT_ASSERT_EQUAL(expected_3, prop.getProperty("property_3")); /* (4) デフォルト値、通常の値のいずれも設定されていない場合に、プ */ /* ロパティ値として正しく空文字列が取得されるか? */ string expected_4 = ""; CPPUNIT_ASSERT_EQUAL(expected_4, prop.getProperty("property_4")); } /*! * @brief getDefault()のテスト * * <ul> * * <li>デフォルト値が設定されており、かつ通常の値も設定されている場 * 合に、正しく設定されているデフォルト値を取得できるか?</li> * * <li>デフォルト値が設定されているが、通常の値は設定されていない場 * 合に、正しく設定されているデフォルト値を取得できるか?</li> * * <li>デフォルト値は設定されていないが、通常の値は設定されている場 * 合に、デフォルト値として空文字列が取得されるか?</li> * * <li>デフォルト値、通常の値のいずれも設定されていない場合に、デフォ * ルト値として空文字列が取得されるか?</li> * * </ul> */ void test_getDefault() { coil::Properties prop; string key1 = "key1"; string key1DefaultValue = "key1-default-value"; string key1Value = "key1-value"; prop.setDefault(key1, key1DefaultValue); prop.setProperty(key1, key1Value); string key2 = "key2"; string key2DefaultValue = "key2-default-value"; prop.setDefault(key2, key2DefaultValue); string key3 = "key3"; string key3Value = "key3-value"; prop.setProperty(key3, key3Value); /* (1) デフォルト値が設定されており、かつ通常の値も設定されている */ /* 場合に、正しく設定されているデフォルト値を取得できるか? */ CPPUNIT_ASSERT_EQUAL(key1DefaultValue, prop.getDefault(key1)); /* (2) デフォルト値が設定されているが、通常の値は設定されていない */ /* 場合に、正しく設定されているデフォルト値を取得できるか? */ CPPUNIT_ASSERT_EQUAL(key2DefaultValue, prop.getDefault(key2)); /* (3) デフォルト値は設定されていないが、通常の値は設定されている */ /* 場合に、デフォルト値として空文字列が取得されるか? */ CPPUNIT_ASSERT_EQUAL(EMPTY_STRING, prop.getDefault(key3)); /* (4) デフォルト値、通常の値のいずれも設定されていない場合に、デ */ /* フォルト値として空文字列が取得されるか? */ string keyNonExist = "key-non-exist"; CPPUNIT_ASSERT_EQUAL(EMPTY_STRING, prop.getDefault(keyNonExist)); } /*! * @brief setProperty()メソッドのテスト * * <ul> * <li>設定時に指定した値が、正しく設定されるか?</li> * <li>設定時の戻り値として、元の設定値が正しく取得されるか?</li> * </ul> */ void test_setProperty() { string key = "key"; string oldValue = "old-value"; string newValue = "new-value"; coil::Properties prop; prop.setProperty(key, oldValue); /* (1) 設定時に指定した値が、正しく設定されるか? */ CPPUNIT_ASSERT_EQUAL(oldValue, prop.getProperty(key)); /* (2) 設定時の戻り値として、元の設定値が正しく取得されるか? */ CPPUNIT_ASSERT_EQUAL(oldValue, prop.setProperty(key, newValue)); /* (1) 設定時に指定した値が、正しく設定されるか?(その2) */ CPPUNIT_ASSERT_EQUAL(newValue, prop.getProperty(key)); } /*! * @brief list()メソッドのテスト * * <ul> * * <li>設定されているプロパティ値が、正しく出力されるか?</li> * * <li>\(バックスラッシュ)を含む値が、正しくエスケープ処理されて * 出力されるか?</li> * * </ul> */ void test_list() { coil::Properties prop; prop.setProperty("rtc.component.conf.path", "C:\\Program\\ Files\\OpenRTM-aist"); prop.setProperty("rtc.manager.arch", "i386"); prop.setProperty("rtc.manager.debug.level", "PARANOID"); prop.setProperty("rtc.manager.language", "C++"); prop.setProperty("rtc.manager.nameserver", "zonu.a02.aist.go.jp"); prop.setProperty("rtc.manager.opening_message", "Hello World"); prop.setProperty("rtc.manager.orb.name", "omniORB"); prop.setProperty("rtc.manager.orb.options", "IIOPAddrPort, -ORBendPoint, giop:tcp:"); prop.setProperty("rtc.manager.os.name", "FreeBSD"); prop.setProperty("rtc.manager.os.release", "6.1-RELEASE"); prop.setProperty("rtc.manager.subsystems", "Camera, Manipulator, Force Sensor"); prop.setProperty("rtc.openrtm.author", "Noriaki Ando"); prop.setProperty("rtc.openrtm.release", "aist"); prop.setProperty("rtc.openrtm.vendor", "AIST TaskIntelligence"); prop.setProperty("rtc.openrtm.version", "0.4.0"); std::ofstream outFile("listed.conf"); prop.list(outFile); outFile.close(); vector<string> expectedLines; expectedLines.push_back("rtc.component.conf.path: C:\\\\Program\\\\ Files\\\\OpenRTM-aist"); expectedLines.push_back("rtc.manager.arch: i386"); expectedLines.push_back("rtc.manager.debug.level: PARANOID"); expectedLines.push_back("rtc.manager.language: C++"); expectedLines.push_back("rtc.manager.nameserver: zonu.a02.aist.go.jp"); expectedLines.push_back("rtc.manager.opening_message: Hello World"); expectedLines.push_back("rtc.manager.orb.name: omniORB"); expectedLines.push_back("rtc.manager.orb.options: IIOPAddrPort, -ORBendPoint, giop:tcp:"); expectedLines.push_back("rtc.manager.os.name: FreeBSD"); expectedLines.push_back("rtc.manager.os.release: 6.1-RELEASE"); expectedLines.push_back("rtc.manager.subsystems: Camera, Manipulator, Force Sensor"); expectedLines.push_back("rtc.openrtm.author: Noriaki Ando"); expectedLines.push_back("rtc.openrtm.release: aist"); expectedLines.push_back("rtc.openrtm.vendor: AIST TaskIntelligence"); expectedLines.push_back("rtc.openrtm.version: 0.4.0"); vector<string> storedLines; std::ifstream inFile("listed.conf"); string str; while (getline(inFile, str)) { storedLines.push_back(str); } inFile.close(); /* ファイルに書き込まれた内容と期待値を比較する */ sort(expectedLines.begin(), expectedLines.end()); sort(storedLines.begin(), storedLines.end()); CPPUNIT_ASSERT_EQUAL(expectedLines.size(), storedLines.size()); for (vector<string>::size_type i = 0; i < expectedLines.size(); i++) { CPPUNIT_ASSERT_EQUAL(expectedLines[i], storedLines[i]); } } /*! * @brief load()メソッドのテスト * <ul> * * <li>プロパティリストをファイルからPropertiesオブジェクトへ正しく * 読み込めるか?</li> * * </ul> */ void test_load() { /* プロパティリストをファイルからPropertiesオブジェクトへ読み込む */ coil::Properties prop; std::ifstream ifl("defaults.conf"); prop.load(ifl); ifl.close(); /* 期待値と比較して、正しく読み込まれたことを確認する */ map<string, string>::iterator expected; for (expected = DEFAULTS_CONF.begin(); expected != DEFAULTS_CONF.end(); expected++) { string key = expected->first; string value = expected->second; CPPUNIT_ASSERT_EQUAL(value, prop.getProperty(key)); } } /*! * @brief store()メソッドのテスト * * <ul> * * <li>設定されているプロパティ値が、正しく出力されるか?</li> * * <li>指定したヘッダ文字列が、正しく出力されるか?</li> * * <li>\(バックスラッシュ)を含む値が、正しくエスケープ処理されて * 出力されるか?</li> * * </ul> */ void test_store() { /* テスト用のプロパティを設定する */ coil::Properties prop; prop.setProperty("rtc.component.conf.path", "C:\\Program\\ Files\\OpenRTM-aist"); prop.setProperty("rtc.manager.arch", "i386"); prop.setProperty("rtc.manager.debug.level", "PARANOID"); prop.setProperty("rtc.manager.language", "C++"); prop.setProperty("rtc.manager.nameserver", "zonu.a02.aist.go.jp"); prop.setProperty("rtc.manager.opening_message", "Hello World"); prop.setProperty("rtc.manager.orb.name", "omniORB"); prop.setProperty("rtc.manager.orb.options", "IIOPAddrPort, -ORBendPoint, giop:tcp:"); prop.setProperty("rtc.manager.os.name", "FreeBSD"); prop.setProperty("rtc.manager.os.release", "6.1-RELEASE"); prop.setProperty("rtc.manager.subsystems", "Camera, Manipulator, Force Sensor"); prop.setProperty("rtc.openrtm.author", "Noriaki Ando"); prop.setProperty("rtc.openrtm.release", "aist"); prop.setProperty("rtc.openrtm.vendor", "AIST TaskIntelligence"); prop.setProperty("rtc.openrtm.version", "0.4.0"); prop.setProperty("hello", "\tHello\t"); std::ofstream outFile("stored.conf"); prop.store(outFile, "stored data"); outFile.close(); /* 比較のための期待値を準備する */ vector<string> expectedLines; expectedLines.push_back("# stored data"); expectedLines.push_back("rtc.component.conf.path: C:\\\\Program\\\\ Files\\\\OpenRTM-aist"); expectedLines.push_back("rtc.manager.arch: i386"); expectedLines.push_back("rtc.manager.debug.level: PARANOID"); expectedLines.push_back("rtc.manager.language: C++"); expectedLines.push_back("rtc.manager.nameserver: zonu.a02.aist.go.jp"); expectedLines.push_back("rtc.manager.opening_message: Hello World"); expectedLines.push_back("rtc.manager.orb.name: omniORB"); expectedLines.push_back("rtc.manager.orb.options: IIOPAddrPort, -ORBendPoint, giop:tcp:"); expectedLines.push_back("rtc.manager.os.name: FreeBSD"); expectedLines.push_back("rtc.manager.os.release: 6.1-RELEASE"); expectedLines.push_back("rtc.manager.subsystems: Camera, Manipulator, Force Sensor"); expectedLines.push_back("rtc.openrtm.author: Noriaki Ando"); expectedLines.push_back("rtc.openrtm.release: aist"); expectedLines.push_back("rtc.openrtm.vendor: AIST TaskIntelligence"); expectedLines.push_back("rtc.openrtm.version: 0.4.0"); expectedLines.push_back("hello: \\tHello\\t"); /* 出力されたファイルの中身を1行づつ読み込む */ vector<string> storedLines; std::ifstream inFile("stored.conf"); string str; while (getline(inFile, str)) { storedLines.push_back(str); } inFile.close(); /* ファイルに書き込まれた内容と期待値を比較する */ sort(expectedLines.begin(), expectedLines.end()); sort(storedLines.begin(), storedLines.end()); CPPUNIT_ASSERT_EQUAL(expectedLines.size(), storedLines.size()); for (vector<string>::size_type i = 0; i < expectedLines.size(); i++) { CPPUNIT_ASSERT_EQUAL(expectedLines[i], storedLines[i]); } } /*! * @brief propertyNames()メソッドのテスト * * <ul> * * <li>通常のプロパティ値とデフォルト値の両方が設定されているプロパ * ティについて、キー名が取得されるか?</li> * * <li>通常のプロパティ値のみが設定されているプロパティについて、キー * 名が取得されるか?</li> * * <li>デフォルト値のみが設定されているプロパティについて、キー名が * 取得されるか?</li> * * </ul> */ void test_propertyNames() { coil::Properties prop; /* (1) 通常のプロパティ値とデフォルト値の両方を設定する */ prop.setProperty("property_01", "value_01"); prop.setDefault("property_01", "default_01"); /* (2) 通常のプロパティ値のみを設定する */ prop.setProperty("property_02", "value_02"); /* (3) デフォルト値のみを設定する */ prop.setDefault("property_03", "default_03"); /* (1),(2),(3)いずれの場合についてもキー名が取得されることを確認する */ vector<string> keys = prop.propertyNames(); CPPUNIT_ASSERT_EQUAL(3, (int) keys.size()); CPPUNIT_ASSERT(find(keys.begin(), keys.end(), "property_01") != keys.end()); CPPUNIT_ASSERT(find(keys.begin(), keys.end(), "property_02") != keys.end()); CPPUNIT_ASSERT(find(keys.begin(), keys.end(), "property_03") != keys.end()); } /*! * @brief getName(void)メソッドのテスト * * <ul> * <li>コンストラクタで指定したプロパティの名称が正しく取得されるか?</li> * </ul> */ void test_getName() { string value("test"); /* (1) キーを階層化していない場合 */ /* key,valueによるデフォルト値指定でPropertiesオブジェクトを生成する */ string key0("manager"); coil::Properties prop0(key0.c_str(),value.c_str()); string retkey(prop0.getName()); CPPUNIT_ASSERT_EQUAL(key0, retkey); /* (1) キーを階層化した場合 */ /* key,valueによるデフォルト値指定でPropertiesオブジェクトを生成する */ string key1("manager.hoge"); coil::Properties prop1(key1.c_str(),value.c_str()); retkey= prop1.getName(); CPPUNIT_ASSERT_EQUAL(key1, retkey); } /*! * @brief getValue(void)メソッドのテスト * * <ul> * <li>コンストラクタで指定したプロパティの値が正しく取得されるか?</li> * </ul> */ void test_getValue() { /* key,valueによるデフォルト値指定でPropertiesオブジェクトを生成する */ string key("manager"); string value("test.test"); coil::Properties prop(key.c_str(),value.c_str()); /* コンストラクタで指定したプロパティの値が取得されることを確認する */ string retval(prop.getValue()); CPPUNIT_ASSERT_EQUAL(value, retval); } /*! * @brief getDefaultValue(void)メソッドのテスト * * <ul> * <li>setDefaultで指定したプロパティの値が正しく取得されるか?</li> * </ul> */ void test_getDefaultValue() { coil::Properties prop; string key("property_1"); string value("default_1"); /* デフォルト値を設定する */ prop.setDefault(key.c_str(), value.c_str()); /* デフォルト値を取得する */ string retval(prop.getNode(key.c_str()).getDefaultValue()); CPPUNIT_ASSERT_EQUAL(value, retval); } /*! * @brief getLeaf(void)メソッドのテスト * * <ul> * <li>getLeafで子要素が正しく取得されるか?</li> * </ul> */ void test_getLeaf() { map<string, string> defaults; defaults["rtc.component.conf.path"] = "C:\\Program\\ Files\\OpenRTM-aist"; defaults["rtc.manager.arch"] = "i386"; defaults["rtc.manager.debug.level"] = "PARANOID"; defaults["rtc.manager.language"] = "C++"; defaults["rtc.manager.nameserver"] = "zonu.a02.aist.go.jp"; defaults["rtc.manager.opening_message"] = "Hello World"; defaults["rtc.manager.orb.name"] = "omniORB"; defaults["rtc.manager.orb.options"] = "IIOPAddrPort, -ORBendPoint, giop:tcp:"; defaults["rtc.manager.os.name"] = "FreeBSD"; defaults["rtc.manager.os.release"] = "6.1-RELEASE"; defaults["rtc.manager.subsystems"] = "Camera, Manipulator, Force Sensor"; defaults["rtc.openrtm.author"] = "Noriaki Ando"; defaults["rtc.openrtm.release"] = "aist"; defaults["rtc.openrtm.vendor"] = "AIST TaskIntelligence"; defaults["rtc.openrtm.version"] = "0.4.0"; /* mapによるデフォルト値指定でPropertiesオブジェクトを生成する */ coil::Properties prop(defaults); /* getLeaf()で子要素を取得 */ std::vector<coil::Properties*> leaf(prop.getNode("rtc").getLeaf()); CPPUNIT_ASSERT(leaf[1]->getProperty("arch") == "i386"); CPPUNIT_ASSERT(leaf[1]->getProperty("debug.level") == "PARANOID"); } /*! * @brief getRoot(void)メソッドのテスト * * <ul> * <li>getRootでルート要素が正しく取得されるか?</li> * </ul> */ void test_getRoot() { map<string, string> defaults; defaults["rtc.component.conf.path"] = "C:\\Program\\ Files\\OpenRTM-aist"; defaults["rtc.manager.arch"] = "i386"; defaults["rtc.manager.debug.level"] = "PARANOID"; defaults["rtc.manager.language"] = "C++"; defaults["rtc.manager.nameserver"] = "zonu.a02.aist.go.jp"; defaults["rtc.manager.opening_message"] = "Hello World"; defaults["rtc.manager.orb.name"] = "omniORB"; defaults["rtc.manager.orb.options"] = "IIOPAddrPort, -ORBendPoint, giop:tcp:"; defaults["rtc.manager.os.name"] = "FreeBSD"; defaults["rtc.manager.os.release"] = "6.1-RELEASE"; defaults["rtc.manager.subsystems"] = "Camera, Manipulator, Force Sensor"; defaults["rtc.openrtm.author"] = "Noriaki Ando"; defaults["rtc.openrtm.release"] = "aist"; defaults["rtc.openrtm.vendor"] = "AIST TaskIntelligence"; defaults["rtc.openrtm.version"] = "0.4.0"; /* mapによるデフォルト値指定でPropertiesオブジェクトを生成する */ coil::Properties prop(defaults); /* getLeaf()でルート要素を取得 */ const coil::Properties* root(prop.getNode("rtc.manager.os").getRoot()); CPPUNIT_ASSERT(root->getProperty("arch") == "i386"); CPPUNIT_ASSERT(root->getProperty("debug.level") == "PARANOID"); } /*! * @brief operator[]()メソッドのテスト * * <ul> * <li>指定されたキーを持つプロパティを、プロパティリストから探せるか?</li> * </ul> */ void test_operator() { map<string, string> defaults; defaults["rtc.component.conf.path"] = "C:\\Program\\ Files\\OpenRTM-aist"; defaults["rtc.manager.arch"] = "i386"; defaults["rtc.manager.debug.level"] = "PARANOID"; defaults["rtc.manager.language"] = "C++"; defaults["rtc.manager.nameserver"] = "zonu.a02.aist.go.jp"; defaults["rtc.manager.opening_message"] = "Hello World"; defaults["rtc.manager.orb.name"] = "omniORB"; defaults["rtc.manager.orb.options"] = "IIOPAddrPort, -ORBendPoint, giop:tcp:"; defaults["rtc.manager.os.name"] = "FreeBSD"; defaults["rtc.manager.os.release"] = "6.1-RELEASE"; defaults["rtc.manager.subsystems"] = "Camera, Manipulator, Force Sensor"; defaults["rtc.openrtm.author"] = "Noriaki Ando"; defaults["rtc.openrtm.release"] = "aist"; defaults["rtc.openrtm.vendor"] = "AIST TaskIntelligence"; defaults["rtc.openrtm.version"] = "0.4.0"; // const std::string& // Properties::operator[](const std::string& key) const // のテスト const coil::Properties prop0(defaults); const string& retval0(prop0["rtc.manager.arch"]); CPPUNIT_ASSERT(retval0 == "i386"); // std::string& // Properties::operator[](const std::string& key) // のテスト coil::Properties prop1(defaults); string retval1(prop1["rtc.manager.arch"]); CPPUNIT_ASSERT(retval1 == "i386"); } /*! * @brief setDefaults()メソッドのテスト * * <ul> * <li>デフォルト値を登録し、その値が正しく取得できるか?</li> * </ul> */ void test_setDefaults() { const char* defaults[] = { "rtc.component.conf.path", "C:\\Program\\ Files\\OpenRTM-aist", "rtc.manager.arch", "i386", "rtc.manager.debug.level", "PARANOID", "rtc.manager.language", "C++", "rtc.manager.nameserver", "zonu.a02.aist.go.jp", "rtc.manager.opening_message", "Hello World", "rtc.manager.orb.name", "omniORB", "rtc.manager.orb.options", "IIOPAddrPort, -ORBendPoint, giop:tcp:", "rtc.manager.os.name", "FreeBSD", "rtc.manager.os.release", "6.1-RELEASE", "rtc.manager.subsystems", "Camera, Manipulator, Force Sensor", "rtc.openrtm.author", "Noriaki Ando", "rtc.openrtm.release", "aist", "rtc.openrtm.vendor", "AIST TaskIntelligence", "rtc.openrtm.version", "0.4.0", "" }; coil::Properties prop; prop.setDefaults(defaults); /* // 各プロパティのデフォルト値がsetDefaultsで指定した値で取得されることを確認する */ for (int i = 0; defaults[i] != ""; i += 2) { string key = defaults[i]; string value = defaults[i + 1]; CPPUNIT_ASSERT_EQUAL(value, prop.getDefault(key)); } } /*! * @brief size()メソッドのテスト * * <ul> * <li>プロパティの数が正しく取得できるか?</li> * </ul> */ void test_size() { map<string, string> defaults; defaults["rtc.component.conf.path"] = "C:\\Program\\ Files\\OpenRTM-aist"; defaults["rtc.manager.arch"] = "i386"; defaults["rtc.manager.debug.level"] = "PARANOID"; defaults["rtc.manager.language"] = "C++"; defaults["rtc.manager.nameserver"] = "zonu.a02.aist.go.jp"; defaults["rtc.manager.opening_message"] = "Hello World"; defaults["rtc.manager.orb.name"] = "omniORB"; defaults["rtc.manager.orb.options"] = "IIOPAddrPort, -ORBendPoint, giop:tcp:"; defaults["rtc.manager.os.name"] = "FreeBSD"; defaults["rtc.manager.os.release"] = "6.1-RELEASE"; defaults["rtc.manager.subsystems"] = "Camera, Manipulator, Force Sensor"; defaults["rtc.openrtm.author"] = "Noriaki Ando"; defaults["rtc.openrtm.release"] = "aist"; defaults["rtc.openrtm.vendor"] = "AIST TaskIntelligence"; defaults["rtc.openrtm.version"] = "0.4.0"; coil::Properties prop(defaults); /* (1) コンストラクタ引数にて指定したプロパティの数が正しく取得できるか? */ CPPUNIT_ASSERT(15 == prop.size()); /* (2) 新たに追加後のプロパティの数が正しく取得できるか? */ string key = "key"; string newValue = "new-value"; prop.setProperty(key, newValue); CPPUNIT_ASSERT(16 == prop.size()); } /*! * @brief findNode()メソッドのテスト * * <ul> * <li>キーで指定したノードが正しく検索できるか?</li> * </ul> */ void test_findNode() { map<string, string> defaults; defaults["rtc.component.conf.path"] = "C:\\Program\\ Files\\OpenRTM-aist"; defaults["rtc.manager.arch"] = "i386"; defaults["rtc.manager.debug.level"] = "PARANOID"; defaults["rtc.manager.language"] = "C++"; defaults["rtc.manager.nameserver"] = "zonu.a02.aist.go.jp"; defaults["rtc.manager.opening_message"] = "Hello World"; defaults["rtc.manager.orb.name"] = "omniORB"; defaults["rtc.manager.orb.options"] = "IIOPAddrPort, -ORBendPoint, giop:tcp:"; defaults["rtc.manager.os.name"] = "FreeBSD"; defaults["rtc.manager.os.release"] = "6.1-RELEASE"; defaults["rtc.manager.subsystems"] = "Camera, Manipulator, Force Sensor"; defaults["rtc.openrtm.author"] = "Noriaki Ando"; defaults["rtc.openrtm.release"] = "aist"; defaults["rtc.openrtm.vendor"] = "AIST TaskIntelligence"; defaults["rtc.openrtm.version"] = "0.4.0"; /* mapによるデフォルト値指定でPropertiesオブジェクトを生成する */ coil::Properties prop(defaults); /* (1) 存在するノードを指定しノードを取得 */ CPPUNIT_ASSERT(prop.findNode("rtc.manager")->getProperty("arch") == "i386"); CPPUNIT_ASSERT(prop.findNode("rtc.manager")->getProperty("debug.level") == "PARANOID"); CPPUNIT_ASSERT(prop.findNode("rtc.manager") != NULL); /* (2) 存在しないノードを指定しノードを取得 */ CPPUNIT_ASSERT(prop.findNode("manager") == NULL); CPPUNIT_ASSERT(prop.findNode("rtc.MANAGER") == NULL); } /*! * @brief getNode()メソッドのテスト * * <ul> * <li>キーで指定したノードが正しく取得できるか?</li> * </ul> */ void test_getNode() { map<string, string> defaults; defaults["rtc.component.conf.path"] = "C:\\Program\\ Files\\OpenRTM-aist"; defaults["rtc.manager.arch"] = "i386"; defaults["rtc.manager.debug.level"] = "PARANOID"; defaults["rtc.manager.language"] = "C++"; defaults["rtc.manager.nameserver"] = "zonu.a02.aist.go.jp"; defaults["rtc.manager.opening_message"] = "Hello World"; defaults["rtc.manager.orb.name"] = "omniORB"; defaults["rtc.manager.orb.options"] = "IIOPAddrPort, -ORBendPoint, giop:tcp:"; defaults["rtc.manager.os.name"] = "FreeBSD"; defaults["rtc.manager.os.release"] = "6.1-RELEASE"; defaults["rtc.manager.subsystems"] = "Camera, Manipulator, Force Sensor"; defaults["rtc.openrtm.author"] = "Noriaki Ando"; defaults["rtc.openrtm.release"] = "aist"; defaults["rtc.openrtm.vendor"] = "AIST TaskIntelligence"; defaults["rtc.openrtm.version"] = "0.4.0"; /* mapによるデフォルト値指定でPropertiesオブジェクトを生成する */ coil::Properties prop(defaults); /* (1) 既に存在するノードを取得 */ CPPUNIT_ASSERT(prop.getNode("rtc.manager").getProperty("arch") == "i386"); CPPUNIT_ASSERT(prop.getNode("rtc.manager").getProperty("debug.level") == "PARANOID"); /* (2) 存在しないノードを取得 */ std::string getval(prop.getNode("manager").getValue()); CPPUNIT_ASSERT(getval == ""); // CPPUNIT_ASSERT(prop.getNode("rtc.manager") != NULL); } /*! * @brief removeNode()メソッドのテスト * * <ul> * <li>指定したノードが正しく削除できるか?</li> * </ul> */ void test_removeNode() { map<string, string> defaults; defaults["rtc.component.conf.path"] = "C:\\Program\\ Files\\OpenRTM-aist"; defaults["rtc.manager.arch"] = "i386"; defaults["rtc.manager.debug.level"] = "PARANOID"; defaults["rtc.manager.language"] = "C++"; defaults["rtc.manager.nameserver"] = "zonu.a02.aist.go.jp"; defaults["rtc.manager.opening_message"] = "Hello World"; defaults["rtc.manager.orb.name"] = "omniORB"; defaults["rtc.manager.orb.options"] = "IIOPAddrPort, -ORBendPoint, giop:tcp:"; defaults["rtc.manager.os.name"] = "FreeBSD"; defaults["rtc.manager.os.release"] = "6.1-RELEASE"; defaults["rtc.manager.subsystems"] = "Camera, Manipulator, Force Sensor"; defaults["rtc.openrtm.author"] = "Noriaki Ando"; defaults["rtc.openrtm.release"] = "aist"; defaults["rtc.openrtm.vendor"] = "AIST TaskIntelligence"; defaults["rtc.openrtm.version"] = "0.4.0"; /* mapによるデフォルト値指定でPropertiesオブジェクトを生成する */ coil::Properties prop(defaults); /* "rtc.manager"のように指定した場合、削除できない。 */ CPPUNIT_ASSERT(prop.removeNode("rtc.manager") == NULL); /* "rtc.manager"ノードの削除 */ CPPUNIT_ASSERT(prop.getNode("rtc").removeNode("manager") != NULL); /* (1) 削除したノードを検索 */ CPPUNIT_ASSERT(prop.findNode("rtc.manager") == NULL); /* (2) 削除したノードを取得 */ std::string getval0(prop.getNode("rtc.manager").getValue()); CPPUNIT_ASSERT(getval0 == ""); } /*! * @brief hasKey()メソッドのテスト * * <ul> * <li>子ノードにkeyがあるかどうか?</li> * </ul> */ void test_hasKey() { map<string, string> defaults; defaults["rtc.component.conf.path"] = "C:\\Program\\ Files\\OpenRTM-aist"; defaults["rtc.manager.arch"] = "i386"; defaults["rtc.manager.debug.level"] = "PARANOID"; defaults["rtc.manager.language"] = "C++"; defaults["rtc.manager.nameserver"] = "zonu.a02.aist.go.jp"; defaults["rtc.manager.opening_message"] = "Hello World"; defaults["rtc.manager.orb.name"] = "omniORB"; defaults["rtc.manager.orb.options"] = "IIOPAddrPort, -ORBendPoint, giop:tcp:"; defaults["rtc.manager.os.name"] = "FreeBSD"; defaults["rtc.manager.os.release"] = "6.1-RELEASE"; defaults["rtc.manager.subsystems"] = "Camera, Manipulator, Force Sensor"; defaults["rtc.openrtm.author"] = "Noriaki Ando"; defaults["rtc.openrtm.release"] = "aist"; defaults["rtc.openrtm.vendor"] = "AIST TaskIntelligence"; defaults["rtc.openrtm.version"] = "0.4.0"; /* mapによるデフォルト値指定でPropertiesオブジェクトを生成する */ coil::Properties prop(defaults); /* (1) 存在するキーでテスト */ CPPUNIT_ASSERT(prop.hasKey("rtc") != NULL); /* (2) 存在しないキーでテスト */ CPPUNIT_ASSERT(prop.hasKey("hoge") == NULL); /* (3) 存在するキーでテスト */ CPPUNIT_ASSERT(prop.getNode("rtc").hasKey("manager") != NULL); /* (4) 存在しないキーでテスト */ CPPUNIT_ASSERT(prop.getNode("rtc").hasKey("hoge") == NULL); } /*! * @brief clear()メソッドのテスト * * <ul> * <li>子ノードがすべて削除されるかどうか?</li> * </ul> */ void test_clear() { map<string, string> defaults; defaults["rtc.component.conf.path"] = "C:\\Program\\ Files\\OpenRTM-aist"; defaults["rtc.manager.arch"] = "i386"; defaults["rtc.manager.debug.level"] = "PARANOID"; defaults["rtc.manager.language"] = "C++"; defaults["rtc.manager.nameserver"] = "zonu.a02.aist.go.jp"; defaults["rtc.manager.opening_message"] = "Hello World"; defaults["rtc.manager.orb.name"] = "omniORB"; defaults["rtc.manager.orb.options"] = "IIOPAddrPort, -ORBendPoint, giop:tcp:"; defaults["rtc.manager.os.name"] = "FreeBSD"; defaults["rtc.manager.os.release"] = "6.1-RELEASE"; defaults["rtc.manager.subsystems"] = "Camera, Manipulator, Force Sensor"; defaults["rtc.openrtm.author"] = "Noriaki Ando"; defaults["rtc.openrtm.release"] = "aist"; defaults["rtc.openrtm.vendor"] = "AIST TaskIntelligence"; defaults["rtc.openrtm.version"] = "0.4.0"; /* mapによるデフォルト値指定でPropertiesオブジェクトを生成する */ coil::Properties prop(defaults); prop.getNode("rtc.manager.os").clear(); /* (1) "rtc.manager.os"以下のノードが削除されているか? */ CPPUNIT_ASSERT(prop.findNode("rtc.manager.os.name") == NULL); CPPUNIT_ASSERT(prop.findNode("rtc.manager.os.release") == NULL); /* (2) "rtc.manager.os"以外のノードは削除されていないか? */ CPPUNIT_ASSERT(prop.findNode("rtc.manager.arch") != NULL); CPPUNIT_ASSERT(prop.findNode("rtc.manager.orb") != NULL); /* (3) すべてのノードが削除されているか? */ prop.clear(); CPPUNIT_ASSERT(prop.findNode("rtc.manager.os") == NULL); CPPUNIT_ASSERT(prop.findNode("rtc.manager") == NULL); CPPUNIT_ASSERT(prop.findNode("rtc.openrtm") == NULL); CPPUNIT_ASSERT(prop.findNode("rtc.component") == NULL); CPPUNIT_ASSERT(prop.findNode("rtc") == NULL); } /*! * @brief createNode()のテスト * * <ul> * * <li>デフォルト値が設定されており、かつ通常の値も設定されている場 * 合に、当該キー名の新規ノード作成が、意図どおり失敗するか?</li> * * <li>デフォルト値が設定されているが、通常の値は設定されていない場 * 合に、当該キー名の新規ノード作成が、意図どおり失敗するか?</li> * * <li>デフォルト値は設定されていないが、通常の値は設定されている場 * 合に、当該キー名の新規ノード作成が、意図どおり失敗するか?</li> * * <li>デフォルト値、通常の値のいずれも設定されていない場合に、新規 * ノード作成が成功するか?</li> * * </ul> */ void test_createNode() { coil::Properties prop; string key1 = "key1"; string key1DefaultValue = "key1-default-value"; string key1Value = "key1-value"; prop.setDefault(key1, key1DefaultValue); prop.setProperty(key1, key1Value); string key2 = "key2"; string key2DefaultValue = "key2-default-value"; prop.setDefault(key2, key2DefaultValue); string key3 = "key3"; string key3Value = "key3-value"; prop.setProperty(key3, key3Value); /* // (1) デフォルト値が設定されており、かつ通常の値も設定されている // 場合に、当該キー名の新規ノード作成が、意図どおり失敗するか? */ CPPUNIT_ASSERT(! prop.createNode(key1.c_str())); /* // (2) デフォルト値が設定されているが、通常の値は設定されていない // 場合に、当該キー名の新規ノード作成が、意図どおり失敗するか? */ CPPUNIT_ASSERT(! prop.createNode(key2.c_str())); /* // (3) デフォルト値は設定されていないが、通常の値は設定されている // 場合に、当該キー名の新規ノード作成が、意図どおり失敗するか? */ CPPUNIT_ASSERT(! prop.createNode(key3.c_str())); /* // (4) デフォルト値、通常の値のいずれも設定されていない場合に、新 // 規ノード作成が成功するか? */ string keyNonExist = "key-non-exist"; CPPUNIT_ASSERT(prop.createNode(keyNonExist.c_str())); } /*! * @brief <<演算子のテスト * * <ul> * * <li>デフォルト値は、入力されないことを確認する
259  */
260  for (int i = 0; defaults[i] != ""; i += 2) {
261  string key = defaults[i];
262  string value = defaults[i + 1];
263  CPPUNIT_ASSERT_EQUAL(value, prop.getDefault(key));
264  CPPUNIT_ASSERT_EQUAL(value, prop.getProperty(key));
265  }
266  }
267 
276  {
277  map<string, string> defaults;
278  defaults["rtc.component.conf.path"] = "C:\\Program\\ Files\\OpenRTM-aist";
279  defaults["rtc.manager.arch"] = "i386";
280  defaults["rtc.manager.debug.level"] = "PARANOID";
281  defaults["rtc.manager.language"] = "C++";
282  defaults["rtc.manager.nameserver"] = "zonu.a02.aist.go.jp";
283  defaults["rtc.manager.opening_message"] = "Hello World";
284  defaults["rtc.manager.orb.name"] = "omniORB";
285  defaults["rtc.manager.orb.options"] = "IIOPAddrPort, -ORBendPoint, giop:tcp:";
286  defaults["rtc.manager.os.name"] = "FreeBSD";
287  defaults["rtc.manager.os.release"] = "6.1-RELEASE";
288  defaults["rtc.manager.subsystems"] = "Camera, Manipulator, Force Sensor";
289  defaults["rtc.openrtm.author"] = "Noriaki Ando";
290  defaults["rtc.openrtm.release"] = "aist";
291  defaults["rtc.openrtm.vendor"] = "AIST TaskIntelligence";
292  defaults["rtc.openrtm.version"] = "0.4.0";
293 
294  /* mapによるデフォルト値指定でPropertiesオブジェクトを生成する */
295  coil::Properties prop(defaults);
296  coil::Properties cprop(prop);
297 
298 
299  /* 各プロパティのデフォルト値および通常値がいずれも、コンストラクタで指定した値で取得されることを確認する */
300  for (map<string, string>::iterator it = defaults.begin(); it != defaults.end(); it++) {
301  string key = it->first;
302  string value = it->second;
303  CPPUNIT_ASSERT_EQUAL(value, cprop.getDefault(key));
304  CPPUNIT_ASSERT_EQUAL(value, cprop.getProperty(key));
305  }
306  }
307 
308 
317  {
318  map<string, string> defaults;
319  defaults["rtc.component.conf.path"] = "C:\\Program\\ Files\\OpenRTM-aist";
320  defaults["rtc.manager.arch"] = "i386";
321  defaults["rtc.manager.debug.level"] = "PARANOID";
322  defaults["rtc.manager.language"] = "C++";
323  defaults["rtc.manager.nameserver"] = "zonu.a02.aist.go.jp";
324  defaults["rtc.manager.opening_message"] = "Hello World";
325  defaults["rtc.manager.orb.name"] = "omniORB";
326  defaults["rtc.manager.orb.options"] = "IIOPAddrPort, -ORBendPoint, giop:tcp:";
327  defaults["rtc.manager.os.name"] = "FreeBSD";
328  defaults["rtc.manager.os.release"] = "6.1-RELEASE";
329  defaults["rtc.manager.subsystems"] = "Camera, Manipulator, Force Sensor";
330  defaults["rtc.openrtm.author"] = "Noriaki Ando";
331  defaults["rtc.openrtm.release"] = "aist";
332  defaults["rtc.openrtm.vendor"] = "AIST TaskIntelligence";
333  defaults["rtc.openrtm.version"] = "0.4.0";
334 
335  /* mapによるデフォルト値指定でPropertiesオブジェクトを生成する */
336  coil::Properties prop(defaults);
337  std::vector<coil::Properties*> leaf0(prop.getNode("rtc").getLeaf());
338  CPPUNIT_ASSERT(leaf0.size() == 3);
339 
340  /* rtc.managerノードを削除する */
341  delete &prop.getNode("rtc.manager");
342 
343  /* rtcノードからmanagerが削除されている事を確認する。*/
344  std::vector<coil::Properties*> leaf1(prop.getNode("rtc").getLeaf());
345  CPPUNIT_ASSERT(leaf1.size() == 2);
346  std::string getval(prop.getNode("rtc.manager").getValue());
347  CPPUNIT_ASSERT("" == getval);
348  }
349 
363  {
364  /* 代入元となるPropertiesを作成する */
365  coil::Properties propSrc;
366 
367  /* (1) デフォルト値、通常値のいずれも設定されている場合 */
368  string key1 = "key1";
369  string key1DefaultValue = "key1-default-value";
370  string key1Value = "key1-value";
371  propSrc.setDefault(key1, key1DefaultValue);
372  propSrc.setProperty(key1, key1Value);
373 
374  /* (2) デフォルト値のみ設定されており、通常値が設定されていない場合 */
375  string key2 = "key2";
376  string key2DefaultValue = "key2-default-value";
377  propSrc.setDefault(key2, key2DefaultValue);
378 
379  /* (3) デフォルト値が設定されていないが、通常値が設定されている場合 */
380  string key3 = "key3";
381  string key3Value = "key3-value";
382  propSrc.setProperty(key3, key3Value);
383 
384  /* 代入を行い、それぞれの場合で、正しく代入されたことを確認する */
386  prop = propSrc;
387 
388  CPPUNIT_ASSERT_EQUAL(key1DefaultValue, prop.getDefault(key1));
389  CPPUNIT_ASSERT_EQUAL(key1Value, prop.getProperty(key1));
390  CPPUNIT_ASSERT_EQUAL(key2DefaultValue, prop.getDefault(key2));
391  CPPUNIT_ASSERT_EQUAL(key2DefaultValue, prop.getProperty(key2));
392  CPPUNIT_ASSERT_EQUAL(EMPTY_STRING, prop.getDefault(key3));
393  CPPUNIT_ASSERT_EQUAL(key3Value, prop.getProperty(key3));
394  }
395 
396 
412  {
414 
415  prop.setDefault("property_1", "default_1");
416  prop.setProperty("property_1", "value_1");
417  prop.setDefault("property_2", "default_2");
418  prop.setProperty("property_3", "value_3");
419 
420  /* (1) デフォルト値が設定されており、かつ通常の値も設定されている */
421  /* 場合に、プロパティ値として正しく通常の値が取得されるか? */
422  string expected_1 = "value_1";
423  CPPUNIT_ASSERT_EQUAL(expected_1, prop.getProperty("property_1"));
424 
425  /* (2) デフォルト値が設定されているが、通常の値は設定されていない */
426  /*/ 場合に、プロパティ値として正しくデフォルト値が取得されるか? */
427  string expected_2 = "default_2";
428  CPPUNIT_ASSERT_EQUAL(expected_2, prop.getProperty("property_2"));
429 
430  /* (3) デフォルト値は設定されていないが、通常の値は設定されている */
431  /* 場合に、プロパティ値として正しく通常の値が取得されるか? */
432  string expected_3 = "value_3";
433  CPPUNIT_ASSERT_EQUAL(expected_3, prop.getProperty("property_3"));
434 
435  /* (4) デフォルト値、通常の値のいずれも設定されていない場合に、プ */
436  /* ロパティ値として正しく空文字列が取得されるか? */
437  string expected_4 = "";
438  CPPUNIT_ASSERT_EQUAL(expected_4, prop.getProperty("property_4"));
439  }
440 
441 
462  {
464 
465  string key1 = "key1";
466  string key1DefaultValue = "key1-default-value";
467  string key1Value = "key1-value";
468  prop.setDefault(key1, key1DefaultValue);
469  prop.setProperty(key1, key1Value);
470 
471  string key2 = "key2";
472  string key2DefaultValue = "key2-default-value";
473  prop.setDefault(key2, key2DefaultValue);
474 
475  string key3 = "key3";
476  string key3Value = "key3-value";
477  prop.setProperty(key3, key3Value);
478 
479  /* (1) デフォルト値が設定されており、かつ通常の値も設定されている */
480  /* 場合に、正しく設定されているデフォルト値を取得できるか? */
481  CPPUNIT_ASSERT_EQUAL(key1DefaultValue, prop.getDefault(key1));
482 
483  /* (2) デフォルト値が設定されているが、通常の値は設定されていない */
484  /* 場合に、正しく設定されているデフォルト値を取得できるか? */
485  CPPUNIT_ASSERT_EQUAL(key2DefaultValue, prop.getDefault(key2));
486 
487  /* (3) デフォルト値は設定されていないが、通常の値は設定されている */
488  /* 場合に、デフォルト値として空文字列が取得されるか? */
489  CPPUNIT_ASSERT_EQUAL(EMPTY_STRING, prop.getDefault(key3));
490 
491  /* (4) デフォルト値、通常の値のいずれも設定されていない場合に、デ */
492  /* フォルト値として空文字列が取得されるか? */
493  string keyNonExist = "key-non-exist";
494  CPPUNIT_ASSERT_EQUAL(EMPTY_STRING, prop.getDefault(keyNonExist));
495  }
496 
506  {
507  string key = "key";
508  string oldValue = "old-value";
509  string newValue = "new-value";
510 
512  prop.setProperty(key, oldValue);
513 
514  /* (1) 設定時に指定した値が、正しく設定されるか? */
515  CPPUNIT_ASSERT_EQUAL(oldValue, prop.getProperty(key));
516 
517  /* (2) 設定時の戻り値として、元の設定値が正しく取得されるか? */
518  CPPUNIT_ASSERT_EQUAL(oldValue, prop.setProperty(key, newValue));
519 
520  /* (1) 設定時に指定した値が、正しく設定されるか?(その2) */
521  CPPUNIT_ASSERT_EQUAL(newValue, prop.getProperty(key));
522  }
523 
524 
537  void test_list()
538  {
540  prop.setProperty("rtc.component.conf.path",
541  "C:\\Program\\ Files\\OpenRTM-aist");
542  prop.setProperty("rtc.manager.arch", "i386");
543  prop.setProperty("rtc.manager.debug.level", "PARANOID");
544  prop.setProperty("rtc.manager.language", "C++");
545  prop.setProperty("rtc.manager.nameserver", "zonu.a02.aist.go.jp");
546  prop.setProperty("rtc.manager.opening_message", "Hello World");
547  prop.setProperty("rtc.manager.orb.name", "omniORB");
548  prop.setProperty("rtc.manager.orb.options",
549  "IIOPAddrPort, -ORBendPoint, giop:tcp:");
550  prop.setProperty("rtc.manager.os.name", "FreeBSD");
551  prop.setProperty("rtc.manager.os.release", "6.1-RELEASE");
552  prop.setProperty("rtc.manager.subsystems",
553  "Camera, Manipulator, Force Sensor");
554  prop.setProperty("rtc.openrtm.author", "Noriaki Ando");
555  prop.setProperty("rtc.openrtm.release", "aist");
556  prop.setProperty("rtc.openrtm.vendor", "AIST TaskIntelligence");
557  prop.setProperty("rtc.openrtm.version", "0.4.0");
558 
559  std::ofstream outFile("listed.conf");
560  prop.list(outFile);
561  outFile.close();
562 
563  vector<string> expectedLines;
564  expectedLines.push_back("rtc.component.conf.path: C:\\\\Program\\\\ Files\\\\OpenRTM-aist");
565  expectedLines.push_back("rtc.manager.arch: i386");
566  expectedLines.push_back("rtc.manager.debug.level: PARANOID");
567  expectedLines.push_back("rtc.manager.language: C++");
568  expectedLines.push_back("rtc.manager.nameserver: zonu.a02.aist.go.jp");
569  expectedLines.push_back("rtc.manager.opening_message: Hello World");
570  expectedLines.push_back("rtc.manager.orb.name: omniORB");
571  expectedLines.push_back("rtc.manager.orb.options: IIOPAddrPort, -ORBendPoint, giop:tcp:");
572  expectedLines.push_back("rtc.manager.os.name: FreeBSD");
573  expectedLines.push_back("rtc.manager.os.release: 6.1-RELEASE");
574  expectedLines.push_back("rtc.manager.subsystems: Camera, Manipulator, Force Sensor");
575  expectedLines.push_back("rtc.openrtm.author: Noriaki Ando");
576  expectedLines.push_back("rtc.openrtm.release: aist");
577  expectedLines.push_back("rtc.openrtm.vendor: AIST TaskIntelligence");
578  expectedLines.push_back("rtc.openrtm.version: 0.4.0");
579 
580  vector<string> storedLines;
581  std::ifstream inFile("listed.conf");
582  string str;
583  while (getline(inFile, str))
584  {
585  storedLines.push_back(str);
586  }
587  inFile.close();
588 
589  /* ファイルに書き込まれた内容と期待値を比較する */
590  sort(expectedLines.begin(), expectedLines.end());
591  sort(storedLines.begin(), storedLines.end());
592  CPPUNIT_ASSERT_EQUAL(expectedLines.size(), storedLines.size());
593  for (vector<string>::size_type i = 0; i < expectedLines.size(); i++)
594  {
595  CPPUNIT_ASSERT_EQUAL(expectedLines[i], storedLines[i]);
596  }
597  }
598 
608  void test_load()
609  {
610  /* プロパティリストをファイルからPropertiesオブジェクトへ読み込む */
612  std::ifstream ifl("defaults.conf");
613  prop.load(ifl);
614  ifl.close();
615 
616  /* 期待値と比較して、正しく読み込まれたことを確認する */
617  map<string, string>::iterator expected;
618  for (expected = DEFAULTS_CONF.begin();
619  expected != DEFAULTS_CONF.end(); expected++) {
620  string key = expected->first;
621  string value = expected->second;
622  CPPUNIT_ASSERT_EQUAL(value, prop.getProperty(key));
623  }
624  }
625 
640  void test_store()
641  {
642  /* テスト用のプロパティを設定する */
644  prop.setProperty("rtc.component.conf.path",
645  "C:\\Program\\ Files\\OpenRTM-aist");
646  prop.setProperty("rtc.manager.arch", "i386");
647  prop.setProperty("rtc.manager.debug.level", "PARANOID");
648  prop.setProperty("rtc.manager.language", "C++");
649  prop.setProperty("rtc.manager.nameserver", "zonu.a02.aist.go.jp");
650  prop.setProperty("rtc.manager.opening_message", "Hello World");
651  prop.setProperty("rtc.manager.orb.name", "omniORB");
652  prop.setProperty("rtc.manager.orb.options",
653  "IIOPAddrPort, -ORBendPoint, giop:tcp:");
654  prop.setProperty("rtc.manager.os.name", "FreeBSD");
655  prop.setProperty("rtc.manager.os.release", "6.1-RELEASE");
656  prop.setProperty("rtc.manager.subsystems",
657  "Camera, Manipulator, Force Sensor");
658  prop.setProperty("rtc.openrtm.author", "Noriaki Ando");
659  prop.setProperty("rtc.openrtm.release", "aist");
660  prop.setProperty("rtc.openrtm.vendor", "AIST TaskIntelligence");
661  prop.setProperty("rtc.openrtm.version", "0.4.0");
662  prop.setProperty("hello", "\tHello\t");
663 
664  std::ofstream outFile("stored.conf");
665  prop.store(outFile, "stored data");
666  outFile.close();
667 
668  /* 比較のための期待値を準備する */
669  vector<string> expectedLines;
670  expectedLines.push_back("# stored data");
671  expectedLines.push_back("rtc.component.conf.path: C:\\\\Program\\\\ Files\\\\OpenRTM-aist");
672  expectedLines.push_back("rtc.manager.arch: i386");
673  expectedLines.push_back("rtc.manager.debug.level: PARANOID");
674  expectedLines.push_back("rtc.manager.language: C++");
675  expectedLines.push_back("rtc.manager.nameserver: zonu.a02.aist.go.jp");
676  expectedLines.push_back("rtc.manager.opening_message: Hello World");
677  expectedLines.push_back("rtc.manager.orb.name: omniORB");
678  expectedLines.push_back("rtc.manager.orb.options: IIOPAddrPort, -ORBendPoint, giop:tcp:");
679  expectedLines.push_back("rtc.manager.os.name: FreeBSD");
680  expectedLines.push_back("rtc.manager.os.release: 6.1-RELEASE");
681  expectedLines.push_back("rtc.manager.subsystems: Camera, Manipulator, Force Sensor");
682  expectedLines.push_back("rtc.openrtm.author: Noriaki Ando");
683  expectedLines.push_back("rtc.openrtm.release: aist");
684  expectedLines.push_back("rtc.openrtm.vendor: AIST TaskIntelligence");
685  expectedLines.push_back("rtc.openrtm.version: 0.4.0");
686  expectedLines.push_back("hello: \\tHello\\t");
687 
688  /* 出力されたファイルの中身を1行づつ読み込む */
689  vector<string> storedLines;
690  std::ifstream inFile("stored.conf");
691  string str;
692  while (getline(inFile, str)) {
693  storedLines.push_back(str);
694  }
695  inFile.close();
696 
697  /* ファイルに書き込まれた内容と期待値を比較する */
698  sort(expectedLines.begin(), expectedLines.end());
699  sort(storedLines.begin(), storedLines.end());
700  CPPUNIT_ASSERT_EQUAL(expectedLines.size(), storedLines.size());
701  for (vector<string>::size_type i = 0; i < expectedLines.size(); i++) {
702  CPPUNIT_ASSERT_EQUAL(expectedLines[i], storedLines[i]);
703  }
704  }
705 
706 
724  {
726 
727  /* (1) 通常のプロパティ値とデフォルト値の両方を設定する */
728  prop.setProperty("property_01", "value_01");
729  prop.setDefault("property_01", "default_01");
730 
731  /* (2) 通常のプロパティ値のみを設定する */
732  prop.setProperty("property_02", "value_02");
733 
734  /* (3) デフォルト値のみを設定する */
735  prop.setDefault("property_03", "default_03");
736 
737  /* (1),(2),(3)いずれの場合についてもキー名が取得されることを確認する */
738  vector<string> keys = prop.propertyNames();
739  CPPUNIT_ASSERT_EQUAL(3, (int) keys.size());
740  CPPUNIT_ASSERT(find(keys.begin(), keys.end(), "property_01")
741  != keys.end());
742  CPPUNIT_ASSERT(find(keys.begin(), keys.end(), "property_02")
743  != keys.end());
744  CPPUNIT_ASSERT(find(keys.begin(), keys.end(), "property_03")
745  != keys.end());
746  }
747 
748 
757  {
758 
759  string value("test");
760 
761  /* (1) キーを階層化していない場合 */
762  /* key,valueによるデフォルト値指定でPropertiesオブジェクトを生成する */
763  string key0("manager");
764  coil::Properties prop0(key0.c_str(),value.c_str());
765  string retkey(prop0.getName());
766  CPPUNIT_ASSERT_EQUAL(key0, retkey);
767 
768  /* (1) キーを階層化した場合 */
769  /* key,valueによるデフォルト値指定でPropertiesオブジェクトを生成する */
770  string key1("manager.hoge");
771  coil::Properties prop1(key1.c_str(),value.c_str());
772  retkey= prop1.getName();
773  CPPUNIT_ASSERT_EQUAL(key1, retkey);
774  }
775 
784  {
785  /* key,valueによるデフォルト値指定でPropertiesオブジェクトを生成する */
786  string key("manager");
787  string value("test.test");
788  coil::Properties prop(key.c_str(),value.c_str());
789 
790  /* コンストラクタで指定したプロパティの値が取得されることを確認する */
791  string retval(prop.getValue());
792  CPPUNIT_ASSERT_EQUAL(value, retval);
793  }
794 
803  {
805 
806  string key("property_1");
807  string value("default_1");
808  /* デフォルト値を設定する */
809  prop.setDefault(key.c_str(), value.c_str());
810 
811  /* デフォルト値を取得する */
812  string retval(prop.getNode(key.c_str()).getDefaultValue());
813  CPPUNIT_ASSERT_EQUAL(value, retval);
814  }
815 
824  {
825  map<string, string> defaults;
826  defaults["rtc.component.conf.path"] = "C:\\Program\\ Files\\OpenRTM-aist";
827  defaults["rtc.manager.arch"] = "i386";
828  defaults["rtc.manager.debug.level"] = "PARANOID";
829  defaults["rtc.manager.language"] = "C++";
830  defaults["rtc.manager.nameserver"] = "zonu.a02.aist.go.jp";
831  defaults["rtc.manager.opening_message"] = "Hello World";
832  defaults["rtc.manager.orb.name"] = "omniORB";
833  defaults["rtc.manager.orb.options"] = "IIOPAddrPort, -ORBendPoint, giop:tcp:";
834  defaults["rtc.manager.os.name"] = "FreeBSD";
835  defaults["rtc.manager.os.release"] = "6.1-RELEASE";
836  defaults["rtc.manager.subsystems"] = "Camera, Manipulator, Force Sensor";
837  defaults["rtc.openrtm.author"] = "Noriaki Ando";
838  defaults["rtc.openrtm.release"] = "aist";
839  defaults["rtc.openrtm.vendor"] = "AIST TaskIntelligence";
840  defaults["rtc.openrtm.version"] = "0.4.0";
841 
842  /* mapによるデフォルト値指定でPropertiesオブジェクトを生成する */
843  coil::Properties prop(defaults);
844 
845  /* getLeaf()で子要素を取得 */
846  std::vector<coil::Properties*> leaf(prop.getNode("rtc").getLeaf());
847  CPPUNIT_ASSERT(leaf[1]->getProperty("arch") == "i386");
848  CPPUNIT_ASSERT(leaf[1]->getProperty("debug.level") == "PARANOID");
849  }
850 
859  {
860  map<string, string> defaults;
861  defaults["rtc.component.conf.path"] = "C:\\Program\\ Files\\OpenRTM-aist";
862  defaults["rtc.manager.arch"] = "i386";
863  defaults["rtc.manager.debug.level"] = "PARANOID";
864  defaults["rtc.manager.language"] = "C++";
865  defaults["rtc.manager.nameserver"] = "zonu.a02.aist.go.jp";
866  defaults["rtc.manager.opening_message"] = "Hello World";
867  defaults["rtc.manager.orb.name"] = "omniORB";
868  defaults["rtc.manager.orb.options"] = "IIOPAddrPort, -ORBendPoint, giop:tcp:";
869  defaults["rtc.manager.os.name"] = "FreeBSD";
870  defaults["rtc.manager.os.release"] = "6.1-RELEASE";
871  defaults["rtc.manager.subsystems"] = "Camera, Manipulator, Force Sensor";
872  defaults["rtc.openrtm.author"] = "Noriaki Ando";
873  defaults["rtc.openrtm.release"] = "aist";
874  defaults["rtc.openrtm.vendor"] = "AIST TaskIntelligence";
875  defaults["rtc.openrtm.version"] = "0.4.0";
876 
877  /* mapによるデフォルト値指定でPropertiesオブジェクトを生成する */
878  coil::Properties prop(defaults);
879 
880  /* getLeaf()でルート要素を取得 */
881  const coil::Properties* root(prop.getNode("rtc.manager.os").getRoot());
882  CPPUNIT_ASSERT(root->getProperty("arch") == "i386");
883  CPPUNIT_ASSERT(root->getProperty("debug.level") == "PARANOID");
884  }
885 
894  {
895  map<string, string> defaults;
896  defaults["rtc.component.conf.path"] = "C:\\Program\\ Files\\OpenRTM-aist";
897  defaults["rtc.manager.arch"] = "i386";
898  defaults["rtc.manager.debug.level"] = "PARANOID";
899  defaults["rtc.manager.language"] = "C++";
900  defaults["rtc.manager.nameserver"] = "zonu.a02.aist.go.jp";
901  defaults["rtc.manager.opening_message"] = "Hello World";
902  defaults["rtc.manager.orb.name"] = "omniORB";
903  defaults["rtc.manager.orb.options"] = "IIOPAddrPort, -ORBendPoint, giop:tcp:";
904  defaults["rtc.manager.os.name"] = "FreeBSD";
905  defaults["rtc.manager.os.release"] = "6.1-RELEASE";
906  defaults["rtc.manager.subsystems"] = "Camera, Manipulator, Force Sensor";
907  defaults["rtc.openrtm.author"] = "Noriaki Ando";
908  defaults["rtc.openrtm.release"] = "aist";
909  defaults["rtc.openrtm.vendor"] = "AIST TaskIntelligence";
910  defaults["rtc.openrtm.version"] = "0.4.0";
911 
912  // const std::string&
913  // Properties::operator[](const std::string& key) const
914  // のテスト const coil::Properties prop0(defaults); const string& retval0(prop0["rtc.manager.arch"]); CPPUNIT_ASSERT(retval0 == "i386"); // std::string& // Properties::operator[](const std::string& key) // のテスト coil::Properties prop1(defaults); string retval1(prop1["rtc.manager.arch"]); CPPUNIT_ASSERT(retval1 == "i386"); } /*! * @brief setDefaults()メソッドのテスト * * <ul> * <li>デフォルト値を登録し、その値が正しく取得できるか?</li> * </ul> */ void test_setDefaults() { const char* defaults[] = { "rtc.component.conf.path", "C:\\Program\\ Files\\OpenRTM-aist", "rtc.manager.arch", "i386", "rtc.manager.debug.level", "PARANOID", "rtc.manager.language", "C++", "rtc.manager.nameserver", "zonu.a02.aist.go.jp", "rtc.manager.opening_message", "Hello World", "rtc.manager.orb.name", "omniORB", "rtc.manager.orb.options", "IIOPAddrPort, -ORBendPoint, giop:tcp:", "rtc.manager.os.name", "FreeBSD", "rtc.manager.os.release", "6.1-RELEASE", "rtc.manager.subsystems", "Camera, Manipulator, Force Sensor", "rtc.openrtm.author", "Noriaki Ando", "rtc.openrtm.release", "aist", "rtc.openrtm.vendor", "AIST TaskIntelligence", "rtc.openrtm.version", "0.4.0", "" }; coil::Properties prop; prop.setDefaults(defaults); /* // 各プロパティのデフォルト値がsetDefaultsで指定した値で取得されることを確認する */ for (int i = 0; defaults[i] != ""; i += 2) { string key = defaults[i]; string value = defaults[i + 1]; CPPUNIT_ASSERT_EQUAL(value, prop.getDefault(key)); } } /*! * @brief size()メソッドのテスト * * <ul> * <li>プロパティの数が正しく取得できるか?</li> * </ul> */ void test_size() { map<string, string> defaults; defaults["rtc.component.conf.path"] = "C:\\Program\\ Files\\OpenRTM-aist"; defaults["rtc.manager.arch"] = "i386"; defaults["rtc.manager.debug.level"] = "PARANOID"; defaults["rtc.manager.language"] = "C++"; defaults["rtc.manager.nameserver"] = "zonu.a02.aist.go.jp"; defaults["rtc.manager.opening_message"] = "Hello World"; defaults["rtc.manager.orb.name"] = "omniORB"; defaults["rtc.manager.orb.options"] = "IIOPAddrPort, -ORBendPoint, giop:tcp:"; defaults["rtc.manager.os.name"] = "FreeBSD"; defaults["rtc.manager.os.release"] = "6.1-RELEASE"; defaults["rtc.manager.subsystems"] = "Camera, Manipulator, Force Sensor"; defaults["rtc.openrtm.author"] = "Noriaki Ando"; defaults["rtc.openrtm.release"] = "aist"; defaults["rtc.openrtm.vendor"] = "AIST TaskIntelligence"; defaults["rtc.openrtm.version"] = "0.4.0"; coil::Properties prop(defaults); /* (1) コンストラクタ引数にて指定したプロパティの数が正しく取得できるか? */ CPPUNIT_ASSERT(15 == prop.size()); /* (2) 新たに追加後のプロパティの数が正しく取得できるか? */ string key = "key"; string newValue = "new-value"; prop.setProperty(key, newValue); CPPUNIT_ASSERT(16 == prop.size()); } /*! * @brief findNode()メソッドのテスト * * <ul> * <li>キーで指定したノードが正しく検索できるか?</li> * </ul> */ void test_findNode() { map<string, string> defaults; defaults["rtc.component.conf.path"] = "C:\\Program\\ Files\\OpenRTM-aist"; defaults["rtc.manager.arch"] = "i386"; defaults["rtc.manager.debug.level"] = "PARANOID"; defaults["rtc.manager.language"] = "C++"; defaults["rtc.manager.nameserver"] = "zonu.a02.aist.go.jp"; defaults["rtc.manager.opening_message"] = "Hello World"; defaults["rtc.manager.orb.name"] = "omniORB"; defaults["rtc.manager.orb.options"] = "IIOPAddrPort, -ORBendPoint, giop:tcp:"; defaults["rtc.manager.os.name"] = "FreeBSD"; defaults["rtc.manager.os.release"] = "6.1-RELEASE"; defaults["rtc.manager.subsystems"] = "Camera, Manipulator, Force Sensor"; defaults["rtc.openrtm.author"] = "Noriaki Ando"; defaults["rtc.openrtm.release"] = "aist"; defaults["rtc.openrtm.vendor"] = "AIST TaskIntelligence"; defaults["rtc.openrtm.version"] = "0.4.0"; /* mapによるデフォルト値指定でPropertiesオブジェクトを生成する */ coil::Properties prop(defaults); /* (1) 存在するノードを指定しノードを取得 */ CPPUNIT_ASSERT(prop.findNode("rtc.manager")->getProperty("arch") == "i386"); CPPUNIT_ASSERT(prop.findNode("rtc.manager")->getProperty("debug.level") == "PARANOID"); CPPUNIT_ASSERT(prop.findNode("rtc.manager") != NULL); /* (2) 存在しないノードを指定しノードを取得 */ CPPUNIT_ASSERT(prop.findNode("manager") == NULL); CPPUNIT_ASSERT(prop.findNode("rtc.MANAGER") == NULL); } /*! * @brief getNode()メソッドのテスト * * <ul> * <li>キーで指定したノードが正しく取得できるか?</li> * </ul> */ void test_getNode() { map<string, string> defaults; defaults["rtc.component.conf.path"] = "C:\\Program\\ Files\\OpenRTM-aist"; defaults["rtc.manager.arch"] = "i386"; defaults["rtc.manager.debug.level"] = "PARANOID"; defaults["rtc.manager.language"] = "C++"; defaults["rtc.manager.nameserver"] = "zonu.a02.aist.go.jp"; defaults["rtc.manager.opening_message"] = "Hello World"; defaults["rtc.manager.orb.name"] = "omniORB"; defaults["rtc.manager.orb.options"] = "IIOPAddrPort, -ORBendPoint, giop:tcp:"; defaults["rtc.manager.os.name"] = "FreeBSD"; defaults["rtc.manager.os.release"] = "6.1-RELEASE"; defaults["rtc.manager.subsystems"] = "Camera, Manipulator, Force Sensor"; defaults["rtc.openrtm.author"] = "Noriaki Ando"; defaults["rtc.openrtm.release"] = "aist"; defaults["rtc.openrtm.vendor"] = "AIST TaskIntelligence"; defaults["rtc.openrtm.version"] = "0.4.0"; /* mapによるデフォルト値指定でPropertiesオブジェクトを生成する */ coil::Properties prop(defaults); /* (1) 既に存在するノードを取得 */ CPPUNIT_ASSERT(prop.getNode("rtc.manager").getProperty("arch") == "i386"); CPPUNIT_ASSERT(prop.getNode("rtc.manager").getProperty("debug.level") == "PARANOID"); /* (2) 存在しないノードを取得 */ std::string getval(prop.getNode("manager").getValue()); CPPUNIT_ASSERT(getval == ""); // CPPUNIT_ASSERT(prop.getNode("rtc.manager") != NULL); } /*! * @brief removeNode()メソッドのテスト * * <ul> * <li>指定したノードが正しく削除できるか?</li> * </ul> */ void test_removeNode() { map<string, string> defaults; defaults["rtc.component.conf.path"] = "C:\\Program\\ Files\\OpenRTM-aist"; defaults["rtc.manager.arch"] = "i386"; defaults["rtc.manager.debug.level"] = "PARANOID"; defaults["rtc.manager.language"] = "C++"; defaults["rtc.manager.nameserver"] = "zonu.a02.aist.go.jp"; defaults["rtc.manager.opening_message"] = "Hello World"; defaults["rtc.manager.orb.name"] = "omniORB"; defaults["rtc.manager.orb.options"] = "IIOPAddrPort, -ORBendPoint, giop:tcp:"; defaults["rtc.manager.os.name"] = "FreeBSD"; defaults["rtc.manager.os.release"] = "6.1-RELEASE"; defaults["rtc.manager.subsystems"] = "Camera, Manipulator, Force Sensor"; defaults["rtc.openrtm.author"] = "Noriaki Ando"; defaults["rtc.openrtm.release"] = "aist"; defaults["rtc.openrtm.vendor"] = "AIST TaskIntelligence"; defaults["rtc.openrtm.version"] = "0.4.0"; /* mapによるデフォルト値指定でPropertiesオブジェクトを生成する */ coil::Properties prop(defaults); /* "rtc.manager"のように指定した場合、削除できない。 */ CPPUNIT_ASSERT(prop.removeNode("rtc.manager") == NULL); /* "rtc.manager"ノードの削除 */ CPPUNIT_ASSERT(prop.getNode("rtc").removeNode("manager") != NULL); /* (1) 削除したノードを検索 */ CPPUNIT_ASSERT(prop.findNode("rtc.manager") == NULL); /* (2) 削除したノードを取得 */ std::string getval0(prop.getNode("rtc.manager").getValue()); CPPUNIT_ASSERT(getval0 == ""); } /*! * @brief hasKey()メソッドのテスト * * <ul> * <li>子ノードにkeyがあるかどうか?</li> * </ul> */ void test_hasKey() { map<string, string> defaults; defaults["rtc.component.conf.path"] = "C:\\Program\\ Files\\OpenRTM-aist"; defaults["rtc.manager.arch"] = "i386"; defaults["rtc.manager.debug.level"] = "PARANOID"; defaults["rtc.manager.language"] = "C++"; defaults["rtc.manager.nameserver"] = "zonu.a02.aist.go.jp"; defaults["rtc.manager.opening_message"] = "Hello World"; defaults["rtc.manager.orb.name"] = "omniORB"; defaults["rtc.manager.orb.options"] = "IIOPAddrPort, -ORBendPoint, giop:tcp:"; defaults["rtc.manager.os.name"] = "FreeBSD"; defaults["rtc.manager.os.release"] = "6.1-RELEASE"; defaults["rtc.manager.subsystems"] = "Camera, Manipulator, Force Sensor"; defaults["rtc.openrtm.author"] = "Noriaki Ando"; defaults["rtc.openrtm.release"] = "aist"; defaults["rtc.openrtm.vendor"] = "AIST TaskIntelligence"; defaults["rtc.openrtm.version"] = "0.4.0"; /* mapによるデフォルト値指定でPropertiesオブジェクトを生成する */ coil::Properties prop(defaults); /* (1) 存在するキーでテスト */ CPPUNIT_ASSERT(prop.hasKey("rtc") != NULL); /* (2) 存在しないキーでテスト */ CPPUNIT_ASSERT(prop.hasKey("hoge") == NULL); /* (3) 存在するキーでテスト */ CPPUNIT_ASSERT(prop.getNode("rtc").hasKey("manager") != NULL); /* (4) 存在しないキーでテスト */ CPPUNIT_ASSERT(prop.getNode("rtc").hasKey("hoge") == NULL); } /*! * @brief clear()メソッドのテスト * * <ul> * <li>子ノードがすべて削除されるかどうか?</li> * </ul> */ void test_clear() { map<string, string> defaults; defaults["rtc.component.conf.path"] = "C:\\Program\\ Files\\OpenRTM-aist"; defaults["rtc.manager.arch"] = "i386"; defaults["rtc.manager.debug.level"] = "PARANOID"; defaults["rtc.manager.language"] = "C++"; defaults["rtc.manager.nameserver"] = "zonu.a02.aist.go.jp"; defaults["rtc.manager.opening_message"] = "Hello World"; defaults["rtc.manager.orb.name"] = "omniORB"; defaults["rtc.manager.orb.options"] = "IIOPAddrPort, -ORBendPoint, giop:tcp:"; defaults["rtc.manager.os.name"] = "FreeBSD"; defaults["rtc.manager.os.release"] = "6.1-RELEASE"; defaults["rtc.manager.subsystems"] = "Camera, Manipulator, Force Sensor"; defaults["rtc.openrtm.author"] = "Noriaki Ando"; defaults["rtc.openrtm.release"] = "aist"; defaults["rtc.openrtm.vendor"] = "AIST TaskIntelligence"; defaults["rtc.openrtm.version"] = "0.4.0"; /* mapによるデフォルト値指定でPropertiesオブジェクトを生成する */ coil::Properties prop(defaults); prop.getNode("rtc.manager.os").clear(); /* (1) "rtc.manager.os"以下のノードが削除されているか? */ CPPUNIT_ASSERT(prop.findNode("rtc.manager.os.name") == NULL); CPPUNIT_ASSERT(prop.findNode("rtc.manager.os.release") == NULL); /* (2) "rtc.manager.os"以外のノードは削除されていないか? */ CPPUNIT_ASSERT(prop.findNode("rtc.manager.arch") != NULL); CPPUNIT_ASSERT(prop.findNode("rtc.manager.orb") != NULL); /* (3) すべてのノードが削除されているか? */ prop.clear(); CPPUNIT_ASSERT(prop.findNode("rtc.manager.os") == NULL); CPPUNIT_ASSERT(prop.findNode("rtc.manager") == NULL); CPPUNIT_ASSERT(prop.findNode("rtc.openrtm") == NULL); CPPUNIT_ASSERT(prop.findNode("rtc.component") == NULL); CPPUNIT_ASSERT(prop.findNode("rtc") == NULL); } /*! * @brief createNode()のテスト * * <ul> * * <li>デフォルト値が設定されており、かつ通常の値も設定されている場 * 合に、当該キー名の新規ノード作成が、意図どおり失敗するか?</li> * * <li>デフォルト値が設定されているが、通常の値は設定されていない場 * 合に、当該キー名の新規ノード作成が、意図どおり失敗するか?</li> * * <li>デフォルト値は設定されていないが、通常の値は設定されている場 * 合に、当該キー名の新規ノード作成が、意図どおり失敗するか?</li> * * <li>デフォルト値、通常の値のいずれも設定されていない場合に、新規 * ノード作成が成功するか?</li> * * </ul> */ void test_createNode() { coil::Properties prop; string key1 = "key1"; string key1DefaultValue = "key1-default-value"; string key1Value = "key1-value"; prop.setDefault(key1, key1DefaultValue); prop.setProperty(key1, key1Value); string key2 = "key2"; string key2DefaultValue = "key2-default-value"; prop.setDefault(key2, key2DefaultValue); string key3 = "key3"; string key3Value = "key3-value"; prop.setProperty(key3, key3Value); /* // (1) デフォルト値が設定されており、かつ通常の値も設定されている // 場合に、当該キー名の新規ノード作成が、意図どおり失敗するか? */ CPPUNIT_ASSERT(! prop.createNode(key1.c_str())); /* // (2) デフォルト値が設定されているが、通常の値は設定されていない // 場合に、当該キー名の新規ノード作成が、意図どおり失敗するか? */ CPPUNIT_ASSERT(! prop.createNode(key2.c_str())); /* // (3) デフォルト値は設定されていないが、通常の値は設定されている // 場合に、当該キー名の新規ノード作成が、意図どおり失敗するか? */ CPPUNIT_ASSERT(! prop.createNode(key3.c_str())); /* // (4) デフォルト値、通常の値のいずれも設定されていない場合に、新 // 規ノード作成が成功するか? */ string keyNonExist = "key-non-exist"; CPPUNIT_ASSERT(prop.createNode(keyNonExist.c_str())); } /*! * @brief <<演算子のテスト * * <ul> * * <li>デフォルト値は、入力されないことを確認する
915  const coil::Properties prop0(defaults);
916  const string& retval0(prop0["rtc.manager.arch"]);
917  CPPUNIT_ASSERT(retval0 == "i386");
918 
919  // std::string&
920  // Properties::operator[](const std::string& key)
921  // のテスト coil::Properties prop1(defaults); string retval1(prop1["rtc.manager.arch"]); CPPUNIT_ASSERT(retval1 == "i386"); } /*! * @brief setDefaults()メソッドのテスト * * <ul> * <li>デフォルト値を登録し、その値が正しく取得できるか?</li> * </ul> */ void test_setDefaults() { const char* defaults[] = { "rtc.component.conf.path", "C:\\Program\\ Files\\OpenRTM-aist", "rtc.manager.arch", "i386", "rtc.manager.debug.level", "PARANOID", "rtc.manager.language", "C++", "rtc.manager.nameserver", "zonu.a02.aist.go.jp", "rtc.manager.opening_message", "Hello World", "rtc.manager.orb.name", "omniORB", "rtc.manager.orb.options", "IIOPAddrPort, -ORBendPoint, giop:tcp:", "rtc.manager.os.name", "FreeBSD", "rtc.manager.os.release", "6.1-RELEASE", "rtc.manager.subsystems", "Camera, Manipulator, Force Sensor", "rtc.openrtm.author", "Noriaki Ando", "rtc.openrtm.release", "aist", "rtc.openrtm.vendor", "AIST TaskIntelligence", "rtc.openrtm.version", "0.4.0", "" }; coil::Properties prop; prop.setDefaults(defaults); /* // 各プロパティのデフォルト値がsetDefaultsで指定した値で取得されることを確認する */ for (int i = 0; defaults[i] != ""; i += 2) { string key = defaults[i]; string value = defaults[i + 1]; CPPUNIT_ASSERT_EQUAL(value, prop.getDefault(key)); } } /*! * @brief size()メソッドのテスト * * <ul> * <li>プロパティの数が正しく取得できるか?</li> * </ul> */ void test_size() { map<string, string> defaults; defaults["rtc.component.conf.path"] = "C:\\Program\\ Files\\OpenRTM-aist"; defaults["rtc.manager.arch"] = "i386"; defaults["rtc.manager.debug.level"] = "PARANOID"; defaults["rtc.manager.language"] = "C++"; defaults["rtc.manager.nameserver"] = "zonu.a02.aist.go.jp"; defaults["rtc.manager.opening_message"] = "Hello World"; defaults["rtc.manager.orb.name"] = "omniORB"; defaults["rtc.manager.orb.options"] = "IIOPAddrPort, -ORBendPoint, giop:tcp:"; defaults["rtc.manager.os.name"] = "FreeBSD"; defaults["rtc.manager.os.release"] = "6.1-RELEASE"; defaults["rtc.manager.subsystems"] = "Camera, Manipulator, Force Sensor"; defaults["rtc.openrtm.author"] = "Noriaki Ando"; defaults["rtc.openrtm.release"] = "aist"; defaults["rtc.openrtm.vendor"] = "AIST TaskIntelligence"; defaults["rtc.openrtm.version"] = "0.4.0"; coil::Properties prop(defaults); /* (1) コンストラクタ引数にて指定したプロパティの数が正しく取得できるか? */ CPPUNIT_ASSERT(15 == prop.size()); /* (2) 新たに追加後のプロパティの数が正しく取得できるか? */ string key = "key"; string newValue = "new-value"; prop.setProperty(key, newValue); CPPUNIT_ASSERT(16 == prop.size()); } /*! * @brief findNode()メソッドのテスト * * <ul> * <li>キーで指定したノードが正しく検索できるか?</li> * </ul> */ void test_findNode() { map<string, string> defaults; defaults["rtc.component.conf.path"] = "C:\\Program\\ Files\\OpenRTM-aist"; defaults["rtc.manager.arch"] = "i386"; defaults["rtc.manager.debug.level"] = "PARANOID"; defaults["rtc.manager.language"] = "C++"; defaults["rtc.manager.nameserver"] = "zonu.a02.aist.go.jp"; defaults["rtc.manager.opening_message"] = "Hello World"; defaults["rtc.manager.orb.name"] = "omniORB"; defaults["rtc.manager.orb.options"] = "IIOPAddrPort, -ORBendPoint, giop:tcp:"; defaults["rtc.manager.os.name"] = "FreeBSD"; defaults["rtc.manager.os.release"] = "6.1-RELEASE"; defaults["rtc.manager.subsystems"] = "Camera, Manipulator, Force Sensor"; defaults["rtc.openrtm.author"] = "Noriaki Ando"; defaults["rtc.openrtm.release"] = "aist"; defaults["rtc.openrtm.vendor"] = "AIST TaskIntelligence"; defaults["rtc.openrtm.version"] = "0.4.0"; /* mapによるデフォルト値指定でPropertiesオブジェクトを生成する */ coil::Properties prop(defaults); /* (1) 存在するノードを指定しノードを取得 */ CPPUNIT_ASSERT(prop.findNode("rtc.manager")->getProperty("arch") == "i386"); CPPUNIT_ASSERT(prop.findNode("rtc.manager")->getProperty("debug.level") == "PARANOID"); CPPUNIT_ASSERT(prop.findNode("rtc.manager") != NULL); /* (2) 存在しないノードを指定しノードを取得 */ CPPUNIT_ASSERT(prop.findNode("manager") == NULL); CPPUNIT_ASSERT(prop.findNode("rtc.MANAGER") == NULL); } /*! * @brief getNode()メソッドのテスト * * <ul> * <li>キーで指定したノードが正しく取得できるか?</li> * </ul> */ void test_getNode() { map<string, string> defaults; defaults["rtc.component.conf.path"] = "C:\\Program\\ Files\\OpenRTM-aist"; defaults["rtc.manager.arch"] = "i386"; defaults["rtc.manager.debug.level"] = "PARANOID"; defaults["rtc.manager.language"] = "C++"; defaults["rtc.manager.nameserver"] = "zonu.a02.aist.go.jp"; defaults["rtc.manager.opening_message"] = "Hello World"; defaults["rtc.manager.orb.name"] = "omniORB"; defaults["rtc.manager.orb.options"] = "IIOPAddrPort, -ORBendPoint, giop:tcp:"; defaults["rtc.manager.os.name"] = "FreeBSD"; defaults["rtc.manager.os.release"] = "6.1-RELEASE"; defaults["rtc.manager.subsystems"] = "Camera, Manipulator, Force Sensor"; defaults["rtc.openrtm.author"] = "Noriaki Ando"; defaults["rtc.openrtm.release"] = "aist"; defaults["rtc.openrtm.vendor"] = "AIST TaskIntelligence"; defaults["rtc.openrtm.version"] = "0.4.0"; /* mapによるデフォルト値指定でPropertiesオブジェクトを生成する */ coil::Properties prop(defaults); /* (1) 既に存在するノードを取得 */ CPPUNIT_ASSERT(prop.getNode("rtc.manager").getProperty("arch") == "i386"); CPPUNIT_ASSERT(prop.getNode("rtc.manager").getProperty("debug.level") == "PARANOID"); /* (2) 存在しないノードを取得 */ std::string getval(prop.getNode("manager").getValue()); CPPUNIT_ASSERT(getval == ""); // CPPUNIT_ASSERT(prop.getNode("rtc.manager") != NULL); } /*! * @brief removeNode()メソッドのテスト * * <ul> * <li>指定したノードが正しく削除できるか?</li> * </ul> */ void test_removeNode() { map<string, string> defaults; defaults["rtc.component.conf.path"] = "C:\\Program\\ Files\\OpenRTM-aist"; defaults["rtc.manager.arch"] = "i386"; defaults["rtc.manager.debug.level"] = "PARANOID"; defaults["rtc.manager.language"] = "C++"; defaults["rtc.manager.nameserver"] = "zonu.a02.aist.go.jp"; defaults["rtc.manager.opening_message"] = "Hello World"; defaults["rtc.manager.orb.name"] = "omniORB"; defaults["rtc.manager.orb.options"] = "IIOPAddrPort, -ORBendPoint, giop:tcp:"; defaults["rtc.manager.os.name"] = "FreeBSD"; defaults["rtc.manager.os.release"] = "6.1-RELEASE"; defaults["rtc.manager.subsystems"] = "Camera, Manipulator, Force Sensor"; defaults["rtc.openrtm.author"] = "Noriaki Ando"; defaults["rtc.openrtm.release"] = "aist"; defaults["rtc.openrtm.vendor"] = "AIST TaskIntelligence"; defaults["rtc.openrtm.version"] = "0.4.0"; /* mapによるデフォルト値指定でPropertiesオブジェクトを生成する */ coil::Properties prop(defaults); /* "rtc.manager"のように指定した場合、削除できない。 */ CPPUNIT_ASSERT(prop.removeNode("rtc.manager") == NULL); /* "rtc.manager"ノードの削除 */ CPPUNIT_ASSERT(prop.getNode("rtc").removeNode("manager") != NULL); /* (1) 削除したノードを検索 */ CPPUNIT_ASSERT(prop.findNode("rtc.manager") == NULL); /* (2) 削除したノードを取得 */ std::string getval0(prop.getNode("rtc.manager").getValue()); CPPUNIT_ASSERT(getval0 == ""); } /*! * @brief hasKey()メソッドのテスト * * <ul> * <li>子ノードにkeyがあるかどうか?</li> * </ul> */ void test_hasKey() { map<string, string> defaults; defaults["rtc.component.conf.path"] = "C:\\Program\\ Files\\OpenRTM-aist"; defaults["rtc.manager.arch"] = "i386"; defaults["rtc.manager.debug.level"] = "PARANOID"; defaults["rtc.manager.language"] = "C++"; defaults["rtc.manager.nameserver"] = "zonu.a02.aist.go.jp"; defaults["rtc.manager.opening_message"] = "Hello World"; defaults["rtc.manager.orb.name"] = "omniORB"; defaults["rtc.manager.orb.options"] = "IIOPAddrPort, -ORBendPoint, giop:tcp:"; defaults["rtc.manager.os.name"] = "FreeBSD"; defaults["rtc.manager.os.release"] = "6.1-RELEASE"; defaults["rtc.manager.subsystems"] = "Camera, Manipulator, Force Sensor"; defaults["rtc.openrtm.author"] = "Noriaki Ando"; defaults["rtc.openrtm.release"] = "aist"; defaults["rtc.openrtm.vendor"] = "AIST TaskIntelligence"; defaults["rtc.openrtm.version"] = "0.4.0"; /* mapによるデフォルト値指定でPropertiesオブジェクトを生成する */ coil::Properties prop(defaults); /* (1) 存在するキーでテスト */ CPPUNIT_ASSERT(prop.hasKey("rtc") != NULL); /* (2) 存在しないキーでテスト */ CPPUNIT_ASSERT(prop.hasKey("hoge") == NULL); /* (3) 存在するキーでテスト */ CPPUNIT_ASSERT(prop.getNode("rtc").hasKey("manager") != NULL); /* (4) 存在しないキーでテスト */ CPPUNIT_ASSERT(prop.getNode("rtc").hasKey("hoge") == NULL); } /*! * @brief clear()メソッドのテスト * * <ul> * <li>子ノードがすべて削除されるかどうか?</li> * </ul> */ void test_clear() { map<string, string> defaults; defaults["rtc.component.conf.path"] = "C:\\Program\\ Files\\OpenRTM-aist"; defaults["rtc.manager.arch"] = "i386"; defaults["rtc.manager.debug.level"] = "PARANOID"; defaults["rtc.manager.language"] = "C++"; defaults["rtc.manager.nameserver"] = "zonu.a02.aist.go.jp"; defaults["rtc.manager.opening_message"] = "Hello World"; defaults["rtc.manager.orb.name"] = "omniORB"; defaults["rtc.manager.orb.options"] = "IIOPAddrPort, -ORBendPoint, giop:tcp:"; defaults["rtc.manager.os.name"] = "FreeBSD"; defaults["rtc.manager.os.release"] = "6.1-RELEASE"; defaults["rtc.manager.subsystems"] = "Camera, Manipulator, Force Sensor"; defaults["rtc.openrtm.author"] = "Noriaki Ando"; defaults["rtc.openrtm.release"] = "aist"; defaults["rtc.openrtm.vendor"] = "AIST TaskIntelligence"; defaults["rtc.openrtm.version"] = "0.4.0"; /* mapによるデフォルト値指定でPropertiesオブジェクトを生成する */ coil::Properties prop(defaults); prop.getNode("rtc.manager.os").clear(); /* (1) "rtc.manager.os"以下のノードが削除されているか? */ CPPUNIT_ASSERT(prop.findNode("rtc.manager.os.name") == NULL); CPPUNIT_ASSERT(prop.findNode("rtc.manager.os.release") == NULL); /* (2) "rtc.manager.os"以外のノードは削除されていないか? */ CPPUNIT_ASSERT(prop.findNode("rtc.manager.arch") != NULL); CPPUNIT_ASSERT(prop.findNode("rtc.manager.orb") != NULL); /* (3) すべてのノードが削除されているか? */ prop.clear(); CPPUNIT_ASSERT(prop.findNode("rtc.manager.os") == NULL); CPPUNIT_ASSERT(prop.findNode("rtc.manager") == NULL); CPPUNIT_ASSERT(prop.findNode("rtc.openrtm") == NULL); CPPUNIT_ASSERT(prop.findNode("rtc.component") == NULL); CPPUNIT_ASSERT(prop.findNode("rtc") == NULL); } /*! * @brief createNode()のテスト * * <ul> * * <li>デフォルト値が設定されており、かつ通常の値も設定されている場 * 合に、当該キー名の新規ノード作成が、意図どおり失敗するか?</li> * * <li>デフォルト値が設定されているが、通常の値は設定されていない場 * 合に、当該キー名の新規ノード作成が、意図どおり失敗するか?</li> * * <li>デフォルト値は設定されていないが、通常の値は設定されている場 * 合に、当該キー名の新規ノード作成が、意図どおり失敗するか?</li> * * <li>デフォルト値、通常の値のいずれも設定されていない場合に、新規 * ノード作成が成功するか?</li> * * </ul> */ void test_createNode() { coil::Properties prop; string key1 = "key1"; string key1DefaultValue = "key1-default-value"; string key1Value = "key1-value"; prop.setDefault(key1, key1DefaultValue); prop.setProperty(key1, key1Value); string key2 = "key2"; string key2DefaultValue = "key2-default-value"; prop.setDefault(key2, key2DefaultValue); string key3 = "key3"; string key3Value = "key3-value"; prop.setProperty(key3, key3Value); /* // (1) デフォルト値が設定されており、かつ通常の値も設定されている // 場合に、当該キー名の新規ノード作成が、意図どおり失敗するか? */ CPPUNIT_ASSERT(! prop.createNode(key1.c_str())); /* // (2) デフォルト値が設定されているが、通常の値は設定されていない // 場合に、当該キー名の新規ノード作成が、意図どおり失敗するか? */ CPPUNIT_ASSERT(! prop.createNode(key2.c_str())); /* // (3) デフォルト値は設定されていないが、通常の値は設定されている // 場合に、当該キー名の新規ノード作成が、意図どおり失敗するか? */ CPPUNIT_ASSERT(! prop.createNode(key3.c_str())); /* // (4) デフォルト値、通常の値のいずれも設定されていない場合に、新 // 規ノード作成が成功するか? */ string keyNonExist = "key-non-exist"; CPPUNIT_ASSERT(prop.createNode(keyNonExist.c_str())); } /*! * @brief <<演算子のテスト * * <ul> * * <li>デフォルト値は、入力されないことを確認する
922  coil::Properties prop1(defaults);
923  string retval1(prop1["rtc.manager.arch"]);
924  CPPUNIT_ASSERT(retval1 == "i386");
925 
926  }
927 
936  {
937  const char* defaults[] = {
938  "rtc.component.conf.path", "C:\\Program\\ Files\\OpenRTM-aist",
939  "rtc.manager.arch", "i386",
940  "rtc.manager.debug.level", "PARANOID",
941  "rtc.manager.language", "C++",
942  "rtc.manager.nameserver", "zonu.a02.aist.go.jp",
943  "rtc.manager.opening_message", "Hello World",
944  "rtc.manager.orb.name", "omniORB",
945  "rtc.manager.orb.options", "IIOPAddrPort, -ORBendPoint, giop:tcp:",
946  "rtc.manager.os.name", "FreeBSD",
947  "rtc.manager.os.release", "6.1-RELEASE",
948  "rtc.manager.subsystems", "Camera, Manipulator, Force Sensor",
949  "rtc.openrtm.author", "Noriaki Ando",
950  "rtc.openrtm.release", "aist",
951  "rtc.openrtm.vendor", "AIST TaskIntelligence",
952  "rtc.openrtm.version", "0.4.0",
953  ""
954  };
955 
957  prop.setDefaults(defaults);
958 
959  /*
960  // 各プロパティのデフォルト値がsetDefaultsで指定した値で取得されることを確認する */ for (int i = 0; defaults[i] != ""; i += 2) { string key = defaults[i]; string value = defaults[i + 1]; CPPUNIT_ASSERT_EQUAL(value, prop.getDefault(key)); } } /*! * @brief size()メソッドのテスト * * <ul> * <li>プロパティの数が正しく取得できるか?</li> * </ul> */ void test_size() { map<string, string> defaults; defaults["rtc.component.conf.path"] = "C:\\Program\\ Files\\OpenRTM-aist"; defaults["rtc.manager.arch"] = "i386"; defaults["rtc.manager.debug.level"] = "PARANOID"; defaults["rtc.manager.language"] = "C++"; defaults["rtc.manager.nameserver"] = "zonu.a02.aist.go.jp"; defaults["rtc.manager.opening_message"] = "Hello World"; defaults["rtc.manager.orb.name"] = "omniORB"; defaults["rtc.manager.orb.options"] = "IIOPAddrPort, -ORBendPoint, giop:tcp:"; defaults["rtc.manager.os.name"] = "FreeBSD"; defaults["rtc.manager.os.release"] = "6.1-RELEASE"; defaults["rtc.manager.subsystems"] = "Camera, Manipulator, Force Sensor"; defaults["rtc.openrtm.author"] = "Noriaki Ando"; defaults["rtc.openrtm.release"] = "aist"; defaults["rtc.openrtm.vendor"] = "AIST TaskIntelligence"; defaults["rtc.openrtm.version"] = "0.4.0"; coil::Properties prop(defaults); /* (1) コンストラクタ引数にて指定したプロパティの数が正しく取得できるか? */ CPPUNIT_ASSERT(15 == prop.size()); /* (2) 新たに追加後のプロパティの数が正しく取得できるか? */ string key = "key"; string newValue = "new-value"; prop.setProperty(key, newValue); CPPUNIT_ASSERT(16 == prop.size()); } /*! * @brief findNode()メソッドのテスト * * <ul> * <li>キーで指定したノードが正しく検索できるか?</li> * </ul> */ void test_findNode() { map<string, string> defaults; defaults["rtc.component.conf.path"] = "C:\\Program\\ Files\\OpenRTM-aist"; defaults["rtc.manager.arch"] = "i386"; defaults["rtc.manager.debug.level"] = "PARANOID"; defaults["rtc.manager.language"] = "C++"; defaults["rtc.manager.nameserver"] = "zonu.a02.aist.go.jp"; defaults["rtc.manager.opening_message"] = "Hello World"; defaults["rtc.manager.orb.name"] = "omniORB"; defaults["rtc.manager.orb.options"] = "IIOPAddrPort, -ORBendPoint, giop:tcp:"; defaults["rtc.manager.os.name"] = "FreeBSD"; defaults["rtc.manager.os.release"] = "6.1-RELEASE"; defaults["rtc.manager.subsystems"] = "Camera, Manipulator, Force Sensor"; defaults["rtc.openrtm.author"] = "Noriaki Ando"; defaults["rtc.openrtm.release"] = "aist"; defaults["rtc.openrtm.vendor"] = "AIST TaskIntelligence"; defaults["rtc.openrtm.version"] = "0.4.0"; /* mapによるデフォルト値指定でPropertiesオブジェクトを生成する */ coil::Properties prop(defaults); /* (1) 存在するノードを指定しノードを取得 */ CPPUNIT_ASSERT(prop.findNode("rtc.manager")->getProperty("arch") == "i386"); CPPUNIT_ASSERT(prop.findNode("rtc.manager")->getProperty("debug.level") == "PARANOID"); CPPUNIT_ASSERT(prop.findNode("rtc.manager") != NULL); /* (2) 存在しないノードを指定しノードを取得 */ CPPUNIT_ASSERT(prop.findNode("manager") == NULL); CPPUNIT_ASSERT(prop.findNode("rtc.MANAGER") == NULL); } /*! * @brief getNode()メソッドのテスト * * <ul> * <li>キーで指定したノードが正しく取得できるか?</li> * </ul> */ void test_getNode() { map<string, string> defaults; defaults["rtc.component.conf.path"] = "C:\\Program\\ Files\\OpenRTM-aist"; defaults["rtc.manager.arch"] = "i386"; defaults["rtc.manager.debug.level"] = "PARANOID"; defaults["rtc.manager.language"] = "C++"; defaults["rtc.manager.nameserver"] = "zonu.a02.aist.go.jp"; defaults["rtc.manager.opening_message"] = "Hello World"; defaults["rtc.manager.orb.name"] = "omniORB"; defaults["rtc.manager.orb.options"] = "IIOPAddrPort, -ORBendPoint, giop:tcp:"; defaults["rtc.manager.os.name"] = "FreeBSD"; defaults["rtc.manager.os.release"] = "6.1-RELEASE"; defaults["rtc.manager.subsystems"] = "Camera, Manipulator, Force Sensor"; defaults["rtc.openrtm.author"] = "Noriaki Ando"; defaults["rtc.openrtm.release"] = "aist"; defaults["rtc.openrtm.vendor"] = "AIST TaskIntelligence"; defaults["rtc.openrtm.version"] = "0.4.0"; /* mapによるデフォルト値指定でPropertiesオブジェクトを生成する */ coil::Properties prop(defaults); /* (1) 既に存在するノードを取得 */ CPPUNIT_ASSERT(prop.getNode("rtc.manager").getProperty("arch") == "i386"); CPPUNIT_ASSERT(prop.getNode("rtc.manager").getProperty("debug.level") == "PARANOID"); /* (2) 存在しないノードを取得 */ std::string getval(prop.getNode("manager").getValue()); CPPUNIT_ASSERT(getval == ""); // CPPUNIT_ASSERT(prop.getNode("rtc.manager") != NULL); } /*! * @brief removeNode()メソッドのテスト * * <ul> * <li>指定したノードが正しく削除できるか?</li> * </ul> */ void test_removeNode() { map<string, string> defaults; defaults["rtc.component.conf.path"] = "C:\\Program\\ Files\\OpenRTM-aist"; defaults["rtc.manager.arch"] = "i386"; defaults["rtc.manager.debug.level"] = "PARANOID"; defaults["rtc.manager.language"] = "C++"; defaults["rtc.manager.nameserver"] = "zonu.a02.aist.go.jp"; defaults["rtc.manager.opening_message"] = "Hello World"; defaults["rtc.manager.orb.name"] = "omniORB"; defaults["rtc.manager.orb.options"] = "IIOPAddrPort, -ORBendPoint, giop:tcp:"; defaults["rtc.manager.os.name"] = "FreeBSD"; defaults["rtc.manager.os.release"] = "6.1-RELEASE"; defaults["rtc.manager.subsystems"] = "Camera, Manipulator, Force Sensor"; defaults["rtc.openrtm.author"] = "Noriaki Ando"; defaults["rtc.openrtm.release"] = "aist"; defaults["rtc.openrtm.vendor"] = "AIST TaskIntelligence"; defaults["rtc.openrtm.version"] = "0.4.0"; /* mapによるデフォルト値指定でPropertiesオブジェクトを生成する */ coil::Properties prop(defaults); /* "rtc.manager"のように指定した場合、削除できない。 */ CPPUNIT_ASSERT(prop.removeNode("rtc.manager") == NULL); /* "rtc.manager"ノードの削除 */ CPPUNIT_ASSERT(prop.getNode("rtc").removeNode("manager") != NULL); /* (1) 削除したノードを検索 */ CPPUNIT_ASSERT(prop.findNode("rtc.manager") == NULL); /* (2) 削除したノードを取得 */ std::string getval0(prop.getNode("rtc.manager").getValue()); CPPUNIT_ASSERT(getval0 == ""); } /*! * @brief hasKey()メソッドのテスト * * <ul> * <li>子ノードにkeyがあるかどうか?</li> * </ul> */ void test_hasKey() { map<string, string> defaults; defaults["rtc.component.conf.path"] = "C:\\Program\\ Files\\OpenRTM-aist"; defaults["rtc.manager.arch"] = "i386"; defaults["rtc.manager.debug.level"] = "PARANOID"; defaults["rtc.manager.language"] = "C++"; defaults["rtc.manager.nameserver"] = "zonu.a02.aist.go.jp"; defaults["rtc.manager.opening_message"] = "Hello World"; defaults["rtc.manager.orb.name"] = "omniORB"; defaults["rtc.manager.orb.options"] = "IIOPAddrPort, -ORBendPoint, giop:tcp:"; defaults["rtc.manager.os.name"] = "FreeBSD"; defaults["rtc.manager.os.release"] = "6.1-RELEASE"; defaults["rtc.manager.subsystems"] = "Camera, Manipulator, Force Sensor"; defaults["rtc.openrtm.author"] = "Noriaki Ando"; defaults["rtc.openrtm.release"] = "aist"; defaults["rtc.openrtm.vendor"] = "AIST TaskIntelligence"; defaults["rtc.openrtm.version"] = "0.4.0"; /* mapによるデフォルト値指定でPropertiesオブジェクトを生成する */ coil::Properties prop(defaults); /* (1) 存在するキーでテスト */ CPPUNIT_ASSERT(prop.hasKey("rtc") != NULL); /* (2) 存在しないキーでテスト */ CPPUNIT_ASSERT(prop.hasKey("hoge") == NULL); /* (3) 存在するキーでテスト */ CPPUNIT_ASSERT(prop.getNode("rtc").hasKey("manager") != NULL); /* (4) 存在しないキーでテスト */ CPPUNIT_ASSERT(prop.getNode("rtc").hasKey("hoge") == NULL); } /*! * @brief clear()メソッドのテスト * * <ul> * <li>子ノードがすべて削除されるかどうか?</li> * </ul> */ void test_clear() { map<string, string> defaults; defaults["rtc.component.conf.path"] = "C:\\Program\\ Files\\OpenRTM-aist"; defaults["rtc.manager.arch"] = "i386"; defaults["rtc.manager.debug.level"] = "PARANOID"; defaults["rtc.manager.language"] = "C++"; defaults["rtc.manager.nameserver"] = "zonu.a02.aist.go.jp"; defaults["rtc.manager.opening_message"] = "Hello World"; defaults["rtc.manager.orb.name"] = "omniORB"; defaults["rtc.manager.orb.options"] = "IIOPAddrPort, -ORBendPoint, giop:tcp:"; defaults["rtc.manager.os.name"] = "FreeBSD"; defaults["rtc.manager.os.release"] = "6.1-RELEASE"; defaults["rtc.manager.subsystems"] = "Camera, Manipulator, Force Sensor"; defaults["rtc.openrtm.author"] = "Noriaki Ando"; defaults["rtc.openrtm.release"] = "aist"; defaults["rtc.openrtm.vendor"] = "AIST TaskIntelligence"; defaults["rtc.openrtm.version"] = "0.4.0"; /* mapによるデフォルト値指定でPropertiesオブジェクトを生成する */ coil::Properties prop(defaults); prop.getNode("rtc.manager.os").clear(); /* (1) "rtc.manager.os"以下のノードが削除されているか? */ CPPUNIT_ASSERT(prop.findNode("rtc.manager.os.name") == NULL); CPPUNIT_ASSERT(prop.findNode("rtc.manager.os.release") == NULL); /* (2) "rtc.manager.os"以外のノードは削除されていないか? */ CPPUNIT_ASSERT(prop.findNode("rtc.manager.arch") != NULL); CPPUNIT_ASSERT(prop.findNode("rtc.manager.orb") != NULL); /* (3) すべてのノードが削除されているか? */ prop.clear(); CPPUNIT_ASSERT(prop.findNode("rtc.manager.os") == NULL); CPPUNIT_ASSERT(prop.findNode("rtc.manager") == NULL); CPPUNIT_ASSERT(prop.findNode("rtc.openrtm") == NULL); CPPUNIT_ASSERT(prop.findNode("rtc.component") == NULL); CPPUNIT_ASSERT(prop.findNode("rtc") == NULL); } /*! * @brief createNode()のテスト * * <ul> * * <li>デフォルト値が設定されており、かつ通常の値も設定されている場 * 合に、当該キー名の新規ノード作成が、意図どおり失敗するか?</li> * * <li>デフォルト値が設定されているが、通常の値は設定されていない場 * 合に、当該キー名の新規ノード作成が、意図どおり失敗するか?</li> * * <li>デフォルト値は設定されていないが、通常の値は設定されている場 * 合に、当該キー名の新規ノード作成が、意図どおり失敗するか?</li> * * <li>デフォルト値、通常の値のいずれも設定されていない場合に、新規 * ノード作成が成功するか?</li> * * </ul> */ void test_createNode() { coil::Properties prop; string key1 = "key1"; string key1DefaultValue = "key1-default-value"; string key1Value = "key1-value"; prop.setDefault(key1, key1DefaultValue); prop.setProperty(key1, key1Value); string key2 = "key2"; string key2DefaultValue = "key2-default-value"; prop.setDefault(key2, key2DefaultValue); string key3 = "key3"; string key3Value = "key3-value"; prop.setProperty(key3, key3Value); /* // (1) デフォルト値が設定されており、かつ通常の値も設定されている // 場合に、当該キー名の新規ノード作成が、意図どおり失敗するか? */ CPPUNIT_ASSERT(! prop.createNode(key1.c_str())); /* // (2) デフォルト値が設定されているが、通常の値は設定されていない // 場合に、当該キー名の新規ノード作成が、意図どおり失敗するか? */ CPPUNIT_ASSERT(! prop.createNode(key2.c_str())); /* // (3) デフォルト値は設定されていないが、通常の値は設定されている // 場合に、当該キー名の新規ノード作成が、意図どおり失敗するか? */ CPPUNIT_ASSERT(! prop.createNode(key3.c_str())); /* // (4) デフォルト値、通常の値のいずれも設定されていない場合に、新 // 規ノード作成が成功するか? */ string keyNonExist = "key-non-exist"; CPPUNIT_ASSERT(prop.createNode(keyNonExist.c_str())); } /*! * @brief <<演算子のテスト * * <ul> * * <li>デフォルト値は、入力されないことを確認する
961  */
962  for (int i = 0; defaults[i] != ""; i += 2) {
963  string key = defaults[i];
964  string value = defaults[i + 1];
965  CPPUNIT_ASSERT_EQUAL(value, prop.getDefault(key));
966  }
967  }
968 
976  void test_size()
977  {
978  map<string, string> defaults;
979  defaults["rtc.component.conf.path"] = "C:\\Program\\ Files\\OpenRTM-aist";
980  defaults["rtc.manager.arch"] = "i386";
981  defaults["rtc.manager.debug.level"] = "PARANOID";
982  defaults["rtc.manager.language"] = "C++";
983  defaults["rtc.manager.nameserver"] = "zonu.a02.aist.go.jp";
984  defaults["rtc.manager.opening_message"] = "Hello World";
985  defaults["rtc.manager.orb.name"] = "omniORB";
986  defaults["rtc.manager.orb.options"] = "IIOPAddrPort, -ORBendPoint, giop:tcp:";
987  defaults["rtc.manager.os.name"] = "FreeBSD";
988  defaults["rtc.manager.os.release"] = "6.1-RELEASE";
989  defaults["rtc.manager.subsystems"] = "Camera, Manipulator, Force Sensor";
990  defaults["rtc.openrtm.author"] = "Noriaki Ando";
991  defaults["rtc.openrtm.release"] = "aist";
992  defaults["rtc.openrtm.vendor"] = "AIST TaskIntelligence";
993  defaults["rtc.openrtm.version"] = "0.4.0";
994 
995  coil::Properties prop(defaults);
996 
997  /* (1) コンストラクタ引数にて指定したプロパティの数が正しく取得できるか? */
998  CPPUNIT_ASSERT(15 == prop.size());
999 
1000  /* (2) 新たに追加後のプロパティの数が正しく取得できるか? */
1001  string key = "key";
1002  string newValue = "new-value";
1003  prop.setProperty(key, newValue);
1004  CPPUNIT_ASSERT(16 == prop.size());
1005  }
1006 
1015  {
1016  map<string, string> defaults;
1017  defaults["rtc.component.conf.path"] = "C:\\Program\\ Files\\OpenRTM-aist";
1018  defaults["rtc.manager.arch"] = "i386";
1019  defaults["rtc.manager.debug.level"] = "PARANOID";
1020  defaults["rtc.manager.language"] = "C++";
1021  defaults["rtc.manager.nameserver"] = "zonu.a02.aist.go.jp";
1022  defaults["rtc.manager.opening_message"] = "Hello World";
1023  defaults["rtc.manager.orb.name"] = "omniORB";
1024  defaults["rtc.manager.orb.options"] = "IIOPAddrPort, -ORBendPoint, giop:tcp:";
1025  defaults["rtc.manager.os.name"] = "FreeBSD";
1026  defaults["rtc.manager.os.release"] = "6.1-RELEASE";
1027  defaults["rtc.manager.subsystems"] = "Camera, Manipulator, Force Sensor";
1028  defaults["rtc.openrtm.author"] = "Noriaki Ando";
1029  defaults["rtc.openrtm.release"] = "aist";
1030  defaults["rtc.openrtm.vendor"] = "AIST TaskIntelligence";
1031  defaults["rtc.openrtm.version"] = "0.4.0";
1032 
1033  /* mapによるデフォルト値指定でPropertiesオブジェクトを生成する */
1034  coil::Properties prop(defaults);
1035 
1036  /* (1) 存在するノードを指定しノードを取得 */
1037  CPPUNIT_ASSERT(prop.findNode("rtc.manager")->getProperty("arch") == "i386");
1038  CPPUNIT_ASSERT(prop.findNode("rtc.manager")->getProperty("debug.level") == "PARANOID");
1039  CPPUNIT_ASSERT(prop.findNode("rtc.manager") != NULL);
1040 
1041  /* (2) 存在しないノードを指定しノードを取得 */
1042  CPPUNIT_ASSERT(prop.findNode("manager") == NULL);
1043  CPPUNIT_ASSERT(prop.findNode("rtc.MANAGER") == NULL);
1044  }
1045 
1054  {
1055  map<string, string> defaults;
1056  defaults["rtc.component.conf.path"] = "C:\\Program\\ Files\\OpenRTM-aist";
1057  defaults["rtc.manager.arch"] = "i386";
1058  defaults["rtc.manager.debug.level"] = "PARANOID";
1059  defaults["rtc.manager.language"] = "C++";
1060  defaults["rtc.manager.nameserver"] = "zonu.a02.aist.go.jp";
1061  defaults["rtc.manager.opening_message"] = "Hello World";
1062  defaults["rtc.manager.orb.name"] = "omniORB";
1063  defaults["rtc.manager.orb.options"] = "IIOPAddrPort, -ORBendPoint, giop:tcp:";
1064  defaults["rtc.manager.os.name"] = "FreeBSD";
1065  defaults["rtc.manager.os.release"] = "6.1-RELEASE";
1066  defaults["rtc.manager.subsystems"] = "Camera, Manipulator, Force Sensor";
1067  defaults["rtc.openrtm.author"] = "Noriaki Ando";
1068  defaults["rtc.openrtm.release"] = "aist";
1069  defaults["rtc.openrtm.vendor"] = "AIST TaskIntelligence";
1070  defaults["rtc.openrtm.version"] = "0.4.0";
1071 
1072  /* mapによるデフォルト値指定でPropertiesオブジェクトを生成する */
1073  coil::Properties prop(defaults);
1074 
1075  /* (1) 既に存在するノードを取得 */
1076  CPPUNIT_ASSERT(prop.getNode("rtc.manager").getProperty("arch") == "i386");
1077  CPPUNIT_ASSERT(prop.getNode("rtc.manager").getProperty("debug.level") == "PARANOID");
1078 
1079  /* (2) 存在しないノードを取得 */
1080  std::string getval(prop.getNode("manager").getValue());
1081  CPPUNIT_ASSERT(getval == "");
1082 // CPPUNIT_ASSERT(prop.getNode("rtc.manager") != NULL);
1083  }
1084 
1093  {
1094  map<string, string> defaults;
1095  defaults["rtc.component.conf.path"] = "C:\\Program\\ Files\\OpenRTM-aist";
1096  defaults["rtc.manager.arch"] = "i386";
1097  defaults["rtc.manager.debug.level"] = "PARANOID";
1098  defaults["rtc.manager.language"] = "C++";
1099  defaults["rtc.manager.nameserver"] = "zonu.a02.aist.go.jp";
1100  defaults["rtc.manager.opening_message"] = "Hello World";
1101  defaults["rtc.manager.orb.name"] = "omniORB";
1102  defaults["rtc.manager.orb.options"] = "IIOPAddrPort, -ORBendPoint, giop:tcp:";
1103  defaults["rtc.manager.os.name"] = "FreeBSD";
1104  defaults["rtc.manager.os.release"] = "6.1-RELEASE";
1105  defaults["rtc.manager.subsystems"] = "Camera, Manipulator, Force Sensor";
1106  defaults["rtc.openrtm.author"] = "Noriaki Ando";
1107  defaults["rtc.openrtm.release"] = "aist";
1108  defaults["rtc.openrtm.vendor"] = "AIST TaskIntelligence";
1109  defaults["rtc.openrtm.version"] = "0.4.0";
1110 
1111  /* mapによるデフォルト値指定でPropertiesオブジェクトを生成する */
1112  coil::Properties prop(defaults);
1113 
1114  /* "rtc.manager"のように指定した場合、削除できない。 */
1115  CPPUNIT_ASSERT(prop.removeNode("rtc.manager") == NULL);
1116 
1117  /* "rtc.manager"ノードの削除 */
1118  CPPUNIT_ASSERT(prop.getNode("rtc").removeNode("manager") != NULL);
1119 
1120  /* (1) 削除したノードを検索 */
1121  CPPUNIT_ASSERT(prop.findNode("rtc.manager") == NULL);
1122 
1123  /* (2) 削除したノードを取得 */
1124  std::string getval0(prop.getNode("rtc.manager").getValue());
1125  CPPUNIT_ASSERT(getval0 == "");
1126  }
1127 
1136  {
1137  map<string, string> defaults;
1138  defaults["rtc.component.conf.path"] = "C:\\Program\\ Files\\OpenRTM-aist";
1139  defaults["rtc.manager.arch"] = "i386";
1140  defaults["rtc.manager.debug.level"] = "PARANOID";
1141  defaults["rtc.manager.language"] = "C++";
1142  defaults["rtc.manager.nameserver"] = "zonu.a02.aist.go.jp";
1143  defaults["rtc.manager.opening_message"] = "Hello World";
1144  defaults["rtc.manager.orb.name"] = "omniORB";
1145  defaults["rtc.manager.orb.options"] = "IIOPAddrPort, -ORBendPoint, giop:tcp:";
1146  defaults["rtc.manager.os.name"] = "FreeBSD";
1147  defaults["rtc.manager.os.release"] = "6.1-RELEASE";
1148  defaults["rtc.manager.subsystems"] = "Camera, Manipulator, Force Sensor";
1149  defaults["rtc.openrtm.author"] = "Noriaki Ando";
1150  defaults["rtc.openrtm.release"] = "aist";
1151  defaults["rtc.openrtm.vendor"] = "AIST TaskIntelligence";
1152  defaults["rtc.openrtm.version"] = "0.4.0";
1153 
1154  /* mapによるデフォルト値指定でPropertiesオブジェクトを生成する */
1155  coil::Properties prop(defaults);
1156 
1157  /* (1) 存在するキーでテスト */
1158  CPPUNIT_ASSERT(prop.hasKey("rtc") != NULL);
1159 
1160  /* (2) 存在しないキーでテスト */
1161  CPPUNIT_ASSERT(prop.hasKey("hoge") == NULL);
1162 
1163  /* (3) 存在するキーでテスト */
1164  CPPUNIT_ASSERT(prop.getNode("rtc").hasKey("manager") != NULL);
1165 
1166  /* (4) 存在しないキーでテスト */
1167  CPPUNIT_ASSERT(prop.getNode("rtc").hasKey("hoge") == NULL);
1168  }
1169 
1177  void test_clear()
1178  {
1179  map<string, string> defaults;
1180  defaults["rtc.component.conf.path"] = "C:\\Program\\ Files\\OpenRTM-aist";
1181  defaults["rtc.manager.arch"] = "i386";
1182  defaults["rtc.manager.debug.level"] = "PARANOID";
1183  defaults["rtc.manager.language"] = "C++";
1184  defaults["rtc.manager.nameserver"] = "zonu.a02.aist.go.jp";
1185  defaults["rtc.manager.opening_message"] = "Hello World";
1186  defaults["rtc.manager.orb.name"] = "omniORB";
1187  defaults["rtc.manager.orb.options"] = "IIOPAddrPort, -ORBendPoint, giop:tcp:";
1188  defaults["rtc.manager.os.name"] = "FreeBSD";
1189  defaults["rtc.manager.os.release"] = "6.1-RELEASE";
1190  defaults["rtc.manager.subsystems"] = "Camera, Manipulator, Force Sensor";
1191  defaults["rtc.openrtm.author"] = "Noriaki Ando";
1192  defaults["rtc.openrtm.release"] = "aist";
1193  defaults["rtc.openrtm.vendor"] = "AIST TaskIntelligence";
1194  defaults["rtc.openrtm.version"] = "0.4.0";
1195 
1196  /* mapによるデフォルト値指定でPropertiesオブジェクトを生成する */
1197  coil::Properties prop(defaults);
1198 
1199  prop.getNode("rtc.manager.os").clear();
1200 
1201  /* (1) "rtc.manager.os"以下のノードが削除されているか? */
1202  CPPUNIT_ASSERT(prop.findNode("rtc.manager.os.name") == NULL);
1203  CPPUNIT_ASSERT(prop.findNode("rtc.manager.os.release") == NULL);
1204 
1205  /* (2) "rtc.manager.os"以外のノードは削除されていないか? */
1206  CPPUNIT_ASSERT(prop.findNode("rtc.manager.arch") != NULL);
1207  CPPUNIT_ASSERT(prop.findNode("rtc.manager.orb") != NULL);
1208 
1209  /* (3) すべてのノードが削除されているか? */
1210  prop.clear();
1211  CPPUNIT_ASSERT(prop.findNode("rtc.manager.os") == NULL);
1212  CPPUNIT_ASSERT(prop.findNode("rtc.manager") == NULL);
1213  CPPUNIT_ASSERT(prop.findNode("rtc.openrtm") == NULL);
1214  CPPUNIT_ASSERT(prop.findNode("rtc.component") == NULL);
1215  CPPUNIT_ASSERT(prop.findNode("rtc") == NULL);
1216  }
1217 
1218 
1239  {
1241 
1242  string key1 = "key1";
1243  string key1DefaultValue = "key1-default-value";
1244  string key1Value = "key1-value";
1245  prop.setDefault(key1, key1DefaultValue);
1246  prop.setProperty(key1, key1Value);
1247 
1248  string key2 = "key2";
1249  string key2DefaultValue = "key2-default-value";
1250  prop.setDefault(key2, key2DefaultValue);
1251 
1252  string key3 = "key3";
1253  string key3Value = "key3-value";
1254  prop.setProperty(key3, key3Value);
1255 
1256  /*
1257  // (1) デフォルト値が設定されており、かつ通常の値も設定されている // 場合に、当該キー名の新規ノード作成が、意図どおり失敗するか? */ CPPUNIT_ASSERT(! prop.createNode(key1.c_str())); /* // (2) デフォルト値が設定されているが、通常の値は設定されていない // 場合に、当該キー名の新規ノード作成が、意図どおり失敗するか? */ CPPUNIT_ASSERT(! prop.createNode(key2.c_str())); /* // (3) デフォルト値は設定されていないが、通常の値は設定されている // 場合に、当該キー名の新規ノード作成が、意図どおり失敗するか? */ CPPUNIT_ASSERT(! prop.createNode(key3.c_str())); /* // (4) デフォルト値、通常の値のいずれも設定されていない場合に、新 // 規ノード作成が成功するか? */ string keyNonExist = "key-non-exist"; CPPUNIT_ASSERT(prop.createNode(keyNonExist.c_str())); } /*! * @brief <<演算子のテスト * * <ul> * * <li>デフォルト値は、入力されないことを確認する
1258  // 場合に、当該キー名の新規ノード作成が、意図どおり失敗するか?
1259  */
1260  CPPUNIT_ASSERT(! prop.createNode(key1.c_str()));
1261 
1262  /*
1263  // (2) デフォルト値が設定されているが、通常の値は設定されていない
1264  // 場合に、当該キー名の新規ノード作成が、意図どおり失敗するか?
1265  */
1266  CPPUNIT_ASSERT(! prop.createNode(key2.c_str()));
1267 
1268  /*
1269  // (3) デフォルト値は設定されていないが、通常の値は設定されている // 場合に、当該キー名の新規ノード作成が、意図どおり失敗するか? */ CPPUNIT_ASSERT(! prop.createNode(key3.c_str())); /* // (4) デフォルト値、通常の値のいずれも設定されていない場合に、新 // 規ノード作成が成功するか? */ string keyNonExist = "key-non-exist"; CPPUNIT_ASSERT(prop.createNode(keyNonExist.c_str())); } /*! * @brief <<演算子のテスト * * <ul> * * <li>デフォルト値は、入力されないことを確認する
1270  // 場合に、当該キー名の新規ノード作成が、意図どおり失敗するか?
1271  */
1272  CPPUNIT_ASSERT(! prop.createNode(key3.c_str()));
1273 
1274  /*
1275  // (4) デフォルト値、通常の値のいずれも設定されていない場合に、新
1276  // 規ノード作成が成功するか?
1277  */
1278  string keyNonExist = "key-non-exist";
1279  CPPUNIT_ASSERT(prop.createNode(keyNonExist.c_str()));
1280  }
1281 
1282 
1299  {
1300  /* 入力元となるPropertiesの1つ目を作成する */
1301  coil::Properties propA;
1302 
1303  string keyA1 = "keyA1";
1304  string keyA1DefaultValue = "keyA1-default-value";
1305  string keyA1Value = "keyA1-value";
1306  propA.setDefault(keyA1, keyA1DefaultValue);
1307  propA.setProperty(keyA1, keyA1Value);
1308 
1309  string keyA2 = "keyA2";
1310  string keyA2DefaultValue = "keyA2-default-value";
1311  propA.setDefault(keyA2, keyA2DefaultValue);
1312 
1313  string keyA3 = "keyA3";
1314  string keyA3Value = "keyA3-value";
1315  propA.setProperty(keyA3, keyA3Value);
1316 
1317  /* 入力元となるPropertiesの2つ目を作成する */
1318  coil::Properties propB;
1319 
1320  string keyB1 = "keyB1";
1321  string keyB1DefaultValue = "keyB1-default-value";
1322  string keyB1Value = "keyB1-value";
1323  propB.setDefault(keyB1, keyB1DefaultValue);
1324  propB.setProperty(keyB1, keyB1Value);
1325 
1326  string keyB2 = "keyB2";
1327  string keyB2DefaultValue = "keyB2-default-value";
1328  propB.setDefault(keyB2, keyB2DefaultValue);
1329 
1330  string keyB3 = "keyB3";
1331  string keyB3Value = "keyB3-value";
1332  propB.setProperty(keyB3, keyB3Value);
1333 
1334  /*
1335  // 2つのPropertiesに、共通するキー名で互いに異なる値を設定しておく
1336  */
1337  string keyCommon = "keyCommon";
1338  string keyCommonValueA = "keyCommon-value-A";
1339  string keyCommonValueB = "keyCommon-value-B";
1340  propA.setProperty(keyCommon, keyCommonValueA);
1341  propB.setProperty(keyCommon, keyCommonValueB);
1342 
1343  /* propBをpropAに入力する */
1344  propA << propB;
1345 
1346  /* 正しくマージされたことを確認する */
1347  /* (1) 入力前から設定されており、共通キーでないものは、もとのまま */
1348  /* であることを確認する */
1349  CPPUNIT_ASSERT_EQUAL(keyA1DefaultValue, propA.getDefault(keyA1));
1350  CPPUNIT_ASSERT_EQUAL(keyA1Value, propA.getProperty(keyA1));
1351  CPPUNIT_ASSERT_EQUAL(keyA2DefaultValue, propA.getDefault(keyA2));
1352  CPPUNIT_ASSERT_EQUAL(keyA2DefaultValue, propA.getProperty(keyA2));
1353  CPPUNIT_ASSERT_EQUAL(EMPTY_STRING, propA.getDefault(keyA3));
1354  CPPUNIT_ASSERT_EQUAL(keyA3Value, propA.getProperty(keyA3));
1355 
1356  /* (2) 通常値は入力され、デフォルト値は入力されないことを確認する */
1357  CPPUNIT_ASSERT_EQUAL(EMPTY_STRING, propA.getDefault(keyB1));
1358  CPPUNIT_ASSERT_EQUAL(keyB1Value, propA.getProperty(keyB1));
1359  CPPUNIT_ASSERT_EQUAL(EMPTY_STRING, propA.getDefault(keyB2));
1360  CPPUNIT_ASSERT_EQUAL(keyB2DefaultValue, propA.getProperty(keyB2));
1361  CPPUNIT_ASSERT_EQUAL(EMPTY_STRING, propA.getDefault(keyB3));
1362  CPPUNIT_ASSERT_EQUAL(keyB3Value, propA.getProperty(keyB3));
1363 
1364  /* (3) 共通キー名について、入力した値で上書きされていることを確認する */
1365  CPPUNIT_ASSERT_EQUAL(keyCommonValueB, propA.getProperty(keyCommon));
1366  }
1367 
1388  {
1389  class P : public coil::Properties
1390  {
1391  public:
1392  void splitKeyValue_protected(const std::string& str,
1393  std::string& key, std::string& value)
1394  {
1395  splitKeyValue(str, key, value);
1396  }
1397  };
1398 
1399  string keyAndValue = " property_name : C:\\abc\\pqr.xyz ";
1400 
1401  string key, value;
1402  P prop;
1403  prop.splitKeyValue_protected(keyAndValue, key, value);
1404 
1405  /* キーと値が、余分な空白文字が除去されたうえで分離されていること */
1406  /* を確認する */
1407  string expectedKey("property_name");
1408  CPPUNIT_ASSERT_EQUAL(expectedKey, key);
1409 
1410  string expectedValue("C:\\abc\\pqr.xyz");
1411  CPPUNIT_ASSERT_EQUAL(expectedValue, value);
1412  }
1413 
1414 
1415 
1416  };
1417 }; // namespace Properties
1418 
1419 /*
1420  * Register test suite
1421  */
1423 
1424 #ifdef LOCAL_MAIN
1425 int main(int argc, char* argv[])
1426 {
1427 
1428  FORMAT format = TEXT_OUT;
1429  int target = 0;
1430  std::string xsl;
1431  std::string ns;
1432  std::string fname;
1433  std::ofstream ofs;
1434 
1435  int i(1);
1436  while (i < argc)
1437  {
1438  std::string arg(argv[i]);
1439  std::string next_arg;
1440  if (i + 1 < argc) next_arg = argv[i + 1];
1441  else next_arg = "";
1442 
1443  if (arg == "--text") { format = TEXT_OUT; break; }
1444  if (arg == "--xml")
1445  {
1446  if (next_arg == "")
1447  {
1448  fname = argv[0];
1449  fname += ".xml";
1450  }
1451  else
1452  {
1453  fname = next_arg;
1454  }
1455  format = XML_OUT;
1456  ofs.open(fname.c_str());
1457  }
1458  if ( arg == "--compiler" ) { format = COMPILER_OUT; break; }
1459  if ( arg == "--cerr" ) { target = 1; break; }
1460  if ( arg == "--xsl" )
1461  {
1462  if (next_arg == "") xsl = "default.xsl";
1463  else xsl = next_arg;
1464  }
1465  if ( arg == "--namespace" )
1466  {
1467  if (next_arg == "")
1468  {
1469  std::cerr << "no namespace specified" << std::endl;
1470  exit(1);
1471  }
1472  else
1473  {
1474  xsl = next_arg;
1475  }
1476  }
1477  ++i;
1478  }
1479  CppUnit::TextUi::TestRunner runner;
1480  if ( ns.empty() )
1481  runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest());
1482  else
1483  runner.addTest(CppUnit::TestFactoryRegistry::getRegistry(ns).makeTest());
1484  CppUnit::Outputter* outputter = 0;
1485  std::ostream* stream = target ? &std::cerr : &std::cout;
1486  switch ( format )
1487  {
1488  case TEXT_OUT :
1489  outputter = new CppUnit::TextOutputter(&runner.result(),*stream);
1490  break;
1491  case XML_OUT :
1492  std::cout << "XML_OUT" << std::endl;
1493  outputter = new CppUnit::XmlOutputter(&runner.result(),
1494  ofs, "shift_jis");
1495  static_cast<CppUnit::XmlOutputter*>(outputter)->setStyleSheet(xsl);
1496  break;
1497  case COMPILER_OUT :
1498  outputter = new CppUnit::CompilerOutputter(&runner.result(),*stream);
1499  break;
1500  }
1501  runner.setOutputter(outputter);
1502  runner.run();
1503  return 0; // runner.run() ? 0 : 1;
1504 }
1505 #endif // MAIN
1506 #endif // Properties_cpp
void test_findNode()
findNode()メソッドのテスト
const std::vector< Properties * > & getLeaf(void) const
Get elements of leaf.
Definition: Properties.h:340
int main(int argc, char **argv)
CPPUNIT_TEST_SUITE_REGISTRATION(Properties::PropertiesTests)
void test_hasKey()
hasKey()メソッドのテスト
void test_list()
list()メソッドのテスト
const char * getName(void) const
Get Names.
Definition: Properties.h:283
void test_Properties_destructor()
~Properties(void)デストラクタのテスト
void test_substitute()
=演算子(代入演算子)のテスト
void clear(void)
Clear the children.
Definition: Properties.cpp:534
void store(std::ostream &out, const std::string &header)
Stores property list to the output stream.
Definition: Properties.cpp:394
void test_getNode()
getNode()メソッドのテスト
void test_getProperty()
getProperty()メソッドのテスト
void test_ctor_map()
Properties(std::map<string, string>&)コンストラクタのテスト
virtual void setUp()
Test initialization.
void test_clear()
clear()メソッドのテスト
std::map< std::string, std::string >::iterator Itr
Properties * hasKey(const char *key) const
Check whether key exists in the children.
Definition: Properties.cpp:517
void test_propertyNames()
propertyNames()メソッドのテスト
void list(std::ostream &out)
Prints this property list out to the specified output stream.
Definition: Properties.cpp:322
void test_operator()
operator[]()メソッドのテスト
void test_getRoot()
getRoot(void)メソッドのテスト
map< string, string > DEFAULTS_CONF
void setDefaults(const char *defaults[], long num=LONG_MAX)
Set a default value together in the property list.
Definition: Properties.cpp:295
void test_getValue()
getValue(void)メソッドのテスト
CORBA::Long find(const CorbaSequence &seq, Functor f)
Return the index of CORBA sequence element that functor matches.
void test_load()
load()メソッドのテスト
void test_getName()
getName(void)メソッドのテスト
std::string setProperty(const std::string &key, const std::string &value)
Set a value associated with key in the property list.
Definition: Properties.cpp:236
bool createNode(const std::string &key)
Create newly node of Properties.
Definition: Properties.cpp:474
void test_Properties_key_value()
Properties(const char* key = "", const char* value = "")コンストラクタのテスト
Properties * removeNode(const char *leaf_name)
Remove node of Properties.
Definition: Properties.cpp:493
Properties *const findNode(const std::string &key) const
Get node of properties.
Definition: Properties.cpp:439
void load(std::istream &inStream)
Loads property list that consists of key:value from input stream.
Definition: Properties.cpp:334
void test_removeNode()
removeNode()メソッドのテスト
void test_createNode()
createNode()のテスト
void test_store()
store()メソッドのテスト
void test_setProperty()
setProperty()メソッドのテスト
prop
Organization::get_organization_property ();.
Class represents a set of properties.
Definition: Properties.h:101
void test_size()
size()メソッドのテスト
void test_getDefaultValue()
getDefaultValue(void)メソッドのテスト
const char * getValue(void) const
Get values.
Definition: Properties.h:302
void test_getLeaf()
getLeaf(void)メソッドのテスト
int size(void) const
Get the number of Properties.
Definition: Properties.cpp:427
void test_splitKeyValue()
splitKeyValue()メソッドのテスト
void test_setDefaults()
setDefaults()メソッドのテスト
std::vector< std::string > propertyNames(void) const
Return an vector of all the keys in this property.
Definition: Properties.cpp:410
Properties & getNode(const std::string &key)
Get node of properties.
Definition: Properties.cpp:455
virtual void tearDown()
Test finalization.
const std::string & getDefault(const std::string &key) const
Get the default values with specified key.
Definition: Properties.cpp:217
const std::string & getProperty(const std::string &key) const
Search for the property with the specified key in this property.
Definition: Properties.cpp:156
std::string setDefault(const std::string &key, const std::string &value)
Set a default value associated with key in the property list.
Definition: Properties.cpp:266
void test_streamInput()
<<演算子のテスト
void test_Properties_copy()
Properties(const Properties& prop)コピーコンストラクタのテスト
const Properties * getRoot(void) const
Get root element.
Definition: Properties.h:359
void test_getDefault()
getDefault()のテスト


openrtm_aist
Author(s): Noriaki Ando
autogenerated on Mon Jun 10 2019 14:07:54