ConfigAdminTests.cpp
Go to the documentation of this file.
1 // -*- C++ -*-
11 /*
12  * $Log: ConfigAdminTests.cpp,v $
13  * Revision 1.1 2008/05/12 01:47:32 arafune
14  * The first commitment.
15  *
16  *
17  */
18 
19 #ifndef ConfigAdmin_cpp
20 #define ConfigAdmin_cpp
21 
22 #include <cppunit/ui/text/TestRunner.h>
23 #include <cppunit/TextOutputter.h>
24 #include <cppunit/extensions/TestFactoryRegistry.h>
25 #include <cppunit/extensions/HelperMacros.h>
26 #include <cppunit/TestAssert.h>
27 #include <strstream>
28 #include <rtm/ConfigAdmin.h>
29 
34 namespace Config
35 {
37  : public CppUnit::TestFixture
38  {
45 
46  private:
47 
48 
49  public:
54  {
55  }
56 
61  {
62  }
63 
67  virtual void setUp()
68  {
69  }
70 
74  virtual void tearDown()
75  {
76  }
77 
82  {
83  std::string name = "name of parameter";
84  double value = 0.0;
85  std::string default_value = "3.14159";
86 
87  RTC::Config<double> config(name.c_str(), value, default_value.c_str());
88 
89  // 指定した名称が正しく設定されているか?
90  CPPUNIT_ASSERT_EQUAL(name, std::string(config.name));
91 
92  // 指定したデフォルト値(の文字列表現)が正しく設定されているか?
93  CPPUNIT_ASSERT_EQUAL(default_value, std::string(config.default_value));
94  }
95 
101  void test_update()
102  {
103  std::string name = "name of parameter";
104  double value = 0.0;
105  std::string default_value = "3.14159";
106 
107  RTC::Config<double> config(name.c_str(), value, default_value.c_str());
108 
109  // update()前は、変数値が初期状態のままのはず
110  CPPUNIT_ASSERT_EQUAL(0.0, value);
111 
112  // update()する CPPUNIT_ASSERT_EQUAL(true, config.update("1.41421356")); // バインドした変数が、update()で指定された値に正しく更新されるか? CPPUNIT_ASSERT_EQUAL(1.41421356, value); } /*! * @brief update()メソッドのテスト * * - 指定の型に変換できない内容でupdate()を呼出し、意図どおり失敗するか? * - バインドした変数の値が、コンストラクタで指定したデフォルト値に正しく更新されるか? */ void test_update_with_illegal_value() { std::string name = "name of parameter"; double value = 0.0; std::string default_value = "3.14159"; RTC::Config<double> config(name.c_str(), value, default_value.c_str()); // update()前は、変数値が初期状態のままのはず CPPUNIT_ASSERT_EQUAL(0.0, value); // 浮動小数点値に変換できない内容でupdate()を呼出し、意図どおり失敗するか? CPPUNIT_ASSERT_EQUAL(false, config.update("Not float value")); // バインドした変数の値が、コンストラクタで指定したデフォルト値に正しく更新されるか? CPPUNIT_ASSERT_EQUAL(3.14159, value); } /*! * @brief update()メソッドのテスト * * - 浮動小数点値に変換できないデフォルト値が指定され、かつ浮動小数点値に変換できない内容でupdate()を呼出した場合、 * バインドした変数の値は、更新されることなく元の値に留まるか? */ void test_update_with_illegal_default_value() { std::string name = "name of parameter"; double value = 0.0; std::string illegal_default_value = "Not float value"; RTC::Config<double> config(name.c_str(), value, illegal_default_value.c_str()); // update()前は、変数値が初期状態のままのはず CPPUNIT_ASSERT_EQUAL(0.0, value); // 浮動小数点値に変換できないデフォルト値が指定され、 // かつ浮動小数点値に変換できない内容でupdate()を呼出した場合、 // バインドした変数の値は、更新されることなく元の値に留まるか? CPPUNIT_ASSERT_EQUAL(false, config.update("Not float value too")); CPPUNIT_ASSERT_EQUAL(0.0, value); } }; }; // namespace Config /*! * @class ConfigAdminTests class * @brief ConfigAdmin test */ namespace ConfigAdmin { class OnUpdateCallbackMock : public RTC::OnUpdateCallback { public: OnUpdateCallbackMock(void) : result(false) {} virtual ~OnUpdateCallbackMock(void){} void operator()(const char* config_set) { // この出力があれば正しく呼ばれている // std::cout << "OnUpdateCallbackMock1 config_set=" << config_set << std::endl; result = true; } bool result; }; class OnUpdateParamCallbackMock : public RTC::OnUpdateParamCallback { public: OnUpdateParamCallbackMock(void) : result(false) {} virtual ~OnUpdateParamCallbackMock(void){} void operator()(const char* config_set, const char* config_param) { // std::cout << "OnUpdateParamCallbackMock2 config_set=" << config_set << std::endl; // std::cout << "OnUpdateParamCallbackMock2 config_param=" << config_param << std::endl; result = true; } bool result; }; class OnSetConfigurationSetCallbackMock : public RTC::OnSetConfigurationSetCallback { public: OnSetConfigurationSetCallbackMock(void) : result(false) {} virtual ~OnSetConfigurationSetCallbackMock(void){} void operator()(const coil::Properties& config_set) { // std::cout << "OnSetConfigurationSetCallbackMock3 config_set=" << std::endl << config_set << std::endl; result = true; } bool result; }; class OnAddConfigurationAddCallbackMock : public RTC::OnAddConfigurationAddCallback { public: OnAddConfigurationAddCallbackMock(void) : result(false) {} virtual ~OnAddConfigurationAddCallbackMock(void){} void operator()(const coil::Properties& config_set) { // std::cout << "OnAddConfigurationAddCallbackMock4 config_set=" << std::endl << config_set << std::endl; result = true; } bool result; }; class OnRemoveConfigurationSetCallbackMock : public RTC::OnRemoveConfigurationSetCallback { public: OnRemoveConfigurationSetCallbackMock(void) : result(false) {} virtual ~OnRemoveConfigurationSetCallbackMock(void){} void operator()(const char* config_set) { // std::cout << "OnRemoveConfigurationSetCallbackMock5 config_set=" << config_set << std::endl; result = true; } bool result; }; class OnActivateSetCallbackMock : public RTC::OnActivateSetCallback { public: OnActivateSetCallbackMock(void) : result(false) {} virtual ~OnActivateSetCallbackMock(void){} void operator()(const char* config_id) { // std::cout << "OnActivateSetCallbackMock6 config_id=" << config_id << std::endl; result = true; } bool result; }; // ConfigAdmin を継承して、protected: 関数をオーバーロードする class ConfigAdminMock : public RTC::ConfigAdmin { public: ConfigAdminMock(coil::Properties& configsets) : RTC::ConfigAdmin(configsets) {} virtual ~ConfigAdminMock(void){} void onUpdateMock(const char* config_set) { // std::cout << "ConfigAdmin::onUpdate() 1 before" << std::endl; RTC::ConfigAdmin::onUpdate(config_set); // std::cout << "ConfigAdmin::onUpdate() 1 after" << std::endl; } void onUpdateParamMock(const char* config_set, const char* config_param) { // std::cout << "ConfigAdmin::onUpdateParam() 2 before" << std::endl; RTC::ConfigAdmin::onUpdateParam(config_set, config_param); // std::cout << "ConfigAdmin::onUpdateParam() 2 after" << std::endl; } void onSetConfigurationSetMock(const coil::Properties& config_set) { // std::cout << "ConfigAdmin::onSetConfigurationSet() 3 before" << std::endl; RTC::ConfigAdmin::onSetConfigurationSet(config_set); // std::cout << "ConfigAdmin::onSetConfigurationSet() 3 after" << std::endl; } void onAddConfigurationSetMock(const coil::Properties& config_set) { // std::cout << "ConfigAdmin::onAddConfigurationSet() 4 before" << std::endl; RTC::ConfigAdmin::onAddConfigurationSet(config_set); // std::cout << "ConfigAdmin::onAddConfigurationSet() 4 after" << std::endl; } void onRemoveConfigurationSetMock(const char* config_id) { // std::cout << "ConfigAdmin::onRemoveConfigurationSet() 5 before" << std::endl; RTC::ConfigAdmin::onRemoveConfigurationSet(config_id); // std::cout << "ConfigAdmin::onRemoveConfigurationSet() 5 after" << std::endl; } void onActivateSetMock(const char* config_id) { // std::cout << "ConfigAdmin::onActivateSet() 6 before" << std::endl; RTC::ConfigAdmin::onActivateSet(config_id); // std::cout << "ConfigAdmin::onActivateSet() 6 after" << std::endl; } }; class ConfigAdminTests : public CppUnit::TestFixture { CPPUNIT_TEST_SUITE(ConfigAdminTests); CPPUNIT_TEST(test_setOnUpdate); CPPUNIT_TEST(test_setOnUpdateParam); CPPUNIT_TEST(test_setOnSetConfigurationSet); CPPUNIT_TEST(test_setOnAddConfigurationSet); CPPUNIT_TEST(test_setOnRemoveConfigurationSet); CPPUNIT_TEST(test_setOnActivateSet); CPPUNIT_TEST(test_constructor); CPPUNIT_TEST(test_bindParameter); CPPUNIT_TEST(test_bindParameter_already_exist); CPPUNIT_TEST(test_bindParameter_illegal_default_value); CPPUNIT_TEST(test_update); CPPUNIT_TEST(test_update_by_inexist_configuration_set); CPPUNIT_TEST(test_update_with_specified_parameter_name); CPPUNIT_TEST(test_update_by_active_configuration_set); CPPUNIT_TEST(test_isExist); CPPUNIT_TEST(test_isChanged_on_addConfigurationSet); CPPUNIT_TEST(test_isChanged_on_removeConfigurationSet); CPPUNIT_TEST(test_isChanged_on_activateConfigurationSet); CPPUNIT_TEST(test_getActiveId); CPPUNIT_TEST(test_haveConfig); CPPUNIT_TEST(test_isActive_on_addConfigurationSet); CPPUNIT_TEST(test_isActive_on_removeConfigurationSet); CPPUNIT_TEST(test_getConfigurationSets); CPPUNIT_TEST(test_addConfigurationSet_and_getConfigurationSet); CPPUNIT_TEST(test_setConfigurationSetValues); CPPUNIT_TEST(test_setConfigurationSetValues_with_inexist_configuration_set); CPPUNIT_TEST(test_getActiveConfigurationSet); CPPUNIT_TEST(test_removeConfigurationSet); CPPUNIT_TEST(test_removeConfigurationSet_with_inexist_configuration_id); CPPUNIT_TEST_SUITE_END(); private: // helper const coil::Properties* getPropertiesBy( const std::string& name, const std::vector<coil::Properties*>& propertiesSet) const { for (int i = 0; i < (int) propertiesSet.size(); ++i) { if (std::string(propertiesSet[i]->getName()) == name) { return propertiesSet[i]; } } return 0; // not found } public: /*! * @brief Constructor */ ConfigAdminTests() { } /*! * @brief Destructor */ ~ConfigAdminTests() { } /*! * @brief Test initialization */ virtual void setUp() { } /*! * @brief Test finalization */ virtual void tearDown() { } /*! * @brief コンストラクタのテスト * * - 引数で指定したコンフィグレーションセットが、正しく設定されるか? */ void test_constructor() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); RTC::ConfigAdmin configAdmin(configSet); // 引数で指定したコンフィグレーションセットが、正しく設定されるか? const coil::Properties& activeConfigSet = configAdmin.getConfigurationSet("config_id"); CPPUNIT_ASSERT_EQUAL(std::string("value"), activeConfigSet.getProperty("key")); } /*! * @brief bindParameter()メソッドのテスト * * - bindParameter()で、正常に変数をバインドできるか? * - バインドした変数は、指定したデフォルト値に正しく更新されているか? */ void test_bindParameter() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // bindParameter()で、正常に変数をバインドできるか? const char* varName = "name"; double var = 0.0; const char* default_value = "3.14159"; CPPUNIT_ASSERT_EQUAL( true, configAdmin.bindParameter(varName, var, default_value)); // バインドした変数は、指定したデフォルト値に正しく更新されているか? CPPUNIT_ASSERT_EQUAL(3.14159, var); } /*! * @brief bindParameter()メソッドのテスト * * - 同一名称の変数バインドを試みて、意図どおり失敗するか? */ void test_bindParameter_already_exist() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // まずは、初回のバインドを行う const char* varName1 = "name"; double var1 = 0.0; const char* default_value1 = "3.14159"; CPPUNIT_ASSERT_EQUAL( true, configAdmin.bindParameter(varName1, var1, default_value1)); CPPUNIT_ASSERT_EQUAL(3.14159, var1); // 同一名称の変数バインドを試みて、意図どおり失敗するか? const char* varName2 = varName1; double var2 = 1.0; const char* default_value2 = "1.41421356"; CPPUNIT_ASSERT_EQUAL( false, configAdmin.bindParameter(varName2, var2, default_value2)); // バインド変数の値は更新されることなく保持されているか? CPPUNIT_ASSERT_EQUAL(3.14159, var1); } /*! * @brief bindParameter()メソッドのテスト * * - 指定のデータ型に変換できないデフォルト値を指定して、意図どおり失敗するか? */ void test_bindParameter_illegal_default_value() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // 指定のデータ型に変換できないデフォルト値を指定して、意図どおり失敗するか? const char* varName = "name"; double var = 0.0; const char* default_value = "Illegal default value"; CPPUNIT_ASSERT_EQUAL( false, configAdmin.bindParameter(varName, var, default_value)); } /*! * @brief update()メソッドのテスト * * - コンフィグレーションセットを指定してupdate()し、その内容でバインド変数値が正しく更新されるか? */ void test_update() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセット1を準備する coil::Properties configSet1("set 1"); configSet1.setProperty("name", "1.41421356"); // コンフィグレーションセット2を準備する coil::Properties configSet2("set 2"); configSet2.setProperty("name", "1.7320508"); // 準備した2つのコンフィグレーションセットを追加しておく CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // 変数をバインドする const char* varName = "name"; double var = 0.0; const char* default_value = "3.14159"; CPPUNIT_ASSERT_EQUAL( true, configAdmin.bindParameter(varName, var, default_value)); // update()前は、まだ変数がデフォルト値のままであることを確認する CPPUNIT_ASSERT_EQUAL(3.14159, var); // コンフィグレーションセット1を指定してupdate()し、その内容でバインド変数値が正しく更新されるか? configAdmin.update("set 1"); CPPUNIT_ASSERT_EQUAL(1.41421356, var); // コンフィグレーションセット2を指定してupdate()し、その内容でバインド変数値が正しく更新されるか? configAdmin.update("set 2"); CPPUNIT_ASSERT_EQUAL(1.7320508, var); } /*! * @brief update()メソッドのテスト * * - 存在しないコンフィグレーションIDを指定してupdate()を呼出した場合に、 * バインド変数が更新されずに、そのまま保持されるか? */ void test_update_by_inexist_configuration_set() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet("set"); configSet.setProperty("name", "1.41421356"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); // 変数をバインドする const char* varName = "name"; double var = 0.0; const char* default_value = "3.14159"; CPPUNIT_ASSERT_EQUAL( true, configAdmin.bindParameter(varName, var, default_value)); CPPUNIT_ASSERT_EQUAL(3.14159, var); // 存在しないコンフィグレーションIDを指定してupdate()を呼出した場合に、 // バインド変数が更新されずに、そのまま保持されるか? configAdmin.update("inexist set"); CPPUNIT_ASSERT_EQUAL(3.14159, var); } /*! * @brief update()メソッド(名称指定)のテスト * * - 指定したコンフィグレーションセットの指定した名称の変数だけが、正しく更新されるか? */ void test_update_with_specified_parameter_name() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // 2つのパラメータ値を含むコンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); configSet1.setProperty("name 1", "1.41421356"); configSet1.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); configSet2.setProperty("name 1", "3.14159"); configSet2.setProperty("name 2", "2.71828"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // 2つの変数をバインドする const char* varName1 = "name 1"; double var1 = 0.0; const char* default_value1 = "2.23620679"; CPPUNIT_ASSERT_EQUAL( true, configAdmin.bindParameter(varName1, var1, default_value1)); CPPUNIT_ASSERT_EQUAL(2.23620679, var1); const char* varName2 = "name 2"; double var2 = 0.0; const char* default_value2 = "2.4494897"; CPPUNIT_ASSERT_EQUAL( true, configAdmin.bindParameter(varName2, var2, default_value2)); CPPUNIT_ASSERT_EQUAL(2.4494897, var2); // 2つのうち、片方の変数のみを名称指定してupdate()を行い、指定した変数だけが正しく更新されるか? configAdmin.update("set 2", "name 1"); CPPUNIT_ASSERT_EQUAL(3.14159, var1); CPPUNIT_ASSERT_EQUAL(2.4494897, var2); } /*! * @brief update()メソッド(アクティブコンフィグレーションセット)のテスト * * - update()呼出しにより、バインド変数がアクティブなコンフィグレーションセットの値で更新されるか? */ void test_update_by_active_configuration_set() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); configSet1.setProperty("name", "1.41421356"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); configSet2.setProperty("name", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // 変数をバインドする const char* varName = "name"; double var = 0.0; const char* default_value = "3.14159"; CPPUNIT_ASSERT_EQUAL( true, configAdmin.bindParameter(varName, var, default_value)); CPPUNIT_ASSERT_EQUAL(3.14159, var); // "set 1"のほうをアクティブにする CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 1")); // アクティブにしただけでは、まだバインド変数は更新されていないはず CPPUNIT_ASSERT_EQUAL(3.14159, var); // update()呼出しにより、バインド変数がアクティブなコンフィグレーションセットの値で更新されるか? configAdmin.update(); CPPUNIT_ASSERT_EQUAL(1.41421356, var); // "set 2"のほうをアクティブにする CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 2")); // アクティブにしただけでは、まだバインド変数は更新されていないはず CPPUNIT_ASSERT_EQUAL(1.41421356, var); // update()呼出しにより、バインド変数がアクティブなコンフィグレーションセットの値で更新されるか? configAdmin.update(); CPPUNIT_ASSERT_EQUAL(1.7320508, var); } /*! * @brief isExist()メソッドのテスト * * - バインドした変数の名称でisExist()を呼出し、真値が得られるか? * - バインドしていない名称でisExist()を呼出し、偽値が得られるか? */ void test_isExist() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // 変数をバインドする const char* varName = "name"; double var = 0.0; const char* default_value = "3.14159"; CPPUNIT_ASSERT_EQUAL( true, configAdmin.bindParameter(varName, var, default_value)); CPPUNIT_ASSERT_EQUAL(3.14159, var); // バインドした変数の名称でisExist()を呼出し、真値が得られるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.isExist("name")); // バインドしていない名称でisExist()を呼出し、偽値が得られるか? CPPUNIT_ASSERT_EQUAL(false, configAdmin.isExist("inexist name")); } /*! * @brief isChanged()メソッドのテスト * * - addConfigurationSet()呼出後は、isChanged()は真値となるか? */ void test_isChanged_on_addConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // update()を呼出してバインド変数と同期を行い、isChanged()が偽となる状態にする configAdmin.update(); CPPUNIT_ASSERT_EQUAL(false, configAdmin.isChanged()); // addConfigurationSet()を呼出す coil::Properties configSet("id"); configSet.setProperty("key", "value"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); // addConfigurationSet()呼出後は、isChanged()は真値となるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.isChanged()); } /*! * @brief isChanged()メソッドのテスト * * - removeConfigurationSet()呼出後は、isChanged()は真値となるか? */ void test_isChanged_on_removeConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // addConfigurationSet()を呼出す coil::Properties configSet("id"); configSet.setProperty("key", "value"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); // update()を呼出してバインド変数と同期を行い、isChanged()が偽となる状態にする CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("id")); configAdmin.update(); CPPUNIT_ASSERT_EQUAL(false, configAdmin.isChanged()); // removeConfigurationSet()の呼出後は、isChanged()は真値となるか? //CPPUNIT_ASSERT_EQUAL(true, configAdmin.removeConfigurationSet("id")); //CPPUNIT_ASSERT_EQUAL(true, configAdmin.isChanged()); } /*! * @brief isChanged()メソッドのテスト * * - activateConfigurationSet()呼出後は、isChanged()は真値となるか? */ void test_isChanged_on_activateConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // "set 1"のほうをアクティブにする CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 1")); // update()を行い、isChanged()が偽値の状態にしておく configAdmin.update(); CPPUNIT_ASSERT_EQUAL(false, configAdmin.isChanged()); // "set 2"のほうをアクティブにすると、isChanged()が真値となるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 2")); CPPUNIT_ASSERT_EQUAL(true, configAdmin.isChanged()); } void test_isChanged_on_setConfigurationSetValues() { // TODO 実装すること } /*! * @brief getActiveId()メソッドのテスト * * - アクティブ化したコンフィグレーションセットのIDを正しく取得できるか? */ void test_getActiveId() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // 初期状態では、アクティブIDは"default"のはず CPPUNIT_ASSERT_EQUAL(std::string("default"), std::string(configAdmin.getActiveId())); // "set 1"をアクティブにした後、意図どおりのアクティブIDを取得できるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 1")); CPPUNIT_ASSERT_EQUAL(std::string("set 1"), std::string(configAdmin.getActiveId())); // "set 2"をアクティブにした後、意図どおりのアクティブIDを取得できるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 2")); CPPUNIT_ASSERT_EQUAL(std::string("set 2"), std::string(configAdmin.getActiveId())); } /*! * @brief haveConfig()メソッドのテスト * * - 存在するコンフィグレーションセットIDを指定した場合に、haveConfig()で正しく真値を得るか? * - 存在しないコンフィグレーションセットIDを指定した場合に、haveConfig()で正しく偽値を得るか? */ void test_haveConfig() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("id"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); // 存在するコンフィグレーションセットIDを指定した場合に、haveConfig()で正しく真値を得るか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); // 存在しないコンフィグレーションセットIDを指定した場合に、haveConfig()で正しく偽値を得るか? CPPUNIT_ASSERT_EQUAL(false, configAdmin.haveConfig("inexist id")); } /*! * @brief isActive()メソッドのテスト * * - addConfigurationSet()呼出後は、isActive()は正しく偽値を得るか? * - activateConfigurationSet()でアクティブ化した後は、isActive()は正しく真値を得るか? */ void test_isActive_on_addConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // addConfigurationSet()呼出後は、isActive()は正しく偽値を得るか? coil::Properties configSet("id"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); CPPUNIT_ASSERT_EQUAL(false, configAdmin.isActive()); // activateConfigurationSet()でアクティブ化した後は、isActive()は正しく真値を得るか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("id")); CPPUNIT_ASSERT_EQUAL(true, configAdmin.isActive()); } /*! * @brief isActive()メソッドのテスト * * - removeConfigurationSet()呼出後は、isActive()は正しく偽値を得るか? */ void test_isActive_on_removeConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを追加してアクティブ化しておく coil::Properties configSet("id"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("id")); CPPUNIT_ASSERT_EQUAL(true, configAdmin.isActive()); // 登録されているコンフィグレーションセットをremoveConfigurationSet()で解除した場合、 // isActive()は正しく偽値を得るか? //CPPUNIT_ASSERT_EQUAL(true, configAdmin.removeConfigurationSet("id")); //CPPUNIT_ASSERT_EQUAL(false, configAdmin.isActive()); } /*! * @brief isActive()メソッドのテスト * * - activateConfigurationSet()でアクティブ化した後は、isActive()は正しく真値を得るか? */ void test_isActive_on_activateConfigurationSet() { // test_isActive_on_addConfigurationSet()で兼用 } void test_isActive_on_setConfigurationSetValues() { // TODO 実装すること } /*! * @brief getConfigurationSets()メソッドのテスト * * - 登録されている全てのコンフィグレーションセットを正しく取得できるか? */ void test_getConfigurationSets() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // 2つのパラメータ値を含むコンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); configSet1.setProperty("name 1", "1.41421356"); configSet1.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); configSet2.setProperty("name 1", "3.14159"); configSet2.setProperty("name 2", "2.71828"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // getConfigurationSets()で登録されている全てのコンフィグレーションセットを取得し、 // 登録したものと一致していることを確認する std::vector<coil::Properties*> expectedConfigSets; expectedConfigSets.push_back(&configSet1); expectedConfigSets.push_back(&configSet2); const std::vector<coil::Properties*>& configSets = configAdmin.getConfigurationSets(); CPPUNIT_ASSERT_EQUAL( std::string("1.41421356"), getPropertiesBy("set 1", configSets)->getProperty("name 1")); CPPUNIT_ASSERT_EQUAL( std::string("1.7320508"), getPropertiesBy("set 1", configSets)->getProperty("name 2")); CPPUNIT_ASSERT_EQUAL( std::string("3.14159"), getPropertiesBy("set 2", configSets)->getProperty("name 1")); CPPUNIT_ASSERT_EQUAL( std::string("2.71828"), getPropertiesBy("set 2", configSets)->getProperty("name 2")); } /*! * addConfigurationSet()メソッドとgetConfigurationSet()メソッドのテスト * * - addConfigurationSet()で、コンフィグレーションセットを追加できるか? * - getConfigurationSet()で、追加したコンフィグレーションセットを正しく取得できるか? */ void test_addConfigurationSet_and_getConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // addConfigurationSet()で、コンフィグレーションセットを追加できるか? coil::Properties configSet("id"); configSet.setProperty("key", "value"); configAdmin.addConfigurationSet(configSet); // getConfigurationSet()で、追加したコンフィグレーションセットを正しく取得できるか? const coil::Properties& configSetRet = configAdmin.getConfigurationSet("id"); CPPUNIT_ASSERT_EQUAL(std::string("value"), configSetRet.getProperty("key")); } /*! * setConfigurationSetValues()メソッドのテスト * * - 指定したプロパティが、正しく指定したコンフィグレーションセットに追加されるか? */ void test_setConfigurationSetValues() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); coil::Properties configSet1("id"); configSet1.setProperty("name 1", "1.41421356"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); // 登録済みのコンフィグレーションセットに対して、プロパティを追加する coil::Properties configSet2("id"); configSet2.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.setConfigurationSetValues(configSet2)); // 当該コンフィグレーションセットを取得して、プロパティが意図どおり追加されていることを確認する const coil::Properties& configSetRet = configAdmin.getConfigurationSet("id"); CPPUNIT_ASSERT_EQUAL(std::string("1.41421356"), configSetRet.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string("1.7320508"), configSetRet.getProperty("name 2")); } /*! * @brief setConfigurationSetValues()メソッドのテスト * * - 存在しないコンフィグレーションセットに対してプロパティ追加を試みて、意図どおり失敗するか? * - 失敗後に、登録済みのコンフィグレーションセットが影響を受けていないか? */ void test_setConfigurationSetValues_with_inexist_configuration_set() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); coil::Properties configSet1("id"); configSet1.setProperty("name 1", "1.41421356"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); // 存在しないコンフィグレーションセットに対してプロパティ追加を試みて、意図どおり失敗するか? coil::Properties configSet2("inexist id"); configSet2.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.setConfigurationSetValues(configSet2)); // 失敗後に、登録済みのコンフィグレーションセットが影響を受けていないか? const coil::Properties& configSetRet = configAdmin.getConfigurationSet("id"); CPPUNIT_ASSERT_EQUAL(std::string("1.41421356"), configSetRet.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string(""), configSetRet.getProperty("name 2")); } /*! * @brief getActiveConfigurationSet()メソッドのテスト * * - アクティブコンフィグレーションセットを正しく取得できるか? */ void test_getActiveConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); configSet1.setProperty("name 1", "1.41421356"); configSet1.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); configSet2.setProperty("name 1", "3.14159"); configSet2.setProperty("name 2", "2.71828"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // "set 1"をアクティブ化した後、アクティブコンフィグレーションセットとして正しく取得できるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 1")); const coil::Properties& activeConfigSet1 = configAdmin.getActiveConfigurationSet(); CPPUNIT_ASSERT_EQUAL(std::string("1.41421356"), activeConfigSet1.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string("1.7320508"), activeConfigSet1.getProperty("name 2")); // "set 2"をアクティブ化した後、アクティブコンフィグレーションセットとして正しく取得できるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 2")); const coil::Properties& activeConfigSet2 = configAdmin.getActiveConfigurationSet(); CPPUNIT_ASSERT_EQUAL(std::string("3.14159"), activeConfigSet2.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string("2.71828"), activeConfigSet2.getProperty("name 2")); } /*! * @brief removeConfigurationSet()のテスト * * - 登録されているコンフィグレーションセットを正しく登録解除できるか? */ void test_removeConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを追加しておく coil::Properties configSet("id"); configSet.setProperty("key", "value"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); // いったん登録したコンフィグレーションセットを登録解除する CPPUNIT_ASSERT_EQUAL(true, configAdmin.removeConfigurationSet("id")); // 当該コンフィグレーションセットが存在しないことを確認する CPPUNIT_ASSERT_EQUAL(false, configAdmin.haveConfig("id")); } /*! * @brief removeConfigurationSet()のテスト * * - 存在しないコンフィグレーションセットIDを指定した場合に、意図どおりに失敗するか? */ void test_removeConfigurationSet_with_inexist_configuration_id() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを追加しておく coil::Properties configSet("id"); configSet.setProperty("key", "value"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); // 存在しないコンフィグレーションセットIDを指定した場合に、意図どおりに失敗するか? CPPUNIT_ASSERT_EQUAL(false, configAdmin.removeConfigurationSet("inexist id")); // 登録されているコンフィグレーションセットは、元どおり存在しているか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); } void test_activateConfigurationSet() { // test_getActiveConfigurationSet()で兼ねる } /*! * @brief setOnUpdate()メソッドのテスト * * - */ void test_setOnUpdate() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnUpdateCallbackMock* cdm1 = new OnUpdateCallbackMock(); OnUpdateCallbackMock* cdm2 = new OnUpdateCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnUpdate(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onUpdateMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnUpdate(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onUpdateMock("config_id"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnUpdateParam()メソッドのテスト * * - */ void test_setOnUpdateParam() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnUpdateParamCallbackMock* cdm1 = new OnUpdateParamCallbackMock(); OnUpdateParamCallbackMock* cdm2 = new OnUpdateParamCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnUpdateParam(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onUpdateParamMock("config_id", "param1"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnUpdateParam(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onUpdateParamMock("config_id", "param2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnSetConfigurationSet()メソッドのテスト * * - */ void test_setOnSetConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); coil::Properties configSet2("config_id2"); configSet2.setProperty("config_id2.key", "value2"); OnSetConfigurationSetCallbackMock* cdm1 = new OnSetConfigurationSetCallbackMock(); OnSetConfigurationSetCallbackMock* cdm2 = new OnSetConfigurationSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnSetConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onSetConfigurationSetMock(configSet); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnSetConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onSetConfigurationSetMock(configSet2); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnAddConfigurationSet()メソッドのテスト * * - */ void test_setOnAddConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); coil::Properties configSet2("config_id2"); configSet2.setProperty("config_id2.key", "value2"); OnAddConfigurationAddCallbackMock* cdm1 = new OnAddConfigurationAddCallbackMock(); OnAddConfigurationAddCallbackMock* cdm2 = new OnAddConfigurationAddCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnAddConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onAddConfigurationSetMock(configSet); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnAddConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onAddConfigurationSetMock(configSet2); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnRemoveConfigurationSet()メソッドのテスト * * - */ void test_setOnRemoveConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnRemoveConfigurationSetCallbackMock* cdm1 = new OnRemoveConfigurationSetCallbackMock(); OnRemoveConfigurationSetCallbackMock* cdm2 = new OnRemoveConfigurationSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnRemoveConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onRemoveConfigurationSetMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnRemoveConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onRemoveConfigurationSetMock("config_id2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnActivateSet()メソッドのテスト * * - */ void test_setOnActivateSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnActivateSetCallbackMock* cdm1 = new OnActivateSetCallbackMock(); OnActivateSetCallbackMock* cdm2 = new OnActivateSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnActivateSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onActivateSetMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnActivateSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onActivateSetMock("config_id2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } }; }; // namespace ConfigAdmin /* * Register test suite */ CPPUNIT_TEST_SUITE_REGISTRATION(Config::ConfigTests); CPPUNIT_TEST_SUITE_REGISTRATION(ConfigAdmin::ConfigAdminTests); #ifdef LOCAL_MAIN int main(int argc, char* argv[]) { FORMAT format = TEXT_OUT; int target = 0; std::string xsl; std::string ns; std::string fname; std::ofstream ofs; int i(1); while (i < argc) { std::string arg(argv[i]); std::string next_arg; if (i + 1 < argc) next_arg = argv[i + 1]; else next_arg = ""; if (arg == "--text") { format = TEXT_OUT; break; } if (arg == "--xml") { if (next_arg == "") { fname = argv[0]; fname += ".xml"; } else { fname = next_arg; } format = XML_OUT; ofs.open(fname.c_str()); } if ( arg == "--compiler" ) { format = COMPILER_OUT; break; } if ( arg == "--cerr" ) { target = 1; break; } if ( arg == "--xsl" ) { if (next_arg == "") xsl = "default.xsl"; else xsl = next_arg; } if ( arg == "--namespace" ) { if (next_arg == "") { std::cerr << "no namespace specified" << std::endl; exit(1); } else { xsl = next_arg; } } ++i; } CppUnit::TextUi::TestRunner runner; if ( ns.empty() ) runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest()); else runner.addTest(CppUnit::TestFactoryRegistry::getRegistry(ns).makeTest()); CppUnit::Outputter* outputter = 0; std::ostream* stream = target ? &std::cerr : &std::cout; switch ( format ) { case TEXT_OUT : outputter = new CppUnit::TextOutputter(&runner.result(),*stream); break; case XML_OUT : std::cout << "XML_OUT" << std::endl; outputter = new CppUnit::XmlOutputter(&runner.result(), ofs, "shift_jis"); static_cast<CppUnit::XmlOutputter*>(outputter)->setStyleSheet(xsl); break; case COMPILER_OUT : outputter = new CppUnit::CompilerOutputter(&runner.result(),*stream); break; } runner.setOutputter(outputter); runner.run(); return 0; // runner.run() ? 0 : 1; } #endif // MAIN #endif // ConfigAdmin_cpp
113  CPPUNIT_ASSERT_EQUAL(true, config.update("1.41421356"));
114 
115  // バインドした変数が、update()で指定された値に正しく更新されるか?
116  CPPUNIT_ASSERT_EQUAL(1.41421356, value);
117  }
118 
126  {
127  std::string name = "name of parameter";
128  double value = 0.0;
129  std::string default_value = "3.14159";
130 
131  RTC::Config<double> config(name.c_str(), value, default_value.c_str());
132 
133  // update()前は、変数値が初期状態のままのはず
134  CPPUNIT_ASSERT_EQUAL(0.0, value);
135 
136  // 浮動小数点値に変換できない内容でupdate()を呼出し、意図どおり失敗するか?
137  CPPUNIT_ASSERT_EQUAL(false, config.update("Not float value"));
138 
139  // バインドした変数の値が、コンストラクタで指定したデフォルト値に正しく更新されるか?
140  CPPUNIT_ASSERT_EQUAL(3.14159, value);
141  }
142 
150  {
151  std::string name = "name of parameter";
152  double value = 0.0;
153  std::string illegal_default_value = "Not float value";
154 
155  RTC::Config<double> config(name.c_str(), value, illegal_default_value.c_str());
156 
157  // update()前は、変数値が初期状態のままのはず
158  CPPUNIT_ASSERT_EQUAL(0.0, value);
159 
160  // 浮動小数点値に変換できないデフォルト値が指定され、
161  // かつ浮動小数点値に変換できない内容でupdate()を呼出した場合、
162  // バインドした変数の値は、更新されることなく元の値に留まるか?
163  CPPUNIT_ASSERT_EQUAL(false, config.update("Not float value too"));
164  CPPUNIT_ASSERT_EQUAL(0.0, value);
165  }
166 
167  };
168 }; // namespace Config
169 
174 namespace ConfigAdmin
175 {
177  {
178  public:
179  OnUpdateCallbackMock(void) : result(false) {}
180  virtual ~OnUpdateCallbackMock(void){}
181  void operator()(const char* config_set)
182  {
183  // この出力があれば正しく呼ばれている// std::cout << "OnUpdateCallbackMock1 config_set=" << config_set << std::endl; result = true; } bool result; }; class OnUpdateParamCallbackMock : public RTC::OnUpdateParamCallback { public: OnUpdateParamCallbackMock(void) : result(false) {} virtual ~OnUpdateParamCallbackMock(void){} void operator()(const char* config_set, const char* config_param) { // std::cout << "OnUpdateParamCallbackMock2 config_set=" << config_set << std::endl; // std::cout << "OnUpdateParamCallbackMock2 config_param=" << config_param << std::endl; result = true; } bool result; }; class OnSetConfigurationSetCallbackMock : public RTC::OnSetConfigurationSetCallback { public: OnSetConfigurationSetCallbackMock(void) : result(false) {} virtual ~OnSetConfigurationSetCallbackMock(void){} void operator()(const coil::Properties& config_set) { // std::cout << "OnSetConfigurationSetCallbackMock3 config_set=" << std::endl << config_set << std::endl; result = true; } bool result; }; class OnAddConfigurationAddCallbackMock : public RTC::OnAddConfigurationAddCallback { public: OnAddConfigurationAddCallbackMock(void) : result(false) {} virtual ~OnAddConfigurationAddCallbackMock(void){} void operator()(const coil::Properties& config_set) { // std::cout << "OnAddConfigurationAddCallbackMock4 config_set=" << std::endl << config_set << std::endl; result = true; } bool result; }; class OnRemoveConfigurationSetCallbackMock : public RTC::OnRemoveConfigurationSetCallback { public: OnRemoveConfigurationSetCallbackMock(void) : result(false) {} virtual ~OnRemoveConfigurationSetCallbackMock(void){} void operator()(const char* config_set) { // std::cout << "OnRemoveConfigurationSetCallbackMock5 config_set=" << config_set << std::endl; result = true; } bool result; }; class OnActivateSetCallbackMock : public RTC::OnActivateSetCallback { public: OnActivateSetCallbackMock(void) : result(false) {} virtual ~OnActivateSetCallbackMock(void){} void operator()(const char* config_id) { // std::cout << "OnActivateSetCallbackMock6 config_id=" << config_id << std::endl; result = true; } bool result; }; // ConfigAdmin を継承して、protected: 関数をオーバーロードする class ConfigAdminMock : public RTC::ConfigAdmin { public: ConfigAdminMock(coil::Properties& configsets) : RTC::ConfigAdmin(configsets) {} virtual ~ConfigAdminMock(void){} void onUpdateMock(const char* config_set) { // std::cout << "ConfigAdmin::onUpdate() 1 before" << std::endl; RTC::ConfigAdmin::onUpdate(config_set); // std::cout << "ConfigAdmin::onUpdate() 1 after" << std::endl; } void onUpdateParamMock(const char* config_set, const char* config_param) { // std::cout << "ConfigAdmin::onUpdateParam() 2 before" << std::endl; RTC::ConfigAdmin::onUpdateParam(config_set, config_param); // std::cout << "ConfigAdmin::onUpdateParam() 2 after" << std::endl; } void onSetConfigurationSetMock(const coil::Properties& config_set) { // std::cout << "ConfigAdmin::onSetConfigurationSet() 3 before" << std::endl; RTC::ConfigAdmin::onSetConfigurationSet(config_set); // std::cout << "ConfigAdmin::onSetConfigurationSet() 3 after" << std::endl; } void onAddConfigurationSetMock(const coil::Properties& config_set) { // std::cout << "ConfigAdmin::onAddConfigurationSet() 4 before" << std::endl; RTC::ConfigAdmin::onAddConfigurationSet(config_set); // std::cout << "ConfigAdmin::onAddConfigurationSet() 4 after" << std::endl; } void onRemoveConfigurationSetMock(const char* config_id) { // std::cout << "ConfigAdmin::onRemoveConfigurationSet() 5 before" << std::endl; RTC::ConfigAdmin::onRemoveConfigurationSet(config_id); // std::cout << "ConfigAdmin::onRemoveConfigurationSet() 5 after" << std::endl; } void onActivateSetMock(const char* config_id) { // std::cout << "ConfigAdmin::onActivateSet() 6 before" << std::endl; RTC::ConfigAdmin::onActivateSet(config_id); // std::cout << "ConfigAdmin::onActivateSet() 6 after" << std::endl; } }; class ConfigAdminTests : public CppUnit::TestFixture { CPPUNIT_TEST_SUITE(ConfigAdminTests); CPPUNIT_TEST(test_setOnUpdate); CPPUNIT_TEST(test_setOnUpdateParam); CPPUNIT_TEST(test_setOnSetConfigurationSet); CPPUNIT_TEST(test_setOnAddConfigurationSet); CPPUNIT_TEST(test_setOnRemoveConfigurationSet); CPPUNIT_TEST(test_setOnActivateSet); CPPUNIT_TEST(test_constructor); CPPUNIT_TEST(test_bindParameter); CPPUNIT_TEST(test_bindParameter_already_exist); CPPUNIT_TEST(test_bindParameter_illegal_default_value); CPPUNIT_TEST(test_update); CPPUNIT_TEST(test_update_by_inexist_configuration_set); CPPUNIT_TEST(test_update_with_specified_parameter_name); CPPUNIT_TEST(test_update_by_active_configuration_set); CPPUNIT_TEST(test_isExist); CPPUNIT_TEST(test_isChanged_on_addConfigurationSet); CPPUNIT_TEST(test_isChanged_on_removeConfigurationSet); CPPUNIT_TEST(test_isChanged_on_activateConfigurationSet); CPPUNIT_TEST(test_getActiveId); CPPUNIT_TEST(test_haveConfig); CPPUNIT_TEST(test_isActive_on_addConfigurationSet); CPPUNIT_TEST(test_isActive_on_removeConfigurationSet); CPPUNIT_TEST(test_getConfigurationSets); CPPUNIT_TEST(test_addConfigurationSet_and_getConfigurationSet); CPPUNIT_TEST(test_setConfigurationSetValues); CPPUNIT_TEST(test_setConfigurationSetValues_with_inexist_configuration_set); CPPUNIT_TEST(test_getActiveConfigurationSet); CPPUNIT_TEST(test_removeConfigurationSet); CPPUNIT_TEST(test_removeConfigurationSet_with_inexist_configuration_id); CPPUNIT_TEST_SUITE_END(); private: // helper const coil::Properties* getPropertiesBy( const std::string& name, const std::vector<coil::Properties*>& propertiesSet) const { for (int i = 0; i < (int) propertiesSet.size(); ++i) { if (std::string(propertiesSet[i]->getName()) == name) { return propertiesSet[i]; } } return 0; // not found } public: /*! * @brief Constructor */ ConfigAdminTests() { } /*! * @brief Destructor */ ~ConfigAdminTests() { } /*! * @brief Test initialization */ virtual void setUp() { } /*! * @brief Test finalization */ virtual void tearDown() { } /*! * @brief コンストラクタのテスト * * - 引数で指定したコンフィグレーションセットが、正しく設定されるか? */ void test_constructor() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); RTC::ConfigAdmin configAdmin(configSet); // 引数で指定したコンフィグレーションセットが、正しく設定されるか? const coil::Properties& activeConfigSet = configAdmin.getConfigurationSet("config_id"); CPPUNIT_ASSERT_EQUAL(std::string("value"), activeConfigSet.getProperty("key")); } /*! * @brief bindParameter()メソッドのテスト * * - bindParameter()で、正常に変数をバインドできるか? * - バインドした変数は、指定したデフォルト値に正しく更新されているか? */ void test_bindParameter() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // bindParameter()で、正常に変数をバインドできるか? const char* varName = "name"; double var = 0.0; const char* default_value = "3.14159"; CPPUNIT_ASSERT_EQUAL( true, configAdmin.bindParameter(varName, var, default_value)); // バインドした変数は、指定したデフォルト値に正しく更新されているか? CPPUNIT_ASSERT_EQUAL(3.14159, var); } /*! * @brief bindParameter()メソッドのテスト * * - 同一名称の変数バインドを試みて、意図どおり失敗するか? */ void test_bindParameter_already_exist() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // まずは、初回のバインドを行う const char* varName1 = "name"; double var1 = 0.0; const char* default_value1 = "3.14159"; CPPUNIT_ASSERT_EQUAL( true, configAdmin.bindParameter(varName1, var1, default_value1)); CPPUNIT_ASSERT_EQUAL(3.14159, var1); // 同一名称の変数バインドを試みて、意図どおり失敗するか? const char* varName2 = varName1; double var2 = 1.0; const char* default_value2 = "1.41421356"; CPPUNIT_ASSERT_EQUAL( false, configAdmin.bindParameter(varName2, var2, default_value2)); // バインド変数の値は更新されることなく保持されているか? CPPUNIT_ASSERT_EQUAL(3.14159, var1); } /*! * @brief bindParameter()メソッドのテスト * * - 指定のデータ型に変換できないデフォルト値を指定して、意図どおり失敗するか? */ void test_bindParameter_illegal_default_value() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // 指定のデータ型に変換できないデフォルト値を指定して、意図どおり失敗するか? const char* varName = "name"; double var = 0.0; const char* default_value = "Illegal default value"; CPPUNIT_ASSERT_EQUAL( false, configAdmin.bindParameter(varName, var, default_value)); } /*! * @brief update()メソッドのテスト * * - コンフィグレーションセットを指定してupdate()し、その内容でバインド変数値が正しく更新されるか? */ void test_update() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセット1を準備する coil::Properties configSet1("set 1"); configSet1.setProperty("name", "1.41421356"); // コンフィグレーションセット2を準備する coil::Properties configSet2("set 2"); configSet2.setProperty("name", "1.7320508"); // 準備した2つのコンフィグレーションセットを追加しておく CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // 変数をバインドする const char* varName = "name"; double var = 0.0; const char* default_value = "3.14159"; CPPUNIT_ASSERT_EQUAL( true, configAdmin.bindParameter(varName, var, default_value)); // update()前は、まだ変数がデフォルト値のままであることを確認する CPPUNIT_ASSERT_EQUAL(3.14159, var); // コンフィグレーションセット1を指定してupdate()し、その内容でバインド変数値が正しく更新されるか? configAdmin.update("set 1"); CPPUNIT_ASSERT_EQUAL(1.41421356, var); // コンフィグレーションセット2を指定してupdate()し、その内容でバインド変数値が正しく更新されるか? configAdmin.update("set 2"); CPPUNIT_ASSERT_EQUAL(1.7320508, var); } /*! * @brief update()メソッドのテスト * * - 存在しないコンフィグレーションIDを指定してupdate()を呼出した場合に、 * バインド変数が更新されずに、そのまま保持されるか? */ void test_update_by_inexist_configuration_set() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet("set"); configSet.setProperty("name", "1.41421356"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); // 変数をバインドする const char* varName = "name"; double var = 0.0; const char* default_value = "3.14159"; CPPUNIT_ASSERT_EQUAL( true, configAdmin.bindParameter(varName, var, default_value)); CPPUNIT_ASSERT_EQUAL(3.14159, var); // 存在しないコンフィグレーションIDを指定してupdate()を呼出した場合に、 // バインド変数が更新されずに、そのまま保持されるか? configAdmin.update("inexist set"); CPPUNIT_ASSERT_EQUAL(3.14159, var); } /*! * @brief update()メソッド(名称指定)のテスト * * - 指定したコンフィグレーションセットの指定した名称の変数だけが、正しく更新されるか? */ void test_update_with_specified_parameter_name() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // 2つのパラメータ値を含むコンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); configSet1.setProperty("name 1", "1.41421356"); configSet1.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); configSet2.setProperty("name 1", "3.14159"); configSet2.setProperty("name 2", "2.71828"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // 2つの変数をバインドする const char* varName1 = "name 1"; double var1 = 0.0; const char* default_value1 = "2.23620679"; CPPUNIT_ASSERT_EQUAL( true, configAdmin.bindParameter(varName1, var1, default_value1)); CPPUNIT_ASSERT_EQUAL(2.23620679, var1); const char* varName2 = "name 2"; double var2 = 0.0; const char* default_value2 = "2.4494897"; CPPUNIT_ASSERT_EQUAL( true, configAdmin.bindParameter(varName2, var2, default_value2)); CPPUNIT_ASSERT_EQUAL(2.4494897, var2); // 2つのうち、片方の変数のみを名称指定してupdate()を行い、指定した変数だけが正しく更新されるか? configAdmin.update("set 2", "name 1"); CPPUNIT_ASSERT_EQUAL(3.14159, var1); CPPUNIT_ASSERT_EQUAL(2.4494897, var2); } /*! * @brief update()メソッド(アクティブコンフィグレーションセット)のテスト * * - update()呼出しにより、バインド変数がアクティブなコンフィグレーションセットの値で更新されるか? */ void test_update_by_active_configuration_set() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); configSet1.setProperty("name", "1.41421356"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); configSet2.setProperty("name", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // 変数をバインドする const char* varName = "name"; double var = 0.0; const char* default_value = "3.14159"; CPPUNIT_ASSERT_EQUAL( true, configAdmin.bindParameter(varName, var, default_value)); CPPUNIT_ASSERT_EQUAL(3.14159, var); // "set 1"のほうをアクティブにする CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 1")); // アクティブにしただけでは、まだバインド変数は更新されていないはず CPPUNIT_ASSERT_EQUAL(3.14159, var); // update()呼出しにより、バインド変数がアクティブなコンフィグレーションセットの値で更新されるか? configAdmin.update(); CPPUNIT_ASSERT_EQUAL(1.41421356, var); // "set 2"のほうをアクティブにする CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 2")); // アクティブにしただけでは、まだバインド変数は更新されていないはず CPPUNIT_ASSERT_EQUAL(1.41421356, var); // update()呼出しにより、バインド変数がアクティブなコンフィグレーションセットの値で更新されるか? configAdmin.update(); CPPUNIT_ASSERT_EQUAL(1.7320508, var); } /*! * @brief isExist()メソッドのテスト * * - バインドした変数の名称でisExist()を呼出し、真値が得られるか? * - バインドしていない名称でisExist()を呼出し、偽値が得られるか? */ void test_isExist() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // 変数をバインドする const char* varName = "name"; double var = 0.0; const char* default_value = "3.14159"; CPPUNIT_ASSERT_EQUAL( true, configAdmin.bindParameter(varName, var, default_value)); CPPUNIT_ASSERT_EQUAL(3.14159, var); // バインドした変数の名称でisExist()を呼出し、真値が得られるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.isExist("name")); // バインドしていない名称でisExist()を呼出し、偽値が得られるか? CPPUNIT_ASSERT_EQUAL(false, configAdmin.isExist("inexist name")); } /*! * @brief isChanged()メソッドのテスト * * - addConfigurationSet()呼出後は、isChanged()は真値となるか? */ void test_isChanged_on_addConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // update()を呼出してバインド変数と同期を行い、isChanged()が偽となる状態にする configAdmin.update(); CPPUNIT_ASSERT_EQUAL(false, configAdmin.isChanged()); // addConfigurationSet()を呼出す coil::Properties configSet("id"); configSet.setProperty("key", "value"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); // addConfigurationSet()呼出後は、isChanged()は真値となるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.isChanged()); } /*! * @brief isChanged()メソッドのテスト * * - removeConfigurationSet()呼出後は、isChanged()は真値となるか? */ void test_isChanged_on_removeConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // addConfigurationSet()を呼出す coil::Properties configSet("id"); configSet.setProperty("key", "value"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); // update()を呼出してバインド変数と同期を行い、isChanged()が偽となる状態にする CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("id")); configAdmin.update(); CPPUNIT_ASSERT_EQUAL(false, configAdmin.isChanged()); // removeConfigurationSet()の呼出後は、isChanged()は真値となるか? //CPPUNIT_ASSERT_EQUAL(true, configAdmin.removeConfigurationSet("id")); //CPPUNIT_ASSERT_EQUAL(true, configAdmin.isChanged()); } /*! * @brief isChanged()メソッドのテスト * * - activateConfigurationSet()呼出後は、isChanged()は真値となるか? */ void test_isChanged_on_activateConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // "set 1"のほうをアクティブにする CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 1")); // update()を行い、isChanged()が偽値の状態にしておく configAdmin.update(); CPPUNIT_ASSERT_EQUAL(false, configAdmin.isChanged()); // "set 2"のほうをアクティブにすると、isChanged()が真値となるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 2")); CPPUNIT_ASSERT_EQUAL(true, configAdmin.isChanged()); } void test_isChanged_on_setConfigurationSetValues() { // TODO 実装すること } /*! * @brief getActiveId()メソッドのテスト * * - アクティブ化したコンフィグレーションセットのIDを正しく取得できるか? */ void test_getActiveId() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // 初期状態では、アクティブIDは"default"のはず CPPUNIT_ASSERT_EQUAL(std::string("default"), std::string(configAdmin.getActiveId())); // "set 1"をアクティブにした後、意図どおりのアクティブIDを取得できるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 1")); CPPUNIT_ASSERT_EQUAL(std::string("set 1"), std::string(configAdmin.getActiveId())); // "set 2"をアクティブにした後、意図どおりのアクティブIDを取得できるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 2")); CPPUNIT_ASSERT_EQUAL(std::string("set 2"), std::string(configAdmin.getActiveId())); } /*! * @brief haveConfig()メソッドのテスト * * - 存在するコンフィグレーションセットIDを指定した場合に、haveConfig()で正しく真値を得るか? * - 存在しないコンフィグレーションセットIDを指定した場合に、haveConfig()で正しく偽値を得るか? */ void test_haveConfig() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("id"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); // 存在するコンフィグレーションセットIDを指定した場合に、haveConfig()で正しく真値を得るか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); // 存在しないコンフィグレーションセットIDを指定した場合に、haveConfig()で正しく偽値を得るか? CPPUNIT_ASSERT_EQUAL(false, configAdmin.haveConfig("inexist id")); } /*! * @brief isActive()メソッドのテスト * * - addConfigurationSet()呼出後は、isActive()は正しく偽値を得るか? * - activateConfigurationSet()でアクティブ化した後は、isActive()は正しく真値を得るか? */ void test_isActive_on_addConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // addConfigurationSet()呼出後は、isActive()は正しく偽値を得るか? coil::Properties configSet("id"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); CPPUNIT_ASSERT_EQUAL(false, configAdmin.isActive()); // activateConfigurationSet()でアクティブ化した後は、isActive()は正しく真値を得るか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("id")); CPPUNIT_ASSERT_EQUAL(true, configAdmin.isActive()); } /*! * @brief isActive()メソッドのテスト * * - removeConfigurationSet()呼出後は、isActive()は正しく偽値を得るか? */ void test_isActive_on_removeConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを追加してアクティブ化しておく coil::Properties configSet("id"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("id")); CPPUNIT_ASSERT_EQUAL(true, configAdmin.isActive()); // 登録されているコンフィグレーションセットをremoveConfigurationSet()で解除した場合、 // isActive()は正しく偽値を得るか? //CPPUNIT_ASSERT_EQUAL(true, configAdmin.removeConfigurationSet("id")); //CPPUNIT_ASSERT_EQUAL(false, configAdmin.isActive()); } /*! * @brief isActive()メソッドのテスト * * - activateConfigurationSet()でアクティブ化した後は、isActive()は正しく真値を得るか? */ void test_isActive_on_activateConfigurationSet() { // test_isActive_on_addConfigurationSet()で兼用 } void test_isActive_on_setConfigurationSetValues() { // TODO 実装すること } /*! * @brief getConfigurationSets()メソッドのテスト * * - 登録されている全てのコンフィグレーションセットを正しく取得できるか? */ void test_getConfigurationSets() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // 2つのパラメータ値を含むコンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); configSet1.setProperty("name 1", "1.41421356"); configSet1.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); configSet2.setProperty("name 1", "3.14159"); configSet2.setProperty("name 2", "2.71828"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // getConfigurationSets()で登録されている全てのコンフィグレーションセットを取得し、 // 登録したものと一致していることを確認する std::vector<coil::Properties*> expectedConfigSets; expectedConfigSets.push_back(&configSet1); expectedConfigSets.push_back(&configSet2); const std::vector<coil::Properties*>& configSets = configAdmin.getConfigurationSets(); CPPUNIT_ASSERT_EQUAL( std::string("1.41421356"), getPropertiesBy("set 1", configSets)->getProperty("name 1")); CPPUNIT_ASSERT_EQUAL( std::string("1.7320508"), getPropertiesBy("set 1", configSets)->getProperty("name 2")); CPPUNIT_ASSERT_EQUAL( std::string("3.14159"), getPropertiesBy("set 2", configSets)->getProperty("name 1")); CPPUNIT_ASSERT_EQUAL( std::string("2.71828"), getPropertiesBy("set 2", configSets)->getProperty("name 2")); } /*! * addConfigurationSet()メソッドとgetConfigurationSet()メソッドのテスト * * - addConfigurationSet()で、コンフィグレーションセットを追加できるか? * - getConfigurationSet()で、追加したコンフィグレーションセットを正しく取得できるか? */ void test_addConfigurationSet_and_getConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // addConfigurationSet()で、コンフィグレーションセットを追加できるか? coil::Properties configSet("id"); configSet.setProperty("key", "value"); configAdmin.addConfigurationSet(configSet); // getConfigurationSet()で、追加したコンフィグレーションセットを正しく取得できるか? const coil::Properties& configSetRet = configAdmin.getConfigurationSet("id"); CPPUNIT_ASSERT_EQUAL(std::string("value"), configSetRet.getProperty("key")); } /*! * setConfigurationSetValues()メソッドのテスト * * - 指定したプロパティが、正しく指定したコンフィグレーションセットに追加されるか? */ void test_setConfigurationSetValues() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); coil::Properties configSet1("id"); configSet1.setProperty("name 1", "1.41421356"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); // 登録済みのコンフィグレーションセットに対して、プロパティを追加する coil::Properties configSet2("id"); configSet2.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.setConfigurationSetValues(configSet2)); // 当該コンフィグレーションセットを取得して、プロパティが意図どおり追加されていることを確認する const coil::Properties& configSetRet = configAdmin.getConfigurationSet("id"); CPPUNIT_ASSERT_EQUAL(std::string("1.41421356"), configSetRet.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string("1.7320508"), configSetRet.getProperty("name 2")); } /*! * @brief setConfigurationSetValues()メソッドのテスト * * - 存在しないコンフィグレーションセットに対してプロパティ追加を試みて、意図どおり失敗するか? * - 失敗後に、登録済みのコンフィグレーションセットが影響を受けていないか? */ void test_setConfigurationSetValues_with_inexist_configuration_set() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); coil::Properties configSet1("id"); configSet1.setProperty("name 1", "1.41421356"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); // 存在しないコンフィグレーションセットに対してプロパティ追加を試みて、意図どおり失敗するか? coil::Properties configSet2("inexist id"); configSet2.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.setConfigurationSetValues(configSet2)); // 失敗後に、登録済みのコンフィグレーションセットが影響を受けていないか? const coil::Properties& configSetRet = configAdmin.getConfigurationSet("id"); CPPUNIT_ASSERT_EQUAL(std::string("1.41421356"), configSetRet.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string(""), configSetRet.getProperty("name 2")); } /*! * @brief getActiveConfigurationSet()メソッドのテスト * * - アクティブコンフィグレーションセットを正しく取得できるか? */ void test_getActiveConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); configSet1.setProperty("name 1", "1.41421356"); configSet1.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); configSet2.setProperty("name 1", "3.14159"); configSet2.setProperty("name 2", "2.71828"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // "set 1"をアクティブ化した後、アクティブコンフィグレーションセットとして正しく取得できるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 1")); const coil::Properties& activeConfigSet1 = configAdmin.getActiveConfigurationSet(); CPPUNIT_ASSERT_EQUAL(std::string("1.41421356"), activeConfigSet1.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string("1.7320508"), activeConfigSet1.getProperty("name 2")); // "set 2"をアクティブ化した後、アクティブコンフィグレーションセットとして正しく取得できるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 2")); const coil::Properties& activeConfigSet2 = configAdmin.getActiveConfigurationSet(); CPPUNIT_ASSERT_EQUAL(std::string("3.14159"), activeConfigSet2.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string("2.71828"), activeConfigSet2.getProperty("name 2")); } /*! * @brief removeConfigurationSet()のテスト * * - 登録されているコンフィグレーションセットを正しく登録解除できるか? */ void test_removeConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを追加しておく coil::Properties configSet("id"); configSet.setProperty("key", "value"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); // いったん登録したコンフィグレーションセットを登録解除する CPPUNIT_ASSERT_EQUAL(true, configAdmin.removeConfigurationSet("id")); // 当該コンフィグレーションセットが存在しないことを確認する CPPUNIT_ASSERT_EQUAL(false, configAdmin.haveConfig("id")); } /*! * @brief removeConfigurationSet()のテスト * * - 存在しないコンフィグレーションセットIDを指定した場合に、意図どおりに失敗するか? */ void test_removeConfigurationSet_with_inexist_configuration_id() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを追加しておく coil::Properties configSet("id"); configSet.setProperty("key", "value"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); // 存在しないコンフィグレーションセットIDを指定した場合に、意図どおりに失敗するか? CPPUNIT_ASSERT_EQUAL(false, configAdmin.removeConfigurationSet("inexist id")); // 登録されているコンフィグレーションセットは、元どおり存在しているか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); } void test_activateConfigurationSet() { // test_getActiveConfigurationSet()で兼ねる } /*! * @brief setOnUpdate()メソッドのテスト * * - */ void test_setOnUpdate() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnUpdateCallbackMock* cdm1 = new OnUpdateCallbackMock(); OnUpdateCallbackMock* cdm2 = new OnUpdateCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnUpdate(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onUpdateMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnUpdate(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onUpdateMock("config_id"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnUpdateParam()メソッドのテスト * * - */ void test_setOnUpdateParam() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnUpdateParamCallbackMock* cdm1 = new OnUpdateParamCallbackMock(); OnUpdateParamCallbackMock* cdm2 = new OnUpdateParamCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnUpdateParam(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onUpdateParamMock("config_id", "param1"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnUpdateParam(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onUpdateParamMock("config_id", "param2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnSetConfigurationSet()メソッドのテスト * * - */ void test_setOnSetConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); coil::Properties configSet2("config_id2"); configSet2.setProperty("config_id2.key", "value2"); OnSetConfigurationSetCallbackMock* cdm1 = new OnSetConfigurationSetCallbackMock(); OnSetConfigurationSetCallbackMock* cdm2 = new OnSetConfigurationSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnSetConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onSetConfigurationSetMock(configSet); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnSetConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onSetConfigurationSetMock(configSet2); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnAddConfigurationSet()メソッドのテスト * * - */ void test_setOnAddConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); coil::Properties configSet2("config_id2"); configSet2.setProperty("config_id2.key", "value2"); OnAddConfigurationAddCallbackMock* cdm1 = new OnAddConfigurationAddCallbackMock(); OnAddConfigurationAddCallbackMock* cdm2 = new OnAddConfigurationAddCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnAddConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onAddConfigurationSetMock(configSet); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnAddConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onAddConfigurationSetMock(configSet2); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnRemoveConfigurationSet()メソッドのテスト * * - */ void test_setOnRemoveConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnRemoveConfigurationSetCallbackMock* cdm1 = new OnRemoveConfigurationSetCallbackMock(); OnRemoveConfigurationSetCallbackMock* cdm2 = new OnRemoveConfigurationSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnRemoveConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onRemoveConfigurationSetMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnRemoveConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onRemoveConfigurationSetMock("config_id2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnActivateSet()メソッドのテスト * * - */ void test_setOnActivateSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnActivateSetCallbackMock* cdm1 = new OnActivateSetCallbackMock(); OnActivateSetCallbackMock* cdm2 = new OnActivateSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnActivateSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onActivateSetMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnActivateSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onActivateSetMock("config_id2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } }; }; // namespace ConfigAdmin /* * Register test suite */ CPPUNIT_TEST_SUITE_REGISTRATION(Config::ConfigTests); CPPUNIT_TEST_SUITE_REGISTRATION(ConfigAdmin::ConfigAdminTests); #ifdef LOCAL_MAIN int main(int argc, char* argv[]) { FORMAT format = TEXT_OUT; int target = 0; std::string xsl; std::string ns; std::string fname; std::ofstream ofs; int i(1); while (i < argc) { std::string arg(argv[i]); std::string next_arg; if (i + 1 < argc) next_arg = argv[i + 1]; else next_arg = ""; if (arg == "--text") { format = TEXT_OUT; break; } if (arg == "--xml") { if (next_arg == "") { fname = argv[0]; fname += ".xml"; } else { fname = next_arg; } format = XML_OUT; ofs.open(fname.c_str()); } if ( arg == "--compiler" ) { format = COMPILER_OUT; break; } if ( arg == "--cerr" ) { target = 1; break; } if ( arg == "--xsl" ) { if (next_arg == "") xsl = "default.xsl"; else xsl = next_arg; } if ( arg == "--namespace" ) { if (next_arg == "") { std::cerr << "no namespace specified" << std::endl; exit(1); } else { xsl = next_arg; } } ++i; } CppUnit::TextUi::TestRunner runner; if ( ns.empty() ) runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest()); else runner.addTest(CppUnit::TestFactoryRegistry::getRegistry(ns).makeTest()); CppUnit::Outputter* outputter = 0; std::ostream* stream = target ? &std::cerr : &std::cout; switch ( format ) { case TEXT_OUT : outputter = new CppUnit::TextOutputter(&runner.result(),*stream); break; case XML_OUT : std::cout << "XML_OUT" << std::endl; outputter = new CppUnit::XmlOutputter(&runner.result(), ofs, "shift_jis"); static_cast<CppUnit::XmlOutputter*>(outputter)->setStyleSheet(xsl); break; case COMPILER_OUT : outputter = new CppUnit::CompilerOutputter(&runner.result(),*stream); break; } runner.setOutputter(outputter); runner.run(); return 0; // runner.run() ? 0 : 1; } #endif // MAIN #endif // ConfigAdmin_cpp
184 // std::cout << "OnUpdateCallbackMock1 config_set=" << config_set << std::endl;
185  result = true;
186  }
187  bool result;
188  };
189 
191  {
192  public:
193  OnUpdateParamCallbackMock(void) : result(false) {}
195  void operator()(const char* config_set, const char* config_param)
196  {
197 // std::cout << "OnUpdateParamCallbackMock2 config_set=" << config_set << std::endl;
198 // std::cout << "OnUpdateParamCallbackMock2 config_param=" << config_param << std::endl;
199  result = true;
200  }
201  bool result;
202  };
203 
205  {
206  public:
207  OnSetConfigurationSetCallbackMock(void) : result(false) {}
209  void operator()(const coil::Properties& config_set)
210  {
211 // std::cout << "OnSetConfigurationSetCallbackMock3 config_set=" << std::endl << config_set << std::endl;
212  result = true;
213  }
214  bool result;
215  };
216 
218  {
219  public:
220  OnAddConfigurationAddCallbackMock(void) : result(false) {}
222  void operator()(const coil::Properties& config_set)
223  {
224 // std::cout << "OnAddConfigurationAddCallbackMock4 config_set=" << std::endl << config_set << std::endl;
225  result = true;
226  }
227  bool result;
228  };
229 
231  {
232  public:
233  OnRemoveConfigurationSetCallbackMock(void) : result(false) {}
235  void operator()(const char* config_set)
236  {
237 // std::cout << "OnRemoveConfigurationSetCallbackMock5 config_set=" << config_set << std::endl;
238  result = true;
239  }
240  bool result;
241  };
242 
244  {
245  public:
246  OnActivateSetCallbackMock(void) : result(false) {}
248  void operator()(const char* config_id)
249  {
250 // std::cout << "OnActivateSetCallbackMock6 config_id=" << config_id << std::endl;
251  result = true;
252  }
253  bool result;
254  };
255 
256  // ConfigAdmin を継承して、protected: 関数をオーバーロードする class ConfigAdminMock : public RTC::ConfigAdmin { public: ConfigAdminMock(coil::Properties& configsets) : RTC::ConfigAdmin(configsets) {} virtual ~ConfigAdminMock(void){} void onUpdateMock(const char* config_set) { // std::cout << "ConfigAdmin::onUpdate() 1 before" << std::endl; RTC::ConfigAdmin::onUpdate(config_set); // std::cout << "ConfigAdmin::onUpdate() 1 after" << std::endl; } void onUpdateParamMock(const char* config_set, const char* config_param) { // std::cout << "ConfigAdmin::onUpdateParam() 2 before" << std::endl; RTC::ConfigAdmin::onUpdateParam(config_set, config_param); // std::cout << "ConfigAdmin::onUpdateParam() 2 after" << std::endl; } void onSetConfigurationSetMock(const coil::Properties& config_set) { // std::cout << "ConfigAdmin::onSetConfigurationSet() 3 before" << std::endl; RTC::ConfigAdmin::onSetConfigurationSet(config_set); // std::cout << "ConfigAdmin::onSetConfigurationSet() 3 after" << std::endl; } void onAddConfigurationSetMock(const coil::Properties& config_set) { // std::cout << "ConfigAdmin::onAddConfigurationSet() 4 before" << std::endl; RTC::ConfigAdmin::onAddConfigurationSet(config_set); // std::cout << "ConfigAdmin::onAddConfigurationSet() 4 after" << std::endl; } void onRemoveConfigurationSetMock(const char* config_id) { // std::cout << "ConfigAdmin::onRemoveConfigurationSet() 5 before" << std::endl; RTC::ConfigAdmin::onRemoveConfigurationSet(config_id); // std::cout << "ConfigAdmin::onRemoveConfigurationSet() 5 after" << std::endl; } void onActivateSetMock(const char* config_id) { // std::cout << "ConfigAdmin::onActivateSet() 6 before" << std::endl; RTC::ConfigAdmin::onActivateSet(config_id); // std::cout << "ConfigAdmin::onActivateSet() 6 after" << std::endl; } }; class ConfigAdminTests : public CppUnit::TestFixture { CPPUNIT_TEST_SUITE(ConfigAdminTests); CPPUNIT_TEST(test_setOnUpdate); CPPUNIT_TEST(test_setOnUpdateParam); CPPUNIT_TEST(test_setOnSetConfigurationSet); CPPUNIT_TEST(test_setOnAddConfigurationSet); CPPUNIT_TEST(test_setOnRemoveConfigurationSet); CPPUNIT_TEST(test_setOnActivateSet); CPPUNIT_TEST(test_constructor); CPPUNIT_TEST(test_bindParameter); CPPUNIT_TEST(test_bindParameter_already_exist); CPPUNIT_TEST(test_bindParameter_illegal_default_value); CPPUNIT_TEST(test_update); CPPUNIT_TEST(test_update_by_inexist_configuration_set); CPPUNIT_TEST(test_update_with_specified_parameter_name); CPPUNIT_TEST(test_update_by_active_configuration_set); CPPUNIT_TEST(test_isExist); CPPUNIT_TEST(test_isChanged_on_addConfigurationSet); CPPUNIT_TEST(test_isChanged_on_removeConfigurationSet); CPPUNIT_TEST(test_isChanged_on_activateConfigurationSet); CPPUNIT_TEST(test_getActiveId); CPPUNIT_TEST(test_haveConfig); CPPUNIT_TEST(test_isActive_on_addConfigurationSet); CPPUNIT_TEST(test_isActive_on_removeConfigurationSet); CPPUNIT_TEST(test_getConfigurationSets); CPPUNIT_TEST(test_addConfigurationSet_and_getConfigurationSet); CPPUNIT_TEST(test_setConfigurationSetValues); CPPUNIT_TEST(test_setConfigurationSetValues_with_inexist_configuration_set); CPPUNIT_TEST(test_getActiveConfigurationSet); CPPUNIT_TEST(test_removeConfigurationSet); CPPUNIT_TEST(test_removeConfigurationSet_with_inexist_configuration_id); CPPUNIT_TEST_SUITE_END(); private: // helper const coil::Properties* getPropertiesBy( const std::string& name, const std::vector<coil::Properties*>& propertiesSet) const { for (int i = 0; i < (int) propertiesSet.size(); ++i) { if (std::string(propertiesSet[i]->getName()) == name) { return propertiesSet[i]; } } return 0; // not found } public: /*! * @brief Constructor */ ConfigAdminTests() { } /*! * @brief Destructor */ ~ConfigAdminTests() { } /*! * @brief Test initialization */ virtual void setUp() { } /*! * @brief Test finalization */ virtual void tearDown() { } /*! * @brief コンストラクタのテスト * * - 引数で指定したコンフィグレーションセットが、正しく設定されるか? */ void test_constructor() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); RTC::ConfigAdmin configAdmin(configSet); // 引数で指定したコンフィグレーションセットが、正しく設定されるか? const coil::Properties& activeConfigSet = configAdmin.getConfigurationSet("config_id"); CPPUNIT_ASSERT_EQUAL(std::string("value"), activeConfigSet.getProperty("key")); } /*! * @brief bindParameter()メソッドのテスト * * - bindParameter()で、正常に変数をバインドできるか? * - バインドした変数は、指定したデフォルト値に正しく更新されているか? */ void test_bindParameter() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // bindParameter()で、正常に変数をバインドできるか? const char* varName = "name"; double var = 0.0; const char* default_value = "3.14159"; CPPUNIT_ASSERT_EQUAL( true, configAdmin.bindParameter(varName, var, default_value)); // バインドした変数は、指定したデフォルト値に正しく更新されているか? CPPUNIT_ASSERT_EQUAL(3.14159, var); } /*! * @brief bindParameter()メソッドのテスト * * - 同一名称の変数バインドを試みて、意図どおり失敗するか? */ void test_bindParameter_already_exist() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // まずは、初回のバインドを行う const char* varName1 = "name"; double var1 = 0.0; const char* default_value1 = "3.14159"; CPPUNIT_ASSERT_EQUAL( true, configAdmin.bindParameter(varName1, var1, default_value1)); CPPUNIT_ASSERT_EQUAL(3.14159, var1); // 同一名称の変数バインドを試みて、意図どおり失敗するか? const char* varName2 = varName1; double var2 = 1.0; const char* default_value2 = "1.41421356"; CPPUNIT_ASSERT_EQUAL( false, configAdmin.bindParameter(varName2, var2, default_value2)); // バインド変数の値は更新されることなく保持されているか? CPPUNIT_ASSERT_EQUAL(3.14159, var1); } /*! * @brief bindParameter()メソッドのテスト * * - 指定のデータ型に変換できないデフォルト値を指定して、意図どおり失敗するか? */ void test_bindParameter_illegal_default_value() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // 指定のデータ型に変換できないデフォルト値を指定して、意図どおり失敗するか? const char* varName = "name"; double var = 0.0; const char* default_value = "Illegal default value"; CPPUNIT_ASSERT_EQUAL( false, configAdmin.bindParameter(varName, var, default_value)); } /*! * @brief update()メソッドのテスト * * - コンフィグレーションセットを指定してupdate()し、その内容でバインド変数値が正しく更新されるか? */ void test_update() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセット1を準備する coil::Properties configSet1("set 1"); configSet1.setProperty("name", "1.41421356"); // コンフィグレーションセット2を準備する coil::Properties configSet2("set 2"); configSet2.setProperty("name", "1.7320508"); // 準備した2つのコンフィグレーションセットを追加しておく CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // 変数をバインドする const char* varName = "name"; double var = 0.0; const char* default_value = "3.14159"; CPPUNIT_ASSERT_EQUAL( true, configAdmin.bindParameter(varName, var, default_value)); // update()前は、まだ変数がデフォルト値のままであることを確認する CPPUNIT_ASSERT_EQUAL(3.14159, var); // コンフィグレーションセット1を指定してupdate()し、その内容でバインド変数値が正しく更新されるか? configAdmin.update("set 1"); CPPUNIT_ASSERT_EQUAL(1.41421356, var); // コンフィグレーションセット2を指定してupdate()し、その内容でバインド変数値が正しく更新されるか? configAdmin.update("set 2"); CPPUNIT_ASSERT_EQUAL(1.7320508, var); } /*! * @brief update()メソッドのテスト * * - 存在しないコンフィグレーションIDを指定してupdate()を呼出した場合に、 * バインド変数が更新されずに、そのまま保持されるか? */ void test_update_by_inexist_configuration_set() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet("set"); configSet.setProperty("name", "1.41421356"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); // 変数をバインドする const char* varName = "name"; double var = 0.0; const char* default_value = "3.14159"; CPPUNIT_ASSERT_EQUAL( true, configAdmin.bindParameter(varName, var, default_value)); CPPUNIT_ASSERT_EQUAL(3.14159, var); // 存在しないコンフィグレーションIDを指定してupdate()を呼出した場合に、 // バインド変数が更新されずに、そのまま保持されるか? configAdmin.update("inexist set"); CPPUNIT_ASSERT_EQUAL(3.14159, var); } /*! * @brief update()メソッド(名称指定)のテスト * * - 指定したコンフィグレーションセットの指定した名称の変数だけが、正しく更新されるか? */ void test_update_with_specified_parameter_name() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // 2つのパラメータ値を含むコンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); configSet1.setProperty("name 1", "1.41421356"); configSet1.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); configSet2.setProperty("name 1", "3.14159"); configSet2.setProperty("name 2", "2.71828"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // 2つの変数をバインドする const char* varName1 = "name 1"; double var1 = 0.0; const char* default_value1 = "2.23620679"; CPPUNIT_ASSERT_EQUAL( true, configAdmin.bindParameter(varName1, var1, default_value1)); CPPUNIT_ASSERT_EQUAL(2.23620679, var1); const char* varName2 = "name 2"; double var2 = 0.0; const char* default_value2 = "2.4494897"; CPPUNIT_ASSERT_EQUAL( true, configAdmin.bindParameter(varName2, var2, default_value2)); CPPUNIT_ASSERT_EQUAL(2.4494897, var2); // 2つのうち、片方の変数のみを名称指定してupdate()を行い、指定した変数だけが正しく更新されるか? configAdmin.update("set 2", "name 1"); CPPUNIT_ASSERT_EQUAL(3.14159, var1); CPPUNIT_ASSERT_EQUAL(2.4494897, var2); } /*! * @brief update()メソッド(アクティブコンフィグレーションセット)のテスト * * - update()呼出しにより、バインド変数がアクティブなコンフィグレーションセットの値で更新されるか? */ void test_update_by_active_configuration_set() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); configSet1.setProperty("name", "1.41421356"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); configSet2.setProperty("name", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // 変数をバインドする const char* varName = "name"; double var = 0.0; const char* default_value = "3.14159"; CPPUNIT_ASSERT_EQUAL( true, configAdmin.bindParameter(varName, var, default_value)); CPPUNIT_ASSERT_EQUAL(3.14159, var); // "set 1"のほうをアクティブにする CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 1")); // アクティブにしただけでは、まだバインド変数は更新されていないはず CPPUNIT_ASSERT_EQUAL(3.14159, var); // update()呼出しにより、バインド変数がアクティブなコンフィグレーションセットの値で更新されるか? configAdmin.update(); CPPUNIT_ASSERT_EQUAL(1.41421356, var); // "set 2"のほうをアクティブにする CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 2")); // アクティブにしただけでは、まだバインド変数は更新されていないはず CPPUNIT_ASSERT_EQUAL(1.41421356, var); // update()呼出しにより、バインド変数がアクティブなコンフィグレーションセットの値で更新されるか? configAdmin.update(); CPPUNIT_ASSERT_EQUAL(1.7320508, var); } /*! * @brief isExist()メソッドのテスト * * - バインドした変数の名称でisExist()を呼出し、真値が得られるか? * - バインドしていない名称でisExist()を呼出し、偽値が得られるか? */ void test_isExist() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // 変数をバインドする const char* varName = "name"; double var = 0.0; const char* default_value = "3.14159"; CPPUNIT_ASSERT_EQUAL( true, configAdmin.bindParameter(varName, var, default_value)); CPPUNIT_ASSERT_EQUAL(3.14159, var); // バインドした変数の名称でisExist()を呼出し、真値が得られるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.isExist("name")); // バインドしていない名称でisExist()を呼出し、偽値が得られるか? CPPUNIT_ASSERT_EQUAL(false, configAdmin.isExist("inexist name")); } /*! * @brief isChanged()メソッドのテスト * * - addConfigurationSet()呼出後は、isChanged()は真値となるか? */ void test_isChanged_on_addConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // update()を呼出してバインド変数と同期を行い、isChanged()が偽となる状態にする configAdmin.update(); CPPUNIT_ASSERT_EQUAL(false, configAdmin.isChanged()); // addConfigurationSet()を呼出す coil::Properties configSet("id"); configSet.setProperty("key", "value"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); // addConfigurationSet()呼出後は、isChanged()は真値となるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.isChanged()); } /*! * @brief isChanged()メソッドのテスト * * - removeConfigurationSet()呼出後は、isChanged()は真値となるか? */ void test_isChanged_on_removeConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // addConfigurationSet()を呼出す coil::Properties configSet("id"); configSet.setProperty("key", "value"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); // update()を呼出してバインド変数と同期を行い、isChanged()が偽となる状態にする CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("id")); configAdmin.update(); CPPUNIT_ASSERT_EQUAL(false, configAdmin.isChanged()); // removeConfigurationSet()の呼出後は、isChanged()は真値となるか? //CPPUNIT_ASSERT_EQUAL(true, configAdmin.removeConfigurationSet("id")); //CPPUNIT_ASSERT_EQUAL(true, configAdmin.isChanged()); } /*! * @brief isChanged()メソッドのテスト * * - activateConfigurationSet()呼出後は、isChanged()は真値となるか? */ void test_isChanged_on_activateConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // "set 1"のほうをアクティブにする CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 1")); // update()を行い、isChanged()が偽値の状態にしておく configAdmin.update(); CPPUNIT_ASSERT_EQUAL(false, configAdmin.isChanged()); // "set 2"のほうをアクティブにすると、isChanged()が真値となるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 2")); CPPUNIT_ASSERT_EQUAL(true, configAdmin.isChanged()); } void test_isChanged_on_setConfigurationSetValues() { // TODO 実装すること } /*! * @brief getActiveId()メソッドのテスト * * - アクティブ化したコンフィグレーションセットのIDを正しく取得できるか? */ void test_getActiveId() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // 初期状態では、アクティブIDは"default"のはず CPPUNIT_ASSERT_EQUAL(std::string("default"), std::string(configAdmin.getActiveId())); // "set 1"をアクティブにした後、意図どおりのアクティブIDを取得できるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 1")); CPPUNIT_ASSERT_EQUAL(std::string("set 1"), std::string(configAdmin.getActiveId())); // "set 2"をアクティブにした後、意図どおりのアクティブIDを取得できるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 2")); CPPUNIT_ASSERT_EQUAL(std::string("set 2"), std::string(configAdmin.getActiveId())); } /*! * @brief haveConfig()メソッドのテスト * * - 存在するコンフィグレーションセットIDを指定した場合に、haveConfig()で正しく真値を得るか? * - 存在しないコンフィグレーションセットIDを指定した場合に、haveConfig()で正しく偽値を得るか? */ void test_haveConfig() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("id"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); // 存在するコンフィグレーションセットIDを指定した場合に、haveConfig()で正しく真値を得るか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); // 存在しないコンフィグレーションセットIDを指定した場合に、haveConfig()で正しく偽値を得るか? CPPUNIT_ASSERT_EQUAL(false, configAdmin.haveConfig("inexist id")); } /*! * @brief isActive()メソッドのテスト * * - addConfigurationSet()呼出後は、isActive()は正しく偽値を得るか? * - activateConfigurationSet()でアクティブ化した後は、isActive()は正しく真値を得るか? */ void test_isActive_on_addConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // addConfigurationSet()呼出後は、isActive()は正しく偽値を得るか? coil::Properties configSet("id"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); CPPUNIT_ASSERT_EQUAL(false, configAdmin.isActive()); // activateConfigurationSet()でアクティブ化した後は、isActive()は正しく真値を得るか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("id")); CPPUNIT_ASSERT_EQUAL(true, configAdmin.isActive()); } /*! * @brief isActive()メソッドのテスト * * - removeConfigurationSet()呼出後は、isActive()は正しく偽値を得るか? */ void test_isActive_on_removeConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを追加してアクティブ化しておく coil::Properties configSet("id"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("id")); CPPUNIT_ASSERT_EQUAL(true, configAdmin.isActive()); // 登録されているコンフィグレーションセットをremoveConfigurationSet()で解除した場合、 // isActive()は正しく偽値を得るか? //CPPUNIT_ASSERT_EQUAL(true, configAdmin.removeConfigurationSet("id")); //CPPUNIT_ASSERT_EQUAL(false, configAdmin.isActive()); } /*! * @brief isActive()メソッドのテスト * * - activateConfigurationSet()でアクティブ化した後は、isActive()は正しく真値を得るか? */ void test_isActive_on_activateConfigurationSet() { // test_isActive_on_addConfigurationSet()で兼用 } void test_isActive_on_setConfigurationSetValues() { // TODO 実装すること } /*! * @brief getConfigurationSets()メソッドのテスト * * - 登録されている全てのコンフィグレーションセットを正しく取得できるか? */ void test_getConfigurationSets() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // 2つのパラメータ値を含むコンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); configSet1.setProperty("name 1", "1.41421356"); configSet1.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); configSet2.setProperty("name 1", "3.14159"); configSet2.setProperty("name 2", "2.71828"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // getConfigurationSets()で登録されている全てのコンフィグレーションセットを取得し、 // 登録したものと一致していることを確認する std::vector<coil::Properties*> expectedConfigSets; expectedConfigSets.push_back(&configSet1); expectedConfigSets.push_back(&configSet2); const std::vector<coil::Properties*>& configSets = configAdmin.getConfigurationSets(); CPPUNIT_ASSERT_EQUAL( std::string("1.41421356"), getPropertiesBy("set 1", configSets)->getProperty("name 1")); CPPUNIT_ASSERT_EQUAL( std::string("1.7320508"), getPropertiesBy("set 1", configSets)->getProperty("name 2")); CPPUNIT_ASSERT_EQUAL( std::string("3.14159"), getPropertiesBy("set 2", configSets)->getProperty("name 1")); CPPUNIT_ASSERT_EQUAL( std::string("2.71828"), getPropertiesBy("set 2", configSets)->getProperty("name 2")); } /*! * addConfigurationSet()メソッドとgetConfigurationSet()メソッドのテスト * * - addConfigurationSet()で、コンフィグレーションセットを追加できるか? * - getConfigurationSet()で、追加したコンフィグレーションセットを正しく取得できるか? */ void test_addConfigurationSet_and_getConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // addConfigurationSet()で、コンフィグレーションセットを追加できるか? coil::Properties configSet("id"); configSet.setProperty("key", "value"); configAdmin.addConfigurationSet(configSet); // getConfigurationSet()で、追加したコンフィグレーションセットを正しく取得できるか? const coil::Properties& configSetRet = configAdmin.getConfigurationSet("id"); CPPUNIT_ASSERT_EQUAL(std::string("value"), configSetRet.getProperty("key")); } /*! * setConfigurationSetValues()メソッドのテスト * * - 指定したプロパティが、正しく指定したコンフィグレーションセットに追加されるか? */ void test_setConfigurationSetValues() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); coil::Properties configSet1("id"); configSet1.setProperty("name 1", "1.41421356"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); // 登録済みのコンフィグレーションセットに対して、プロパティを追加する coil::Properties configSet2("id"); configSet2.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.setConfigurationSetValues(configSet2)); // 当該コンフィグレーションセットを取得して、プロパティが意図どおり追加されていることを確認する const coil::Properties& configSetRet = configAdmin.getConfigurationSet("id"); CPPUNIT_ASSERT_EQUAL(std::string("1.41421356"), configSetRet.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string("1.7320508"), configSetRet.getProperty("name 2")); } /*! * @brief setConfigurationSetValues()メソッドのテスト * * - 存在しないコンフィグレーションセットに対してプロパティ追加を試みて、意図どおり失敗するか? * - 失敗後に、登録済みのコンフィグレーションセットが影響を受けていないか? */ void test_setConfigurationSetValues_with_inexist_configuration_set() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); coil::Properties configSet1("id"); configSet1.setProperty("name 1", "1.41421356"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); // 存在しないコンフィグレーションセットに対してプロパティ追加を試みて、意図どおり失敗するか? coil::Properties configSet2("inexist id"); configSet2.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.setConfigurationSetValues(configSet2)); // 失敗後に、登録済みのコンフィグレーションセットが影響を受けていないか? const coil::Properties& configSetRet = configAdmin.getConfigurationSet("id"); CPPUNIT_ASSERT_EQUAL(std::string("1.41421356"), configSetRet.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string(""), configSetRet.getProperty("name 2")); } /*! * @brief getActiveConfigurationSet()メソッドのテスト * * - アクティブコンフィグレーションセットを正しく取得できるか? */ void test_getActiveConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); configSet1.setProperty("name 1", "1.41421356"); configSet1.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); configSet2.setProperty("name 1", "3.14159"); configSet2.setProperty("name 2", "2.71828"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // "set 1"をアクティブ化した後、アクティブコンフィグレーションセットとして正しく取得できるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 1")); const coil::Properties& activeConfigSet1 = configAdmin.getActiveConfigurationSet(); CPPUNIT_ASSERT_EQUAL(std::string("1.41421356"), activeConfigSet1.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string("1.7320508"), activeConfigSet1.getProperty("name 2")); // "set 2"をアクティブ化した後、アクティブコンフィグレーションセットとして正しく取得できるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 2")); const coil::Properties& activeConfigSet2 = configAdmin.getActiveConfigurationSet(); CPPUNIT_ASSERT_EQUAL(std::string("3.14159"), activeConfigSet2.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string("2.71828"), activeConfigSet2.getProperty("name 2")); } /*! * @brief removeConfigurationSet()のテスト * * - 登録されているコンフィグレーションセットを正しく登録解除できるか? */ void test_removeConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを追加しておく coil::Properties configSet("id"); configSet.setProperty("key", "value"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); // いったん登録したコンフィグレーションセットを登録解除する CPPUNIT_ASSERT_EQUAL(true, configAdmin.removeConfigurationSet("id")); // 当該コンフィグレーションセットが存在しないことを確認する CPPUNIT_ASSERT_EQUAL(false, configAdmin.haveConfig("id")); } /*! * @brief removeConfigurationSet()のテスト * * - 存在しないコンフィグレーションセットIDを指定した場合に、意図どおりに失敗するか? */ void test_removeConfigurationSet_with_inexist_configuration_id() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを追加しておく coil::Properties configSet("id"); configSet.setProperty("key", "value"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); // 存在しないコンフィグレーションセットIDを指定した場合に、意図どおりに失敗するか? CPPUNIT_ASSERT_EQUAL(false, configAdmin.removeConfigurationSet("inexist id")); // 登録されているコンフィグレーションセットは、元どおり存在しているか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); } void test_activateConfigurationSet() { // test_getActiveConfigurationSet()で兼ねる } /*! * @brief setOnUpdate()メソッドのテスト * * - */ void test_setOnUpdate() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnUpdateCallbackMock* cdm1 = new OnUpdateCallbackMock(); OnUpdateCallbackMock* cdm2 = new OnUpdateCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnUpdate(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onUpdateMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnUpdate(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onUpdateMock("config_id"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnUpdateParam()メソッドのテスト * * - */ void test_setOnUpdateParam() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnUpdateParamCallbackMock* cdm1 = new OnUpdateParamCallbackMock(); OnUpdateParamCallbackMock* cdm2 = new OnUpdateParamCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnUpdateParam(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onUpdateParamMock("config_id", "param1"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnUpdateParam(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onUpdateParamMock("config_id", "param2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnSetConfigurationSet()メソッドのテスト * * - */ void test_setOnSetConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); coil::Properties configSet2("config_id2"); configSet2.setProperty("config_id2.key", "value2"); OnSetConfigurationSetCallbackMock* cdm1 = new OnSetConfigurationSetCallbackMock(); OnSetConfigurationSetCallbackMock* cdm2 = new OnSetConfigurationSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnSetConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onSetConfigurationSetMock(configSet); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnSetConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onSetConfigurationSetMock(configSet2); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnAddConfigurationSet()メソッドのテスト * * - */ void test_setOnAddConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); coil::Properties configSet2("config_id2"); configSet2.setProperty("config_id2.key", "value2"); OnAddConfigurationAddCallbackMock* cdm1 = new OnAddConfigurationAddCallbackMock(); OnAddConfigurationAddCallbackMock* cdm2 = new OnAddConfigurationAddCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnAddConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onAddConfigurationSetMock(configSet); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnAddConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onAddConfigurationSetMock(configSet2); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnRemoveConfigurationSet()メソッドのテスト * * - */ void test_setOnRemoveConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnRemoveConfigurationSetCallbackMock* cdm1 = new OnRemoveConfigurationSetCallbackMock(); OnRemoveConfigurationSetCallbackMock* cdm2 = new OnRemoveConfigurationSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnRemoveConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onRemoveConfigurationSetMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnRemoveConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onRemoveConfigurationSetMock("config_id2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnActivateSet()メソッドのテスト * * - */ void test_setOnActivateSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnActivateSetCallbackMock* cdm1 = new OnActivateSetCallbackMock(); OnActivateSetCallbackMock* cdm2 = new OnActivateSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnActivateSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onActivateSetMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnActivateSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onActivateSetMock("config_id2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } }; }; // namespace ConfigAdmin /* * Register test suite */ CPPUNIT_TEST_SUITE_REGISTRATION(Config::ConfigTests); CPPUNIT_TEST_SUITE_REGISTRATION(ConfigAdmin::ConfigAdminTests); #ifdef LOCAL_MAIN int main(int argc, char* argv[]) { FORMAT format = TEXT_OUT; int target = 0; std::string xsl; std::string ns; std::string fname; std::ofstream ofs; int i(1); while (i < argc) { std::string arg(argv[i]); std::string next_arg; if (i + 1 < argc) next_arg = argv[i + 1]; else next_arg = ""; if (arg == "--text") { format = TEXT_OUT; break; } if (arg == "--xml") { if (next_arg == "") { fname = argv[0]; fname += ".xml"; } else { fname = next_arg; } format = XML_OUT; ofs.open(fname.c_str()); } if ( arg == "--compiler" ) { format = COMPILER_OUT; break; } if ( arg == "--cerr" ) { target = 1; break; } if ( arg == "--xsl" ) { if (next_arg == "") xsl = "default.xsl"; else xsl = next_arg; } if ( arg == "--namespace" ) { if (next_arg == "") { std::cerr << "no namespace specified" << std::endl; exit(1); } else { xsl = next_arg; } } ++i; } CppUnit::TextUi::TestRunner runner; if ( ns.empty() ) runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest()); else runner.addTest(CppUnit::TestFactoryRegistry::getRegistry(ns).makeTest()); CppUnit::Outputter* outputter = 0; std::ostream* stream = target ? &std::cerr : &std::cout; switch ( format ) { case TEXT_OUT : outputter = new CppUnit::TextOutputter(&runner.result(),*stream); break; case XML_OUT : std::cout << "XML_OUT" << std::endl; outputter = new CppUnit::XmlOutputter(&runner.result(), ofs, "shift_jis"); static_cast<CppUnit::XmlOutputter*>(outputter)->setStyleSheet(xsl); break; case COMPILER_OUT : outputter = new CppUnit::CompilerOutputter(&runner.result(),*stream); break; } runner.setOutputter(outputter); runner.run(); return 0; // runner.run() ? 0 : 1; } #endif // MAIN #endif // ConfigAdmin_cpp
258  {
259  public:
261  : RTC::ConfigAdmin(configsets) {}
262  virtual ~ConfigAdminMock(void){}
263 
264  void onUpdateMock(const char* config_set)
265  {
266 // std::cout << "ConfigAdmin::onUpdate() 1 before" << std::endl;
267  RTC::ConfigAdmin::onUpdate(config_set);
268 // std::cout << "ConfigAdmin::onUpdate() 1 after" << std::endl;
269  }
270  void onUpdateParamMock(const char* config_set, const char* config_param)
271  {
272 // std::cout << "ConfigAdmin::onUpdateParam() 2 before" << std::endl;
273  RTC::ConfigAdmin::onUpdateParam(config_set, config_param);
274 // std::cout << "ConfigAdmin::onUpdateParam() 2 after" << std::endl;
275  }
277  {
278 // std::cout << "ConfigAdmin::onSetConfigurationSet() 3 before" << std::endl;
280 // std::cout << "ConfigAdmin::onSetConfigurationSet() 3 after" << std::endl;
281  }
283  {
284 // std::cout << "ConfigAdmin::onAddConfigurationSet() 4 before" << std::endl;
286 // std::cout << "ConfigAdmin::onAddConfigurationSet() 4 after" << std::endl;
287  }
288  void onRemoveConfigurationSetMock(const char* config_id)
289  {
290 // std::cout << "ConfigAdmin::onRemoveConfigurationSet() 5 before" << std::endl;
292 // std::cout << "ConfigAdmin::onRemoveConfigurationSet() 5 after" << std::endl;
293  }
294  void onActivateSetMock(const char* config_id)
295  {
296 // std::cout << "ConfigAdmin::onActivateSet() 6 before" << std::endl;
298 // std::cout << "ConfigAdmin::onActivateSet() 6 after" << std::endl;
299  }
300  };
301 
302 
304  : public CppUnit::TestFixture
305  {
307 
308  CPPUNIT_TEST(test_setOnUpdate);
309  CPPUNIT_TEST(test_setOnUpdateParam);
310  CPPUNIT_TEST(test_setOnSetConfigurationSet);
311  CPPUNIT_TEST(test_setOnAddConfigurationSet);
312  CPPUNIT_TEST(test_setOnRemoveConfigurationSet);
313  CPPUNIT_TEST(test_setOnActivateSet);
315  CPPUNIT_TEST(test_bindParameter);
316  CPPUNIT_TEST(test_bindParameter_already_exist);
317  CPPUNIT_TEST(test_bindParameter_illegal_default_value);
319  CPPUNIT_TEST(test_update_by_inexist_configuration_set);
320  CPPUNIT_TEST(test_update_with_specified_parameter_name);
321  CPPUNIT_TEST(test_update_by_active_configuration_set);
322  CPPUNIT_TEST(test_isExist);
323  CPPUNIT_TEST(test_isChanged_on_addConfigurationSet);
324  CPPUNIT_TEST(test_isChanged_on_removeConfigurationSet);
325  CPPUNIT_TEST(test_isChanged_on_activateConfigurationSet);
326  CPPUNIT_TEST(test_getActiveId);
327  CPPUNIT_TEST(test_haveConfig);
328  CPPUNIT_TEST(test_isActive_on_addConfigurationSet);
329  CPPUNIT_TEST(test_isActive_on_removeConfigurationSet);
330  CPPUNIT_TEST(test_getConfigurationSets);
331  CPPUNIT_TEST(test_addConfigurationSet_and_getConfigurationSet);
332  CPPUNIT_TEST(test_setConfigurationSetValues);
333  CPPUNIT_TEST(test_setConfigurationSetValues_with_inexist_configuration_set);
334  CPPUNIT_TEST(test_getActiveConfigurationSet);
335  CPPUNIT_TEST(test_removeConfigurationSet);
336  CPPUNIT_TEST(test_removeConfigurationSet_with_inexist_configuration_id);
337 
339 
340  private:
341  // helper
343  const std::string& name,
344  const std::vector<coil::Properties*>& propertiesSet) const
345  {
346  for (int i = 0; i < (int) propertiesSet.size(); ++i)
347  {
348  if (std::string(propertiesSet[i]->getName()) == name)
349  {
350  return propertiesSet[i];
351  }
352  }
353 
354  return 0; // not found
355  }
356 
357  public:
362  {
363  }
364 
369  {
370  }
371 
375  virtual void setUp()
376  {
377  }
378 
382  virtual void tearDown()
383  {
384  }
385 
392  {
393  coil::Properties configSet("config_id");
394  configSet.setProperty("config_id.key", "value");
395 
396  RTC::ConfigAdmin configAdmin(configSet);
397 
398  // 引数で指定したコンフィグレーションセットが、正しく設定されるか?
399  const coil::Properties& activeConfigSet = configAdmin.getConfigurationSet("config_id");
400  CPPUNIT_ASSERT_EQUAL(std::string("value"), activeConfigSet.getProperty("key"));
401  }
402 
410  {
411  coil::Properties nullProp;
412  RTC::ConfigAdmin configAdmin(nullProp);
413 
414  // bindParameter()で、正常に変数をバインドできるか?
415  const char* varName = "name";
416  double var = 0.0;
417  const char* default_value = "3.14159";
418  CPPUNIT_ASSERT_EQUAL(
419  true, configAdmin.bindParameter(varName, var, default_value));
420 
421  // バインドした変数は、指定したデフォルト値に正しく更新されているか?
422  CPPUNIT_ASSERT_EQUAL(3.14159, var);
423  }
424 
431  {
432  coil::Properties nullProp;
433  RTC::ConfigAdmin configAdmin(nullProp);
434 
435  // まずは、初回のバインドを行う
436  const char* varName1 = "name";
437  double var1 = 0.0;
438  const char* default_value1 = "3.14159";
439  CPPUNIT_ASSERT_EQUAL(
440  true, configAdmin.bindParameter(varName1, var1, default_value1));
441  CPPUNIT_ASSERT_EQUAL(3.14159, var1);
442 
443  // 同一名称の変数バインドを試みて、意図どおり失敗するか?
444  const char* varName2 = varName1;
445  double var2 = 1.0;
446  const char* default_value2 = "1.41421356";
447  CPPUNIT_ASSERT_EQUAL(
448  false, configAdmin.bindParameter(varName2, var2, default_value2));
449 
450  // バインド変数の値は更新されることなく保持されているか?
451  CPPUNIT_ASSERT_EQUAL(3.14159, var1);
452  }
453 
460  {
461  coil::Properties nullProp;
462  RTC::ConfigAdmin configAdmin(nullProp);
463 
464  // 指定のデータ型に変換できないデフォルト値を指定して、意図どおり失敗するか?
465  const char* varName = "name";
466  double var = 0.0;
467  const char* default_value = "Illegal default value";
468  CPPUNIT_ASSERT_EQUAL(
469  false, configAdmin.bindParameter(varName, var, default_value));
470  }
471 
477  void test_update()
478  {
479  coil::Properties nullProp;
480  RTC::ConfigAdmin configAdmin(nullProp);
481 
482  // コンフィグレーションセット1を準備する coil::Properties configSet1("set 1"); configSet1.setProperty("name", "1.41421356"); // コンフィグレーションセット2を準備する coil::Properties configSet2("set 2"); configSet2.setProperty("name", "1.7320508"); // 準備した2つのコンフィグレーションセットを追加しておく CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // 変数をバインドする const char* varName = "name"; double var = 0.0; const char* default_value = "3.14159"; CPPUNIT_ASSERT_EQUAL( true, configAdmin.bindParameter(varName, var, default_value)); // update()前は、まだ変数がデフォルト値のままであることを確認する CPPUNIT_ASSERT_EQUAL(3.14159, var); // コンフィグレーションセット1を指定してupdate()し、その内容でバインド変数値が正しく更新されるか? configAdmin.update("set 1"); CPPUNIT_ASSERT_EQUAL(1.41421356, var); // コンフィグレーションセット2を指定してupdate()し、その内容でバインド変数値が正しく更新されるか? configAdmin.update("set 2"); CPPUNIT_ASSERT_EQUAL(1.7320508, var); } /*! * @brief update()メソッドのテスト * * - 存在しないコンフィグレーションIDを指定してupdate()を呼出した場合に、 * バインド変数が更新されずに、そのまま保持されるか? */ void test_update_by_inexist_configuration_set() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet("set"); configSet.setProperty("name", "1.41421356"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); // 変数をバインドする const char* varName = "name"; double var = 0.0; const char* default_value = "3.14159"; CPPUNIT_ASSERT_EQUAL( true, configAdmin.bindParameter(varName, var, default_value)); CPPUNIT_ASSERT_EQUAL(3.14159, var); // 存在しないコンフィグレーションIDを指定してupdate()を呼出した場合に、 // バインド変数が更新されずに、そのまま保持されるか? configAdmin.update("inexist set"); CPPUNIT_ASSERT_EQUAL(3.14159, var); } /*! * @brief update()メソッド(名称指定)のテスト * * - 指定したコンフィグレーションセットの指定した名称の変数だけが、正しく更新されるか? */ void test_update_with_specified_parameter_name() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // 2つのパラメータ値を含むコンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); configSet1.setProperty("name 1", "1.41421356"); configSet1.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); configSet2.setProperty("name 1", "3.14159"); configSet2.setProperty("name 2", "2.71828"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // 2つの変数をバインドする const char* varName1 = "name 1"; double var1 = 0.0; const char* default_value1 = "2.23620679"; CPPUNIT_ASSERT_EQUAL( true, configAdmin.bindParameter(varName1, var1, default_value1)); CPPUNIT_ASSERT_EQUAL(2.23620679, var1); const char* varName2 = "name 2"; double var2 = 0.0; const char* default_value2 = "2.4494897"; CPPUNIT_ASSERT_EQUAL( true, configAdmin.bindParameter(varName2, var2, default_value2)); CPPUNIT_ASSERT_EQUAL(2.4494897, var2); // 2つのうち、片方の変数のみを名称指定してupdate()を行い、指定した変数だけが正しく更新されるか? configAdmin.update("set 2", "name 1"); CPPUNIT_ASSERT_EQUAL(3.14159, var1); CPPUNIT_ASSERT_EQUAL(2.4494897, var2); } /*! * @brief update()メソッド(アクティブコンフィグレーションセット)のテスト * * - update()呼出しにより、バインド変数がアクティブなコンフィグレーションセットの値で更新されるか? */ void test_update_by_active_configuration_set() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); configSet1.setProperty("name", "1.41421356"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); configSet2.setProperty("name", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // 変数をバインドする const char* varName = "name"; double var = 0.0; const char* default_value = "3.14159"; CPPUNIT_ASSERT_EQUAL( true, configAdmin.bindParameter(varName, var, default_value)); CPPUNIT_ASSERT_EQUAL(3.14159, var); // "set 1"のほうをアクティブにする CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 1")); // アクティブにしただけでは、まだバインド変数は更新されていないはず CPPUNIT_ASSERT_EQUAL(3.14159, var); // update()呼出しにより、バインド変数がアクティブなコンフィグレーションセットの値で更新されるか? configAdmin.update(); CPPUNIT_ASSERT_EQUAL(1.41421356, var); // "set 2"のほうをアクティブにする CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 2")); // アクティブにしただけでは、まだバインド変数は更新されていないはず CPPUNIT_ASSERT_EQUAL(1.41421356, var); // update()呼出しにより、バインド変数がアクティブなコンフィグレーションセットの値で更新されるか? configAdmin.update(); CPPUNIT_ASSERT_EQUAL(1.7320508, var); } /*! * @brief isExist()メソッドのテスト * * - バインドした変数の名称でisExist()を呼出し、真値が得られるか? * - バインドしていない名称でisExist()を呼出し、偽値が得られるか? */ void test_isExist() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // 変数をバインドする const char* varName = "name"; double var = 0.0; const char* default_value = "3.14159"; CPPUNIT_ASSERT_EQUAL( true, configAdmin.bindParameter(varName, var, default_value)); CPPUNIT_ASSERT_EQUAL(3.14159, var); // バインドした変数の名称でisExist()を呼出し、真値が得られるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.isExist("name")); // バインドしていない名称でisExist()を呼出し、偽値が得られるか? CPPUNIT_ASSERT_EQUAL(false, configAdmin.isExist("inexist name")); } /*! * @brief isChanged()メソッドのテスト * * - addConfigurationSet()呼出後は、isChanged()は真値となるか? */ void test_isChanged_on_addConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // update()を呼出してバインド変数と同期を行い、isChanged()が偽となる状態にする configAdmin.update(); CPPUNIT_ASSERT_EQUAL(false, configAdmin.isChanged()); // addConfigurationSet()を呼出す coil::Properties configSet("id"); configSet.setProperty("key", "value"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); // addConfigurationSet()呼出後は、isChanged()は真値となるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.isChanged()); } /*! * @brief isChanged()メソッドのテスト * * - removeConfigurationSet()呼出後は、isChanged()は真値となるか? */ void test_isChanged_on_removeConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // addConfigurationSet()を呼出す coil::Properties configSet("id"); configSet.setProperty("key", "value"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); // update()を呼出してバインド変数と同期を行い、isChanged()が偽となる状態にする CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("id")); configAdmin.update(); CPPUNIT_ASSERT_EQUAL(false, configAdmin.isChanged()); // removeConfigurationSet()の呼出後は、isChanged()は真値となるか? //CPPUNIT_ASSERT_EQUAL(true, configAdmin.removeConfigurationSet("id")); //CPPUNIT_ASSERT_EQUAL(true, configAdmin.isChanged()); } /*! * @brief isChanged()メソッドのテスト * * - activateConfigurationSet()呼出後は、isChanged()は真値となるか? */ void test_isChanged_on_activateConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // "set 1"のほうをアクティブにする CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 1")); // update()を行い、isChanged()が偽値の状態にしておく configAdmin.update(); CPPUNIT_ASSERT_EQUAL(false, configAdmin.isChanged()); // "set 2"のほうをアクティブにすると、isChanged()が真値となるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 2")); CPPUNIT_ASSERT_EQUAL(true, configAdmin.isChanged()); } void test_isChanged_on_setConfigurationSetValues() { // TODO 実装すること } /*! * @brief getActiveId()メソッドのテスト * * - アクティブ化したコンフィグレーションセットのIDを正しく取得できるか? */ void test_getActiveId() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // 初期状態では、アクティブIDは"default"のはず CPPUNIT_ASSERT_EQUAL(std::string("default"), std::string(configAdmin.getActiveId())); // "set 1"をアクティブにした後、意図どおりのアクティブIDを取得できるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 1")); CPPUNIT_ASSERT_EQUAL(std::string("set 1"), std::string(configAdmin.getActiveId())); // "set 2"をアクティブにした後、意図どおりのアクティブIDを取得できるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 2")); CPPUNIT_ASSERT_EQUAL(std::string("set 2"), std::string(configAdmin.getActiveId())); } /*! * @brief haveConfig()メソッドのテスト * * - 存在するコンフィグレーションセットIDを指定した場合に、haveConfig()で正しく真値を得るか? * - 存在しないコンフィグレーションセットIDを指定した場合に、haveConfig()で正しく偽値を得るか? */ void test_haveConfig() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("id"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); // 存在するコンフィグレーションセットIDを指定した場合に、haveConfig()で正しく真値を得るか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); // 存在しないコンフィグレーションセットIDを指定した場合に、haveConfig()で正しく偽値を得るか? CPPUNIT_ASSERT_EQUAL(false, configAdmin.haveConfig("inexist id")); } /*! * @brief isActive()メソッドのテスト * * - addConfigurationSet()呼出後は、isActive()は正しく偽値を得るか? * - activateConfigurationSet()でアクティブ化した後は、isActive()は正しく真値を得るか? */ void test_isActive_on_addConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // addConfigurationSet()呼出後は、isActive()は正しく偽値を得るか? coil::Properties configSet("id"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); CPPUNIT_ASSERT_EQUAL(false, configAdmin.isActive()); // activateConfigurationSet()でアクティブ化した後は、isActive()は正しく真値を得るか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("id")); CPPUNIT_ASSERT_EQUAL(true, configAdmin.isActive()); } /*! * @brief isActive()メソッドのテスト * * - removeConfigurationSet()呼出後は、isActive()は正しく偽値を得るか? */ void test_isActive_on_removeConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを追加してアクティブ化しておく coil::Properties configSet("id"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("id")); CPPUNIT_ASSERT_EQUAL(true, configAdmin.isActive()); // 登録されているコンフィグレーションセットをremoveConfigurationSet()で解除した場合、 // isActive()は正しく偽値を得るか? //CPPUNIT_ASSERT_EQUAL(true, configAdmin.removeConfigurationSet("id")); //CPPUNIT_ASSERT_EQUAL(false, configAdmin.isActive()); } /*! * @brief isActive()メソッドのテスト * * - activateConfigurationSet()でアクティブ化した後は、isActive()は正しく真値を得るか? */ void test_isActive_on_activateConfigurationSet() { // test_isActive_on_addConfigurationSet()で兼用 } void test_isActive_on_setConfigurationSetValues() { // TODO 実装すること } /*! * @brief getConfigurationSets()メソッドのテスト * * - 登録されている全てのコンフィグレーションセットを正しく取得できるか? */ void test_getConfigurationSets() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // 2つのパラメータ値を含むコンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); configSet1.setProperty("name 1", "1.41421356"); configSet1.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); configSet2.setProperty("name 1", "3.14159"); configSet2.setProperty("name 2", "2.71828"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // getConfigurationSets()で登録されている全てのコンフィグレーションセットを取得し、 // 登録したものと一致していることを確認する std::vector<coil::Properties*> expectedConfigSets; expectedConfigSets.push_back(&configSet1); expectedConfigSets.push_back(&configSet2); const std::vector<coil::Properties*>& configSets = configAdmin.getConfigurationSets(); CPPUNIT_ASSERT_EQUAL( std::string("1.41421356"), getPropertiesBy("set 1", configSets)->getProperty("name 1")); CPPUNIT_ASSERT_EQUAL( std::string("1.7320508"), getPropertiesBy("set 1", configSets)->getProperty("name 2")); CPPUNIT_ASSERT_EQUAL( std::string("3.14159"), getPropertiesBy("set 2", configSets)->getProperty("name 1")); CPPUNIT_ASSERT_EQUAL( std::string("2.71828"), getPropertiesBy("set 2", configSets)->getProperty("name 2")); } /*! * addConfigurationSet()メソッドとgetConfigurationSet()メソッドのテスト * * - addConfigurationSet()で、コンフィグレーションセットを追加できるか? * - getConfigurationSet()で、追加したコンフィグレーションセットを正しく取得できるか? */ void test_addConfigurationSet_and_getConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // addConfigurationSet()で、コンフィグレーションセットを追加できるか? coil::Properties configSet("id"); configSet.setProperty("key", "value"); configAdmin.addConfigurationSet(configSet); // getConfigurationSet()で、追加したコンフィグレーションセットを正しく取得できるか? const coil::Properties& configSetRet = configAdmin.getConfigurationSet("id"); CPPUNIT_ASSERT_EQUAL(std::string("value"), configSetRet.getProperty("key")); } /*! * setConfigurationSetValues()メソッドのテスト * * - 指定したプロパティが、正しく指定したコンフィグレーションセットに追加されるか? */ void test_setConfigurationSetValues() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); coil::Properties configSet1("id"); configSet1.setProperty("name 1", "1.41421356"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); // 登録済みのコンフィグレーションセットに対して、プロパティを追加する coil::Properties configSet2("id"); configSet2.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.setConfigurationSetValues(configSet2)); // 当該コンフィグレーションセットを取得して、プロパティが意図どおり追加されていることを確認する const coil::Properties& configSetRet = configAdmin.getConfigurationSet("id"); CPPUNIT_ASSERT_EQUAL(std::string("1.41421356"), configSetRet.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string("1.7320508"), configSetRet.getProperty("name 2")); } /*! * @brief setConfigurationSetValues()メソッドのテスト * * - 存在しないコンフィグレーションセットに対してプロパティ追加を試みて、意図どおり失敗するか? * - 失敗後に、登録済みのコンフィグレーションセットが影響を受けていないか? */ void test_setConfigurationSetValues_with_inexist_configuration_set() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); coil::Properties configSet1("id"); configSet1.setProperty("name 1", "1.41421356"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); // 存在しないコンフィグレーションセットに対してプロパティ追加を試みて、意図どおり失敗するか? coil::Properties configSet2("inexist id"); configSet2.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.setConfigurationSetValues(configSet2)); // 失敗後に、登録済みのコンフィグレーションセットが影響を受けていないか? const coil::Properties& configSetRet = configAdmin.getConfigurationSet("id"); CPPUNIT_ASSERT_EQUAL(std::string("1.41421356"), configSetRet.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string(""), configSetRet.getProperty("name 2")); } /*! * @brief getActiveConfigurationSet()メソッドのテスト * * - アクティブコンフィグレーションセットを正しく取得できるか? */ void test_getActiveConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); configSet1.setProperty("name 1", "1.41421356"); configSet1.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); configSet2.setProperty("name 1", "3.14159"); configSet2.setProperty("name 2", "2.71828"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // "set 1"をアクティブ化した後、アクティブコンフィグレーションセットとして正しく取得できるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 1")); const coil::Properties& activeConfigSet1 = configAdmin.getActiveConfigurationSet(); CPPUNIT_ASSERT_EQUAL(std::string("1.41421356"), activeConfigSet1.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string("1.7320508"), activeConfigSet1.getProperty("name 2")); // "set 2"をアクティブ化した後、アクティブコンフィグレーションセットとして正しく取得できるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 2")); const coil::Properties& activeConfigSet2 = configAdmin.getActiveConfigurationSet(); CPPUNIT_ASSERT_EQUAL(std::string("3.14159"), activeConfigSet2.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string("2.71828"), activeConfigSet2.getProperty("name 2")); } /*! * @brief removeConfigurationSet()のテスト * * - 登録されているコンフィグレーションセットを正しく登録解除できるか? */ void test_removeConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを追加しておく coil::Properties configSet("id"); configSet.setProperty("key", "value"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); // いったん登録したコンフィグレーションセットを登録解除する CPPUNIT_ASSERT_EQUAL(true, configAdmin.removeConfigurationSet("id")); // 当該コンフィグレーションセットが存在しないことを確認する CPPUNIT_ASSERT_EQUAL(false, configAdmin.haveConfig("id")); } /*! * @brief removeConfigurationSet()のテスト * * - 存在しないコンフィグレーションセットIDを指定した場合に、意図どおりに失敗するか? */ void test_removeConfigurationSet_with_inexist_configuration_id() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを追加しておく coil::Properties configSet("id"); configSet.setProperty("key", "value"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); // 存在しないコンフィグレーションセットIDを指定した場合に、意図どおりに失敗するか? CPPUNIT_ASSERT_EQUAL(false, configAdmin.removeConfigurationSet("inexist id")); // 登録されているコンフィグレーションセットは、元どおり存在しているか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); } void test_activateConfigurationSet() { // test_getActiveConfigurationSet()で兼ねる } /*! * @brief setOnUpdate()メソッドのテスト * * - */ void test_setOnUpdate() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnUpdateCallbackMock* cdm1 = new OnUpdateCallbackMock(); OnUpdateCallbackMock* cdm2 = new OnUpdateCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnUpdate(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onUpdateMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnUpdate(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onUpdateMock("config_id"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnUpdateParam()メソッドのテスト * * - */ void test_setOnUpdateParam() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnUpdateParamCallbackMock* cdm1 = new OnUpdateParamCallbackMock(); OnUpdateParamCallbackMock* cdm2 = new OnUpdateParamCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnUpdateParam(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onUpdateParamMock("config_id", "param1"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnUpdateParam(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onUpdateParamMock("config_id", "param2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnSetConfigurationSet()メソッドのテスト * * - */ void test_setOnSetConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); coil::Properties configSet2("config_id2"); configSet2.setProperty("config_id2.key", "value2"); OnSetConfigurationSetCallbackMock* cdm1 = new OnSetConfigurationSetCallbackMock(); OnSetConfigurationSetCallbackMock* cdm2 = new OnSetConfigurationSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnSetConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onSetConfigurationSetMock(configSet); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnSetConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onSetConfigurationSetMock(configSet2); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnAddConfigurationSet()メソッドのテスト * * - */ void test_setOnAddConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); coil::Properties configSet2("config_id2"); configSet2.setProperty("config_id2.key", "value2"); OnAddConfigurationAddCallbackMock* cdm1 = new OnAddConfigurationAddCallbackMock(); OnAddConfigurationAddCallbackMock* cdm2 = new OnAddConfigurationAddCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnAddConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onAddConfigurationSetMock(configSet); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnAddConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onAddConfigurationSetMock(configSet2); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnRemoveConfigurationSet()メソッドのテスト * * - */ void test_setOnRemoveConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnRemoveConfigurationSetCallbackMock* cdm1 = new OnRemoveConfigurationSetCallbackMock(); OnRemoveConfigurationSetCallbackMock* cdm2 = new OnRemoveConfigurationSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnRemoveConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onRemoveConfigurationSetMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnRemoveConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onRemoveConfigurationSetMock("config_id2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnActivateSet()メソッドのテスト * * - */ void test_setOnActivateSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnActivateSetCallbackMock* cdm1 = new OnActivateSetCallbackMock(); OnActivateSetCallbackMock* cdm2 = new OnActivateSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnActivateSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onActivateSetMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnActivateSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onActivateSetMock("config_id2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } }; }; // namespace ConfigAdmin /* * Register test suite */ CPPUNIT_TEST_SUITE_REGISTRATION(Config::ConfigTests); CPPUNIT_TEST_SUITE_REGISTRATION(ConfigAdmin::ConfigAdminTests); #ifdef LOCAL_MAIN int main(int argc, char* argv[]) { FORMAT format = TEXT_OUT; int target = 0; std::string xsl; std::string ns; std::string fname; std::ofstream ofs; int i(1); while (i < argc) { std::string arg(argv[i]); std::string next_arg; if (i + 1 < argc) next_arg = argv[i + 1]; else next_arg = ""; if (arg == "--text") { format = TEXT_OUT; break; } if (arg == "--xml") { if (next_arg == "") { fname = argv[0]; fname += ".xml"; } else { fname = next_arg; } format = XML_OUT; ofs.open(fname.c_str()); } if ( arg == "--compiler" ) { format = COMPILER_OUT; break; } if ( arg == "--cerr" ) { target = 1; break; } if ( arg == "--xsl" ) { if (next_arg == "") xsl = "default.xsl"; else xsl = next_arg; } if ( arg == "--namespace" ) { if (next_arg == "") { std::cerr << "no namespace specified" << std::endl; exit(1); } else { xsl = next_arg; } } ++i; } CppUnit::TextUi::TestRunner runner; if ( ns.empty() ) runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest()); else runner.addTest(CppUnit::TestFactoryRegistry::getRegistry(ns).makeTest()); CppUnit::Outputter* outputter = 0; std::ostream* stream = target ? &std::cerr : &std::cout; switch ( format ) { case TEXT_OUT : outputter = new CppUnit::TextOutputter(&runner.result(),*stream); break; case XML_OUT : std::cout << "XML_OUT" << std::endl; outputter = new CppUnit::XmlOutputter(&runner.result(), ofs, "shift_jis"); static_cast<CppUnit::XmlOutputter*>(outputter)->setStyleSheet(xsl); break; case COMPILER_OUT : outputter = new CppUnit::CompilerOutputter(&runner.result(),*stream); break; } runner.setOutputter(outputter); runner.run(); return 0; // runner.run() ? 0 : 1; } #endif // MAIN #endif // ConfigAdmin_cpp
483  coil::Properties configSet1("set 1");
484  configSet1.setProperty("name", "1.41421356");
485 
486  // コンフィグレーションセット2を準備する coil::Properties configSet2("set 2"); configSet2.setProperty("name", "1.7320508"); // 準備した2つのコンフィグレーションセットを追加しておく CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // 変数をバインドする const char* varName = "name"; double var = 0.0; const char* default_value = "3.14159"; CPPUNIT_ASSERT_EQUAL( true, configAdmin.bindParameter(varName, var, default_value)); // update()前は、まだ変数がデフォルト値のままであることを確認する CPPUNIT_ASSERT_EQUAL(3.14159, var); // コンフィグレーションセット1を指定してupdate()し、その内容でバインド変数値が正しく更新されるか? configAdmin.update("set 1"); CPPUNIT_ASSERT_EQUAL(1.41421356, var); // コンフィグレーションセット2を指定してupdate()し、その内容でバインド変数値が正しく更新されるか? configAdmin.update("set 2"); CPPUNIT_ASSERT_EQUAL(1.7320508, var); } /*! * @brief update()メソッドのテスト * * - 存在しないコンフィグレーションIDを指定してupdate()を呼出した場合に、 * バインド変数が更新されずに、そのまま保持されるか? */ void test_update_by_inexist_configuration_set() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet("set"); configSet.setProperty("name", "1.41421356"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); // 変数をバインドする const char* varName = "name"; double var = 0.0; const char* default_value = "3.14159"; CPPUNIT_ASSERT_EQUAL( true, configAdmin.bindParameter(varName, var, default_value)); CPPUNIT_ASSERT_EQUAL(3.14159, var); // 存在しないコンフィグレーションIDを指定してupdate()を呼出した場合に、 // バインド変数が更新されずに、そのまま保持されるか? configAdmin.update("inexist set"); CPPUNIT_ASSERT_EQUAL(3.14159, var); } /*! * @brief update()メソッド(名称指定)のテスト * * - 指定したコンフィグレーションセットの指定した名称の変数だけが、正しく更新されるか? */ void test_update_with_specified_parameter_name() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // 2つのパラメータ値を含むコンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); configSet1.setProperty("name 1", "1.41421356"); configSet1.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); configSet2.setProperty("name 1", "3.14159"); configSet2.setProperty("name 2", "2.71828"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // 2つの変数をバインドする const char* varName1 = "name 1"; double var1 = 0.0; const char* default_value1 = "2.23620679"; CPPUNIT_ASSERT_EQUAL( true, configAdmin.bindParameter(varName1, var1, default_value1)); CPPUNIT_ASSERT_EQUAL(2.23620679, var1); const char* varName2 = "name 2"; double var2 = 0.0; const char* default_value2 = "2.4494897"; CPPUNIT_ASSERT_EQUAL( true, configAdmin.bindParameter(varName2, var2, default_value2)); CPPUNIT_ASSERT_EQUAL(2.4494897, var2); // 2つのうち、片方の変数のみを名称指定してupdate()を行い、指定した変数だけが正しく更新されるか? configAdmin.update("set 2", "name 1"); CPPUNIT_ASSERT_EQUAL(3.14159, var1); CPPUNIT_ASSERT_EQUAL(2.4494897, var2); } /*! * @brief update()メソッド(アクティブコンフィグレーションセット)のテスト * * - update()呼出しにより、バインド変数がアクティブなコンフィグレーションセットの値で更新されるか? */ void test_update_by_active_configuration_set() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); configSet1.setProperty("name", "1.41421356"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); configSet2.setProperty("name", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // 変数をバインドする const char* varName = "name"; double var = 0.0; const char* default_value = "3.14159"; CPPUNIT_ASSERT_EQUAL( true, configAdmin.bindParameter(varName, var, default_value)); CPPUNIT_ASSERT_EQUAL(3.14159, var); // "set 1"のほうをアクティブにする CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 1")); // アクティブにしただけでは、まだバインド変数は更新されていないはず CPPUNIT_ASSERT_EQUAL(3.14159, var); // update()呼出しにより、バインド変数がアクティブなコンフィグレーションセットの値で更新されるか? configAdmin.update(); CPPUNIT_ASSERT_EQUAL(1.41421356, var); // "set 2"のほうをアクティブにする CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 2")); // アクティブにしただけでは、まだバインド変数は更新されていないはず CPPUNIT_ASSERT_EQUAL(1.41421356, var); // update()呼出しにより、バインド変数がアクティブなコンフィグレーションセットの値で更新されるか? configAdmin.update(); CPPUNIT_ASSERT_EQUAL(1.7320508, var); } /*! * @brief isExist()メソッドのテスト * * - バインドした変数の名称でisExist()を呼出し、真値が得られるか? * - バインドしていない名称でisExist()を呼出し、偽値が得られるか? */ void test_isExist() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // 変数をバインドする const char* varName = "name"; double var = 0.0; const char* default_value = "3.14159"; CPPUNIT_ASSERT_EQUAL( true, configAdmin.bindParameter(varName, var, default_value)); CPPUNIT_ASSERT_EQUAL(3.14159, var); // バインドした変数の名称でisExist()を呼出し、真値が得られるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.isExist("name")); // バインドしていない名称でisExist()を呼出し、偽値が得られるか? CPPUNIT_ASSERT_EQUAL(false, configAdmin.isExist("inexist name")); } /*! * @brief isChanged()メソッドのテスト * * - addConfigurationSet()呼出後は、isChanged()は真値となるか? */ void test_isChanged_on_addConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // update()を呼出してバインド変数と同期を行い、isChanged()が偽となる状態にする configAdmin.update(); CPPUNIT_ASSERT_EQUAL(false, configAdmin.isChanged()); // addConfigurationSet()を呼出す coil::Properties configSet("id"); configSet.setProperty("key", "value"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); // addConfigurationSet()呼出後は、isChanged()は真値となるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.isChanged()); } /*! * @brief isChanged()メソッドのテスト * * - removeConfigurationSet()呼出後は、isChanged()は真値となるか? */ void test_isChanged_on_removeConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // addConfigurationSet()を呼出す coil::Properties configSet("id"); configSet.setProperty("key", "value"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); // update()を呼出してバインド変数と同期を行い、isChanged()が偽となる状態にする CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("id")); configAdmin.update(); CPPUNIT_ASSERT_EQUAL(false, configAdmin.isChanged()); // removeConfigurationSet()の呼出後は、isChanged()は真値となるか? //CPPUNIT_ASSERT_EQUAL(true, configAdmin.removeConfigurationSet("id")); //CPPUNIT_ASSERT_EQUAL(true, configAdmin.isChanged()); } /*! * @brief isChanged()メソッドのテスト * * - activateConfigurationSet()呼出後は、isChanged()は真値となるか? */ void test_isChanged_on_activateConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // "set 1"のほうをアクティブにする CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 1")); // update()を行い、isChanged()が偽値の状態にしておく configAdmin.update(); CPPUNIT_ASSERT_EQUAL(false, configAdmin.isChanged()); // "set 2"のほうをアクティブにすると、isChanged()が真値となるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 2")); CPPUNIT_ASSERT_EQUAL(true, configAdmin.isChanged()); } void test_isChanged_on_setConfigurationSetValues() { // TODO 実装すること } /*! * @brief getActiveId()メソッドのテスト * * - アクティブ化したコンフィグレーションセットのIDを正しく取得できるか? */ void test_getActiveId() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // 初期状態では、アクティブIDは"default"のはず CPPUNIT_ASSERT_EQUAL(std::string("default"), std::string(configAdmin.getActiveId())); // "set 1"をアクティブにした後、意図どおりのアクティブIDを取得できるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 1")); CPPUNIT_ASSERT_EQUAL(std::string("set 1"), std::string(configAdmin.getActiveId())); // "set 2"をアクティブにした後、意図どおりのアクティブIDを取得できるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 2")); CPPUNIT_ASSERT_EQUAL(std::string("set 2"), std::string(configAdmin.getActiveId())); } /*! * @brief haveConfig()メソッドのテスト * * - 存在するコンフィグレーションセットIDを指定した場合に、haveConfig()で正しく真値を得るか? * - 存在しないコンフィグレーションセットIDを指定した場合に、haveConfig()で正しく偽値を得るか? */ void test_haveConfig() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("id"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); // 存在するコンフィグレーションセットIDを指定した場合に、haveConfig()で正しく真値を得るか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); // 存在しないコンフィグレーションセットIDを指定した場合に、haveConfig()で正しく偽値を得るか? CPPUNIT_ASSERT_EQUAL(false, configAdmin.haveConfig("inexist id")); } /*! * @brief isActive()メソッドのテスト * * - addConfigurationSet()呼出後は、isActive()は正しく偽値を得るか? * - activateConfigurationSet()でアクティブ化した後は、isActive()は正しく真値を得るか? */ void test_isActive_on_addConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // addConfigurationSet()呼出後は、isActive()は正しく偽値を得るか? coil::Properties configSet("id"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); CPPUNIT_ASSERT_EQUAL(false, configAdmin.isActive()); // activateConfigurationSet()でアクティブ化した後は、isActive()は正しく真値を得るか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("id")); CPPUNIT_ASSERT_EQUAL(true, configAdmin.isActive()); } /*! * @brief isActive()メソッドのテスト * * - removeConfigurationSet()呼出後は、isActive()は正しく偽値を得るか? */ void test_isActive_on_removeConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを追加してアクティブ化しておく coil::Properties configSet("id"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("id")); CPPUNIT_ASSERT_EQUAL(true, configAdmin.isActive()); // 登録されているコンフィグレーションセットをremoveConfigurationSet()で解除した場合、 // isActive()は正しく偽値を得るか? //CPPUNIT_ASSERT_EQUAL(true, configAdmin.removeConfigurationSet("id")); //CPPUNIT_ASSERT_EQUAL(false, configAdmin.isActive()); } /*! * @brief isActive()メソッドのテスト * * - activateConfigurationSet()でアクティブ化した後は、isActive()は正しく真値を得るか? */ void test_isActive_on_activateConfigurationSet() { // test_isActive_on_addConfigurationSet()で兼用 } void test_isActive_on_setConfigurationSetValues() { // TODO 実装すること } /*! * @brief getConfigurationSets()メソッドのテスト * * - 登録されている全てのコンフィグレーションセットを正しく取得できるか? */ void test_getConfigurationSets() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // 2つのパラメータ値を含むコンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); configSet1.setProperty("name 1", "1.41421356"); configSet1.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); configSet2.setProperty("name 1", "3.14159"); configSet2.setProperty("name 2", "2.71828"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // getConfigurationSets()で登録されている全てのコンフィグレーションセットを取得し、 // 登録したものと一致していることを確認する std::vector<coil::Properties*> expectedConfigSets; expectedConfigSets.push_back(&configSet1); expectedConfigSets.push_back(&configSet2); const std::vector<coil::Properties*>& configSets = configAdmin.getConfigurationSets(); CPPUNIT_ASSERT_EQUAL( std::string("1.41421356"), getPropertiesBy("set 1", configSets)->getProperty("name 1")); CPPUNIT_ASSERT_EQUAL( std::string("1.7320508"), getPropertiesBy("set 1", configSets)->getProperty("name 2")); CPPUNIT_ASSERT_EQUAL( std::string("3.14159"), getPropertiesBy("set 2", configSets)->getProperty("name 1")); CPPUNIT_ASSERT_EQUAL( std::string("2.71828"), getPropertiesBy("set 2", configSets)->getProperty("name 2")); } /*! * addConfigurationSet()メソッドとgetConfigurationSet()メソッドのテスト * * - addConfigurationSet()で、コンフィグレーションセットを追加できるか? * - getConfigurationSet()で、追加したコンフィグレーションセットを正しく取得できるか? */ void test_addConfigurationSet_and_getConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // addConfigurationSet()で、コンフィグレーションセットを追加できるか? coil::Properties configSet("id"); configSet.setProperty("key", "value"); configAdmin.addConfigurationSet(configSet); // getConfigurationSet()で、追加したコンフィグレーションセットを正しく取得できるか? const coil::Properties& configSetRet = configAdmin.getConfigurationSet("id"); CPPUNIT_ASSERT_EQUAL(std::string("value"), configSetRet.getProperty("key")); } /*! * setConfigurationSetValues()メソッドのテスト * * - 指定したプロパティが、正しく指定したコンフィグレーションセットに追加されるか? */ void test_setConfigurationSetValues() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); coil::Properties configSet1("id"); configSet1.setProperty("name 1", "1.41421356"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); // 登録済みのコンフィグレーションセットに対して、プロパティを追加する coil::Properties configSet2("id"); configSet2.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.setConfigurationSetValues(configSet2)); // 当該コンフィグレーションセットを取得して、プロパティが意図どおり追加されていることを確認する const coil::Properties& configSetRet = configAdmin.getConfigurationSet("id"); CPPUNIT_ASSERT_EQUAL(std::string("1.41421356"), configSetRet.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string("1.7320508"), configSetRet.getProperty("name 2")); } /*! * @brief setConfigurationSetValues()メソッドのテスト * * - 存在しないコンフィグレーションセットに対してプロパティ追加を試みて、意図どおり失敗するか? * - 失敗後に、登録済みのコンフィグレーションセットが影響を受けていないか? */ void test_setConfigurationSetValues_with_inexist_configuration_set() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); coil::Properties configSet1("id"); configSet1.setProperty("name 1", "1.41421356"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); // 存在しないコンフィグレーションセットに対してプロパティ追加を試みて、意図どおり失敗するか? coil::Properties configSet2("inexist id"); configSet2.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.setConfigurationSetValues(configSet2)); // 失敗後に、登録済みのコンフィグレーションセットが影響を受けていないか? const coil::Properties& configSetRet = configAdmin.getConfigurationSet("id"); CPPUNIT_ASSERT_EQUAL(std::string("1.41421356"), configSetRet.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string(""), configSetRet.getProperty("name 2")); } /*! * @brief getActiveConfigurationSet()メソッドのテスト * * - アクティブコンフィグレーションセットを正しく取得できるか? */ void test_getActiveConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); configSet1.setProperty("name 1", "1.41421356"); configSet1.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); configSet2.setProperty("name 1", "3.14159"); configSet2.setProperty("name 2", "2.71828"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // "set 1"をアクティブ化した後、アクティブコンフィグレーションセットとして正しく取得できるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 1")); const coil::Properties& activeConfigSet1 = configAdmin.getActiveConfigurationSet(); CPPUNIT_ASSERT_EQUAL(std::string("1.41421356"), activeConfigSet1.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string("1.7320508"), activeConfigSet1.getProperty("name 2")); // "set 2"をアクティブ化した後、アクティブコンフィグレーションセットとして正しく取得できるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 2")); const coil::Properties& activeConfigSet2 = configAdmin.getActiveConfigurationSet(); CPPUNIT_ASSERT_EQUAL(std::string("3.14159"), activeConfigSet2.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string("2.71828"), activeConfigSet2.getProperty("name 2")); } /*! * @brief removeConfigurationSet()のテスト * * - 登録されているコンフィグレーションセットを正しく登録解除できるか? */ void test_removeConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを追加しておく coil::Properties configSet("id"); configSet.setProperty("key", "value"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); // いったん登録したコンフィグレーションセットを登録解除する CPPUNIT_ASSERT_EQUAL(true, configAdmin.removeConfigurationSet("id")); // 当該コンフィグレーションセットが存在しないことを確認する CPPUNIT_ASSERT_EQUAL(false, configAdmin.haveConfig("id")); } /*! * @brief removeConfigurationSet()のテスト * * - 存在しないコンフィグレーションセットIDを指定した場合に、意図どおりに失敗するか? */ void test_removeConfigurationSet_with_inexist_configuration_id() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを追加しておく coil::Properties configSet("id"); configSet.setProperty("key", "value"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); // 存在しないコンフィグレーションセットIDを指定した場合に、意図どおりに失敗するか? CPPUNIT_ASSERT_EQUAL(false, configAdmin.removeConfigurationSet("inexist id")); // 登録されているコンフィグレーションセットは、元どおり存在しているか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); } void test_activateConfigurationSet() { // test_getActiveConfigurationSet()で兼ねる } /*! * @brief setOnUpdate()メソッドのテスト * * - */ void test_setOnUpdate() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnUpdateCallbackMock* cdm1 = new OnUpdateCallbackMock(); OnUpdateCallbackMock* cdm2 = new OnUpdateCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnUpdate(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onUpdateMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnUpdate(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onUpdateMock("config_id"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnUpdateParam()メソッドのテスト * * - */ void test_setOnUpdateParam() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnUpdateParamCallbackMock* cdm1 = new OnUpdateParamCallbackMock(); OnUpdateParamCallbackMock* cdm2 = new OnUpdateParamCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnUpdateParam(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onUpdateParamMock("config_id", "param1"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnUpdateParam(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onUpdateParamMock("config_id", "param2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnSetConfigurationSet()メソッドのテスト * * - */ void test_setOnSetConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); coil::Properties configSet2("config_id2"); configSet2.setProperty("config_id2.key", "value2"); OnSetConfigurationSetCallbackMock* cdm1 = new OnSetConfigurationSetCallbackMock(); OnSetConfigurationSetCallbackMock* cdm2 = new OnSetConfigurationSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnSetConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onSetConfigurationSetMock(configSet); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnSetConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onSetConfigurationSetMock(configSet2); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnAddConfigurationSet()メソッドのテスト * * - */ void test_setOnAddConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); coil::Properties configSet2("config_id2"); configSet2.setProperty("config_id2.key", "value2"); OnAddConfigurationAddCallbackMock* cdm1 = new OnAddConfigurationAddCallbackMock(); OnAddConfigurationAddCallbackMock* cdm2 = new OnAddConfigurationAddCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnAddConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onAddConfigurationSetMock(configSet); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnAddConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onAddConfigurationSetMock(configSet2); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnRemoveConfigurationSet()メソッドのテスト * * - */ void test_setOnRemoveConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnRemoveConfigurationSetCallbackMock* cdm1 = new OnRemoveConfigurationSetCallbackMock(); OnRemoveConfigurationSetCallbackMock* cdm2 = new OnRemoveConfigurationSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnRemoveConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onRemoveConfigurationSetMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnRemoveConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onRemoveConfigurationSetMock("config_id2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnActivateSet()メソッドのテスト * * - */ void test_setOnActivateSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnActivateSetCallbackMock* cdm1 = new OnActivateSetCallbackMock(); OnActivateSetCallbackMock* cdm2 = new OnActivateSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnActivateSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onActivateSetMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnActivateSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onActivateSetMock("config_id2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } }; }; // namespace ConfigAdmin /* * Register test suite */ CPPUNIT_TEST_SUITE_REGISTRATION(Config::ConfigTests); CPPUNIT_TEST_SUITE_REGISTRATION(ConfigAdmin::ConfigAdminTests); #ifdef LOCAL_MAIN int main(int argc, char* argv[]) { FORMAT format = TEXT_OUT; int target = 0; std::string xsl; std::string ns; std::string fname; std::ofstream ofs; int i(1); while (i < argc) { std::string arg(argv[i]); std::string next_arg; if (i + 1 < argc) next_arg = argv[i + 1]; else next_arg = ""; if (arg == "--text") { format = TEXT_OUT; break; } if (arg == "--xml") { if (next_arg == "") { fname = argv[0]; fname += ".xml"; } else { fname = next_arg; } format = XML_OUT; ofs.open(fname.c_str()); } if ( arg == "--compiler" ) { format = COMPILER_OUT; break; } if ( arg == "--cerr" ) { target = 1; break; } if ( arg == "--xsl" ) { if (next_arg == "") xsl = "default.xsl"; else xsl = next_arg; } if ( arg == "--namespace" ) { if (next_arg == "") { std::cerr << "no namespace specified" << std::endl; exit(1); } else { xsl = next_arg; } } ++i; } CppUnit::TextUi::TestRunner runner; if ( ns.empty() ) runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest()); else runner.addTest(CppUnit::TestFactoryRegistry::getRegistry(ns).makeTest()); CppUnit::Outputter* outputter = 0; std::ostream* stream = target ? &std::cerr : &std::cout; switch ( format ) { case TEXT_OUT : outputter = new CppUnit::TextOutputter(&runner.result(),*stream); break; case XML_OUT : std::cout << "XML_OUT" << std::endl; outputter = new CppUnit::XmlOutputter(&runner.result(), ofs, "shift_jis"); static_cast<CppUnit::XmlOutputter*>(outputter)->setStyleSheet(xsl); break; case COMPILER_OUT : outputter = new CppUnit::CompilerOutputter(&runner.result(),*stream); break; } runner.setOutputter(outputter); runner.run(); return 0; // runner.run() ? 0 : 1; } #endif // MAIN #endif // ConfigAdmin_cpp
487  coil::Properties configSet2("set 2");
488  configSet2.setProperty("name", "1.7320508");
489 
490  // 準備した2つのコンフィグレーションセットを追加しておく
491  CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1));
492  CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2));
493 
494  // 変数をバインドする const char* varName = "name"; double var = 0.0; const char* default_value = "3.14159"; CPPUNIT_ASSERT_EQUAL( true, configAdmin.bindParameter(varName, var, default_value)); // update()前は、まだ変数がデフォルト値のままであることを確認する CPPUNIT_ASSERT_EQUAL(3.14159, var); // コンフィグレーションセット1を指定してupdate()し、その内容でバインド変数値が正しく更新されるか? configAdmin.update("set 1"); CPPUNIT_ASSERT_EQUAL(1.41421356, var); // コンフィグレーションセット2を指定してupdate()し、その内容でバインド変数値が正しく更新されるか? configAdmin.update("set 2"); CPPUNIT_ASSERT_EQUAL(1.7320508, var); } /*! * @brief update()メソッドのテスト * * - 存在しないコンフィグレーションIDを指定してupdate()を呼出した場合に、 * バインド変数が更新されずに、そのまま保持されるか? */ void test_update_by_inexist_configuration_set() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet("set"); configSet.setProperty("name", "1.41421356"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); // 変数をバインドする const char* varName = "name"; double var = 0.0; const char* default_value = "3.14159"; CPPUNIT_ASSERT_EQUAL( true, configAdmin.bindParameter(varName, var, default_value)); CPPUNIT_ASSERT_EQUAL(3.14159, var); // 存在しないコンフィグレーションIDを指定してupdate()を呼出した場合に、 // バインド変数が更新されずに、そのまま保持されるか? configAdmin.update("inexist set"); CPPUNIT_ASSERT_EQUAL(3.14159, var); } /*! * @brief update()メソッド(名称指定)のテスト * * - 指定したコンフィグレーションセットの指定した名称の変数だけが、正しく更新されるか? */ void test_update_with_specified_parameter_name() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // 2つのパラメータ値を含むコンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); configSet1.setProperty("name 1", "1.41421356"); configSet1.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); configSet2.setProperty("name 1", "3.14159"); configSet2.setProperty("name 2", "2.71828"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // 2つの変数をバインドする const char* varName1 = "name 1"; double var1 = 0.0; const char* default_value1 = "2.23620679"; CPPUNIT_ASSERT_EQUAL( true, configAdmin.bindParameter(varName1, var1, default_value1)); CPPUNIT_ASSERT_EQUAL(2.23620679, var1); const char* varName2 = "name 2"; double var2 = 0.0; const char* default_value2 = "2.4494897"; CPPUNIT_ASSERT_EQUAL( true, configAdmin.bindParameter(varName2, var2, default_value2)); CPPUNIT_ASSERT_EQUAL(2.4494897, var2); // 2つのうち、片方の変数のみを名称指定してupdate()を行い、指定した変数だけが正しく更新されるか? configAdmin.update("set 2", "name 1"); CPPUNIT_ASSERT_EQUAL(3.14159, var1); CPPUNIT_ASSERT_EQUAL(2.4494897, var2); } /*! * @brief update()メソッド(アクティブコンフィグレーションセット)のテスト * * - update()呼出しにより、バインド変数がアクティブなコンフィグレーションセットの値で更新されるか? */ void test_update_by_active_configuration_set() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); configSet1.setProperty("name", "1.41421356"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); configSet2.setProperty("name", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // 変数をバインドする const char* varName = "name"; double var = 0.0; const char* default_value = "3.14159"; CPPUNIT_ASSERT_EQUAL( true, configAdmin.bindParameter(varName, var, default_value)); CPPUNIT_ASSERT_EQUAL(3.14159, var); // "set 1"のほうをアクティブにする CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 1")); // アクティブにしただけでは、まだバインド変数は更新されていないはず CPPUNIT_ASSERT_EQUAL(3.14159, var); // update()呼出しにより、バインド変数がアクティブなコンフィグレーションセットの値で更新されるか? configAdmin.update(); CPPUNIT_ASSERT_EQUAL(1.41421356, var); // "set 2"のほうをアクティブにする CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 2")); // アクティブにしただけでは、まだバインド変数は更新されていないはず CPPUNIT_ASSERT_EQUAL(1.41421356, var); // update()呼出しにより、バインド変数がアクティブなコンフィグレーションセットの値で更新されるか? configAdmin.update(); CPPUNIT_ASSERT_EQUAL(1.7320508, var); } /*! * @brief isExist()メソッドのテスト * * - バインドした変数の名称でisExist()を呼出し、真値が得られるか? * - バインドしていない名称でisExist()を呼出し、偽値が得られるか? */ void test_isExist() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // 変数をバインドする const char* varName = "name"; double var = 0.0; const char* default_value = "3.14159"; CPPUNIT_ASSERT_EQUAL( true, configAdmin.bindParameter(varName, var, default_value)); CPPUNIT_ASSERT_EQUAL(3.14159, var); // バインドした変数の名称でisExist()を呼出し、真値が得られるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.isExist("name")); // バインドしていない名称でisExist()を呼出し、偽値が得られるか? CPPUNIT_ASSERT_EQUAL(false, configAdmin.isExist("inexist name")); } /*! * @brief isChanged()メソッドのテスト * * - addConfigurationSet()呼出後は、isChanged()は真値となるか? */ void test_isChanged_on_addConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // update()を呼出してバインド変数と同期を行い、isChanged()が偽となる状態にする configAdmin.update(); CPPUNIT_ASSERT_EQUAL(false, configAdmin.isChanged()); // addConfigurationSet()を呼出す coil::Properties configSet("id"); configSet.setProperty("key", "value"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); // addConfigurationSet()呼出後は、isChanged()は真値となるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.isChanged()); } /*! * @brief isChanged()メソッドのテスト * * - removeConfigurationSet()呼出後は、isChanged()は真値となるか? */ void test_isChanged_on_removeConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // addConfigurationSet()を呼出す coil::Properties configSet("id"); configSet.setProperty("key", "value"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); // update()を呼出してバインド変数と同期を行い、isChanged()が偽となる状態にする CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("id")); configAdmin.update(); CPPUNIT_ASSERT_EQUAL(false, configAdmin.isChanged()); // removeConfigurationSet()の呼出後は、isChanged()は真値となるか? //CPPUNIT_ASSERT_EQUAL(true, configAdmin.removeConfigurationSet("id")); //CPPUNIT_ASSERT_EQUAL(true, configAdmin.isChanged()); } /*! * @brief isChanged()メソッドのテスト * * - activateConfigurationSet()呼出後は、isChanged()は真値となるか? */ void test_isChanged_on_activateConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // "set 1"のほうをアクティブにする CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 1")); // update()を行い、isChanged()が偽値の状態にしておく configAdmin.update(); CPPUNIT_ASSERT_EQUAL(false, configAdmin.isChanged()); // "set 2"のほうをアクティブにすると、isChanged()が真値となるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 2")); CPPUNIT_ASSERT_EQUAL(true, configAdmin.isChanged()); } void test_isChanged_on_setConfigurationSetValues() { // TODO 実装すること } /*! * @brief getActiveId()メソッドのテスト * * - アクティブ化したコンフィグレーションセットのIDを正しく取得できるか? */ void test_getActiveId() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // 初期状態では、アクティブIDは"default"のはず CPPUNIT_ASSERT_EQUAL(std::string("default"), std::string(configAdmin.getActiveId())); // "set 1"をアクティブにした後、意図どおりのアクティブIDを取得できるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 1")); CPPUNIT_ASSERT_EQUAL(std::string("set 1"), std::string(configAdmin.getActiveId())); // "set 2"をアクティブにした後、意図どおりのアクティブIDを取得できるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 2")); CPPUNIT_ASSERT_EQUAL(std::string("set 2"), std::string(configAdmin.getActiveId())); } /*! * @brief haveConfig()メソッドのテスト * * - 存在するコンフィグレーションセットIDを指定した場合に、haveConfig()で正しく真値を得るか? * - 存在しないコンフィグレーションセットIDを指定した場合に、haveConfig()で正しく偽値を得るか? */ void test_haveConfig() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("id"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); // 存在するコンフィグレーションセットIDを指定した場合に、haveConfig()で正しく真値を得るか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); // 存在しないコンフィグレーションセットIDを指定した場合に、haveConfig()で正しく偽値を得るか? CPPUNIT_ASSERT_EQUAL(false, configAdmin.haveConfig("inexist id")); } /*! * @brief isActive()メソッドのテスト * * - addConfigurationSet()呼出後は、isActive()は正しく偽値を得るか? * - activateConfigurationSet()でアクティブ化した後は、isActive()は正しく真値を得るか? */ void test_isActive_on_addConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // addConfigurationSet()呼出後は、isActive()は正しく偽値を得るか? coil::Properties configSet("id"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); CPPUNIT_ASSERT_EQUAL(false, configAdmin.isActive()); // activateConfigurationSet()でアクティブ化した後は、isActive()は正しく真値を得るか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("id")); CPPUNIT_ASSERT_EQUAL(true, configAdmin.isActive()); } /*! * @brief isActive()メソッドのテスト * * - removeConfigurationSet()呼出後は、isActive()は正しく偽値を得るか? */ void test_isActive_on_removeConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを追加してアクティブ化しておく coil::Properties configSet("id"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("id")); CPPUNIT_ASSERT_EQUAL(true, configAdmin.isActive()); // 登録されているコンフィグレーションセットをremoveConfigurationSet()で解除した場合、 // isActive()は正しく偽値を得るか? //CPPUNIT_ASSERT_EQUAL(true, configAdmin.removeConfigurationSet("id")); //CPPUNIT_ASSERT_EQUAL(false, configAdmin.isActive()); } /*! * @brief isActive()メソッドのテスト * * - activateConfigurationSet()でアクティブ化した後は、isActive()は正しく真値を得るか? */ void test_isActive_on_activateConfigurationSet() { // test_isActive_on_addConfigurationSet()で兼用 } void test_isActive_on_setConfigurationSetValues() { // TODO 実装すること } /*! * @brief getConfigurationSets()メソッドのテスト * * - 登録されている全てのコンフィグレーションセットを正しく取得できるか? */ void test_getConfigurationSets() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // 2つのパラメータ値を含むコンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); configSet1.setProperty("name 1", "1.41421356"); configSet1.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); configSet2.setProperty("name 1", "3.14159"); configSet2.setProperty("name 2", "2.71828"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // getConfigurationSets()で登録されている全てのコンフィグレーションセットを取得し、 // 登録したものと一致していることを確認する std::vector<coil::Properties*> expectedConfigSets; expectedConfigSets.push_back(&configSet1); expectedConfigSets.push_back(&configSet2); const std::vector<coil::Properties*>& configSets = configAdmin.getConfigurationSets(); CPPUNIT_ASSERT_EQUAL( std::string("1.41421356"), getPropertiesBy("set 1", configSets)->getProperty("name 1")); CPPUNIT_ASSERT_EQUAL( std::string("1.7320508"), getPropertiesBy("set 1", configSets)->getProperty("name 2")); CPPUNIT_ASSERT_EQUAL( std::string("3.14159"), getPropertiesBy("set 2", configSets)->getProperty("name 1")); CPPUNIT_ASSERT_EQUAL( std::string("2.71828"), getPropertiesBy("set 2", configSets)->getProperty("name 2")); } /*! * addConfigurationSet()メソッドとgetConfigurationSet()メソッドのテスト * * - addConfigurationSet()で、コンフィグレーションセットを追加できるか? * - getConfigurationSet()で、追加したコンフィグレーションセットを正しく取得できるか? */ void test_addConfigurationSet_and_getConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // addConfigurationSet()で、コンフィグレーションセットを追加できるか? coil::Properties configSet("id"); configSet.setProperty("key", "value"); configAdmin.addConfigurationSet(configSet); // getConfigurationSet()で、追加したコンフィグレーションセットを正しく取得できるか? const coil::Properties& configSetRet = configAdmin.getConfigurationSet("id"); CPPUNIT_ASSERT_EQUAL(std::string("value"), configSetRet.getProperty("key")); } /*! * setConfigurationSetValues()メソッドのテスト * * - 指定したプロパティが、正しく指定したコンフィグレーションセットに追加されるか? */ void test_setConfigurationSetValues() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); coil::Properties configSet1("id"); configSet1.setProperty("name 1", "1.41421356"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); // 登録済みのコンフィグレーションセットに対して、プロパティを追加する coil::Properties configSet2("id"); configSet2.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.setConfigurationSetValues(configSet2)); // 当該コンフィグレーションセットを取得して、プロパティが意図どおり追加されていることを確認する const coil::Properties& configSetRet = configAdmin.getConfigurationSet("id"); CPPUNIT_ASSERT_EQUAL(std::string("1.41421356"), configSetRet.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string("1.7320508"), configSetRet.getProperty("name 2")); } /*! * @brief setConfigurationSetValues()メソッドのテスト * * - 存在しないコンフィグレーションセットに対してプロパティ追加を試みて、意図どおり失敗するか? * - 失敗後に、登録済みのコンフィグレーションセットが影響を受けていないか? */ void test_setConfigurationSetValues_with_inexist_configuration_set() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); coil::Properties configSet1("id"); configSet1.setProperty("name 1", "1.41421356"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); // 存在しないコンフィグレーションセットに対してプロパティ追加を試みて、意図どおり失敗するか? coil::Properties configSet2("inexist id"); configSet2.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.setConfigurationSetValues(configSet2)); // 失敗後に、登録済みのコンフィグレーションセットが影響を受けていないか? const coil::Properties& configSetRet = configAdmin.getConfigurationSet("id"); CPPUNIT_ASSERT_EQUAL(std::string("1.41421356"), configSetRet.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string(""), configSetRet.getProperty("name 2")); } /*! * @brief getActiveConfigurationSet()メソッドのテスト * * - アクティブコンフィグレーションセットを正しく取得できるか? */ void test_getActiveConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); configSet1.setProperty("name 1", "1.41421356"); configSet1.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); configSet2.setProperty("name 1", "3.14159"); configSet2.setProperty("name 2", "2.71828"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // "set 1"をアクティブ化した後、アクティブコンフィグレーションセットとして正しく取得できるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 1")); const coil::Properties& activeConfigSet1 = configAdmin.getActiveConfigurationSet(); CPPUNIT_ASSERT_EQUAL(std::string("1.41421356"), activeConfigSet1.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string("1.7320508"), activeConfigSet1.getProperty("name 2")); // "set 2"をアクティブ化した後、アクティブコンフィグレーションセットとして正しく取得できるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 2")); const coil::Properties& activeConfigSet2 = configAdmin.getActiveConfigurationSet(); CPPUNIT_ASSERT_EQUAL(std::string("3.14159"), activeConfigSet2.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string("2.71828"), activeConfigSet2.getProperty("name 2")); } /*! * @brief removeConfigurationSet()のテスト * * - 登録されているコンフィグレーションセットを正しく登録解除できるか? */ void test_removeConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを追加しておく coil::Properties configSet("id"); configSet.setProperty("key", "value"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); // いったん登録したコンフィグレーションセットを登録解除する CPPUNIT_ASSERT_EQUAL(true, configAdmin.removeConfigurationSet("id")); // 当該コンフィグレーションセットが存在しないことを確認する CPPUNIT_ASSERT_EQUAL(false, configAdmin.haveConfig("id")); } /*! * @brief removeConfigurationSet()のテスト * * - 存在しないコンフィグレーションセットIDを指定した場合に、意図どおりに失敗するか? */ void test_removeConfigurationSet_with_inexist_configuration_id() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを追加しておく coil::Properties configSet("id"); configSet.setProperty("key", "value"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); // 存在しないコンフィグレーションセットIDを指定した場合に、意図どおりに失敗するか? CPPUNIT_ASSERT_EQUAL(false, configAdmin.removeConfigurationSet("inexist id")); // 登録されているコンフィグレーションセットは、元どおり存在しているか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); } void test_activateConfigurationSet() { // test_getActiveConfigurationSet()で兼ねる } /*! * @brief setOnUpdate()メソッドのテスト * * - */ void test_setOnUpdate() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnUpdateCallbackMock* cdm1 = new OnUpdateCallbackMock(); OnUpdateCallbackMock* cdm2 = new OnUpdateCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnUpdate(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onUpdateMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnUpdate(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onUpdateMock("config_id"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnUpdateParam()メソッドのテスト * * - */ void test_setOnUpdateParam() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnUpdateParamCallbackMock* cdm1 = new OnUpdateParamCallbackMock(); OnUpdateParamCallbackMock* cdm2 = new OnUpdateParamCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnUpdateParam(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onUpdateParamMock("config_id", "param1"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnUpdateParam(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onUpdateParamMock("config_id", "param2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnSetConfigurationSet()メソッドのテスト * * - */ void test_setOnSetConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); coil::Properties configSet2("config_id2"); configSet2.setProperty("config_id2.key", "value2"); OnSetConfigurationSetCallbackMock* cdm1 = new OnSetConfigurationSetCallbackMock(); OnSetConfigurationSetCallbackMock* cdm2 = new OnSetConfigurationSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnSetConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onSetConfigurationSetMock(configSet); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnSetConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onSetConfigurationSetMock(configSet2); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnAddConfigurationSet()メソッドのテスト * * - */ void test_setOnAddConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); coil::Properties configSet2("config_id2"); configSet2.setProperty("config_id2.key", "value2"); OnAddConfigurationAddCallbackMock* cdm1 = new OnAddConfigurationAddCallbackMock(); OnAddConfigurationAddCallbackMock* cdm2 = new OnAddConfigurationAddCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnAddConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onAddConfigurationSetMock(configSet); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnAddConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onAddConfigurationSetMock(configSet2); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnRemoveConfigurationSet()メソッドのテスト * * - */ void test_setOnRemoveConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnRemoveConfigurationSetCallbackMock* cdm1 = new OnRemoveConfigurationSetCallbackMock(); OnRemoveConfigurationSetCallbackMock* cdm2 = new OnRemoveConfigurationSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnRemoveConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onRemoveConfigurationSetMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnRemoveConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onRemoveConfigurationSetMock("config_id2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnActivateSet()メソッドのテスト * * - */ void test_setOnActivateSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnActivateSetCallbackMock* cdm1 = new OnActivateSetCallbackMock(); OnActivateSetCallbackMock* cdm2 = new OnActivateSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnActivateSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onActivateSetMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnActivateSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onActivateSetMock("config_id2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } }; }; // namespace ConfigAdmin /* * Register test suite */ CPPUNIT_TEST_SUITE_REGISTRATION(Config::ConfigTests); CPPUNIT_TEST_SUITE_REGISTRATION(ConfigAdmin::ConfigAdminTests); #ifdef LOCAL_MAIN int main(int argc, char* argv[]) { FORMAT format = TEXT_OUT; int target = 0; std::string xsl; std::string ns; std::string fname; std::ofstream ofs; int i(1); while (i < argc) { std::string arg(argv[i]); std::string next_arg; if (i + 1 < argc) next_arg = argv[i + 1]; else next_arg = ""; if (arg == "--text") { format = TEXT_OUT; break; } if (arg == "--xml") { if (next_arg == "") { fname = argv[0]; fname += ".xml"; } else { fname = next_arg; } format = XML_OUT; ofs.open(fname.c_str()); } if ( arg == "--compiler" ) { format = COMPILER_OUT; break; } if ( arg == "--cerr" ) { target = 1; break; } if ( arg == "--xsl" ) { if (next_arg == "") xsl = "default.xsl"; else xsl = next_arg; } if ( arg == "--namespace" ) { if (next_arg == "") { std::cerr << "no namespace specified" << std::endl; exit(1); } else { xsl = next_arg; } } ++i; } CppUnit::TextUi::TestRunner runner; if ( ns.empty() ) runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest()); else runner.addTest(CppUnit::TestFactoryRegistry::getRegistry(ns).makeTest()); CppUnit::Outputter* outputter = 0; std::ostream* stream = target ? &std::cerr : &std::cout; switch ( format ) { case TEXT_OUT : outputter = new CppUnit::TextOutputter(&runner.result(),*stream); break; case XML_OUT : std::cout << "XML_OUT" << std::endl; outputter = new CppUnit::XmlOutputter(&runner.result(), ofs, "shift_jis"); static_cast<CppUnit::XmlOutputter*>(outputter)->setStyleSheet(xsl); break; case COMPILER_OUT : outputter = new CppUnit::CompilerOutputter(&runner.result(),*stream); break; } runner.setOutputter(outputter); runner.run(); return 0; // runner.run() ? 0 : 1; } #endif // MAIN #endif // ConfigAdmin_cpp
495  const char* varName = "name";
496  double var = 0.0;
497  const char* default_value = "3.14159";
498  CPPUNIT_ASSERT_EQUAL(
499  true, configAdmin.bindParameter(varName, var, default_value));
500 
501  // update()前は、まだ変数がデフォルト値のままであることを確認する CPPUNIT_ASSERT_EQUAL(3.14159, var); // コンフィグレーションセット1を指定してupdate()し、その内容でバインド変数値が正しく更新されるか? configAdmin.update("set 1"); CPPUNIT_ASSERT_EQUAL(1.41421356, var); // コンフィグレーションセット2を指定してupdate()し、その内容でバインド変数値が正しく更新されるか? configAdmin.update("set 2"); CPPUNIT_ASSERT_EQUAL(1.7320508, var); } /*! * @brief update()メソッドのテスト * * - 存在しないコンフィグレーションIDを指定してupdate()を呼出した場合に、 * バインド変数が更新されずに、そのまま保持されるか? */ void test_update_by_inexist_configuration_set() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet("set"); configSet.setProperty("name", "1.41421356"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); // 変数をバインドする const char* varName = "name"; double var = 0.0; const char* default_value = "3.14159"; CPPUNIT_ASSERT_EQUAL( true, configAdmin.bindParameter(varName, var, default_value)); CPPUNIT_ASSERT_EQUAL(3.14159, var); // 存在しないコンフィグレーションIDを指定してupdate()を呼出した場合に、 // バインド変数が更新されずに、そのまま保持されるか? configAdmin.update("inexist set"); CPPUNIT_ASSERT_EQUAL(3.14159, var); } /*! * @brief update()メソッド(名称指定)のテスト * * - 指定したコンフィグレーションセットの指定した名称の変数だけが、正しく更新されるか? */ void test_update_with_specified_parameter_name() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // 2つのパラメータ値を含むコンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); configSet1.setProperty("name 1", "1.41421356"); configSet1.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); configSet2.setProperty("name 1", "3.14159"); configSet2.setProperty("name 2", "2.71828"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // 2つの変数をバインドする const char* varName1 = "name 1"; double var1 = 0.0; const char* default_value1 = "2.23620679"; CPPUNIT_ASSERT_EQUAL( true, configAdmin.bindParameter(varName1, var1, default_value1)); CPPUNIT_ASSERT_EQUAL(2.23620679, var1); const char* varName2 = "name 2"; double var2 = 0.0; const char* default_value2 = "2.4494897"; CPPUNIT_ASSERT_EQUAL( true, configAdmin.bindParameter(varName2, var2, default_value2)); CPPUNIT_ASSERT_EQUAL(2.4494897, var2); // 2つのうち、片方の変数のみを名称指定してupdate()を行い、指定した変数だけが正しく更新されるか? configAdmin.update("set 2", "name 1"); CPPUNIT_ASSERT_EQUAL(3.14159, var1); CPPUNIT_ASSERT_EQUAL(2.4494897, var2); } /*! * @brief update()メソッド(アクティブコンフィグレーションセット)のテスト * * - update()呼出しにより、バインド変数がアクティブなコンフィグレーションセットの値で更新されるか? */ void test_update_by_active_configuration_set() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); configSet1.setProperty("name", "1.41421356"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); configSet2.setProperty("name", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // 変数をバインドする const char* varName = "name"; double var = 0.0; const char* default_value = "3.14159"; CPPUNIT_ASSERT_EQUAL( true, configAdmin.bindParameter(varName, var, default_value)); CPPUNIT_ASSERT_EQUAL(3.14159, var); // "set 1"のほうをアクティブにする CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 1")); // アクティブにしただけでは、まだバインド変数は更新されていないはず CPPUNIT_ASSERT_EQUAL(3.14159, var); // update()呼出しにより、バインド変数がアクティブなコンフィグレーションセットの値で更新されるか? configAdmin.update(); CPPUNIT_ASSERT_EQUAL(1.41421356, var); // "set 2"のほうをアクティブにする CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 2")); // アクティブにしただけでは、まだバインド変数は更新されていないはず CPPUNIT_ASSERT_EQUAL(1.41421356, var); // update()呼出しにより、バインド変数がアクティブなコンフィグレーションセットの値で更新されるか? configAdmin.update(); CPPUNIT_ASSERT_EQUAL(1.7320508, var); } /*! * @brief isExist()メソッドのテスト * * - バインドした変数の名称でisExist()を呼出し、真値が得られるか? * - バインドしていない名称でisExist()を呼出し、偽値が得られるか? */ void test_isExist() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // 変数をバインドする const char* varName = "name"; double var = 0.0; const char* default_value = "3.14159"; CPPUNIT_ASSERT_EQUAL( true, configAdmin.bindParameter(varName, var, default_value)); CPPUNIT_ASSERT_EQUAL(3.14159, var); // バインドした変数の名称でisExist()を呼出し、真値が得られるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.isExist("name")); // バインドしていない名称でisExist()を呼出し、偽値が得られるか? CPPUNIT_ASSERT_EQUAL(false, configAdmin.isExist("inexist name")); } /*! * @brief isChanged()メソッドのテスト * * - addConfigurationSet()呼出後は、isChanged()は真値となるか? */ void test_isChanged_on_addConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // update()を呼出してバインド変数と同期を行い、isChanged()が偽となる状態にする configAdmin.update(); CPPUNIT_ASSERT_EQUAL(false, configAdmin.isChanged()); // addConfigurationSet()を呼出す coil::Properties configSet("id"); configSet.setProperty("key", "value"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); // addConfigurationSet()呼出後は、isChanged()は真値となるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.isChanged()); } /*! * @brief isChanged()メソッドのテスト * * - removeConfigurationSet()呼出後は、isChanged()は真値となるか? */ void test_isChanged_on_removeConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // addConfigurationSet()を呼出す coil::Properties configSet("id"); configSet.setProperty("key", "value"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); // update()を呼出してバインド変数と同期を行い、isChanged()が偽となる状態にする CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("id")); configAdmin.update(); CPPUNIT_ASSERT_EQUAL(false, configAdmin.isChanged()); // removeConfigurationSet()の呼出後は、isChanged()は真値となるか? //CPPUNIT_ASSERT_EQUAL(true, configAdmin.removeConfigurationSet("id")); //CPPUNIT_ASSERT_EQUAL(true, configAdmin.isChanged()); } /*! * @brief isChanged()メソッドのテスト * * - activateConfigurationSet()呼出後は、isChanged()は真値となるか? */ void test_isChanged_on_activateConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // "set 1"のほうをアクティブにする CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 1")); // update()を行い、isChanged()が偽値の状態にしておく configAdmin.update(); CPPUNIT_ASSERT_EQUAL(false, configAdmin.isChanged()); // "set 2"のほうをアクティブにすると、isChanged()が真値となるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 2")); CPPUNIT_ASSERT_EQUAL(true, configAdmin.isChanged()); } void test_isChanged_on_setConfigurationSetValues() { // TODO 実装すること } /*! * @brief getActiveId()メソッドのテスト * * - アクティブ化したコンフィグレーションセットのIDを正しく取得できるか? */ void test_getActiveId() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // 初期状態では、アクティブIDは"default"のはず CPPUNIT_ASSERT_EQUAL(std::string("default"), std::string(configAdmin.getActiveId())); // "set 1"をアクティブにした後、意図どおりのアクティブIDを取得できるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 1")); CPPUNIT_ASSERT_EQUAL(std::string("set 1"), std::string(configAdmin.getActiveId())); // "set 2"をアクティブにした後、意図どおりのアクティブIDを取得できるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 2")); CPPUNIT_ASSERT_EQUAL(std::string("set 2"), std::string(configAdmin.getActiveId())); } /*! * @brief haveConfig()メソッドのテスト * * - 存在するコンフィグレーションセットIDを指定した場合に、haveConfig()で正しく真値を得るか? * - 存在しないコンフィグレーションセットIDを指定した場合に、haveConfig()で正しく偽値を得るか? */ void test_haveConfig() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("id"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); // 存在するコンフィグレーションセットIDを指定した場合に、haveConfig()で正しく真値を得るか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); // 存在しないコンフィグレーションセットIDを指定した場合に、haveConfig()で正しく偽値を得るか? CPPUNIT_ASSERT_EQUAL(false, configAdmin.haveConfig("inexist id")); } /*! * @brief isActive()メソッドのテスト * * - addConfigurationSet()呼出後は、isActive()は正しく偽値を得るか? * - activateConfigurationSet()でアクティブ化した後は、isActive()は正しく真値を得るか? */ void test_isActive_on_addConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // addConfigurationSet()呼出後は、isActive()は正しく偽値を得るか? coil::Properties configSet("id"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); CPPUNIT_ASSERT_EQUAL(false, configAdmin.isActive()); // activateConfigurationSet()でアクティブ化した後は、isActive()は正しく真値を得るか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("id")); CPPUNIT_ASSERT_EQUAL(true, configAdmin.isActive()); } /*! * @brief isActive()メソッドのテスト * * - removeConfigurationSet()呼出後は、isActive()は正しく偽値を得るか? */ void test_isActive_on_removeConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを追加してアクティブ化しておく coil::Properties configSet("id"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("id")); CPPUNIT_ASSERT_EQUAL(true, configAdmin.isActive()); // 登録されているコンフィグレーションセットをremoveConfigurationSet()で解除した場合、 // isActive()は正しく偽値を得るか? //CPPUNIT_ASSERT_EQUAL(true, configAdmin.removeConfigurationSet("id")); //CPPUNIT_ASSERT_EQUAL(false, configAdmin.isActive()); } /*! * @brief isActive()メソッドのテスト * * - activateConfigurationSet()でアクティブ化した後は、isActive()は正しく真値を得るか? */ void test_isActive_on_activateConfigurationSet() { // test_isActive_on_addConfigurationSet()で兼用 } void test_isActive_on_setConfigurationSetValues() { // TODO 実装すること } /*! * @brief getConfigurationSets()メソッドのテスト * * - 登録されている全てのコンフィグレーションセットを正しく取得できるか? */ void test_getConfigurationSets() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // 2つのパラメータ値を含むコンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); configSet1.setProperty("name 1", "1.41421356"); configSet1.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); configSet2.setProperty("name 1", "3.14159"); configSet2.setProperty("name 2", "2.71828"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // getConfigurationSets()で登録されている全てのコンフィグレーションセットを取得し、 // 登録したものと一致していることを確認する std::vector<coil::Properties*> expectedConfigSets; expectedConfigSets.push_back(&configSet1); expectedConfigSets.push_back(&configSet2); const std::vector<coil::Properties*>& configSets = configAdmin.getConfigurationSets(); CPPUNIT_ASSERT_EQUAL( std::string("1.41421356"), getPropertiesBy("set 1", configSets)->getProperty("name 1")); CPPUNIT_ASSERT_EQUAL( std::string("1.7320508"), getPropertiesBy("set 1", configSets)->getProperty("name 2")); CPPUNIT_ASSERT_EQUAL( std::string("3.14159"), getPropertiesBy("set 2", configSets)->getProperty("name 1")); CPPUNIT_ASSERT_EQUAL( std::string("2.71828"), getPropertiesBy("set 2", configSets)->getProperty("name 2")); } /*! * addConfigurationSet()メソッドとgetConfigurationSet()メソッドのテスト * * - addConfigurationSet()で、コンフィグレーションセットを追加できるか? * - getConfigurationSet()で、追加したコンフィグレーションセットを正しく取得できるか? */ void test_addConfigurationSet_and_getConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // addConfigurationSet()で、コンフィグレーションセットを追加できるか? coil::Properties configSet("id"); configSet.setProperty("key", "value"); configAdmin.addConfigurationSet(configSet); // getConfigurationSet()で、追加したコンフィグレーションセットを正しく取得できるか? const coil::Properties& configSetRet = configAdmin.getConfigurationSet("id"); CPPUNIT_ASSERT_EQUAL(std::string("value"), configSetRet.getProperty("key")); } /*! * setConfigurationSetValues()メソッドのテスト * * - 指定したプロパティが、正しく指定したコンフィグレーションセットに追加されるか? */ void test_setConfigurationSetValues() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); coil::Properties configSet1("id"); configSet1.setProperty("name 1", "1.41421356"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); // 登録済みのコンフィグレーションセットに対して、プロパティを追加する coil::Properties configSet2("id"); configSet2.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.setConfigurationSetValues(configSet2)); // 当該コンフィグレーションセットを取得して、プロパティが意図どおり追加されていることを確認する const coil::Properties& configSetRet = configAdmin.getConfigurationSet("id"); CPPUNIT_ASSERT_EQUAL(std::string("1.41421356"), configSetRet.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string("1.7320508"), configSetRet.getProperty("name 2")); } /*! * @brief setConfigurationSetValues()メソッドのテスト * * - 存在しないコンフィグレーションセットに対してプロパティ追加を試みて、意図どおり失敗するか? * - 失敗後に、登録済みのコンフィグレーションセットが影響を受けていないか? */ void test_setConfigurationSetValues_with_inexist_configuration_set() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); coil::Properties configSet1("id"); configSet1.setProperty("name 1", "1.41421356"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); // 存在しないコンフィグレーションセットに対してプロパティ追加を試みて、意図どおり失敗するか? coil::Properties configSet2("inexist id"); configSet2.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.setConfigurationSetValues(configSet2)); // 失敗後に、登録済みのコンフィグレーションセットが影響を受けていないか? const coil::Properties& configSetRet = configAdmin.getConfigurationSet("id"); CPPUNIT_ASSERT_EQUAL(std::string("1.41421356"), configSetRet.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string(""), configSetRet.getProperty("name 2")); } /*! * @brief getActiveConfigurationSet()メソッドのテスト * * - アクティブコンフィグレーションセットを正しく取得できるか? */ void test_getActiveConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); configSet1.setProperty("name 1", "1.41421356"); configSet1.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); configSet2.setProperty("name 1", "3.14159"); configSet2.setProperty("name 2", "2.71828"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // "set 1"をアクティブ化した後、アクティブコンフィグレーションセットとして正しく取得できるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 1")); const coil::Properties& activeConfigSet1 = configAdmin.getActiveConfigurationSet(); CPPUNIT_ASSERT_EQUAL(std::string("1.41421356"), activeConfigSet1.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string("1.7320508"), activeConfigSet1.getProperty("name 2")); // "set 2"をアクティブ化した後、アクティブコンフィグレーションセットとして正しく取得できるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 2")); const coil::Properties& activeConfigSet2 = configAdmin.getActiveConfigurationSet(); CPPUNIT_ASSERT_EQUAL(std::string("3.14159"), activeConfigSet2.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string("2.71828"), activeConfigSet2.getProperty("name 2")); } /*! * @brief removeConfigurationSet()のテスト * * - 登録されているコンフィグレーションセットを正しく登録解除できるか? */ void test_removeConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを追加しておく coil::Properties configSet("id"); configSet.setProperty("key", "value"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); // いったん登録したコンフィグレーションセットを登録解除する CPPUNIT_ASSERT_EQUAL(true, configAdmin.removeConfigurationSet("id")); // 当該コンフィグレーションセットが存在しないことを確認する CPPUNIT_ASSERT_EQUAL(false, configAdmin.haveConfig("id")); } /*! * @brief removeConfigurationSet()のテスト * * - 存在しないコンフィグレーションセットIDを指定した場合に、意図どおりに失敗するか? */ void test_removeConfigurationSet_with_inexist_configuration_id() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを追加しておく coil::Properties configSet("id"); configSet.setProperty("key", "value"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); // 存在しないコンフィグレーションセットIDを指定した場合に、意図どおりに失敗するか? CPPUNIT_ASSERT_EQUAL(false, configAdmin.removeConfigurationSet("inexist id")); // 登録されているコンフィグレーションセットは、元どおり存在しているか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); } void test_activateConfigurationSet() { // test_getActiveConfigurationSet()で兼ねる } /*! * @brief setOnUpdate()メソッドのテスト * * - */ void test_setOnUpdate() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnUpdateCallbackMock* cdm1 = new OnUpdateCallbackMock(); OnUpdateCallbackMock* cdm2 = new OnUpdateCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnUpdate(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onUpdateMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnUpdate(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onUpdateMock("config_id"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnUpdateParam()メソッドのテスト * * - */ void test_setOnUpdateParam() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnUpdateParamCallbackMock* cdm1 = new OnUpdateParamCallbackMock(); OnUpdateParamCallbackMock* cdm2 = new OnUpdateParamCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnUpdateParam(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onUpdateParamMock("config_id", "param1"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnUpdateParam(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onUpdateParamMock("config_id", "param2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnSetConfigurationSet()メソッドのテスト * * - */ void test_setOnSetConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); coil::Properties configSet2("config_id2"); configSet2.setProperty("config_id2.key", "value2"); OnSetConfigurationSetCallbackMock* cdm1 = new OnSetConfigurationSetCallbackMock(); OnSetConfigurationSetCallbackMock* cdm2 = new OnSetConfigurationSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnSetConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onSetConfigurationSetMock(configSet); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnSetConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onSetConfigurationSetMock(configSet2); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnAddConfigurationSet()メソッドのテスト * * - */ void test_setOnAddConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); coil::Properties configSet2("config_id2"); configSet2.setProperty("config_id2.key", "value2"); OnAddConfigurationAddCallbackMock* cdm1 = new OnAddConfigurationAddCallbackMock(); OnAddConfigurationAddCallbackMock* cdm2 = new OnAddConfigurationAddCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnAddConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onAddConfigurationSetMock(configSet); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnAddConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onAddConfigurationSetMock(configSet2); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnRemoveConfigurationSet()メソッドのテスト * * - */ void test_setOnRemoveConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnRemoveConfigurationSetCallbackMock* cdm1 = new OnRemoveConfigurationSetCallbackMock(); OnRemoveConfigurationSetCallbackMock* cdm2 = new OnRemoveConfigurationSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnRemoveConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onRemoveConfigurationSetMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnRemoveConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onRemoveConfigurationSetMock("config_id2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnActivateSet()メソッドのテスト * * - */ void test_setOnActivateSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnActivateSetCallbackMock* cdm1 = new OnActivateSetCallbackMock(); OnActivateSetCallbackMock* cdm2 = new OnActivateSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnActivateSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onActivateSetMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnActivateSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onActivateSetMock("config_id2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } }; }; // namespace ConfigAdmin /* * Register test suite */ CPPUNIT_TEST_SUITE_REGISTRATION(Config::ConfigTests); CPPUNIT_TEST_SUITE_REGISTRATION(ConfigAdmin::ConfigAdminTests); #ifdef LOCAL_MAIN int main(int argc, char* argv[]) { FORMAT format = TEXT_OUT; int target = 0; std::string xsl; std::string ns; std::string fname; std::ofstream ofs; int i(1); while (i < argc) { std::string arg(argv[i]); std::string next_arg; if (i + 1 < argc) next_arg = argv[i + 1]; else next_arg = ""; if (arg == "--text") { format = TEXT_OUT; break; } if (arg == "--xml") { if (next_arg == "") { fname = argv[0]; fname += ".xml"; } else { fname = next_arg; } format = XML_OUT; ofs.open(fname.c_str()); } if ( arg == "--compiler" ) { format = COMPILER_OUT; break; } if ( arg == "--cerr" ) { target = 1; break; } if ( arg == "--xsl" ) { if (next_arg == "") xsl = "default.xsl"; else xsl = next_arg; } if ( arg == "--namespace" ) { if (next_arg == "") { std::cerr << "no namespace specified" << std::endl; exit(1); } else { xsl = next_arg; } } ++i; } CppUnit::TextUi::TestRunner runner; if ( ns.empty() ) runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest()); else runner.addTest(CppUnit::TestFactoryRegistry::getRegistry(ns).makeTest()); CppUnit::Outputter* outputter = 0; std::ostream* stream = target ? &std::cerr : &std::cout; switch ( format ) { case TEXT_OUT : outputter = new CppUnit::TextOutputter(&runner.result(),*stream); break; case XML_OUT : std::cout << "XML_OUT" << std::endl; outputter = new CppUnit::XmlOutputter(&runner.result(), ofs, "shift_jis"); static_cast<CppUnit::XmlOutputter*>(outputter)->setStyleSheet(xsl); break; case COMPILER_OUT : outputter = new CppUnit::CompilerOutputter(&runner.result(),*stream); break; } runner.setOutputter(outputter); runner.run(); return 0; // runner.run() ? 0 : 1; } #endif // MAIN #endif // ConfigAdmin_cpp
502  CPPUNIT_ASSERT_EQUAL(3.14159, var);
503 
504  // コンフィグレーションセット1を指定してupdate()し、その内容でバインド変数値が正しく更新されるか?
505  configAdmin.update("set 1");
506  CPPUNIT_ASSERT_EQUAL(1.41421356, var);
507 
508  // コンフィグレーションセット2を指定してupdate()し、その内容でバインド変数値が正しく更新されるか?
509  configAdmin.update("set 2");
510  CPPUNIT_ASSERT_EQUAL(1.7320508, var);
511  }
512 
520  {
521  coil::Properties nullProp;
522  RTC::ConfigAdmin configAdmin(nullProp);
523 
524  // コンフィグレーションセットを準備し、追加しておく
525  coil::Properties configSet("set");
526  configSet.setProperty("name", "1.41421356");
527  CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet));
528 
529  // 変数をバインドする const char* varName = "name"; double var = 0.0; const char* default_value = "3.14159"; CPPUNIT_ASSERT_EQUAL( true, configAdmin.bindParameter(varName, var, default_value)); CPPUNIT_ASSERT_EQUAL(3.14159, var); // 存在しないコンフィグレーションIDを指定してupdate()を呼出した場合に、 // バインド変数が更新されずに、そのまま保持されるか? configAdmin.update("inexist set"); CPPUNIT_ASSERT_EQUAL(3.14159, var); } /*! * @brief update()メソッド(名称指定)のテスト * * - 指定したコンフィグレーションセットの指定した名称の変数だけが、正しく更新されるか? */ void test_update_with_specified_parameter_name() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // 2つのパラメータ値を含むコンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); configSet1.setProperty("name 1", "1.41421356"); configSet1.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); configSet2.setProperty("name 1", "3.14159"); configSet2.setProperty("name 2", "2.71828"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // 2つの変数をバインドする const char* varName1 = "name 1"; double var1 = 0.0; const char* default_value1 = "2.23620679"; CPPUNIT_ASSERT_EQUAL( true, configAdmin.bindParameter(varName1, var1, default_value1)); CPPUNIT_ASSERT_EQUAL(2.23620679, var1); const char* varName2 = "name 2"; double var2 = 0.0; const char* default_value2 = "2.4494897"; CPPUNIT_ASSERT_EQUAL( true, configAdmin.bindParameter(varName2, var2, default_value2)); CPPUNIT_ASSERT_EQUAL(2.4494897, var2); // 2つのうち、片方の変数のみを名称指定してupdate()を行い、指定した変数だけが正しく更新されるか? configAdmin.update("set 2", "name 1"); CPPUNIT_ASSERT_EQUAL(3.14159, var1); CPPUNIT_ASSERT_EQUAL(2.4494897, var2); } /*! * @brief update()メソッド(アクティブコンフィグレーションセット)のテスト * * - update()呼出しにより、バインド変数がアクティブなコンフィグレーションセットの値で更新されるか? */ void test_update_by_active_configuration_set() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); configSet1.setProperty("name", "1.41421356"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); configSet2.setProperty("name", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // 変数をバインドする const char* varName = "name"; double var = 0.0; const char* default_value = "3.14159"; CPPUNIT_ASSERT_EQUAL( true, configAdmin.bindParameter(varName, var, default_value)); CPPUNIT_ASSERT_EQUAL(3.14159, var); // "set 1"のほうをアクティブにする CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 1")); // アクティブにしただけでは、まだバインド変数は更新されていないはず CPPUNIT_ASSERT_EQUAL(3.14159, var); // update()呼出しにより、バインド変数がアクティブなコンフィグレーションセットの値で更新されるか? configAdmin.update(); CPPUNIT_ASSERT_EQUAL(1.41421356, var); // "set 2"のほうをアクティブにする CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 2")); // アクティブにしただけでは、まだバインド変数は更新されていないはず CPPUNIT_ASSERT_EQUAL(1.41421356, var); // update()呼出しにより、バインド変数がアクティブなコンフィグレーションセットの値で更新されるか? configAdmin.update(); CPPUNIT_ASSERT_EQUAL(1.7320508, var); } /*! * @brief isExist()メソッドのテスト * * - バインドした変数の名称でisExist()を呼出し、真値が得られるか? * - バインドしていない名称でisExist()を呼出し、偽値が得られるか? */ void test_isExist() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // 変数をバインドする const char* varName = "name"; double var = 0.0; const char* default_value = "3.14159"; CPPUNIT_ASSERT_EQUAL( true, configAdmin.bindParameter(varName, var, default_value)); CPPUNIT_ASSERT_EQUAL(3.14159, var); // バインドした変数の名称でisExist()を呼出し、真値が得られるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.isExist("name")); // バインドしていない名称でisExist()を呼出し、偽値が得られるか? CPPUNIT_ASSERT_EQUAL(false, configAdmin.isExist("inexist name")); } /*! * @brief isChanged()メソッドのテスト * * - addConfigurationSet()呼出後は、isChanged()は真値となるか? */ void test_isChanged_on_addConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // update()を呼出してバインド変数と同期を行い、isChanged()が偽となる状態にする configAdmin.update(); CPPUNIT_ASSERT_EQUAL(false, configAdmin.isChanged()); // addConfigurationSet()を呼出す coil::Properties configSet("id"); configSet.setProperty("key", "value"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); // addConfigurationSet()呼出後は、isChanged()は真値となるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.isChanged()); } /*! * @brief isChanged()メソッドのテスト * * - removeConfigurationSet()呼出後は、isChanged()は真値となるか? */ void test_isChanged_on_removeConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // addConfigurationSet()を呼出す coil::Properties configSet("id"); configSet.setProperty("key", "value"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); // update()を呼出してバインド変数と同期を行い、isChanged()が偽となる状態にする CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("id")); configAdmin.update(); CPPUNIT_ASSERT_EQUAL(false, configAdmin.isChanged()); // removeConfigurationSet()の呼出後は、isChanged()は真値となるか? //CPPUNIT_ASSERT_EQUAL(true, configAdmin.removeConfigurationSet("id")); //CPPUNIT_ASSERT_EQUAL(true, configAdmin.isChanged()); } /*! * @brief isChanged()メソッドのテスト * * - activateConfigurationSet()呼出後は、isChanged()は真値となるか? */ void test_isChanged_on_activateConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // "set 1"のほうをアクティブにする CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 1")); // update()を行い、isChanged()が偽値の状態にしておく configAdmin.update(); CPPUNIT_ASSERT_EQUAL(false, configAdmin.isChanged()); // "set 2"のほうをアクティブにすると、isChanged()が真値となるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 2")); CPPUNIT_ASSERT_EQUAL(true, configAdmin.isChanged()); } void test_isChanged_on_setConfigurationSetValues() { // TODO 実装すること } /*! * @brief getActiveId()メソッドのテスト * * - アクティブ化したコンフィグレーションセットのIDを正しく取得できるか? */ void test_getActiveId() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // 初期状態では、アクティブIDは"default"のはず CPPUNIT_ASSERT_EQUAL(std::string("default"), std::string(configAdmin.getActiveId())); // "set 1"をアクティブにした後、意図どおりのアクティブIDを取得できるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 1")); CPPUNIT_ASSERT_EQUAL(std::string("set 1"), std::string(configAdmin.getActiveId())); // "set 2"をアクティブにした後、意図どおりのアクティブIDを取得できるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 2")); CPPUNIT_ASSERT_EQUAL(std::string("set 2"), std::string(configAdmin.getActiveId())); } /*! * @brief haveConfig()メソッドのテスト * * - 存在するコンフィグレーションセットIDを指定した場合に、haveConfig()で正しく真値を得るか? * - 存在しないコンフィグレーションセットIDを指定した場合に、haveConfig()で正しく偽値を得るか? */ void test_haveConfig() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("id"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); // 存在するコンフィグレーションセットIDを指定した場合に、haveConfig()で正しく真値を得るか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); // 存在しないコンフィグレーションセットIDを指定した場合に、haveConfig()で正しく偽値を得るか? CPPUNIT_ASSERT_EQUAL(false, configAdmin.haveConfig("inexist id")); } /*! * @brief isActive()メソッドのテスト * * - addConfigurationSet()呼出後は、isActive()は正しく偽値を得るか? * - activateConfigurationSet()でアクティブ化した後は、isActive()は正しく真値を得るか? */ void test_isActive_on_addConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // addConfigurationSet()呼出後は、isActive()は正しく偽値を得るか? coil::Properties configSet("id"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); CPPUNIT_ASSERT_EQUAL(false, configAdmin.isActive()); // activateConfigurationSet()でアクティブ化した後は、isActive()は正しく真値を得るか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("id")); CPPUNIT_ASSERT_EQUAL(true, configAdmin.isActive()); } /*! * @brief isActive()メソッドのテスト * * - removeConfigurationSet()呼出後は、isActive()は正しく偽値を得るか? */ void test_isActive_on_removeConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを追加してアクティブ化しておく coil::Properties configSet("id"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("id")); CPPUNIT_ASSERT_EQUAL(true, configAdmin.isActive()); // 登録されているコンフィグレーションセットをremoveConfigurationSet()で解除した場合、 // isActive()は正しく偽値を得るか? //CPPUNIT_ASSERT_EQUAL(true, configAdmin.removeConfigurationSet("id")); //CPPUNIT_ASSERT_EQUAL(false, configAdmin.isActive()); } /*! * @brief isActive()メソッドのテスト * * - activateConfigurationSet()でアクティブ化した後は、isActive()は正しく真値を得るか? */ void test_isActive_on_activateConfigurationSet() { // test_isActive_on_addConfigurationSet()で兼用 } void test_isActive_on_setConfigurationSetValues() { // TODO 実装すること } /*! * @brief getConfigurationSets()メソッドのテスト * * - 登録されている全てのコンフィグレーションセットを正しく取得できるか? */ void test_getConfigurationSets() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // 2つのパラメータ値を含むコンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); configSet1.setProperty("name 1", "1.41421356"); configSet1.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); configSet2.setProperty("name 1", "3.14159"); configSet2.setProperty("name 2", "2.71828"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // getConfigurationSets()で登録されている全てのコンフィグレーションセットを取得し、 // 登録したものと一致していることを確認する std::vector<coil::Properties*> expectedConfigSets; expectedConfigSets.push_back(&configSet1); expectedConfigSets.push_back(&configSet2); const std::vector<coil::Properties*>& configSets = configAdmin.getConfigurationSets(); CPPUNIT_ASSERT_EQUAL( std::string("1.41421356"), getPropertiesBy("set 1", configSets)->getProperty("name 1")); CPPUNIT_ASSERT_EQUAL( std::string("1.7320508"), getPropertiesBy("set 1", configSets)->getProperty("name 2")); CPPUNIT_ASSERT_EQUAL( std::string("3.14159"), getPropertiesBy("set 2", configSets)->getProperty("name 1")); CPPUNIT_ASSERT_EQUAL( std::string("2.71828"), getPropertiesBy("set 2", configSets)->getProperty("name 2")); } /*! * addConfigurationSet()メソッドとgetConfigurationSet()メソッドのテスト * * - addConfigurationSet()で、コンフィグレーションセットを追加できるか? * - getConfigurationSet()で、追加したコンフィグレーションセットを正しく取得できるか? */ void test_addConfigurationSet_and_getConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // addConfigurationSet()で、コンフィグレーションセットを追加できるか? coil::Properties configSet("id"); configSet.setProperty("key", "value"); configAdmin.addConfigurationSet(configSet); // getConfigurationSet()で、追加したコンフィグレーションセットを正しく取得できるか? const coil::Properties& configSetRet = configAdmin.getConfigurationSet("id"); CPPUNIT_ASSERT_EQUAL(std::string("value"), configSetRet.getProperty("key")); } /*! * setConfigurationSetValues()メソッドのテスト * * - 指定したプロパティが、正しく指定したコンフィグレーションセットに追加されるか? */ void test_setConfigurationSetValues() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); coil::Properties configSet1("id"); configSet1.setProperty("name 1", "1.41421356"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); // 登録済みのコンフィグレーションセットに対して、プロパティを追加する coil::Properties configSet2("id"); configSet2.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.setConfigurationSetValues(configSet2)); // 当該コンフィグレーションセットを取得して、プロパティが意図どおり追加されていることを確認する const coil::Properties& configSetRet = configAdmin.getConfigurationSet("id"); CPPUNIT_ASSERT_EQUAL(std::string("1.41421356"), configSetRet.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string("1.7320508"), configSetRet.getProperty("name 2")); } /*! * @brief setConfigurationSetValues()メソッドのテスト * * - 存在しないコンフィグレーションセットに対してプロパティ追加を試みて、意図どおり失敗するか? * - 失敗後に、登録済みのコンフィグレーションセットが影響を受けていないか? */ void test_setConfigurationSetValues_with_inexist_configuration_set() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); coil::Properties configSet1("id"); configSet1.setProperty("name 1", "1.41421356"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); // 存在しないコンフィグレーションセットに対してプロパティ追加を試みて、意図どおり失敗するか? coil::Properties configSet2("inexist id"); configSet2.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.setConfigurationSetValues(configSet2)); // 失敗後に、登録済みのコンフィグレーションセットが影響を受けていないか? const coil::Properties& configSetRet = configAdmin.getConfigurationSet("id"); CPPUNIT_ASSERT_EQUAL(std::string("1.41421356"), configSetRet.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string(""), configSetRet.getProperty("name 2")); } /*! * @brief getActiveConfigurationSet()メソッドのテスト * * - アクティブコンフィグレーションセットを正しく取得できるか? */ void test_getActiveConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); configSet1.setProperty("name 1", "1.41421356"); configSet1.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); configSet2.setProperty("name 1", "3.14159"); configSet2.setProperty("name 2", "2.71828"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // "set 1"をアクティブ化した後、アクティブコンフィグレーションセットとして正しく取得できるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 1")); const coil::Properties& activeConfigSet1 = configAdmin.getActiveConfigurationSet(); CPPUNIT_ASSERT_EQUAL(std::string("1.41421356"), activeConfigSet1.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string("1.7320508"), activeConfigSet1.getProperty("name 2")); // "set 2"をアクティブ化した後、アクティブコンフィグレーションセットとして正しく取得できるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 2")); const coil::Properties& activeConfigSet2 = configAdmin.getActiveConfigurationSet(); CPPUNIT_ASSERT_EQUAL(std::string("3.14159"), activeConfigSet2.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string("2.71828"), activeConfigSet2.getProperty("name 2")); } /*! * @brief removeConfigurationSet()のテスト * * - 登録されているコンフィグレーションセットを正しく登録解除できるか? */ void test_removeConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを追加しておく coil::Properties configSet("id"); configSet.setProperty("key", "value"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); // いったん登録したコンフィグレーションセットを登録解除する CPPUNIT_ASSERT_EQUAL(true, configAdmin.removeConfigurationSet("id")); // 当該コンフィグレーションセットが存在しないことを確認する CPPUNIT_ASSERT_EQUAL(false, configAdmin.haveConfig("id")); } /*! * @brief removeConfigurationSet()のテスト * * - 存在しないコンフィグレーションセットIDを指定した場合に、意図どおりに失敗するか? */ void test_removeConfigurationSet_with_inexist_configuration_id() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを追加しておく coil::Properties configSet("id"); configSet.setProperty("key", "value"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); // 存在しないコンフィグレーションセットIDを指定した場合に、意図どおりに失敗するか? CPPUNIT_ASSERT_EQUAL(false, configAdmin.removeConfigurationSet("inexist id")); // 登録されているコンフィグレーションセットは、元どおり存在しているか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); } void test_activateConfigurationSet() { // test_getActiveConfigurationSet()で兼ねる } /*! * @brief setOnUpdate()メソッドのテスト * * - */ void test_setOnUpdate() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnUpdateCallbackMock* cdm1 = new OnUpdateCallbackMock(); OnUpdateCallbackMock* cdm2 = new OnUpdateCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnUpdate(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onUpdateMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnUpdate(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onUpdateMock("config_id"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnUpdateParam()メソッドのテスト * * - */ void test_setOnUpdateParam() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnUpdateParamCallbackMock* cdm1 = new OnUpdateParamCallbackMock(); OnUpdateParamCallbackMock* cdm2 = new OnUpdateParamCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnUpdateParam(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onUpdateParamMock("config_id", "param1"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnUpdateParam(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onUpdateParamMock("config_id", "param2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnSetConfigurationSet()メソッドのテスト * * - */ void test_setOnSetConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); coil::Properties configSet2("config_id2"); configSet2.setProperty("config_id2.key", "value2"); OnSetConfigurationSetCallbackMock* cdm1 = new OnSetConfigurationSetCallbackMock(); OnSetConfigurationSetCallbackMock* cdm2 = new OnSetConfigurationSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnSetConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onSetConfigurationSetMock(configSet); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnSetConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onSetConfigurationSetMock(configSet2); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnAddConfigurationSet()メソッドのテスト * * - */ void test_setOnAddConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); coil::Properties configSet2("config_id2"); configSet2.setProperty("config_id2.key", "value2"); OnAddConfigurationAddCallbackMock* cdm1 = new OnAddConfigurationAddCallbackMock(); OnAddConfigurationAddCallbackMock* cdm2 = new OnAddConfigurationAddCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnAddConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onAddConfigurationSetMock(configSet); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnAddConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onAddConfigurationSetMock(configSet2); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnRemoveConfigurationSet()メソッドのテスト * * - */ void test_setOnRemoveConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnRemoveConfigurationSetCallbackMock* cdm1 = new OnRemoveConfigurationSetCallbackMock(); OnRemoveConfigurationSetCallbackMock* cdm2 = new OnRemoveConfigurationSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnRemoveConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onRemoveConfigurationSetMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnRemoveConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onRemoveConfigurationSetMock("config_id2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnActivateSet()メソッドのテスト * * - */ void test_setOnActivateSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnActivateSetCallbackMock* cdm1 = new OnActivateSetCallbackMock(); OnActivateSetCallbackMock* cdm2 = new OnActivateSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnActivateSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onActivateSetMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnActivateSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onActivateSetMock("config_id2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } }; }; // namespace ConfigAdmin /* * Register test suite */ CPPUNIT_TEST_SUITE_REGISTRATION(Config::ConfigTests); CPPUNIT_TEST_SUITE_REGISTRATION(ConfigAdmin::ConfigAdminTests); #ifdef LOCAL_MAIN int main(int argc, char* argv[]) { FORMAT format = TEXT_OUT; int target = 0; std::string xsl; std::string ns; std::string fname; std::ofstream ofs; int i(1); while (i < argc) { std::string arg(argv[i]); std::string next_arg; if (i + 1 < argc) next_arg = argv[i + 1]; else next_arg = ""; if (arg == "--text") { format = TEXT_OUT; break; } if (arg == "--xml") { if (next_arg == "") { fname = argv[0]; fname += ".xml"; } else { fname = next_arg; } format = XML_OUT; ofs.open(fname.c_str()); } if ( arg == "--compiler" ) { format = COMPILER_OUT; break; } if ( arg == "--cerr" ) { target = 1; break; } if ( arg == "--xsl" ) { if (next_arg == "") xsl = "default.xsl"; else xsl = next_arg; } if ( arg == "--namespace" ) { if (next_arg == "") { std::cerr << "no namespace specified" << std::endl; exit(1); } else { xsl = next_arg; } } ++i; } CppUnit::TextUi::TestRunner runner; if ( ns.empty() ) runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest()); else runner.addTest(CppUnit::TestFactoryRegistry::getRegistry(ns).makeTest()); CppUnit::Outputter* outputter = 0; std::ostream* stream = target ? &std::cerr : &std::cout; switch ( format ) { case TEXT_OUT : outputter = new CppUnit::TextOutputter(&runner.result(),*stream); break; case XML_OUT : std::cout << "XML_OUT" << std::endl; outputter = new CppUnit::XmlOutputter(&runner.result(), ofs, "shift_jis"); static_cast<CppUnit::XmlOutputter*>(outputter)->setStyleSheet(xsl); break; case COMPILER_OUT : outputter = new CppUnit::CompilerOutputter(&runner.result(),*stream); break; } runner.setOutputter(outputter); runner.run(); return 0; // runner.run() ? 0 : 1; } #endif // MAIN #endif // ConfigAdmin_cpp
530  const char* varName = "name";
531  double var = 0.0;
532  const char* default_value = "3.14159";
533  CPPUNIT_ASSERT_EQUAL(
534  true, configAdmin.bindParameter(varName, var, default_value));
535  CPPUNIT_ASSERT_EQUAL(3.14159, var);
536 
537  // 存在しないコンフィグレーションIDを指定してupdate()を呼出した場合に、
538  // バインド変数が更新されずに、そのまま保持されるか?
539  configAdmin.update("inexist set");
540  CPPUNIT_ASSERT_EQUAL(3.14159, var);
541  }
542 
549  {
550  coil::Properties nullProp;
551  RTC::ConfigAdmin configAdmin(nullProp);
552 
553  // 2つのパラメータ値を含むコンフィグレーションセットを準備し、追加しておく
554  coil::Properties configSet1("set 1");
555  configSet1.setProperty("name 1", "1.41421356");
556  configSet1.setProperty("name 2", "1.7320508");
557  CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1));
558 
559  coil::Properties configSet2("set 2");
560  configSet2.setProperty("name 1", "3.14159");
561  configSet2.setProperty("name 2", "2.71828");
562  CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2));
563 
564  // 2つの変数をバインドする const char* varName1 = "name 1"; double var1 = 0.0; const char* default_value1 = "2.23620679"; CPPUNIT_ASSERT_EQUAL( true, configAdmin.bindParameter(varName1, var1, default_value1)); CPPUNIT_ASSERT_EQUAL(2.23620679, var1); const char* varName2 = "name 2"; double var2 = 0.0; const char* default_value2 = "2.4494897"; CPPUNIT_ASSERT_EQUAL( true, configAdmin.bindParameter(varName2, var2, default_value2)); CPPUNIT_ASSERT_EQUAL(2.4494897, var2); // 2つのうち、片方の変数のみを名称指定してupdate()を行い、指定した変数だけが正しく更新されるか? configAdmin.update("set 2", "name 1"); CPPUNIT_ASSERT_EQUAL(3.14159, var1); CPPUNIT_ASSERT_EQUAL(2.4494897, var2); } /*! * @brief update()メソッド(アクティブコンフィグレーションセット)のテスト * * - update()呼出しにより、バインド変数がアクティブなコンフィグレーションセットの値で更新されるか? */ void test_update_by_active_configuration_set() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); configSet1.setProperty("name", "1.41421356"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); configSet2.setProperty("name", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // 変数をバインドする const char* varName = "name"; double var = 0.0; const char* default_value = "3.14159"; CPPUNIT_ASSERT_EQUAL( true, configAdmin.bindParameter(varName, var, default_value)); CPPUNIT_ASSERT_EQUAL(3.14159, var); // "set 1"のほうをアクティブにする CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 1")); // アクティブにしただけでは、まだバインド変数は更新されていないはず CPPUNIT_ASSERT_EQUAL(3.14159, var); // update()呼出しにより、バインド変数がアクティブなコンフィグレーションセットの値で更新されるか? configAdmin.update(); CPPUNIT_ASSERT_EQUAL(1.41421356, var); // "set 2"のほうをアクティブにする CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 2")); // アクティブにしただけでは、まだバインド変数は更新されていないはず CPPUNIT_ASSERT_EQUAL(1.41421356, var); // update()呼出しにより、バインド変数がアクティブなコンフィグレーションセットの値で更新されるか? configAdmin.update(); CPPUNIT_ASSERT_EQUAL(1.7320508, var); } /*! * @brief isExist()メソッドのテスト * * - バインドした変数の名称でisExist()を呼出し、真値が得られるか? * - バインドしていない名称でisExist()を呼出し、偽値が得られるか? */ void test_isExist() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // 変数をバインドする const char* varName = "name"; double var = 0.0; const char* default_value = "3.14159"; CPPUNIT_ASSERT_EQUAL( true, configAdmin.bindParameter(varName, var, default_value)); CPPUNIT_ASSERT_EQUAL(3.14159, var); // バインドした変数の名称でisExist()を呼出し、真値が得られるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.isExist("name")); // バインドしていない名称でisExist()を呼出し、偽値が得られるか? CPPUNIT_ASSERT_EQUAL(false, configAdmin.isExist("inexist name")); } /*! * @brief isChanged()メソッドのテスト * * - addConfigurationSet()呼出後は、isChanged()は真値となるか? */ void test_isChanged_on_addConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // update()を呼出してバインド変数と同期を行い、isChanged()が偽となる状態にする configAdmin.update(); CPPUNIT_ASSERT_EQUAL(false, configAdmin.isChanged()); // addConfigurationSet()を呼出す coil::Properties configSet("id"); configSet.setProperty("key", "value"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); // addConfigurationSet()呼出後は、isChanged()は真値となるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.isChanged()); } /*! * @brief isChanged()メソッドのテスト * * - removeConfigurationSet()呼出後は、isChanged()は真値となるか? */ void test_isChanged_on_removeConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // addConfigurationSet()を呼出す coil::Properties configSet("id"); configSet.setProperty("key", "value"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); // update()を呼出してバインド変数と同期を行い、isChanged()が偽となる状態にする CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("id")); configAdmin.update(); CPPUNIT_ASSERT_EQUAL(false, configAdmin.isChanged()); // removeConfigurationSet()の呼出後は、isChanged()は真値となるか? //CPPUNIT_ASSERT_EQUAL(true, configAdmin.removeConfigurationSet("id")); //CPPUNIT_ASSERT_EQUAL(true, configAdmin.isChanged()); } /*! * @brief isChanged()メソッドのテスト * * - activateConfigurationSet()呼出後は、isChanged()は真値となるか? */ void test_isChanged_on_activateConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // "set 1"のほうをアクティブにする CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 1")); // update()を行い、isChanged()が偽値の状態にしておく configAdmin.update(); CPPUNIT_ASSERT_EQUAL(false, configAdmin.isChanged()); // "set 2"のほうをアクティブにすると、isChanged()が真値となるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 2")); CPPUNIT_ASSERT_EQUAL(true, configAdmin.isChanged()); } void test_isChanged_on_setConfigurationSetValues() { // TODO 実装すること } /*! * @brief getActiveId()メソッドのテスト * * - アクティブ化したコンフィグレーションセットのIDを正しく取得できるか? */ void test_getActiveId() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // 初期状態では、アクティブIDは"default"のはず CPPUNIT_ASSERT_EQUAL(std::string("default"), std::string(configAdmin.getActiveId())); // "set 1"をアクティブにした後、意図どおりのアクティブIDを取得できるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 1")); CPPUNIT_ASSERT_EQUAL(std::string("set 1"), std::string(configAdmin.getActiveId())); // "set 2"をアクティブにした後、意図どおりのアクティブIDを取得できるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 2")); CPPUNIT_ASSERT_EQUAL(std::string("set 2"), std::string(configAdmin.getActiveId())); } /*! * @brief haveConfig()メソッドのテスト * * - 存在するコンフィグレーションセットIDを指定した場合に、haveConfig()で正しく真値を得るか? * - 存在しないコンフィグレーションセットIDを指定した場合に、haveConfig()で正しく偽値を得るか? */ void test_haveConfig() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("id"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); // 存在するコンフィグレーションセットIDを指定した場合に、haveConfig()で正しく真値を得るか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); // 存在しないコンフィグレーションセットIDを指定した場合に、haveConfig()で正しく偽値を得るか? CPPUNIT_ASSERT_EQUAL(false, configAdmin.haveConfig("inexist id")); } /*! * @brief isActive()メソッドのテスト * * - addConfigurationSet()呼出後は、isActive()は正しく偽値を得るか? * - activateConfigurationSet()でアクティブ化した後は、isActive()は正しく真値を得るか? */ void test_isActive_on_addConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // addConfigurationSet()呼出後は、isActive()は正しく偽値を得るか? coil::Properties configSet("id"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); CPPUNIT_ASSERT_EQUAL(false, configAdmin.isActive()); // activateConfigurationSet()でアクティブ化した後は、isActive()は正しく真値を得るか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("id")); CPPUNIT_ASSERT_EQUAL(true, configAdmin.isActive()); } /*! * @brief isActive()メソッドのテスト * * - removeConfigurationSet()呼出後は、isActive()は正しく偽値を得るか? */ void test_isActive_on_removeConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを追加してアクティブ化しておく coil::Properties configSet("id"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("id")); CPPUNIT_ASSERT_EQUAL(true, configAdmin.isActive()); // 登録されているコンフィグレーションセットをremoveConfigurationSet()で解除した場合、 // isActive()は正しく偽値を得るか? //CPPUNIT_ASSERT_EQUAL(true, configAdmin.removeConfigurationSet("id")); //CPPUNIT_ASSERT_EQUAL(false, configAdmin.isActive()); } /*! * @brief isActive()メソッドのテスト * * - activateConfigurationSet()でアクティブ化した後は、isActive()は正しく真値を得るか? */ void test_isActive_on_activateConfigurationSet() { // test_isActive_on_addConfigurationSet()で兼用 } void test_isActive_on_setConfigurationSetValues() { // TODO 実装すること } /*! * @brief getConfigurationSets()メソッドのテスト * * - 登録されている全てのコンフィグレーションセットを正しく取得できるか? */ void test_getConfigurationSets() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // 2つのパラメータ値を含むコンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); configSet1.setProperty("name 1", "1.41421356"); configSet1.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); configSet2.setProperty("name 1", "3.14159"); configSet2.setProperty("name 2", "2.71828"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // getConfigurationSets()で登録されている全てのコンフィグレーションセットを取得し、 // 登録したものと一致していることを確認する std::vector<coil::Properties*> expectedConfigSets; expectedConfigSets.push_back(&configSet1); expectedConfigSets.push_back(&configSet2); const std::vector<coil::Properties*>& configSets = configAdmin.getConfigurationSets(); CPPUNIT_ASSERT_EQUAL( std::string("1.41421356"), getPropertiesBy("set 1", configSets)->getProperty("name 1")); CPPUNIT_ASSERT_EQUAL( std::string("1.7320508"), getPropertiesBy("set 1", configSets)->getProperty("name 2")); CPPUNIT_ASSERT_EQUAL( std::string("3.14159"), getPropertiesBy("set 2", configSets)->getProperty("name 1")); CPPUNIT_ASSERT_EQUAL( std::string("2.71828"), getPropertiesBy("set 2", configSets)->getProperty("name 2")); } /*! * addConfigurationSet()メソッドとgetConfigurationSet()メソッドのテスト * * - addConfigurationSet()で、コンフィグレーションセットを追加できるか? * - getConfigurationSet()で、追加したコンフィグレーションセットを正しく取得できるか? */ void test_addConfigurationSet_and_getConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // addConfigurationSet()で、コンフィグレーションセットを追加できるか? coil::Properties configSet("id"); configSet.setProperty("key", "value"); configAdmin.addConfigurationSet(configSet); // getConfigurationSet()で、追加したコンフィグレーションセットを正しく取得できるか? const coil::Properties& configSetRet = configAdmin.getConfigurationSet("id"); CPPUNIT_ASSERT_EQUAL(std::string("value"), configSetRet.getProperty("key")); } /*! * setConfigurationSetValues()メソッドのテスト * * - 指定したプロパティが、正しく指定したコンフィグレーションセットに追加されるか? */ void test_setConfigurationSetValues() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); coil::Properties configSet1("id"); configSet1.setProperty("name 1", "1.41421356"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); // 登録済みのコンフィグレーションセットに対して、プロパティを追加する coil::Properties configSet2("id"); configSet2.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.setConfigurationSetValues(configSet2)); // 当該コンフィグレーションセットを取得して、プロパティが意図どおり追加されていることを確認する const coil::Properties& configSetRet = configAdmin.getConfigurationSet("id"); CPPUNIT_ASSERT_EQUAL(std::string("1.41421356"), configSetRet.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string("1.7320508"), configSetRet.getProperty("name 2")); } /*! * @brief setConfigurationSetValues()メソッドのテスト * * - 存在しないコンフィグレーションセットに対してプロパティ追加を試みて、意図どおり失敗するか? * - 失敗後に、登録済みのコンフィグレーションセットが影響を受けていないか? */ void test_setConfigurationSetValues_with_inexist_configuration_set() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); coil::Properties configSet1("id"); configSet1.setProperty("name 1", "1.41421356"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); // 存在しないコンフィグレーションセットに対してプロパティ追加を試みて、意図どおり失敗するか? coil::Properties configSet2("inexist id"); configSet2.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.setConfigurationSetValues(configSet2)); // 失敗後に、登録済みのコンフィグレーションセットが影響を受けていないか? const coil::Properties& configSetRet = configAdmin.getConfigurationSet("id"); CPPUNIT_ASSERT_EQUAL(std::string("1.41421356"), configSetRet.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string(""), configSetRet.getProperty("name 2")); } /*! * @brief getActiveConfigurationSet()メソッドのテスト * * - アクティブコンフィグレーションセットを正しく取得できるか? */ void test_getActiveConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); configSet1.setProperty("name 1", "1.41421356"); configSet1.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); configSet2.setProperty("name 1", "3.14159"); configSet2.setProperty("name 2", "2.71828"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // "set 1"をアクティブ化した後、アクティブコンフィグレーションセットとして正しく取得できるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 1")); const coil::Properties& activeConfigSet1 = configAdmin.getActiveConfigurationSet(); CPPUNIT_ASSERT_EQUAL(std::string("1.41421356"), activeConfigSet1.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string("1.7320508"), activeConfigSet1.getProperty("name 2")); // "set 2"をアクティブ化した後、アクティブコンフィグレーションセットとして正しく取得できるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 2")); const coil::Properties& activeConfigSet2 = configAdmin.getActiveConfigurationSet(); CPPUNIT_ASSERT_EQUAL(std::string("3.14159"), activeConfigSet2.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string("2.71828"), activeConfigSet2.getProperty("name 2")); } /*! * @brief removeConfigurationSet()のテスト * * - 登録されているコンフィグレーションセットを正しく登録解除できるか? */ void test_removeConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを追加しておく coil::Properties configSet("id"); configSet.setProperty("key", "value"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); // いったん登録したコンフィグレーションセットを登録解除する CPPUNIT_ASSERT_EQUAL(true, configAdmin.removeConfigurationSet("id")); // 当該コンフィグレーションセットが存在しないことを確認する CPPUNIT_ASSERT_EQUAL(false, configAdmin.haveConfig("id")); } /*! * @brief removeConfigurationSet()のテスト * * - 存在しないコンフィグレーションセットIDを指定した場合に、意図どおりに失敗するか? */ void test_removeConfigurationSet_with_inexist_configuration_id() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを追加しておく coil::Properties configSet("id"); configSet.setProperty("key", "value"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); // 存在しないコンフィグレーションセットIDを指定した場合に、意図どおりに失敗するか? CPPUNIT_ASSERT_EQUAL(false, configAdmin.removeConfigurationSet("inexist id")); // 登録されているコンフィグレーションセットは、元どおり存在しているか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); } void test_activateConfigurationSet() { // test_getActiveConfigurationSet()で兼ねる } /*! * @brief setOnUpdate()メソッドのテスト * * - */ void test_setOnUpdate() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnUpdateCallbackMock* cdm1 = new OnUpdateCallbackMock(); OnUpdateCallbackMock* cdm2 = new OnUpdateCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnUpdate(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onUpdateMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnUpdate(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onUpdateMock("config_id"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnUpdateParam()メソッドのテスト * * - */ void test_setOnUpdateParam() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnUpdateParamCallbackMock* cdm1 = new OnUpdateParamCallbackMock(); OnUpdateParamCallbackMock* cdm2 = new OnUpdateParamCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnUpdateParam(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onUpdateParamMock("config_id", "param1"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnUpdateParam(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onUpdateParamMock("config_id", "param2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnSetConfigurationSet()メソッドのテスト * * - */ void test_setOnSetConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); coil::Properties configSet2("config_id2"); configSet2.setProperty("config_id2.key", "value2"); OnSetConfigurationSetCallbackMock* cdm1 = new OnSetConfigurationSetCallbackMock(); OnSetConfigurationSetCallbackMock* cdm2 = new OnSetConfigurationSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnSetConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onSetConfigurationSetMock(configSet); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnSetConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onSetConfigurationSetMock(configSet2); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnAddConfigurationSet()メソッドのテスト * * - */ void test_setOnAddConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); coil::Properties configSet2("config_id2"); configSet2.setProperty("config_id2.key", "value2"); OnAddConfigurationAddCallbackMock* cdm1 = new OnAddConfigurationAddCallbackMock(); OnAddConfigurationAddCallbackMock* cdm2 = new OnAddConfigurationAddCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnAddConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onAddConfigurationSetMock(configSet); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnAddConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onAddConfigurationSetMock(configSet2); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnRemoveConfigurationSet()メソッドのテスト * * - */ void test_setOnRemoveConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnRemoveConfigurationSetCallbackMock* cdm1 = new OnRemoveConfigurationSetCallbackMock(); OnRemoveConfigurationSetCallbackMock* cdm2 = new OnRemoveConfigurationSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnRemoveConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onRemoveConfigurationSetMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnRemoveConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onRemoveConfigurationSetMock("config_id2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnActivateSet()メソッドのテスト * * - */ void test_setOnActivateSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnActivateSetCallbackMock* cdm1 = new OnActivateSetCallbackMock(); OnActivateSetCallbackMock* cdm2 = new OnActivateSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnActivateSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onActivateSetMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnActivateSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onActivateSetMock("config_id2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } }; }; // namespace ConfigAdmin /* * Register test suite */ CPPUNIT_TEST_SUITE_REGISTRATION(Config::ConfigTests); CPPUNIT_TEST_SUITE_REGISTRATION(ConfigAdmin::ConfigAdminTests); #ifdef LOCAL_MAIN int main(int argc, char* argv[]) { FORMAT format = TEXT_OUT; int target = 0; std::string xsl; std::string ns; std::string fname; std::ofstream ofs; int i(1); while (i < argc) { std::string arg(argv[i]); std::string next_arg; if (i + 1 < argc) next_arg = argv[i + 1]; else next_arg = ""; if (arg == "--text") { format = TEXT_OUT; break; } if (arg == "--xml") { if (next_arg == "") { fname = argv[0]; fname += ".xml"; } else { fname = next_arg; } format = XML_OUT; ofs.open(fname.c_str()); } if ( arg == "--compiler" ) { format = COMPILER_OUT; break; } if ( arg == "--cerr" ) { target = 1; break; } if ( arg == "--xsl" ) { if (next_arg == "") xsl = "default.xsl"; else xsl = next_arg; } if ( arg == "--namespace" ) { if (next_arg == "") { std::cerr << "no namespace specified" << std::endl; exit(1); } else { xsl = next_arg; } } ++i; } CppUnit::TextUi::TestRunner runner; if ( ns.empty() ) runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest()); else runner.addTest(CppUnit::TestFactoryRegistry::getRegistry(ns).makeTest()); CppUnit::Outputter* outputter = 0; std::ostream* stream = target ? &std::cerr : &std::cout; switch ( format ) { case TEXT_OUT : outputter = new CppUnit::TextOutputter(&runner.result(),*stream); break; case XML_OUT : std::cout << "XML_OUT" << std::endl; outputter = new CppUnit::XmlOutputter(&runner.result(), ofs, "shift_jis"); static_cast<CppUnit::XmlOutputter*>(outputter)->setStyleSheet(xsl); break; case COMPILER_OUT : outputter = new CppUnit::CompilerOutputter(&runner.result(),*stream); break; } runner.setOutputter(outputter); runner.run(); return 0; // runner.run() ? 0 : 1; } #endif // MAIN #endif // ConfigAdmin_cpp
565  const char* varName1 = "name 1";
566  double var1 = 0.0;
567  const char* default_value1 = "2.23620679";
568  CPPUNIT_ASSERT_EQUAL(
569  true, configAdmin.bindParameter(varName1, var1, default_value1));
570  CPPUNIT_ASSERT_EQUAL(2.23620679, var1);
571 
572  const char* varName2 = "name 2";
573  double var2 = 0.0;
574  const char* default_value2 = "2.4494897";
575  CPPUNIT_ASSERT_EQUAL(
576  true, configAdmin.bindParameter(varName2, var2, default_value2));
577  CPPUNIT_ASSERT_EQUAL(2.4494897, var2);
578 
579  // 2つのうち、片方の変数のみを名称指定してupdate()を行い、指定した変数だけが正しく更新されるか?
580  configAdmin.update("set 2", "name 1");
581  CPPUNIT_ASSERT_EQUAL(3.14159, var1);
582  CPPUNIT_ASSERT_EQUAL(2.4494897, var2);
583  }
584 
591  {
592  coil::Properties nullProp;
593  RTC::ConfigAdmin configAdmin(nullProp);
594 
595  // コンフィグレーションセットを準備し、追加しておく
596  coil::Properties configSet1("set 1");
597  configSet1.setProperty("name", "1.41421356");
598  CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1));
599 
600  coil::Properties configSet2("set 2");
601  configSet2.setProperty("name", "1.7320508");
602  CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2));
603 
604  // 変数をバインドする const char* varName = "name"; double var = 0.0; const char* default_value = "3.14159"; CPPUNIT_ASSERT_EQUAL( true, configAdmin.bindParameter(varName, var, default_value)); CPPUNIT_ASSERT_EQUAL(3.14159, var); // "set 1"のほうをアクティブにする CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 1")); // アクティブにしただけでは、まだバインド変数は更新されていないはず CPPUNIT_ASSERT_EQUAL(3.14159, var); // update()呼出しにより、バインド変数がアクティブなコンフィグレーションセットの値で更新されるか? configAdmin.update(); CPPUNIT_ASSERT_EQUAL(1.41421356, var); // "set 2"のほうをアクティブにする CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 2")); // アクティブにしただけでは、まだバインド変数は更新されていないはず CPPUNIT_ASSERT_EQUAL(1.41421356, var); // update()呼出しにより、バインド変数がアクティブなコンフィグレーションセットの値で更新されるか? configAdmin.update(); CPPUNIT_ASSERT_EQUAL(1.7320508, var); } /*! * @brief isExist()メソッドのテスト * * - バインドした変数の名称でisExist()を呼出し、真値が得られるか? * - バインドしていない名称でisExist()を呼出し、偽値が得られるか? */ void test_isExist() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // 変数をバインドする const char* varName = "name"; double var = 0.0; const char* default_value = "3.14159"; CPPUNIT_ASSERT_EQUAL( true, configAdmin.bindParameter(varName, var, default_value)); CPPUNIT_ASSERT_EQUAL(3.14159, var); // バインドした変数の名称でisExist()を呼出し、真値が得られるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.isExist("name")); // バインドしていない名称でisExist()を呼出し、偽値が得られるか? CPPUNIT_ASSERT_EQUAL(false, configAdmin.isExist("inexist name")); } /*! * @brief isChanged()メソッドのテスト * * - addConfigurationSet()呼出後は、isChanged()は真値となるか? */ void test_isChanged_on_addConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // update()を呼出してバインド変数と同期を行い、isChanged()が偽となる状態にする configAdmin.update(); CPPUNIT_ASSERT_EQUAL(false, configAdmin.isChanged()); // addConfigurationSet()を呼出す coil::Properties configSet("id"); configSet.setProperty("key", "value"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); // addConfigurationSet()呼出後は、isChanged()は真値となるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.isChanged()); } /*! * @brief isChanged()メソッドのテスト * * - removeConfigurationSet()呼出後は、isChanged()は真値となるか? */ void test_isChanged_on_removeConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // addConfigurationSet()を呼出す coil::Properties configSet("id"); configSet.setProperty("key", "value"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); // update()を呼出してバインド変数と同期を行い、isChanged()が偽となる状態にする CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("id")); configAdmin.update(); CPPUNIT_ASSERT_EQUAL(false, configAdmin.isChanged()); // removeConfigurationSet()の呼出後は、isChanged()は真値となるか? //CPPUNIT_ASSERT_EQUAL(true, configAdmin.removeConfigurationSet("id")); //CPPUNIT_ASSERT_EQUAL(true, configAdmin.isChanged()); } /*! * @brief isChanged()メソッドのテスト * * - activateConfigurationSet()呼出後は、isChanged()は真値となるか? */ void test_isChanged_on_activateConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // "set 1"のほうをアクティブにする CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 1")); // update()を行い、isChanged()が偽値の状態にしておく configAdmin.update(); CPPUNIT_ASSERT_EQUAL(false, configAdmin.isChanged()); // "set 2"のほうをアクティブにすると、isChanged()が真値となるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 2")); CPPUNIT_ASSERT_EQUAL(true, configAdmin.isChanged()); } void test_isChanged_on_setConfigurationSetValues() { // TODO 実装すること } /*! * @brief getActiveId()メソッドのテスト * * - アクティブ化したコンフィグレーションセットのIDを正しく取得できるか? */ void test_getActiveId() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // 初期状態では、アクティブIDは"default"のはず CPPUNIT_ASSERT_EQUAL(std::string("default"), std::string(configAdmin.getActiveId())); // "set 1"をアクティブにした後、意図どおりのアクティブIDを取得できるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 1")); CPPUNIT_ASSERT_EQUAL(std::string("set 1"), std::string(configAdmin.getActiveId())); // "set 2"をアクティブにした後、意図どおりのアクティブIDを取得できるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 2")); CPPUNIT_ASSERT_EQUAL(std::string("set 2"), std::string(configAdmin.getActiveId())); } /*! * @brief haveConfig()メソッドのテスト * * - 存在するコンフィグレーションセットIDを指定した場合に、haveConfig()で正しく真値を得るか? * - 存在しないコンフィグレーションセットIDを指定した場合に、haveConfig()で正しく偽値を得るか? */ void test_haveConfig() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("id"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); // 存在するコンフィグレーションセットIDを指定した場合に、haveConfig()で正しく真値を得るか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); // 存在しないコンフィグレーションセットIDを指定した場合に、haveConfig()で正しく偽値を得るか? CPPUNIT_ASSERT_EQUAL(false, configAdmin.haveConfig("inexist id")); } /*! * @brief isActive()メソッドのテスト * * - addConfigurationSet()呼出後は、isActive()は正しく偽値を得るか? * - activateConfigurationSet()でアクティブ化した後は、isActive()は正しく真値を得るか? */ void test_isActive_on_addConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // addConfigurationSet()呼出後は、isActive()は正しく偽値を得るか? coil::Properties configSet("id"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); CPPUNIT_ASSERT_EQUAL(false, configAdmin.isActive()); // activateConfigurationSet()でアクティブ化した後は、isActive()は正しく真値を得るか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("id")); CPPUNIT_ASSERT_EQUAL(true, configAdmin.isActive()); } /*! * @brief isActive()メソッドのテスト * * - removeConfigurationSet()呼出後は、isActive()は正しく偽値を得るか? */ void test_isActive_on_removeConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを追加してアクティブ化しておく coil::Properties configSet("id"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("id")); CPPUNIT_ASSERT_EQUAL(true, configAdmin.isActive()); // 登録されているコンフィグレーションセットをremoveConfigurationSet()で解除した場合、 // isActive()は正しく偽値を得るか? //CPPUNIT_ASSERT_EQUAL(true, configAdmin.removeConfigurationSet("id")); //CPPUNIT_ASSERT_EQUAL(false, configAdmin.isActive()); } /*! * @brief isActive()メソッドのテスト * * - activateConfigurationSet()でアクティブ化した後は、isActive()は正しく真値を得るか? */ void test_isActive_on_activateConfigurationSet() { // test_isActive_on_addConfigurationSet()で兼用 } void test_isActive_on_setConfigurationSetValues() { // TODO 実装すること } /*! * @brief getConfigurationSets()メソッドのテスト * * - 登録されている全てのコンフィグレーションセットを正しく取得できるか? */ void test_getConfigurationSets() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // 2つのパラメータ値を含むコンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); configSet1.setProperty("name 1", "1.41421356"); configSet1.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); configSet2.setProperty("name 1", "3.14159"); configSet2.setProperty("name 2", "2.71828"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // getConfigurationSets()で登録されている全てのコンフィグレーションセットを取得し、 // 登録したものと一致していることを確認する std::vector<coil::Properties*> expectedConfigSets; expectedConfigSets.push_back(&configSet1); expectedConfigSets.push_back(&configSet2); const std::vector<coil::Properties*>& configSets = configAdmin.getConfigurationSets(); CPPUNIT_ASSERT_EQUAL( std::string("1.41421356"), getPropertiesBy("set 1", configSets)->getProperty("name 1")); CPPUNIT_ASSERT_EQUAL( std::string("1.7320508"), getPropertiesBy("set 1", configSets)->getProperty("name 2")); CPPUNIT_ASSERT_EQUAL( std::string("3.14159"), getPropertiesBy("set 2", configSets)->getProperty("name 1")); CPPUNIT_ASSERT_EQUAL( std::string("2.71828"), getPropertiesBy("set 2", configSets)->getProperty("name 2")); } /*! * addConfigurationSet()メソッドとgetConfigurationSet()メソッドのテスト * * - addConfigurationSet()で、コンフィグレーションセットを追加できるか? * - getConfigurationSet()で、追加したコンフィグレーションセットを正しく取得できるか? */ void test_addConfigurationSet_and_getConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // addConfigurationSet()で、コンフィグレーションセットを追加できるか? coil::Properties configSet("id"); configSet.setProperty("key", "value"); configAdmin.addConfigurationSet(configSet); // getConfigurationSet()で、追加したコンフィグレーションセットを正しく取得できるか? const coil::Properties& configSetRet = configAdmin.getConfigurationSet("id"); CPPUNIT_ASSERT_EQUAL(std::string("value"), configSetRet.getProperty("key")); } /*! * setConfigurationSetValues()メソッドのテスト * * - 指定したプロパティが、正しく指定したコンフィグレーションセットに追加されるか? */ void test_setConfigurationSetValues() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); coil::Properties configSet1("id"); configSet1.setProperty("name 1", "1.41421356"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); // 登録済みのコンフィグレーションセットに対して、プロパティを追加する coil::Properties configSet2("id"); configSet2.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.setConfigurationSetValues(configSet2)); // 当該コンフィグレーションセットを取得して、プロパティが意図どおり追加されていることを確認する const coil::Properties& configSetRet = configAdmin.getConfigurationSet("id"); CPPUNIT_ASSERT_EQUAL(std::string("1.41421356"), configSetRet.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string("1.7320508"), configSetRet.getProperty("name 2")); } /*! * @brief setConfigurationSetValues()メソッドのテスト * * - 存在しないコンフィグレーションセットに対してプロパティ追加を試みて、意図どおり失敗するか? * - 失敗後に、登録済みのコンフィグレーションセットが影響を受けていないか? */ void test_setConfigurationSetValues_with_inexist_configuration_set() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); coil::Properties configSet1("id"); configSet1.setProperty("name 1", "1.41421356"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); // 存在しないコンフィグレーションセットに対してプロパティ追加を試みて、意図どおり失敗するか? coil::Properties configSet2("inexist id"); configSet2.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.setConfigurationSetValues(configSet2)); // 失敗後に、登録済みのコンフィグレーションセットが影響を受けていないか? const coil::Properties& configSetRet = configAdmin.getConfigurationSet("id"); CPPUNIT_ASSERT_EQUAL(std::string("1.41421356"), configSetRet.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string(""), configSetRet.getProperty("name 2")); } /*! * @brief getActiveConfigurationSet()メソッドのテスト * * - アクティブコンフィグレーションセットを正しく取得できるか? */ void test_getActiveConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); configSet1.setProperty("name 1", "1.41421356"); configSet1.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); configSet2.setProperty("name 1", "3.14159"); configSet2.setProperty("name 2", "2.71828"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // "set 1"をアクティブ化した後、アクティブコンフィグレーションセットとして正しく取得できるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 1")); const coil::Properties& activeConfigSet1 = configAdmin.getActiveConfigurationSet(); CPPUNIT_ASSERT_EQUAL(std::string("1.41421356"), activeConfigSet1.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string("1.7320508"), activeConfigSet1.getProperty("name 2")); // "set 2"をアクティブ化した後、アクティブコンフィグレーションセットとして正しく取得できるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 2")); const coil::Properties& activeConfigSet2 = configAdmin.getActiveConfigurationSet(); CPPUNIT_ASSERT_EQUAL(std::string("3.14159"), activeConfigSet2.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string("2.71828"), activeConfigSet2.getProperty("name 2")); } /*! * @brief removeConfigurationSet()のテスト * * - 登録されているコンフィグレーションセットを正しく登録解除できるか? */ void test_removeConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを追加しておく coil::Properties configSet("id"); configSet.setProperty("key", "value"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); // いったん登録したコンフィグレーションセットを登録解除する CPPUNIT_ASSERT_EQUAL(true, configAdmin.removeConfigurationSet("id")); // 当該コンフィグレーションセットが存在しないことを確認する CPPUNIT_ASSERT_EQUAL(false, configAdmin.haveConfig("id")); } /*! * @brief removeConfigurationSet()のテスト * * - 存在しないコンフィグレーションセットIDを指定した場合に、意図どおりに失敗するか? */ void test_removeConfigurationSet_with_inexist_configuration_id() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを追加しておく coil::Properties configSet("id"); configSet.setProperty("key", "value"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); // 存在しないコンフィグレーションセットIDを指定した場合に、意図どおりに失敗するか? CPPUNIT_ASSERT_EQUAL(false, configAdmin.removeConfigurationSet("inexist id")); // 登録されているコンフィグレーションセットは、元どおり存在しているか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); } void test_activateConfigurationSet() { // test_getActiveConfigurationSet()で兼ねる } /*! * @brief setOnUpdate()メソッドのテスト * * - */ void test_setOnUpdate() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnUpdateCallbackMock* cdm1 = new OnUpdateCallbackMock(); OnUpdateCallbackMock* cdm2 = new OnUpdateCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnUpdate(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onUpdateMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnUpdate(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onUpdateMock("config_id"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnUpdateParam()メソッドのテスト * * - */ void test_setOnUpdateParam() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnUpdateParamCallbackMock* cdm1 = new OnUpdateParamCallbackMock(); OnUpdateParamCallbackMock* cdm2 = new OnUpdateParamCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnUpdateParam(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onUpdateParamMock("config_id", "param1"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnUpdateParam(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onUpdateParamMock("config_id", "param2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnSetConfigurationSet()メソッドのテスト * * - */ void test_setOnSetConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); coil::Properties configSet2("config_id2"); configSet2.setProperty("config_id2.key", "value2"); OnSetConfigurationSetCallbackMock* cdm1 = new OnSetConfigurationSetCallbackMock(); OnSetConfigurationSetCallbackMock* cdm2 = new OnSetConfigurationSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnSetConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onSetConfigurationSetMock(configSet); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnSetConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onSetConfigurationSetMock(configSet2); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnAddConfigurationSet()メソッドのテスト * * - */ void test_setOnAddConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); coil::Properties configSet2("config_id2"); configSet2.setProperty("config_id2.key", "value2"); OnAddConfigurationAddCallbackMock* cdm1 = new OnAddConfigurationAddCallbackMock(); OnAddConfigurationAddCallbackMock* cdm2 = new OnAddConfigurationAddCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnAddConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onAddConfigurationSetMock(configSet); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnAddConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onAddConfigurationSetMock(configSet2); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnRemoveConfigurationSet()メソッドのテスト * * - */ void test_setOnRemoveConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnRemoveConfigurationSetCallbackMock* cdm1 = new OnRemoveConfigurationSetCallbackMock(); OnRemoveConfigurationSetCallbackMock* cdm2 = new OnRemoveConfigurationSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnRemoveConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onRemoveConfigurationSetMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnRemoveConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onRemoveConfigurationSetMock("config_id2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnActivateSet()メソッドのテスト * * - */ void test_setOnActivateSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnActivateSetCallbackMock* cdm1 = new OnActivateSetCallbackMock(); OnActivateSetCallbackMock* cdm2 = new OnActivateSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnActivateSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onActivateSetMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnActivateSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onActivateSetMock("config_id2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } }; }; // namespace ConfigAdmin /* * Register test suite */ CPPUNIT_TEST_SUITE_REGISTRATION(Config::ConfigTests); CPPUNIT_TEST_SUITE_REGISTRATION(ConfigAdmin::ConfigAdminTests); #ifdef LOCAL_MAIN int main(int argc, char* argv[]) { FORMAT format = TEXT_OUT; int target = 0; std::string xsl; std::string ns; std::string fname; std::ofstream ofs; int i(1); while (i < argc) { std::string arg(argv[i]); std::string next_arg; if (i + 1 < argc) next_arg = argv[i + 1]; else next_arg = ""; if (arg == "--text") { format = TEXT_OUT; break; } if (arg == "--xml") { if (next_arg == "") { fname = argv[0]; fname += ".xml"; } else { fname = next_arg; } format = XML_OUT; ofs.open(fname.c_str()); } if ( arg == "--compiler" ) { format = COMPILER_OUT; break; } if ( arg == "--cerr" ) { target = 1; break; } if ( arg == "--xsl" ) { if (next_arg == "") xsl = "default.xsl"; else xsl = next_arg; } if ( arg == "--namespace" ) { if (next_arg == "") { std::cerr << "no namespace specified" << std::endl; exit(1); } else { xsl = next_arg; } } ++i; } CppUnit::TextUi::TestRunner runner; if ( ns.empty() ) runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest()); else runner.addTest(CppUnit::TestFactoryRegistry::getRegistry(ns).makeTest()); CppUnit::Outputter* outputter = 0; std::ostream* stream = target ? &std::cerr : &std::cout; switch ( format ) { case TEXT_OUT : outputter = new CppUnit::TextOutputter(&runner.result(),*stream); break; case XML_OUT : std::cout << "XML_OUT" << std::endl; outputter = new CppUnit::XmlOutputter(&runner.result(), ofs, "shift_jis"); static_cast<CppUnit::XmlOutputter*>(outputter)->setStyleSheet(xsl); break; case COMPILER_OUT : outputter = new CppUnit::CompilerOutputter(&runner.result(),*stream); break; } runner.setOutputter(outputter); runner.run(); return 0; // runner.run() ? 0 : 1; } #endif // MAIN #endif // ConfigAdmin_cpp
605  const char* varName = "name";
606  double var = 0.0;
607  const char* default_value = "3.14159";
608  CPPUNIT_ASSERT_EQUAL(
609  true, configAdmin.bindParameter(varName, var, default_value));
610  CPPUNIT_ASSERT_EQUAL(3.14159, var);
611 
612  // "set 1"のほうをアクティブにする CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 1")); // アクティブにしただけでは、まだバインド変数は更新されていないはず CPPUNIT_ASSERT_EQUAL(3.14159, var); // update()呼出しにより、バインド変数がアクティブなコンフィグレーションセットの値で更新されるか? configAdmin.update(); CPPUNIT_ASSERT_EQUAL(1.41421356, var); // "set 2"のほうをアクティブにする CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 2")); // アクティブにしただけでは、まだバインド変数は更新されていないはず CPPUNIT_ASSERT_EQUAL(1.41421356, var); // update()呼出しにより、バインド変数がアクティブなコンフィグレーションセットの値で更新されるか? configAdmin.update(); CPPUNIT_ASSERT_EQUAL(1.7320508, var); } /*! * @brief isExist()メソッドのテスト * * - バインドした変数の名称でisExist()を呼出し、真値が得られるか? * - バインドしていない名称でisExist()を呼出し、偽値が得られるか? */ void test_isExist() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // 変数をバインドする const char* varName = "name"; double var = 0.0; const char* default_value = "3.14159"; CPPUNIT_ASSERT_EQUAL( true, configAdmin.bindParameter(varName, var, default_value)); CPPUNIT_ASSERT_EQUAL(3.14159, var); // バインドした変数の名称でisExist()を呼出し、真値が得られるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.isExist("name")); // バインドしていない名称でisExist()を呼出し、偽値が得られるか? CPPUNIT_ASSERT_EQUAL(false, configAdmin.isExist("inexist name")); } /*! * @brief isChanged()メソッドのテスト * * - addConfigurationSet()呼出後は、isChanged()は真値となるか? */ void test_isChanged_on_addConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // update()を呼出してバインド変数と同期を行い、isChanged()が偽となる状態にする configAdmin.update(); CPPUNIT_ASSERT_EQUAL(false, configAdmin.isChanged()); // addConfigurationSet()を呼出す coil::Properties configSet("id"); configSet.setProperty("key", "value"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); // addConfigurationSet()呼出後は、isChanged()は真値となるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.isChanged()); } /*! * @brief isChanged()メソッドのテスト * * - removeConfigurationSet()呼出後は、isChanged()は真値となるか? */ void test_isChanged_on_removeConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // addConfigurationSet()を呼出す coil::Properties configSet("id"); configSet.setProperty("key", "value"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); // update()を呼出してバインド変数と同期を行い、isChanged()が偽となる状態にする CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("id")); configAdmin.update(); CPPUNIT_ASSERT_EQUAL(false, configAdmin.isChanged()); // removeConfigurationSet()の呼出後は、isChanged()は真値となるか? //CPPUNIT_ASSERT_EQUAL(true, configAdmin.removeConfigurationSet("id")); //CPPUNIT_ASSERT_EQUAL(true, configAdmin.isChanged()); } /*! * @brief isChanged()メソッドのテスト * * - activateConfigurationSet()呼出後は、isChanged()は真値となるか? */ void test_isChanged_on_activateConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // "set 1"のほうをアクティブにする CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 1")); // update()を行い、isChanged()が偽値の状態にしておく configAdmin.update(); CPPUNIT_ASSERT_EQUAL(false, configAdmin.isChanged()); // "set 2"のほうをアクティブにすると、isChanged()が真値となるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 2")); CPPUNIT_ASSERT_EQUAL(true, configAdmin.isChanged()); } void test_isChanged_on_setConfigurationSetValues() { // TODO 実装すること } /*! * @brief getActiveId()メソッドのテスト * * - アクティブ化したコンフィグレーションセットのIDを正しく取得できるか? */ void test_getActiveId() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // 初期状態では、アクティブIDは"default"のはず CPPUNIT_ASSERT_EQUAL(std::string("default"), std::string(configAdmin.getActiveId())); // "set 1"をアクティブにした後、意図どおりのアクティブIDを取得できるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 1")); CPPUNIT_ASSERT_EQUAL(std::string("set 1"), std::string(configAdmin.getActiveId())); // "set 2"をアクティブにした後、意図どおりのアクティブIDを取得できるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 2")); CPPUNIT_ASSERT_EQUAL(std::string("set 2"), std::string(configAdmin.getActiveId())); } /*! * @brief haveConfig()メソッドのテスト * * - 存在するコンフィグレーションセットIDを指定した場合に、haveConfig()で正しく真値を得るか? * - 存在しないコンフィグレーションセットIDを指定した場合に、haveConfig()で正しく偽値を得るか? */ void test_haveConfig() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("id"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); // 存在するコンフィグレーションセットIDを指定した場合に、haveConfig()で正しく真値を得るか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); // 存在しないコンフィグレーションセットIDを指定した場合に、haveConfig()で正しく偽値を得るか? CPPUNIT_ASSERT_EQUAL(false, configAdmin.haveConfig("inexist id")); } /*! * @brief isActive()メソッドのテスト * * - addConfigurationSet()呼出後は、isActive()は正しく偽値を得るか? * - activateConfigurationSet()でアクティブ化した後は、isActive()は正しく真値を得るか? */ void test_isActive_on_addConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // addConfigurationSet()呼出後は、isActive()は正しく偽値を得るか? coil::Properties configSet("id"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); CPPUNIT_ASSERT_EQUAL(false, configAdmin.isActive()); // activateConfigurationSet()でアクティブ化した後は、isActive()は正しく真値を得るか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("id")); CPPUNIT_ASSERT_EQUAL(true, configAdmin.isActive()); } /*! * @brief isActive()メソッドのテスト * * - removeConfigurationSet()呼出後は、isActive()は正しく偽値を得るか? */ void test_isActive_on_removeConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを追加してアクティブ化しておく coil::Properties configSet("id"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("id")); CPPUNIT_ASSERT_EQUAL(true, configAdmin.isActive()); // 登録されているコンフィグレーションセットをremoveConfigurationSet()で解除した場合、 // isActive()は正しく偽値を得るか? //CPPUNIT_ASSERT_EQUAL(true, configAdmin.removeConfigurationSet("id")); //CPPUNIT_ASSERT_EQUAL(false, configAdmin.isActive()); } /*! * @brief isActive()メソッドのテスト * * - activateConfigurationSet()でアクティブ化した後は、isActive()は正しく真値を得るか? */ void test_isActive_on_activateConfigurationSet() { // test_isActive_on_addConfigurationSet()で兼用 } void test_isActive_on_setConfigurationSetValues() { // TODO 実装すること } /*! * @brief getConfigurationSets()メソッドのテスト * * - 登録されている全てのコンフィグレーションセットを正しく取得できるか? */ void test_getConfigurationSets() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // 2つのパラメータ値を含むコンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); configSet1.setProperty("name 1", "1.41421356"); configSet1.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); configSet2.setProperty("name 1", "3.14159"); configSet2.setProperty("name 2", "2.71828"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // getConfigurationSets()で登録されている全てのコンフィグレーションセットを取得し、 // 登録したものと一致していることを確認する std::vector<coil::Properties*> expectedConfigSets; expectedConfigSets.push_back(&configSet1); expectedConfigSets.push_back(&configSet2); const std::vector<coil::Properties*>& configSets = configAdmin.getConfigurationSets(); CPPUNIT_ASSERT_EQUAL( std::string("1.41421356"), getPropertiesBy("set 1", configSets)->getProperty("name 1")); CPPUNIT_ASSERT_EQUAL( std::string("1.7320508"), getPropertiesBy("set 1", configSets)->getProperty("name 2")); CPPUNIT_ASSERT_EQUAL( std::string("3.14159"), getPropertiesBy("set 2", configSets)->getProperty("name 1")); CPPUNIT_ASSERT_EQUAL( std::string("2.71828"), getPropertiesBy("set 2", configSets)->getProperty("name 2")); } /*! * addConfigurationSet()メソッドとgetConfigurationSet()メソッドのテスト * * - addConfigurationSet()で、コンフィグレーションセットを追加できるか? * - getConfigurationSet()で、追加したコンフィグレーションセットを正しく取得できるか? */ void test_addConfigurationSet_and_getConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // addConfigurationSet()で、コンフィグレーションセットを追加できるか? coil::Properties configSet("id"); configSet.setProperty("key", "value"); configAdmin.addConfigurationSet(configSet); // getConfigurationSet()で、追加したコンフィグレーションセットを正しく取得できるか? const coil::Properties& configSetRet = configAdmin.getConfigurationSet("id"); CPPUNIT_ASSERT_EQUAL(std::string("value"), configSetRet.getProperty("key")); } /*! * setConfigurationSetValues()メソッドのテスト * * - 指定したプロパティが、正しく指定したコンフィグレーションセットに追加されるか? */ void test_setConfigurationSetValues() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); coil::Properties configSet1("id"); configSet1.setProperty("name 1", "1.41421356"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); // 登録済みのコンフィグレーションセットに対して、プロパティを追加する coil::Properties configSet2("id"); configSet2.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.setConfigurationSetValues(configSet2)); // 当該コンフィグレーションセットを取得して、プロパティが意図どおり追加されていることを確認する const coil::Properties& configSetRet = configAdmin.getConfigurationSet("id"); CPPUNIT_ASSERT_EQUAL(std::string("1.41421356"), configSetRet.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string("1.7320508"), configSetRet.getProperty("name 2")); } /*! * @brief setConfigurationSetValues()メソッドのテスト * * - 存在しないコンフィグレーションセットに対してプロパティ追加を試みて、意図どおり失敗するか? * - 失敗後に、登録済みのコンフィグレーションセットが影響を受けていないか? */ void test_setConfigurationSetValues_with_inexist_configuration_set() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); coil::Properties configSet1("id"); configSet1.setProperty("name 1", "1.41421356"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); // 存在しないコンフィグレーションセットに対してプロパティ追加を試みて、意図どおり失敗するか? coil::Properties configSet2("inexist id"); configSet2.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.setConfigurationSetValues(configSet2)); // 失敗後に、登録済みのコンフィグレーションセットが影響を受けていないか? const coil::Properties& configSetRet = configAdmin.getConfigurationSet("id"); CPPUNIT_ASSERT_EQUAL(std::string("1.41421356"), configSetRet.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string(""), configSetRet.getProperty("name 2")); } /*! * @brief getActiveConfigurationSet()メソッドのテスト * * - アクティブコンフィグレーションセットを正しく取得できるか? */ void test_getActiveConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); configSet1.setProperty("name 1", "1.41421356"); configSet1.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); configSet2.setProperty("name 1", "3.14159"); configSet2.setProperty("name 2", "2.71828"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // "set 1"をアクティブ化した後、アクティブコンフィグレーションセットとして正しく取得できるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 1")); const coil::Properties& activeConfigSet1 = configAdmin.getActiveConfigurationSet(); CPPUNIT_ASSERT_EQUAL(std::string("1.41421356"), activeConfigSet1.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string("1.7320508"), activeConfigSet1.getProperty("name 2")); // "set 2"をアクティブ化した後、アクティブコンフィグレーションセットとして正しく取得できるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 2")); const coil::Properties& activeConfigSet2 = configAdmin.getActiveConfigurationSet(); CPPUNIT_ASSERT_EQUAL(std::string("3.14159"), activeConfigSet2.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string("2.71828"), activeConfigSet2.getProperty("name 2")); } /*! * @brief removeConfigurationSet()のテスト * * - 登録されているコンフィグレーションセットを正しく登録解除できるか? */ void test_removeConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを追加しておく coil::Properties configSet("id"); configSet.setProperty("key", "value"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); // いったん登録したコンフィグレーションセットを登録解除する CPPUNIT_ASSERT_EQUAL(true, configAdmin.removeConfigurationSet("id")); // 当該コンフィグレーションセットが存在しないことを確認する CPPUNIT_ASSERT_EQUAL(false, configAdmin.haveConfig("id")); } /*! * @brief removeConfigurationSet()のテスト * * - 存在しないコンフィグレーションセットIDを指定した場合に、意図どおりに失敗するか? */ void test_removeConfigurationSet_with_inexist_configuration_id() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを追加しておく coil::Properties configSet("id"); configSet.setProperty("key", "value"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); // 存在しないコンフィグレーションセットIDを指定した場合に、意図どおりに失敗するか? CPPUNIT_ASSERT_EQUAL(false, configAdmin.removeConfigurationSet("inexist id")); // 登録されているコンフィグレーションセットは、元どおり存在しているか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); } void test_activateConfigurationSet() { // test_getActiveConfigurationSet()で兼ねる } /*! * @brief setOnUpdate()メソッドのテスト * * - */ void test_setOnUpdate() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnUpdateCallbackMock* cdm1 = new OnUpdateCallbackMock(); OnUpdateCallbackMock* cdm2 = new OnUpdateCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnUpdate(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onUpdateMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnUpdate(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onUpdateMock("config_id"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnUpdateParam()メソッドのテスト * * - */ void test_setOnUpdateParam() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnUpdateParamCallbackMock* cdm1 = new OnUpdateParamCallbackMock(); OnUpdateParamCallbackMock* cdm2 = new OnUpdateParamCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnUpdateParam(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onUpdateParamMock("config_id", "param1"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnUpdateParam(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onUpdateParamMock("config_id", "param2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnSetConfigurationSet()メソッドのテスト * * - */ void test_setOnSetConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); coil::Properties configSet2("config_id2"); configSet2.setProperty("config_id2.key", "value2"); OnSetConfigurationSetCallbackMock* cdm1 = new OnSetConfigurationSetCallbackMock(); OnSetConfigurationSetCallbackMock* cdm2 = new OnSetConfigurationSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnSetConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onSetConfigurationSetMock(configSet); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnSetConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onSetConfigurationSetMock(configSet2); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnAddConfigurationSet()メソッドのテスト * * - */ void test_setOnAddConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); coil::Properties configSet2("config_id2"); configSet2.setProperty("config_id2.key", "value2"); OnAddConfigurationAddCallbackMock* cdm1 = new OnAddConfigurationAddCallbackMock(); OnAddConfigurationAddCallbackMock* cdm2 = new OnAddConfigurationAddCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnAddConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onAddConfigurationSetMock(configSet); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnAddConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onAddConfigurationSetMock(configSet2); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnRemoveConfigurationSet()メソッドのテスト * * - */ void test_setOnRemoveConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnRemoveConfigurationSetCallbackMock* cdm1 = new OnRemoveConfigurationSetCallbackMock(); OnRemoveConfigurationSetCallbackMock* cdm2 = new OnRemoveConfigurationSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnRemoveConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onRemoveConfigurationSetMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnRemoveConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onRemoveConfigurationSetMock("config_id2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnActivateSet()メソッドのテスト * * - */ void test_setOnActivateSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnActivateSetCallbackMock* cdm1 = new OnActivateSetCallbackMock(); OnActivateSetCallbackMock* cdm2 = new OnActivateSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnActivateSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onActivateSetMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnActivateSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onActivateSetMock("config_id2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } }; }; // namespace ConfigAdmin /* * Register test suite */ CPPUNIT_TEST_SUITE_REGISTRATION(Config::ConfigTests); CPPUNIT_TEST_SUITE_REGISTRATION(ConfigAdmin::ConfigAdminTests); #ifdef LOCAL_MAIN int main(int argc, char* argv[]) { FORMAT format = TEXT_OUT; int target = 0; std::string xsl; std::string ns; std::string fname; std::ofstream ofs; int i(1); while (i < argc) { std::string arg(argv[i]); std::string next_arg; if (i + 1 < argc) next_arg = argv[i + 1]; else next_arg = ""; if (arg == "--text") { format = TEXT_OUT; break; } if (arg == "--xml") { if (next_arg == "") { fname = argv[0]; fname += ".xml"; } else { fname = next_arg; } format = XML_OUT; ofs.open(fname.c_str()); } if ( arg == "--compiler" ) { format = COMPILER_OUT; break; } if ( arg == "--cerr" ) { target = 1; break; } if ( arg == "--xsl" ) { if (next_arg == "") xsl = "default.xsl"; else xsl = next_arg; } if ( arg == "--namespace" ) { if (next_arg == "") { std::cerr << "no namespace specified" << std::endl; exit(1); } else { xsl = next_arg; } } ++i; } CppUnit::TextUi::TestRunner runner; if ( ns.empty() ) runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest()); else runner.addTest(CppUnit::TestFactoryRegistry::getRegistry(ns).makeTest()); CppUnit::Outputter* outputter = 0; std::ostream* stream = target ? &std::cerr : &std::cout; switch ( format ) { case TEXT_OUT : outputter = new CppUnit::TextOutputter(&runner.result(),*stream); break; case XML_OUT : std::cout << "XML_OUT" << std::endl; outputter = new CppUnit::XmlOutputter(&runner.result(), ofs, "shift_jis"); static_cast<CppUnit::XmlOutputter*>(outputter)->setStyleSheet(xsl); break; case COMPILER_OUT : outputter = new CppUnit::CompilerOutputter(&runner.result(),*stream); break; } runner.setOutputter(outputter); runner.run(); return 0; // runner.run() ? 0 : 1; } #endif // MAIN #endif // ConfigAdmin_cpp
613  CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 1"));
614 
615  // アクティブにしただけでは、まだバインド変数は更新されていないはず
616  CPPUNIT_ASSERT_EQUAL(3.14159, var);
617 
618  // update()呼出しにより、バインド変数がアクティブなコンフィグレーションセットの値で更新されるか?
619  configAdmin.update();
620  CPPUNIT_ASSERT_EQUAL(1.41421356, var);
621 
622  // "set 2"のほうをアクティブにする CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 2")); // アクティブにしただけでは、まだバインド変数は更新されていないはず CPPUNIT_ASSERT_EQUAL(1.41421356, var); // update()呼出しにより、バインド変数がアクティブなコンフィグレーションセットの値で更新されるか? configAdmin.update(); CPPUNIT_ASSERT_EQUAL(1.7320508, var); } /*! * @brief isExist()メソッドのテスト * * - バインドした変数の名称でisExist()を呼出し、真値が得られるか? * - バインドしていない名称でisExist()を呼出し、偽値が得られるか? */ void test_isExist() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // 変数をバインドする const char* varName = "name"; double var = 0.0; const char* default_value = "3.14159"; CPPUNIT_ASSERT_EQUAL( true, configAdmin.bindParameter(varName, var, default_value)); CPPUNIT_ASSERT_EQUAL(3.14159, var); // バインドした変数の名称でisExist()を呼出し、真値が得られるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.isExist("name")); // バインドしていない名称でisExist()を呼出し、偽値が得られるか? CPPUNIT_ASSERT_EQUAL(false, configAdmin.isExist("inexist name")); } /*! * @brief isChanged()メソッドのテスト * * - addConfigurationSet()呼出後は、isChanged()は真値となるか? */ void test_isChanged_on_addConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // update()を呼出してバインド変数と同期を行い、isChanged()が偽となる状態にする configAdmin.update(); CPPUNIT_ASSERT_EQUAL(false, configAdmin.isChanged()); // addConfigurationSet()を呼出す coil::Properties configSet("id"); configSet.setProperty("key", "value"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); // addConfigurationSet()呼出後は、isChanged()は真値となるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.isChanged()); } /*! * @brief isChanged()メソッドのテスト * * - removeConfigurationSet()呼出後は、isChanged()は真値となるか? */ void test_isChanged_on_removeConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // addConfigurationSet()を呼出す coil::Properties configSet("id"); configSet.setProperty("key", "value"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); // update()を呼出してバインド変数と同期を行い、isChanged()が偽となる状態にする CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("id")); configAdmin.update(); CPPUNIT_ASSERT_EQUAL(false, configAdmin.isChanged()); // removeConfigurationSet()の呼出後は、isChanged()は真値となるか? //CPPUNIT_ASSERT_EQUAL(true, configAdmin.removeConfigurationSet("id")); //CPPUNIT_ASSERT_EQUAL(true, configAdmin.isChanged()); } /*! * @brief isChanged()メソッドのテスト * * - activateConfigurationSet()呼出後は、isChanged()は真値となるか? */ void test_isChanged_on_activateConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // "set 1"のほうをアクティブにする CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 1")); // update()を行い、isChanged()が偽値の状態にしておく configAdmin.update(); CPPUNIT_ASSERT_EQUAL(false, configAdmin.isChanged()); // "set 2"のほうをアクティブにすると、isChanged()が真値となるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 2")); CPPUNIT_ASSERT_EQUAL(true, configAdmin.isChanged()); } void test_isChanged_on_setConfigurationSetValues() { // TODO 実装すること } /*! * @brief getActiveId()メソッドのテスト * * - アクティブ化したコンフィグレーションセットのIDを正しく取得できるか? */ void test_getActiveId() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // 初期状態では、アクティブIDは"default"のはず CPPUNIT_ASSERT_EQUAL(std::string("default"), std::string(configAdmin.getActiveId())); // "set 1"をアクティブにした後、意図どおりのアクティブIDを取得できるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 1")); CPPUNIT_ASSERT_EQUAL(std::string("set 1"), std::string(configAdmin.getActiveId())); // "set 2"をアクティブにした後、意図どおりのアクティブIDを取得できるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 2")); CPPUNIT_ASSERT_EQUAL(std::string("set 2"), std::string(configAdmin.getActiveId())); } /*! * @brief haveConfig()メソッドのテスト * * - 存在するコンフィグレーションセットIDを指定した場合に、haveConfig()で正しく真値を得るか? * - 存在しないコンフィグレーションセットIDを指定した場合に、haveConfig()で正しく偽値を得るか? */ void test_haveConfig() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("id"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); // 存在するコンフィグレーションセットIDを指定した場合に、haveConfig()で正しく真値を得るか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); // 存在しないコンフィグレーションセットIDを指定した場合に、haveConfig()で正しく偽値を得るか? CPPUNIT_ASSERT_EQUAL(false, configAdmin.haveConfig("inexist id")); } /*! * @brief isActive()メソッドのテスト * * - addConfigurationSet()呼出後は、isActive()は正しく偽値を得るか? * - activateConfigurationSet()でアクティブ化した後は、isActive()は正しく真値を得るか? */ void test_isActive_on_addConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // addConfigurationSet()呼出後は、isActive()は正しく偽値を得るか? coil::Properties configSet("id"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); CPPUNIT_ASSERT_EQUAL(false, configAdmin.isActive()); // activateConfigurationSet()でアクティブ化した後は、isActive()は正しく真値を得るか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("id")); CPPUNIT_ASSERT_EQUAL(true, configAdmin.isActive()); } /*! * @brief isActive()メソッドのテスト * * - removeConfigurationSet()呼出後は、isActive()は正しく偽値を得るか? */ void test_isActive_on_removeConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを追加してアクティブ化しておく coil::Properties configSet("id"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("id")); CPPUNIT_ASSERT_EQUAL(true, configAdmin.isActive()); // 登録されているコンフィグレーションセットをremoveConfigurationSet()で解除した場合、 // isActive()は正しく偽値を得るか? //CPPUNIT_ASSERT_EQUAL(true, configAdmin.removeConfigurationSet("id")); //CPPUNIT_ASSERT_EQUAL(false, configAdmin.isActive()); } /*! * @brief isActive()メソッドのテスト * * - activateConfigurationSet()でアクティブ化した後は、isActive()は正しく真値を得るか? */ void test_isActive_on_activateConfigurationSet() { // test_isActive_on_addConfigurationSet()で兼用 } void test_isActive_on_setConfigurationSetValues() { // TODO 実装すること } /*! * @brief getConfigurationSets()メソッドのテスト * * - 登録されている全てのコンフィグレーションセットを正しく取得できるか? */ void test_getConfigurationSets() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // 2つのパラメータ値を含むコンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); configSet1.setProperty("name 1", "1.41421356"); configSet1.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); configSet2.setProperty("name 1", "3.14159"); configSet2.setProperty("name 2", "2.71828"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // getConfigurationSets()で登録されている全てのコンフィグレーションセットを取得し、 // 登録したものと一致していることを確認する std::vector<coil::Properties*> expectedConfigSets; expectedConfigSets.push_back(&configSet1); expectedConfigSets.push_back(&configSet2); const std::vector<coil::Properties*>& configSets = configAdmin.getConfigurationSets(); CPPUNIT_ASSERT_EQUAL( std::string("1.41421356"), getPropertiesBy("set 1", configSets)->getProperty("name 1")); CPPUNIT_ASSERT_EQUAL( std::string("1.7320508"), getPropertiesBy("set 1", configSets)->getProperty("name 2")); CPPUNIT_ASSERT_EQUAL( std::string("3.14159"), getPropertiesBy("set 2", configSets)->getProperty("name 1")); CPPUNIT_ASSERT_EQUAL( std::string("2.71828"), getPropertiesBy("set 2", configSets)->getProperty("name 2")); } /*! * addConfigurationSet()メソッドとgetConfigurationSet()メソッドのテスト * * - addConfigurationSet()で、コンフィグレーションセットを追加できるか? * - getConfigurationSet()で、追加したコンフィグレーションセットを正しく取得できるか? */ void test_addConfigurationSet_and_getConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // addConfigurationSet()で、コンフィグレーションセットを追加できるか? coil::Properties configSet("id"); configSet.setProperty("key", "value"); configAdmin.addConfigurationSet(configSet); // getConfigurationSet()で、追加したコンフィグレーションセットを正しく取得できるか? const coil::Properties& configSetRet = configAdmin.getConfigurationSet("id"); CPPUNIT_ASSERT_EQUAL(std::string("value"), configSetRet.getProperty("key")); } /*! * setConfigurationSetValues()メソッドのテスト * * - 指定したプロパティが、正しく指定したコンフィグレーションセットに追加されるか? */ void test_setConfigurationSetValues() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); coil::Properties configSet1("id"); configSet1.setProperty("name 1", "1.41421356"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); // 登録済みのコンフィグレーションセットに対して、プロパティを追加する coil::Properties configSet2("id"); configSet2.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.setConfigurationSetValues(configSet2)); // 当該コンフィグレーションセットを取得して、プロパティが意図どおり追加されていることを確認する const coil::Properties& configSetRet = configAdmin.getConfigurationSet("id"); CPPUNIT_ASSERT_EQUAL(std::string("1.41421356"), configSetRet.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string("1.7320508"), configSetRet.getProperty("name 2")); } /*! * @brief setConfigurationSetValues()メソッドのテスト * * - 存在しないコンフィグレーションセットに対してプロパティ追加を試みて、意図どおり失敗するか? * - 失敗後に、登録済みのコンフィグレーションセットが影響を受けていないか? */ void test_setConfigurationSetValues_with_inexist_configuration_set() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); coil::Properties configSet1("id"); configSet1.setProperty("name 1", "1.41421356"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); // 存在しないコンフィグレーションセットに対してプロパティ追加を試みて、意図どおり失敗するか? coil::Properties configSet2("inexist id"); configSet2.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.setConfigurationSetValues(configSet2)); // 失敗後に、登録済みのコンフィグレーションセットが影響を受けていないか? const coil::Properties& configSetRet = configAdmin.getConfigurationSet("id"); CPPUNIT_ASSERT_EQUAL(std::string("1.41421356"), configSetRet.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string(""), configSetRet.getProperty("name 2")); } /*! * @brief getActiveConfigurationSet()メソッドのテスト * * - アクティブコンフィグレーションセットを正しく取得できるか? */ void test_getActiveConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); configSet1.setProperty("name 1", "1.41421356"); configSet1.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); configSet2.setProperty("name 1", "3.14159"); configSet2.setProperty("name 2", "2.71828"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // "set 1"をアクティブ化した後、アクティブコンフィグレーションセットとして正しく取得できるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 1")); const coil::Properties& activeConfigSet1 = configAdmin.getActiveConfigurationSet(); CPPUNIT_ASSERT_EQUAL(std::string("1.41421356"), activeConfigSet1.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string("1.7320508"), activeConfigSet1.getProperty("name 2")); // "set 2"をアクティブ化した後、アクティブコンフィグレーションセットとして正しく取得できるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 2")); const coil::Properties& activeConfigSet2 = configAdmin.getActiveConfigurationSet(); CPPUNIT_ASSERT_EQUAL(std::string("3.14159"), activeConfigSet2.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string("2.71828"), activeConfigSet2.getProperty("name 2")); } /*! * @brief removeConfigurationSet()のテスト * * - 登録されているコンフィグレーションセットを正しく登録解除できるか? */ void test_removeConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを追加しておく coil::Properties configSet("id"); configSet.setProperty("key", "value"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); // いったん登録したコンフィグレーションセットを登録解除する CPPUNIT_ASSERT_EQUAL(true, configAdmin.removeConfigurationSet("id")); // 当該コンフィグレーションセットが存在しないことを確認する CPPUNIT_ASSERT_EQUAL(false, configAdmin.haveConfig("id")); } /*! * @brief removeConfigurationSet()のテスト * * - 存在しないコンフィグレーションセットIDを指定した場合に、意図どおりに失敗するか? */ void test_removeConfigurationSet_with_inexist_configuration_id() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを追加しておく coil::Properties configSet("id"); configSet.setProperty("key", "value"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); // 存在しないコンフィグレーションセットIDを指定した場合に、意図どおりに失敗するか? CPPUNIT_ASSERT_EQUAL(false, configAdmin.removeConfigurationSet("inexist id")); // 登録されているコンフィグレーションセットは、元どおり存在しているか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); } void test_activateConfigurationSet() { // test_getActiveConfigurationSet()で兼ねる } /*! * @brief setOnUpdate()メソッドのテスト * * - */ void test_setOnUpdate() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnUpdateCallbackMock* cdm1 = new OnUpdateCallbackMock(); OnUpdateCallbackMock* cdm2 = new OnUpdateCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnUpdate(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onUpdateMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnUpdate(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onUpdateMock("config_id"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnUpdateParam()メソッドのテスト * * - */ void test_setOnUpdateParam() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnUpdateParamCallbackMock* cdm1 = new OnUpdateParamCallbackMock(); OnUpdateParamCallbackMock* cdm2 = new OnUpdateParamCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnUpdateParam(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onUpdateParamMock("config_id", "param1"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnUpdateParam(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onUpdateParamMock("config_id", "param2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnSetConfigurationSet()メソッドのテスト * * - */ void test_setOnSetConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); coil::Properties configSet2("config_id2"); configSet2.setProperty("config_id2.key", "value2"); OnSetConfigurationSetCallbackMock* cdm1 = new OnSetConfigurationSetCallbackMock(); OnSetConfigurationSetCallbackMock* cdm2 = new OnSetConfigurationSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnSetConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onSetConfigurationSetMock(configSet); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnSetConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onSetConfigurationSetMock(configSet2); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnAddConfigurationSet()メソッドのテスト * * - */ void test_setOnAddConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); coil::Properties configSet2("config_id2"); configSet2.setProperty("config_id2.key", "value2"); OnAddConfigurationAddCallbackMock* cdm1 = new OnAddConfigurationAddCallbackMock(); OnAddConfigurationAddCallbackMock* cdm2 = new OnAddConfigurationAddCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnAddConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onAddConfigurationSetMock(configSet); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnAddConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onAddConfigurationSetMock(configSet2); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnRemoveConfigurationSet()メソッドのテスト * * - */ void test_setOnRemoveConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnRemoveConfigurationSetCallbackMock* cdm1 = new OnRemoveConfigurationSetCallbackMock(); OnRemoveConfigurationSetCallbackMock* cdm2 = new OnRemoveConfigurationSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnRemoveConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onRemoveConfigurationSetMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnRemoveConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onRemoveConfigurationSetMock("config_id2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnActivateSet()メソッドのテスト * * - */ void test_setOnActivateSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnActivateSetCallbackMock* cdm1 = new OnActivateSetCallbackMock(); OnActivateSetCallbackMock* cdm2 = new OnActivateSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnActivateSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onActivateSetMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnActivateSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onActivateSetMock("config_id2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } }; }; // namespace ConfigAdmin /* * Register test suite */ CPPUNIT_TEST_SUITE_REGISTRATION(Config::ConfigTests); CPPUNIT_TEST_SUITE_REGISTRATION(ConfigAdmin::ConfigAdminTests); #ifdef LOCAL_MAIN int main(int argc, char* argv[]) { FORMAT format = TEXT_OUT; int target = 0; std::string xsl; std::string ns; std::string fname; std::ofstream ofs; int i(1); while (i < argc) { std::string arg(argv[i]); std::string next_arg; if (i + 1 < argc) next_arg = argv[i + 1]; else next_arg = ""; if (arg == "--text") { format = TEXT_OUT; break; } if (arg == "--xml") { if (next_arg == "") { fname = argv[0]; fname += ".xml"; } else { fname = next_arg; } format = XML_OUT; ofs.open(fname.c_str()); } if ( arg == "--compiler" ) { format = COMPILER_OUT; break; } if ( arg == "--cerr" ) { target = 1; break; } if ( arg == "--xsl" ) { if (next_arg == "") xsl = "default.xsl"; else xsl = next_arg; } if ( arg == "--namespace" ) { if (next_arg == "") { std::cerr << "no namespace specified" << std::endl; exit(1); } else { xsl = next_arg; } } ++i; } CppUnit::TextUi::TestRunner runner; if ( ns.empty() ) runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest()); else runner.addTest(CppUnit::TestFactoryRegistry::getRegistry(ns).makeTest()); CppUnit::Outputter* outputter = 0; std::ostream* stream = target ? &std::cerr : &std::cout; switch ( format ) { case TEXT_OUT : outputter = new CppUnit::TextOutputter(&runner.result(),*stream); break; case XML_OUT : std::cout << "XML_OUT" << std::endl; outputter = new CppUnit::XmlOutputter(&runner.result(), ofs, "shift_jis"); static_cast<CppUnit::XmlOutputter*>(outputter)->setStyleSheet(xsl); break; case COMPILER_OUT : outputter = new CppUnit::CompilerOutputter(&runner.result(),*stream); break; } runner.setOutputter(outputter); runner.run(); return 0; // runner.run() ? 0 : 1; } #endif // MAIN #endif // ConfigAdmin_cpp
623  CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 2"));
624 
625  // アクティブにしただけでは、まだバインド変数は更新されていないはず
626  CPPUNIT_ASSERT_EQUAL(1.41421356, var);
627 
628  // update()呼出しにより、バインド変数がアクティブなコンフィグレーションセットの値で更新されるか?
629  configAdmin.update();
630  CPPUNIT_ASSERT_EQUAL(1.7320508, var);
631  }
632 
640  {
641  coil::Properties nullProp;
642  RTC::ConfigAdmin configAdmin(nullProp);
643 
644  // 変数をバインドする const char* varName = "name"; double var = 0.0; const char* default_value = "3.14159"; CPPUNIT_ASSERT_EQUAL( true, configAdmin.bindParameter(varName, var, default_value)); CPPUNIT_ASSERT_EQUAL(3.14159, var); // バインドした変数の名称でisExist()を呼出し、真値が得られるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.isExist("name")); // バインドしていない名称でisExist()を呼出し、偽値が得られるか? CPPUNIT_ASSERT_EQUAL(false, configAdmin.isExist("inexist name")); } /*! * @brief isChanged()メソッドのテスト * * - addConfigurationSet()呼出後は、isChanged()は真値となるか? */ void test_isChanged_on_addConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // update()を呼出してバインド変数と同期を行い、isChanged()が偽となる状態にする configAdmin.update(); CPPUNIT_ASSERT_EQUAL(false, configAdmin.isChanged()); // addConfigurationSet()を呼出す coil::Properties configSet("id"); configSet.setProperty("key", "value"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); // addConfigurationSet()呼出後は、isChanged()は真値となるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.isChanged()); } /*! * @brief isChanged()メソッドのテスト * * - removeConfigurationSet()呼出後は、isChanged()は真値となるか? */ void test_isChanged_on_removeConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // addConfigurationSet()を呼出す coil::Properties configSet("id"); configSet.setProperty("key", "value"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); // update()を呼出してバインド変数と同期を行い、isChanged()が偽となる状態にする CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("id")); configAdmin.update(); CPPUNIT_ASSERT_EQUAL(false, configAdmin.isChanged()); // removeConfigurationSet()の呼出後は、isChanged()は真値となるか? //CPPUNIT_ASSERT_EQUAL(true, configAdmin.removeConfigurationSet("id")); //CPPUNIT_ASSERT_EQUAL(true, configAdmin.isChanged()); } /*! * @brief isChanged()メソッドのテスト * * - activateConfigurationSet()呼出後は、isChanged()は真値となるか? */ void test_isChanged_on_activateConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // "set 1"のほうをアクティブにする CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 1")); // update()を行い、isChanged()が偽値の状態にしておく configAdmin.update(); CPPUNIT_ASSERT_EQUAL(false, configAdmin.isChanged()); // "set 2"のほうをアクティブにすると、isChanged()が真値となるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 2")); CPPUNIT_ASSERT_EQUAL(true, configAdmin.isChanged()); } void test_isChanged_on_setConfigurationSetValues() { // TODO 実装すること } /*! * @brief getActiveId()メソッドのテスト * * - アクティブ化したコンフィグレーションセットのIDを正しく取得できるか? */ void test_getActiveId() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // 初期状態では、アクティブIDは"default"のはず CPPUNIT_ASSERT_EQUAL(std::string("default"), std::string(configAdmin.getActiveId())); // "set 1"をアクティブにした後、意図どおりのアクティブIDを取得できるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 1")); CPPUNIT_ASSERT_EQUAL(std::string("set 1"), std::string(configAdmin.getActiveId())); // "set 2"をアクティブにした後、意図どおりのアクティブIDを取得できるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 2")); CPPUNIT_ASSERT_EQUAL(std::string("set 2"), std::string(configAdmin.getActiveId())); } /*! * @brief haveConfig()メソッドのテスト * * - 存在するコンフィグレーションセットIDを指定した場合に、haveConfig()で正しく真値を得るか? * - 存在しないコンフィグレーションセットIDを指定した場合に、haveConfig()で正しく偽値を得るか? */ void test_haveConfig() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("id"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); // 存在するコンフィグレーションセットIDを指定した場合に、haveConfig()で正しく真値を得るか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); // 存在しないコンフィグレーションセットIDを指定した場合に、haveConfig()で正しく偽値を得るか? CPPUNIT_ASSERT_EQUAL(false, configAdmin.haveConfig("inexist id")); } /*! * @brief isActive()メソッドのテスト * * - addConfigurationSet()呼出後は、isActive()は正しく偽値を得るか? * - activateConfigurationSet()でアクティブ化した後は、isActive()は正しく真値を得るか? */ void test_isActive_on_addConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // addConfigurationSet()呼出後は、isActive()は正しく偽値を得るか? coil::Properties configSet("id"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); CPPUNIT_ASSERT_EQUAL(false, configAdmin.isActive()); // activateConfigurationSet()でアクティブ化した後は、isActive()は正しく真値を得るか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("id")); CPPUNIT_ASSERT_EQUAL(true, configAdmin.isActive()); } /*! * @brief isActive()メソッドのテスト * * - removeConfigurationSet()呼出後は、isActive()は正しく偽値を得るか? */ void test_isActive_on_removeConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを追加してアクティブ化しておく coil::Properties configSet("id"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("id")); CPPUNIT_ASSERT_EQUAL(true, configAdmin.isActive()); // 登録されているコンフィグレーションセットをremoveConfigurationSet()で解除した場合、 // isActive()は正しく偽値を得るか? //CPPUNIT_ASSERT_EQUAL(true, configAdmin.removeConfigurationSet("id")); //CPPUNIT_ASSERT_EQUAL(false, configAdmin.isActive()); } /*! * @brief isActive()メソッドのテスト * * - activateConfigurationSet()でアクティブ化した後は、isActive()は正しく真値を得るか? */ void test_isActive_on_activateConfigurationSet() { // test_isActive_on_addConfigurationSet()で兼用 } void test_isActive_on_setConfigurationSetValues() { // TODO 実装すること } /*! * @brief getConfigurationSets()メソッドのテスト * * - 登録されている全てのコンフィグレーションセットを正しく取得できるか? */ void test_getConfigurationSets() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // 2つのパラメータ値を含むコンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); configSet1.setProperty("name 1", "1.41421356"); configSet1.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); configSet2.setProperty("name 1", "3.14159"); configSet2.setProperty("name 2", "2.71828"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // getConfigurationSets()で登録されている全てのコンフィグレーションセットを取得し、 // 登録したものと一致していることを確認する std::vector<coil::Properties*> expectedConfigSets; expectedConfigSets.push_back(&configSet1); expectedConfigSets.push_back(&configSet2); const std::vector<coil::Properties*>& configSets = configAdmin.getConfigurationSets(); CPPUNIT_ASSERT_EQUAL( std::string("1.41421356"), getPropertiesBy("set 1", configSets)->getProperty("name 1")); CPPUNIT_ASSERT_EQUAL( std::string("1.7320508"), getPropertiesBy("set 1", configSets)->getProperty("name 2")); CPPUNIT_ASSERT_EQUAL( std::string("3.14159"), getPropertiesBy("set 2", configSets)->getProperty("name 1")); CPPUNIT_ASSERT_EQUAL( std::string("2.71828"), getPropertiesBy("set 2", configSets)->getProperty("name 2")); } /*! * addConfigurationSet()メソッドとgetConfigurationSet()メソッドのテスト * * - addConfigurationSet()で、コンフィグレーションセットを追加できるか? * - getConfigurationSet()で、追加したコンフィグレーションセットを正しく取得できるか? */ void test_addConfigurationSet_and_getConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // addConfigurationSet()で、コンフィグレーションセットを追加できるか? coil::Properties configSet("id"); configSet.setProperty("key", "value"); configAdmin.addConfigurationSet(configSet); // getConfigurationSet()で、追加したコンフィグレーションセットを正しく取得できるか? const coil::Properties& configSetRet = configAdmin.getConfigurationSet("id"); CPPUNIT_ASSERT_EQUAL(std::string("value"), configSetRet.getProperty("key")); } /*! * setConfigurationSetValues()メソッドのテスト * * - 指定したプロパティが、正しく指定したコンフィグレーションセットに追加されるか? */ void test_setConfigurationSetValues() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); coil::Properties configSet1("id"); configSet1.setProperty("name 1", "1.41421356"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); // 登録済みのコンフィグレーションセットに対して、プロパティを追加する coil::Properties configSet2("id"); configSet2.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.setConfigurationSetValues(configSet2)); // 当該コンフィグレーションセットを取得して、プロパティが意図どおり追加されていることを確認する const coil::Properties& configSetRet = configAdmin.getConfigurationSet("id"); CPPUNIT_ASSERT_EQUAL(std::string("1.41421356"), configSetRet.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string("1.7320508"), configSetRet.getProperty("name 2")); } /*! * @brief setConfigurationSetValues()メソッドのテスト * * - 存在しないコンフィグレーションセットに対してプロパティ追加を試みて、意図どおり失敗するか? * - 失敗後に、登録済みのコンフィグレーションセットが影響を受けていないか? */ void test_setConfigurationSetValues_with_inexist_configuration_set() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); coil::Properties configSet1("id"); configSet1.setProperty("name 1", "1.41421356"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); // 存在しないコンフィグレーションセットに対してプロパティ追加を試みて、意図どおり失敗するか? coil::Properties configSet2("inexist id"); configSet2.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.setConfigurationSetValues(configSet2)); // 失敗後に、登録済みのコンフィグレーションセットが影響を受けていないか? const coil::Properties& configSetRet = configAdmin.getConfigurationSet("id"); CPPUNIT_ASSERT_EQUAL(std::string("1.41421356"), configSetRet.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string(""), configSetRet.getProperty("name 2")); } /*! * @brief getActiveConfigurationSet()メソッドのテスト * * - アクティブコンフィグレーションセットを正しく取得できるか? */ void test_getActiveConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); configSet1.setProperty("name 1", "1.41421356"); configSet1.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); configSet2.setProperty("name 1", "3.14159"); configSet2.setProperty("name 2", "2.71828"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // "set 1"をアクティブ化した後、アクティブコンフィグレーションセットとして正しく取得できるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 1")); const coil::Properties& activeConfigSet1 = configAdmin.getActiveConfigurationSet(); CPPUNIT_ASSERT_EQUAL(std::string("1.41421356"), activeConfigSet1.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string("1.7320508"), activeConfigSet1.getProperty("name 2")); // "set 2"をアクティブ化した後、アクティブコンフィグレーションセットとして正しく取得できるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 2")); const coil::Properties& activeConfigSet2 = configAdmin.getActiveConfigurationSet(); CPPUNIT_ASSERT_EQUAL(std::string("3.14159"), activeConfigSet2.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string("2.71828"), activeConfigSet2.getProperty("name 2")); } /*! * @brief removeConfigurationSet()のテスト * * - 登録されているコンフィグレーションセットを正しく登録解除できるか? */ void test_removeConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを追加しておく coil::Properties configSet("id"); configSet.setProperty("key", "value"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); // いったん登録したコンフィグレーションセットを登録解除する CPPUNIT_ASSERT_EQUAL(true, configAdmin.removeConfigurationSet("id")); // 当該コンフィグレーションセットが存在しないことを確認する CPPUNIT_ASSERT_EQUAL(false, configAdmin.haveConfig("id")); } /*! * @brief removeConfigurationSet()のテスト * * - 存在しないコンフィグレーションセットIDを指定した場合に、意図どおりに失敗するか? */ void test_removeConfigurationSet_with_inexist_configuration_id() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを追加しておく coil::Properties configSet("id"); configSet.setProperty("key", "value"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); // 存在しないコンフィグレーションセットIDを指定した場合に、意図どおりに失敗するか? CPPUNIT_ASSERT_EQUAL(false, configAdmin.removeConfigurationSet("inexist id")); // 登録されているコンフィグレーションセットは、元どおり存在しているか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); } void test_activateConfigurationSet() { // test_getActiveConfigurationSet()で兼ねる } /*! * @brief setOnUpdate()メソッドのテスト * * - */ void test_setOnUpdate() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnUpdateCallbackMock* cdm1 = new OnUpdateCallbackMock(); OnUpdateCallbackMock* cdm2 = new OnUpdateCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnUpdate(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onUpdateMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnUpdate(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onUpdateMock("config_id"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnUpdateParam()メソッドのテスト * * - */ void test_setOnUpdateParam() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnUpdateParamCallbackMock* cdm1 = new OnUpdateParamCallbackMock(); OnUpdateParamCallbackMock* cdm2 = new OnUpdateParamCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnUpdateParam(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onUpdateParamMock("config_id", "param1"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnUpdateParam(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onUpdateParamMock("config_id", "param2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnSetConfigurationSet()メソッドのテスト * * - */ void test_setOnSetConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); coil::Properties configSet2("config_id2"); configSet2.setProperty("config_id2.key", "value2"); OnSetConfigurationSetCallbackMock* cdm1 = new OnSetConfigurationSetCallbackMock(); OnSetConfigurationSetCallbackMock* cdm2 = new OnSetConfigurationSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnSetConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onSetConfigurationSetMock(configSet); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnSetConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onSetConfigurationSetMock(configSet2); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnAddConfigurationSet()メソッドのテスト * * - */ void test_setOnAddConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); coil::Properties configSet2("config_id2"); configSet2.setProperty("config_id2.key", "value2"); OnAddConfigurationAddCallbackMock* cdm1 = new OnAddConfigurationAddCallbackMock(); OnAddConfigurationAddCallbackMock* cdm2 = new OnAddConfigurationAddCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnAddConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onAddConfigurationSetMock(configSet); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnAddConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onAddConfigurationSetMock(configSet2); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnRemoveConfigurationSet()メソッドのテスト * * - */ void test_setOnRemoveConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnRemoveConfigurationSetCallbackMock* cdm1 = new OnRemoveConfigurationSetCallbackMock(); OnRemoveConfigurationSetCallbackMock* cdm2 = new OnRemoveConfigurationSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnRemoveConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onRemoveConfigurationSetMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnRemoveConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onRemoveConfigurationSetMock("config_id2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnActivateSet()メソッドのテスト * * - */ void test_setOnActivateSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnActivateSetCallbackMock* cdm1 = new OnActivateSetCallbackMock(); OnActivateSetCallbackMock* cdm2 = new OnActivateSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnActivateSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onActivateSetMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnActivateSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onActivateSetMock("config_id2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } }; }; // namespace ConfigAdmin /* * Register test suite */ CPPUNIT_TEST_SUITE_REGISTRATION(Config::ConfigTests); CPPUNIT_TEST_SUITE_REGISTRATION(ConfigAdmin::ConfigAdminTests); #ifdef LOCAL_MAIN int main(int argc, char* argv[]) { FORMAT format = TEXT_OUT; int target = 0; std::string xsl; std::string ns; std::string fname; std::ofstream ofs; int i(1); while (i < argc) { std::string arg(argv[i]); std::string next_arg; if (i + 1 < argc) next_arg = argv[i + 1]; else next_arg = ""; if (arg == "--text") { format = TEXT_OUT; break; } if (arg == "--xml") { if (next_arg == "") { fname = argv[0]; fname += ".xml"; } else { fname = next_arg; } format = XML_OUT; ofs.open(fname.c_str()); } if ( arg == "--compiler" ) { format = COMPILER_OUT; break; } if ( arg == "--cerr" ) { target = 1; break; } if ( arg == "--xsl" ) { if (next_arg == "") xsl = "default.xsl"; else xsl = next_arg; } if ( arg == "--namespace" ) { if (next_arg == "") { std::cerr << "no namespace specified" << std::endl; exit(1); } else { xsl = next_arg; } } ++i; } CppUnit::TextUi::TestRunner runner; if ( ns.empty() ) runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest()); else runner.addTest(CppUnit::TestFactoryRegistry::getRegistry(ns).makeTest()); CppUnit::Outputter* outputter = 0; std::ostream* stream = target ? &std::cerr : &std::cout; switch ( format ) { case TEXT_OUT : outputter = new CppUnit::TextOutputter(&runner.result(),*stream); break; case XML_OUT : std::cout << "XML_OUT" << std::endl; outputter = new CppUnit::XmlOutputter(&runner.result(), ofs, "shift_jis"); static_cast<CppUnit::XmlOutputter*>(outputter)->setStyleSheet(xsl); break; case COMPILER_OUT : outputter = new CppUnit::CompilerOutputter(&runner.result(),*stream); break; } runner.setOutputter(outputter); runner.run(); return 0; // runner.run() ? 0 : 1; } #endif // MAIN #endif // ConfigAdmin_cpp
645  const char* varName = "name";
646  double var = 0.0;
647  const char* default_value = "3.14159";
648  CPPUNIT_ASSERT_EQUAL(
649  true, configAdmin.bindParameter(varName, var, default_value));
650  CPPUNIT_ASSERT_EQUAL(3.14159, var);
651 
652  // バインドした変数の名称でisExist()を呼出し、真値が得られるか?
653  CPPUNIT_ASSERT_EQUAL(true, configAdmin.isExist("name"));
654 
655  // バインドしていない名称でisExist()を呼出し、偽値が得られるか?
656  CPPUNIT_ASSERT_EQUAL(false, configAdmin.isExist("inexist name"));
657  }
658 
665  {
666  coil::Properties nullProp;
667  RTC::ConfigAdmin configAdmin(nullProp);
668 
669  // update()を呼出してバインド変数と同期を行い、isChanged()が偽となる状態にする configAdmin.update(); CPPUNIT_ASSERT_EQUAL(false, configAdmin.isChanged()); // addConfigurationSet()を呼出す coil::Properties configSet("id"); configSet.setProperty("key", "value"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); // addConfigurationSet()呼出後は、isChanged()は真値となるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.isChanged()); } /*! * @brief isChanged()メソッドのテスト * * - removeConfigurationSet()呼出後は、isChanged()は真値となるか? */ void test_isChanged_on_removeConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // addConfigurationSet()を呼出す coil::Properties configSet("id"); configSet.setProperty("key", "value"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); // update()を呼出してバインド変数と同期を行い、isChanged()が偽となる状態にする CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("id")); configAdmin.update(); CPPUNIT_ASSERT_EQUAL(false, configAdmin.isChanged()); // removeConfigurationSet()の呼出後は、isChanged()は真値となるか? //CPPUNIT_ASSERT_EQUAL(true, configAdmin.removeConfigurationSet("id")); //CPPUNIT_ASSERT_EQUAL(true, configAdmin.isChanged()); } /*! * @brief isChanged()メソッドのテスト * * - activateConfigurationSet()呼出後は、isChanged()は真値となるか? */ void test_isChanged_on_activateConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // "set 1"のほうをアクティブにする CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 1")); // update()を行い、isChanged()が偽値の状態にしておく configAdmin.update(); CPPUNIT_ASSERT_EQUAL(false, configAdmin.isChanged()); // "set 2"のほうをアクティブにすると、isChanged()が真値となるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 2")); CPPUNIT_ASSERT_EQUAL(true, configAdmin.isChanged()); } void test_isChanged_on_setConfigurationSetValues() { // TODO 実装すること } /*! * @brief getActiveId()メソッドのテスト * * - アクティブ化したコンフィグレーションセットのIDを正しく取得できるか? */ void test_getActiveId() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // 初期状態では、アクティブIDは"default"のはず CPPUNIT_ASSERT_EQUAL(std::string("default"), std::string(configAdmin.getActiveId())); // "set 1"をアクティブにした後、意図どおりのアクティブIDを取得できるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 1")); CPPUNIT_ASSERT_EQUAL(std::string("set 1"), std::string(configAdmin.getActiveId())); // "set 2"をアクティブにした後、意図どおりのアクティブIDを取得できるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 2")); CPPUNIT_ASSERT_EQUAL(std::string("set 2"), std::string(configAdmin.getActiveId())); } /*! * @brief haveConfig()メソッドのテスト * * - 存在するコンフィグレーションセットIDを指定した場合に、haveConfig()で正しく真値を得るか? * - 存在しないコンフィグレーションセットIDを指定した場合に、haveConfig()で正しく偽値を得るか? */ void test_haveConfig() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("id"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); // 存在するコンフィグレーションセットIDを指定した場合に、haveConfig()で正しく真値を得るか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); // 存在しないコンフィグレーションセットIDを指定した場合に、haveConfig()で正しく偽値を得るか? CPPUNIT_ASSERT_EQUAL(false, configAdmin.haveConfig("inexist id")); } /*! * @brief isActive()メソッドのテスト * * - addConfigurationSet()呼出後は、isActive()は正しく偽値を得るか? * - activateConfigurationSet()でアクティブ化した後は、isActive()は正しく真値を得るか? */ void test_isActive_on_addConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // addConfigurationSet()呼出後は、isActive()は正しく偽値を得るか? coil::Properties configSet("id"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); CPPUNIT_ASSERT_EQUAL(false, configAdmin.isActive()); // activateConfigurationSet()でアクティブ化した後は、isActive()は正しく真値を得るか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("id")); CPPUNIT_ASSERT_EQUAL(true, configAdmin.isActive()); } /*! * @brief isActive()メソッドのテスト * * - removeConfigurationSet()呼出後は、isActive()は正しく偽値を得るか? */ void test_isActive_on_removeConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを追加してアクティブ化しておく coil::Properties configSet("id"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("id")); CPPUNIT_ASSERT_EQUAL(true, configAdmin.isActive()); // 登録されているコンフィグレーションセットをremoveConfigurationSet()で解除した場合、 // isActive()は正しく偽値を得るか? //CPPUNIT_ASSERT_EQUAL(true, configAdmin.removeConfigurationSet("id")); //CPPUNIT_ASSERT_EQUAL(false, configAdmin.isActive()); } /*! * @brief isActive()メソッドのテスト * * - activateConfigurationSet()でアクティブ化した後は、isActive()は正しく真値を得るか? */ void test_isActive_on_activateConfigurationSet() { // test_isActive_on_addConfigurationSet()で兼用 } void test_isActive_on_setConfigurationSetValues() { // TODO 実装すること } /*! * @brief getConfigurationSets()メソッドのテスト * * - 登録されている全てのコンフィグレーションセットを正しく取得できるか? */ void test_getConfigurationSets() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // 2つのパラメータ値を含むコンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); configSet1.setProperty("name 1", "1.41421356"); configSet1.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); configSet2.setProperty("name 1", "3.14159"); configSet2.setProperty("name 2", "2.71828"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // getConfigurationSets()で登録されている全てのコンフィグレーションセットを取得し、 // 登録したものと一致していることを確認する std::vector<coil::Properties*> expectedConfigSets; expectedConfigSets.push_back(&configSet1); expectedConfigSets.push_back(&configSet2); const std::vector<coil::Properties*>& configSets = configAdmin.getConfigurationSets(); CPPUNIT_ASSERT_EQUAL( std::string("1.41421356"), getPropertiesBy("set 1", configSets)->getProperty("name 1")); CPPUNIT_ASSERT_EQUAL( std::string("1.7320508"), getPropertiesBy("set 1", configSets)->getProperty("name 2")); CPPUNIT_ASSERT_EQUAL( std::string("3.14159"), getPropertiesBy("set 2", configSets)->getProperty("name 1")); CPPUNIT_ASSERT_EQUAL( std::string("2.71828"), getPropertiesBy("set 2", configSets)->getProperty("name 2")); } /*! * addConfigurationSet()メソッドとgetConfigurationSet()メソッドのテスト * * - addConfigurationSet()で、コンフィグレーションセットを追加できるか? * - getConfigurationSet()で、追加したコンフィグレーションセットを正しく取得できるか? */ void test_addConfigurationSet_and_getConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // addConfigurationSet()で、コンフィグレーションセットを追加できるか? coil::Properties configSet("id"); configSet.setProperty("key", "value"); configAdmin.addConfigurationSet(configSet); // getConfigurationSet()で、追加したコンフィグレーションセットを正しく取得できるか? const coil::Properties& configSetRet = configAdmin.getConfigurationSet("id"); CPPUNIT_ASSERT_EQUAL(std::string("value"), configSetRet.getProperty("key")); } /*! * setConfigurationSetValues()メソッドのテスト * * - 指定したプロパティが、正しく指定したコンフィグレーションセットに追加されるか? */ void test_setConfigurationSetValues() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); coil::Properties configSet1("id"); configSet1.setProperty("name 1", "1.41421356"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); // 登録済みのコンフィグレーションセットに対して、プロパティを追加する coil::Properties configSet2("id"); configSet2.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.setConfigurationSetValues(configSet2)); // 当該コンフィグレーションセットを取得して、プロパティが意図どおり追加されていることを確認する const coil::Properties& configSetRet = configAdmin.getConfigurationSet("id"); CPPUNIT_ASSERT_EQUAL(std::string("1.41421356"), configSetRet.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string("1.7320508"), configSetRet.getProperty("name 2")); } /*! * @brief setConfigurationSetValues()メソッドのテスト * * - 存在しないコンフィグレーションセットに対してプロパティ追加を試みて、意図どおり失敗するか? * - 失敗後に、登録済みのコンフィグレーションセットが影響を受けていないか? */ void test_setConfigurationSetValues_with_inexist_configuration_set() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); coil::Properties configSet1("id"); configSet1.setProperty("name 1", "1.41421356"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); // 存在しないコンフィグレーションセットに対してプロパティ追加を試みて、意図どおり失敗するか? coil::Properties configSet2("inexist id"); configSet2.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.setConfigurationSetValues(configSet2)); // 失敗後に、登録済みのコンフィグレーションセットが影響を受けていないか? const coil::Properties& configSetRet = configAdmin.getConfigurationSet("id"); CPPUNIT_ASSERT_EQUAL(std::string("1.41421356"), configSetRet.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string(""), configSetRet.getProperty("name 2")); } /*! * @brief getActiveConfigurationSet()メソッドのテスト * * - アクティブコンフィグレーションセットを正しく取得できるか? */ void test_getActiveConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); configSet1.setProperty("name 1", "1.41421356"); configSet1.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); configSet2.setProperty("name 1", "3.14159"); configSet2.setProperty("name 2", "2.71828"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // "set 1"をアクティブ化した後、アクティブコンフィグレーションセットとして正しく取得できるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 1")); const coil::Properties& activeConfigSet1 = configAdmin.getActiveConfigurationSet(); CPPUNIT_ASSERT_EQUAL(std::string("1.41421356"), activeConfigSet1.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string("1.7320508"), activeConfigSet1.getProperty("name 2")); // "set 2"をアクティブ化した後、アクティブコンフィグレーションセットとして正しく取得できるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 2")); const coil::Properties& activeConfigSet2 = configAdmin.getActiveConfigurationSet(); CPPUNIT_ASSERT_EQUAL(std::string("3.14159"), activeConfigSet2.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string("2.71828"), activeConfigSet2.getProperty("name 2")); } /*! * @brief removeConfigurationSet()のテスト * * - 登録されているコンフィグレーションセットを正しく登録解除できるか? */ void test_removeConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを追加しておく coil::Properties configSet("id"); configSet.setProperty("key", "value"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); // いったん登録したコンフィグレーションセットを登録解除する CPPUNIT_ASSERT_EQUAL(true, configAdmin.removeConfigurationSet("id")); // 当該コンフィグレーションセットが存在しないことを確認する CPPUNIT_ASSERT_EQUAL(false, configAdmin.haveConfig("id")); } /*! * @brief removeConfigurationSet()のテスト * * - 存在しないコンフィグレーションセットIDを指定した場合に、意図どおりに失敗するか? */ void test_removeConfigurationSet_with_inexist_configuration_id() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを追加しておく coil::Properties configSet("id"); configSet.setProperty("key", "value"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); // 存在しないコンフィグレーションセットIDを指定した場合に、意図どおりに失敗するか? CPPUNIT_ASSERT_EQUAL(false, configAdmin.removeConfigurationSet("inexist id")); // 登録されているコンフィグレーションセットは、元どおり存在しているか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); } void test_activateConfigurationSet() { // test_getActiveConfigurationSet()で兼ねる } /*! * @brief setOnUpdate()メソッドのテスト * * - */ void test_setOnUpdate() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnUpdateCallbackMock* cdm1 = new OnUpdateCallbackMock(); OnUpdateCallbackMock* cdm2 = new OnUpdateCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnUpdate(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onUpdateMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnUpdate(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onUpdateMock("config_id"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnUpdateParam()メソッドのテスト * * - */ void test_setOnUpdateParam() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnUpdateParamCallbackMock* cdm1 = new OnUpdateParamCallbackMock(); OnUpdateParamCallbackMock* cdm2 = new OnUpdateParamCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnUpdateParam(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onUpdateParamMock("config_id", "param1"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnUpdateParam(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onUpdateParamMock("config_id", "param2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnSetConfigurationSet()メソッドのテスト * * - */ void test_setOnSetConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); coil::Properties configSet2("config_id2"); configSet2.setProperty("config_id2.key", "value2"); OnSetConfigurationSetCallbackMock* cdm1 = new OnSetConfigurationSetCallbackMock(); OnSetConfigurationSetCallbackMock* cdm2 = new OnSetConfigurationSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnSetConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onSetConfigurationSetMock(configSet); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnSetConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onSetConfigurationSetMock(configSet2); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnAddConfigurationSet()メソッドのテスト * * - */ void test_setOnAddConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); coil::Properties configSet2("config_id2"); configSet2.setProperty("config_id2.key", "value2"); OnAddConfigurationAddCallbackMock* cdm1 = new OnAddConfigurationAddCallbackMock(); OnAddConfigurationAddCallbackMock* cdm2 = new OnAddConfigurationAddCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnAddConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onAddConfigurationSetMock(configSet); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnAddConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onAddConfigurationSetMock(configSet2); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnRemoveConfigurationSet()メソッドのテスト * * - */ void test_setOnRemoveConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnRemoveConfigurationSetCallbackMock* cdm1 = new OnRemoveConfigurationSetCallbackMock(); OnRemoveConfigurationSetCallbackMock* cdm2 = new OnRemoveConfigurationSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnRemoveConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onRemoveConfigurationSetMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnRemoveConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onRemoveConfigurationSetMock("config_id2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnActivateSet()メソッドのテスト * * - */ void test_setOnActivateSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnActivateSetCallbackMock* cdm1 = new OnActivateSetCallbackMock(); OnActivateSetCallbackMock* cdm2 = new OnActivateSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnActivateSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onActivateSetMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnActivateSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onActivateSetMock("config_id2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } }; }; // namespace ConfigAdmin /* * Register test suite */ CPPUNIT_TEST_SUITE_REGISTRATION(Config::ConfigTests); CPPUNIT_TEST_SUITE_REGISTRATION(ConfigAdmin::ConfigAdminTests); #ifdef LOCAL_MAIN int main(int argc, char* argv[]) { FORMAT format = TEXT_OUT; int target = 0; std::string xsl; std::string ns; std::string fname; std::ofstream ofs; int i(1); while (i < argc) { std::string arg(argv[i]); std::string next_arg; if (i + 1 < argc) next_arg = argv[i + 1]; else next_arg = ""; if (arg == "--text") { format = TEXT_OUT; break; } if (arg == "--xml") { if (next_arg == "") { fname = argv[0]; fname += ".xml"; } else { fname = next_arg; } format = XML_OUT; ofs.open(fname.c_str()); } if ( arg == "--compiler" ) { format = COMPILER_OUT; break; } if ( arg == "--cerr" ) { target = 1; break; } if ( arg == "--xsl" ) { if (next_arg == "") xsl = "default.xsl"; else xsl = next_arg; } if ( arg == "--namespace" ) { if (next_arg == "") { std::cerr << "no namespace specified" << std::endl; exit(1); } else { xsl = next_arg; } } ++i; } CppUnit::TextUi::TestRunner runner; if ( ns.empty() ) runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest()); else runner.addTest(CppUnit::TestFactoryRegistry::getRegistry(ns).makeTest()); CppUnit::Outputter* outputter = 0; std::ostream* stream = target ? &std::cerr : &std::cout; switch ( format ) { case TEXT_OUT : outputter = new CppUnit::TextOutputter(&runner.result(),*stream); break; case XML_OUT : std::cout << "XML_OUT" << std::endl; outputter = new CppUnit::XmlOutputter(&runner.result(), ofs, "shift_jis"); static_cast<CppUnit::XmlOutputter*>(outputter)->setStyleSheet(xsl); break; case COMPILER_OUT : outputter = new CppUnit::CompilerOutputter(&runner.result(),*stream); break; } runner.setOutputter(outputter); runner.run(); return 0; // runner.run() ? 0 : 1; } #endif // MAIN #endif // ConfigAdmin_cpp
670  configAdmin.update();
671  CPPUNIT_ASSERT_EQUAL(false, configAdmin.isChanged());
672 
673  // addConfigurationSet()を呼出す
674  coil::Properties configSet("id");
675  configSet.setProperty("key", "value");
676  CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet));
677 
678  // addConfigurationSet()呼出後は、isChanged()は真値となるか?
679  CPPUNIT_ASSERT_EQUAL(true, configAdmin.isChanged());
680  }
681 
688  {
689  coil::Properties nullProp;
690  RTC::ConfigAdmin configAdmin(nullProp);
691 
692  // addConfigurationSet()を呼出す
693  coil::Properties configSet("id");
694  configSet.setProperty("key", "value");
695  CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet));
696 
697  // update()を呼出してバインド変数と同期を行い、isChanged()が偽となる状態にする CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("id")); configAdmin.update(); CPPUNIT_ASSERT_EQUAL(false, configAdmin.isChanged()); // removeConfigurationSet()の呼出後は、isChanged()は真値となるか? //CPPUNIT_ASSERT_EQUAL(true, configAdmin.removeConfigurationSet("id")); //CPPUNIT_ASSERT_EQUAL(true, configAdmin.isChanged()); } /*! * @brief isChanged()メソッドのテスト * * - activateConfigurationSet()呼出後は、isChanged()は真値となるか? */ void test_isChanged_on_activateConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // "set 1"のほうをアクティブにする CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 1")); // update()を行い、isChanged()が偽値の状態にしておく configAdmin.update(); CPPUNIT_ASSERT_EQUAL(false, configAdmin.isChanged()); // "set 2"のほうをアクティブにすると、isChanged()が真値となるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 2")); CPPUNIT_ASSERT_EQUAL(true, configAdmin.isChanged()); } void test_isChanged_on_setConfigurationSetValues() { // TODO 実装すること } /*! * @brief getActiveId()メソッドのテスト * * - アクティブ化したコンフィグレーションセットのIDを正しく取得できるか? */ void test_getActiveId() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // 初期状態では、アクティブIDは"default"のはず CPPUNIT_ASSERT_EQUAL(std::string("default"), std::string(configAdmin.getActiveId())); // "set 1"をアクティブにした後、意図どおりのアクティブIDを取得できるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 1")); CPPUNIT_ASSERT_EQUAL(std::string("set 1"), std::string(configAdmin.getActiveId())); // "set 2"をアクティブにした後、意図どおりのアクティブIDを取得できるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 2")); CPPUNIT_ASSERT_EQUAL(std::string("set 2"), std::string(configAdmin.getActiveId())); } /*! * @brief haveConfig()メソッドのテスト * * - 存在するコンフィグレーションセットIDを指定した場合に、haveConfig()で正しく真値を得るか? * - 存在しないコンフィグレーションセットIDを指定した場合に、haveConfig()で正しく偽値を得るか? */ void test_haveConfig() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("id"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); // 存在するコンフィグレーションセットIDを指定した場合に、haveConfig()で正しく真値を得るか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); // 存在しないコンフィグレーションセットIDを指定した場合に、haveConfig()で正しく偽値を得るか? CPPUNIT_ASSERT_EQUAL(false, configAdmin.haveConfig("inexist id")); } /*! * @brief isActive()メソッドのテスト * * - addConfigurationSet()呼出後は、isActive()は正しく偽値を得るか? * - activateConfigurationSet()でアクティブ化した後は、isActive()は正しく真値を得るか? */ void test_isActive_on_addConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // addConfigurationSet()呼出後は、isActive()は正しく偽値を得るか? coil::Properties configSet("id"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); CPPUNIT_ASSERT_EQUAL(false, configAdmin.isActive()); // activateConfigurationSet()でアクティブ化した後は、isActive()は正しく真値を得るか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("id")); CPPUNIT_ASSERT_EQUAL(true, configAdmin.isActive()); } /*! * @brief isActive()メソッドのテスト * * - removeConfigurationSet()呼出後は、isActive()は正しく偽値を得るか? */ void test_isActive_on_removeConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを追加してアクティブ化しておく coil::Properties configSet("id"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("id")); CPPUNIT_ASSERT_EQUAL(true, configAdmin.isActive()); // 登録されているコンフィグレーションセットをremoveConfigurationSet()で解除した場合、 // isActive()は正しく偽値を得るか? //CPPUNIT_ASSERT_EQUAL(true, configAdmin.removeConfigurationSet("id")); //CPPUNIT_ASSERT_EQUAL(false, configAdmin.isActive()); } /*! * @brief isActive()メソッドのテスト * * - activateConfigurationSet()でアクティブ化した後は、isActive()は正しく真値を得るか? */ void test_isActive_on_activateConfigurationSet() { // test_isActive_on_addConfigurationSet()で兼用 } void test_isActive_on_setConfigurationSetValues() { // TODO 実装すること } /*! * @brief getConfigurationSets()メソッドのテスト * * - 登録されている全てのコンフィグレーションセットを正しく取得できるか? */ void test_getConfigurationSets() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // 2つのパラメータ値を含むコンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); configSet1.setProperty("name 1", "1.41421356"); configSet1.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); configSet2.setProperty("name 1", "3.14159"); configSet2.setProperty("name 2", "2.71828"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // getConfigurationSets()で登録されている全てのコンフィグレーションセットを取得し、 // 登録したものと一致していることを確認する std::vector<coil::Properties*> expectedConfigSets; expectedConfigSets.push_back(&configSet1); expectedConfigSets.push_back(&configSet2); const std::vector<coil::Properties*>& configSets = configAdmin.getConfigurationSets(); CPPUNIT_ASSERT_EQUAL( std::string("1.41421356"), getPropertiesBy("set 1", configSets)->getProperty("name 1")); CPPUNIT_ASSERT_EQUAL( std::string("1.7320508"), getPropertiesBy("set 1", configSets)->getProperty("name 2")); CPPUNIT_ASSERT_EQUAL( std::string("3.14159"), getPropertiesBy("set 2", configSets)->getProperty("name 1")); CPPUNIT_ASSERT_EQUAL( std::string("2.71828"), getPropertiesBy("set 2", configSets)->getProperty("name 2")); } /*! * addConfigurationSet()メソッドとgetConfigurationSet()メソッドのテスト * * - addConfigurationSet()で、コンフィグレーションセットを追加できるか? * - getConfigurationSet()で、追加したコンフィグレーションセットを正しく取得できるか? */ void test_addConfigurationSet_and_getConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // addConfigurationSet()で、コンフィグレーションセットを追加できるか? coil::Properties configSet("id"); configSet.setProperty("key", "value"); configAdmin.addConfigurationSet(configSet); // getConfigurationSet()で、追加したコンフィグレーションセットを正しく取得できるか? const coil::Properties& configSetRet = configAdmin.getConfigurationSet("id"); CPPUNIT_ASSERT_EQUAL(std::string("value"), configSetRet.getProperty("key")); } /*! * setConfigurationSetValues()メソッドのテスト * * - 指定したプロパティが、正しく指定したコンフィグレーションセットに追加されるか? */ void test_setConfigurationSetValues() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); coil::Properties configSet1("id"); configSet1.setProperty("name 1", "1.41421356"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); // 登録済みのコンフィグレーションセットに対して、プロパティを追加する coil::Properties configSet2("id"); configSet2.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.setConfigurationSetValues(configSet2)); // 当該コンフィグレーションセットを取得して、プロパティが意図どおり追加されていることを確認する const coil::Properties& configSetRet = configAdmin.getConfigurationSet("id"); CPPUNIT_ASSERT_EQUAL(std::string("1.41421356"), configSetRet.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string("1.7320508"), configSetRet.getProperty("name 2")); } /*! * @brief setConfigurationSetValues()メソッドのテスト * * - 存在しないコンフィグレーションセットに対してプロパティ追加を試みて、意図どおり失敗するか? * - 失敗後に、登録済みのコンフィグレーションセットが影響を受けていないか? */ void test_setConfigurationSetValues_with_inexist_configuration_set() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); coil::Properties configSet1("id"); configSet1.setProperty("name 1", "1.41421356"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); // 存在しないコンフィグレーションセットに対してプロパティ追加を試みて、意図どおり失敗するか? coil::Properties configSet2("inexist id"); configSet2.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.setConfigurationSetValues(configSet2)); // 失敗後に、登録済みのコンフィグレーションセットが影響を受けていないか? const coil::Properties& configSetRet = configAdmin.getConfigurationSet("id"); CPPUNIT_ASSERT_EQUAL(std::string("1.41421356"), configSetRet.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string(""), configSetRet.getProperty("name 2")); } /*! * @brief getActiveConfigurationSet()メソッドのテスト * * - アクティブコンフィグレーションセットを正しく取得できるか? */ void test_getActiveConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); configSet1.setProperty("name 1", "1.41421356"); configSet1.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); configSet2.setProperty("name 1", "3.14159"); configSet2.setProperty("name 2", "2.71828"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // "set 1"をアクティブ化した後、アクティブコンフィグレーションセットとして正しく取得できるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 1")); const coil::Properties& activeConfigSet1 = configAdmin.getActiveConfigurationSet(); CPPUNIT_ASSERT_EQUAL(std::string("1.41421356"), activeConfigSet1.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string("1.7320508"), activeConfigSet1.getProperty("name 2")); // "set 2"をアクティブ化した後、アクティブコンフィグレーションセットとして正しく取得できるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 2")); const coil::Properties& activeConfigSet2 = configAdmin.getActiveConfigurationSet(); CPPUNIT_ASSERT_EQUAL(std::string("3.14159"), activeConfigSet2.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string("2.71828"), activeConfigSet2.getProperty("name 2")); } /*! * @brief removeConfigurationSet()のテスト * * - 登録されているコンフィグレーションセットを正しく登録解除できるか? */ void test_removeConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを追加しておく coil::Properties configSet("id"); configSet.setProperty("key", "value"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); // いったん登録したコンフィグレーションセットを登録解除する CPPUNIT_ASSERT_EQUAL(true, configAdmin.removeConfigurationSet("id")); // 当該コンフィグレーションセットが存在しないことを確認する CPPUNIT_ASSERT_EQUAL(false, configAdmin.haveConfig("id")); } /*! * @brief removeConfigurationSet()のテスト * * - 存在しないコンフィグレーションセットIDを指定した場合に、意図どおりに失敗するか? */ void test_removeConfigurationSet_with_inexist_configuration_id() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを追加しておく coil::Properties configSet("id"); configSet.setProperty("key", "value"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); // 存在しないコンフィグレーションセットIDを指定した場合に、意図どおりに失敗するか? CPPUNIT_ASSERT_EQUAL(false, configAdmin.removeConfigurationSet("inexist id")); // 登録されているコンフィグレーションセットは、元どおり存在しているか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); } void test_activateConfigurationSet() { // test_getActiveConfigurationSet()で兼ねる } /*! * @brief setOnUpdate()メソッドのテスト * * - */ void test_setOnUpdate() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnUpdateCallbackMock* cdm1 = new OnUpdateCallbackMock(); OnUpdateCallbackMock* cdm2 = new OnUpdateCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnUpdate(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onUpdateMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnUpdate(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onUpdateMock("config_id"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnUpdateParam()メソッドのテスト * * - */ void test_setOnUpdateParam() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnUpdateParamCallbackMock* cdm1 = new OnUpdateParamCallbackMock(); OnUpdateParamCallbackMock* cdm2 = new OnUpdateParamCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnUpdateParam(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onUpdateParamMock("config_id", "param1"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnUpdateParam(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onUpdateParamMock("config_id", "param2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnSetConfigurationSet()メソッドのテスト * * - */ void test_setOnSetConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); coil::Properties configSet2("config_id2"); configSet2.setProperty("config_id2.key", "value2"); OnSetConfigurationSetCallbackMock* cdm1 = new OnSetConfigurationSetCallbackMock(); OnSetConfigurationSetCallbackMock* cdm2 = new OnSetConfigurationSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnSetConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onSetConfigurationSetMock(configSet); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnSetConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onSetConfigurationSetMock(configSet2); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnAddConfigurationSet()メソッドのテスト * * - */ void test_setOnAddConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); coil::Properties configSet2("config_id2"); configSet2.setProperty("config_id2.key", "value2"); OnAddConfigurationAddCallbackMock* cdm1 = new OnAddConfigurationAddCallbackMock(); OnAddConfigurationAddCallbackMock* cdm2 = new OnAddConfigurationAddCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnAddConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onAddConfigurationSetMock(configSet); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnAddConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onAddConfigurationSetMock(configSet2); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnRemoveConfigurationSet()メソッドのテスト * * - */ void test_setOnRemoveConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnRemoveConfigurationSetCallbackMock* cdm1 = new OnRemoveConfigurationSetCallbackMock(); OnRemoveConfigurationSetCallbackMock* cdm2 = new OnRemoveConfigurationSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnRemoveConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onRemoveConfigurationSetMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnRemoveConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onRemoveConfigurationSetMock("config_id2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnActivateSet()メソッドのテスト * * - */ void test_setOnActivateSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnActivateSetCallbackMock* cdm1 = new OnActivateSetCallbackMock(); OnActivateSetCallbackMock* cdm2 = new OnActivateSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnActivateSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onActivateSetMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnActivateSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onActivateSetMock("config_id2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } }; }; // namespace ConfigAdmin /* * Register test suite */ CPPUNIT_TEST_SUITE_REGISTRATION(Config::ConfigTests); CPPUNIT_TEST_SUITE_REGISTRATION(ConfigAdmin::ConfigAdminTests); #ifdef LOCAL_MAIN int main(int argc, char* argv[]) { FORMAT format = TEXT_OUT; int target = 0; std::string xsl; std::string ns; std::string fname; std::ofstream ofs; int i(1); while (i < argc) { std::string arg(argv[i]); std::string next_arg; if (i + 1 < argc) next_arg = argv[i + 1]; else next_arg = ""; if (arg == "--text") { format = TEXT_OUT; break; } if (arg == "--xml") { if (next_arg == "") { fname = argv[0]; fname += ".xml"; } else { fname = next_arg; } format = XML_OUT; ofs.open(fname.c_str()); } if ( arg == "--compiler" ) { format = COMPILER_OUT; break; } if ( arg == "--cerr" ) { target = 1; break; } if ( arg == "--xsl" ) { if (next_arg == "") xsl = "default.xsl"; else xsl = next_arg; } if ( arg == "--namespace" ) { if (next_arg == "") { std::cerr << "no namespace specified" << std::endl; exit(1); } else { xsl = next_arg; } } ++i; } CppUnit::TextUi::TestRunner runner; if ( ns.empty() ) runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest()); else runner.addTest(CppUnit::TestFactoryRegistry::getRegistry(ns).makeTest()); CppUnit::Outputter* outputter = 0; std::ostream* stream = target ? &std::cerr : &std::cout; switch ( format ) { case TEXT_OUT : outputter = new CppUnit::TextOutputter(&runner.result(),*stream); break; case XML_OUT : std::cout << "XML_OUT" << std::endl; outputter = new CppUnit::XmlOutputter(&runner.result(), ofs, "shift_jis"); static_cast<CppUnit::XmlOutputter*>(outputter)->setStyleSheet(xsl); break; case COMPILER_OUT : outputter = new CppUnit::CompilerOutputter(&runner.result(),*stream); break; } runner.setOutputter(outputter); runner.run(); return 0; // runner.run() ? 0 : 1; } #endif // MAIN #endif // ConfigAdmin_cpp
698  CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("id"));
699  configAdmin.update();
700  CPPUNIT_ASSERT_EQUAL(false, configAdmin.isChanged());
701 
702  // removeConfigurationSet()の呼出後は、isChanged()は真値となるか?
703  //CPPUNIT_ASSERT_EQUAL(true, configAdmin.removeConfigurationSet("id"));
704  //CPPUNIT_ASSERT_EQUAL(true, configAdmin.isChanged());
705  }
706 
713  {
714  coil::Properties nullProp;
715  RTC::ConfigAdmin configAdmin(nullProp);
716 
717  // コンフィグレーションセットを準備し、追加しておく
718  coil::Properties configSet1("set 1");
719  CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1));
720 
721  coil::Properties configSet2("set 2");
722  CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2));
723 
724  // "set 1"のほうをアクティブにする CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 1")); // update()を行い、isChanged()が偽値の状態にしておく configAdmin.update(); CPPUNIT_ASSERT_EQUAL(false, configAdmin.isChanged()); // "set 2"のほうをアクティブにすると、isChanged()が真値となるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 2")); CPPUNIT_ASSERT_EQUAL(true, configAdmin.isChanged()); } void test_isChanged_on_setConfigurationSetValues() { // TODO 実装すること } /*! * @brief getActiveId()メソッドのテスト * * - アクティブ化したコンフィグレーションセットのIDを正しく取得できるか? */ void test_getActiveId() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // 初期状態では、アクティブIDは"default"のはず CPPUNIT_ASSERT_EQUAL(std::string("default"), std::string(configAdmin.getActiveId())); // "set 1"をアクティブにした後、意図どおりのアクティブIDを取得できるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 1")); CPPUNIT_ASSERT_EQUAL(std::string("set 1"), std::string(configAdmin.getActiveId())); // "set 2"をアクティブにした後、意図どおりのアクティブIDを取得できるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 2")); CPPUNIT_ASSERT_EQUAL(std::string("set 2"), std::string(configAdmin.getActiveId())); } /*! * @brief haveConfig()メソッドのテスト * * - 存在するコンフィグレーションセットIDを指定した場合に、haveConfig()で正しく真値を得るか? * - 存在しないコンフィグレーションセットIDを指定した場合に、haveConfig()で正しく偽値を得るか? */ void test_haveConfig() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("id"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); // 存在するコンフィグレーションセットIDを指定した場合に、haveConfig()で正しく真値を得るか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); // 存在しないコンフィグレーションセットIDを指定した場合に、haveConfig()で正しく偽値を得るか? CPPUNIT_ASSERT_EQUAL(false, configAdmin.haveConfig("inexist id")); } /*! * @brief isActive()メソッドのテスト * * - addConfigurationSet()呼出後は、isActive()は正しく偽値を得るか? * - activateConfigurationSet()でアクティブ化した後は、isActive()は正しく真値を得るか? */ void test_isActive_on_addConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // addConfigurationSet()呼出後は、isActive()は正しく偽値を得るか? coil::Properties configSet("id"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); CPPUNIT_ASSERT_EQUAL(false, configAdmin.isActive()); // activateConfigurationSet()でアクティブ化した後は、isActive()は正しく真値を得るか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("id")); CPPUNIT_ASSERT_EQUAL(true, configAdmin.isActive()); } /*! * @brief isActive()メソッドのテスト * * - removeConfigurationSet()呼出後は、isActive()は正しく偽値を得るか? */ void test_isActive_on_removeConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを追加してアクティブ化しておく coil::Properties configSet("id"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("id")); CPPUNIT_ASSERT_EQUAL(true, configAdmin.isActive()); // 登録されているコンフィグレーションセットをremoveConfigurationSet()で解除した場合、 // isActive()は正しく偽値を得るか? //CPPUNIT_ASSERT_EQUAL(true, configAdmin.removeConfigurationSet("id")); //CPPUNIT_ASSERT_EQUAL(false, configAdmin.isActive()); } /*! * @brief isActive()メソッドのテスト * * - activateConfigurationSet()でアクティブ化した後は、isActive()は正しく真値を得るか? */ void test_isActive_on_activateConfigurationSet() { // test_isActive_on_addConfigurationSet()で兼用 } void test_isActive_on_setConfigurationSetValues() { // TODO 実装すること } /*! * @brief getConfigurationSets()メソッドのテスト * * - 登録されている全てのコンフィグレーションセットを正しく取得できるか? */ void test_getConfigurationSets() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // 2つのパラメータ値を含むコンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); configSet1.setProperty("name 1", "1.41421356"); configSet1.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); configSet2.setProperty("name 1", "3.14159"); configSet2.setProperty("name 2", "2.71828"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // getConfigurationSets()で登録されている全てのコンフィグレーションセットを取得し、 // 登録したものと一致していることを確認する std::vector<coil::Properties*> expectedConfigSets; expectedConfigSets.push_back(&configSet1); expectedConfigSets.push_back(&configSet2); const std::vector<coil::Properties*>& configSets = configAdmin.getConfigurationSets(); CPPUNIT_ASSERT_EQUAL( std::string("1.41421356"), getPropertiesBy("set 1", configSets)->getProperty("name 1")); CPPUNIT_ASSERT_EQUAL( std::string("1.7320508"), getPropertiesBy("set 1", configSets)->getProperty("name 2")); CPPUNIT_ASSERT_EQUAL( std::string("3.14159"), getPropertiesBy("set 2", configSets)->getProperty("name 1")); CPPUNIT_ASSERT_EQUAL( std::string("2.71828"), getPropertiesBy("set 2", configSets)->getProperty("name 2")); } /*! * addConfigurationSet()メソッドとgetConfigurationSet()メソッドのテスト * * - addConfigurationSet()で、コンフィグレーションセットを追加できるか? * - getConfigurationSet()で、追加したコンフィグレーションセットを正しく取得できるか? */ void test_addConfigurationSet_and_getConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // addConfigurationSet()で、コンフィグレーションセットを追加できるか? coil::Properties configSet("id"); configSet.setProperty("key", "value"); configAdmin.addConfigurationSet(configSet); // getConfigurationSet()で、追加したコンフィグレーションセットを正しく取得できるか? const coil::Properties& configSetRet = configAdmin.getConfigurationSet("id"); CPPUNIT_ASSERT_EQUAL(std::string("value"), configSetRet.getProperty("key")); } /*! * setConfigurationSetValues()メソッドのテスト * * - 指定したプロパティが、正しく指定したコンフィグレーションセットに追加されるか? */ void test_setConfigurationSetValues() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); coil::Properties configSet1("id"); configSet1.setProperty("name 1", "1.41421356"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); // 登録済みのコンフィグレーションセットに対して、プロパティを追加する coil::Properties configSet2("id"); configSet2.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.setConfigurationSetValues(configSet2)); // 当該コンフィグレーションセットを取得して、プロパティが意図どおり追加されていることを確認する const coil::Properties& configSetRet = configAdmin.getConfigurationSet("id"); CPPUNIT_ASSERT_EQUAL(std::string("1.41421356"), configSetRet.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string("1.7320508"), configSetRet.getProperty("name 2")); } /*! * @brief setConfigurationSetValues()メソッドのテスト * * - 存在しないコンフィグレーションセットに対してプロパティ追加を試みて、意図どおり失敗するか? * - 失敗後に、登録済みのコンフィグレーションセットが影響を受けていないか? */ void test_setConfigurationSetValues_with_inexist_configuration_set() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); coil::Properties configSet1("id"); configSet1.setProperty("name 1", "1.41421356"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); // 存在しないコンフィグレーションセットに対してプロパティ追加を試みて、意図どおり失敗するか? coil::Properties configSet2("inexist id"); configSet2.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.setConfigurationSetValues(configSet2)); // 失敗後に、登録済みのコンフィグレーションセットが影響を受けていないか? const coil::Properties& configSetRet = configAdmin.getConfigurationSet("id"); CPPUNIT_ASSERT_EQUAL(std::string("1.41421356"), configSetRet.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string(""), configSetRet.getProperty("name 2")); } /*! * @brief getActiveConfigurationSet()メソッドのテスト * * - アクティブコンフィグレーションセットを正しく取得できるか? */ void test_getActiveConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); configSet1.setProperty("name 1", "1.41421356"); configSet1.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); configSet2.setProperty("name 1", "3.14159"); configSet2.setProperty("name 2", "2.71828"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // "set 1"をアクティブ化した後、アクティブコンフィグレーションセットとして正しく取得できるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 1")); const coil::Properties& activeConfigSet1 = configAdmin.getActiveConfigurationSet(); CPPUNIT_ASSERT_EQUAL(std::string("1.41421356"), activeConfigSet1.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string("1.7320508"), activeConfigSet1.getProperty("name 2")); // "set 2"をアクティブ化した後、アクティブコンフィグレーションセットとして正しく取得できるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 2")); const coil::Properties& activeConfigSet2 = configAdmin.getActiveConfigurationSet(); CPPUNIT_ASSERT_EQUAL(std::string("3.14159"), activeConfigSet2.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string("2.71828"), activeConfigSet2.getProperty("name 2")); } /*! * @brief removeConfigurationSet()のテスト * * - 登録されているコンフィグレーションセットを正しく登録解除できるか? */ void test_removeConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを追加しておく coil::Properties configSet("id"); configSet.setProperty("key", "value"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); // いったん登録したコンフィグレーションセットを登録解除する CPPUNIT_ASSERT_EQUAL(true, configAdmin.removeConfigurationSet("id")); // 当該コンフィグレーションセットが存在しないことを確認する CPPUNIT_ASSERT_EQUAL(false, configAdmin.haveConfig("id")); } /*! * @brief removeConfigurationSet()のテスト * * - 存在しないコンフィグレーションセットIDを指定した場合に、意図どおりに失敗するか? */ void test_removeConfigurationSet_with_inexist_configuration_id() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを追加しておく coil::Properties configSet("id"); configSet.setProperty("key", "value"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); // 存在しないコンフィグレーションセットIDを指定した場合に、意図どおりに失敗するか? CPPUNIT_ASSERT_EQUAL(false, configAdmin.removeConfigurationSet("inexist id")); // 登録されているコンフィグレーションセットは、元どおり存在しているか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); } void test_activateConfigurationSet() { // test_getActiveConfigurationSet()で兼ねる } /*! * @brief setOnUpdate()メソッドのテスト * * - */ void test_setOnUpdate() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnUpdateCallbackMock* cdm1 = new OnUpdateCallbackMock(); OnUpdateCallbackMock* cdm2 = new OnUpdateCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnUpdate(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onUpdateMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnUpdate(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onUpdateMock("config_id"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnUpdateParam()メソッドのテスト * * - */ void test_setOnUpdateParam() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnUpdateParamCallbackMock* cdm1 = new OnUpdateParamCallbackMock(); OnUpdateParamCallbackMock* cdm2 = new OnUpdateParamCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnUpdateParam(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onUpdateParamMock("config_id", "param1"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnUpdateParam(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onUpdateParamMock("config_id", "param2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnSetConfigurationSet()メソッドのテスト * * - */ void test_setOnSetConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); coil::Properties configSet2("config_id2"); configSet2.setProperty("config_id2.key", "value2"); OnSetConfigurationSetCallbackMock* cdm1 = new OnSetConfigurationSetCallbackMock(); OnSetConfigurationSetCallbackMock* cdm2 = new OnSetConfigurationSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnSetConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onSetConfigurationSetMock(configSet); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnSetConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onSetConfigurationSetMock(configSet2); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnAddConfigurationSet()メソッドのテスト * * - */ void test_setOnAddConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); coil::Properties configSet2("config_id2"); configSet2.setProperty("config_id2.key", "value2"); OnAddConfigurationAddCallbackMock* cdm1 = new OnAddConfigurationAddCallbackMock(); OnAddConfigurationAddCallbackMock* cdm2 = new OnAddConfigurationAddCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnAddConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onAddConfigurationSetMock(configSet); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnAddConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onAddConfigurationSetMock(configSet2); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnRemoveConfigurationSet()メソッドのテスト * * - */ void test_setOnRemoveConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnRemoveConfigurationSetCallbackMock* cdm1 = new OnRemoveConfigurationSetCallbackMock(); OnRemoveConfigurationSetCallbackMock* cdm2 = new OnRemoveConfigurationSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnRemoveConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onRemoveConfigurationSetMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnRemoveConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onRemoveConfigurationSetMock("config_id2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnActivateSet()メソッドのテスト * * - */ void test_setOnActivateSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnActivateSetCallbackMock* cdm1 = new OnActivateSetCallbackMock(); OnActivateSetCallbackMock* cdm2 = new OnActivateSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnActivateSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onActivateSetMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnActivateSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onActivateSetMock("config_id2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } }; }; // namespace ConfigAdmin /* * Register test suite */ CPPUNIT_TEST_SUITE_REGISTRATION(Config::ConfigTests); CPPUNIT_TEST_SUITE_REGISTRATION(ConfigAdmin::ConfigAdminTests); #ifdef LOCAL_MAIN int main(int argc, char* argv[]) { FORMAT format = TEXT_OUT; int target = 0; std::string xsl; std::string ns; std::string fname; std::ofstream ofs; int i(1); while (i < argc) { std::string arg(argv[i]); std::string next_arg; if (i + 1 < argc) next_arg = argv[i + 1]; else next_arg = ""; if (arg == "--text") { format = TEXT_OUT; break; } if (arg == "--xml") { if (next_arg == "") { fname = argv[0]; fname += ".xml"; } else { fname = next_arg; } format = XML_OUT; ofs.open(fname.c_str()); } if ( arg == "--compiler" ) { format = COMPILER_OUT; break; } if ( arg == "--cerr" ) { target = 1; break; } if ( arg == "--xsl" ) { if (next_arg == "") xsl = "default.xsl"; else xsl = next_arg; } if ( arg == "--namespace" ) { if (next_arg == "") { std::cerr << "no namespace specified" << std::endl; exit(1); } else { xsl = next_arg; } } ++i; } CppUnit::TextUi::TestRunner runner; if ( ns.empty() ) runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest()); else runner.addTest(CppUnit::TestFactoryRegistry::getRegistry(ns).makeTest()); CppUnit::Outputter* outputter = 0; std::ostream* stream = target ? &std::cerr : &std::cout; switch ( format ) { case TEXT_OUT : outputter = new CppUnit::TextOutputter(&runner.result(),*stream); break; case XML_OUT : std::cout << "XML_OUT" << std::endl; outputter = new CppUnit::XmlOutputter(&runner.result(), ofs, "shift_jis"); static_cast<CppUnit::XmlOutputter*>(outputter)->setStyleSheet(xsl); break; case COMPILER_OUT : outputter = new CppUnit::CompilerOutputter(&runner.result(),*stream); break; } runner.setOutputter(outputter); runner.run(); return 0; // runner.run() ? 0 : 1; } #endif // MAIN #endif // ConfigAdmin_cpp
725  CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 1"));
726 
727  // update()を行い、isChanged()が偽値の状態にしておく
728  configAdmin.update();
729  CPPUNIT_ASSERT_EQUAL(false, configAdmin.isChanged());
730 
731  // "set 2"のほうをアクティブにすると、isChanged()が真値となるか?
732  CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 2"));
733  CPPUNIT_ASSERT_EQUAL(true, configAdmin.isChanged());
734  }
735 
737  {
738  // TODO 実装すること } /*! * @brief getActiveId()メソッドのテスト * * - アクティブ化したコンフィグレーションセットのIDを正しく取得できるか? */ void test_getActiveId() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // 初期状態では、アクティブIDは"default"のはず CPPUNIT_ASSERT_EQUAL(std::string("default"), std::string(configAdmin.getActiveId())); // "set 1"をアクティブにした後、意図どおりのアクティブIDを取得できるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 1")); CPPUNIT_ASSERT_EQUAL(std::string("set 1"), std::string(configAdmin.getActiveId())); // "set 2"をアクティブにした後、意図どおりのアクティブIDを取得できるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 2")); CPPUNIT_ASSERT_EQUAL(std::string("set 2"), std::string(configAdmin.getActiveId())); } /*! * @brief haveConfig()メソッドのテスト * * - 存在するコンフィグレーションセットIDを指定した場合に、haveConfig()で正しく真値を得るか? * - 存在しないコンフィグレーションセットIDを指定した場合に、haveConfig()で正しく偽値を得るか? */ void test_haveConfig() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("id"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); // 存在するコンフィグレーションセットIDを指定した場合に、haveConfig()で正しく真値を得るか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); // 存在しないコンフィグレーションセットIDを指定した場合に、haveConfig()で正しく偽値を得るか? CPPUNIT_ASSERT_EQUAL(false, configAdmin.haveConfig("inexist id")); } /*! * @brief isActive()メソッドのテスト * * - addConfigurationSet()呼出後は、isActive()は正しく偽値を得るか? * - activateConfigurationSet()でアクティブ化した後は、isActive()は正しく真値を得るか? */ void test_isActive_on_addConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // addConfigurationSet()呼出後は、isActive()は正しく偽値を得るか? coil::Properties configSet("id"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); CPPUNIT_ASSERT_EQUAL(false, configAdmin.isActive()); // activateConfigurationSet()でアクティブ化した後は、isActive()は正しく真値を得るか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("id")); CPPUNIT_ASSERT_EQUAL(true, configAdmin.isActive()); } /*! * @brief isActive()メソッドのテスト * * - removeConfigurationSet()呼出後は、isActive()は正しく偽値を得るか? */ void test_isActive_on_removeConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを追加してアクティブ化しておく coil::Properties configSet("id"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("id")); CPPUNIT_ASSERT_EQUAL(true, configAdmin.isActive()); // 登録されているコンフィグレーションセットをremoveConfigurationSet()で解除した場合、 // isActive()は正しく偽値を得るか? //CPPUNIT_ASSERT_EQUAL(true, configAdmin.removeConfigurationSet("id")); //CPPUNIT_ASSERT_EQUAL(false, configAdmin.isActive()); } /*! * @brief isActive()メソッドのテスト * * - activateConfigurationSet()でアクティブ化した後は、isActive()は正しく真値を得るか? */ void test_isActive_on_activateConfigurationSet() { // test_isActive_on_addConfigurationSet()で兼用 } void test_isActive_on_setConfigurationSetValues() { // TODO 実装すること } /*! * @brief getConfigurationSets()メソッドのテスト * * - 登録されている全てのコンフィグレーションセットを正しく取得できるか? */ void test_getConfigurationSets() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // 2つのパラメータ値を含むコンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); configSet1.setProperty("name 1", "1.41421356"); configSet1.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); configSet2.setProperty("name 1", "3.14159"); configSet2.setProperty("name 2", "2.71828"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // getConfigurationSets()で登録されている全てのコンフィグレーションセットを取得し、 // 登録したものと一致していることを確認する std::vector<coil::Properties*> expectedConfigSets; expectedConfigSets.push_back(&configSet1); expectedConfigSets.push_back(&configSet2); const std::vector<coil::Properties*>& configSets = configAdmin.getConfigurationSets(); CPPUNIT_ASSERT_EQUAL( std::string("1.41421356"), getPropertiesBy("set 1", configSets)->getProperty("name 1")); CPPUNIT_ASSERT_EQUAL( std::string("1.7320508"), getPropertiesBy("set 1", configSets)->getProperty("name 2")); CPPUNIT_ASSERT_EQUAL( std::string("3.14159"), getPropertiesBy("set 2", configSets)->getProperty("name 1")); CPPUNIT_ASSERT_EQUAL( std::string("2.71828"), getPropertiesBy("set 2", configSets)->getProperty("name 2")); } /*! * addConfigurationSet()メソッドとgetConfigurationSet()メソッドのテスト * * - addConfigurationSet()で、コンフィグレーションセットを追加できるか? * - getConfigurationSet()で、追加したコンフィグレーションセットを正しく取得できるか? */ void test_addConfigurationSet_and_getConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // addConfigurationSet()で、コンフィグレーションセットを追加できるか? coil::Properties configSet("id"); configSet.setProperty("key", "value"); configAdmin.addConfigurationSet(configSet); // getConfigurationSet()で、追加したコンフィグレーションセットを正しく取得できるか? const coil::Properties& configSetRet = configAdmin.getConfigurationSet("id"); CPPUNIT_ASSERT_EQUAL(std::string("value"), configSetRet.getProperty("key")); } /*! * setConfigurationSetValues()メソッドのテスト * * - 指定したプロパティが、正しく指定したコンフィグレーションセットに追加されるか? */ void test_setConfigurationSetValues() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); coil::Properties configSet1("id"); configSet1.setProperty("name 1", "1.41421356"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); // 登録済みのコンフィグレーションセットに対して、プロパティを追加する coil::Properties configSet2("id"); configSet2.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.setConfigurationSetValues(configSet2)); // 当該コンフィグレーションセットを取得して、プロパティが意図どおり追加されていることを確認する const coil::Properties& configSetRet = configAdmin.getConfigurationSet("id"); CPPUNIT_ASSERT_EQUAL(std::string("1.41421356"), configSetRet.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string("1.7320508"), configSetRet.getProperty("name 2")); } /*! * @brief setConfigurationSetValues()メソッドのテスト * * - 存在しないコンフィグレーションセットに対してプロパティ追加を試みて、意図どおり失敗するか? * - 失敗後に、登録済みのコンフィグレーションセットが影響を受けていないか? */ void test_setConfigurationSetValues_with_inexist_configuration_set() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); coil::Properties configSet1("id"); configSet1.setProperty("name 1", "1.41421356"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); // 存在しないコンフィグレーションセットに対してプロパティ追加を試みて、意図どおり失敗するか? coil::Properties configSet2("inexist id"); configSet2.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.setConfigurationSetValues(configSet2)); // 失敗後に、登録済みのコンフィグレーションセットが影響を受けていないか? const coil::Properties& configSetRet = configAdmin.getConfigurationSet("id"); CPPUNIT_ASSERT_EQUAL(std::string("1.41421356"), configSetRet.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string(""), configSetRet.getProperty("name 2")); } /*! * @brief getActiveConfigurationSet()メソッドのテスト * * - アクティブコンフィグレーションセットを正しく取得できるか? */ void test_getActiveConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); configSet1.setProperty("name 1", "1.41421356"); configSet1.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); configSet2.setProperty("name 1", "3.14159"); configSet2.setProperty("name 2", "2.71828"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // "set 1"をアクティブ化した後、アクティブコンフィグレーションセットとして正しく取得できるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 1")); const coil::Properties& activeConfigSet1 = configAdmin.getActiveConfigurationSet(); CPPUNIT_ASSERT_EQUAL(std::string("1.41421356"), activeConfigSet1.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string("1.7320508"), activeConfigSet1.getProperty("name 2")); // "set 2"をアクティブ化した後、アクティブコンフィグレーションセットとして正しく取得できるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 2")); const coil::Properties& activeConfigSet2 = configAdmin.getActiveConfigurationSet(); CPPUNIT_ASSERT_EQUAL(std::string("3.14159"), activeConfigSet2.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string("2.71828"), activeConfigSet2.getProperty("name 2")); } /*! * @brief removeConfigurationSet()のテスト * * - 登録されているコンフィグレーションセットを正しく登録解除できるか? */ void test_removeConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを追加しておく coil::Properties configSet("id"); configSet.setProperty("key", "value"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); // いったん登録したコンフィグレーションセットを登録解除する CPPUNIT_ASSERT_EQUAL(true, configAdmin.removeConfigurationSet("id")); // 当該コンフィグレーションセットが存在しないことを確認する CPPUNIT_ASSERT_EQUAL(false, configAdmin.haveConfig("id")); } /*! * @brief removeConfigurationSet()のテスト * * - 存在しないコンフィグレーションセットIDを指定した場合に、意図どおりに失敗するか? */ void test_removeConfigurationSet_with_inexist_configuration_id() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを追加しておく coil::Properties configSet("id"); configSet.setProperty("key", "value"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); // 存在しないコンフィグレーションセットIDを指定した場合に、意図どおりに失敗するか? CPPUNIT_ASSERT_EQUAL(false, configAdmin.removeConfigurationSet("inexist id")); // 登録されているコンフィグレーションセットは、元どおり存在しているか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); } void test_activateConfigurationSet() { // test_getActiveConfigurationSet()で兼ねる } /*! * @brief setOnUpdate()メソッドのテスト * * - */ void test_setOnUpdate() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnUpdateCallbackMock* cdm1 = new OnUpdateCallbackMock(); OnUpdateCallbackMock* cdm2 = new OnUpdateCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnUpdate(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onUpdateMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnUpdate(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onUpdateMock("config_id"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnUpdateParam()メソッドのテスト * * - */ void test_setOnUpdateParam() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnUpdateParamCallbackMock* cdm1 = new OnUpdateParamCallbackMock(); OnUpdateParamCallbackMock* cdm2 = new OnUpdateParamCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnUpdateParam(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onUpdateParamMock("config_id", "param1"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnUpdateParam(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onUpdateParamMock("config_id", "param2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnSetConfigurationSet()メソッドのテスト * * - */ void test_setOnSetConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); coil::Properties configSet2("config_id2"); configSet2.setProperty("config_id2.key", "value2"); OnSetConfigurationSetCallbackMock* cdm1 = new OnSetConfigurationSetCallbackMock(); OnSetConfigurationSetCallbackMock* cdm2 = new OnSetConfigurationSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnSetConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onSetConfigurationSetMock(configSet); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnSetConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onSetConfigurationSetMock(configSet2); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnAddConfigurationSet()メソッドのテスト * * - */ void test_setOnAddConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); coil::Properties configSet2("config_id2"); configSet2.setProperty("config_id2.key", "value2"); OnAddConfigurationAddCallbackMock* cdm1 = new OnAddConfigurationAddCallbackMock(); OnAddConfigurationAddCallbackMock* cdm2 = new OnAddConfigurationAddCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnAddConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onAddConfigurationSetMock(configSet); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnAddConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onAddConfigurationSetMock(configSet2); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnRemoveConfigurationSet()メソッドのテスト * * - */ void test_setOnRemoveConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnRemoveConfigurationSetCallbackMock* cdm1 = new OnRemoveConfigurationSetCallbackMock(); OnRemoveConfigurationSetCallbackMock* cdm2 = new OnRemoveConfigurationSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnRemoveConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onRemoveConfigurationSetMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnRemoveConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onRemoveConfigurationSetMock("config_id2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnActivateSet()メソッドのテスト * * - */ void test_setOnActivateSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnActivateSetCallbackMock* cdm1 = new OnActivateSetCallbackMock(); OnActivateSetCallbackMock* cdm2 = new OnActivateSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnActivateSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onActivateSetMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnActivateSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onActivateSetMock("config_id2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } }; }; // namespace ConfigAdmin /* * Register test suite */ CPPUNIT_TEST_SUITE_REGISTRATION(Config::ConfigTests); CPPUNIT_TEST_SUITE_REGISTRATION(ConfigAdmin::ConfigAdminTests); #ifdef LOCAL_MAIN int main(int argc, char* argv[]) { FORMAT format = TEXT_OUT; int target = 0; std::string xsl; std::string ns; std::string fname; std::ofstream ofs; int i(1); while (i < argc) { std::string arg(argv[i]); std::string next_arg; if (i + 1 < argc) next_arg = argv[i + 1]; else next_arg = ""; if (arg == "--text") { format = TEXT_OUT; break; } if (arg == "--xml") { if (next_arg == "") { fname = argv[0]; fname += ".xml"; } else { fname = next_arg; } format = XML_OUT; ofs.open(fname.c_str()); } if ( arg == "--compiler" ) { format = COMPILER_OUT; break; } if ( arg == "--cerr" ) { target = 1; break; } if ( arg == "--xsl" ) { if (next_arg == "") xsl = "default.xsl"; else xsl = next_arg; } if ( arg == "--namespace" ) { if (next_arg == "") { std::cerr << "no namespace specified" << std::endl; exit(1); } else { xsl = next_arg; } } ++i; } CppUnit::TextUi::TestRunner runner; if ( ns.empty() ) runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest()); else runner.addTest(CppUnit::TestFactoryRegistry::getRegistry(ns).makeTest()); CppUnit::Outputter* outputter = 0; std::ostream* stream = target ? &std::cerr : &std::cout; switch ( format ) { case TEXT_OUT : outputter = new CppUnit::TextOutputter(&runner.result(),*stream); break; case XML_OUT : std::cout << "XML_OUT" << std::endl; outputter = new CppUnit::XmlOutputter(&runner.result(), ofs, "shift_jis"); static_cast<CppUnit::XmlOutputter*>(outputter)->setStyleSheet(xsl); break; case COMPILER_OUT : outputter = new CppUnit::CompilerOutputter(&runner.result(),*stream); break; } runner.setOutputter(outputter); runner.run(); return 0; // runner.run() ? 0 : 1; } #endif // MAIN #endif // ConfigAdmin_cpp
739  }
740 
747  {
748  coil::Properties nullProp;
749  RTC::ConfigAdmin configAdmin(nullProp);
750 
751  // コンフィグレーションセットを準備し、追加しておく
752  coil::Properties configSet1("set 1");
753  CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1));
754 
755  coil::Properties configSet2("set 2");
756  CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2));
757 
758  // 初期状態では、アクティブIDは"default"のはず
759  CPPUNIT_ASSERT_EQUAL(std::string("default"), std::string(configAdmin.getActiveId()));
760 
761  // "set 1"をアクティブにした後、意図どおりのアクティブIDを取得できるか?
762  CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 1"));
763  CPPUNIT_ASSERT_EQUAL(std::string("set 1"), std::string(configAdmin.getActiveId()));
764 
765  // "set 2"をアクティブにした後、意図どおりのアクティブIDを取得できるか?
766  CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 2"));
767  CPPUNIT_ASSERT_EQUAL(std::string("set 2"), std::string(configAdmin.getActiveId()));
768  }
769 
777  {
778  coil::Properties nullProp;
779  RTC::ConfigAdmin configAdmin(nullProp);
780 
781  // コンフィグレーションセットを準備し、追加しておく
782  coil::Properties configSet1("id");
783  CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1));
784 
785  // 存在するコンフィグレーションセットIDを指定した場合に、haveConfig()で正しく真値を得るか?
786  CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id"));
787 
788  // 存在しないコンフィグレーションセットIDを指定した場合に、haveConfig()で正しく偽値を得るか?
789  CPPUNIT_ASSERT_EQUAL(false, configAdmin.haveConfig("inexist id"));
790  }
791 
799  {
800  coil::Properties nullProp;
801  RTC::ConfigAdmin configAdmin(nullProp);
802 
803  // addConfigurationSet()呼出後は、isActive()は正しく偽値を得るか?
804  coil::Properties configSet("id");
805  CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet));
806  CPPUNIT_ASSERT_EQUAL(false, configAdmin.isActive());
807 
808  // activateConfigurationSet()でアクティブ化した後は、isActive()は正しく真値を得るか?
809  CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("id"));
810  CPPUNIT_ASSERT_EQUAL(true, configAdmin.isActive());
811  }
812 
819  {
820  coil::Properties nullProp;
821  RTC::ConfigAdmin configAdmin(nullProp);
822 
823  // コンフィグレーションセットを追加してアクティブ化しておく
824  coil::Properties configSet("id");
825  CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet));
826  CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("id"));
827  CPPUNIT_ASSERT_EQUAL(true, configAdmin.isActive());
828 
829  // 登録されているコンフィグレーションセットをremoveConfigurationSet()で解除した場合、
830  // isActive()は正しく偽値を得るか?
831  //CPPUNIT_ASSERT_EQUAL(true, configAdmin.removeConfigurationSet("id"));
832  //CPPUNIT_ASSERT_EQUAL(false, configAdmin.isActive());
833  }
834 
841  {
842  // test_isActive_on_addConfigurationSet()で兼用 } void test_isActive_on_setConfigurationSetValues() { // TODO 実装すること } /*! * @brief getConfigurationSets()メソッドのテスト * * - 登録されている全てのコンフィグレーションセットを正しく取得できるか? */ void test_getConfigurationSets() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // 2つのパラメータ値を含むコンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); configSet1.setProperty("name 1", "1.41421356"); configSet1.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); configSet2.setProperty("name 1", "3.14159"); configSet2.setProperty("name 2", "2.71828"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // getConfigurationSets()で登録されている全てのコンフィグレーションセットを取得し、 // 登録したものと一致していることを確認する std::vector<coil::Properties*> expectedConfigSets; expectedConfigSets.push_back(&configSet1); expectedConfigSets.push_back(&configSet2); const std::vector<coil::Properties*>& configSets = configAdmin.getConfigurationSets(); CPPUNIT_ASSERT_EQUAL( std::string("1.41421356"), getPropertiesBy("set 1", configSets)->getProperty("name 1")); CPPUNIT_ASSERT_EQUAL( std::string("1.7320508"), getPropertiesBy("set 1", configSets)->getProperty("name 2")); CPPUNIT_ASSERT_EQUAL( std::string("3.14159"), getPropertiesBy("set 2", configSets)->getProperty("name 1")); CPPUNIT_ASSERT_EQUAL( std::string("2.71828"), getPropertiesBy("set 2", configSets)->getProperty("name 2")); } /*! * addConfigurationSet()メソッドとgetConfigurationSet()メソッドのテスト * * - addConfigurationSet()で、コンフィグレーションセットを追加できるか? * - getConfigurationSet()で、追加したコンフィグレーションセットを正しく取得できるか? */ void test_addConfigurationSet_and_getConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // addConfigurationSet()で、コンフィグレーションセットを追加できるか? coil::Properties configSet("id"); configSet.setProperty("key", "value"); configAdmin.addConfigurationSet(configSet); // getConfigurationSet()で、追加したコンフィグレーションセットを正しく取得できるか? const coil::Properties& configSetRet = configAdmin.getConfigurationSet("id"); CPPUNIT_ASSERT_EQUAL(std::string("value"), configSetRet.getProperty("key")); } /*! * setConfigurationSetValues()メソッドのテスト * * - 指定したプロパティが、正しく指定したコンフィグレーションセットに追加されるか? */ void test_setConfigurationSetValues() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); coil::Properties configSet1("id"); configSet1.setProperty("name 1", "1.41421356"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); // 登録済みのコンフィグレーションセットに対して、プロパティを追加する coil::Properties configSet2("id"); configSet2.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.setConfigurationSetValues(configSet2)); // 当該コンフィグレーションセットを取得して、プロパティが意図どおり追加されていることを確認する const coil::Properties& configSetRet = configAdmin.getConfigurationSet("id"); CPPUNIT_ASSERT_EQUAL(std::string("1.41421356"), configSetRet.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string("1.7320508"), configSetRet.getProperty("name 2")); } /*! * @brief setConfigurationSetValues()メソッドのテスト * * - 存在しないコンフィグレーションセットに対してプロパティ追加を試みて、意図どおり失敗するか? * - 失敗後に、登録済みのコンフィグレーションセットが影響を受けていないか? */ void test_setConfigurationSetValues_with_inexist_configuration_set() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); coil::Properties configSet1("id"); configSet1.setProperty("name 1", "1.41421356"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); // 存在しないコンフィグレーションセットに対してプロパティ追加を試みて、意図どおり失敗するか? coil::Properties configSet2("inexist id"); configSet2.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.setConfigurationSetValues(configSet2)); // 失敗後に、登録済みのコンフィグレーションセットが影響を受けていないか? const coil::Properties& configSetRet = configAdmin.getConfigurationSet("id"); CPPUNIT_ASSERT_EQUAL(std::string("1.41421356"), configSetRet.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string(""), configSetRet.getProperty("name 2")); } /*! * @brief getActiveConfigurationSet()メソッドのテスト * * - アクティブコンフィグレーションセットを正しく取得できるか? */ void test_getActiveConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); configSet1.setProperty("name 1", "1.41421356"); configSet1.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); configSet2.setProperty("name 1", "3.14159"); configSet2.setProperty("name 2", "2.71828"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // "set 1"をアクティブ化した後、アクティブコンフィグレーションセットとして正しく取得できるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 1")); const coil::Properties& activeConfigSet1 = configAdmin.getActiveConfigurationSet(); CPPUNIT_ASSERT_EQUAL(std::string("1.41421356"), activeConfigSet1.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string("1.7320508"), activeConfigSet1.getProperty("name 2")); // "set 2"をアクティブ化した後、アクティブコンフィグレーションセットとして正しく取得できるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 2")); const coil::Properties& activeConfigSet2 = configAdmin.getActiveConfigurationSet(); CPPUNIT_ASSERT_EQUAL(std::string("3.14159"), activeConfigSet2.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string("2.71828"), activeConfigSet2.getProperty("name 2")); } /*! * @brief removeConfigurationSet()のテスト * * - 登録されているコンフィグレーションセットを正しく登録解除できるか? */ void test_removeConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを追加しておく coil::Properties configSet("id"); configSet.setProperty("key", "value"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); // いったん登録したコンフィグレーションセットを登録解除する CPPUNIT_ASSERT_EQUAL(true, configAdmin.removeConfigurationSet("id")); // 当該コンフィグレーションセットが存在しないことを確認する CPPUNIT_ASSERT_EQUAL(false, configAdmin.haveConfig("id")); } /*! * @brief removeConfigurationSet()のテスト * * - 存在しないコンフィグレーションセットIDを指定した場合に、意図どおりに失敗するか? */ void test_removeConfigurationSet_with_inexist_configuration_id() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを追加しておく coil::Properties configSet("id"); configSet.setProperty("key", "value"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); // 存在しないコンフィグレーションセットIDを指定した場合に、意図どおりに失敗するか? CPPUNIT_ASSERT_EQUAL(false, configAdmin.removeConfigurationSet("inexist id")); // 登録されているコンフィグレーションセットは、元どおり存在しているか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); } void test_activateConfigurationSet() { // test_getActiveConfigurationSet()で兼ねる } /*! * @brief setOnUpdate()メソッドのテスト * * - */ void test_setOnUpdate() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnUpdateCallbackMock* cdm1 = new OnUpdateCallbackMock(); OnUpdateCallbackMock* cdm2 = new OnUpdateCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnUpdate(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onUpdateMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnUpdate(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onUpdateMock("config_id"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnUpdateParam()メソッドのテスト * * - */ void test_setOnUpdateParam() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnUpdateParamCallbackMock* cdm1 = new OnUpdateParamCallbackMock(); OnUpdateParamCallbackMock* cdm2 = new OnUpdateParamCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnUpdateParam(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onUpdateParamMock("config_id", "param1"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnUpdateParam(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onUpdateParamMock("config_id", "param2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnSetConfigurationSet()メソッドのテスト * * - */ void test_setOnSetConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); coil::Properties configSet2("config_id2"); configSet2.setProperty("config_id2.key", "value2"); OnSetConfigurationSetCallbackMock* cdm1 = new OnSetConfigurationSetCallbackMock(); OnSetConfigurationSetCallbackMock* cdm2 = new OnSetConfigurationSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnSetConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onSetConfigurationSetMock(configSet); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnSetConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onSetConfigurationSetMock(configSet2); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnAddConfigurationSet()メソッドのテスト * * - */ void test_setOnAddConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); coil::Properties configSet2("config_id2"); configSet2.setProperty("config_id2.key", "value2"); OnAddConfigurationAddCallbackMock* cdm1 = new OnAddConfigurationAddCallbackMock(); OnAddConfigurationAddCallbackMock* cdm2 = new OnAddConfigurationAddCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnAddConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onAddConfigurationSetMock(configSet); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnAddConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onAddConfigurationSetMock(configSet2); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnRemoveConfigurationSet()メソッドのテスト * * - */ void test_setOnRemoveConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnRemoveConfigurationSetCallbackMock* cdm1 = new OnRemoveConfigurationSetCallbackMock(); OnRemoveConfigurationSetCallbackMock* cdm2 = new OnRemoveConfigurationSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnRemoveConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onRemoveConfigurationSetMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnRemoveConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onRemoveConfigurationSetMock("config_id2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnActivateSet()メソッドのテスト * * - */ void test_setOnActivateSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnActivateSetCallbackMock* cdm1 = new OnActivateSetCallbackMock(); OnActivateSetCallbackMock* cdm2 = new OnActivateSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnActivateSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onActivateSetMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnActivateSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onActivateSetMock("config_id2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } }; }; // namespace ConfigAdmin /* * Register test suite */ CPPUNIT_TEST_SUITE_REGISTRATION(Config::ConfigTests); CPPUNIT_TEST_SUITE_REGISTRATION(ConfigAdmin::ConfigAdminTests); #ifdef LOCAL_MAIN int main(int argc, char* argv[]) { FORMAT format = TEXT_OUT; int target = 0; std::string xsl; std::string ns; std::string fname; std::ofstream ofs; int i(1); while (i < argc) { std::string arg(argv[i]); std::string next_arg; if (i + 1 < argc) next_arg = argv[i + 1]; else next_arg = ""; if (arg == "--text") { format = TEXT_OUT; break; } if (arg == "--xml") { if (next_arg == "") { fname = argv[0]; fname += ".xml"; } else { fname = next_arg; } format = XML_OUT; ofs.open(fname.c_str()); } if ( arg == "--compiler" ) { format = COMPILER_OUT; break; } if ( arg == "--cerr" ) { target = 1; break; } if ( arg == "--xsl" ) { if (next_arg == "") xsl = "default.xsl"; else xsl = next_arg; } if ( arg == "--namespace" ) { if (next_arg == "") { std::cerr << "no namespace specified" << std::endl; exit(1); } else { xsl = next_arg; } } ++i; } CppUnit::TextUi::TestRunner runner; if ( ns.empty() ) runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest()); else runner.addTest(CppUnit::TestFactoryRegistry::getRegistry(ns).makeTest()); CppUnit::Outputter* outputter = 0; std::ostream* stream = target ? &std::cerr : &std::cout; switch ( format ) { case TEXT_OUT : outputter = new CppUnit::TextOutputter(&runner.result(),*stream); break; case XML_OUT : std::cout << "XML_OUT" << std::endl; outputter = new CppUnit::XmlOutputter(&runner.result(), ofs, "shift_jis"); static_cast<CppUnit::XmlOutputter*>(outputter)->setStyleSheet(xsl); break; case COMPILER_OUT : outputter = new CppUnit::CompilerOutputter(&runner.result(),*stream); break; } runner.setOutputter(outputter); runner.run(); return 0; // runner.run() ? 0 : 1; } #endif // MAIN #endif // ConfigAdmin_cpp
843  }
844 
846  {
847  // TODO 実装すること } /*! * @brief getConfigurationSets()メソッドのテスト * * - 登録されている全てのコンフィグレーションセットを正しく取得できるか? */ void test_getConfigurationSets() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // 2つのパラメータ値を含むコンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); configSet1.setProperty("name 1", "1.41421356"); configSet1.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); configSet2.setProperty("name 1", "3.14159"); configSet2.setProperty("name 2", "2.71828"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // getConfigurationSets()で登録されている全てのコンフィグレーションセットを取得し、 // 登録したものと一致していることを確認する std::vector<coil::Properties*> expectedConfigSets; expectedConfigSets.push_back(&configSet1); expectedConfigSets.push_back(&configSet2); const std::vector<coil::Properties*>& configSets = configAdmin.getConfigurationSets(); CPPUNIT_ASSERT_EQUAL( std::string("1.41421356"), getPropertiesBy("set 1", configSets)->getProperty("name 1")); CPPUNIT_ASSERT_EQUAL( std::string("1.7320508"), getPropertiesBy("set 1", configSets)->getProperty("name 2")); CPPUNIT_ASSERT_EQUAL( std::string("3.14159"), getPropertiesBy("set 2", configSets)->getProperty("name 1")); CPPUNIT_ASSERT_EQUAL( std::string("2.71828"), getPropertiesBy("set 2", configSets)->getProperty("name 2")); } /*! * addConfigurationSet()メソッドとgetConfigurationSet()メソッドのテスト * * - addConfigurationSet()で、コンフィグレーションセットを追加できるか? * - getConfigurationSet()で、追加したコンフィグレーションセットを正しく取得できるか? */ void test_addConfigurationSet_and_getConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // addConfigurationSet()で、コンフィグレーションセットを追加できるか? coil::Properties configSet("id"); configSet.setProperty("key", "value"); configAdmin.addConfigurationSet(configSet); // getConfigurationSet()で、追加したコンフィグレーションセットを正しく取得できるか? const coil::Properties& configSetRet = configAdmin.getConfigurationSet("id"); CPPUNIT_ASSERT_EQUAL(std::string("value"), configSetRet.getProperty("key")); } /*! * setConfigurationSetValues()メソッドのテスト * * - 指定したプロパティが、正しく指定したコンフィグレーションセットに追加されるか? */ void test_setConfigurationSetValues() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); coil::Properties configSet1("id"); configSet1.setProperty("name 1", "1.41421356"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); // 登録済みのコンフィグレーションセットに対して、プロパティを追加する coil::Properties configSet2("id"); configSet2.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.setConfigurationSetValues(configSet2)); // 当該コンフィグレーションセットを取得して、プロパティが意図どおり追加されていることを確認する const coil::Properties& configSetRet = configAdmin.getConfigurationSet("id"); CPPUNIT_ASSERT_EQUAL(std::string("1.41421356"), configSetRet.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string("1.7320508"), configSetRet.getProperty("name 2")); } /*! * @brief setConfigurationSetValues()メソッドのテスト * * - 存在しないコンフィグレーションセットに対してプロパティ追加を試みて、意図どおり失敗するか? * - 失敗後に、登録済みのコンフィグレーションセットが影響を受けていないか? */ void test_setConfigurationSetValues_with_inexist_configuration_set() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); coil::Properties configSet1("id"); configSet1.setProperty("name 1", "1.41421356"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); // 存在しないコンフィグレーションセットに対してプロパティ追加を試みて、意図どおり失敗するか? coil::Properties configSet2("inexist id"); configSet2.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.setConfigurationSetValues(configSet2)); // 失敗後に、登録済みのコンフィグレーションセットが影響を受けていないか? const coil::Properties& configSetRet = configAdmin.getConfigurationSet("id"); CPPUNIT_ASSERT_EQUAL(std::string("1.41421356"), configSetRet.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string(""), configSetRet.getProperty("name 2")); } /*! * @brief getActiveConfigurationSet()メソッドのテスト * * - アクティブコンフィグレーションセットを正しく取得できるか? */ void test_getActiveConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); configSet1.setProperty("name 1", "1.41421356"); configSet1.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); configSet2.setProperty("name 1", "3.14159"); configSet2.setProperty("name 2", "2.71828"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // "set 1"をアクティブ化した後、アクティブコンフィグレーションセットとして正しく取得できるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 1")); const coil::Properties& activeConfigSet1 = configAdmin.getActiveConfigurationSet(); CPPUNIT_ASSERT_EQUAL(std::string("1.41421356"), activeConfigSet1.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string("1.7320508"), activeConfigSet1.getProperty("name 2")); // "set 2"をアクティブ化した後、アクティブコンフィグレーションセットとして正しく取得できるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 2")); const coil::Properties& activeConfigSet2 = configAdmin.getActiveConfigurationSet(); CPPUNIT_ASSERT_EQUAL(std::string("3.14159"), activeConfigSet2.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string("2.71828"), activeConfigSet2.getProperty("name 2")); } /*! * @brief removeConfigurationSet()のテスト * * - 登録されているコンフィグレーションセットを正しく登録解除できるか? */ void test_removeConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを追加しておく coil::Properties configSet("id"); configSet.setProperty("key", "value"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); // いったん登録したコンフィグレーションセットを登録解除する CPPUNIT_ASSERT_EQUAL(true, configAdmin.removeConfigurationSet("id")); // 当該コンフィグレーションセットが存在しないことを確認する CPPUNIT_ASSERT_EQUAL(false, configAdmin.haveConfig("id")); } /*! * @brief removeConfigurationSet()のテスト * * - 存在しないコンフィグレーションセットIDを指定した場合に、意図どおりに失敗するか? */ void test_removeConfigurationSet_with_inexist_configuration_id() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを追加しておく coil::Properties configSet("id"); configSet.setProperty("key", "value"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); // 存在しないコンフィグレーションセットIDを指定した場合に、意図どおりに失敗するか? CPPUNIT_ASSERT_EQUAL(false, configAdmin.removeConfigurationSet("inexist id")); // 登録されているコンフィグレーションセットは、元どおり存在しているか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); } void test_activateConfigurationSet() { // test_getActiveConfigurationSet()で兼ねる } /*! * @brief setOnUpdate()メソッドのテスト * * - */ void test_setOnUpdate() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnUpdateCallbackMock* cdm1 = new OnUpdateCallbackMock(); OnUpdateCallbackMock* cdm2 = new OnUpdateCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnUpdate(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onUpdateMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnUpdate(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onUpdateMock("config_id"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnUpdateParam()メソッドのテスト * * - */ void test_setOnUpdateParam() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnUpdateParamCallbackMock* cdm1 = new OnUpdateParamCallbackMock(); OnUpdateParamCallbackMock* cdm2 = new OnUpdateParamCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnUpdateParam(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onUpdateParamMock("config_id", "param1"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnUpdateParam(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onUpdateParamMock("config_id", "param2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnSetConfigurationSet()メソッドのテスト * * - */ void test_setOnSetConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); coil::Properties configSet2("config_id2"); configSet2.setProperty("config_id2.key", "value2"); OnSetConfigurationSetCallbackMock* cdm1 = new OnSetConfigurationSetCallbackMock(); OnSetConfigurationSetCallbackMock* cdm2 = new OnSetConfigurationSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnSetConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onSetConfigurationSetMock(configSet); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnSetConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onSetConfigurationSetMock(configSet2); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnAddConfigurationSet()メソッドのテスト * * - */ void test_setOnAddConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); coil::Properties configSet2("config_id2"); configSet2.setProperty("config_id2.key", "value2"); OnAddConfigurationAddCallbackMock* cdm1 = new OnAddConfigurationAddCallbackMock(); OnAddConfigurationAddCallbackMock* cdm2 = new OnAddConfigurationAddCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnAddConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onAddConfigurationSetMock(configSet); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnAddConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onAddConfigurationSetMock(configSet2); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnRemoveConfigurationSet()メソッドのテスト * * - */ void test_setOnRemoveConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnRemoveConfigurationSetCallbackMock* cdm1 = new OnRemoveConfigurationSetCallbackMock(); OnRemoveConfigurationSetCallbackMock* cdm2 = new OnRemoveConfigurationSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnRemoveConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onRemoveConfigurationSetMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnRemoveConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onRemoveConfigurationSetMock("config_id2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnActivateSet()メソッドのテスト * * - */ void test_setOnActivateSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnActivateSetCallbackMock* cdm1 = new OnActivateSetCallbackMock(); OnActivateSetCallbackMock* cdm2 = new OnActivateSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnActivateSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onActivateSetMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnActivateSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onActivateSetMock("config_id2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } }; }; // namespace ConfigAdmin /* * Register test suite */ CPPUNIT_TEST_SUITE_REGISTRATION(Config::ConfigTests); CPPUNIT_TEST_SUITE_REGISTRATION(ConfigAdmin::ConfigAdminTests); #ifdef LOCAL_MAIN int main(int argc, char* argv[]) { FORMAT format = TEXT_OUT; int target = 0; std::string xsl; std::string ns; std::string fname; std::ofstream ofs; int i(1); while (i < argc) { std::string arg(argv[i]); std::string next_arg; if (i + 1 < argc) next_arg = argv[i + 1]; else next_arg = ""; if (arg == "--text") { format = TEXT_OUT; break; } if (arg == "--xml") { if (next_arg == "") { fname = argv[0]; fname += ".xml"; } else { fname = next_arg; } format = XML_OUT; ofs.open(fname.c_str()); } if ( arg == "--compiler" ) { format = COMPILER_OUT; break; } if ( arg == "--cerr" ) { target = 1; break; } if ( arg == "--xsl" ) { if (next_arg == "") xsl = "default.xsl"; else xsl = next_arg; } if ( arg == "--namespace" ) { if (next_arg == "") { std::cerr << "no namespace specified" << std::endl; exit(1); } else { xsl = next_arg; } } ++i; } CppUnit::TextUi::TestRunner runner; if ( ns.empty() ) runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest()); else runner.addTest(CppUnit::TestFactoryRegistry::getRegistry(ns).makeTest()); CppUnit::Outputter* outputter = 0; std::ostream* stream = target ? &std::cerr : &std::cout; switch ( format ) { case TEXT_OUT : outputter = new CppUnit::TextOutputter(&runner.result(),*stream); break; case XML_OUT : std::cout << "XML_OUT" << std::endl; outputter = new CppUnit::XmlOutputter(&runner.result(), ofs, "shift_jis"); static_cast<CppUnit::XmlOutputter*>(outputter)->setStyleSheet(xsl); break; case COMPILER_OUT : outputter = new CppUnit::CompilerOutputter(&runner.result(),*stream); break; } runner.setOutputter(outputter); runner.run(); return 0; // runner.run() ? 0 : 1; } #endif // MAIN #endif // ConfigAdmin_cpp
848  }
849 
856  {
857  coil::Properties nullProp;
858  RTC::ConfigAdmin configAdmin(nullProp);
859 
860  // 2つのパラメータ値を含むコンフィグレーションセットを準備し、追加しておく
861  coil::Properties configSet1("set 1");
862  configSet1.setProperty("name 1", "1.41421356");
863  configSet1.setProperty("name 2", "1.7320508");
864  CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1));
865 
866  coil::Properties configSet2("set 2");
867  configSet2.setProperty("name 1", "3.14159");
868  configSet2.setProperty("name 2", "2.71828");
869  CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2));
870 
871  // getConfigurationSets()で登録されている全てのコンフィグレーションセットを取得し、
872  // 登録したものと一致していることを確認する std::vector<coil::Properties*> expectedConfigSets; expectedConfigSets.push_back(&configSet1); expectedConfigSets.push_back(&configSet2); const std::vector<coil::Properties*>& configSets = configAdmin.getConfigurationSets(); CPPUNIT_ASSERT_EQUAL( std::string("1.41421356"), getPropertiesBy("set 1", configSets)->getProperty("name 1")); CPPUNIT_ASSERT_EQUAL( std::string("1.7320508"), getPropertiesBy("set 1", configSets)->getProperty("name 2")); CPPUNIT_ASSERT_EQUAL( std::string("3.14159"), getPropertiesBy("set 2", configSets)->getProperty("name 1")); CPPUNIT_ASSERT_EQUAL( std::string("2.71828"), getPropertiesBy("set 2", configSets)->getProperty("name 2")); } /*! * addConfigurationSet()メソッドとgetConfigurationSet()メソッドのテスト * * - addConfigurationSet()で、コンフィグレーションセットを追加できるか? * - getConfigurationSet()で、追加したコンフィグレーションセットを正しく取得できるか? */ void test_addConfigurationSet_and_getConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // addConfigurationSet()で、コンフィグレーションセットを追加できるか? coil::Properties configSet("id"); configSet.setProperty("key", "value"); configAdmin.addConfigurationSet(configSet); // getConfigurationSet()で、追加したコンフィグレーションセットを正しく取得できるか? const coil::Properties& configSetRet = configAdmin.getConfigurationSet("id"); CPPUNIT_ASSERT_EQUAL(std::string("value"), configSetRet.getProperty("key")); } /*! * setConfigurationSetValues()メソッドのテスト * * - 指定したプロパティが、正しく指定したコンフィグレーションセットに追加されるか? */ void test_setConfigurationSetValues() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); coil::Properties configSet1("id"); configSet1.setProperty("name 1", "1.41421356"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); // 登録済みのコンフィグレーションセットに対して、プロパティを追加する coil::Properties configSet2("id"); configSet2.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.setConfigurationSetValues(configSet2)); // 当該コンフィグレーションセットを取得して、プロパティが意図どおり追加されていることを確認する const coil::Properties& configSetRet = configAdmin.getConfigurationSet("id"); CPPUNIT_ASSERT_EQUAL(std::string("1.41421356"), configSetRet.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string("1.7320508"), configSetRet.getProperty("name 2")); } /*! * @brief setConfigurationSetValues()メソッドのテスト * * - 存在しないコンフィグレーションセットに対してプロパティ追加を試みて、意図どおり失敗するか? * - 失敗後に、登録済みのコンフィグレーションセットが影響を受けていないか? */ void test_setConfigurationSetValues_with_inexist_configuration_set() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); coil::Properties configSet1("id"); configSet1.setProperty("name 1", "1.41421356"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); // 存在しないコンフィグレーションセットに対してプロパティ追加を試みて、意図どおり失敗するか? coil::Properties configSet2("inexist id"); configSet2.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.setConfigurationSetValues(configSet2)); // 失敗後に、登録済みのコンフィグレーションセットが影響を受けていないか? const coil::Properties& configSetRet = configAdmin.getConfigurationSet("id"); CPPUNIT_ASSERT_EQUAL(std::string("1.41421356"), configSetRet.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string(""), configSetRet.getProperty("name 2")); } /*! * @brief getActiveConfigurationSet()メソッドのテスト * * - アクティブコンフィグレーションセットを正しく取得できるか? */ void test_getActiveConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); configSet1.setProperty("name 1", "1.41421356"); configSet1.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); configSet2.setProperty("name 1", "3.14159"); configSet2.setProperty("name 2", "2.71828"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // "set 1"をアクティブ化した後、アクティブコンフィグレーションセットとして正しく取得できるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 1")); const coil::Properties& activeConfigSet1 = configAdmin.getActiveConfigurationSet(); CPPUNIT_ASSERT_EQUAL(std::string("1.41421356"), activeConfigSet1.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string("1.7320508"), activeConfigSet1.getProperty("name 2")); // "set 2"をアクティブ化した後、アクティブコンフィグレーションセットとして正しく取得できるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 2")); const coil::Properties& activeConfigSet2 = configAdmin.getActiveConfigurationSet(); CPPUNIT_ASSERT_EQUAL(std::string("3.14159"), activeConfigSet2.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string("2.71828"), activeConfigSet2.getProperty("name 2")); } /*! * @brief removeConfigurationSet()のテスト * * - 登録されているコンフィグレーションセットを正しく登録解除できるか? */ void test_removeConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを追加しておく coil::Properties configSet("id"); configSet.setProperty("key", "value"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); // いったん登録したコンフィグレーションセットを登録解除する CPPUNIT_ASSERT_EQUAL(true, configAdmin.removeConfigurationSet("id")); // 当該コンフィグレーションセットが存在しないことを確認する CPPUNIT_ASSERT_EQUAL(false, configAdmin.haveConfig("id")); } /*! * @brief removeConfigurationSet()のテスト * * - 存在しないコンフィグレーションセットIDを指定した場合に、意図どおりに失敗するか? */ void test_removeConfigurationSet_with_inexist_configuration_id() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを追加しておく coil::Properties configSet("id"); configSet.setProperty("key", "value"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); // 存在しないコンフィグレーションセットIDを指定した場合に、意図どおりに失敗するか? CPPUNIT_ASSERT_EQUAL(false, configAdmin.removeConfigurationSet("inexist id")); // 登録されているコンフィグレーションセットは、元どおり存在しているか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); } void test_activateConfigurationSet() { // test_getActiveConfigurationSet()で兼ねる } /*! * @brief setOnUpdate()メソッドのテスト * * - */ void test_setOnUpdate() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnUpdateCallbackMock* cdm1 = new OnUpdateCallbackMock(); OnUpdateCallbackMock* cdm2 = new OnUpdateCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnUpdate(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onUpdateMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnUpdate(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onUpdateMock("config_id"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnUpdateParam()メソッドのテスト * * - */ void test_setOnUpdateParam() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnUpdateParamCallbackMock* cdm1 = new OnUpdateParamCallbackMock(); OnUpdateParamCallbackMock* cdm2 = new OnUpdateParamCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnUpdateParam(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onUpdateParamMock("config_id", "param1"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnUpdateParam(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onUpdateParamMock("config_id", "param2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnSetConfigurationSet()メソッドのテスト * * - */ void test_setOnSetConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); coil::Properties configSet2("config_id2"); configSet2.setProperty("config_id2.key", "value2"); OnSetConfigurationSetCallbackMock* cdm1 = new OnSetConfigurationSetCallbackMock(); OnSetConfigurationSetCallbackMock* cdm2 = new OnSetConfigurationSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnSetConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onSetConfigurationSetMock(configSet); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnSetConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onSetConfigurationSetMock(configSet2); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnAddConfigurationSet()メソッドのテスト * * - */ void test_setOnAddConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); coil::Properties configSet2("config_id2"); configSet2.setProperty("config_id2.key", "value2"); OnAddConfigurationAddCallbackMock* cdm1 = new OnAddConfigurationAddCallbackMock(); OnAddConfigurationAddCallbackMock* cdm2 = new OnAddConfigurationAddCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnAddConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onAddConfigurationSetMock(configSet); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnAddConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onAddConfigurationSetMock(configSet2); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnRemoveConfigurationSet()メソッドのテスト * * - */ void test_setOnRemoveConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnRemoveConfigurationSetCallbackMock* cdm1 = new OnRemoveConfigurationSetCallbackMock(); OnRemoveConfigurationSetCallbackMock* cdm2 = new OnRemoveConfigurationSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnRemoveConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onRemoveConfigurationSetMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnRemoveConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onRemoveConfigurationSetMock("config_id2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnActivateSet()メソッドのテスト * * - */ void test_setOnActivateSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnActivateSetCallbackMock* cdm1 = new OnActivateSetCallbackMock(); OnActivateSetCallbackMock* cdm2 = new OnActivateSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnActivateSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onActivateSetMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnActivateSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onActivateSetMock("config_id2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } }; }; // namespace ConfigAdmin /* * Register test suite */ CPPUNIT_TEST_SUITE_REGISTRATION(Config::ConfigTests); CPPUNIT_TEST_SUITE_REGISTRATION(ConfigAdmin::ConfigAdminTests); #ifdef LOCAL_MAIN int main(int argc, char* argv[]) { FORMAT format = TEXT_OUT; int target = 0; std::string xsl; std::string ns; std::string fname; std::ofstream ofs; int i(1); while (i < argc) { std::string arg(argv[i]); std::string next_arg; if (i + 1 < argc) next_arg = argv[i + 1]; else next_arg = ""; if (arg == "--text") { format = TEXT_OUT; break; } if (arg == "--xml") { if (next_arg == "") { fname = argv[0]; fname += ".xml"; } else { fname = next_arg; } format = XML_OUT; ofs.open(fname.c_str()); } if ( arg == "--compiler" ) { format = COMPILER_OUT; break; } if ( arg == "--cerr" ) { target = 1; break; } if ( arg == "--xsl" ) { if (next_arg == "") xsl = "default.xsl"; else xsl = next_arg; } if ( arg == "--namespace" ) { if (next_arg == "") { std::cerr << "no namespace specified" << std::endl; exit(1); } else { xsl = next_arg; } } ++i; } CppUnit::TextUi::TestRunner runner; if ( ns.empty() ) runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest()); else runner.addTest(CppUnit::TestFactoryRegistry::getRegistry(ns).makeTest()); CppUnit::Outputter* outputter = 0; std::ostream* stream = target ? &std::cerr : &std::cout; switch ( format ) { case TEXT_OUT : outputter = new CppUnit::TextOutputter(&runner.result(),*stream); break; case XML_OUT : std::cout << "XML_OUT" << std::endl; outputter = new CppUnit::XmlOutputter(&runner.result(), ofs, "shift_jis"); static_cast<CppUnit::XmlOutputter*>(outputter)->setStyleSheet(xsl); break; case COMPILER_OUT : outputter = new CppUnit::CompilerOutputter(&runner.result(),*stream); break; } runner.setOutputter(outputter); runner.run(); return 0; // runner.run() ? 0 : 1; } #endif // MAIN #endif // ConfigAdmin_cpp
873  std::vector<coil::Properties*> expectedConfigSets;
874  expectedConfigSets.push_back(&configSet1);
875  expectedConfigSets.push_back(&configSet2);
876 
877  const std::vector<coil::Properties*>& configSets
878  = configAdmin.getConfigurationSets();
879 
880  CPPUNIT_ASSERT_EQUAL(
881  std::string("1.41421356"),
882  getPropertiesBy("set 1", configSets)->getProperty("name 1"));
883  CPPUNIT_ASSERT_EQUAL(
884  std::string("1.7320508"),
885  getPropertiesBy("set 1", configSets)->getProperty("name 2"));
886 
887  CPPUNIT_ASSERT_EQUAL(
888  std::string("3.14159"),
889  getPropertiesBy("set 2", configSets)->getProperty("name 1"));
890  CPPUNIT_ASSERT_EQUAL(
891  std::string("2.71828"),
892  getPropertiesBy("set 2", configSets)->getProperty("name 2"));
893  }
894 
902  {
903  coil::Properties nullProp;
904  RTC::ConfigAdmin configAdmin(nullProp);
905 
906  // addConfigurationSet()で、コンフィグレーションセットを追加できるか?
907  coil::Properties configSet("id");
908  configSet.setProperty("key", "value");
909  configAdmin.addConfigurationSet(configSet);
910 
911  // getConfigurationSet()で、追加したコンフィグレーションセットを正しく取得できるか?
912  const coil::Properties& configSetRet = configAdmin.getConfigurationSet("id");
913  CPPUNIT_ASSERT_EQUAL(std::string("value"), configSetRet.getProperty("key"));
914  }
915 
922  {
923  coil::Properties nullProp;
924  RTC::ConfigAdmin configAdmin(nullProp);
925 
926  coil::Properties configSet1("id");
927  configSet1.setProperty("name 1", "1.41421356");
928  CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1));
929 
930  // 登録済みのコンフィグレーションセットに対して、プロパティを追加する coil::Properties configSet2("id"); configSet2.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.setConfigurationSetValues(configSet2)); // 当該コンフィグレーションセットを取得して、プロパティが意図どおり追加されていることを確認する const coil::Properties& configSetRet = configAdmin.getConfigurationSet("id"); CPPUNIT_ASSERT_EQUAL(std::string("1.41421356"), configSetRet.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string("1.7320508"), configSetRet.getProperty("name 2")); } /*! * @brief setConfigurationSetValues()メソッドのテスト * * - 存在しないコンフィグレーションセットに対してプロパティ追加を試みて、意図どおり失敗するか? * - 失敗後に、登録済みのコンフィグレーションセットが影響を受けていないか? */ void test_setConfigurationSetValues_with_inexist_configuration_set() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); coil::Properties configSet1("id"); configSet1.setProperty("name 1", "1.41421356"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); // 存在しないコンフィグレーションセットに対してプロパティ追加を試みて、意図どおり失敗するか? coil::Properties configSet2("inexist id"); configSet2.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.setConfigurationSetValues(configSet2)); // 失敗後に、登録済みのコンフィグレーションセットが影響を受けていないか? const coil::Properties& configSetRet = configAdmin.getConfigurationSet("id"); CPPUNIT_ASSERT_EQUAL(std::string("1.41421356"), configSetRet.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string(""), configSetRet.getProperty("name 2")); } /*! * @brief getActiveConfigurationSet()メソッドのテスト * * - アクティブコンフィグレーションセットを正しく取得できるか? */ void test_getActiveConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); configSet1.setProperty("name 1", "1.41421356"); configSet1.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); configSet2.setProperty("name 1", "3.14159"); configSet2.setProperty("name 2", "2.71828"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // "set 1"をアクティブ化した後、アクティブコンフィグレーションセットとして正しく取得できるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 1")); const coil::Properties& activeConfigSet1 = configAdmin.getActiveConfigurationSet(); CPPUNIT_ASSERT_EQUAL(std::string("1.41421356"), activeConfigSet1.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string("1.7320508"), activeConfigSet1.getProperty("name 2")); // "set 2"をアクティブ化した後、アクティブコンフィグレーションセットとして正しく取得できるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 2")); const coil::Properties& activeConfigSet2 = configAdmin.getActiveConfigurationSet(); CPPUNIT_ASSERT_EQUAL(std::string("3.14159"), activeConfigSet2.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string("2.71828"), activeConfigSet2.getProperty("name 2")); } /*! * @brief removeConfigurationSet()のテスト * * - 登録されているコンフィグレーションセットを正しく登録解除できるか? */ void test_removeConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを追加しておく coil::Properties configSet("id"); configSet.setProperty("key", "value"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); // いったん登録したコンフィグレーションセットを登録解除する CPPUNIT_ASSERT_EQUAL(true, configAdmin.removeConfigurationSet("id")); // 当該コンフィグレーションセットが存在しないことを確認する CPPUNIT_ASSERT_EQUAL(false, configAdmin.haveConfig("id")); } /*! * @brief removeConfigurationSet()のテスト * * - 存在しないコンフィグレーションセットIDを指定した場合に、意図どおりに失敗するか? */ void test_removeConfigurationSet_with_inexist_configuration_id() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを追加しておく coil::Properties configSet("id"); configSet.setProperty("key", "value"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); // 存在しないコンフィグレーションセットIDを指定した場合に、意図どおりに失敗するか? CPPUNIT_ASSERT_EQUAL(false, configAdmin.removeConfigurationSet("inexist id")); // 登録されているコンフィグレーションセットは、元どおり存在しているか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); } void test_activateConfigurationSet() { // test_getActiveConfigurationSet()で兼ねる } /*! * @brief setOnUpdate()メソッドのテスト * * - */ void test_setOnUpdate() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnUpdateCallbackMock* cdm1 = new OnUpdateCallbackMock(); OnUpdateCallbackMock* cdm2 = new OnUpdateCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnUpdate(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onUpdateMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnUpdate(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onUpdateMock("config_id"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnUpdateParam()メソッドのテスト * * - */ void test_setOnUpdateParam() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnUpdateParamCallbackMock* cdm1 = new OnUpdateParamCallbackMock(); OnUpdateParamCallbackMock* cdm2 = new OnUpdateParamCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnUpdateParam(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onUpdateParamMock("config_id", "param1"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnUpdateParam(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onUpdateParamMock("config_id", "param2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnSetConfigurationSet()メソッドのテスト * * - */ void test_setOnSetConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); coil::Properties configSet2("config_id2"); configSet2.setProperty("config_id2.key", "value2"); OnSetConfigurationSetCallbackMock* cdm1 = new OnSetConfigurationSetCallbackMock(); OnSetConfigurationSetCallbackMock* cdm2 = new OnSetConfigurationSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnSetConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onSetConfigurationSetMock(configSet); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnSetConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onSetConfigurationSetMock(configSet2); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnAddConfigurationSet()メソッドのテスト * * - */ void test_setOnAddConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); coil::Properties configSet2("config_id2"); configSet2.setProperty("config_id2.key", "value2"); OnAddConfigurationAddCallbackMock* cdm1 = new OnAddConfigurationAddCallbackMock(); OnAddConfigurationAddCallbackMock* cdm2 = new OnAddConfigurationAddCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnAddConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onAddConfigurationSetMock(configSet); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnAddConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onAddConfigurationSetMock(configSet2); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnRemoveConfigurationSet()メソッドのテスト * * - */ void test_setOnRemoveConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnRemoveConfigurationSetCallbackMock* cdm1 = new OnRemoveConfigurationSetCallbackMock(); OnRemoveConfigurationSetCallbackMock* cdm2 = new OnRemoveConfigurationSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnRemoveConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onRemoveConfigurationSetMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnRemoveConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onRemoveConfigurationSetMock("config_id2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnActivateSet()メソッドのテスト * * - */ void test_setOnActivateSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnActivateSetCallbackMock* cdm1 = new OnActivateSetCallbackMock(); OnActivateSetCallbackMock* cdm2 = new OnActivateSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnActivateSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onActivateSetMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnActivateSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onActivateSetMock("config_id2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } }; }; // namespace ConfigAdmin /* * Register test suite */ CPPUNIT_TEST_SUITE_REGISTRATION(Config::ConfigTests); CPPUNIT_TEST_SUITE_REGISTRATION(ConfigAdmin::ConfigAdminTests); #ifdef LOCAL_MAIN int main(int argc, char* argv[]) { FORMAT format = TEXT_OUT; int target = 0; std::string xsl; std::string ns; std::string fname; std::ofstream ofs; int i(1); while (i < argc) { std::string arg(argv[i]); std::string next_arg; if (i + 1 < argc) next_arg = argv[i + 1]; else next_arg = ""; if (arg == "--text") { format = TEXT_OUT; break; } if (arg == "--xml") { if (next_arg == "") { fname = argv[0]; fname += ".xml"; } else { fname = next_arg; } format = XML_OUT; ofs.open(fname.c_str()); } if ( arg == "--compiler" ) { format = COMPILER_OUT; break; } if ( arg == "--cerr" ) { target = 1; break; } if ( arg == "--xsl" ) { if (next_arg == "") xsl = "default.xsl"; else xsl = next_arg; } if ( arg == "--namespace" ) { if (next_arg == "") { std::cerr << "no namespace specified" << std::endl; exit(1); } else { xsl = next_arg; } } ++i; } CppUnit::TextUi::TestRunner runner; if ( ns.empty() ) runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest()); else runner.addTest(CppUnit::TestFactoryRegistry::getRegistry(ns).makeTest()); CppUnit::Outputter* outputter = 0; std::ostream* stream = target ? &std::cerr : &std::cout; switch ( format ) { case TEXT_OUT : outputter = new CppUnit::TextOutputter(&runner.result(),*stream); break; case XML_OUT : std::cout << "XML_OUT" << std::endl; outputter = new CppUnit::XmlOutputter(&runner.result(), ofs, "shift_jis"); static_cast<CppUnit::XmlOutputter*>(outputter)->setStyleSheet(xsl); break; case COMPILER_OUT : outputter = new CppUnit::CompilerOutputter(&runner.result(),*stream); break; } runner.setOutputter(outputter); runner.run(); return 0; // runner.run() ? 0 : 1; } #endif // MAIN #endif // ConfigAdmin_cpp
931  coil::Properties configSet2("id");
932  configSet2.setProperty("name 2", "1.7320508");
933  CPPUNIT_ASSERT_EQUAL(true, configAdmin.setConfigurationSetValues(configSet2));
934 
935  // 当該コンフィグレーションセットを取得して、プロパティが意図どおり追加されていることを確認する const coil::Properties& configSetRet = configAdmin.getConfigurationSet("id"); CPPUNIT_ASSERT_EQUAL(std::string("1.41421356"), configSetRet.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string("1.7320508"), configSetRet.getProperty("name 2")); } /*! * @brief setConfigurationSetValues()メソッドのテスト * * - 存在しないコンフィグレーションセットに対してプロパティ追加を試みて、意図どおり失敗するか? * - 失敗後に、登録済みのコンフィグレーションセットが影響を受けていないか? */ void test_setConfigurationSetValues_with_inexist_configuration_set() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); coil::Properties configSet1("id"); configSet1.setProperty("name 1", "1.41421356"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); // 存在しないコンフィグレーションセットに対してプロパティ追加を試みて、意図どおり失敗するか? coil::Properties configSet2("inexist id"); configSet2.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.setConfigurationSetValues(configSet2)); // 失敗後に、登録済みのコンフィグレーションセットが影響を受けていないか? const coil::Properties& configSetRet = configAdmin.getConfigurationSet("id"); CPPUNIT_ASSERT_EQUAL(std::string("1.41421356"), configSetRet.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string(""), configSetRet.getProperty("name 2")); } /*! * @brief getActiveConfigurationSet()メソッドのテスト * * - アクティブコンフィグレーションセットを正しく取得できるか? */ void test_getActiveConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを準備し、追加しておく coil::Properties configSet1("set 1"); configSet1.setProperty("name 1", "1.41421356"); configSet1.setProperty("name 2", "1.7320508"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1)); coil::Properties configSet2("set 2"); configSet2.setProperty("name 1", "3.14159"); configSet2.setProperty("name 2", "2.71828"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2)); // "set 1"をアクティブ化した後、アクティブコンフィグレーションセットとして正しく取得できるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 1")); const coil::Properties& activeConfigSet1 = configAdmin.getActiveConfigurationSet(); CPPUNIT_ASSERT_EQUAL(std::string("1.41421356"), activeConfigSet1.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string("1.7320508"), activeConfigSet1.getProperty("name 2")); // "set 2"をアクティブ化した後、アクティブコンフィグレーションセットとして正しく取得できるか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 2")); const coil::Properties& activeConfigSet2 = configAdmin.getActiveConfigurationSet(); CPPUNIT_ASSERT_EQUAL(std::string("3.14159"), activeConfigSet2.getProperty("name 1")); CPPUNIT_ASSERT_EQUAL(std::string("2.71828"), activeConfigSet2.getProperty("name 2")); } /*! * @brief removeConfigurationSet()のテスト * * - 登録されているコンフィグレーションセットを正しく登録解除できるか? */ void test_removeConfigurationSet() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを追加しておく coil::Properties configSet("id"); configSet.setProperty("key", "value"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); // いったん登録したコンフィグレーションセットを登録解除する CPPUNIT_ASSERT_EQUAL(true, configAdmin.removeConfigurationSet("id")); // 当該コンフィグレーションセットが存在しないことを確認する CPPUNIT_ASSERT_EQUAL(false, configAdmin.haveConfig("id")); } /*! * @brief removeConfigurationSet()のテスト * * - 存在しないコンフィグレーションセットIDを指定した場合に、意図どおりに失敗するか? */ void test_removeConfigurationSet_with_inexist_configuration_id() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを追加しておく coil::Properties configSet("id"); configSet.setProperty("key", "value"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); // 存在しないコンフィグレーションセットIDを指定した場合に、意図どおりに失敗するか? CPPUNIT_ASSERT_EQUAL(false, configAdmin.removeConfigurationSet("inexist id")); // 登録されているコンフィグレーションセットは、元どおり存在しているか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); } void test_activateConfigurationSet() { // test_getActiveConfigurationSet()で兼ねる } /*! * @brief setOnUpdate()メソッドのテスト * * - */ void test_setOnUpdate() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnUpdateCallbackMock* cdm1 = new OnUpdateCallbackMock(); OnUpdateCallbackMock* cdm2 = new OnUpdateCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnUpdate(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onUpdateMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnUpdate(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onUpdateMock("config_id"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnUpdateParam()メソッドのテスト * * - */ void test_setOnUpdateParam() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnUpdateParamCallbackMock* cdm1 = new OnUpdateParamCallbackMock(); OnUpdateParamCallbackMock* cdm2 = new OnUpdateParamCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnUpdateParam(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onUpdateParamMock("config_id", "param1"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnUpdateParam(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onUpdateParamMock("config_id", "param2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnSetConfigurationSet()メソッドのテスト * * - */ void test_setOnSetConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); coil::Properties configSet2("config_id2"); configSet2.setProperty("config_id2.key", "value2"); OnSetConfigurationSetCallbackMock* cdm1 = new OnSetConfigurationSetCallbackMock(); OnSetConfigurationSetCallbackMock* cdm2 = new OnSetConfigurationSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnSetConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onSetConfigurationSetMock(configSet); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnSetConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onSetConfigurationSetMock(configSet2); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnAddConfigurationSet()メソッドのテスト * * - */ void test_setOnAddConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); coil::Properties configSet2("config_id2"); configSet2.setProperty("config_id2.key", "value2"); OnAddConfigurationAddCallbackMock* cdm1 = new OnAddConfigurationAddCallbackMock(); OnAddConfigurationAddCallbackMock* cdm2 = new OnAddConfigurationAddCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnAddConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onAddConfigurationSetMock(configSet); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnAddConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onAddConfigurationSetMock(configSet2); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnRemoveConfigurationSet()メソッドのテスト * * - */ void test_setOnRemoveConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnRemoveConfigurationSetCallbackMock* cdm1 = new OnRemoveConfigurationSetCallbackMock(); OnRemoveConfigurationSetCallbackMock* cdm2 = new OnRemoveConfigurationSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnRemoveConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onRemoveConfigurationSetMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnRemoveConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onRemoveConfigurationSetMock("config_id2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnActivateSet()メソッドのテスト * * - */ void test_setOnActivateSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnActivateSetCallbackMock* cdm1 = new OnActivateSetCallbackMock(); OnActivateSetCallbackMock* cdm2 = new OnActivateSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnActivateSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onActivateSetMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnActivateSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onActivateSetMock("config_id2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } }; }; // namespace ConfigAdmin /* * Register test suite */ CPPUNIT_TEST_SUITE_REGISTRATION(Config::ConfigTests); CPPUNIT_TEST_SUITE_REGISTRATION(ConfigAdmin::ConfigAdminTests); #ifdef LOCAL_MAIN int main(int argc, char* argv[]) { FORMAT format = TEXT_OUT; int target = 0; std::string xsl; std::string ns; std::string fname; std::ofstream ofs; int i(1); while (i < argc) { std::string arg(argv[i]); std::string next_arg; if (i + 1 < argc) next_arg = argv[i + 1]; else next_arg = ""; if (arg == "--text") { format = TEXT_OUT; break; } if (arg == "--xml") { if (next_arg == "") { fname = argv[0]; fname += ".xml"; } else { fname = next_arg; } format = XML_OUT; ofs.open(fname.c_str()); } if ( arg == "--compiler" ) { format = COMPILER_OUT; break; } if ( arg == "--cerr" ) { target = 1; break; } if ( arg == "--xsl" ) { if (next_arg == "") xsl = "default.xsl"; else xsl = next_arg; } if ( arg == "--namespace" ) { if (next_arg == "") { std::cerr << "no namespace specified" << std::endl; exit(1); } else { xsl = next_arg; } } ++i; } CppUnit::TextUi::TestRunner runner; if ( ns.empty() ) runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest()); else runner.addTest(CppUnit::TestFactoryRegistry::getRegistry(ns).makeTest()); CppUnit::Outputter* outputter = 0; std::ostream* stream = target ? &std::cerr : &std::cout; switch ( format ) { case TEXT_OUT : outputter = new CppUnit::TextOutputter(&runner.result(),*stream); break; case XML_OUT : std::cout << "XML_OUT" << std::endl; outputter = new CppUnit::XmlOutputter(&runner.result(), ofs, "shift_jis"); static_cast<CppUnit::XmlOutputter*>(outputter)->setStyleSheet(xsl); break; case COMPILER_OUT : outputter = new CppUnit::CompilerOutputter(&runner.result(),*stream); break; } runner.setOutputter(outputter); runner.run(); return 0; // runner.run() ? 0 : 1; } #endif // MAIN #endif // ConfigAdmin_cpp
936  const coil::Properties& configSetRet = configAdmin.getConfigurationSet("id");
937  CPPUNIT_ASSERT_EQUAL(std::string("1.41421356"), configSetRet.getProperty("name 1"));
938  CPPUNIT_ASSERT_EQUAL(std::string("1.7320508"), configSetRet.getProperty("name 2"));
939  }
940 
948  {
949  coil::Properties nullProp;
950  RTC::ConfigAdmin configAdmin(nullProp);
951 
952  coil::Properties configSet1("id");
953  configSet1.setProperty("name 1", "1.41421356");
954  CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1));
955 
956  // 存在しないコンフィグレーションセットに対してプロパティ追加を試みて、意図どおり失敗するか?
957  coil::Properties configSet2("inexist id");
958  configSet2.setProperty("name 2", "1.7320508");
959  CPPUNIT_ASSERT_EQUAL(true, configAdmin.setConfigurationSetValues(configSet2));
960 
961  // 失敗後に、登録済みのコンフィグレーションセットが影響を受けていないか?
962  const coil::Properties& configSetRet = configAdmin.getConfigurationSet("id");
963  CPPUNIT_ASSERT_EQUAL(std::string("1.41421356"), configSetRet.getProperty("name 1"));
964  CPPUNIT_ASSERT_EQUAL(std::string(""), configSetRet.getProperty("name 2"));
965  }
966 
973  {
974  coil::Properties nullProp;
975  RTC::ConfigAdmin configAdmin(nullProp);
976 
977  // コンフィグレーションセットを準備し、追加しておく
978  coil::Properties configSet1("set 1");
979  configSet1.setProperty("name 1", "1.41421356");
980  configSet1.setProperty("name 2", "1.7320508");
981  CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet1));
982 
983  coil::Properties configSet2("set 2");
984  configSet2.setProperty("name 1", "3.14159");
985  configSet2.setProperty("name 2", "2.71828");
986  CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet2));
987 
988  // "set 1"をアクティブ化した後、アクティブコンフィグレーションセットとして正しく取得できるか?
989  CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 1"));
990  const coil::Properties& activeConfigSet1 = configAdmin.getActiveConfigurationSet();
991  CPPUNIT_ASSERT_EQUAL(std::string("1.41421356"), activeConfigSet1.getProperty("name 1"));
992  CPPUNIT_ASSERT_EQUAL(std::string("1.7320508"), activeConfigSet1.getProperty("name 2"));
993 
994  // "set 2"をアクティブ化した後、アクティブコンフィグレーションセットとして正しく取得できるか?
995  CPPUNIT_ASSERT_EQUAL(true, configAdmin.activateConfigurationSet("set 2"));
996  const coil::Properties& activeConfigSet2 = configAdmin.getActiveConfigurationSet();
997  CPPUNIT_ASSERT_EQUAL(std::string("3.14159"), activeConfigSet2.getProperty("name 1"));
998  CPPUNIT_ASSERT_EQUAL(std::string("2.71828"), activeConfigSet2.getProperty("name 2"));
999  }
1000 
1007  {
1008  coil::Properties nullProp;
1009  RTC::ConfigAdmin configAdmin(nullProp);
1010 
1011  // コンフィグレーションセットを追加しておく
1012  coil::Properties configSet("id");
1013  configSet.setProperty("key", "value");
1014  CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet));
1015  CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id"));
1016 
1017  // いったん登録したコンフィグレーションセットを登録解除する CPPUNIT_ASSERT_EQUAL(true, configAdmin.removeConfigurationSet("id")); // 当該コンフィグレーションセットが存在しないことを確認する CPPUNIT_ASSERT_EQUAL(false, configAdmin.haveConfig("id")); } /*! * @brief removeConfigurationSet()のテスト * * - 存在しないコンフィグレーションセットIDを指定した場合に、意図どおりに失敗するか? */ void test_removeConfigurationSet_with_inexist_configuration_id() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを追加しておく coil::Properties configSet("id"); configSet.setProperty("key", "value"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); // 存在しないコンフィグレーションセットIDを指定した場合に、意図どおりに失敗するか? CPPUNIT_ASSERT_EQUAL(false, configAdmin.removeConfigurationSet("inexist id")); // 登録されているコンフィグレーションセットは、元どおり存在しているか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); } void test_activateConfigurationSet() { // test_getActiveConfigurationSet()で兼ねる } /*! * @brief setOnUpdate()メソッドのテスト * * - */ void test_setOnUpdate() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnUpdateCallbackMock* cdm1 = new OnUpdateCallbackMock(); OnUpdateCallbackMock* cdm2 = new OnUpdateCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnUpdate(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onUpdateMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnUpdate(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onUpdateMock("config_id"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnUpdateParam()メソッドのテスト * * - */ void test_setOnUpdateParam() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnUpdateParamCallbackMock* cdm1 = new OnUpdateParamCallbackMock(); OnUpdateParamCallbackMock* cdm2 = new OnUpdateParamCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnUpdateParam(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onUpdateParamMock("config_id", "param1"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnUpdateParam(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onUpdateParamMock("config_id", "param2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnSetConfigurationSet()メソッドのテスト * * - */ void test_setOnSetConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); coil::Properties configSet2("config_id2"); configSet2.setProperty("config_id2.key", "value2"); OnSetConfigurationSetCallbackMock* cdm1 = new OnSetConfigurationSetCallbackMock(); OnSetConfigurationSetCallbackMock* cdm2 = new OnSetConfigurationSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnSetConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onSetConfigurationSetMock(configSet); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnSetConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onSetConfigurationSetMock(configSet2); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnAddConfigurationSet()メソッドのテスト * * - */ void test_setOnAddConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); coil::Properties configSet2("config_id2"); configSet2.setProperty("config_id2.key", "value2"); OnAddConfigurationAddCallbackMock* cdm1 = new OnAddConfigurationAddCallbackMock(); OnAddConfigurationAddCallbackMock* cdm2 = new OnAddConfigurationAddCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnAddConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onAddConfigurationSetMock(configSet); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnAddConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onAddConfigurationSetMock(configSet2); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnRemoveConfigurationSet()メソッドのテスト * * - */ void test_setOnRemoveConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnRemoveConfigurationSetCallbackMock* cdm1 = new OnRemoveConfigurationSetCallbackMock(); OnRemoveConfigurationSetCallbackMock* cdm2 = new OnRemoveConfigurationSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnRemoveConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onRemoveConfigurationSetMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnRemoveConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onRemoveConfigurationSetMock("config_id2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnActivateSet()メソッドのテスト * * - */ void test_setOnActivateSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnActivateSetCallbackMock* cdm1 = new OnActivateSetCallbackMock(); OnActivateSetCallbackMock* cdm2 = new OnActivateSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnActivateSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onActivateSetMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnActivateSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onActivateSetMock("config_id2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } }; }; // namespace ConfigAdmin /* * Register test suite */ CPPUNIT_TEST_SUITE_REGISTRATION(Config::ConfigTests); CPPUNIT_TEST_SUITE_REGISTRATION(ConfigAdmin::ConfigAdminTests); #ifdef LOCAL_MAIN int main(int argc, char* argv[]) { FORMAT format = TEXT_OUT; int target = 0; std::string xsl; std::string ns; std::string fname; std::ofstream ofs; int i(1); while (i < argc) { std::string arg(argv[i]); std::string next_arg; if (i + 1 < argc) next_arg = argv[i + 1]; else next_arg = ""; if (arg == "--text") { format = TEXT_OUT; break; } if (arg == "--xml") { if (next_arg == "") { fname = argv[0]; fname += ".xml"; } else { fname = next_arg; } format = XML_OUT; ofs.open(fname.c_str()); } if ( arg == "--compiler" ) { format = COMPILER_OUT; break; } if ( arg == "--cerr" ) { target = 1; break; } if ( arg == "--xsl" ) { if (next_arg == "") xsl = "default.xsl"; else xsl = next_arg; } if ( arg == "--namespace" ) { if (next_arg == "") { std::cerr << "no namespace specified" << std::endl; exit(1); } else { xsl = next_arg; } } ++i; } CppUnit::TextUi::TestRunner runner; if ( ns.empty() ) runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest()); else runner.addTest(CppUnit::TestFactoryRegistry::getRegistry(ns).makeTest()); CppUnit::Outputter* outputter = 0; std::ostream* stream = target ? &std::cerr : &std::cout; switch ( format ) { case TEXT_OUT : outputter = new CppUnit::TextOutputter(&runner.result(),*stream); break; case XML_OUT : std::cout << "XML_OUT" << std::endl; outputter = new CppUnit::XmlOutputter(&runner.result(), ofs, "shift_jis"); static_cast<CppUnit::XmlOutputter*>(outputter)->setStyleSheet(xsl); break; case COMPILER_OUT : outputter = new CppUnit::CompilerOutputter(&runner.result(),*stream); break; } runner.setOutputter(outputter); runner.run(); return 0; // runner.run() ? 0 : 1; } #endif // MAIN #endif // ConfigAdmin_cpp
1018  CPPUNIT_ASSERT_EQUAL(true, configAdmin.removeConfigurationSet("id"));
1019 
1020  // 当該コンフィグレーションセットが存在しないことを確認する CPPUNIT_ASSERT_EQUAL(false, configAdmin.haveConfig("id")); } /*! * @brief removeConfigurationSet()のテスト * * - 存在しないコンフィグレーションセットIDを指定した場合に、意図どおりに失敗するか? */ void test_removeConfigurationSet_with_inexist_configuration_id() { coil::Properties nullProp; RTC::ConfigAdmin configAdmin(nullProp); // コンフィグレーションセットを追加しておく coil::Properties configSet("id"); configSet.setProperty("key", "value"); CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet)); CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); // 存在しないコンフィグレーションセットIDを指定した場合に、意図どおりに失敗するか? CPPUNIT_ASSERT_EQUAL(false, configAdmin.removeConfigurationSet("inexist id")); // 登録されているコンフィグレーションセットは、元どおり存在しているか? CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id")); } void test_activateConfigurationSet() { // test_getActiveConfigurationSet()で兼ねる } /*! * @brief setOnUpdate()メソッドのテスト * * - */ void test_setOnUpdate() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnUpdateCallbackMock* cdm1 = new OnUpdateCallbackMock(); OnUpdateCallbackMock* cdm2 = new OnUpdateCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnUpdate(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onUpdateMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnUpdate(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onUpdateMock("config_id"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnUpdateParam()メソッドのテスト * * - */ void test_setOnUpdateParam() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnUpdateParamCallbackMock* cdm1 = new OnUpdateParamCallbackMock(); OnUpdateParamCallbackMock* cdm2 = new OnUpdateParamCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnUpdateParam(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onUpdateParamMock("config_id", "param1"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnUpdateParam(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onUpdateParamMock("config_id", "param2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnSetConfigurationSet()メソッドのテスト * * - */ void test_setOnSetConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); coil::Properties configSet2("config_id2"); configSet2.setProperty("config_id2.key", "value2"); OnSetConfigurationSetCallbackMock* cdm1 = new OnSetConfigurationSetCallbackMock(); OnSetConfigurationSetCallbackMock* cdm2 = new OnSetConfigurationSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnSetConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onSetConfigurationSetMock(configSet); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnSetConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onSetConfigurationSetMock(configSet2); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnAddConfigurationSet()メソッドのテスト * * - */ void test_setOnAddConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); coil::Properties configSet2("config_id2"); configSet2.setProperty("config_id2.key", "value2"); OnAddConfigurationAddCallbackMock* cdm1 = new OnAddConfigurationAddCallbackMock(); OnAddConfigurationAddCallbackMock* cdm2 = new OnAddConfigurationAddCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnAddConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onAddConfigurationSetMock(configSet); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnAddConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onAddConfigurationSetMock(configSet2); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnRemoveConfigurationSet()メソッドのテスト * * - */ void test_setOnRemoveConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnRemoveConfigurationSetCallbackMock* cdm1 = new OnRemoveConfigurationSetCallbackMock(); OnRemoveConfigurationSetCallbackMock* cdm2 = new OnRemoveConfigurationSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnRemoveConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onRemoveConfigurationSetMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnRemoveConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onRemoveConfigurationSetMock("config_id2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnActivateSet()メソッドのテスト * * - */ void test_setOnActivateSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnActivateSetCallbackMock* cdm1 = new OnActivateSetCallbackMock(); OnActivateSetCallbackMock* cdm2 = new OnActivateSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnActivateSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onActivateSetMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnActivateSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onActivateSetMock("config_id2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } }; }; // namespace ConfigAdmin /* * Register test suite */ CPPUNIT_TEST_SUITE_REGISTRATION(Config::ConfigTests); CPPUNIT_TEST_SUITE_REGISTRATION(ConfigAdmin::ConfigAdminTests); #ifdef LOCAL_MAIN int main(int argc, char* argv[]) { FORMAT format = TEXT_OUT; int target = 0; std::string xsl; std::string ns; std::string fname; std::ofstream ofs; int i(1); while (i < argc) { std::string arg(argv[i]); std::string next_arg; if (i + 1 < argc) next_arg = argv[i + 1]; else next_arg = ""; if (arg == "--text") { format = TEXT_OUT; break; } if (arg == "--xml") { if (next_arg == "") { fname = argv[0]; fname += ".xml"; } else { fname = next_arg; } format = XML_OUT; ofs.open(fname.c_str()); } if ( arg == "--compiler" ) { format = COMPILER_OUT; break; } if ( arg == "--cerr" ) { target = 1; break; } if ( arg == "--xsl" ) { if (next_arg == "") xsl = "default.xsl"; else xsl = next_arg; } if ( arg == "--namespace" ) { if (next_arg == "") { std::cerr << "no namespace specified" << std::endl; exit(1); } else { xsl = next_arg; } } ++i; } CppUnit::TextUi::TestRunner runner; if ( ns.empty() ) runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest()); else runner.addTest(CppUnit::TestFactoryRegistry::getRegistry(ns).makeTest()); CppUnit::Outputter* outputter = 0; std::ostream* stream = target ? &std::cerr : &std::cout; switch ( format ) { case TEXT_OUT : outputter = new CppUnit::TextOutputter(&runner.result(),*stream); break; case XML_OUT : std::cout << "XML_OUT" << std::endl; outputter = new CppUnit::XmlOutputter(&runner.result(), ofs, "shift_jis"); static_cast<CppUnit::XmlOutputter*>(outputter)->setStyleSheet(xsl); break; case COMPILER_OUT : outputter = new CppUnit::CompilerOutputter(&runner.result(),*stream); break; } runner.setOutputter(outputter); runner.run(); return 0; // runner.run() ? 0 : 1; } #endif // MAIN #endif // ConfigAdmin_cpp
1021  CPPUNIT_ASSERT_EQUAL(false, configAdmin.haveConfig("id"));
1022  }
1023 
1030  {
1031  coil::Properties nullProp;
1032  RTC::ConfigAdmin configAdmin(nullProp);
1033 
1034  // コンフィグレーションセットを追加しておく
1035  coil::Properties configSet("id");
1036  configSet.setProperty("key", "value");
1037  CPPUNIT_ASSERT_EQUAL(true, configAdmin.addConfigurationSet(configSet));
1038  CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id"));
1039 
1040  // 存在しないコンフィグレーションセットIDを指定した場合に、意図どおりに失敗するか?
1041  CPPUNIT_ASSERT_EQUAL(false, configAdmin.removeConfigurationSet("inexist id"));
1042 
1043  // 登録されているコンフィグレーションセットは、元どおり存在しているか?
1044  CPPUNIT_ASSERT_EQUAL(true, configAdmin.haveConfig("id"));
1045  }
1046 
1048  {
1049  // test_getActiveConfigurationSet()で兼ねる } /*! * @brief setOnUpdate()メソッドのテスト * * - */ void test_setOnUpdate() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnUpdateCallbackMock* cdm1 = new OnUpdateCallbackMock(); OnUpdateCallbackMock* cdm2 = new OnUpdateCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnUpdate(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onUpdateMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnUpdate(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onUpdateMock("config_id"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnUpdateParam()メソッドのテスト * * - */ void test_setOnUpdateParam() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnUpdateParamCallbackMock* cdm1 = new OnUpdateParamCallbackMock(); OnUpdateParamCallbackMock* cdm2 = new OnUpdateParamCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnUpdateParam(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onUpdateParamMock("config_id", "param1"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnUpdateParam(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onUpdateParamMock("config_id", "param2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnSetConfigurationSet()メソッドのテスト * * - */ void test_setOnSetConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); coil::Properties configSet2("config_id2"); configSet2.setProperty("config_id2.key", "value2"); OnSetConfigurationSetCallbackMock* cdm1 = new OnSetConfigurationSetCallbackMock(); OnSetConfigurationSetCallbackMock* cdm2 = new OnSetConfigurationSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnSetConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onSetConfigurationSetMock(configSet); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnSetConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onSetConfigurationSetMock(configSet2); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnAddConfigurationSet()メソッドのテスト * * - */ void test_setOnAddConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); coil::Properties configSet2("config_id2"); configSet2.setProperty("config_id2.key", "value2"); OnAddConfigurationAddCallbackMock* cdm1 = new OnAddConfigurationAddCallbackMock(); OnAddConfigurationAddCallbackMock* cdm2 = new OnAddConfigurationAddCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnAddConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onAddConfigurationSetMock(configSet); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnAddConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onAddConfigurationSetMock(configSet2); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnRemoveConfigurationSet()メソッドのテスト * * - */ void test_setOnRemoveConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnRemoveConfigurationSetCallbackMock* cdm1 = new OnRemoveConfigurationSetCallbackMock(); OnRemoveConfigurationSetCallbackMock* cdm2 = new OnRemoveConfigurationSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnRemoveConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onRemoveConfigurationSetMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnRemoveConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onRemoveConfigurationSetMock("config_id2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnActivateSet()メソッドのテスト * * - */ void test_setOnActivateSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnActivateSetCallbackMock* cdm1 = new OnActivateSetCallbackMock(); OnActivateSetCallbackMock* cdm2 = new OnActivateSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnActivateSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onActivateSetMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnActivateSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onActivateSetMock("config_id2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } }; }; // namespace ConfigAdmin /* * Register test suite */ CPPUNIT_TEST_SUITE_REGISTRATION(Config::ConfigTests); CPPUNIT_TEST_SUITE_REGISTRATION(ConfigAdmin::ConfigAdminTests); #ifdef LOCAL_MAIN int main(int argc, char* argv[]) { FORMAT format = TEXT_OUT; int target = 0; std::string xsl; std::string ns; std::string fname; std::ofstream ofs; int i(1); while (i < argc) { std::string arg(argv[i]); std::string next_arg; if (i + 1 < argc) next_arg = argv[i + 1]; else next_arg = ""; if (arg == "--text") { format = TEXT_OUT; break; } if (arg == "--xml") { if (next_arg == "") { fname = argv[0]; fname += ".xml"; } else { fname = next_arg; } format = XML_OUT; ofs.open(fname.c_str()); } if ( arg == "--compiler" ) { format = COMPILER_OUT; break; } if ( arg == "--cerr" ) { target = 1; break; } if ( arg == "--xsl" ) { if (next_arg == "") xsl = "default.xsl"; else xsl = next_arg; } if ( arg == "--namespace" ) { if (next_arg == "") { std::cerr << "no namespace specified" << std::endl; exit(1); } else { xsl = next_arg; } } ++i; } CppUnit::TextUi::TestRunner runner; if ( ns.empty() ) runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest()); else runner.addTest(CppUnit::TestFactoryRegistry::getRegistry(ns).makeTest()); CppUnit::Outputter* outputter = 0; std::ostream* stream = target ? &std::cerr : &std::cout; switch ( format ) { case TEXT_OUT : outputter = new CppUnit::TextOutputter(&runner.result(),*stream); break; case XML_OUT : std::cout << "XML_OUT" << std::endl; outputter = new CppUnit::XmlOutputter(&runner.result(), ofs, "shift_jis"); static_cast<CppUnit::XmlOutputter*>(outputter)->setStyleSheet(xsl); break; case COMPILER_OUT : outputter = new CppUnit::CompilerOutputter(&runner.result(),*stream); break; } runner.setOutputter(outputter); runner.run(); return 0; // runner.run() ? 0 : 1; } #endif // MAIN #endif // ConfigAdmin_cpp
1050  }
1051 
1058  {
1059  coil::Properties configSet("config_id");
1060  configSet.setProperty("config_id.key", "value");
1061  ConfigAdminMock configAdmin(configSet);
1062 
1065 
1066  // 1回目のsetでメンバー変数へ設定 configAdmin.setOnUpdate(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onUpdateMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnUpdate(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onUpdateMock("config_id"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnUpdateParam()メソッドのテスト * * - */ void test_setOnUpdateParam() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnUpdateParamCallbackMock* cdm1 = new OnUpdateParamCallbackMock(); OnUpdateParamCallbackMock* cdm2 = new OnUpdateParamCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnUpdateParam(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onUpdateParamMock("config_id", "param1"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnUpdateParam(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onUpdateParamMock("config_id", "param2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnSetConfigurationSet()メソッドのテスト * * - */ void test_setOnSetConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); coil::Properties configSet2("config_id2"); configSet2.setProperty("config_id2.key", "value2"); OnSetConfigurationSetCallbackMock* cdm1 = new OnSetConfigurationSetCallbackMock(); OnSetConfigurationSetCallbackMock* cdm2 = new OnSetConfigurationSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnSetConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onSetConfigurationSetMock(configSet); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnSetConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onSetConfigurationSetMock(configSet2); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnAddConfigurationSet()メソッドのテスト * * - */ void test_setOnAddConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); coil::Properties configSet2("config_id2"); configSet2.setProperty("config_id2.key", "value2"); OnAddConfigurationAddCallbackMock* cdm1 = new OnAddConfigurationAddCallbackMock(); OnAddConfigurationAddCallbackMock* cdm2 = new OnAddConfigurationAddCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnAddConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onAddConfigurationSetMock(configSet); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnAddConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onAddConfigurationSetMock(configSet2); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnRemoveConfigurationSet()メソッドのテスト * * - */ void test_setOnRemoveConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnRemoveConfigurationSetCallbackMock* cdm1 = new OnRemoveConfigurationSetCallbackMock(); OnRemoveConfigurationSetCallbackMock* cdm2 = new OnRemoveConfigurationSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnRemoveConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onRemoveConfigurationSetMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnRemoveConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onRemoveConfigurationSetMock("config_id2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnActivateSet()メソッドのテスト * * - */ void test_setOnActivateSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnActivateSetCallbackMock* cdm1 = new OnActivateSetCallbackMock(); OnActivateSetCallbackMock* cdm2 = new OnActivateSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnActivateSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onActivateSetMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnActivateSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onActivateSetMock("config_id2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } }; }; // namespace ConfigAdmin /* * Register test suite */ CPPUNIT_TEST_SUITE_REGISTRATION(Config::ConfigTests); CPPUNIT_TEST_SUITE_REGISTRATION(ConfigAdmin::ConfigAdminTests); #ifdef LOCAL_MAIN int main(int argc, char* argv[]) { FORMAT format = TEXT_OUT; int target = 0; std::string xsl; std::string ns; std::string fname; std::ofstream ofs; int i(1); while (i < argc) { std::string arg(argv[i]); std::string next_arg; if (i + 1 < argc) next_arg = argv[i + 1]; else next_arg = ""; if (arg == "--text") { format = TEXT_OUT; break; } if (arg == "--xml") { if (next_arg == "") { fname = argv[0]; fname += ".xml"; } else { fname = next_arg; } format = XML_OUT; ofs.open(fname.c_str()); } if ( arg == "--compiler" ) { format = COMPILER_OUT; break; } if ( arg == "--cerr" ) { target = 1; break; } if ( arg == "--xsl" ) { if (next_arg == "") xsl = "default.xsl"; else xsl = next_arg; } if ( arg == "--namespace" ) { if (next_arg == "") { std::cerr << "no namespace specified" << std::endl; exit(1); } else { xsl = next_arg; } } ++i; } CppUnit::TextUi::TestRunner runner; if ( ns.empty() ) runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest()); else runner.addTest(CppUnit::TestFactoryRegistry::getRegistry(ns).makeTest()); CppUnit::Outputter* outputter = 0; std::ostream* stream = target ? &std::cerr : &std::cout; switch ( format ) { case TEXT_OUT : outputter = new CppUnit::TextOutputter(&runner.result(),*stream); break; case XML_OUT : std::cout << "XML_OUT" << std::endl; outputter = new CppUnit::XmlOutputter(&runner.result(), ofs, "shift_jis"); static_cast<CppUnit::XmlOutputter*>(outputter)->setStyleSheet(xsl); break; case COMPILER_OUT : outputter = new CppUnit::CompilerOutputter(&runner.result(),*stream); break; } runner.setOutputter(outputter); runner.run(); return 0; // runner.run() ? 0 : 1; } #endif // MAIN #endif // ConfigAdmin_cpp
1067  configAdmin.setOnUpdate(cdm1);
1068  CPPUNIT_ASSERT(!cdm1->result);
1069  configAdmin.onUpdateMock("config_id");
1070  CPPUNIT_ASSERT(cdm1->result);
1071 
1072  // 2回目のsetでdeleteが呼ばれる configAdmin.setOnUpdate(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onUpdateMock("config_id"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnUpdateParam()メソッドのテスト * * - */ void test_setOnUpdateParam() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnUpdateParamCallbackMock* cdm1 = new OnUpdateParamCallbackMock(); OnUpdateParamCallbackMock* cdm2 = new OnUpdateParamCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnUpdateParam(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onUpdateParamMock("config_id", "param1"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnUpdateParam(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onUpdateParamMock("config_id", "param2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnSetConfigurationSet()メソッドのテスト * * - */ void test_setOnSetConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); coil::Properties configSet2("config_id2"); configSet2.setProperty("config_id2.key", "value2"); OnSetConfigurationSetCallbackMock* cdm1 = new OnSetConfigurationSetCallbackMock(); OnSetConfigurationSetCallbackMock* cdm2 = new OnSetConfigurationSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnSetConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onSetConfigurationSetMock(configSet); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnSetConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onSetConfigurationSetMock(configSet2); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnAddConfigurationSet()メソッドのテスト * * - */ void test_setOnAddConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); coil::Properties configSet2("config_id2"); configSet2.setProperty("config_id2.key", "value2"); OnAddConfigurationAddCallbackMock* cdm1 = new OnAddConfigurationAddCallbackMock(); OnAddConfigurationAddCallbackMock* cdm2 = new OnAddConfigurationAddCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnAddConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onAddConfigurationSetMock(configSet); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnAddConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onAddConfigurationSetMock(configSet2); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnRemoveConfigurationSet()メソッドのテスト * * - */ void test_setOnRemoveConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnRemoveConfigurationSetCallbackMock* cdm1 = new OnRemoveConfigurationSetCallbackMock(); OnRemoveConfigurationSetCallbackMock* cdm2 = new OnRemoveConfigurationSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnRemoveConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onRemoveConfigurationSetMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnRemoveConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onRemoveConfigurationSetMock("config_id2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnActivateSet()メソッドのテスト * * - */ void test_setOnActivateSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnActivateSetCallbackMock* cdm1 = new OnActivateSetCallbackMock(); OnActivateSetCallbackMock* cdm2 = new OnActivateSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnActivateSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onActivateSetMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnActivateSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onActivateSetMock("config_id2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } }; }; // namespace ConfigAdmin /* * Register test suite */ CPPUNIT_TEST_SUITE_REGISTRATION(Config::ConfigTests); CPPUNIT_TEST_SUITE_REGISTRATION(ConfigAdmin::ConfigAdminTests); #ifdef LOCAL_MAIN int main(int argc, char* argv[]) { FORMAT format = TEXT_OUT; int target = 0; std::string xsl; std::string ns; std::string fname; std::ofstream ofs; int i(1); while (i < argc) { std::string arg(argv[i]); std::string next_arg; if (i + 1 < argc) next_arg = argv[i + 1]; else next_arg = ""; if (arg == "--text") { format = TEXT_OUT; break; } if (arg == "--xml") { if (next_arg == "") { fname = argv[0]; fname += ".xml"; } else { fname = next_arg; } format = XML_OUT; ofs.open(fname.c_str()); } if ( arg == "--compiler" ) { format = COMPILER_OUT; break; } if ( arg == "--cerr" ) { target = 1; break; } if ( arg == "--xsl" ) { if (next_arg == "") xsl = "default.xsl"; else xsl = next_arg; } if ( arg == "--namespace" ) { if (next_arg == "") { std::cerr << "no namespace specified" << std::endl; exit(1); } else { xsl = next_arg; } } ++i; } CppUnit::TextUi::TestRunner runner; if ( ns.empty() ) runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest()); else runner.addTest(CppUnit::TestFactoryRegistry::getRegistry(ns).makeTest()); CppUnit::Outputter* outputter = 0; std::ostream* stream = target ? &std::cerr : &std::cout; switch ( format ) { case TEXT_OUT : outputter = new CppUnit::TextOutputter(&runner.result(),*stream); break; case XML_OUT : std::cout << "XML_OUT" << std::endl; outputter = new CppUnit::XmlOutputter(&runner.result(), ofs, "shift_jis"); static_cast<CppUnit::XmlOutputter*>(outputter)->setStyleSheet(xsl); break; case COMPILER_OUT : outputter = new CppUnit::CompilerOutputter(&runner.result(),*stream); break; } runner.setOutputter(outputter); runner.run(); return 0; // runner.run() ? 0 : 1; } #endif // MAIN #endif // ConfigAdmin_cpp
1073  configAdmin.setOnUpdate(cdm2);
1074  CPPUNIT_ASSERT(!cdm2->result);
1075  configAdmin.onUpdateMock("config_id");
1076  CPPUNIT_ASSERT(cdm2->result);
1077 
1078  // delete cdm1; delete cdm2 は不要です。
1079  // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。
1080  }
1081 
1088  {
1089  coil::Properties configSet("config_id");
1090  configSet.setProperty("config_id.key", "value");
1091  ConfigAdminMock configAdmin(configSet);
1092 
1095 
1096  // 1回目のsetでメンバー変数へ設定 configAdmin.setOnUpdateParam(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onUpdateParamMock("config_id", "param1"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnUpdateParam(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onUpdateParamMock("config_id", "param2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnSetConfigurationSet()メソッドのテスト * * - */ void test_setOnSetConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); coil::Properties configSet2("config_id2"); configSet2.setProperty("config_id2.key", "value2"); OnSetConfigurationSetCallbackMock* cdm1 = new OnSetConfigurationSetCallbackMock(); OnSetConfigurationSetCallbackMock* cdm2 = new OnSetConfigurationSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnSetConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onSetConfigurationSetMock(configSet); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnSetConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onSetConfigurationSetMock(configSet2); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnAddConfigurationSet()メソッドのテスト * * - */ void test_setOnAddConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); coil::Properties configSet2("config_id2"); configSet2.setProperty("config_id2.key", "value2"); OnAddConfigurationAddCallbackMock* cdm1 = new OnAddConfigurationAddCallbackMock(); OnAddConfigurationAddCallbackMock* cdm2 = new OnAddConfigurationAddCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnAddConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onAddConfigurationSetMock(configSet); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnAddConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onAddConfigurationSetMock(configSet2); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnRemoveConfigurationSet()メソッドのテスト * * - */ void test_setOnRemoveConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnRemoveConfigurationSetCallbackMock* cdm1 = new OnRemoveConfigurationSetCallbackMock(); OnRemoveConfigurationSetCallbackMock* cdm2 = new OnRemoveConfigurationSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnRemoveConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onRemoveConfigurationSetMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnRemoveConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onRemoveConfigurationSetMock("config_id2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnActivateSet()メソッドのテスト * * - */ void test_setOnActivateSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnActivateSetCallbackMock* cdm1 = new OnActivateSetCallbackMock(); OnActivateSetCallbackMock* cdm2 = new OnActivateSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnActivateSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onActivateSetMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnActivateSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onActivateSetMock("config_id2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } }; }; // namespace ConfigAdmin /* * Register test suite */ CPPUNIT_TEST_SUITE_REGISTRATION(Config::ConfigTests); CPPUNIT_TEST_SUITE_REGISTRATION(ConfigAdmin::ConfigAdminTests); #ifdef LOCAL_MAIN int main(int argc, char* argv[]) { FORMAT format = TEXT_OUT; int target = 0; std::string xsl; std::string ns; std::string fname; std::ofstream ofs; int i(1); while (i < argc) { std::string arg(argv[i]); std::string next_arg; if (i + 1 < argc) next_arg = argv[i + 1]; else next_arg = ""; if (arg == "--text") { format = TEXT_OUT; break; } if (arg == "--xml") { if (next_arg == "") { fname = argv[0]; fname += ".xml"; } else { fname = next_arg; } format = XML_OUT; ofs.open(fname.c_str()); } if ( arg == "--compiler" ) { format = COMPILER_OUT; break; } if ( arg == "--cerr" ) { target = 1; break; } if ( arg == "--xsl" ) { if (next_arg == "") xsl = "default.xsl"; else xsl = next_arg; } if ( arg == "--namespace" ) { if (next_arg == "") { std::cerr << "no namespace specified" << std::endl; exit(1); } else { xsl = next_arg; } } ++i; } CppUnit::TextUi::TestRunner runner; if ( ns.empty() ) runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest()); else runner.addTest(CppUnit::TestFactoryRegistry::getRegistry(ns).makeTest()); CppUnit::Outputter* outputter = 0; std::ostream* stream = target ? &std::cerr : &std::cout; switch ( format ) { case TEXT_OUT : outputter = new CppUnit::TextOutputter(&runner.result(),*stream); break; case XML_OUT : std::cout << "XML_OUT" << std::endl; outputter = new CppUnit::XmlOutputter(&runner.result(), ofs, "shift_jis"); static_cast<CppUnit::XmlOutputter*>(outputter)->setStyleSheet(xsl); break; case COMPILER_OUT : outputter = new CppUnit::CompilerOutputter(&runner.result(),*stream); break; } runner.setOutputter(outputter); runner.run(); return 0; // runner.run() ? 0 : 1; } #endif // MAIN #endif // ConfigAdmin_cpp
1097  configAdmin.setOnUpdateParam(cdm1);
1098  CPPUNIT_ASSERT(!cdm1->result);
1099  configAdmin.onUpdateParamMock("config_id", "param1");
1100  CPPUNIT_ASSERT(cdm1->result);
1101 
1102  // 2回目のsetでdeleteが呼ばれる configAdmin.setOnUpdateParam(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onUpdateParamMock("config_id", "param2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnSetConfigurationSet()メソッドのテスト * * - */ void test_setOnSetConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); coil::Properties configSet2("config_id2"); configSet2.setProperty("config_id2.key", "value2"); OnSetConfigurationSetCallbackMock* cdm1 = new OnSetConfigurationSetCallbackMock(); OnSetConfigurationSetCallbackMock* cdm2 = new OnSetConfigurationSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnSetConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onSetConfigurationSetMock(configSet); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnSetConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onSetConfigurationSetMock(configSet2); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnAddConfigurationSet()メソッドのテスト * * - */ void test_setOnAddConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); coil::Properties configSet2("config_id2"); configSet2.setProperty("config_id2.key", "value2"); OnAddConfigurationAddCallbackMock* cdm1 = new OnAddConfigurationAddCallbackMock(); OnAddConfigurationAddCallbackMock* cdm2 = new OnAddConfigurationAddCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnAddConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onAddConfigurationSetMock(configSet); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnAddConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onAddConfigurationSetMock(configSet2); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnRemoveConfigurationSet()メソッドのテスト * * - */ void test_setOnRemoveConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnRemoveConfigurationSetCallbackMock* cdm1 = new OnRemoveConfigurationSetCallbackMock(); OnRemoveConfigurationSetCallbackMock* cdm2 = new OnRemoveConfigurationSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnRemoveConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onRemoveConfigurationSetMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnRemoveConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onRemoveConfigurationSetMock("config_id2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnActivateSet()メソッドのテスト * * - */ void test_setOnActivateSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnActivateSetCallbackMock* cdm1 = new OnActivateSetCallbackMock(); OnActivateSetCallbackMock* cdm2 = new OnActivateSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnActivateSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onActivateSetMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnActivateSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onActivateSetMock("config_id2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } }; }; // namespace ConfigAdmin /* * Register test suite */ CPPUNIT_TEST_SUITE_REGISTRATION(Config::ConfigTests); CPPUNIT_TEST_SUITE_REGISTRATION(ConfigAdmin::ConfigAdminTests); #ifdef LOCAL_MAIN int main(int argc, char* argv[]) { FORMAT format = TEXT_OUT; int target = 0; std::string xsl; std::string ns; std::string fname; std::ofstream ofs; int i(1); while (i < argc) { std::string arg(argv[i]); std::string next_arg; if (i + 1 < argc) next_arg = argv[i + 1]; else next_arg = ""; if (arg == "--text") { format = TEXT_OUT; break; } if (arg == "--xml") { if (next_arg == "") { fname = argv[0]; fname += ".xml"; } else { fname = next_arg; } format = XML_OUT; ofs.open(fname.c_str()); } if ( arg == "--compiler" ) { format = COMPILER_OUT; break; } if ( arg == "--cerr" ) { target = 1; break; } if ( arg == "--xsl" ) { if (next_arg == "") xsl = "default.xsl"; else xsl = next_arg; } if ( arg == "--namespace" ) { if (next_arg == "") { std::cerr << "no namespace specified" << std::endl; exit(1); } else { xsl = next_arg; } } ++i; } CppUnit::TextUi::TestRunner runner; if ( ns.empty() ) runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest()); else runner.addTest(CppUnit::TestFactoryRegistry::getRegistry(ns).makeTest()); CppUnit::Outputter* outputter = 0; std::ostream* stream = target ? &std::cerr : &std::cout; switch ( format ) { case TEXT_OUT : outputter = new CppUnit::TextOutputter(&runner.result(),*stream); break; case XML_OUT : std::cout << "XML_OUT" << std::endl; outputter = new CppUnit::XmlOutputter(&runner.result(), ofs, "shift_jis"); static_cast<CppUnit::XmlOutputter*>(outputter)->setStyleSheet(xsl); break; case COMPILER_OUT : outputter = new CppUnit::CompilerOutputter(&runner.result(),*stream); break; } runner.setOutputter(outputter); runner.run(); return 0; // runner.run() ? 0 : 1; } #endif // MAIN #endif // ConfigAdmin_cpp
1103  configAdmin.setOnUpdateParam(cdm2);
1104  CPPUNIT_ASSERT(!cdm2->result);
1105  configAdmin.onUpdateParamMock("config_id", "param2");
1106  CPPUNIT_ASSERT(cdm2->result);
1107 
1108  // delete cdm1; delete cdm2 は不要です。
1109  // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。
1110  }
1111 
1118  {
1119  coil::Properties configSet("config_id");
1120  configSet.setProperty("config_id.key", "value");
1121  ConfigAdminMock configAdmin(configSet);
1122  coil::Properties configSet2("config_id2");
1123  configSet2.setProperty("config_id2.key", "value2");
1124 
1127 
1128  // 1回目のsetでメンバー変数へ設定 configAdmin.setOnSetConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onSetConfigurationSetMock(configSet); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnSetConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onSetConfigurationSetMock(configSet2); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnAddConfigurationSet()メソッドのテスト * * - */ void test_setOnAddConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); coil::Properties configSet2("config_id2"); configSet2.setProperty("config_id2.key", "value2"); OnAddConfigurationAddCallbackMock* cdm1 = new OnAddConfigurationAddCallbackMock(); OnAddConfigurationAddCallbackMock* cdm2 = new OnAddConfigurationAddCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnAddConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onAddConfigurationSetMock(configSet); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnAddConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onAddConfigurationSetMock(configSet2); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnRemoveConfigurationSet()メソッドのテスト * * - */ void test_setOnRemoveConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnRemoveConfigurationSetCallbackMock* cdm1 = new OnRemoveConfigurationSetCallbackMock(); OnRemoveConfigurationSetCallbackMock* cdm2 = new OnRemoveConfigurationSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnRemoveConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onRemoveConfigurationSetMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnRemoveConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onRemoveConfigurationSetMock("config_id2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnActivateSet()メソッドのテスト * * - */ void test_setOnActivateSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnActivateSetCallbackMock* cdm1 = new OnActivateSetCallbackMock(); OnActivateSetCallbackMock* cdm2 = new OnActivateSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnActivateSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onActivateSetMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnActivateSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onActivateSetMock("config_id2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } }; }; // namespace ConfigAdmin /* * Register test suite */ CPPUNIT_TEST_SUITE_REGISTRATION(Config::ConfigTests); CPPUNIT_TEST_SUITE_REGISTRATION(ConfigAdmin::ConfigAdminTests); #ifdef LOCAL_MAIN int main(int argc, char* argv[]) { FORMAT format = TEXT_OUT; int target = 0; std::string xsl; std::string ns; std::string fname; std::ofstream ofs; int i(1); while (i < argc) { std::string arg(argv[i]); std::string next_arg; if (i + 1 < argc) next_arg = argv[i + 1]; else next_arg = ""; if (arg == "--text") { format = TEXT_OUT; break; } if (arg == "--xml") { if (next_arg == "") { fname = argv[0]; fname += ".xml"; } else { fname = next_arg; } format = XML_OUT; ofs.open(fname.c_str()); } if ( arg == "--compiler" ) { format = COMPILER_OUT; break; } if ( arg == "--cerr" ) { target = 1; break; } if ( arg == "--xsl" ) { if (next_arg == "") xsl = "default.xsl"; else xsl = next_arg; } if ( arg == "--namespace" ) { if (next_arg == "") { std::cerr << "no namespace specified" << std::endl; exit(1); } else { xsl = next_arg; } } ++i; } CppUnit::TextUi::TestRunner runner; if ( ns.empty() ) runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest()); else runner.addTest(CppUnit::TestFactoryRegistry::getRegistry(ns).makeTest()); CppUnit::Outputter* outputter = 0; std::ostream* stream = target ? &std::cerr : &std::cout; switch ( format ) { case TEXT_OUT : outputter = new CppUnit::TextOutputter(&runner.result(),*stream); break; case XML_OUT : std::cout << "XML_OUT" << std::endl; outputter = new CppUnit::XmlOutputter(&runner.result(), ofs, "shift_jis"); static_cast<CppUnit::XmlOutputter*>(outputter)->setStyleSheet(xsl); break; case COMPILER_OUT : outputter = new CppUnit::CompilerOutputter(&runner.result(),*stream); break; } runner.setOutputter(outputter); runner.run(); return 0; // runner.run() ? 0 : 1; } #endif // MAIN #endif // ConfigAdmin_cpp
1129  configAdmin.setOnSetConfigurationSet(cdm1);
1130  CPPUNIT_ASSERT(!cdm1->result);
1131  configAdmin.onSetConfigurationSetMock(configSet);
1132  CPPUNIT_ASSERT(cdm1->result);
1133 
1134  // 2回目のsetでdeleteが呼ばれる configAdmin.setOnSetConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onSetConfigurationSetMock(configSet2); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnAddConfigurationSet()メソッドのテスト * * - */ void test_setOnAddConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); coil::Properties configSet2("config_id2"); configSet2.setProperty("config_id2.key", "value2"); OnAddConfigurationAddCallbackMock* cdm1 = new OnAddConfigurationAddCallbackMock(); OnAddConfigurationAddCallbackMock* cdm2 = new OnAddConfigurationAddCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnAddConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onAddConfigurationSetMock(configSet); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnAddConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onAddConfigurationSetMock(configSet2); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnRemoveConfigurationSet()メソッドのテスト * * - */ void test_setOnRemoveConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnRemoveConfigurationSetCallbackMock* cdm1 = new OnRemoveConfigurationSetCallbackMock(); OnRemoveConfigurationSetCallbackMock* cdm2 = new OnRemoveConfigurationSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnRemoveConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onRemoveConfigurationSetMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnRemoveConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onRemoveConfigurationSetMock("config_id2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnActivateSet()メソッドのテスト * * - */ void test_setOnActivateSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnActivateSetCallbackMock* cdm1 = new OnActivateSetCallbackMock(); OnActivateSetCallbackMock* cdm2 = new OnActivateSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnActivateSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onActivateSetMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnActivateSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onActivateSetMock("config_id2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } }; }; // namespace ConfigAdmin /* * Register test suite */ CPPUNIT_TEST_SUITE_REGISTRATION(Config::ConfigTests); CPPUNIT_TEST_SUITE_REGISTRATION(ConfigAdmin::ConfigAdminTests); #ifdef LOCAL_MAIN int main(int argc, char* argv[]) { FORMAT format = TEXT_OUT; int target = 0; std::string xsl; std::string ns; std::string fname; std::ofstream ofs; int i(1); while (i < argc) { std::string arg(argv[i]); std::string next_arg; if (i + 1 < argc) next_arg = argv[i + 1]; else next_arg = ""; if (arg == "--text") { format = TEXT_OUT; break; } if (arg == "--xml") { if (next_arg == "") { fname = argv[0]; fname += ".xml"; } else { fname = next_arg; } format = XML_OUT; ofs.open(fname.c_str()); } if ( arg == "--compiler" ) { format = COMPILER_OUT; break; } if ( arg == "--cerr" ) { target = 1; break; } if ( arg == "--xsl" ) { if (next_arg == "") xsl = "default.xsl"; else xsl = next_arg; } if ( arg == "--namespace" ) { if (next_arg == "") { std::cerr << "no namespace specified" << std::endl; exit(1); } else { xsl = next_arg; } } ++i; } CppUnit::TextUi::TestRunner runner; if ( ns.empty() ) runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest()); else runner.addTest(CppUnit::TestFactoryRegistry::getRegistry(ns).makeTest()); CppUnit::Outputter* outputter = 0; std::ostream* stream = target ? &std::cerr : &std::cout; switch ( format ) { case TEXT_OUT : outputter = new CppUnit::TextOutputter(&runner.result(),*stream); break; case XML_OUT : std::cout << "XML_OUT" << std::endl; outputter = new CppUnit::XmlOutputter(&runner.result(), ofs, "shift_jis"); static_cast<CppUnit::XmlOutputter*>(outputter)->setStyleSheet(xsl); break; case COMPILER_OUT : outputter = new CppUnit::CompilerOutputter(&runner.result(),*stream); break; } runner.setOutputter(outputter); runner.run(); return 0; // runner.run() ? 0 : 1; } #endif // MAIN #endif // ConfigAdmin_cpp
1135  configAdmin.setOnSetConfigurationSet(cdm2);
1136  CPPUNIT_ASSERT(!cdm2->result);
1137  configAdmin.onSetConfigurationSetMock(configSet2);
1138  CPPUNIT_ASSERT(cdm2->result);
1139 
1140  // delete cdm1; delete cdm2 は不要です。
1141  // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。
1142  }
1143 
1150  {
1151  coil::Properties configSet("config_id");
1152  configSet.setProperty("config_id.key", "value");
1153  ConfigAdminMock configAdmin(configSet);
1154  coil::Properties configSet2("config_id2");
1155  configSet2.setProperty("config_id2.key", "value2");
1156 
1159 
1160  // 1回目のsetでメンバー変数へ設定 configAdmin.setOnAddConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onAddConfigurationSetMock(configSet); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnAddConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onAddConfigurationSetMock(configSet2); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnRemoveConfigurationSet()メソッドのテスト * * - */ void test_setOnRemoveConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnRemoveConfigurationSetCallbackMock* cdm1 = new OnRemoveConfigurationSetCallbackMock(); OnRemoveConfigurationSetCallbackMock* cdm2 = new OnRemoveConfigurationSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnRemoveConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onRemoveConfigurationSetMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnRemoveConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onRemoveConfigurationSetMock("config_id2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnActivateSet()メソッドのテスト * * - */ void test_setOnActivateSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnActivateSetCallbackMock* cdm1 = new OnActivateSetCallbackMock(); OnActivateSetCallbackMock* cdm2 = new OnActivateSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnActivateSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onActivateSetMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnActivateSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onActivateSetMock("config_id2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } }; }; // namespace ConfigAdmin /* * Register test suite */ CPPUNIT_TEST_SUITE_REGISTRATION(Config::ConfigTests); CPPUNIT_TEST_SUITE_REGISTRATION(ConfigAdmin::ConfigAdminTests); #ifdef LOCAL_MAIN int main(int argc, char* argv[]) { FORMAT format = TEXT_OUT; int target = 0; std::string xsl; std::string ns; std::string fname; std::ofstream ofs; int i(1); while (i < argc) { std::string arg(argv[i]); std::string next_arg; if (i + 1 < argc) next_arg = argv[i + 1]; else next_arg = ""; if (arg == "--text") { format = TEXT_OUT; break; } if (arg == "--xml") { if (next_arg == "") { fname = argv[0]; fname += ".xml"; } else { fname = next_arg; } format = XML_OUT; ofs.open(fname.c_str()); } if ( arg == "--compiler" ) { format = COMPILER_OUT; break; } if ( arg == "--cerr" ) { target = 1; break; } if ( arg == "--xsl" ) { if (next_arg == "") xsl = "default.xsl"; else xsl = next_arg; } if ( arg == "--namespace" ) { if (next_arg == "") { std::cerr << "no namespace specified" << std::endl; exit(1); } else { xsl = next_arg; } } ++i; } CppUnit::TextUi::TestRunner runner; if ( ns.empty() ) runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest()); else runner.addTest(CppUnit::TestFactoryRegistry::getRegistry(ns).makeTest()); CppUnit::Outputter* outputter = 0; std::ostream* stream = target ? &std::cerr : &std::cout; switch ( format ) { case TEXT_OUT : outputter = new CppUnit::TextOutputter(&runner.result(),*stream); break; case XML_OUT : std::cout << "XML_OUT" << std::endl; outputter = new CppUnit::XmlOutputter(&runner.result(), ofs, "shift_jis"); static_cast<CppUnit::XmlOutputter*>(outputter)->setStyleSheet(xsl); break; case COMPILER_OUT : outputter = new CppUnit::CompilerOutputter(&runner.result(),*stream); break; } runner.setOutputter(outputter); runner.run(); return 0; // runner.run() ? 0 : 1; } #endif // MAIN #endif // ConfigAdmin_cpp
1161  configAdmin.setOnAddConfigurationSet(cdm1);
1162  CPPUNIT_ASSERT(!cdm1->result);
1163  configAdmin.onAddConfigurationSetMock(configSet);
1164  CPPUNIT_ASSERT(cdm1->result);
1165 
1166  // 2回目のsetでdeleteが呼ばれる configAdmin.setOnAddConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onAddConfigurationSetMock(configSet2); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnRemoveConfigurationSet()メソッドのテスト * * - */ void test_setOnRemoveConfigurationSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnRemoveConfigurationSetCallbackMock* cdm1 = new OnRemoveConfigurationSetCallbackMock(); OnRemoveConfigurationSetCallbackMock* cdm2 = new OnRemoveConfigurationSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnRemoveConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onRemoveConfigurationSetMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnRemoveConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onRemoveConfigurationSetMock("config_id2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnActivateSet()メソッドのテスト * * - */ void test_setOnActivateSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnActivateSetCallbackMock* cdm1 = new OnActivateSetCallbackMock(); OnActivateSetCallbackMock* cdm2 = new OnActivateSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnActivateSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onActivateSetMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnActivateSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onActivateSetMock("config_id2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } }; }; // namespace ConfigAdmin /* * Register test suite */ CPPUNIT_TEST_SUITE_REGISTRATION(Config::ConfigTests); CPPUNIT_TEST_SUITE_REGISTRATION(ConfigAdmin::ConfigAdminTests); #ifdef LOCAL_MAIN int main(int argc, char* argv[]) { FORMAT format = TEXT_OUT; int target = 0; std::string xsl; std::string ns; std::string fname; std::ofstream ofs; int i(1); while (i < argc) { std::string arg(argv[i]); std::string next_arg; if (i + 1 < argc) next_arg = argv[i + 1]; else next_arg = ""; if (arg == "--text") { format = TEXT_OUT; break; } if (arg == "--xml") { if (next_arg == "") { fname = argv[0]; fname += ".xml"; } else { fname = next_arg; } format = XML_OUT; ofs.open(fname.c_str()); } if ( arg == "--compiler" ) { format = COMPILER_OUT; break; } if ( arg == "--cerr" ) { target = 1; break; } if ( arg == "--xsl" ) { if (next_arg == "") xsl = "default.xsl"; else xsl = next_arg; } if ( arg == "--namespace" ) { if (next_arg == "") { std::cerr << "no namespace specified" << std::endl; exit(1); } else { xsl = next_arg; } } ++i; } CppUnit::TextUi::TestRunner runner; if ( ns.empty() ) runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest()); else runner.addTest(CppUnit::TestFactoryRegistry::getRegistry(ns).makeTest()); CppUnit::Outputter* outputter = 0; std::ostream* stream = target ? &std::cerr : &std::cout; switch ( format ) { case TEXT_OUT : outputter = new CppUnit::TextOutputter(&runner.result(),*stream); break; case XML_OUT : std::cout << "XML_OUT" << std::endl; outputter = new CppUnit::XmlOutputter(&runner.result(), ofs, "shift_jis"); static_cast<CppUnit::XmlOutputter*>(outputter)->setStyleSheet(xsl); break; case COMPILER_OUT : outputter = new CppUnit::CompilerOutputter(&runner.result(),*stream); break; } runner.setOutputter(outputter); runner.run(); return 0; // runner.run() ? 0 : 1; } #endif // MAIN #endif // ConfigAdmin_cpp
1167  configAdmin.setOnAddConfigurationSet(cdm2);
1168  CPPUNIT_ASSERT(!cdm2->result);
1169  configAdmin.onAddConfigurationSetMock(configSet2);
1170  CPPUNIT_ASSERT(cdm2->result);
1171 
1172  // delete cdm1; delete cdm2 は不要です。
1173  // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。
1174  }
1175 
1182  {
1183  coil::Properties configSet("config_id");
1184  configSet.setProperty("config_id.key", "value");
1185  ConfigAdminMock configAdmin(configSet);
1186 
1189 
1190  // 1回目のsetでメンバー変数へ設定 configAdmin.setOnRemoveConfigurationSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onRemoveConfigurationSetMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnRemoveConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onRemoveConfigurationSetMock("config_id2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnActivateSet()メソッドのテスト * * - */ void test_setOnActivateSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnActivateSetCallbackMock* cdm1 = new OnActivateSetCallbackMock(); OnActivateSetCallbackMock* cdm2 = new OnActivateSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnActivateSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onActivateSetMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnActivateSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onActivateSetMock("config_id2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } }; }; // namespace ConfigAdmin /* * Register test suite */ CPPUNIT_TEST_SUITE_REGISTRATION(Config::ConfigTests); CPPUNIT_TEST_SUITE_REGISTRATION(ConfigAdmin::ConfigAdminTests); #ifdef LOCAL_MAIN int main(int argc, char* argv[]) { FORMAT format = TEXT_OUT; int target = 0; std::string xsl; std::string ns; std::string fname; std::ofstream ofs; int i(1); while (i < argc) { std::string arg(argv[i]); std::string next_arg; if (i + 1 < argc) next_arg = argv[i + 1]; else next_arg = ""; if (arg == "--text") { format = TEXT_OUT; break; } if (arg == "--xml") { if (next_arg == "") { fname = argv[0]; fname += ".xml"; } else { fname = next_arg; } format = XML_OUT; ofs.open(fname.c_str()); } if ( arg == "--compiler" ) { format = COMPILER_OUT; break; } if ( arg == "--cerr" ) { target = 1; break; } if ( arg == "--xsl" ) { if (next_arg == "") xsl = "default.xsl"; else xsl = next_arg; } if ( arg == "--namespace" ) { if (next_arg == "") { std::cerr << "no namespace specified" << std::endl; exit(1); } else { xsl = next_arg; } } ++i; } CppUnit::TextUi::TestRunner runner; if ( ns.empty() ) runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest()); else runner.addTest(CppUnit::TestFactoryRegistry::getRegistry(ns).makeTest()); CppUnit::Outputter* outputter = 0; std::ostream* stream = target ? &std::cerr : &std::cout; switch ( format ) { case TEXT_OUT : outputter = new CppUnit::TextOutputter(&runner.result(),*stream); break; case XML_OUT : std::cout << "XML_OUT" << std::endl; outputter = new CppUnit::XmlOutputter(&runner.result(), ofs, "shift_jis"); static_cast<CppUnit::XmlOutputter*>(outputter)->setStyleSheet(xsl); break; case COMPILER_OUT : outputter = new CppUnit::CompilerOutputter(&runner.result(),*stream); break; } runner.setOutputter(outputter); runner.run(); return 0; // runner.run() ? 0 : 1; } #endif // MAIN #endif // ConfigAdmin_cpp
1191  configAdmin.setOnRemoveConfigurationSet(cdm1);
1192  CPPUNIT_ASSERT(!cdm1->result);
1193  configAdmin.onRemoveConfigurationSetMock("config_id");
1194  CPPUNIT_ASSERT(cdm1->result);
1195 
1196  // 2回目のsetでdeleteが呼ばれる configAdmin.setOnRemoveConfigurationSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onRemoveConfigurationSetMock("config_id2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } /*! * @brief setOnActivateSet()メソッドのテスト * * - */ void test_setOnActivateSet() { coil::Properties configSet("config_id"); configSet.setProperty("config_id.key", "value"); ConfigAdminMock configAdmin(configSet); OnActivateSetCallbackMock* cdm1 = new OnActivateSetCallbackMock(); OnActivateSetCallbackMock* cdm2 = new OnActivateSetCallbackMock(); // 1回目のsetでメンバー変数へ設定 configAdmin.setOnActivateSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onActivateSetMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnActivateSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onActivateSetMock("config_id2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } }; }; // namespace ConfigAdmin /* * Register test suite */ CPPUNIT_TEST_SUITE_REGISTRATION(Config::ConfigTests); CPPUNIT_TEST_SUITE_REGISTRATION(ConfigAdmin::ConfigAdminTests); #ifdef LOCAL_MAIN int main(int argc, char* argv[]) { FORMAT format = TEXT_OUT; int target = 0; std::string xsl; std::string ns; std::string fname; std::ofstream ofs; int i(1); while (i < argc) { std::string arg(argv[i]); std::string next_arg; if (i + 1 < argc) next_arg = argv[i + 1]; else next_arg = ""; if (arg == "--text") { format = TEXT_OUT; break; } if (arg == "--xml") { if (next_arg == "") { fname = argv[0]; fname += ".xml"; } else { fname = next_arg; } format = XML_OUT; ofs.open(fname.c_str()); } if ( arg == "--compiler" ) { format = COMPILER_OUT; break; } if ( arg == "--cerr" ) { target = 1; break; } if ( arg == "--xsl" ) { if (next_arg == "") xsl = "default.xsl"; else xsl = next_arg; } if ( arg == "--namespace" ) { if (next_arg == "") { std::cerr << "no namespace specified" << std::endl; exit(1); } else { xsl = next_arg; } } ++i; } CppUnit::TextUi::TestRunner runner; if ( ns.empty() ) runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest()); else runner.addTest(CppUnit::TestFactoryRegistry::getRegistry(ns).makeTest()); CppUnit::Outputter* outputter = 0; std::ostream* stream = target ? &std::cerr : &std::cout; switch ( format ) { case TEXT_OUT : outputter = new CppUnit::TextOutputter(&runner.result(),*stream); break; case XML_OUT : std::cout << "XML_OUT" << std::endl; outputter = new CppUnit::XmlOutputter(&runner.result(), ofs, "shift_jis"); static_cast<CppUnit::XmlOutputter*>(outputter)->setStyleSheet(xsl); break; case COMPILER_OUT : outputter = new CppUnit::CompilerOutputter(&runner.result(),*stream); break; } runner.setOutputter(outputter); runner.run(); return 0; // runner.run() ? 0 : 1; } #endif // MAIN #endif // ConfigAdmin_cpp
1197  configAdmin.setOnRemoveConfigurationSet(cdm2);
1198  CPPUNIT_ASSERT(!cdm2->result);
1199  configAdmin.onRemoveConfigurationSetMock("config_id2");
1200  CPPUNIT_ASSERT(cdm2->result);
1201 
1202  // delete cdm1; delete cdm2 は不要です。
1203  // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。
1204  }
1205 
1212  {
1213  coil::Properties configSet("config_id");
1214  configSet.setProperty("config_id.key", "value");
1215  ConfigAdminMock configAdmin(configSet);
1216 
1219 
1220  // 1回目のsetでメンバー変数へ設定 configAdmin.setOnActivateSet(cdm1); CPPUNIT_ASSERT(!cdm1->result); configAdmin.onActivateSetMock("config_id"); CPPUNIT_ASSERT(cdm1->result); // 2回目のsetでdeleteが呼ばれる configAdmin.setOnActivateSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onActivateSetMock("config_id2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } }; }; // namespace ConfigAdmin /* * Register test suite */ CPPUNIT_TEST_SUITE_REGISTRATION(Config::ConfigTests); CPPUNIT_TEST_SUITE_REGISTRATION(ConfigAdmin::ConfigAdminTests); #ifdef LOCAL_MAIN int main(int argc, char* argv[]) { FORMAT format = TEXT_OUT; int target = 0; std::string xsl; std::string ns; std::string fname; std::ofstream ofs; int i(1); while (i < argc) { std::string arg(argv[i]); std::string next_arg; if (i + 1 < argc) next_arg = argv[i + 1]; else next_arg = ""; if (arg == "--text") { format = TEXT_OUT; break; } if (arg == "--xml") { if (next_arg == "") { fname = argv[0]; fname += ".xml"; } else { fname = next_arg; } format = XML_OUT; ofs.open(fname.c_str()); } if ( arg == "--compiler" ) { format = COMPILER_OUT; break; } if ( arg == "--cerr" ) { target = 1; break; } if ( arg == "--xsl" ) { if (next_arg == "") xsl = "default.xsl"; else xsl = next_arg; } if ( arg == "--namespace" ) { if (next_arg == "") { std::cerr << "no namespace specified" << std::endl; exit(1); } else { xsl = next_arg; } } ++i; } CppUnit::TextUi::TestRunner runner; if ( ns.empty() ) runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest()); else runner.addTest(CppUnit::TestFactoryRegistry::getRegistry(ns).makeTest()); CppUnit::Outputter* outputter = 0; std::ostream* stream = target ? &std::cerr : &std::cout; switch ( format ) { case TEXT_OUT : outputter = new CppUnit::TextOutputter(&runner.result(),*stream); break; case XML_OUT : std::cout << "XML_OUT" << std::endl; outputter = new CppUnit::XmlOutputter(&runner.result(), ofs, "shift_jis"); static_cast<CppUnit::XmlOutputter*>(outputter)->setStyleSheet(xsl); break; case COMPILER_OUT : outputter = new CppUnit::CompilerOutputter(&runner.result(),*stream); break; } runner.setOutputter(outputter); runner.run(); return 0; // runner.run() ? 0 : 1; } #endif // MAIN #endif // ConfigAdmin_cpp
1221  configAdmin.setOnActivateSet(cdm1);
1222  CPPUNIT_ASSERT(!cdm1->result);
1223  configAdmin.onActivateSetMock("config_id");
1224  CPPUNIT_ASSERT(cdm1->result);
1225 
1226  // 2回目のsetでdeleteが呼ばれる configAdmin.setOnActivateSet(cdm2); CPPUNIT_ASSERT(!cdm2->result); configAdmin.onActivateSetMock("config_id2"); CPPUNIT_ASSERT(cdm2->result); // delete cdm1; delete cdm2 は不要です。 // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。 } }; }; // namespace ConfigAdmin /* * Register test suite */ CPPUNIT_TEST_SUITE_REGISTRATION(Config::ConfigTests); CPPUNIT_TEST_SUITE_REGISTRATION(ConfigAdmin::ConfigAdminTests); #ifdef LOCAL_MAIN int main(int argc, char* argv[]) { FORMAT format = TEXT_OUT; int target = 0; std::string xsl; std::string ns; std::string fname; std::ofstream ofs; int i(1); while (i < argc) { std::string arg(argv[i]); std::string next_arg; if (i + 1 < argc) next_arg = argv[i + 1]; else next_arg = ""; if (arg == "--text") { format = TEXT_OUT; break; } if (arg == "--xml") { if (next_arg == "") { fname = argv[0]; fname += ".xml"; } else { fname = next_arg; } format = XML_OUT; ofs.open(fname.c_str()); } if ( arg == "--compiler" ) { format = COMPILER_OUT; break; } if ( arg == "--cerr" ) { target = 1; break; } if ( arg == "--xsl" ) { if (next_arg == "") xsl = "default.xsl"; else xsl = next_arg; } if ( arg == "--namespace" ) { if (next_arg == "") { std::cerr << "no namespace specified" << std::endl; exit(1); } else { xsl = next_arg; } } ++i; } CppUnit::TextUi::TestRunner runner; if ( ns.empty() ) runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest()); else runner.addTest(CppUnit::TestFactoryRegistry::getRegistry(ns).makeTest()); CppUnit::Outputter* outputter = 0; std::ostream* stream = target ? &std::cerr : &std::cout; switch ( format ) { case TEXT_OUT : outputter = new CppUnit::TextOutputter(&runner.result(),*stream); break; case XML_OUT : std::cout << "XML_OUT" << std::endl; outputter = new CppUnit::XmlOutputter(&runner.result(), ofs, "shift_jis"); static_cast<CppUnit::XmlOutputter*>(outputter)->setStyleSheet(xsl); break; case COMPILER_OUT : outputter = new CppUnit::CompilerOutputter(&runner.result(),*stream); break; } runner.setOutputter(outputter); runner.run(); return 0; // runner.run() ? 0 : 1; } #endif // MAIN #endif // ConfigAdmin_cpp
1227  configAdmin.setOnActivateSet(cdm2);
1228  CPPUNIT_ASSERT(!cdm2->result);
1229  configAdmin.onActivateSetMock("config_id2");
1230  CPPUNIT_ASSERT(cdm2->result);
1231 
1232  // delete cdm1; delete cdm2 は不要です。
1233  // ConfigAdmin::setOn*()の中で、delete m_* を実行しています。
1234  }
1235 
1236 
1237  };
1238 }; // namespace ConfigAdmin
1239 
1240 
1241 /*
1242  * Register test suite
1243  */
1246 
1247 #ifdef LOCAL_MAIN
1248 int main(int argc, char* argv[])
1249 {
1250 
1251  FORMAT format = TEXT_OUT;
1252  int target = 0;
1253  std::string xsl;
1254  std::string ns;
1255  std::string fname;
1256  std::ofstream ofs;
1257 
1258  int i(1);
1259  while (i < argc)
1260  {
1261  std::string arg(argv[i]);
1262  std::string next_arg;
1263  if (i + 1 < argc) next_arg = argv[i + 1];
1264  else next_arg = "";
1265 
1266  if (arg == "--text") { format = TEXT_OUT; break; }
1267  if (arg == "--xml")
1268  {
1269  if (next_arg == "")
1270  {
1271  fname = argv[0];
1272  fname += ".xml";
1273  }
1274  else
1275  {
1276  fname = next_arg;
1277  }
1278  format = XML_OUT;
1279  ofs.open(fname.c_str());
1280  }
1281  if ( arg == "--compiler" ) { format = COMPILER_OUT; break; }
1282  if ( arg == "--cerr" ) { target = 1; break; }
1283  if ( arg == "--xsl" )
1284  {
1285  if (next_arg == "") xsl = "default.xsl";
1286  else xsl = next_arg;
1287  }
1288  if ( arg == "--namespace" )
1289  {
1290  if (next_arg == "")
1291  {
1292  std::cerr << "no namespace specified" << std::endl;
1293  exit(1);
1294  }
1295  else
1296  {
1297  xsl = next_arg;
1298  }
1299  }
1300  ++i;
1301  }
1302  CppUnit::TextUi::TestRunner runner;
1303  if ( ns.empty() )
1304  runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest());
1305  else
1306  runner.addTest(CppUnit::TestFactoryRegistry::getRegistry(ns).makeTest());
1307  CppUnit::Outputter* outputter = 0;
1308  std::ostream* stream = target ? &std::cerr : &std::cout;
1309  switch ( format )
1310  {
1311  case TEXT_OUT :
1312  outputter = new CppUnit::TextOutputter(&runner.result(),*stream);
1313  break;
1314  case XML_OUT :
1315  std::cout << "XML_OUT" << std::endl;
1316  outputter = new CppUnit::XmlOutputter(&runner.result(),
1317  ofs, "shift_jis");
1318  static_cast<CppUnit::XmlOutputter*>(outputter)->setStyleSheet(xsl);
1319  break;
1320  case COMPILER_OUT :
1321  outputter = new CppUnit::CompilerOutputter(&runner.result(),*stream);
1322  break;
1323  }
1324  runner.setOutputter(outputter);
1325  runner.run();
1326  return 0; // runner.run() ? 0 : 1;
1327 }
1328 #endif // MAIN
1329 #endif // ConfigAdmin_cpp
ConfigAdminMock(coil::Properties &configsets)
void test_setOnActivateSet()
setOnActivateSet()メソッドのテスト
void test_setOnSetConfigurationSet()
setOnSetConfigurationSet()メソッドのテスト
void test_isActive_on_addConfigurationSet()
isActive()メソッドのテスト
int main(int argc, char **argv)
void onAddConfigurationSetMock(const coil::Properties &config_set)
void test_removeConfigurationSet_with_inexist_configuration_id()
removeConfigurationSet()のテスト
void operator()(const coil::Properties &config_set)
Virtual Callback function.
void onUpdateParam(const char *config_set, const char *config_param)
When the configuration parameter is updated, it is called.
void test_bindParameter_already_exist()
bindParameter()メソッドのテスト
RT-Component.
ConfigTests()
Constructor.
virtual void setUp()
Test initialization.
void onRemoveConfigurationSet(const char *config_id)
Called when the configuration set has been deleted.
void test_constructor()
コンストラクタのテスト
void test_haveConfig()
haveConfig()メソッドのテスト
void test_update_by_active_configuration_set()
update()メソッド(アクティブコンフィグレーションセット)のテスト
bool activateConfigurationSet(const char *config_id)
Activate the configuration set.
CPPUNIT_TEST(test_constructor)
void test_isActive_on_removeConfigurationSet()
isActive()メソッドのテスト
void test_update_with_illegal_value()
update()メソッドのテスト
void operator()(const char *config_set)
Virtual Callback function.
bool isActive(void)
Confirm to activate configuration set.
Definition: ConfigAdmin.h:847
void test_getActiveId()
getActiveId()メソッドのテスト
void operator()(const char *config_set)
Virtual Callback function.
ConfigAdmin class.
Definition: ConfigAdmin.h:534
const std::vector< coil::Properties * > & getConfigurationSets(void)
Get all configuration sets.
void operator()(const char *config_id)
Virtual Callback function.
void test_update()
update()メソッドのテスト
void test_getConfigurationSets()
getConfigurationSets()メソッドのテスト
void onRemoveConfigurationSetMock(const char *config_id)
void onSetConfigurationSetMock(const coil::Properties &config_set)
~ConfigTests()
Destructor.
const coil::Properties * getPropertiesBy(const std::string &name, const std::vector< coil::Properties * > &propertiesSet) const
void setOnRemoveConfigurationSet(OnRemoveConfigurationSetCallback *cb)
ConfigurationSetListener class.
ConfigurationSetNameListener class.
ConfigurationParamListener class.
void test_isExist()
isExist()メソッドのテスト
Configuration Administration classes.
const coil::Properties & getActiveConfigurationSet(void)
Get the active configuration set.
void onActivateSet(const char *config_id)
Called when the configuration set is made active.
void setOnActivateSet(OnActivateSetCallback *cb)
void test_isChanged_on_activateConfigurationSet()
isChanged()メソッドのテスト
const coil::Properties & getConfigurationSet(const char *config_id)
Get a configuration set by specified ID.
bool isExist(const char *name)
Check the existence of configuration parameters.
void test_isActive_on_activateConfigurationSet()
isActive()メソッドのテスト
void test_removeConfigurationSet()
removeConfigurationSet()のテスト
void test_setOnAddConfigurationSet()
setOnAddConfigurationSet()メソッドのテスト
virtual void tearDown()
Test finalization.
virtual void tearDown()
Test finalization.
void onUpdateParamMock(const char *config_set, const char *config_param)
void onUpdateMock(const char *config_set)
void update(void)
Update the values of configuration parameters (Active configuration set)
Definition: ConfigAdmin.cpp:64
void setOnUpdate(OnUpdateCallback *cb)
bool isChanged(void)
Confirm to change configuration parameters.
Definition: ConfigAdmin.h:775
void setOnSetConfigurationSet(OnSetConfigurationSetCallback *cb)
bool addConfigurationSet(const coil::Properties &configuration_set)
Add the configuration value to configuration set.
void test_setOnUpdateParam()
setOnUpdateParam()メソッドのテスト
void test_update_with_illegal_default_value()
update()メソッドのテスト
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
void test_isChanged_on_removeConfigurationSet()
isChanged()メソッドのテスト
void test_update_with_specified_parameter_name()
update()メソッド(名称指定)のテスト
CPPUNIT_TEST_SUITE_REGISTRATION(Config::ConfigTests)
void test_bindParameter()
bindParameter()メソッドのテスト
void onUpdate(const char *config_set)
When the configuration parameter is updated, it is called.
void test_setOnRemoveConfigurationSet()
setOnRemoveConfigurationSet()メソッドのテスト
Class represents a set of properties.
Definition: Properties.h:101
const char * getActiveId(void)
Get ID of active configuration set.
Definition: ConfigAdmin.h:796
void onSetConfigurationSet(const coil::Properties &config_set)
Called when the property is added to the configuration set.
void operator()(const char *config_set, const char *config_param)
Virtual Callback function.
void test_update()
update()メソッドのテスト
void operator()(const coil::Properties &config_set)
Virtual Callback function.
void test_update_by_inexist_configuration_set()
update()メソッドのテスト
void onAddConfigurationSet(const coil::Properties &config_set)
Called when a set value is added to the configuration set.
void setOnAddConfigurationSet(OnAddConfigurationAddCallback *cb)
bool bindParameter(const char *param_name, VarType &var, const char *def_val, bool(*trans)(VarType &, const char *)=coil::stringTo)
Setup for configuration parameters.
Definition: ConfigAdmin.h:612
virtual void setUp()
Test initialization.
Config class.
Definition: ConfigAdmin.h:283
bool haveConfig(const char *config_id)
Check the existence of configuration set.
Definition: ConfigAdmin.h:822
bool setConfigurationSetValues(const coil::Properties &configuration_set)
Add to configuration set from specified property.
void test_isChanged_on_addConfigurationSet()
isChanged()メソッドのテスト
void test_bindParameter_illegal_default_value()
bindParameter()メソッドのテスト
void test_setOnUpdate()
setOnUpdate()メソッドのテスト
void setOnUpdateParam(OnUpdateParamCallback *cb)
bool removeConfigurationSet(const char *config_id)
Remove the configuration set.
void test_getActiveConfigurationSet()
getActiveConfigurationSet()メソッドのテスト
void onActivateSetMock(const char *config_id)
void test_setConfigurationSetValues_with_inexist_configuration_set()
setConfigurationSetValues()メソッドのテスト
CPPUNIT_TEST_SUITE(ConfigTests)
const std::string & getProperty(const std::string &key) const
Search for the property with the specified key in this property.
Definition: Properties.cpp:156
void test_constructor()
コンストラクタのテスト


openrtm_aist
Author(s): Noriaki Ando
autogenerated on Thu Jun 6 2019 19:25:57