NVUtilTests.cpp
Go to the documentation of this file.
1 // -*- C++ -*-
21 /*
22  * $Log: NVUtilTests.cpp,v $
23  * Revision 1.5 2008/03/03 12:24:24 arafune
24  * Added some tests.
25  *
26  * Revision 1.4 2008/01/24 01:51:58 tsakamoto
27  * *** empty log message ***
28  *
29  * Revision 1.3 2007/12/27 10:28:16 arafune
30  * *** empty log message ***
31  *
32  * Revision 1.2 2007/12/25 12:13:38 arafune
33  * *** empty log message ***
34  *
35  * Revision 1.1 2007/12/20 07:50:18 arafune
36  * *** empty log message ***
37  *
38  * Revision 1.1 2006/11/27 08:26:13 n-ando
39  * TestSuites are devided into each directory.
40  *
41  * Revision 1.3 2006/11/15 09:47:18 kurihara
42  * tests for find(),isString(),toString() are added.
43  *
44  * Revision 1.1 2006/11/14 07:23:16 kurihara
45  * test program for NVUtil module. first commit.
46  *
47  */
48 
49 #ifndef NVUtil_cpp
50 #define NVUtil_cpp
51 
52 #include <cppunit/ui/text/TestRunner.h>
53 #include <cppunit/TextOutputter.h>
54 #include <cppunit/extensions/TestFactoryRegistry.h>
55 #include <cppunit/extensions/HelperMacros.h>
56 #include <cppunit/TestAssert.h>
57 
58 #include <rtm/NVUtil.h>
59 
60 namespace NVUtil
61 {
62  using namespace NVUtil;
63  using namespace std;
64 
65  int g_argc;
66  vector<string> g_argv;
67 
73  : public CppUnit::TestFixture
74  {
75  CPPUNIT_TEST_SUITE(NVUtilTests);
76  CPPUNIT_TEST(test_newNV_Short);
77  CPPUNIT_TEST(test_newNV_Long);
78  CPPUNIT_TEST(test_newNV_Float);
79  CPPUNIT_TEST(test_newNV_Double);
80  CPPUNIT_TEST(test_newNV_Str);
81  CPPUNIT_TEST(test_newNVChar);
82  CPPUNIT_TEST(test_newNVBool);
83  CPPUNIT_TEST(test_newNVOctet);
84  CPPUNIT_TEST(test_copy);
85  CPPUNIT_TEST(test_toProperties);
86  CPPUNIT_TEST(test_copyToProperties);
87  CPPUNIT_TEST(test_find);
88  CPPUNIT_TEST(test_find_index);
89  CPPUNIT_TEST(test_isString);
90  CPPUNIT_TEST(test_isStringValue);
91  CPPUNIT_TEST(test_toString);
92  CPPUNIT_TEST(test_appendStringValue);
93  CPPUNIT_TEST(test_append);
94  CPPUNIT_TEST(test_dump);
95  CPPUNIT_TEST(test_toStringNV);
96  CPPUNIT_TEST_SUITE_END();
97 
98  private:
99 
100  public:
102  {
103  CORBA::ORB_var orb;
104  char* argv[g_argc];
105  for (int i = 0; i < g_argc; i++) {
106  argv[i] = (char *)g_argv[i].c_str();
107  }
108 
109  orb = CORBA::ORB_init(g_argc, argv);
110  }
111 
113  {
114  }
115 
116  virtual void setUp()
117  {
118  }
119 
120  virtual void tearDown()
121  {
122  }
123 
130  {
131  // CORBA::Short型のデータを持つNameValueを生成し、値を比較して正しく生成されていることを確認する CORBA::Short value = 1; string name = "short"; SDOPackage::NameValue nv = newNV(name.c_str(), value); string nvName(nv.name); CPPUNIT_ASSERT_EQUAL(name, nvName); CORBA::Short nvValue; nv.value >>= nvValue; CPPUNIT_ASSERT_EQUAL(value, nvValue); } /*! * @brief newNV(char*,Value)のテスト * * - CORBA::Long型データのNameValueを正しく生成できるか? */ void test_newNV_Long() { // CORBA::Long型のデータを持つNameValueを生成し、値を比較して正しく生成されていることを確認する CORBA::Long value = 999999999; string name = "long"; SDOPackage::NameValue nv = newNV(name.c_str(), value); string nvName(nv.name); CPPUNIT_ASSERT_EQUAL(name, nvName); CORBA::Long nvValue; nv.value >>= nvValue; CPPUNIT_ASSERT_EQUAL(value, nvValue); } /*! * @brief newNV(char*,Value)のテスト * * - CORBA::Float型データのNameValueを正しく生成できるか? */ void test_newNV_Float() { // CORBA::Float型のデータを持つNameValueを生成し、値を比較して正しく生成されていることを確認する CORBA::Float value = 99999.9; string name = "float"; SDOPackage::NameValue nv = newNV(name.c_str(), value); string nvName(nv.name); CPPUNIT_ASSERT_EQUAL(name, nvName); CORBA::Float nvValue; nv.value >>= nvValue; CPPUNIT_ASSERT_EQUAL(value, nvValue); } /*! * @brief newNV(char*,Value)のテスト * * - CORBA::Double型データのNameValueを正しく生成できるか? */ void test_newNV_Double() { // CORBA::Double型のデータを持つNameValueを生成し、値を比較して正しく生成されていることを確認する CORBA::Double value = 9999999.999; string name = "double"; SDOPackage::NameValue nv = newNV(name.c_str(), value); string nvName(nv.name); CPPUNIT_ASSERT_EQUAL(name, nvName); CORBA::Double nvValue; nv.value >>= nvValue; CPPUNIT_ASSERT_EQUAL(value, nvValue); } /*! * @brief newNV(const char*, const char*)のテスト * * - const char*型データのNameValueを正しく生成できるか? */ void test_newNV_Str() { // (1) CORBA::String_var型のvalueとchar*型のnameをnewNV()に渡し、NameValueを取得する string name = "string"; CORBA::String_var value = CORBA::string_dup("Hello, world!"); SDOPackage::NameValue nv = newNV(name.c_str(), value); // (2) newNV()にセットしたnameと、取得したNameValue.nameを比較する string nvName(nv.name); CPPUNIT_ASSERT_EQUAL(name, nvName); // (3) newNV()にセットしたvalueと、取得したNameValue.valueを比較する // CORBA::String_var nvValue; const char* nvValue; nv.value >>= nvValue; CPPUNIT_ASSERT_EQUAL(string("Hello, world!"), string(nvValue)); } /*! * @brief newNVChar()のテスト * * - CORBA::Char型データのNameValueを正しく生成できるか? */ void test_newNVChar() { // (1) CORBA::Char型のvalueとchar*型のnameをnewNVChar()に渡し、NameValueを取得する。 string name = "char"; CORBA::Char value = 'A'; SDOPackage::NameValue nv = newNVChar(name.c_str(), value); // (2) newNVChar()にセットしたnameと取得したNameValue.nameの比較。 string nvName(nv.name); CPPUNIT_ASSERT_EQUAL(name, nvName); // (3) newNVChar()にセットしたvalueと取得したNameValue.valueの比較。 CORBA::Char nvValue; nv.value >>= CORBA::Any::to_char(nvValue); CPPUNIT_ASSERT_EQUAL(value, nvValue); } /*! * @brief newNVBool()のテスト * * - CORBA::Boolean型データのNameValueを正しく生成できるか? */ void test_newNVBool() { string name = "bool"; CORBA::Boolean value = false; SDOPackage::NameValue nv = newNVBool(name.c_str(), value); string nvName(nv.name); CPPUNIT_ASSERT_EQUAL(name, nvName); CORBA::Boolean nvValue; nv.value >>= CORBA::Any::to_boolean(nvValue); CPPUNIT_ASSERT_EQUAL(value, nvValue); } /*! * @brief newNVOctet()のテスト * * - CORBA::Octet型データのNameValueを正しく生成できるか? */ void test_newNVOctet() { string name = "octet"; CORBA::Octet value = 030; SDOPackage::NameValue nv = newNVOctet(name.c_str(), value); string nvName(nv.name); CPPUNIT_ASSERT_EQUAL(name, nvName); CORBA::Octet nvValue; nv.value >>= CORBA::Any::to_octet(nvValue); CPPUNIT_ASSERT_EQUAL(value, nvValue); } /*! * @brief copy()のテスト * * - RTC::Propertiesの内容を正しくをNVListにコピーできるか? */ void test_copy() { // (1) RTC::Propertiesオブジェクトの生成 // ※ Propertiesのコンストラクタでは引数で与えられたmapのキー値だけが保存される。 string name = "port-type"; string value = "port-type-value"; map<string, string> mProp; mProp[name] = value; coil::Properties prop(mProp); // (2)copy()にてPropertiesオブジェクトをnvlistにコピー SDOPackage::NVList nvlist; copyFromProperties(nvlist, prop); // (3) copy()により引数で与えたnvlistが書き換えられているかを確認。 string nvName(nvlist[0].name); CPPUNIT_ASSERT_EQUAL(name, nvName); const char* getval; nvlist[0].value >>= getval; string nvValue(getval); CPPUNIT_ASSERT_EQUAL(value, nvValue); } /*! * @brief toProperties()のテスト * * - NVListの内容を正しくRTC::Propertiesに変換できるか? */ void test_toProperties() { // (1) 変換元となるNVListオブジェクトを生成する SDOPackage::NVList nvlist; nvlist.length(2); string name1 = "testname.test1"; string value1 = "testval1"; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1.c_str(); string name2 = "testname.test2"; string value2 = "testval2"; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2.c_str(); // (2) RTC::Propertiesへ変換する coil::Properties prop = toProperties(nvlist); // (3) 正しく変換されていることを確認する string propValue1 = prop.getProperty(name1); CPPUNIT_ASSERT_EQUAL(value1, propValue1); string propValue2 = prop.getProperty(name2); CPPUNIT_ASSERT_EQUAL(value2, propValue2); } /*! * @brief copyToProperties()のテスト * * - NVListの内容を正しくRTC::Propertiesにコピーできるか? */ void test_copyToProperties() { // (1) コピー元となるNVListオブジェクトを生成する SDOPackage::NVList nvlist; nvlist.length(2); string name1 = "testname.test1"; string value1 = "testval1"; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1.c_str(); string name2 = "testname.test2"; string value2 = "testval2"; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2.c_str(); // (2) RTC::Propertiesへコピーする coil::Properties prop; copyToProperties(prop, nvlist); // (3) 値を比較して、正しくコピーされていることを確認する string propValue1 = prop.getProperty(name1); CPPUNIT_ASSERT_EQUAL(value1, propValue1); string propValue2 = prop.getProperty(name2); CPPUNIT_ASSERT_EQUAL(value2, propValue2); } /*! * @brief find()のテスト * * - 指定した名称でNVList内の値を正しく検索できるか? */ void test_find() { SDOPackage::NVList nvlist; nvlist.length(2); // (1) NVList要素のnameに"short",valueにshort型のデータをセット。 string name1 = "short"; CORBA::Short value1 = 1; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1; // (2) NVList要素のnameに"long",valueにlong型のデータをセット。 string name2 = "long"; CORBA::Long value2 = 111; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2; // (3) nvlistの中からNameValue.nameが"long"のNameValue.valueを検索して、正しい値を取得できることを確認する。 CORBA::Short foundValue1; (find(nvlist, name1.c_str())) >>= foundValue1; CPPUNIT_ASSERT_EQUAL(value1, foundValue1); // (4) nvlistの中からNameValue.nameが"short"のNameValue.valueを検索して、正しい値を取得できることを確認する。 CORBA::Long foundValue2; (find(nvlist, name2.c_str())) >>= foundValue2; CPPUNIT_ASSERT_EQUAL(value2, foundValue2); } /*! * @brief find_index()のテスト * * - 指定した名称でNVList内の要素番号を正しく検索できるか? */ void test_find_index() { SDOPackage::NVList nvlist; nvlist.length(2); // (1) NVList要素のnameに"short",valueにshort型のデータをセット。 string name1 = "short"; CORBA::Short value1 = 1; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1; // (2) NVList要素のnameに"long",valueにlong型のデータをセット。 string name2 = "long"; CORBA::Long value2 = 111; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2; // (3) nvlistの中からNameValue.nameが"long"のNameValue.valueを検索して、要素番号を取得できることを確認する。 CORBA::Long ret; ret = find_index(nvlist, name1.c_str()); CPPUNIT_ASSERT_EQUAL((CORBA::Long)0, ret); // (4) nvlistの中からNameValue.nameが"short"のNameValue.valueを検索して、要素番号を取得できることを確認する。 ret = find_index(nvlist, name2.c_str()); CPPUNIT_ASSERT_EQUAL((CORBA::Long)1, ret); } /*! * @brief isString()のテスト * * - NVList内の指定した名称を持つ値がstring型かどうかを正しく判定できるか? */ void test_isString() { SDOPackage::NVList nvlist; nvlist.length(2); // (1) NVList要素のnameに"short",valueにshort型のデータをセット。 string name1 = "short"; CORBA::Short value1 = 1; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1; // (2) NVList要素のnameに"string",valueにstring型のデータをセット。 string name2 = "string"; string value2 = "test"; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2.c_str(); // (3) isString(nvlist,name)にて,指定されたnameのvalueの型がstringかどうかを判定。 CPPUNIT_ASSERT(!isString(nvlist, name1.c_str())); CPPUNIT_ASSERT(isString(nvlist, name2.c_str())); } /*! * @brief isStringValue()のテスト * * - NVList内の指定した名称を持つ値がstring型かどうかを正しく判定できるか? */ void test_isStringValue() { SDOPackage::NVList nvlist; nvlist.length(2); // (1) NVList要素のnameに"short",valueにshort型のデータをセット。 string name1 = "short"; CORBA::Short value1 = 1; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1; // (2) NVList要素のnameに"string",valueにstring型のデータをセット。 string name2 = "string"; string value2 = "test"; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2.c_str(); // (3) isString(nvlist,name)にて,指定されたnameのvalueの型がstringかどうかを判定。 CPPUNIT_ASSERT(!isStringValue(nvlist, name1.c_str(), "1")); CPPUNIT_ASSERT(isStringValue(nvlist, name2.c_str(), "test")); } /*! * @brief toString()のテスト * * - NVList内の指定した名称を持つ値がstring型である場合に、その値を正しく取得できるか? */ void test_toString() { SDOPackage::NVList nvlist; nvlist.length(2); // (1) NVList要素のnameに"short",valueにshort型のデータをセット。 string name1 = "short"; CORBA::Short value1 = 1; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1; // (2) NVList要素のnameに"string",valueにstring型のデータをセット。 string name2 = "string"; string value2 = "test"; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2.c_str(); // (3) toString(nvlist,name)にて,指定されたnameのvalueをstring型で意図とおりに取得できるか? string empty(""); CPPUNIT_ASSERT_EQUAL(empty, toString(nvlist, name1.c_str())); CPPUNIT_ASSERT_EQUAL(value2, toString(nvlist, name2.c_str())); } /*! * @brief appendStringValue()のテスト * * - 指定した名称と値を持つNameValueを、NVListに正しく追加できるか? */ void test_appendStringValue() { SDOPackage::NVList nvlist; nvlist.length(3); // (1) 追加対象となるNVListを作成する string name1 = "language"; string value1 = "japanese"; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1.c_str(); string name2 = "fruit"; string value2 = "apple"; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2.c_str(); string name3 = "drink"; string value3 = "coffee, coke"; nvlist[2].name = name3.c_str(); nvlist[2].value <<= value3.c_str(); // (2) 作成したNVListに、名称"os", 値"unix"のNameValueを正しく追加できるか? string name4 = "os"; string value4 = "unix"; CPPUNIT_ASSERT(appendStringValue(nvlist, name4.c_str(), value4.c_str())); CPPUNIT_ASSERT_EQUAL(value4, toString(nvlist, name4.c_str())); // (3) 既存の名称である"language"に、値"english"を正しく追加できるか? string name5 = name1; string value5 = "english"; CPPUNIT_ASSERT(appendStringValue(nvlist, name5.c_str(), value5.c_str())); string expectedValueLanguage = "japanese,english"; CPPUNIT_ASSERT_EQUAL(expectedValueLanguage, toString(nvlist, name5.c_str())); // (4) 既存の名称・値と全く同一のNameValueを追加しようとしたときに、意図どおり何も追加せずに終了するか? string name6 = name2; string value6 = value2; CPPUNIT_ASSERT(appendStringValue(nvlist, name6.c_str(), value6.c_str())); CPPUNIT_ASSERT_EQUAL(value2, toString(nvlist, name6.c_str())); // (5) 一部の値が、既存の値と重複するNameValueを追加しようとした時に、意図どおりにマージされるか? string name7 = name3; string value7 = "coke, beer"; CPPUNIT_ASSERT(appendStringValue(nvlist, name7.c_str(), value7.c_str())); string expectedValueDrink = "coffee, coke,coke, beer"; CPPUNIT_ASSERT_EQUAL(expectedValueDrink, toString(nvlist, name7.c_str())); } /*! * @brief append()のテスト * * - NVListの内容を、他のNVListに正しく追加できるか? */ void test_append() { // (1) 1つ目のNVListを作成する SDOPackage::NVList nvlistA; nvlistA.length(2); string nameA1 = "nameA1"; string valueA1 = "valueA1"; nvlistA[0].name = nameA1.c_str(); nvlistA[0].value <<= valueA1.c_str(); string nameA2 = "nameA2"; string valueA2 = "valueA2"; nvlistA[1].name = nameA2.c_str(); nvlistA[1].value <<= valueA2.c_str(); // (2) 2つ目のNVListを作成する SDOPackage::NVList nvlistB; nvlistB.length(2); string nameB1 = "nameB1"; string valueB1 = "valueB1"; nvlistB[0].name = nameB1.c_str(); nvlistB[0].value <<= valueB1.c_str(); string nameB2 = "nameB2"; string valueB2 = "valueB2"; nvlistB[1].name = nameB2.c_str(); nvlistB[1].value <<= valueB2.c_str(); // (3) 1つ目のNVListに、2つ目のNVListを追加する append(nvlistA, nvlistB); // (4) 正しく追加されたことを確認する CPPUNIT_ASSERT_EQUAL(valueA1, toString(nvlistA, nameA1.c_str())); CPPUNIT_ASSERT_EQUAL(valueA2, toString(nvlistA, nameA2.c_str())); CPPUNIT_ASSERT_EQUAL(valueB1, toString(nvlistA, nameB1.c_str())); CPPUNIT_ASSERT_EQUAL(valueB2, toString(nvlistA, nameB2.c_str())); } void test_dump() { SDOPackage::NVList nvlistC; nvlistC.length(3); string nameC1 = "nameC1"; string valueC1 = "valueC1"; nvlistC[0].name = nameC1.c_str(); nvlistC[0].value <<= valueC1.c_str(); string nameC2 = "nameC2"; string valueC2 = "valueC2"; nvlistC[1].name = nameC2.c_str(); nvlistC[1].value <<= valueC2.c_str(); string nameC3 = "name_hoge"; string valueC3 = "value_hoge"; nvlistC[2].name = nameC3.c_str(); nvlistC[2].value <<= valueC3.c_str(); dump(nvlistC); } // std::string toString(const SDOPackage::NVList& nv);のテストです。 void test_toStringNV() { SDOPackage::NVList nvlistD; nvlistD.length(2); string nameD1 = "nameD1"; string valueD1 = "valueD1"; nvlistD[0].name = nameD1.c_str(); nvlistD[0].value <<= valueD1.c_str(); string nameD2 = "nameD2"; string valueD2 = "valueD2"; nvlistD[1].name = nameD2.c_str(); nvlistD[1].value <<= valueD2.c_str(); string strD ="\n\nnameD1: valueD1\nnameD2: valueD2"; // std::cout << strD << std::endl; SDOPackage::NVList nvlistE; nvlistE.length(2); // (1) NVList要素のnameに"short",valueにshort型のデータをセット。 string nameE1 = "short"; CORBA::Short valueE1 = 1; nvlistE[0].name = nameE1.c_str(); nvlistE[0].value <<= valueE1; // (2) NVList要素のnameに"string",valueにstring型のデータをセット。 string nameE2 = "string"; string valueE2 = "test"; nvlistE[1].name = nameE2.c_str(); nvlistE[1].value <<= valueE2.c_str(); // (3) ストリング以外のデータがセットされたときのメッセージを確認。 std::string empty = "short: not a string value\nstring: test\n"; std::string str_nvlistE = toString(nvlistE); /* if (empty == str_nvlistE) { std::cout << "OKK"; } else { std::cout << "not match !!" << std::endl; } */ CPPUNIT_ASSERT(toString(nvlistE) == empty); } }; }; // namespace NVUtil /* * Register test suite */ CPPUNIT_TEST_SUITE_REGISTRATION(NVUtil::NVUtilTests); #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 // NVUtil_cpp
132  CORBA::Short value = 1;
133  string name = "short";
134  SDOPackage::NameValue nv = newNV(name.c_str(), value);
135 
136  string nvName(nv.name);
137  CPPUNIT_ASSERT_EQUAL(name, nvName);
138 
139  CORBA::Short nvValue;
140  nv.value >>= nvValue;
141  CPPUNIT_ASSERT_EQUAL(value, nvValue);
142  }
143 
150  {
151  // CORBA::Long型のデータを持つNameValueを生成し、値を比較して正しく生成されていることを確認する CORBA::Long value = 999999999; string name = "long"; SDOPackage::NameValue nv = newNV(name.c_str(), value); string nvName(nv.name); CPPUNIT_ASSERT_EQUAL(name, nvName); CORBA::Long nvValue; nv.value >>= nvValue; CPPUNIT_ASSERT_EQUAL(value, nvValue); } /*! * @brief newNV(char*,Value)のテスト * * - CORBA::Float型データのNameValueを正しく生成できるか? */ void test_newNV_Float() { // CORBA::Float型のデータを持つNameValueを生成し、値を比較して正しく生成されていることを確認する CORBA::Float value = 99999.9; string name = "float"; SDOPackage::NameValue nv = newNV(name.c_str(), value); string nvName(nv.name); CPPUNIT_ASSERT_EQUAL(name, nvName); CORBA::Float nvValue; nv.value >>= nvValue; CPPUNIT_ASSERT_EQUAL(value, nvValue); } /*! * @brief newNV(char*,Value)のテスト * * - CORBA::Double型データのNameValueを正しく生成できるか? */ void test_newNV_Double() { // CORBA::Double型のデータを持つNameValueを生成し、値を比較して正しく生成されていることを確認する CORBA::Double value = 9999999.999; string name = "double"; SDOPackage::NameValue nv = newNV(name.c_str(), value); string nvName(nv.name); CPPUNIT_ASSERT_EQUAL(name, nvName); CORBA::Double nvValue; nv.value >>= nvValue; CPPUNIT_ASSERT_EQUAL(value, nvValue); } /*! * @brief newNV(const char*, const char*)のテスト * * - const char*型データのNameValueを正しく生成できるか? */ void test_newNV_Str() { // (1) CORBA::String_var型のvalueとchar*型のnameをnewNV()に渡し、NameValueを取得する string name = "string"; CORBA::String_var value = CORBA::string_dup("Hello, world!"); SDOPackage::NameValue nv = newNV(name.c_str(), value); // (2) newNV()にセットしたnameと、取得したNameValue.nameを比較する string nvName(nv.name); CPPUNIT_ASSERT_EQUAL(name, nvName); // (3) newNV()にセットしたvalueと、取得したNameValue.valueを比較する // CORBA::String_var nvValue; const char* nvValue; nv.value >>= nvValue; CPPUNIT_ASSERT_EQUAL(string("Hello, world!"), string(nvValue)); } /*! * @brief newNVChar()のテスト * * - CORBA::Char型データのNameValueを正しく生成できるか? */ void test_newNVChar() { // (1) CORBA::Char型のvalueとchar*型のnameをnewNVChar()に渡し、NameValueを取得する。 string name = "char"; CORBA::Char value = 'A'; SDOPackage::NameValue nv = newNVChar(name.c_str(), value); // (2) newNVChar()にセットしたnameと取得したNameValue.nameの比較。 string nvName(nv.name); CPPUNIT_ASSERT_EQUAL(name, nvName); // (3) newNVChar()にセットしたvalueと取得したNameValue.valueの比較。 CORBA::Char nvValue; nv.value >>= CORBA::Any::to_char(nvValue); CPPUNIT_ASSERT_EQUAL(value, nvValue); } /*! * @brief newNVBool()のテスト * * - CORBA::Boolean型データのNameValueを正しく生成できるか? */ void test_newNVBool() { string name = "bool"; CORBA::Boolean value = false; SDOPackage::NameValue nv = newNVBool(name.c_str(), value); string nvName(nv.name); CPPUNIT_ASSERT_EQUAL(name, nvName); CORBA::Boolean nvValue; nv.value >>= CORBA::Any::to_boolean(nvValue); CPPUNIT_ASSERT_EQUAL(value, nvValue); } /*! * @brief newNVOctet()のテスト * * - CORBA::Octet型データのNameValueを正しく生成できるか? */ void test_newNVOctet() { string name = "octet"; CORBA::Octet value = 030; SDOPackage::NameValue nv = newNVOctet(name.c_str(), value); string nvName(nv.name); CPPUNIT_ASSERT_EQUAL(name, nvName); CORBA::Octet nvValue; nv.value >>= CORBA::Any::to_octet(nvValue); CPPUNIT_ASSERT_EQUAL(value, nvValue); } /*! * @brief copy()のテスト * * - RTC::Propertiesの内容を正しくをNVListにコピーできるか? */ void test_copy() { // (1) RTC::Propertiesオブジェクトの生成 // ※ Propertiesのコンストラクタでは引数で与えられたmapのキー値だけが保存される。 string name = "port-type"; string value = "port-type-value"; map<string, string> mProp; mProp[name] = value; coil::Properties prop(mProp); // (2)copy()にてPropertiesオブジェクトをnvlistにコピー SDOPackage::NVList nvlist; copyFromProperties(nvlist, prop); // (3) copy()により引数で与えたnvlistが書き換えられているかを確認。 string nvName(nvlist[0].name); CPPUNIT_ASSERT_EQUAL(name, nvName); const char* getval; nvlist[0].value >>= getval; string nvValue(getval); CPPUNIT_ASSERT_EQUAL(value, nvValue); } /*! * @brief toProperties()のテスト * * - NVListの内容を正しくRTC::Propertiesに変換できるか? */ void test_toProperties() { // (1) 変換元となるNVListオブジェクトを生成する SDOPackage::NVList nvlist; nvlist.length(2); string name1 = "testname.test1"; string value1 = "testval1"; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1.c_str(); string name2 = "testname.test2"; string value2 = "testval2"; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2.c_str(); // (2) RTC::Propertiesへ変換する coil::Properties prop = toProperties(nvlist); // (3) 正しく変換されていることを確認する string propValue1 = prop.getProperty(name1); CPPUNIT_ASSERT_EQUAL(value1, propValue1); string propValue2 = prop.getProperty(name2); CPPUNIT_ASSERT_EQUAL(value2, propValue2); } /*! * @brief copyToProperties()のテスト * * - NVListの内容を正しくRTC::Propertiesにコピーできるか? */ void test_copyToProperties() { // (1) コピー元となるNVListオブジェクトを生成する SDOPackage::NVList nvlist; nvlist.length(2); string name1 = "testname.test1"; string value1 = "testval1"; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1.c_str(); string name2 = "testname.test2"; string value2 = "testval2"; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2.c_str(); // (2) RTC::Propertiesへコピーする coil::Properties prop; copyToProperties(prop, nvlist); // (3) 値を比較して、正しくコピーされていることを確認する string propValue1 = prop.getProperty(name1); CPPUNIT_ASSERT_EQUAL(value1, propValue1); string propValue2 = prop.getProperty(name2); CPPUNIT_ASSERT_EQUAL(value2, propValue2); } /*! * @brief find()のテスト * * - 指定した名称でNVList内の値を正しく検索できるか? */ void test_find() { SDOPackage::NVList nvlist; nvlist.length(2); // (1) NVList要素のnameに"short",valueにshort型のデータをセット。 string name1 = "short"; CORBA::Short value1 = 1; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1; // (2) NVList要素のnameに"long",valueにlong型のデータをセット。 string name2 = "long"; CORBA::Long value2 = 111; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2; // (3) nvlistの中からNameValue.nameが"long"のNameValue.valueを検索して、正しい値を取得できることを確認する。 CORBA::Short foundValue1; (find(nvlist, name1.c_str())) >>= foundValue1; CPPUNIT_ASSERT_EQUAL(value1, foundValue1); // (4) nvlistの中からNameValue.nameが"short"のNameValue.valueを検索して、正しい値を取得できることを確認する。 CORBA::Long foundValue2; (find(nvlist, name2.c_str())) >>= foundValue2; CPPUNIT_ASSERT_EQUAL(value2, foundValue2); } /*! * @brief find_index()のテスト * * - 指定した名称でNVList内の要素番号を正しく検索できるか? */ void test_find_index() { SDOPackage::NVList nvlist; nvlist.length(2); // (1) NVList要素のnameに"short",valueにshort型のデータをセット。 string name1 = "short"; CORBA::Short value1 = 1; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1; // (2) NVList要素のnameに"long",valueにlong型のデータをセット。 string name2 = "long"; CORBA::Long value2 = 111; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2; // (3) nvlistの中からNameValue.nameが"long"のNameValue.valueを検索して、要素番号を取得できることを確認する。 CORBA::Long ret; ret = find_index(nvlist, name1.c_str()); CPPUNIT_ASSERT_EQUAL((CORBA::Long)0, ret); // (4) nvlistの中からNameValue.nameが"short"のNameValue.valueを検索して、要素番号を取得できることを確認する。 ret = find_index(nvlist, name2.c_str()); CPPUNIT_ASSERT_EQUAL((CORBA::Long)1, ret); } /*! * @brief isString()のテスト * * - NVList内の指定した名称を持つ値がstring型かどうかを正しく判定できるか? */ void test_isString() { SDOPackage::NVList nvlist; nvlist.length(2); // (1) NVList要素のnameに"short",valueにshort型のデータをセット。 string name1 = "short"; CORBA::Short value1 = 1; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1; // (2) NVList要素のnameに"string",valueにstring型のデータをセット。 string name2 = "string"; string value2 = "test"; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2.c_str(); // (3) isString(nvlist,name)にて,指定されたnameのvalueの型がstringかどうかを判定。 CPPUNIT_ASSERT(!isString(nvlist, name1.c_str())); CPPUNIT_ASSERT(isString(nvlist, name2.c_str())); } /*! * @brief isStringValue()のテスト * * - NVList内の指定した名称を持つ値がstring型かどうかを正しく判定できるか? */ void test_isStringValue() { SDOPackage::NVList nvlist; nvlist.length(2); // (1) NVList要素のnameに"short",valueにshort型のデータをセット。 string name1 = "short"; CORBA::Short value1 = 1; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1; // (2) NVList要素のnameに"string",valueにstring型のデータをセット。 string name2 = "string"; string value2 = "test"; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2.c_str(); // (3) isString(nvlist,name)にて,指定されたnameのvalueの型がstringかどうかを判定。 CPPUNIT_ASSERT(!isStringValue(nvlist, name1.c_str(), "1")); CPPUNIT_ASSERT(isStringValue(nvlist, name2.c_str(), "test")); } /*! * @brief toString()のテスト * * - NVList内の指定した名称を持つ値がstring型である場合に、その値を正しく取得できるか? */ void test_toString() { SDOPackage::NVList nvlist; nvlist.length(2); // (1) NVList要素のnameに"short",valueにshort型のデータをセット。 string name1 = "short"; CORBA::Short value1 = 1; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1; // (2) NVList要素のnameに"string",valueにstring型のデータをセット。 string name2 = "string"; string value2 = "test"; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2.c_str(); // (3) toString(nvlist,name)にて,指定されたnameのvalueをstring型で意図とおりに取得できるか? string empty(""); CPPUNIT_ASSERT_EQUAL(empty, toString(nvlist, name1.c_str())); CPPUNIT_ASSERT_EQUAL(value2, toString(nvlist, name2.c_str())); } /*! * @brief appendStringValue()のテスト * * - 指定した名称と値を持つNameValueを、NVListに正しく追加できるか? */ void test_appendStringValue() { SDOPackage::NVList nvlist; nvlist.length(3); // (1) 追加対象となるNVListを作成する string name1 = "language"; string value1 = "japanese"; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1.c_str(); string name2 = "fruit"; string value2 = "apple"; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2.c_str(); string name3 = "drink"; string value3 = "coffee, coke"; nvlist[2].name = name3.c_str(); nvlist[2].value <<= value3.c_str(); // (2) 作成したNVListに、名称"os", 値"unix"のNameValueを正しく追加できるか? string name4 = "os"; string value4 = "unix"; CPPUNIT_ASSERT(appendStringValue(nvlist, name4.c_str(), value4.c_str())); CPPUNIT_ASSERT_EQUAL(value4, toString(nvlist, name4.c_str())); // (3) 既存の名称である"language"に、値"english"を正しく追加できるか? string name5 = name1; string value5 = "english"; CPPUNIT_ASSERT(appendStringValue(nvlist, name5.c_str(), value5.c_str())); string expectedValueLanguage = "japanese,english"; CPPUNIT_ASSERT_EQUAL(expectedValueLanguage, toString(nvlist, name5.c_str())); // (4) 既存の名称・値と全く同一のNameValueを追加しようとしたときに、意図どおり何も追加せずに終了するか? string name6 = name2; string value6 = value2; CPPUNIT_ASSERT(appendStringValue(nvlist, name6.c_str(), value6.c_str())); CPPUNIT_ASSERT_EQUAL(value2, toString(nvlist, name6.c_str())); // (5) 一部の値が、既存の値と重複するNameValueを追加しようとした時に、意図どおりにマージされるか? string name7 = name3; string value7 = "coke, beer"; CPPUNIT_ASSERT(appendStringValue(nvlist, name7.c_str(), value7.c_str())); string expectedValueDrink = "coffee, coke,coke, beer"; CPPUNIT_ASSERT_EQUAL(expectedValueDrink, toString(nvlist, name7.c_str())); } /*! * @brief append()のテスト * * - NVListの内容を、他のNVListに正しく追加できるか? */ void test_append() { // (1) 1つ目のNVListを作成する SDOPackage::NVList nvlistA; nvlistA.length(2); string nameA1 = "nameA1"; string valueA1 = "valueA1"; nvlistA[0].name = nameA1.c_str(); nvlistA[0].value <<= valueA1.c_str(); string nameA2 = "nameA2"; string valueA2 = "valueA2"; nvlistA[1].name = nameA2.c_str(); nvlistA[1].value <<= valueA2.c_str(); // (2) 2つ目のNVListを作成する SDOPackage::NVList nvlistB; nvlistB.length(2); string nameB1 = "nameB1"; string valueB1 = "valueB1"; nvlistB[0].name = nameB1.c_str(); nvlistB[0].value <<= valueB1.c_str(); string nameB2 = "nameB2"; string valueB2 = "valueB2"; nvlistB[1].name = nameB2.c_str(); nvlistB[1].value <<= valueB2.c_str(); // (3) 1つ目のNVListに、2つ目のNVListを追加する append(nvlistA, nvlistB); // (4) 正しく追加されたことを確認する CPPUNIT_ASSERT_EQUAL(valueA1, toString(nvlistA, nameA1.c_str())); CPPUNIT_ASSERT_EQUAL(valueA2, toString(nvlistA, nameA2.c_str())); CPPUNIT_ASSERT_EQUAL(valueB1, toString(nvlistA, nameB1.c_str())); CPPUNIT_ASSERT_EQUAL(valueB2, toString(nvlistA, nameB2.c_str())); } void test_dump() { SDOPackage::NVList nvlistC; nvlistC.length(3); string nameC1 = "nameC1"; string valueC1 = "valueC1"; nvlistC[0].name = nameC1.c_str(); nvlistC[0].value <<= valueC1.c_str(); string nameC2 = "nameC2"; string valueC2 = "valueC2"; nvlistC[1].name = nameC2.c_str(); nvlistC[1].value <<= valueC2.c_str(); string nameC3 = "name_hoge"; string valueC3 = "value_hoge"; nvlistC[2].name = nameC3.c_str(); nvlistC[2].value <<= valueC3.c_str(); dump(nvlistC); } // std::string toString(const SDOPackage::NVList& nv);のテストです。 void test_toStringNV() { SDOPackage::NVList nvlistD; nvlistD.length(2); string nameD1 = "nameD1"; string valueD1 = "valueD1"; nvlistD[0].name = nameD1.c_str(); nvlistD[0].value <<= valueD1.c_str(); string nameD2 = "nameD2"; string valueD2 = "valueD2"; nvlistD[1].name = nameD2.c_str(); nvlistD[1].value <<= valueD2.c_str(); string strD ="\n\nnameD1: valueD1\nnameD2: valueD2"; // std::cout << strD << std::endl; SDOPackage::NVList nvlistE; nvlistE.length(2); // (1) NVList要素のnameに"short",valueにshort型のデータをセット。 string nameE1 = "short"; CORBA::Short valueE1 = 1; nvlistE[0].name = nameE1.c_str(); nvlistE[0].value <<= valueE1; // (2) NVList要素のnameに"string",valueにstring型のデータをセット。 string nameE2 = "string"; string valueE2 = "test"; nvlistE[1].name = nameE2.c_str(); nvlistE[1].value <<= valueE2.c_str(); // (3) ストリング以外のデータがセットされたときのメッセージを確認。 std::string empty = "short: not a string value\nstring: test\n"; std::string str_nvlistE = toString(nvlistE); /* if (empty == str_nvlistE) { std::cout << "OKK"; } else { std::cout << "not match !!" << std::endl; } */ CPPUNIT_ASSERT(toString(nvlistE) == empty); } }; }; // namespace NVUtil /* * Register test suite */ CPPUNIT_TEST_SUITE_REGISTRATION(NVUtil::NVUtilTests); #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 // NVUtil_cpp
152  CORBA::Long value = 999999999;
153  string name = "long";
154  SDOPackage::NameValue nv = newNV(name.c_str(), value);
155 
156  string nvName(nv.name);
157  CPPUNIT_ASSERT_EQUAL(name, nvName);
158 
159  CORBA::Long nvValue;
160  nv.value >>= nvValue;
161  CPPUNIT_ASSERT_EQUAL(value, nvValue);
162  }
163 
170  {
171  // CORBA::Float型のデータを持つNameValueを生成し、値を比較して正しく生成されていることを確認する CORBA::Float value = 99999.9; string name = "float"; SDOPackage::NameValue nv = newNV(name.c_str(), value); string nvName(nv.name); CPPUNIT_ASSERT_EQUAL(name, nvName); CORBA::Float nvValue; nv.value >>= nvValue; CPPUNIT_ASSERT_EQUAL(value, nvValue); } /*! * @brief newNV(char*,Value)のテスト * * - CORBA::Double型データのNameValueを正しく生成できるか? */ void test_newNV_Double() { // CORBA::Double型のデータを持つNameValueを生成し、値を比較して正しく生成されていることを確認する CORBA::Double value = 9999999.999; string name = "double"; SDOPackage::NameValue nv = newNV(name.c_str(), value); string nvName(nv.name); CPPUNIT_ASSERT_EQUAL(name, nvName); CORBA::Double nvValue; nv.value >>= nvValue; CPPUNIT_ASSERT_EQUAL(value, nvValue); } /*! * @brief newNV(const char*, const char*)のテスト * * - const char*型データのNameValueを正しく生成できるか? */ void test_newNV_Str() { // (1) CORBA::String_var型のvalueとchar*型のnameをnewNV()に渡し、NameValueを取得する string name = "string"; CORBA::String_var value = CORBA::string_dup("Hello, world!"); SDOPackage::NameValue nv = newNV(name.c_str(), value); // (2) newNV()にセットしたnameと、取得したNameValue.nameを比較する string nvName(nv.name); CPPUNIT_ASSERT_EQUAL(name, nvName); // (3) newNV()にセットしたvalueと、取得したNameValue.valueを比較する // CORBA::String_var nvValue; const char* nvValue; nv.value >>= nvValue; CPPUNIT_ASSERT_EQUAL(string("Hello, world!"), string(nvValue)); } /*! * @brief newNVChar()のテスト * * - CORBA::Char型データのNameValueを正しく生成できるか? */ void test_newNVChar() { // (1) CORBA::Char型のvalueとchar*型のnameをnewNVChar()に渡し、NameValueを取得する。 string name = "char"; CORBA::Char value = 'A'; SDOPackage::NameValue nv = newNVChar(name.c_str(), value); // (2) newNVChar()にセットしたnameと取得したNameValue.nameの比較。 string nvName(nv.name); CPPUNIT_ASSERT_EQUAL(name, nvName); // (3) newNVChar()にセットしたvalueと取得したNameValue.valueの比較。 CORBA::Char nvValue; nv.value >>= CORBA::Any::to_char(nvValue); CPPUNIT_ASSERT_EQUAL(value, nvValue); } /*! * @brief newNVBool()のテスト * * - CORBA::Boolean型データのNameValueを正しく生成できるか? */ void test_newNVBool() { string name = "bool"; CORBA::Boolean value = false; SDOPackage::NameValue nv = newNVBool(name.c_str(), value); string nvName(nv.name); CPPUNIT_ASSERT_EQUAL(name, nvName); CORBA::Boolean nvValue; nv.value >>= CORBA::Any::to_boolean(nvValue); CPPUNIT_ASSERT_EQUAL(value, nvValue); } /*! * @brief newNVOctet()のテスト * * - CORBA::Octet型データのNameValueを正しく生成できるか? */ void test_newNVOctet() { string name = "octet"; CORBA::Octet value = 030; SDOPackage::NameValue nv = newNVOctet(name.c_str(), value); string nvName(nv.name); CPPUNIT_ASSERT_EQUAL(name, nvName); CORBA::Octet nvValue; nv.value >>= CORBA::Any::to_octet(nvValue); CPPUNIT_ASSERT_EQUAL(value, nvValue); } /*! * @brief copy()のテスト * * - RTC::Propertiesの内容を正しくをNVListにコピーできるか? */ void test_copy() { // (1) RTC::Propertiesオブジェクトの生成 // ※ Propertiesのコンストラクタでは引数で与えられたmapのキー値だけが保存される。 string name = "port-type"; string value = "port-type-value"; map<string, string> mProp; mProp[name] = value; coil::Properties prop(mProp); // (2)copy()にてPropertiesオブジェクトをnvlistにコピー SDOPackage::NVList nvlist; copyFromProperties(nvlist, prop); // (3) copy()により引数で与えたnvlistが書き換えられているかを確認。 string nvName(nvlist[0].name); CPPUNIT_ASSERT_EQUAL(name, nvName); const char* getval; nvlist[0].value >>= getval; string nvValue(getval); CPPUNIT_ASSERT_EQUAL(value, nvValue); } /*! * @brief toProperties()のテスト * * - NVListの内容を正しくRTC::Propertiesに変換できるか? */ void test_toProperties() { // (1) 変換元となるNVListオブジェクトを生成する SDOPackage::NVList nvlist; nvlist.length(2); string name1 = "testname.test1"; string value1 = "testval1"; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1.c_str(); string name2 = "testname.test2"; string value2 = "testval2"; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2.c_str(); // (2) RTC::Propertiesへ変換する coil::Properties prop = toProperties(nvlist); // (3) 正しく変換されていることを確認する string propValue1 = prop.getProperty(name1); CPPUNIT_ASSERT_EQUAL(value1, propValue1); string propValue2 = prop.getProperty(name2); CPPUNIT_ASSERT_EQUAL(value2, propValue2); } /*! * @brief copyToProperties()のテスト * * - NVListの内容を正しくRTC::Propertiesにコピーできるか? */ void test_copyToProperties() { // (1) コピー元となるNVListオブジェクトを生成する SDOPackage::NVList nvlist; nvlist.length(2); string name1 = "testname.test1"; string value1 = "testval1"; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1.c_str(); string name2 = "testname.test2"; string value2 = "testval2"; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2.c_str(); // (2) RTC::Propertiesへコピーする coil::Properties prop; copyToProperties(prop, nvlist); // (3) 値を比較して、正しくコピーされていることを確認する string propValue1 = prop.getProperty(name1); CPPUNIT_ASSERT_EQUAL(value1, propValue1); string propValue2 = prop.getProperty(name2); CPPUNIT_ASSERT_EQUAL(value2, propValue2); } /*! * @brief find()のテスト * * - 指定した名称でNVList内の値を正しく検索できるか? */ void test_find() { SDOPackage::NVList nvlist; nvlist.length(2); // (1) NVList要素のnameに"short",valueにshort型のデータをセット。 string name1 = "short"; CORBA::Short value1 = 1; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1; // (2) NVList要素のnameに"long",valueにlong型のデータをセット。 string name2 = "long"; CORBA::Long value2 = 111; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2; // (3) nvlistの中からNameValue.nameが"long"のNameValue.valueを検索して、正しい値を取得できることを確認する。 CORBA::Short foundValue1; (find(nvlist, name1.c_str())) >>= foundValue1; CPPUNIT_ASSERT_EQUAL(value1, foundValue1); // (4) nvlistの中からNameValue.nameが"short"のNameValue.valueを検索して、正しい値を取得できることを確認する。 CORBA::Long foundValue2; (find(nvlist, name2.c_str())) >>= foundValue2; CPPUNIT_ASSERT_EQUAL(value2, foundValue2); } /*! * @brief find_index()のテスト * * - 指定した名称でNVList内の要素番号を正しく検索できるか? */ void test_find_index() { SDOPackage::NVList nvlist; nvlist.length(2); // (1) NVList要素のnameに"short",valueにshort型のデータをセット。 string name1 = "short"; CORBA::Short value1 = 1; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1; // (2) NVList要素のnameに"long",valueにlong型のデータをセット。 string name2 = "long"; CORBA::Long value2 = 111; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2; // (3) nvlistの中からNameValue.nameが"long"のNameValue.valueを検索して、要素番号を取得できることを確認する。 CORBA::Long ret; ret = find_index(nvlist, name1.c_str()); CPPUNIT_ASSERT_EQUAL((CORBA::Long)0, ret); // (4) nvlistの中からNameValue.nameが"short"のNameValue.valueを検索して、要素番号を取得できることを確認する。 ret = find_index(nvlist, name2.c_str()); CPPUNIT_ASSERT_EQUAL((CORBA::Long)1, ret); } /*! * @brief isString()のテスト * * - NVList内の指定した名称を持つ値がstring型かどうかを正しく判定できるか? */ void test_isString() { SDOPackage::NVList nvlist; nvlist.length(2); // (1) NVList要素のnameに"short",valueにshort型のデータをセット。 string name1 = "short"; CORBA::Short value1 = 1; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1; // (2) NVList要素のnameに"string",valueにstring型のデータをセット。 string name2 = "string"; string value2 = "test"; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2.c_str(); // (3) isString(nvlist,name)にて,指定されたnameのvalueの型がstringかどうかを判定。 CPPUNIT_ASSERT(!isString(nvlist, name1.c_str())); CPPUNIT_ASSERT(isString(nvlist, name2.c_str())); } /*! * @brief isStringValue()のテスト * * - NVList内の指定した名称を持つ値がstring型かどうかを正しく判定できるか? */ void test_isStringValue() { SDOPackage::NVList nvlist; nvlist.length(2); // (1) NVList要素のnameに"short",valueにshort型のデータをセット。 string name1 = "short"; CORBA::Short value1 = 1; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1; // (2) NVList要素のnameに"string",valueにstring型のデータをセット。 string name2 = "string"; string value2 = "test"; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2.c_str(); // (3) isString(nvlist,name)にて,指定されたnameのvalueの型がstringかどうかを判定。 CPPUNIT_ASSERT(!isStringValue(nvlist, name1.c_str(), "1")); CPPUNIT_ASSERT(isStringValue(nvlist, name2.c_str(), "test")); } /*! * @brief toString()のテスト * * - NVList内の指定した名称を持つ値がstring型である場合に、その値を正しく取得できるか? */ void test_toString() { SDOPackage::NVList nvlist; nvlist.length(2); // (1) NVList要素のnameに"short",valueにshort型のデータをセット。 string name1 = "short"; CORBA::Short value1 = 1; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1; // (2) NVList要素のnameに"string",valueにstring型のデータをセット。 string name2 = "string"; string value2 = "test"; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2.c_str(); // (3) toString(nvlist,name)にて,指定されたnameのvalueをstring型で意図とおりに取得できるか? string empty(""); CPPUNIT_ASSERT_EQUAL(empty, toString(nvlist, name1.c_str())); CPPUNIT_ASSERT_EQUAL(value2, toString(nvlist, name2.c_str())); } /*! * @brief appendStringValue()のテスト * * - 指定した名称と値を持つNameValueを、NVListに正しく追加できるか? */ void test_appendStringValue() { SDOPackage::NVList nvlist; nvlist.length(3); // (1) 追加対象となるNVListを作成する string name1 = "language"; string value1 = "japanese"; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1.c_str(); string name2 = "fruit"; string value2 = "apple"; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2.c_str(); string name3 = "drink"; string value3 = "coffee, coke"; nvlist[2].name = name3.c_str(); nvlist[2].value <<= value3.c_str(); // (2) 作成したNVListに、名称"os", 値"unix"のNameValueを正しく追加できるか? string name4 = "os"; string value4 = "unix"; CPPUNIT_ASSERT(appendStringValue(nvlist, name4.c_str(), value4.c_str())); CPPUNIT_ASSERT_EQUAL(value4, toString(nvlist, name4.c_str())); // (3) 既存の名称である"language"に、値"english"を正しく追加できるか? string name5 = name1; string value5 = "english"; CPPUNIT_ASSERT(appendStringValue(nvlist, name5.c_str(), value5.c_str())); string expectedValueLanguage = "japanese,english"; CPPUNIT_ASSERT_EQUAL(expectedValueLanguage, toString(nvlist, name5.c_str())); // (4) 既存の名称・値と全く同一のNameValueを追加しようとしたときに、意図どおり何も追加せずに終了するか? string name6 = name2; string value6 = value2; CPPUNIT_ASSERT(appendStringValue(nvlist, name6.c_str(), value6.c_str())); CPPUNIT_ASSERT_EQUAL(value2, toString(nvlist, name6.c_str())); // (5) 一部の値が、既存の値と重複するNameValueを追加しようとした時に、意図どおりにマージされるか? string name7 = name3; string value7 = "coke, beer"; CPPUNIT_ASSERT(appendStringValue(nvlist, name7.c_str(), value7.c_str())); string expectedValueDrink = "coffee, coke,coke, beer"; CPPUNIT_ASSERT_EQUAL(expectedValueDrink, toString(nvlist, name7.c_str())); } /*! * @brief append()のテスト * * - NVListの内容を、他のNVListに正しく追加できるか? */ void test_append() { // (1) 1つ目のNVListを作成する SDOPackage::NVList nvlistA; nvlistA.length(2); string nameA1 = "nameA1"; string valueA1 = "valueA1"; nvlistA[0].name = nameA1.c_str(); nvlistA[0].value <<= valueA1.c_str(); string nameA2 = "nameA2"; string valueA2 = "valueA2"; nvlistA[1].name = nameA2.c_str(); nvlistA[1].value <<= valueA2.c_str(); // (2) 2つ目のNVListを作成する SDOPackage::NVList nvlistB; nvlistB.length(2); string nameB1 = "nameB1"; string valueB1 = "valueB1"; nvlistB[0].name = nameB1.c_str(); nvlistB[0].value <<= valueB1.c_str(); string nameB2 = "nameB2"; string valueB2 = "valueB2"; nvlistB[1].name = nameB2.c_str(); nvlistB[1].value <<= valueB2.c_str(); // (3) 1つ目のNVListに、2つ目のNVListを追加する append(nvlistA, nvlistB); // (4) 正しく追加されたことを確認する CPPUNIT_ASSERT_EQUAL(valueA1, toString(nvlistA, nameA1.c_str())); CPPUNIT_ASSERT_EQUAL(valueA2, toString(nvlistA, nameA2.c_str())); CPPUNIT_ASSERT_EQUAL(valueB1, toString(nvlistA, nameB1.c_str())); CPPUNIT_ASSERT_EQUAL(valueB2, toString(nvlistA, nameB2.c_str())); } void test_dump() { SDOPackage::NVList nvlistC; nvlistC.length(3); string nameC1 = "nameC1"; string valueC1 = "valueC1"; nvlistC[0].name = nameC1.c_str(); nvlistC[0].value <<= valueC1.c_str(); string nameC2 = "nameC2"; string valueC2 = "valueC2"; nvlistC[1].name = nameC2.c_str(); nvlistC[1].value <<= valueC2.c_str(); string nameC3 = "name_hoge"; string valueC3 = "value_hoge"; nvlistC[2].name = nameC3.c_str(); nvlistC[2].value <<= valueC3.c_str(); dump(nvlistC); } // std::string toString(const SDOPackage::NVList& nv);のテストです。 void test_toStringNV() { SDOPackage::NVList nvlistD; nvlistD.length(2); string nameD1 = "nameD1"; string valueD1 = "valueD1"; nvlistD[0].name = nameD1.c_str(); nvlistD[0].value <<= valueD1.c_str(); string nameD2 = "nameD2"; string valueD2 = "valueD2"; nvlistD[1].name = nameD2.c_str(); nvlistD[1].value <<= valueD2.c_str(); string strD ="\n\nnameD1: valueD1\nnameD2: valueD2"; // std::cout << strD << std::endl; SDOPackage::NVList nvlistE; nvlistE.length(2); // (1) NVList要素のnameに"short",valueにshort型のデータをセット。 string nameE1 = "short"; CORBA::Short valueE1 = 1; nvlistE[0].name = nameE1.c_str(); nvlistE[0].value <<= valueE1; // (2) NVList要素のnameに"string",valueにstring型のデータをセット。 string nameE2 = "string"; string valueE2 = "test"; nvlistE[1].name = nameE2.c_str(); nvlistE[1].value <<= valueE2.c_str(); // (3) ストリング以外のデータがセットされたときのメッセージを確認。 std::string empty = "short: not a string value\nstring: test\n"; std::string str_nvlistE = toString(nvlistE); /* if (empty == str_nvlistE) { std::cout << "OKK"; } else { std::cout << "not match !!" << std::endl; } */ CPPUNIT_ASSERT(toString(nvlistE) == empty); } }; }; // namespace NVUtil /* * Register test suite */ CPPUNIT_TEST_SUITE_REGISTRATION(NVUtil::NVUtilTests); #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 // NVUtil_cpp
172  CORBA::Float value = 99999.9;
173  string name = "float";
174  SDOPackage::NameValue nv = newNV(name.c_str(), value);
175 
176  string nvName(nv.name);
177  CPPUNIT_ASSERT_EQUAL(name, nvName);
178 
179  CORBA::Float nvValue;
180  nv.value >>= nvValue;
181  CPPUNIT_ASSERT_EQUAL(value, nvValue);
182  }
183 
190  {
191  // CORBA::Double型のデータを持つNameValueを生成し、値を比較して正しく生成されていることを確認する CORBA::Double value = 9999999.999; string name = "double"; SDOPackage::NameValue nv = newNV(name.c_str(), value); string nvName(nv.name); CPPUNIT_ASSERT_EQUAL(name, nvName); CORBA::Double nvValue; nv.value >>= nvValue; CPPUNIT_ASSERT_EQUAL(value, nvValue); } /*! * @brief newNV(const char*, const char*)のテスト * * - const char*型データのNameValueを正しく生成できるか? */ void test_newNV_Str() { // (1) CORBA::String_var型のvalueとchar*型のnameをnewNV()に渡し、NameValueを取得する string name = "string"; CORBA::String_var value = CORBA::string_dup("Hello, world!"); SDOPackage::NameValue nv = newNV(name.c_str(), value); // (2) newNV()にセットしたnameと、取得したNameValue.nameを比較する string nvName(nv.name); CPPUNIT_ASSERT_EQUAL(name, nvName); // (3) newNV()にセットしたvalueと、取得したNameValue.valueを比較する // CORBA::String_var nvValue; const char* nvValue; nv.value >>= nvValue; CPPUNIT_ASSERT_EQUAL(string("Hello, world!"), string(nvValue)); } /*! * @brief newNVChar()のテスト * * - CORBA::Char型データのNameValueを正しく生成できるか? */ void test_newNVChar() { // (1) CORBA::Char型のvalueとchar*型のnameをnewNVChar()に渡し、NameValueを取得する。 string name = "char"; CORBA::Char value = 'A'; SDOPackage::NameValue nv = newNVChar(name.c_str(), value); // (2) newNVChar()にセットしたnameと取得したNameValue.nameの比較。 string nvName(nv.name); CPPUNIT_ASSERT_EQUAL(name, nvName); // (3) newNVChar()にセットしたvalueと取得したNameValue.valueの比較。 CORBA::Char nvValue; nv.value >>= CORBA::Any::to_char(nvValue); CPPUNIT_ASSERT_EQUAL(value, nvValue); } /*! * @brief newNVBool()のテスト * * - CORBA::Boolean型データのNameValueを正しく生成できるか? */ void test_newNVBool() { string name = "bool"; CORBA::Boolean value = false; SDOPackage::NameValue nv = newNVBool(name.c_str(), value); string nvName(nv.name); CPPUNIT_ASSERT_EQUAL(name, nvName); CORBA::Boolean nvValue; nv.value >>= CORBA::Any::to_boolean(nvValue); CPPUNIT_ASSERT_EQUAL(value, nvValue); } /*! * @brief newNVOctet()のテスト * * - CORBA::Octet型データのNameValueを正しく生成できるか? */ void test_newNVOctet() { string name = "octet"; CORBA::Octet value = 030; SDOPackage::NameValue nv = newNVOctet(name.c_str(), value); string nvName(nv.name); CPPUNIT_ASSERT_EQUAL(name, nvName); CORBA::Octet nvValue; nv.value >>= CORBA::Any::to_octet(nvValue); CPPUNIT_ASSERT_EQUAL(value, nvValue); } /*! * @brief copy()のテスト * * - RTC::Propertiesの内容を正しくをNVListにコピーできるか? */ void test_copy() { // (1) RTC::Propertiesオブジェクトの生成 // ※ Propertiesのコンストラクタでは引数で与えられたmapのキー値だけが保存される。 string name = "port-type"; string value = "port-type-value"; map<string, string> mProp; mProp[name] = value; coil::Properties prop(mProp); // (2)copy()にてPropertiesオブジェクトをnvlistにコピー SDOPackage::NVList nvlist; copyFromProperties(nvlist, prop); // (3) copy()により引数で与えたnvlistが書き換えられているかを確認。 string nvName(nvlist[0].name); CPPUNIT_ASSERT_EQUAL(name, nvName); const char* getval; nvlist[0].value >>= getval; string nvValue(getval); CPPUNIT_ASSERT_EQUAL(value, nvValue); } /*! * @brief toProperties()のテスト * * - NVListの内容を正しくRTC::Propertiesに変換できるか? */ void test_toProperties() { // (1) 変換元となるNVListオブジェクトを生成する SDOPackage::NVList nvlist; nvlist.length(2); string name1 = "testname.test1"; string value1 = "testval1"; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1.c_str(); string name2 = "testname.test2"; string value2 = "testval2"; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2.c_str(); // (2) RTC::Propertiesへ変換する coil::Properties prop = toProperties(nvlist); // (3) 正しく変換されていることを確認する string propValue1 = prop.getProperty(name1); CPPUNIT_ASSERT_EQUAL(value1, propValue1); string propValue2 = prop.getProperty(name2); CPPUNIT_ASSERT_EQUAL(value2, propValue2); } /*! * @brief copyToProperties()のテスト * * - NVListの内容を正しくRTC::Propertiesにコピーできるか? */ void test_copyToProperties() { // (1) コピー元となるNVListオブジェクトを生成する SDOPackage::NVList nvlist; nvlist.length(2); string name1 = "testname.test1"; string value1 = "testval1"; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1.c_str(); string name2 = "testname.test2"; string value2 = "testval2"; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2.c_str(); // (2) RTC::Propertiesへコピーする coil::Properties prop; copyToProperties(prop, nvlist); // (3) 値を比較して、正しくコピーされていることを確認する string propValue1 = prop.getProperty(name1); CPPUNIT_ASSERT_EQUAL(value1, propValue1); string propValue2 = prop.getProperty(name2); CPPUNIT_ASSERT_EQUAL(value2, propValue2); } /*! * @brief find()のテスト * * - 指定した名称でNVList内の値を正しく検索できるか? */ void test_find() { SDOPackage::NVList nvlist; nvlist.length(2); // (1) NVList要素のnameに"short",valueにshort型のデータをセット。 string name1 = "short"; CORBA::Short value1 = 1; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1; // (2) NVList要素のnameに"long",valueにlong型のデータをセット。 string name2 = "long"; CORBA::Long value2 = 111; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2; // (3) nvlistの中からNameValue.nameが"long"のNameValue.valueを検索して、正しい値を取得できることを確認する。 CORBA::Short foundValue1; (find(nvlist, name1.c_str())) >>= foundValue1; CPPUNIT_ASSERT_EQUAL(value1, foundValue1); // (4) nvlistの中からNameValue.nameが"short"のNameValue.valueを検索して、正しい値を取得できることを確認する。 CORBA::Long foundValue2; (find(nvlist, name2.c_str())) >>= foundValue2; CPPUNIT_ASSERT_EQUAL(value2, foundValue2); } /*! * @brief find_index()のテスト * * - 指定した名称でNVList内の要素番号を正しく検索できるか? */ void test_find_index() { SDOPackage::NVList nvlist; nvlist.length(2); // (1) NVList要素のnameに"short",valueにshort型のデータをセット。 string name1 = "short"; CORBA::Short value1 = 1; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1; // (2) NVList要素のnameに"long",valueにlong型のデータをセット。 string name2 = "long"; CORBA::Long value2 = 111; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2; // (3) nvlistの中からNameValue.nameが"long"のNameValue.valueを検索して、要素番号を取得できることを確認する。 CORBA::Long ret; ret = find_index(nvlist, name1.c_str()); CPPUNIT_ASSERT_EQUAL((CORBA::Long)0, ret); // (4) nvlistの中からNameValue.nameが"short"のNameValue.valueを検索して、要素番号を取得できることを確認する。 ret = find_index(nvlist, name2.c_str()); CPPUNIT_ASSERT_EQUAL((CORBA::Long)1, ret); } /*! * @brief isString()のテスト * * - NVList内の指定した名称を持つ値がstring型かどうかを正しく判定できるか? */ void test_isString() { SDOPackage::NVList nvlist; nvlist.length(2); // (1) NVList要素のnameに"short",valueにshort型のデータをセット。 string name1 = "short"; CORBA::Short value1 = 1; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1; // (2) NVList要素のnameに"string",valueにstring型のデータをセット。 string name2 = "string"; string value2 = "test"; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2.c_str(); // (3) isString(nvlist,name)にて,指定されたnameのvalueの型がstringかどうかを判定。 CPPUNIT_ASSERT(!isString(nvlist, name1.c_str())); CPPUNIT_ASSERT(isString(nvlist, name2.c_str())); } /*! * @brief isStringValue()のテスト * * - NVList内の指定した名称を持つ値がstring型かどうかを正しく判定できるか? */ void test_isStringValue() { SDOPackage::NVList nvlist; nvlist.length(2); // (1) NVList要素のnameに"short",valueにshort型のデータをセット。 string name1 = "short"; CORBA::Short value1 = 1; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1; // (2) NVList要素のnameに"string",valueにstring型のデータをセット。 string name2 = "string"; string value2 = "test"; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2.c_str(); // (3) isString(nvlist,name)にて,指定されたnameのvalueの型がstringかどうかを判定。 CPPUNIT_ASSERT(!isStringValue(nvlist, name1.c_str(), "1")); CPPUNIT_ASSERT(isStringValue(nvlist, name2.c_str(), "test")); } /*! * @brief toString()のテスト * * - NVList内の指定した名称を持つ値がstring型である場合に、その値を正しく取得できるか? */ void test_toString() { SDOPackage::NVList nvlist; nvlist.length(2); // (1) NVList要素のnameに"short",valueにshort型のデータをセット。 string name1 = "short"; CORBA::Short value1 = 1; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1; // (2) NVList要素のnameに"string",valueにstring型のデータをセット。 string name2 = "string"; string value2 = "test"; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2.c_str(); // (3) toString(nvlist,name)にて,指定されたnameのvalueをstring型で意図とおりに取得できるか? string empty(""); CPPUNIT_ASSERT_EQUAL(empty, toString(nvlist, name1.c_str())); CPPUNIT_ASSERT_EQUAL(value2, toString(nvlist, name2.c_str())); } /*! * @brief appendStringValue()のテスト * * - 指定した名称と値を持つNameValueを、NVListに正しく追加できるか? */ void test_appendStringValue() { SDOPackage::NVList nvlist; nvlist.length(3); // (1) 追加対象となるNVListを作成する string name1 = "language"; string value1 = "japanese"; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1.c_str(); string name2 = "fruit"; string value2 = "apple"; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2.c_str(); string name3 = "drink"; string value3 = "coffee, coke"; nvlist[2].name = name3.c_str(); nvlist[2].value <<= value3.c_str(); // (2) 作成したNVListに、名称"os", 値"unix"のNameValueを正しく追加できるか? string name4 = "os"; string value4 = "unix"; CPPUNIT_ASSERT(appendStringValue(nvlist, name4.c_str(), value4.c_str())); CPPUNIT_ASSERT_EQUAL(value4, toString(nvlist, name4.c_str())); // (3) 既存の名称である"language"に、値"english"を正しく追加できるか? string name5 = name1; string value5 = "english"; CPPUNIT_ASSERT(appendStringValue(nvlist, name5.c_str(), value5.c_str())); string expectedValueLanguage = "japanese,english"; CPPUNIT_ASSERT_EQUAL(expectedValueLanguage, toString(nvlist, name5.c_str())); // (4) 既存の名称・値と全く同一のNameValueを追加しようとしたときに、意図どおり何も追加せずに終了するか? string name6 = name2; string value6 = value2; CPPUNIT_ASSERT(appendStringValue(nvlist, name6.c_str(), value6.c_str())); CPPUNIT_ASSERT_EQUAL(value2, toString(nvlist, name6.c_str())); // (5) 一部の値が、既存の値と重複するNameValueを追加しようとした時に、意図どおりにマージされるか? string name7 = name3; string value7 = "coke, beer"; CPPUNIT_ASSERT(appendStringValue(nvlist, name7.c_str(), value7.c_str())); string expectedValueDrink = "coffee, coke,coke, beer"; CPPUNIT_ASSERT_EQUAL(expectedValueDrink, toString(nvlist, name7.c_str())); } /*! * @brief append()のテスト * * - NVListの内容を、他のNVListに正しく追加できるか? */ void test_append() { // (1) 1つ目のNVListを作成する SDOPackage::NVList nvlistA; nvlistA.length(2); string nameA1 = "nameA1"; string valueA1 = "valueA1"; nvlistA[0].name = nameA1.c_str(); nvlistA[0].value <<= valueA1.c_str(); string nameA2 = "nameA2"; string valueA2 = "valueA2"; nvlistA[1].name = nameA2.c_str(); nvlistA[1].value <<= valueA2.c_str(); // (2) 2つ目のNVListを作成する SDOPackage::NVList nvlistB; nvlistB.length(2); string nameB1 = "nameB1"; string valueB1 = "valueB1"; nvlistB[0].name = nameB1.c_str(); nvlistB[0].value <<= valueB1.c_str(); string nameB2 = "nameB2"; string valueB2 = "valueB2"; nvlistB[1].name = nameB2.c_str(); nvlistB[1].value <<= valueB2.c_str(); // (3) 1つ目のNVListに、2つ目のNVListを追加する append(nvlistA, nvlistB); // (4) 正しく追加されたことを確認する CPPUNIT_ASSERT_EQUAL(valueA1, toString(nvlistA, nameA1.c_str())); CPPUNIT_ASSERT_EQUAL(valueA2, toString(nvlistA, nameA2.c_str())); CPPUNIT_ASSERT_EQUAL(valueB1, toString(nvlistA, nameB1.c_str())); CPPUNIT_ASSERT_EQUAL(valueB2, toString(nvlistA, nameB2.c_str())); } void test_dump() { SDOPackage::NVList nvlistC; nvlistC.length(3); string nameC1 = "nameC1"; string valueC1 = "valueC1"; nvlistC[0].name = nameC1.c_str(); nvlistC[0].value <<= valueC1.c_str(); string nameC2 = "nameC2"; string valueC2 = "valueC2"; nvlistC[1].name = nameC2.c_str(); nvlistC[1].value <<= valueC2.c_str(); string nameC3 = "name_hoge"; string valueC3 = "value_hoge"; nvlistC[2].name = nameC3.c_str(); nvlistC[2].value <<= valueC3.c_str(); dump(nvlistC); } // std::string toString(const SDOPackage::NVList& nv);のテストです。 void test_toStringNV() { SDOPackage::NVList nvlistD; nvlistD.length(2); string nameD1 = "nameD1"; string valueD1 = "valueD1"; nvlistD[0].name = nameD1.c_str(); nvlistD[0].value <<= valueD1.c_str(); string nameD2 = "nameD2"; string valueD2 = "valueD2"; nvlistD[1].name = nameD2.c_str(); nvlistD[1].value <<= valueD2.c_str(); string strD ="\n\nnameD1: valueD1\nnameD2: valueD2"; // std::cout << strD << std::endl; SDOPackage::NVList nvlistE; nvlistE.length(2); // (1) NVList要素のnameに"short",valueにshort型のデータをセット。 string nameE1 = "short"; CORBA::Short valueE1 = 1; nvlistE[0].name = nameE1.c_str(); nvlistE[0].value <<= valueE1; // (2) NVList要素のnameに"string",valueにstring型のデータをセット。 string nameE2 = "string"; string valueE2 = "test"; nvlistE[1].name = nameE2.c_str(); nvlistE[1].value <<= valueE2.c_str(); // (3) ストリング以外のデータがセットされたときのメッセージを確認。 std::string empty = "short: not a string value\nstring: test\n"; std::string str_nvlistE = toString(nvlistE); /* if (empty == str_nvlistE) { std::cout << "OKK"; } else { std::cout << "not match !!" << std::endl; } */ CPPUNIT_ASSERT(toString(nvlistE) == empty); } }; }; // namespace NVUtil /* * Register test suite */ CPPUNIT_TEST_SUITE_REGISTRATION(NVUtil::NVUtilTests); #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 // NVUtil_cpp
192  CORBA::Double value = 9999999.999;
193  string name = "double";
194  SDOPackage::NameValue nv = newNV(name.c_str(), value);
195 
196  string nvName(nv.name);
197  CPPUNIT_ASSERT_EQUAL(name, nvName);
198 
199  CORBA::Double nvValue;
200  nv.value >>= nvValue;
201  CPPUNIT_ASSERT_EQUAL(value, nvValue);
202  }
203 
210  {
211  // (1) CORBA::String_var型のvalueとchar*型のnameをnewNV()に渡し、NameValueを取得する string name = "string"; CORBA::String_var value = CORBA::string_dup("Hello, world!"); SDOPackage::NameValue nv = newNV(name.c_str(), value); // (2) newNV()にセットしたnameと、取得したNameValue.nameを比較する string nvName(nv.name); CPPUNIT_ASSERT_EQUAL(name, nvName); // (3) newNV()にセットしたvalueと、取得したNameValue.valueを比較する // CORBA::String_var nvValue; const char* nvValue; nv.value >>= nvValue; CPPUNIT_ASSERT_EQUAL(string("Hello, world!"), string(nvValue)); } /*! * @brief newNVChar()のテスト * * - CORBA::Char型データのNameValueを正しく生成できるか? */ void test_newNVChar() { // (1) CORBA::Char型のvalueとchar*型のnameをnewNVChar()に渡し、NameValueを取得する。 string name = "char"; CORBA::Char value = 'A'; SDOPackage::NameValue nv = newNVChar(name.c_str(), value); // (2) newNVChar()にセットしたnameと取得したNameValue.nameの比較。 string nvName(nv.name); CPPUNIT_ASSERT_EQUAL(name, nvName); // (3) newNVChar()にセットしたvalueと取得したNameValue.valueの比較。 CORBA::Char nvValue; nv.value >>= CORBA::Any::to_char(nvValue); CPPUNIT_ASSERT_EQUAL(value, nvValue); } /*! * @brief newNVBool()のテスト * * - CORBA::Boolean型データのNameValueを正しく生成できるか? */ void test_newNVBool() { string name = "bool"; CORBA::Boolean value = false; SDOPackage::NameValue nv = newNVBool(name.c_str(), value); string nvName(nv.name); CPPUNIT_ASSERT_EQUAL(name, nvName); CORBA::Boolean nvValue; nv.value >>= CORBA::Any::to_boolean(nvValue); CPPUNIT_ASSERT_EQUAL(value, nvValue); } /*! * @brief newNVOctet()のテスト * * - CORBA::Octet型データのNameValueを正しく生成できるか? */ void test_newNVOctet() { string name = "octet"; CORBA::Octet value = 030; SDOPackage::NameValue nv = newNVOctet(name.c_str(), value); string nvName(nv.name); CPPUNIT_ASSERT_EQUAL(name, nvName); CORBA::Octet nvValue; nv.value >>= CORBA::Any::to_octet(nvValue); CPPUNIT_ASSERT_EQUAL(value, nvValue); } /*! * @brief copy()のテスト * * - RTC::Propertiesの内容を正しくをNVListにコピーできるか? */ void test_copy() { // (1) RTC::Propertiesオブジェクトの生成 // ※ Propertiesのコンストラクタでは引数で与えられたmapのキー値だけが保存される。 string name = "port-type"; string value = "port-type-value"; map<string, string> mProp; mProp[name] = value; coil::Properties prop(mProp); // (2)copy()にてPropertiesオブジェクトをnvlistにコピー SDOPackage::NVList nvlist; copyFromProperties(nvlist, prop); // (3) copy()により引数で与えたnvlistが書き換えられているかを確認。 string nvName(nvlist[0].name); CPPUNIT_ASSERT_EQUAL(name, nvName); const char* getval; nvlist[0].value >>= getval; string nvValue(getval); CPPUNIT_ASSERT_EQUAL(value, nvValue); } /*! * @brief toProperties()のテスト * * - NVListの内容を正しくRTC::Propertiesに変換できるか? */ void test_toProperties() { // (1) 変換元となるNVListオブジェクトを生成する SDOPackage::NVList nvlist; nvlist.length(2); string name1 = "testname.test1"; string value1 = "testval1"; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1.c_str(); string name2 = "testname.test2"; string value2 = "testval2"; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2.c_str(); // (2) RTC::Propertiesへ変換する coil::Properties prop = toProperties(nvlist); // (3) 正しく変換されていることを確認する string propValue1 = prop.getProperty(name1); CPPUNIT_ASSERT_EQUAL(value1, propValue1); string propValue2 = prop.getProperty(name2); CPPUNIT_ASSERT_EQUAL(value2, propValue2); } /*! * @brief copyToProperties()のテスト * * - NVListの内容を正しくRTC::Propertiesにコピーできるか? */ void test_copyToProperties() { // (1) コピー元となるNVListオブジェクトを生成する SDOPackage::NVList nvlist; nvlist.length(2); string name1 = "testname.test1"; string value1 = "testval1"; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1.c_str(); string name2 = "testname.test2"; string value2 = "testval2"; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2.c_str(); // (2) RTC::Propertiesへコピーする coil::Properties prop; copyToProperties(prop, nvlist); // (3) 値を比較して、正しくコピーされていることを確認する string propValue1 = prop.getProperty(name1); CPPUNIT_ASSERT_EQUAL(value1, propValue1); string propValue2 = prop.getProperty(name2); CPPUNIT_ASSERT_EQUAL(value2, propValue2); } /*! * @brief find()のテスト * * - 指定した名称でNVList内の値を正しく検索できるか? */ void test_find() { SDOPackage::NVList nvlist; nvlist.length(2); // (1) NVList要素のnameに"short",valueにshort型のデータをセット。 string name1 = "short"; CORBA::Short value1 = 1; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1; // (2) NVList要素のnameに"long",valueにlong型のデータをセット。 string name2 = "long"; CORBA::Long value2 = 111; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2; // (3) nvlistの中からNameValue.nameが"long"のNameValue.valueを検索して、正しい値を取得できることを確認する。 CORBA::Short foundValue1; (find(nvlist, name1.c_str())) >>= foundValue1; CPPUNIT_ASSERT_EQUAL(value1, foundValue1); // (4) nvlistの中からNameValue.nameが"short"のNameValue.valueを検索して、正しい値を取得できることを確認する。 CORBA::Long foundValue2; (find(nvlist, name2.c_str())) >>= foundValue2; CPPUNIT_ASSERT_EQUAL(value2, foundValue2); } /*! * @brief find_index()のテスト * * - 指定した名称でNVList内の要素番号を正しく検索できるか? */ void test_find_index() { SDOPackage::NVList nvlist; nvlist.length(2); // (1) NVList要素のnameに"short",valueにshort型のデータをセット。 string name1 = "short"; CORBA::Short value1 = 1; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1; // (2) NVList要素のnameに"long",valueにlong型のデータをセット。 string name2 = "long"; CORBA::Long value2 = 111; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2; // (3) nvlistの中からNameValue.nameが"long"のNameValue.valueを検索して、要素番号を取得できることを確認する。 CORBA::Long ret; ret = find_index(nvlist, name1.c_str()); CPPUNIT_ASSERT_EQUAL((CORBA::Long)0, ret); // (4) nvlistの中からNameValue.nameが"short"のNameValue.valueを検索して、要素番号を取得できることを確認する。 ret = find_index(nvlist, name2.c_str()); CPPUNIT_ASSERT_EQUAL((CORBA::Long)1, ret); } /*! * @brief isString()のテスト * * - NVList内の指定した名称を持つ値がstring型かどうかを正しく判定できるか? */ void test_isString() { SDOPackage::NVList nvlist; nvlist.length(2); // (1) NVList要素のnameに"short",valueにshort型のデータをセット。 string name1 = "short"; CORBA::Short value1 = 1; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1; // (2) NVList要素のnameに"string",valueにstring型のデータをセット。 string name2 = "string"; string value2 = "test"; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2.c_str(); // (3) isString(nvlist,name)にて,指定されたnameのvalueの型がstringかどうかを判定。 CPPUNIT_ASSERT(!isString(nvlist, name1.c_str())); CPPUNIT_ASSERT(isString(nvlist, name2.c_str())); } /*! * @brief isStringValue()のテスト * * - NVList内の指定した名称を持つ値がstring型かどうかを正しく判定できるか? */ void test_isStringValue() { SDOPackage::NVList nvlist; nvlist.length(2); // (1) NVList要素のnameに"short",valueにshort型のデータをセット。 string name1 = "short"; CORBA::Short value1 = 1; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1; // (2) NVList要素のnameに"string",valueにstring型のデータをセット。 string name2 = "string"; string value2 = "test"; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2.c_str(); // (3) isString(nvlist,name)にて,指定されたnameのvalueの型がstringかどうかを判定。 CPPUNIT_ASSERT(!isStringValue(nvlist, name1.c_str(), "1")); CPPUNIT_ASSERT(isStringValue(nvlist, name2.c_str(), "test")); } /*! * @brief toString()のテスト * * - NVList内の指定した名称を持つ値がstring型である場合に、その値を正しく取得できるか? */ void test_toString() { SDOPackage::NVList nvlist; nvlist.length(2); // (1) NVList要素のnameに"short",valueにshort型のデータをセット。 string name1 = "short"; CORBA::Short value1 = 1; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1; // (2) NVList要素のnameに"string",valueにstring型のデータをセット。 string name2 = "string"; string value2 = "test"; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2.c_str(); // (3) toString(nvlist,name)にて,指定されたnameのvalueをstring型で意図とおりに取得できるか? string empty(""); CPPUNIT_ASSERT_EQUAL(empty, toString(nvlist, name1.c_str())); CPPUNIT_ASSERT_EQUAL(value2, toString(nvlist, name2.c_str())); } /*! * @brief appendStringValue()のテスト * * - 指定した名称と値を持つNameValueを、NVListに正しく追加できるか? */ void test_appendStringValue() { SDOPackage::NVList nvlist; nvlist.length(3); // (1) 追加対象となるNVListを作成する string name1 = "language"; string value1 = "japanese"; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1.c_str(); string name2 = "fruit"; string value2 = "apple"; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2.c_str(); string name3 = "drink"; string value3 = "coffee, coke"; nvlist[2].name = name3.c_str(); nvlist[2].value <<= value3.c_str(); // (2) 作成したNVListに、名称"os", 値"unix"のNameValueを正しく追加できるか? string name4 = "os"; string value4 = "unix"; CPPUNIT_ASSERT(appendStringValue(nvlist, name4.c_str(), value4.c_str())); CPPUNIT_ASSERT_EQUAL(value4, toString(nvlist, name4.c_str())); // (3) 既存の名称である"language"に、値"english"を正しく追加できるか? string name5 = name1; string value5 = "english"; CPPUNIT_ASSERT(appendStringValue(nvlist, name5.c_str(), value5.c_str())); string expectedValueLanguage = "japanese,english"; CPPUNIT_ASSERT_EQUAL(expectedValueLanguage, toString(nvlist, name5.c_str())); // (4) 既存の名称・値と全く同一のNameValueを追加しようとしたときに、意図どおり何も追加せずに終了するか? string name6 = name2; string value6 = value2; CPPUNIT_ASSERT(appendStringValue(nvlist, name6.c_str(), value6.c_str())); CPPUNIT_ASSERT_EQUAL(value2, toString(nvlist, name6.c_str())); // (5) 一部の値が、既存の値と重複するNameValueを追加しようとした時に、意図どおりにマージされるか? string name7 = name3; string value7 = "coke, beer"; CPPUNIT_ASSERT(appendStringValue(nvlist, name7.c_str(), value7.c_str())); string expectedValueDrink = "coffee, coke,coke, beer"; CPPUNIT_ASSERT_EQUAL(expectedValueDrink, toString(nvlist, name7.c_str())); } /*! * @brief append()のテスト * * - NVListの内容を、他のNVListに正しく追加できるか? */ void test_append() { // (1) 1つ目のNVListを作成する SDOPackage::NVList nvlistA; nvlistA.length(2); string nameA1 = "nameA1"; string valueA1 = "valueA1"; nvlistA[0].name = nameA1.c_str(); nvlistA[0].value <<= valueA1.c_str(); string nameA2 = "nameA2"; string valueA2 = "valueA2"; nvlistA[1].name = nameA2.c_str(); nvlistA[1].value <<= valueA2.c_str(); // (2) 2つ目のNVListを作成する SDOPackage::NVList nvlistB; nvlistB.length(2); string nameB1 = "nameB1"; string valueB1 = "valueB1"; nvlistB[0].name = nameB1.c_str(); nvlistB[0].value <<= valueB1.c_str(); string nameB2 = "nameB2"; string valueB2 = "valueB2"; nvlistB[1].name = nameB2.c_str(); nvlistB[1].value <<= valueB2.c_str(); // (3) 1つ目のNVListに、2つ目のNVListを追加する append(nvlistA, nvlistB); // (4) 正しく追加されたことを確認する CPPUNIT_ASSERT_EQUAL(valueA1, toString(nvlistA, nameA1.c_str())); CPPUNIT_ASSERT_EQUAL(valueA2, toString(nvlistA, nameA2.c_str())); CPPUNIT_ASSERT_EQUAL(valueB1, toString(nvlistA, nameB1.c_str())); CPPUNIT_ASSERT_EQUAL(valueB2, toString(nvlistA, nameB2.c_str())); } void test_dump() { SDOPackage::NVList nvlistC; nvlistC.length(3); string nameC1 = "nameC1"; string valueC1 = "valueC1"; nvlistC[0].name = nameC1.c_str(); nvlistC[0].value <<= valueC1.c_str(); string nameC2 = "nameC2"; string valueC2 = "valueC2"; nvlistC[1].name = nameC2.c_str(); nvlistC[1].value <<= valueC2.c_str(); string nameC3 = "name_hoge"; string valueC3 = "value_hoge"; nvlistC[2].name = nameC3.c_str(); nvlistC[2].value <<= valueC3.c_str(); dump(nvlistC); } // std::string toString(const SDOPackage::NVList& nv);のテストです。 void test_toStringNV() { SDOPackage::NVList nvlistD; nvlistD.length(2); string nameD1 = "nameD1"; string valueD1 = "valueD1"; nvlistD[0].name = nameD1.c_str(); nvlistD[0].value <<= valueD1.c_str(); string nameD2 = "nameD2"; string valueD2 = "valueD2"; nvlistD[1].name = nameD2.c_str(); nvlistD[1].value <<= valueD2.c_str(); string strD ="\n\nnameD1: valueD1\nnameD2: valueD2"; // std::cout << strD << std::endl; SDOPackage::NVList nvlistE; nvlistE.length(2); // (1) NVList要素のnameに"short",valueにshort型のデータをセット。 string nameE1 = "short"; CORBA::Short valueE1 = 1; nvlistE[0].name = nameE1.c_str(); nvlistE[0].value <<= valueE1; // (2) NVList要素のnameに"string",valueにstring型のデータをセット。 string nameE2 = "string"; string valueE2 = "test"; nvlistE[1].name = nameE2.c_str(); nvlistE[1].value <<= valueE2.c_str(); // (3) ストリング以外のデータがセットされたときのメッセージを確認。 std::string empty = "short: not a string value\nstring: test\n"; std::string str_nvlistE = toString(nvlistE); /* if (empty == str_nvlistE) { std::cout << "OKK"; } else { std::cout << "not match !!" << std::endl; } */ CPPUNIT_ASSERT(toString(nvlistE) == empty); } }; }; // namespace NVUtil /* * Register test suite */ CPPUNIT_TEST_SUITE_REGISTRATION(NVUtil::NVUtilTests); #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 // NVUtil_cpp
212  string name = "string";
213  CORBA::String_var value = CORBA::string_dup("Hello, world!");
214  SDOPackage::NameValue nv = newNV(name.c_str(), value);
215 
216  // (2) newNV()にセットしたnameと、取得したNameValue.nameを比較する string nvName(nv.name); CPPUNIT_ASSERT_EQUAL(name, nvName); // (3) newNV()にセットしたvalueと、取得したNameValue.valueを比較する // CORBA::String_var nvValue; const char* nvValue; nv.value >>= nvValue; CPPUNIT_ASSERT_EQUAL(string("Hello, world!"), string(nvValue)); } /*! * @brief newNVChar()のテスト * * - CORBA::Char型データのNameValueを正しく生成できるか? */ void test_newNVChar() { // (1) CORBA::Char型のvalueとchar*型のnameをnewNVChar()に渡し、NameValueを取得する。 string name = "char"; CORBA::Char value = 'A'; SDOPackage::NameValue nv = newNVChar(name.c_str(), value); // (2) newNVChar()にセットしたnameと取得したNameValue.nameの比較。 string nvName(nv.name); CPPUNIT_ASSERT_EQUAL(name, nvName); // (3) newNVChar()にセットしたvalueと取得したNameValue.valueの比較。 CORBA::Char nvValue; nv.value >>= CORBA::Any::to_char(nvValue); CPPUNIT_ASSERT_EQUAL(value, nvValue); } /*! * @brief newNVBool()のテスト * * - CORBA::Boolean型データのNameValueを正しく生成できるか? */ void test_newNVBool() { string name = "bool"; CORBA::Boolean value = false; SDOPackage::NameValue nv = newNVBool(name.c_str(), value); string nvName(nv.name); CPPUNIT_ASSERT_EQUAL(name, nvName); CORBA::Boolean nvValue; nv.value >>= CORBA::Any::to_boolean(nvValue); CPPUNIT_ASSERT_EQUAL(value, nvValue); } /*! * @brief newNVOctet()のテスト * * - CORBA::Octet型データのNameValueを正しく生成できるか? */ void test_newNVOctet() { string name = "octet"; CORBA::Octet value = 030; SDOPackage::NameValue nv = newNVOctet(name.c_str(), value); string nvName(nv.name); CPPUNIT_ASSERT_EQUAL(name, nvName); CORBA::Octet nvValue; nv.value >>= CORBA::Any::to_octet(nvValue); CPPUNIT_ASSERT_EQUAL(value, nvValue); } /*! * @brief copy()のテスト * * - RTC::Propertiesの内容を正しくをNVListにコピーできるか? */ void test_copy() { // (1) RTC::Propertiesオブジェクトの生成 // ※ Propertiesのコンストラクタでは引数で与えられたmapのキー値だけが保存される。 string name = "port-type"; string value = "port-type-value"; map<string, string> mProp; mProp[name] = value; coil::Properties prop(mProp); // (2)copy()にてPropertiesオブジェクトをnvlistにコピー SDOPackage::NVList nvlist; copyFromProperties(nvlist, prop); // (3) copy()により引数で与えたnvlistが書き換えられているかを確認。 string nvName(nvlist[0].name); CPPUNIT_ASSERT_EQUAL(name, nvName); const char* getval; nvlist[0].value >>= getval; string nvValue(getval); CPPUNIT_ASSERT_EQUAL(value, nvValue); } /*! * @brief toProperties()のテスト * * - NVListの内容を正しくRTC::Propertiesに変換できるか? */ void test_toProperties() { // (1) 変換元となるNVListオブジェクトを生成する SDOPackage::NVList nvlist; nvlist.length(2); string name1 = "testname.test1"; string value1 = "testval1"; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1.c_str(); string name2 = "testname.test2"; string value2 = "testval2"; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2.c_str(); // (2) RTC::Propertiesへ変換する coil::Properties prop = toProperties(nvlist); // (3) 正しく変換されていることを確認する string propValue1 = prop.getProperty(name1); CPPUNIT_ASSERT_EQUAL(value1, propValue1); string propValue2 = prop.getProperty(name2); CPPUNIT_ASSERT_EQUAL(value2, propValue2); } /*! * @brief copyToProperties()のテスト * * - NVListの内容を正しくRTC::Propertiesにコピーできるか? */ void test_copyToProperties() { // (1) コピー元となるNVListオブジェクトを生成する SDOPackage::NVList nvlist; nvlist.length(2); string name1 = "testname.test1"; string value1 = "testval1"; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1.c_str(); string name2 = "testname.test2"; string value2 = "testval2"; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2.c_str(); // (2) RTC::Propertiesへコピーする coil::Properties prop; copyToProperties(prop, nvlist); // (3) 値を比較して、正しくコピーされていることを確認する string propValue1 = prop.getProperty(name1); CPPUNIT_ASSERT_EQUAL(value1, propValue1); string propValue2 = prop.getProperty(name2); CPPUNIT_ASSERT_EQUAL(value2, propValue2); } /*! * @brief find()のテスト * * - 指定した名称でNVList内の値を正しく検索できるか? */ void test_find() { SDOPackage::NVList nvlist; nvlist.length(2); // (1) NVList要素のnameに"short",valueにshort型のデータをセット。 string name1 = "short"; CORBA::Short value1 = 1; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1; // (2) NVList要素のnameに"long",valueにlong型のデータをセット。 string name2 = "long"; CORBA::Long value2 = 111; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2; // (3) nvlistの中からNameValue.nameが"long"のNameValue.valueを検索して、正しい値を取得できることを確認する。 CORBA::Short foundValue1; (find(nvlist, name1.c_str())) >>= foundValue1; CPPUNIT_ASSERT_EQUAL(value1, foundValue1); // (4) nvlistの中からNameValue.nameが"short"のNameValue.valueを検索して、正しい値を取得できることを確認する。 CORBA::Long foundValue2; (find(nvlist, name2.c_str())) >>= foundValue2; CPPUNIT_ASSERT_EQUAL(value2, foundValue2); } /*! * @brief find_index()のテスト * * - 指定した名称でNVList内の要素番号を正しく検索できるか? */ void test_find_index() { SDOPackage::NVList nvlist; nvlist.length(2); // (1) NVList要素のnameに"short",valueにshort型のデータをセット。 string name1 = "short"; CORBA::Short value1 = 1; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1; // (2) NVList要素のnameに"long",valueにlong型のデータをセット。 string name2 = "long"; CORBA::Long value2 = 111; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2; // (3) nvlistの中からNameValue.nameが"long"のNameValue.valueを検索して、要素番号を取得できることを確認する。 CORBA::Long ret; ret = find_index(nvlist, name1.c_str()); CPPUNIT_ASSERT_EQUAL((CORBA::Long)0, ret); // (4) nvlistの中からNameValue.nameが"short"のNameValue.valueを検索して、要素番号を取得できることを確認する。 ret = find_index(nvlist, name2.c_str()); CPPUNIT_ASSERT_EQUAL((CORBA::Long)1, ret); } /*! * @brief isString()のテスト * * - NVList内の指定した名称を持つ値がstring型かどうかを正しく判定できるか? */ void test_isString() { SDOPackage::NVList nvlist; nvlist.length(2); // (1) NVList要素のnameに"short",valueにshort型のデータをセット。 string name1 = "short"; CORBA::Short value1 = 1; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1; // (2) NVList要素のnameに"string",valueにstring型のデータをセット。 string name2 = "string"; string value2 = "test"; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2.c_str(); // (3) isString(nvlist,name)にて,指定されたnameのvalueの型がstringかどうかを判定。 CPPUNIT_ASSERT(!isString(nvlist, name1.c_str())); CPPUNIT_ASSERT(isString(nvlist, name2.c_str())); } /*! * @brief isStringValue()のテスト * * - NVList内の指定した名称を持つ値がstring型かどうかを正しく判定できるか? */ void test_isStringValue() { SDOPackage::NVList nvlist; nvlist.length(2); // (1) NVList要素のnameに"short",valueにshort型のデータをセット。 string name1 = "short"; CORBA::Short value1 = 1; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1; // (2) NVList要素のnameに"string",valueにstring型のデータをセット。 string name2 = "string"; string value2 = "test"; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2.c_str(); // (3) isString(nvlist,name)にて,指定されたnameのvalueの型がstringかどうかを判定。 CPPUNIT_ASSERT(!isStringValue(nvlist, name1.c_str(), "1")); CPPUNIT_ASSERT(isStringValue(nvlist, name2.c_str(), "test")); } /*! * @brief toString()のテスト * * - NVList内の指定した名称を持つ値がstring型である場合に、その値を正しく取得できるか? */ void test_toString() { SDOPackage::NVList nvlist; nvlist.length(2); // (1) NVList要素のnameに"short",valueにshort型のデータをセット。 string name1 = "short"; CORBA::Short value1 = 1; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1; // (2) NVList要素のnameに"string",valueにstring型のデータをセット。 string name2 = "string"; string value2 = "test"; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2.c_str(); // (3) toString(nvlist,name)にて,指定されたnameのvalueをstring型で意図とおりに取得できるか? string empty(""); CPPUNIT_ASSERT_EQUAL(empty, toString(nvlist, name1.c_str())); CPPUNIT_ASSERT_EQUAL(value2, toString(nvlist, name2.c_str())); } /*! * @brief appendStringValue()のテスト * * - 指定した名称と値を持つNameValueを、NVListに正しく追加できるか? */ void test_appendStringValue() { SDOPackage::NVList nvlist; nvlist.length(3); // (1) 追加対象となるNVListを作成する string name1 = "language"; string value1 = "japanese"; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1.c_str(); string name2 = "fruit"; string value2 = "apple"; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2.c_str(); string name3 = "drink"; string value3 = "coffee, coke"; nvlist[2].name = name3.c_str(); nvlist[2].value <<= value3.c_str(); // (2) 作成したNVListに、名称"os", 値"unix"のNameValueを正しく追加できるか? string name4 = "os"; string value4 = "unix"; CPPUNIT_ASSERT(appendStringValue(nvlist, name4.c_str(), value4.c_str())); CPPUNIT_ASSERT_EQUAL(value4, toString(nvlist, name4.c_str())); // (3) 既存の名称である"language"に、値"english"を正しく追加できるか? string name5 = name1; string value5 = "english"; CPPUNIT_ASSERT(appendStringValue(nvlist, name5.c_str(), value5.c_str())); string expectedValueLanguage = "japanese,english"; CPPUNIT_ASSERT_EQUAL(expectedValueLanguage, toString(nvlist, name5.c_str())); // (4) 既存の名称・値と全く同一のNameValueを追加しようとしたときに、意図どおり何も追加せずに終了するか? string name6 = name2; string value6 = value2; CPPUNIT_ASSERT(appendStringValue(nvlist, name6.c_str(), value6.c_str())); CPPUNIT_ASSERT_EQUAL(value2, toString(nvlist, name6.c_str())); // (5) 一部の値が、既存の値と重複するNameValueを追加しようとした時に、意図どおりにマージされるか? string name7 = name3; string value7 = "coke, beer"; CPPUNIT_ASSERT(appendStringValue(nvlist, name7.c_str(), value7.c_str())); string expectedValueDrink = "coffee, coke,coke, beer"; CPPUNIT_ASSERT_EQUAL(expectedValueDrink, toString(nvlist, name7.c_str())); } /*! * @brief append()のテスト * * - NVListの内容を、他のNVListに正しく追加できるか? */ void test_append() { // (1) 1つ目のNVListを作成する SDOPackage::NVList nvlistA; nvlistA.length(2); string nameA1 = "nameA1"; string valueA1 = "valueA1"; nvlistA[0].name = nameA1.c_str(); nvlistA[0].value <<= valueA1.c_str(); string nameA2 = "nameA2"; string valueA2 = "valueA2"; nvlistA[1].name = nameA2.c_str(); nvlistA[1].value <<= valueA2.c_str(); // (2) 2つ目のNVListを作成する SDOPackage::NVList nvlistB; nvlistB.length(2); string nameB1 = "nameB1"; string valueB1 = "valueB1"; nvlistB[0].name = nameB1.c_str(); nvlistB[0].value <<= valueB1.c_str(); string nameB2 = "nameB2"; string valueB2 = "valueB2"; nvlistB[1].name = nameB2.c_str(); nvlistB[1].value <<= valueB2.c_str(); // (3) 1つ目のNVListに、2つ目のNVListを追加する append(nvlistA, nvlistB); // (4) 正しく追加されたことを確認する CPPUNIT_ASSERT_EQUAL(valueA1, toString(nvlistA, nameA1.c_str())); CPPUNIT_ASSERT_EQUAL(valueA2, toString(nvlistA, nameA2.c_str())); CPPUNIT_ASSERT_EQUAL(valueB1, toString(nvlistA, nameB1.c_str())); CPPUNIT_ASSERT_EQUAL(valueB2, toString(nvlistA, nameB2.c_str())); } void test_dump() { SDOPackage::NVList nvlistC; nvlistC.length(3); string nameC1 = "nameC1"; string valueC1 = "valueC1"; nvlistC[0].name = nameC1.c_str(); nvlistC[0].value <<= valueC1.c_str(); string nameC2 = "nameC2"; string valueC2 = "valueC2"; nvlistC[1].name = nameC2.c_str(); nvlistC[1].value <<= valueC2.c_str(); string nameC3 = "name_hoge"; string valueC3 = "value_hoge"; nvlistC[2].name = nameC3.c_str(); nvlistC[2].value <<= valueC3.c_str(); dump(nvlistC); } // std::string toString(const SDOPackage::NVList& nv);のテストです。 void test_toStringNV() { SDOPackage::NVList nvlistD; nvlistD.length(2); string nameD1 = "nameD1"; string valueD1 = "valueD1"; nvlistD[0].name = nameD1.c_str(); nvlistD[0].value <<= valueD1.c_str(); string nameD2 = "nameD2"; string valueD2 = "valueD2"; nvlistD[1].name = nameD2.c_str(); nvlistD[1].value <<= valueD2.c_str(); string strD ="\n\nnameD1: valueD1\nnameD2: valueD2"; // std::cout << strD << std::endl; SDOPackage::NVList nvlistE; nvlistE.length(2); // (1) NVList要素のnameに"short",valueにshort型のデータをセット。 string nameE1 = "short"; CORBA::Short valueE1 = 1; nvlistE[0].name = nameE1.c_str(); nvlistE[0].value <<= valueE1; // (2) NVList要素のnameに"string",valueにstring型のデータをセット。 string nameE2 = "string"; string valueE2 = "test"; nvlistE[1].name = nameE2.c_str(); nvlistE[1].value <<= valueE2.c_str(); // (3) ストリング以外のデータがセットされたときのメッセージを確認。 std::string empty = "short: not a string value\nstring: test\n"; std::string str_nvlistE = toString(nvlistE); /* if (empty == str_nvlistE) { std::cout << "OKK"; } else { std::cout << "not match !!" << std::endl; } */ CPPUNIT_ASSERT(toString(nvlistE) == empty); } }; }; // namespace NVUtil /* * Register test suite */ CPPUNIT_TEST_SUITE_REGISTRATION(NVUtil::NVUtilTests); #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 // NVUtil_cpp
217  string nvName(nv.name);
218  CPPUNIT_ASSERT_EQUAL(name, nvName);
219 
220  // (3) newNV()にセットしたvalueと、取得したNameValue.valueを比較する // CORBA::String_var nvValue; const char* nvValue; nv.value >>= nvValue; CPPUNIT_ASSERT_EQUAL(string("Hello, world!"), string(nvValue)); } /*! * @brief newNVChar()のテスト * * - CORBA::Char型データのNameValueを正しく生成できるか? */ void test_newNVChar() { // (1) CORBA::Char型のvalueとchar*型のnameをnewNVChar()に渡し、NameValueを取得する。 string name = "char"; CORBA::Char value = 'A'; SDOPackage::NameValue nv = newNVChar(name.c_str(), value); // (2) newNVChar()にセットしたnameと取得したNameValue.nameの比較。 string nvName(nv.name); CPPUNIT_ASSERT_EQUAL(name, nvName); // (3) newNVChar()にセットしたvalueと取得したNameValue.valueの比較。 CORBA::Char nvValue; nv.value >>= CORBA::Any::to_char(nvValue); CPPUNIT_ASSERT_EQUAL(value, nvValue); } /*! * @brief newNVBool()のテスト * * - CORBA::Boolean型データのNameValueを正しく生成できるか? */ void test_newNVBool() { string name = "bool"; CORBA::Boolean value = false; SDOPackage::NameValue nv = newNVBool(name.c_str(), value); string nvName(nv.name); CPPUNIT_ASSERT_EQUAL(name, nvName); CORBA::Boolean nvValue; nv.value >>= CORBA::Any::to_boolean(nvValue); CPPUNIT_ASSERT_EQUAL(value, nvValue); } /*! * @brief newNVOctet()のテスト * * - CORBA::Octet型データのNameValueを正しく生成できるか? */ void test_newNVOctet() { string name = "octet"; CORBA::Octet value = 030; SDOPackage::NameValue nv = newNVOctet(name.c_str(), value); string nvName(nv.name); CPPUNIT_ASSERT_EQUAL(name, nvName); CORBA::Octet nvValue; nv.value >>= CORBA::Any::to_octet(nvValue); CPPUNIT_ASSERT_EQUAL(value, nvValue); } /*! * @brief copy()のテスト * * - RTC::Propertiesの内容を正しくをNVListにコピーできるか? */ void test_copy() { // (1) RTC::Propertiesオブジェクトの生成 // ※ Propertiesのコンストラクタでは引数で与えられたmapのキー値だけが保存される。 string name = "port-type"; string value = "port-type-value"; map<string, string> mProp; mProp[name] = value; coil::Properties prop(mProp); // (2)copy()にてPropertiesオブジェクトをnvlistにコピー SDOPackage::NVList nvlist; copyFromProperties(nvlist, prop); // (3) copy()により引数で与えたnvlistが書き換えられているかを確認。 string nvName(nvlist[0].name); CPPUNIT_ASSERT_EQUAL(name, nvName); const char* getval; nvlist[0].value >>= getval; string nvValue(getval); CPPUNIT_ASSERT_EQUAL(value, nvValue); } /*! * @brief toProperties()のテスト * * - NVListの内容を正しくRTC::Propertiesに変換できるか? */ void test_toProperties() { // (1) 変換元となるNVListオブジェクトを生成する SDOPackage::NVList nvlist; nvlist.length(2); string name1 = "testname.test1"; string value1 = "testval1"; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1.c_str(); string name2 = "testname.test2"; string value2 = "testval2"; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2.c_str(); // (2) RTC::Propertiesへ変換する coil::Properties prop = toProperties(nvlist); // (3) 正しく変換されていることを確認する string propValue1 = prop.getProperty(name1); CPPUNIT_ASSERT_EQUAL(value1, propValue1); string propValue2 = prop.getProperty(name2); CPPUNIT_ASSERT_EQUAL(value2, propValue2); } /*! * @brief copyToProperties()のテスト * * - NVListの内容を正しくRTC::Propertiesにコピーできるか? */ void test_copyToProperties() { // (1) コピー元となるNVListオブジェクトを生成する SDOPackage::NVList nvlist; nvlist.length(2); string name1 = "testname.test1"; string value1 = "testval1"; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1.c_str(); string name2 = "testname.test2"; string value2 = "testval2"; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2.c_str(); // (2) RTC::Propertiesへコピーする coil::Properties prop; copyToProperties(prop, nvlist); // (3) 値を比較して、正しくコピーされていることを確認する string propValue1 = prop.getProperty(name1); CPPUNIT_ASSERT_EQUAL(value1, propValue1); string propValue2 = prop.getProperty(name2); CPPUNIT_ASSERT_EQUAL(value2, propValue2); } /*! * @brief find()のテスト * * - 指定した名称でNVList内の値を正しく検索できるか? */ void test_find() { SDOPackage::NVList nvlist; nvlist.length(2); // (1) NVList要素のnameに"short",valueにshort型のデータをセット。 string name1 = "short"; CORBA::Short value1 = 1; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1; // (2) NVList要素のnameに"long",valueにlong型のデータをセット。 string name2 = "long"; CORBA::Long value2 = 111; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2; // (3) nvlistの中からNameValue.nameが"long"のNameValue.valueを検索して、正しい値を取得できることを確認する。 CORBA::Short foundValue1; (find(nvlist, name1.c_str())) >>= foundValue1; CPPUNIT_ASSERT_EQUAL(value1, foundValue1); // (4) nvlistの中からNameValue.nameが"short"のNameValue.valueを検索して、正しい値を取得できることを確認する。 CORBA::Long foundValue2; (find(nvlist, name2.c_str())) >>= foundValue2; CPPUNIT_ASSERT_EQUAL(value2, foundValue2); } /*! * @brief find_index()のテスト * * - 指定した名称でNVList内の要素番号を正しく検索できるか? */ void test_find_index() { SDOPackage::NVList nvlist; nvlist.length(2); // (1) NVList要素のnameに"short",valueにshort型のデータをセット。 string name1 = "short"; CORBA::Short value1 = 1; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1; // (2) NVList要素のnameに"long",valueにlong型のデータをセット。 string name2 = "long"; CORBA::Long value2 = 111; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2; // (3) nvlistの中からNameValue.nameが"long"のNameValue.valueを検索して、要素番号を取得できることを確認する。 CORBA::Long ret; ret = find_index(nvlist, name1.c_str()); CPPUNIT_ASSERT_EQUAL((CORBA::Long)0, ret); // (4) nvlistの中からNameValue.nameが"short"のNameValue.valueを検索して、要素番号を取得できることを確認する。 ret = find_index(nvlist, name2.c_str()); CPPUNIT_ASSERT_EQUAL((CORBA::Long)1, ret); } /*! * @brief isString()のテスト * * - NVList内の指定した名称を持つ値がstring型かどうかを正しく判定できるか? */ void test_isString() { SDOPackage::NVList nvlist; nvlist.length(2); // (1) NVList要素のnameに"short",valueにshort型のデータをセット。 string name1 = "short"; CORBA::Short value1 = 1; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1; // (2) NVList要素のnameに"string",valueにstring型のデータをセット。 string name2 = "string"; string value2 = "test"; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2.c_str(); // (3) isString(nvlist,name)にて,指定されたnameのvalueの型がstringかどうかを判定。 CPPUNIT_ASSERT(!isString(nvlist, name1.c_str())); CPPUNIT_ASSERT(isString(nvlist, name2.c_str())); } /*! * @brief isStringValue()のテスト * * - NVList内の指定した名称を持つ値がstring型かどうかを正しく判定できるか? */ void test_isStringValue() { SDOPackage::NVList nvlist; nvlist.length(2); // (1) NVList要素のnameに"short",valueにshort型のデータをセット。 string name1 = "short"; CORBA::Short value1 = 1; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1; // (2) NVList要素のnameに"string",valueにstring型のデータをセット。 string name2 = "string"; string value2 = "test"; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2.c_str(); // (3) isString(nvlist,name)にて,指定されたnameのvalueの型がstringかどうかを判定。 CPPUNIT_ASSERT(!isStringValue(nvlist, name1.c_str(), "1")); CPPUNIT_ASSERT(isStringValue(nvlist, name2.c_str(), "test")); } /*! * @brief toString()のテスト * * - NVList内の指定した名称を持つ値がstring型である場合に、その値を正しく取得できるか? */ void test_toString() { SDOPackage::NVList nvlist; nvlist.length(2); // (1) NVList要素のnameに"short",valueにshort型のデータをセット。 string name1 = "short"; CORBA::Short value1 = 1; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1; // (2) NVList要素のnameに"string",valueにstring型のデータをセット。 string name2 = "string"; string value2 = "test"; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2.c_str(); // (3) toString(nvlist,name)にて,指定されたnameのvalueをstring型で意図とおりに取得できるか? string empty(""); CPPUNIT_ASSERT_EQUAL(empty, toString(nvlist, name1.c_str())); CPPUNIT_ASSERT_EQUAL(value2, toString(nvlist, name2.c_str())); } /*! * @brief appendStringValue()のテスト * * - 指定した名称と値を持つNameValueを、NVListに正しく追加できるか? */ void test_appendStringValue() { SDOPackage::NVList nvlist; nvlist.length(3); // (1) 追加対象となるNVListを作成する string name1 = "language"; string value1 = "japanese"; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1.c_str(); string name2 = "fruit"; string value2 = "apple"; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2.c_str(); string name3 = "drink"; string value3 = "coffee, coke"; nvlist[2].name = name3.c_str(); nvlist[2].value <<= value3.c_str(); // (2) 作成したNVListに、名称"os", 値"unix"のNameValueを正しく追加できるか? string name4 = "os"; string value4 = "unix"; CPPUNIT_ASSERT(appendStringValue(nvlist, name4.c_str(), value4.c_str())); CPPUNIT_ASSERT_EQUAL(value4, toString(nvlist, name4.c_str())); // (3) 既存の名称である"language"に、値"english"を正しく追加できるか? string name5 = name1; string value5 = "english"; CPPUNIT_ASSERT(appendStringValue(nvlist, name5.c_str(), value5.c_str())); string expectedValueLanguage = "japanese,english"; CPPUNIT_ASSERT_EQUAL(expectedValueLanguage, toString(nvlist, name5.c_str())); // (4) 既存の名称・値と全く同一のNameValueを追加しようとしたときに、意図どおり何も追加せずに終了するか? string name6 = name2; string value6 = value2; CPPUNIT_ASSERT(appendStringValue(nvlist, name6.c_str(), value6.c_str())); CPPUNIT_ASSERT_EQUAL(value2, toString(nvlist, name6.c_str())); // (5) 一部の値が、既存の値と重複するNameValueを追加しようとした時に、意図どおりにマージされるか? string name7 = name3; string value7 = "coke, beer"; CPPUNIT_ASSERT(appendStringValue(nvlist, name7.c_str(), value7.c_str())); string expectedValueDrink = "coffee, coke,coke, beer"; CPPUNIT_ASSERT_EQUAL(expectedValueDrink, toString(nvlist, name7.c_str())); } /*! * @brief append()のテスト * * - NVListの内容を、他のNVListに正しく追加できるか? */ void test_append() { // (1) 1つ目のNVListを作成する SDOPackage::NVList nvlistA; nvlistA.length(2); string nameA1 = "nameA1"; string valueA1 = "valueA1"; nvlistA[0].name = nameA1.c_str(); nvlistA[0].value <<= valueA1.c_str(); string nameA2 = "nameA2"; string valueA2 = "valueA2"; nvlistA[1].name = nameA2.c_str(); nvlistA[1].value <<= valueA2.c_str(); // (2) 2つ目のNVListを作成する SDOPackage::NVList nvlistB; nvlistB.length(2); string nameB1 = "nameB1"; string valueB1 = "valueB1"; nvlistB[0].name = nameB1.c_str(); nvlistB[0].value <<= valueB1.c_str(); string nameB2 = "nameB2"; string valueB2 = "valueB2"; nvlistB[1].name = nameB2.c_str(); nvlistB[1].value <<= valueB2.c_str(); // (3) 1つ目のNVListに、2つ目のNVListを追加する append(nvlistA, nvlistB); // (4) 正しく追加されたことを確認する CPPUNIT_ASSERT_EQUAL(valueA1, toString(nvlistA, nameA1.c_str())); CPPUNIT_ASSERT_EQUAL(valueA2, toString(nvlistA, nameA2.c_str())); CPPUNIT_ASSERT_EQUAL(valueB1, toString(nvlistA, nameB1.c_str())); CPPUNIT_ASSERT_EQUAL(valueB2, toString(nvlistA, nameB2.c_str())); } void test_dump() { SDOPackage::NVList nvlistC; nvlistC.length(3); string nameC1 = "nameC1"; string valueC1 = "valueC1"; nvlistC[0].name = nameC1.c_str(); nvlistC[0].value <<= valueC1.c_str(); string nameC2 = "nameC2"; string valueC2 = "valueC2"; nvlistC[1].name = nameC2.c_str(); nvlistC[1].value <<= valueC2.c_str(); string nameC3 = "name_hoge"; string valueC3 = "value_hoge"; nvlistC[2].name = nameC3.c_str(); nvlistC[2].value <<= valueC3.c_str(); dump(nvlistC); } // std::string toString(const SDOPackage::NVList& nv);のテストです。 void test_toStringNV() { SDOPackage::NVList nvlistD; nvlistD.length(2); string nameD1 = "nameD1"; string valueD1 = "valueD1"; nvlistD[0].name = nameD1.c_str(); nvlistD[0].value <<= valueD1.c_str(); string nameD2 = "nameD2"; string valueD2 = "valueD2"; nvlistD[1].name = nameD2.c_str(); nvlistD[1].value <<= valueD2.c_str(); string strD ="\n\nnameD1: valueD1\nnameD2: valueD2"; // std::cout << strD << std::endl; SDOPackage::NVList nvlistE; nvlistE.length(2); // (1) NVList要素のnameに"short",valueにshort型のデータをセット。 string nameE1 = "short"; CORBA::Short valueE1 = 1; nvlistE[0].name = nameE1.c_str(); nvlistE[0].value <<= valueE1; // (2) NVList要素のnameに"string",valueにstring型のデータをセット。 string nameE2 = "string"; string valueE2 = "test"; nvlistE[1].name = nameE2.c_str(); nvlistE[1].value <<= valueE2.c_str(); // (3) ストリング以外のデータがセットされたときのメッセージを確認。 std::string empty = "short: not a string value\nstring: test\n"; std::string str_nvlistE = toString(nvlistE); /* if (empty == str_nvlistE) { std::cout << "OKK"; } else { std::cout << "not match !!" << std::endl; } */ CPPUNIT_ASSERT(toString(nvlistE) == empty); } }; }; // namespace NVUtil /* * Register test suite */ CPPUNIT_TEST_SUITE_REGISTRATION(NVUtil::NVUtilTests); #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 // NVUtil_cpp
221  // CORBA::String_var nvValue;
222  const char* nvValue;
223  nv.value >>= nvValue;
224  CPPUNIT_ASSERT_EQUAL(string("Hello, world!"), string(nvValue));
225  }
226 
233  {
234  // (1) CORBA::Char型のvalueとchar*型のnameをnewNVChar()に渡し、NameValueを取得する。
235  string name = "char";
236  CORBA::Char value = 'A';
237  SDOPackage::NameValue nv = newNVChar(name.c_str(), value);
238 
239  // (2) newNVChar()にセットしたnameと取得したNameValue.nameの比較。
240  string nvName(nv.name);
241  CPPUNIT_ASSERT_EQUAL(name, nvName);
242 
243  // (3) newNVChar()にセットしたvalueと取得したNameValue.valueの比較。
244  CORBA::Char nvValue;
245  nv.value >>= CORBA::Any::to_char(nvValue);
246  CPPUNIT_ASSERT_EQUAL(value, nvValue);
247  }
248 
255  {
256  string name = "bool";
257  CORBA::Boolean value = false;
258  SDOPackage::NameValue nv = newNVBool(name.c_str(), value);
259 
260  string nvName(nv.name);
261  CPPUNIT_ASSERT_EQUAL(name, nvName);
262 
263  CORBA::Boolean nvValue;
264  nv.value >>= CORBA::Any::to_boolean(nvValue);
265  CPPUNIT_ASSERT_EQUAL(value, nvValue);
266  }
267 
274  {
275  string name = "octet";
276  CORBA::Octet value = 030;
277  SDOPackage::NameValue nv = newNVOctet(name.c_str(), value);
278 
279  string nvName(nv.name);
280  CPPUNIT_ASSERT_EQUAL(name, nvName);
281 
282  CORBA::Octet nvValue;
283  nv.value >>= CORBA::Any::to_octet(nvValue);
284  CPPUNIT_ASSERT_EQUAL(value, nvValue);
285  }
286 
292  void test_copy()
293  {
294  // (1) RTC::Propertiesオブジェクトの生成
295  // ※ Propertiesのコンストラクタでは引数で与えられたmapのキー値だけが保存される。
296  string name = "port-type";
297  string value = "port-type-value";
298  map<string, string> mProp;
299  mProp[name] = value;
300  coil::Properties prop(mProp);
301 
302  // (2)copy()にてPropertiesオブジェクトをnvlistにコピー
303  SDOPackage::NVList nvlist;
304  copyFromProperties(nvlist, prop);
305 
306  // (3) copy()により引数で与えたnvlistが書き換えられているかを確認。
307  string nvName(nvlist[0].name);
308  CPPUNIT_ASSERT_EQUAL(name, nvName);
309 
310  const char* getval;
311  nvlist[0].value >>= getval;
312  string nvValue(getval);
313  CPPUNIT_ASSERT_EQUAL(value, nvValue);
314  }
315 
322  {
323  // (1) 変換元となるNVListオブジェクトを生成する SDOPackage::NVList nvlist; nvlist.length(2); string name1 = "testname.test1"; string value1 = "testval1"; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1.c_str(); string name2 = "testname.test2"; string value2 = "testval2"; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2.c_str(); // (2) RTC::Propertiesへ変換する coil::Properties prop = toProperties(nvlist); // (3) 正しく変換されていることを確認する string propValue1 = prop.getProperty(name1); CPPUNIT_ASSERT_EQUAL(value1, propValue1); string propValue2 = prop.getProperty(name2); CPPUNIT_ASSERT_EQUAL(value2, propValue2); } /*! * @brief copyToProperties()のテスト * * - NVListの内容を正しくRTC::Propertiesにコピーできるか? */ void test_copyToProperties() { // (1) コピー元となるNVListオブジェクトを生成する SDOPackage::NVList nvlist; nvlist.length(2); string name1 = "testname.test1"; string value1 = "testval1"; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1.c_str(); string name2 = "testname.test2"; string value2 = "testval2"; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2.c_str(); // (2) RTC::Propertiesへコピーする coil::Properties prop; copyToProperties(prop, nvlist); // (3) 値を比較して、正しくコピーされていることを確認する string propValue1 = prop.getProperty(name1); CPPUNIT_ASSERT_EQUAL(value1, propValue1); string propValue2 = prop.getProperty(name2); CPPUNIT_ASSERT_EQUAL(value2, propValue2); } /*! * @brief find()のテスト * * - 指定した名称でNVList内の値を正しく検索できるか? */ void test_find() { SDOPackage::NVList nvlist; nvlist.length(2); // (1) NVList要素のnameに"short",valueにshort型のデータをセット。 string name1 = "short"; CORBA::Short value1 = 1; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1; // (2) NVList要素のnameに"long",valueにlong型のデータをセット。 string name2 = "long"; CORBA::Long value2 = 111; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2; // (3) nvlistの中からNameValue.nameが"long"のNameValue.valueを検索して、正しい値を取得できることを確認する。 CORBA::Short foundValue1; (find(nvlist, name1.c_str())) >>= foundValue1; CPPUNIT_ASSERT_EQUAL(value1, foundValue1); // (4) nvlistの中からNameValue.nameが"short"のNameValue.valueを検索して、正しい値を取得できることを確認する。 CORBA::Long foundValue2; (find(nvlist, name2.c_str())) >>= foundValue2; CPPUNIT_ASSERT_EQUAL(value2, foundValue2); } /*! * @brief find_index()のテスト * * - 指定した名称でNVList内の要素番号を正しく検索できるか? */ void test_find_index() { SDOPackage::NVList nvlist; nvlist.length(2); // (1) NVList要素のnameに"short",valueにshort型のデータをセット。 string name1 = "short"; CORBA::Short value1 = 1; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1; // (2) NVList要素のnameに"long",valueにlong型のデータをセット。 string name2 = "long"; CORBA::Long value2 = 111; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2; // (3) nvlistの中からNameValue.nameが"long"のNameValue.valueを検索して、要素番号を取得できることを確認する。 CORBA::Long ret; ret = find_index(nvlist, name1.c_str()); CPPUNIT_ASSERT_EQUAL((CORBA::Long)0, ret); // (4) nvlistの中からNameValue.nameが"short"のNameValue.valueを検索して、要素番号を取得できることを確認する。 ret = find_index(nvlist, name2.c_str()); CPPUNIT_ASSERT_EQUAL((CORBA::Long)1, ret); } /*! * @brief isString()のテスト * * - NVList内の指定した名称を持つ値がstring型かどうかを正しく判定できるか? */ void test_isString() { SDOPackage::NVList nvlist; nvlist.length(2); // (1) NVList要素のnameに"short",valueにshort型のデータをセット。 string name1 = "short"; CORBA::Short value1 = 1; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1; // (2) NVList要素のnameに"string",valueにstring型のデータをセット。 string name2 = "string"; string value2 = "test"; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2.c_str(); // (3) isString(nvlist,name)にて,指定されたnameのvalueの型がstringかどうかを判定。 CPPUNIT_ASSERT(!isString(nvlist, name1.c_str())); CPPUNIT_ASSERT(isString(nvlist, name2.c_str())); } /*! * @brief isStringValue()のテスト * * - NVList内の指定した名称を持つ値がstring型かどうかを正しく判定できるか? */ void test_isStringValue() { SDOPackage::NVList nvlist; nvlist.length(2); // (1) NVList要素のnameに"short",valueにshort型のデータをセット。 string name1 = "short"; CORBA::Short value1 = 1; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1; // (2) NVList要素のnameに"string",valueにstring型のデータをセット。 string name2 = "string"; string value2 = "test"; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2.c_str(); // (3) isString(nvlist,name)にて,指定されたnameのvalueの型がstringかどうかを判定。 CPPUNIT_ASSERT(!isStringValue(nvlist, name1.c_str(), "1")); CPPUNIT_ASSERT(isStringValue(nvlist, name2.c_str(), "test")); } /*! * @brief toString()のテスト * * - NVList内の指定した名称を持つ値がstring型である場合に、その値を正しく取得できるか? */ void test_toString() { SDOPackage::NVList nvlist; nvlist.length(2); // (1) NVList要素のnameに"short",valueにshort型のデータをセット。 string name1 = "short"; CORBA::Short value1 = 1; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1; // (2) NVList要素のnameに"string",valueにstring型のデータをセット。 string name2 = "string"; string value2 = "test"; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2.c_str(); // (3) toString(nvlist,name)にて,指定されたnameのvalueをstring型で意図とおりに取得できるか? string empty(""); CPPUNIT_ASSERT_EQUAL(empty, toString(nvlist, name1.c_str())); CPPUNIT_ASSERT_EQUAL(value2, toString(nvlist, name2.c_str())); } /*! * @brief appendStringValue()のテスト * * - 指定した名称と値を持つNameValueを、NVListに正しく追加できるか? */ void test_appendStringValue() { SDOPackage::NVList nvlist; nvlist.length(3); // (1) 追加対象となるNVListを作成する string name1 = "language"; string value1 = "japanese"; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1.c_str(); string name2 = "fruit"; string value2 = "apple"; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2.c_str(); string name3 = "drink"; string value3 = "coffee, coke"; nvlist[2].name = name3.c_str(); nvlist[2].value <<= value3.c_str(); // (2) 作成したNVListに、名称"os", 値"unix"のNameValueを正しく追加できるか? string name4 = "os"; string value4 = "unix"; CPPUNIT_ASSERT(appendStringValue(nvlist, name4.c_str(), value4.c_str())); CPPUNIT_ASSERT_EQUAL(value4, toString(nvlist, name4.c_str())); // (3) 既存の名称である"language"に、値"english"を正しく追加できるか? string name5 = name1; string value5 = "english"; CPPUNIT_ASSERT(appendStringValue(nvlist, name5.c_str(), value5.c_str())); string expectedValueLanguage = "japanese,english"; CPPUNIT_ASSERT_EQUAL(expectedValueLanguage, toString(nvlist, name5.c_str())); // (4) 既存の名称・値と全く同一のNameValueを追加しようとしたときに、意図どおり何も追加せずに終了するか? string name6 = name2; string value6 = value2; CPPUNIT_ASSERT(appendStringValue(nvlist, name6.c_str(), value6.c_str())); CPPUNIT_ASSERT_EQUAL(value2, toString(nvlist, name6.c_str())); // (5) 一部の値が、既存の値と重複するNameValueを追加しようとした時に、意図どおりにマージされるか? string name7 = name3; string value7 = "coke, beer"; CPPUNIT_ASSERT(appendStringValue(nvlist, name7.c_str(), value7.c_str())); string expectedValueDrink = "coffee, coke,coke, beer"; CPPUNIT_ASSERT_EQUAL(expectedValueDrink, toString(nvlist, name7.c_str())); } /*! * @brief append()のテスト * * - NVListの内容を、他のNVListに正しく追加できるか? */ void test_append() { // (1) 1つ目のNVListを作成する SDOPackage::NVList nvlistA; nvlistA.length(2); string nameA1 = "nameA1"; string valueA1 = "valueA1"; nvlistA[0].name = nameA1.c_str(); nvlistA[0].value <<= valueA1.c_str(); string nameA2 = "nameA2"; string valueA2 = "valueA2"; nvlistA[1].name = nameA2.c_str(); nvlistA[1].value <<= valueA2.c_str(); // (2) 2つ目のNVListを作成する SDOPackage::NVList nvlistB; nvlistB.length(2); string nameB1 = "nameB1"; string valueB1 = "valueB1"; nvlistB[0].name = nameB1.c_str(); nvlistB[0].value <<= valueB1.c_str(); string nameB2 = "nameB2"; string valueB2 = "valueB2"; nvlistB[1].name = nameB2.c_str(); nvlistB[1].value <<= valueB2.c_str(); // (3) 1つ目のNVListに、2つ目のNVListを追加する append(nvlistA, nvlistB); // (4) 正しく追加されたことを確認する CPPUNIT_ASSERT_EQUAL(valueA1, toString(nvlistA, nameA1.c_str())); CPPUNIT_ASSERT_EQUAL(valueA2, toString(nvlistA, nameA2.c_str())); CPPUNIT_ASSERT_EQUAL(valueB1, toString(nvlistA, nameB1.c_str())); CPPUNIT_ASSERT_EQUAL(valueB2, toString(nvlistA, nameB2.c_str())); } void test_dump() { SDOPackage::NVList nvlistC; nvlistC.length(3); string nameC1 = "nameC1"; string valueC1 = "valueC1"; nvlistC[0].name = nameC1.c_str(); nvlistC[0].value <<= valueC1.c_str(); string nameC2 = "nameC2"; string valueC2 = "valueC2"; nvlistC[1].name = nameC2.c_str(); nvlistC[1].value <<= valueC2.c_str(); string nameC3 = "name_hoge"; string valueC3 = "value_hoge"; nvlistC[2].name = nameC3.c_str(); nvlistC[2].value <<= valueC3.c_str(); dump(nvlistC); } // std::string toString(const SDOPackage::NVList& nv);のテストです。 void test_toStringNV() { SDOPackage::NVList nvlistD; nvlistD.length(2); string nameD1 = "nameD1"; string valueD1 = "valueD1"; nvlistD[0].name = nameD1.c_str(); nvlistD[0].value <<= valueD1.c_str(); string nameD2 = "nameD2"; string valueD2 = "valueD2"; nvlistD[1].name = nameD2.c_str(); nvlistD[1].value <<= valueD2.c_str(); string strD ="\n\nnameD1: valueD1\nnameD2: valueD2"; // std::cout << strD << std::endl; SDOPackage::NVList nvlistE; nvlistE.length(2); // (1) NVList要素のnameに"short",valueにshort型のデータをセット。 string nameE1 = "short"; CORBA::Short valueE1 = 1; nvlistE[0].name = nameE1.c_str(); nvlistE[0].value <<= valueE1; // (2) NVList要素のnameに"string",valueにstring型のデータをセット。 string nameE2 = "string"; string valueE2 = "test"; nvlistE[1].name = nameE2.c_str(); nvlistE[1].value <<= valueE2.c_str(); // (3) ストリング以外のデータがセットされたときのメッセージを確認。 std::string empty = "short: not a string value\nstring: test\n"; std::string str_nvlistE = toString(nvlistE); /* if (empty == str_nvlistE) { std::cout << "OKK"; } else { std::cout << "not match !!" << std::endl; } */ CPPUNIT_ASSERT(toString(nvlistE) == empty); } }; }; // namespace NVUtil /* * Register test suite */ CPPUNIT_TEST_SUITE_REGISTRATION(NVUtil::NVUtilTests); #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 // NVUtil_cpp
324  SDOPackage::NVList nvlist;
325  nvlist.length(2);
326 
327  string name1 = "testname.test1";
328  string value1 = "testval1";
329  nvlist[0].name = name1.c_str();
330  nvlist[0].value <<= value1.c_str();
331 
332  string name2 = "testname.test2";
333  string value2 = "testval2";
334  nvlist[1].name = name2.c_str();
335  nvlist[1].value <<= value2.c_str();
336 
337  // (2) RTC::Propertiesへ変換する coil::Properties prop = toProperties(nvlist); // (3) 正しく変換されていることを確認する string propValue1 = prop.getProperty(name1); CPPUNIT_ASSERT_EQUAL(value1, propValue1); string propValue2 = prop.getProperty(name2); CPPUNIT_ASSERT_EQUAL(value2, propValue2); } /*! * @brief copyToProperties()のテスト * * - NVListの内容を正しくRTC::Propertiesにコピーできるか? */ void test_copyToProperties() { // (1) コピー元となるNVListオブジェクトを生成する SDOPackage::NVList nvlist; nvlist.length(2); string name1 = "testname.test1"; string value1 = "testval1"; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1.c_str(); string name2 = "testname.test2"; string value2 = "testval2"; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2.c_str(); // (2) RTC::Propertiesへコピーする coil::Properties prop; copyToProperties(prop, nvlist); // (3) 値を比較して、正しくコピーされていることを確認する string propValue1 = prop.getProperty(name1); CPPUNIT_ASSERT_EQUAL(value1, propValue1); string propValue2 = prop.getProperty(name2); CPPUNIT_ASSERT_EQUAL(value2, propValue2); } /*! * @brief find()のテスト * * - 指定した名称でNVList内の値を正しく検索できるか? */ void test_find() { SDOPackage::NVList nvlist; nvlist.length(2); // (1) NVList要素のnameに"short",valueにshort型のデータをセット。 string name1 = "short"; CORBA::Short value1 = 1; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1; // (2) NVList要素のnameに"long",valueにlong型のデータをセット。 string name2 = "long"; CORBA::Long value2 = 111; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2; // (3) nvlistの中からNameValue.nameが"long"のNameValue.valueを検索して、正しい値を取得できることを確認する。 CORBA::Short foundValue1; (find(nvlist, name1.c_str())) >>= foundValue1; CPPUNIT_ASSERT_EQUAL(value1, foundValue1); // (4) nvlistの中からNameValue.nameが"short"のNameValue.valueを検索して、正しい値を取得できることを確認する。 CORBA::Long foundValue2; (find(nvlist, name2.c_str())) >>= foundValue2; CPPUNIT_ASSERT_EQUAL(value2, foundValue2); } /*! * @brief find_index()のテスト * * - 指定した名称でNVList内の要素番号を正しく検索できるか? */ void test_find_index() { SDOPackage::NVList nvlist; nvlist.length(2); // (1) NVList要素のnameに"short",valueにshort型のデータをセット。 string name1 = "short"; CORBA::Short value1 = 1; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1; // (2) NVList要素のnameに"long",valueにlong型のデータをセット。 string name2 = "long"; CORBA::Long value2 = 111; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2; // (3) nvlistの中からNameValue.nameが"long"のNameValue.valueを検索して、要素番号を取得できることを確認する。 CORBA::Long ret; ret = find_index(nvlist, name1.c_str()); CPPUNIT_ASSERT_EQUAL((CORBA::Long)0, ret); // (4) nvlistの中からNameValue.nameが"short"のNameValue.valueを検索して、要素番号を取得できることを確認する。 ret = find_index(nvlist, name2.c_str()); CPPUNIT_ASSERT_EQUAL((CORBA::Long)1, ret); } /*! * @brief isString()のテスト * * - NVList内の指定した名称を持つ値がstring型かどうかを正しく判定できるか? */ void test_isString() { SDOPackage::NVList nvlist; nvlist.length(2); // (1) NVList要素のnameに"short",valueにshort型のデータをセット。 string name1 = "short"; CORBA::Short value1 = 1; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1; // (2) NVList要素のnameに"string",valueにstring型のデータをセット。 string name2 = "string"; string value2 = "test"; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2.c_str(); // (3) isString(nvlist,name)にて,指定されたnameのvalueの型がstringかどうかを判定。 CPPUNIT_ASSERT(!isString(nvlist, name1.c_str())); CPPUNIT_ASSERT(isString(nvlist, name2.c_str())); } /*! * @brief isStringValue()のテスト * * - NVList内の指定した名称を持つ値がstring型かどうかを正しく判定できるか? */ void test_isStringValue() { SDOPackage::NVList nvlist; nvlist.length(2); // (1) NVList要素のnameに"short",valueにshort型のデータをセット。 string name1 = "short"; CORBA::Short value1 = 1; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1; // (2) NVList要素のnameに"string",valueにstring型のデータをセット。 string name2 = "string"; string value2 = "test"; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2.c_str(); // (3) isString(nvlist,name)にて,指定されたnameのvalueの型がstringかどうかを判定。 CPPUNIT_ASSERT(!isStringValue(nvlist, name1.c_str(), "1")); CPPUNIT_ASSERT(isStringValue(nvlist, name2.c_str(), "test")); } /*! * @brief toString()のテスト * * - NVList内の指定した名称を持つ値がstring型である場合に、その値を正しく取得できるか? */ void test_toString() { SDOPackage::NVList nvlist; nvlist.length(2); // (1) NVList要素のnameに"short",valueにshort型のデータをセット。 string name1 = "short"; CORBA::Short value1 = 1; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1; // (2) NVList要素のnameに"string",valueにstring型のデータをセット。 string name2 = "string"; string value2 = "test"; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2.c_str(); // (3) toString(nvlist,name)にて,指定されたnameのvalueをstring型で意図とおりに取得できるか? string empty(""); CPPUNIT_ASSERT_EQUAL(empty, toString(nvlist, name1.c_str())); CPPUNIT_ASSERT_EQUAL(value2, toString(nvlist, name2.c_str())); } /*! * @brief appendStringValue()のテスト * * - 指定した名称と値を持つNameValueを、NVListに正しく追加できるか? */ void test_appendStringValue() { SDOPackage::NVList nvlist; nvlist.length(3); // (1) 追加対象となるNVListを作成する string name1 = "language"; string value1 = "japanese"; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1.c_str(); string name2 = "fruit"; string value2 = "apple"; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2.c_str(); string name3 = "drink"; string value3 = "coffee, coke"; nvlist[2].name = name3.c_str(); nvlist[2].value <<= value3.c_str(); // (2) 作成したNVListに、名称"os", 値"unix"のNameValueを正しく追加できるか? string name4 = "os"; string value4 = "unix"; CPPUNIT_ASSERT(appendStringValue(nvlist, name4.c_str(), value4.c_str())); CPPUNIT_ASSERT_EQUAL(value4, toString(nvlist, name4.c_str())); // (3) 既存の名称である"language"に、値"english"を正しく追加できるか? string name5 = name1; string value5 = "english"; CPPUNIT_ASSERT(appendStringValue(nvlist, name5.c_str(), value5.c_str())); string expectedValueLanguage = "japanese,english"; CPPUNIT_ASSERT_EQUAL(expectedValueLanguage, toString(nvlist, name5.c_str())); // (4) 既存の名称・値と全く同一のNameValueを追加しようとしたときに、意図どおり何も追加せずに終了するか? string name6 = name2; string value6 = value2; CPPUNIT_ASSERT(appendStringValue(nvlist, name6.c_str(), value6.c_str())); CPPUNIT_ASSERT_EQUAL(value2, toString(nvlist, name6.c_str())); // (5) 一部の値が、既存の値と重複するNameValueを追加しようとした時に、意図どおりにマージされるか? string name7 = name3; string value7 = "coke, beer"; CPPUNIT_ASSERT(appendStringValue(nvlist, name7.c_str(), value7.c_str())); string expectedValueDrink = "coffee, coke,coke, beer"; CPPUNIT_ASSERT_EQUAL(expectedValueDrink, toString(nvlist, name7.c_str())); } /*! * @brief append()のテスト * * - NVListの内容を、他のNVListに正しく追加できるか? */ void test_append() { // (1) 1つ目のNVListを作成する SDOPackage::NVList nvlistA; nvlistA.length(2); string nameA1 = "nameA1"; string valueA1 = "valueA1"; nvlistA[0].name = nameA1.c_str(); nvlistA[0].value <<= valueA1.c_str(); string nameA2 = "nameA2"; string valueA2 = "valueA2"; nvlistA[1].name = nameA2.c_str(); nvlistA[1].value <<= valueA2.c_str(); // (2) 2つ目のNVListを作成する SDOPackage::NVList nvlistB; nvlistB.length(2); string nameB1 = "nameB1"; string valueB1 = "valueB1"; nvlistB[0].name = nameB1.c_str(); nvlistB[0].value <<= valueB1.c_str(); string nameB2 = "nameB2"; string valueB2 = "valueB2"; nvlistB[1].name = nameB2.c_str(); nvlistB[1].value <<= valueB2.c_str(); // (3) 1つ目のNVListに、2つ目のNVListを追加する append(nvlistA, nvlistB); // (4) 正しく追加されたことを確認する CPPUNIT_ASSERT_EQUAL(valueA1, toString(nvlistA, nameA1.c_str())); CPPUNIT_ASSERT_EQUAL(valueA2, toString(nvlistA, nameA2.c_str())); CPPUNIT_ASSERT_EQUAL(valueB1, toString(nvlistA, nameB1.c_str())); CPPUNIT_ASSERT_EQUAL(valueB2, toString(nvlistA, nameB2.c_str())); } void test_dump() { SDOPackage::NVList nvlistC; nvlistC.length(3); string nameC1 = "nameC1"; string valueC1 = "valueC1"; nvlistC[0].name = nameC1.c_str(); nvlistC[0].value <<= valueC1.c_str(); string nameC2 = "nameC2"; string valueC2 = "valueC2"; nvlistC[1].name = nameC2.c_str(); nvlistC[1].value <<= valueC2.c_str(); string nameC3 = "name_hoge"; string valueC3 = "value_hoge"; nvlistC[2].name = nameC3.c_str(); nvlistC[2].value <<= valueC3.c_str(); dump(nvlistC); } // std::string toString(const SDOPackage::NVList& nv);のテストです。 void test_toStringNV() { SDOPackage::NVList nvlistD; nvlistD.length(2); string nameD1 = "nameD1"; string valueD1 = "valueD1"; nvlistD[0].name = nameD1.c_str(); nvlistD[0].value <<= valueD1.c_str(); string nameD2 = "nameD2"; string valueD2 = "valueD2"; nvlistD[1].name = nameD2.c_str(); nvlistD[1].value <<= valueD2.c_str(); string strD ="\n\nnameD1: valueD1\nnameD2: valueD2"; // std::cout << strD << std::endl; SDOPackage::NVList nvlistE; nvlistE.length(2); // (1) NVList要素のnameに"short",valueにshort型のデータをセット。 string nameE1 = "short"; CORBA::Short valueE1 = 1; nvlistE[0].name = nameE1.c_str(); nvlistE[0].value <<= valueE1; // (2) NVList要素のnameに"string",valueにstring型のデータをセット。 string nameE2 = "string"; string valueE2 = "test"; nvlistE[1].name = nameE2.c_str(); nvlistE[1].value <<= valueE2.c_str(); // (3) ストリング以外のデータがセットされたときのメッセージを確認。 std::string empty = "short: not a string value\nstring: test\n"; std::string str_nvlistE = toString(nvlistE); /* if (empty == str_nvlistE) { std::cout << "OKK"; } else { std::cout << "not match !!" << std::endl; } */ CPPUNIT_ASSERT(toString(nvlistE) == empty); } }; }; // namespace NVUtil /* * Register test suite */ CPPUNIT_TEST_SUITE_REGISTRATION(NVUtil::NVUtilTests); #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 // NVUtil_cpp
339 
340  // (3) 正しく変換されていることを確認する string propValue1 = prop.getProperty(name1); CPPUNIT_ASSERT_EQUAL(value1, propValue1); string propValue2 = prop.getProperty(name2); CPPUNIT_ASSERT_EQUAL(value2, propValue2); } /*! * @brief copyToProperties()のテスト * * - NVListの内容を正しくRTC::Propertiesにコピーできるか? */ void test_copyToProperties() { // (1) コピー元となるNVListオブジェクトを生成する SDOPackage::NVList nvlist; nvlist.length(2); string name1 = "testname.test1"; string value1 = "testval1"; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1.c_str(); string name2 = "testname.test2"; string value2 = "testval2"; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2.c_str(); // (2) RTC::Propertiesへコピーする coil::Properties prop; copyToProperties(prop, nvlist); // (3) 値を比較して、正しくコピーされていることを確認する string propValue1 = prop.getProperty(name1); CPPUNIT_ASSERT_EQUAL(value1, propValue1); string propValue2 = prop.getProperty(name2); CPPUNIT_ASSERT_EQUAL(value2, propValue2); } /*! * @brief find()のテスト * * - 指定した名称でNVList内の値を正しく検索できるか? */ void test_find() { SDOPackage::NVList nvlist; nvlist.length(2); // (1) NVList要素のnameに"short",valueにshort型のデータをセット。 string name1 = "short"; CORBA::Short value1 = 1; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1; // (2) NVList要素のnameに"long",valueにlong型のデータをセット。 string name2 = "long"; CORBA::Long value2 = 111; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2; // (3) nvlistの中からNameValue.nameが"long"のNameValue.valueを検索して、正しい値を取得できることを確認する。 CORBA::Short foundValue1; (find(nvlist, name1.c_str())) >>= foundValue1; CPPUNIT_ASSERT_EQUAL(value1, foundValue1); // (4) nvlistの中からNameValue.nameが"short"のNameValue.valueを検索して、正しい値を取得できることを確認する。 CORBA::Long foundValue2; (find(nvlist, name2.c_str())) >>= foundValue2; CPPUNIT_ASSERT_EQUAL(value2, foundValue2); } /*! * @brief find_index()のテスト * * - 指定した名称でNVList内の要素番号を正しく検索できるか? */ void test_find_index() { SDOPackage::NVList nvlist; nvlist.length(2); // (1) NVList要素のnameに"short",valueにshort型のデータをセット。 string name1 = "short"; CORBA::Short value1 = 1; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1; // (2) NVList要素のnameに"long",valueにlong型のデータをセット。 string name2 = "long"; CORBA::Long value2 = 111; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2; // (3) nvlistの中からNameValue.nameが"long"のNameValue.valueを検索して、要素番号を取得できることを確認する。 CORBA::Long ret; ret = find_index(nvlist, name1.c_str()); CPPUNIT_ASSERT_EQUAL((CORBA::Long)0, ret); // (4) nvlistの中からNameValue.nameが"short"のNameValue.valueを検索して、要素番号を取得できることを確認する。 ret = find_index(nvlist, name2.c_str()); CPPUNIT_ASSERT_EQUAL((CORBA::Long)1, ret); } /*! * @brief isString()のテスト * * - NVList内の指定した名称を持つ値がstring型かどうかを正しく判定できるか? */ void test_isString() { SDOPackage::NVList nvlist; nvlist.length(2); // (1) NVList要素のnameに"short",valueにshort型のデータをセット。 string name1 = "short"; CORBA::Short value1 = 1; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1; // (2) NVList要素のnameに"string",valueにstring型のデータをセット。 string name2 = "string"; string value2 = "test"; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2.c_str(); // (3) isString(nvlist,name)にて,指定されたnameのvalueの型がstringかどうかを判定。 CPPUNIT_ASSERT(!isString(nvlist, name1.c_str())); CPPUNIT_ASSERT(isString(nvlist, name2.c_str())); } /*! * @brief isStringValue()のテスト * * - NVList内の指定した名称を持つ値がstring型かどうかを正しく判定できるか? */ void test_isStringValue() { SDOPackage::NVList nvlist; nvlist.length(2); // (1) NVList要素のnameに"short",valueにshort型のデータをセット。 string name1 = "short"; CORBA::Short value1 = 1; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1; // (2) NVList要素のnameに"string",valueにstring型のデータをセット。 string name2 = "string"; string value2 = "test"; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2.c_str(); // (3) isString(nvlist,name)にて,指定されたnameのvalueの型がstringかどうかを判定。 CPPUNIT_ASSERT(!isStringValue(nvlist, name1.c_str(), "1")); CPPUNIT_ASSERT(isStringValue(nvlist, name2.c_str(), "test")); } /*! * @brief toString()のテスト * * - NVList内の指定した名称を持つ値がstring型である場合に、その値を正しく取得できるか? */ void test_toString() { SDOPackage::NVList nvlist; nvlist.length(2); // (1) NVList要素のnameに"short",valueにshort型のデータをセット。 string name1 = "short"; CORBA::Short value1 = 1; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1; // (2) NVList要素のnameに"string",valueにstring型のデータをセット。 string name2 = "string"; string value2 = "test"; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2.c_str(); // (3) toString(nvlist,name)にて,指定されたnameのvalueをstring型で意図とおりに取得できるか? string empty(""); CPPUNIT_ASSERT_EQUAL(empty, toString(nvlist, name1.c_str())); CPPUNIT_ASSERT_EQUAL(value2, toString(nvlist, name2.c_str())); } /*! * @brief appendStringValue()のテスト * * - 指定した名称と値を持つNameValueを、NVListに正しく追加できるか? */ void test_appendStringValue() { SDOPackage::NVList nvlist; nvlist.length(3); // (1) 追加対象となるNVListを作成する string name1 = "language"; string value1 = "japanese"; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1.c_str(); string name2 = "fruit"; string value2 = "apple"; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2.c_str(); string name3 = "drink"; string value3 = "coffee, coke"; nvlist[2].name = name3.c_str(); nvlist[2].value <<= value3.c_str(); // (2) 作成したNVListに、名称"os", 値"unix"のNameValueを正しく追加できるか? string name4 = "os"; string value4 = "unix"; CPPUNIT_ASSERT(appendStringValue(nvlist, name4.c_str(), value4.c_str())); CPPUNIT_ASSERT_EQUAL(value4, toString(nvlist, name4.c_str())); // (3) 既存の名称である"language"に、値"english"を正しく追加できるか? string name5 = name1; string value5 = "english"; CPPUNIT_ASSERT(appendStringValue(nvlist, name5.c_str(), value5.c_str())); string expectedValueLanguage = "japanese,english"; CPPUNIT_ASSERT_EQUAL(expectedValueLanguage, toString(nvlist, name5.c_str())); // (4) 既存の名称・値と全く同一のNameValueを追加しようとしたときに、意図どおり何も追加せずに終了するか? string name6 = name2; string value6 = value2; CPPUNIT_ASSERT(appendStringValue(nvlist, name6.c_str(), value6.c_str())); CPPUNIT_ASSERT_EQUAL(value2, toString(nvlist, name6.c_str())); // (5) 一部の値が、既存の値と重複するNameValueを追加しようとした時に、意図どおりにマージされるか? string name7 = name3; string value7 = "coke, beer"; CPPUNIT_ASSERT(appendStringValue(nvlist, name7.c_str(), value7.c_str())); string expectedValueDrink = "coffee, coke,coke, beer"; CPPUNIT_ASSERT_EQUAL(expectedValueDrink, toString(nvlist, name7.c_str())); } /*! * @brief append()のテスト * * - NVListの内容を、他のNVListに正しく追加できるか? */ void test_append() { // (1) 1つ目のNVListを作成する SDOPackage::NVList nvlistA; nvlistA.length(2); string nameA1 = "nameA1"; string valueA1 = "valueA1"; nvlistA[0].name = nameA1.c_str(); nvlistA[0].value <<= valueA1.c_str(); string nameA2 = "nameA2"; string valueA2 = "valueA2"; nvlistA[1].name = nameA2.c_str(); nvlistA[1].value <<= valueA2.c_str(); // (2) 2つ目のNVListを作成する SDOPackage::NVList nvlistB; nvlistB.length(2); string nameB1 = "nameB1"; string valueB1 = "valueB1"; nvlistB[0].name = nameB1.c_str(); nvlistB[0].value <<= valueB1.c_str(); string nameB2 = "nameB2"; string valueB2 = "valueB2"; nvlistB[1].name = nameB2.c_str(); nvlistB[1].value <<= valueB2.c_str(); // (3) 1つ目のNVListに、2つ目のNVListを追加する append(nvlistA, nvlistB); // (4) 正しく追加されたことを確認する CPPUNIT_ASSERT_EQUAL(valueA1, toString(nvlistA, nameA1.c_str())); CPPUNIT_ASSERT_EQUAL(valueA2, toString(nvlistA, nameA2.c_str())); CPPUNIT_ASSERT_EQUAL(valueB1, toString(nvlistA, nameB1.c_str())); CPPUNIT_ASSERT_EQUAL(valueB2, toString(nvlistA, nameB2.c_str())); } void test_dump() { SDOPackage::NVList nvlistC; nvlistC.length(3); string nameC1 = "nameC1"; string valueC1 = "valueC1"; nvlistC[0].name = nameC1.c_str(); nvlistC[0].value <<= valueC1.c_str(); string nameC2 = "nameC2"; string valueC2 = "valueC2"; nvlistC[1].name = nameC2.c_str(); nvlistC[1].value <<= valueC2.c_str(); string nameC3 = "name_hoge"; string valueC3 = "value_hoge"; nvlistC[2].name = nameC3.c_str(); nvlistC[2].value <<= valueC3.c_str(); dump(nvlistC); } // std::string toString(const SDOPackage::NVList& nv);のテストです。 void test_toStringNV() { SDOPackage::NVList nvlistD; nvlistD.length(2); string nameD1 = "nameD1"; string valueD1 = "valueD1"; nvlistD[0].name = nameD1.c_str(); nvlistD[0].value <<= valueD1.c_str(); string nameD2 = "nameD2"; string valueD2 = "valueD2"; nvlistD[1].name = nameD2.c_str(); nvlistD[1].value <<= valueD2.c_str(); string strD ="\n\nnameD1: valueD1\nnameD2: valueD2"; // std::cout << strD << std::endl; SDOPackage::NVList nvlistE; nvlistE.length(2); // (1) NVList要素のnameに"short",valueにshort型のデータをセット。 string nameE1 = "short"; CORBA::Short valueE1 = 1; nvlistE[0].name = nameE1.c_str(); nvlistE[0].value <<= valueE1; // (2) NVList要素のnameに"string",valueにstring型のデータをセット。 string nameE2 = "string"; string valueE2 = "test"; nvlistE[1].name = nameE2.c_str(); nvlistE[1].value <<= valueE2.c_str(); // (3) ストリング以外のデータがセットされたときのメッセージを確認。 std::string empty = "short: not a string value\nstring: test\n"; std::string str_nvlistE = toString(nvlistE); /* if (empty == str_nvlistE) { std::cout << "OKK"; } else { std::cout << "not match !!" << std::endl; } */ CPPUNIT_ASSERT(toString(nvlistE) == empty); } }; }; // namespace NVUtil /* * Register test suite */ CPPUNIT_TEST_SUITE_REGISTRATION(NVUtil::NVUtilTests); #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 // NVUtil_cpp
341  string propValue1 = prop.getProperty(name1);
342  CPPUNIT_ASSERT_EQUAL(value1, propValue1);
343 
344  string propValue2 = prop.getProperty(name2);
345  CPPUNIT_ASSERT_EQUAL(value2, propValue2);
346  }
347 
354  {
355  // (1) コピー元となるNVListオブジェクトを生成する SDOPackage::NVList nvlist; nvlist.length(2); string name1 = "testname.test1"; string value1 = "testval1"; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1.c_str(); string name2 = "testname.test2"; string value2 = "testval2"; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2.c_str(); // (2) RTC::Propertiesへコピーする coil::Properties prop; copyToProperties(prop, nvlist); // (3) 値を比較して、正しくコピーされていることを確認する string propValue1 = prop.getProperty(name1); CPPUNIT_ASSERT_EQUAL(value1, propValue1); string propValue2 = prop.getProperty(name2); CPPUNIT_ASSERT_EQUAL(value2, propValue2); } /*! * @brief find()のテスト * * - 指定した名称でNVList内の値を正しく検索できるか? */ void test_find() { SDOPackage::NVList nvlist; nvlist.length(2); // (1) NVList要素のnameに"short",valueにshort型のデータをセット。 string name1 = "short"; CORBA::Short value1 = 1; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1; // (2) NVList要素のnameに"long",valueにlong型のデータをセット。 string name2 = "long"; CORBA::Long value2 = 111; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2; // (3) nvlistの中からNameValue.nameが"long"のNameValue.valueを検索して、正しい値を取得できることを確認する。 CORBA::Short foundValue1; (find(nvlist, name1.c_str())) >>= foundValue1; CPPUNIT_ASSERT_EQUAL(value1, foundValue1); // (4) nvlistの中からNameValue.nameが"short"のNameValue.valueを検索して、正しい値を取得できることを確認する。 CORBA::Long foundValue2; (find(nvlist, name2.c_str())) >>= foundValue2; CPPUNIT_ASSERT_EQUAL(value2, foundValue2); } /*! * @brief find_index()のテスト * * - 指定した名称でNVList内の要素番号を正しく検索できるか? */ void test_find_index() { SDOPackage::NVList nvlist; nvlist.length(2); // (1) NVList要素のnameに"short",valueにshort型のデータをセット。 string name1 = "short"; CORBA::Short value1 = 1; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1; // (2) NVList要素のnameに"long",valueにlong型のデータをセット。 string name2 = "long"; CORBA::Long value2 = 111; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2; // (3) nvlistの中からNameValue.nameが"long"のNameValue.valueを検索して、要素番号を取得できることを確認する。 CORBA::Long ret; ret = find_index(nvlist, name1.c_str()); CPPUNIT_ASSERT_EQUAL((CORBA::Long)0, ret); // (4) nvlistの中からNameValue.nameが"short"のNameValue.valueを検索して、要素番号を取得できることを確認する。 ret = find_index(nvlist, name2.c_str()); CPPUNIT_ASSERT_EQUAL((CORBA::Long)1, ret); } /*! * @brief isString()のテスト * * - NVList内の指定した名称を持つ値がstring型かどうかを正しく判定できるか? */ void test_isString() { SDOPackage::NVList nvlist; nvlist.length(2); // (1) NVList要素のnameに"short",valueにshort型のデータをセット。 string name1 = "short"; CORBA::Short value1 = 1; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1; // (2) NVList要素のnameに"string",valueにstring型のデータをセット。 string name2 = "string"; string value2 = "test"; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2.c_str(); // (3) isString(nvlist,name)にて,指定されたnameのvalueの型がstringかどうかを判定。 CPPUNIT_ASSERT(!isString(nvlist, name1.c_str())); CPPUNIT_ASSERT(isString(nvlist, name2.c_str())); } /*! * @brief isStringValue()のテスト * * - NVList内の指定した名称を持つ値がstring型かどうかを正しく判定できるか? */ void test_isStringValue() { SDOPackage::NVList nvlist; nvlist.length(2); // (1) NVList要素のnameに"short",valueにshort型のデータをセット。 string name1 = "short"; CORBA::Short value1 = 1; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1; // (2) NVList要素のnameに"string",valueにstring型のデータをセット。 string name2 = "string"; string value2 = "test"; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2.c_str(); // (3) isString(nvlist,name)にて,指定されたnameのvalueの型がstringかどうかを判定。 CPPUNIT_ASSERT(!isStringValue(nvlist, name1.c_str(), "1")); CPPUNIT_ASSERT(isStringValue(nvlist, name2.c_str(), "test")); } /*! * @brief toString()のテスト * * - NVList内の指定した名称を持つ値がstring型である場合に、その値を正しく取得できるか? */ void test_toString() { SDOPackage::NVList nvlist; nvlist.length(2); // (1) NVList要素のnameに"short",valueにshort型のデータをセット。 string name1 = "short"; CORBA::Short value1 = 1; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1; // (2) NVList要素のnameに"string",valueにstring型のデータをセット。 string name2 = "string"; string value2 = "test"; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2.c_str(); // (3) toString(nvlist,name)にて,指定されたnameのvalueをstring型で意図とおりに取得できるか? string empty(""); CPPUNIT_ASSERT_EQUAL(empty, toString(nvlist, name1.c_str())); CPPUNIT_ASSERT_EQUAL(value2, toString(nvlist, name2.c_str())); } /*! * @brief appendStringValue()のテスト * * - 指定した名称と値を持つNameValueを、NVListに正しく追加できるか? */ void test_appendStringValue() { SDOPackage::NVList nvlist; nvlist.length(3); // (1) 追加対象となるNVListを作成する string name1 = "language"; string value1 = "japanese"; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1.c_str(); string name2 = "fruit"; string value2 = "apple"; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2.c_str(); string name3 = "drink"; string value3 = "coffee, coke"; nvlist[2].name = name3.c_str(); nvlist[2].value <<= value3.c_str(); // (2) 作成したNVListに、名称"os", 値"unix"のNameValueを正しく追加できるか? string name4 = "os"; string value4 = "unix"; CPPUNIT_ASSERT(appendStringValue(nvlist, name4.c_str(), value4.c_str())); CPPUNIT_ASSERT_EQUAL(value4, toString(nvlist, name4.c_str())); // (3) 既存の名称である"language"に、値"english"を正しく追加できるか? string name5 = name1; string value5 = "english"; CPPUNIT_ASSERT(appendStringValue(nvlist, name5.c_str(), value5.c_str())); string expectedValueLanguage = "japanese,english"; CPPUNIT_ASSERT_EQUAL(expectedValueLanguage, toString(nvlist, name5.c_str())); // (4) 既存の名称・値と全く同一のNameValueを追加しようとしたときに、意図どおり何も追加せずに終了するか? string name6 = name2; string value6 = value2; CPPUNIT_ASSERT(appendStringValue(nvlist, name6.c_str(), value6.c_str())); CPPUNIT_ASSERT_EQUAL(value2, toString(nvlist, name6.c_str())); // (5) 一部の値が、既存の値と重複するNameValueを追加しようとした時に、意図どおりにマージされるか? string name7 = name3; string value7 = "coke, beer"; CPPUNIT_ASSERT(appendStringValue(nvlist, name7.c_str(), value7.c_str())); string expectedValueDrink = "coffee, coke,coke, beer"; CPPUNIT_ASSERT_EQUAL(expectedValueDrink, toString(nvlist, name7.c_str())); } /*! * @brief append()のテスト * * - NVListの内容を、他のNVListに正しく追加できるか? */ void test_append() { // (1) 1つ目のNVListを作成する SDOPackage::NVList nvlistA; nvlistA.length(2); string nameA1 = "nameA1"; string valueA1 = "valueA1"; nvlistA[0].name = nameA1.c_str(); nvlistA[0].value <<= valueA1.c_str(); string nameA2 = "nameA2"; string valueA2 = "valueA2"; nvlistA[1].name = nameA2.c_str(); nvlistA[1].value <<= valueA2.c_str(); // (2) 2つ目のNVListを作成する SDOPackage::NVList nvlistB; nvlistB.length(2); string nameB1 = "nameB1"; string valueB1 = "valueB1"; nvlistB[0].name = nameB1.c_str(); nvlistB[0].value <<= valueB1.c_str(); string nameB2 = "nameB2"; string valueB2 = "valueB2"; nvlistB[1].name = nameB2.c_str(); nvlistB[1].value <<= valueB2.c_str(); // (3) 1つ目のNVListに、2つ目のNVListを追加する append(nvlistA, nvlistB); // (4) 正しく追加されたことを確認する CPPUNIT_ASSERT_EQUAL(valueA1, toString(nvlistA, nameA1.c_str())); CPPUNIT_ASSERT_EQUAL(valueA2, toString(nvlistA, nameA2.c_str())); CPPUNIT_ASSERT_EQUAL(valueB1, toString(nvlistA, nameB1.c_str())); CPPUNIT_ASSERT_EQUAL(valueB2, toString(nvlistA, nameB2.c_str())); } void test_dump() { SDOPackage::NVList nvlistC; nvlistC.length(3); string nameC1 = "nameC1"; string valueC1 = "valueC1"; nvlistC[0].name = nameC1.c_str(); nvlistC[0].value <<= valueC1.c_str(); string nameC2 = "nameC2"; string valueC2 = "valueC2"; nvlistC[1].name = nameC2.c_str(); nvlistC[1].value <<= valueC2.c_str(); string nameC3 = "name_hoge"; string valueC3 = "value_hoge"; nvlistC[2].name = nameC3.c_str(); nvlistC[2].value <<= valueC3.c_str(); dump(nvlistC); } // std::string toString(const SDOPackage::NVList& nv);のテストです。 void test_toStringNV() { SDOPackage::NVList nvlistD; nvlistD.length(2); string nameD1 = "nameD1"; string valueD1 = "valueD1"; nvlistD[0].name = nameD1.c_str(); nvlistD[0].value <<= valueD1.c_str(); string nameD2 = "nameD2"; string valueD2 = "valueD2"; nvlistD[1].name = nameD2.c_str(); nvlistD[1].value <<= valueD2.c_str(); string strD ="\n\nnameD1: valueD1\nnameD2: valueD2"; // std::cout << strD << std::endl; SDOPackage::NVList nvlistE; nvlistE.length(2); // (1) NVList要素のnameに"short",valueにshort型のデータをセット。 string nameE1 = "short"; CORBA::Short valueE1 = 1; nvlistE[0].name = nameE1.c_str(); nvlistE[0].value <<= valueE1; // (2) NVList要素のnameに"string",valueにstring型のデータをセット。 string nameE2 = "string"; string valueE2 = "test"; nvlistE[1].name = nameE2.c_str(); nvlistE[1].value <<= valueE2.c_str(); // (3) ストリング以外のデータがセットされたときのメッセージを確認。 std::string empty = "short: not a string value\nstring: test\n"; std::string str_nvlistE = toString(nvlistE); /* if (empty == str_nvlistE) { std::cout << "OKK"; } else { std::cout << "not match !!" << std::endl; } */ CPPUNIT_ASSERT(toString(nvlistE) == empty); } }; }; // namespace NVUtil /* * Register test suite */ CPPUNIT_TEST_SUITE_REGISTRATION(NVUtil::NVUtilTests); #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 // NVUtil_cpp
356  SDOPackage::NVList nvlist;
357  nvlist.length(2);
358 
359  string name1 = "testname.test1";
360  string value1 = "testval1";
361  nvlist[0].name = name1.c_str();
362  nvlist[0].value <<= value1.c_str();
363 
364  string name2 = "testname.test2";
365  string value2 = "testval2";
366  nvlist[1].name = name2.c_str();
367  nvlist[1].value <<= value2.c_str();
368 
369  // (2) RTC::Propertiesへコピーする coil::Properties prop; copyToProperties(prop, nvlist); // (3) 値を比較して、正しくコピーされていることを確認する string propValue1 = prop.getProperty(name1); CPPUNIT_ASSERT_EQUAL(value1, propValue1); string propValue2 = prop.getProperty(name2); CPPUNIT_ASSERT_EQUAL(value2, propValue2); } /*! * @brief find()のテスト * * - 指定した名称でNVList内の値を正しく検索できるか? */ void test_find() { SDOPackage::NVList nvlist; nvlist.length(2); // (1) NVList要素のnameに"short",valueにshort型のデータをセット。 string name1 = "short"; CORBA::Short value1 = 1; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1; // (2) NVList要素のnameに"long",valueにlong型のデータをセット。 string name2 = "long"; CORBA::Long value2 = 111; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2; // (3) nvlistの中からNameValue.nameが"long"のNameValue.valueを検索して、正しい値を取得できることを確認する。 CORBA::Short foundValue1; (find(nvlist, name1.c_str())) >>= foundValue1; CPPUNIT_ASSERT_EQUAL(value1, foundValue1); // (4) nvlistの中からNameValue.nameが"short"のNameValue.valueを検索して、正しい値を取得できることを確認する。 CORBA::Long foundValue2; (find(nvlist, name2.c_str())) >>= foundValue2; CPPUNIT_ASSERT_EQUAL(value2, foundValue2); } /*! * @brief find_index()のテスト * * - 指定した名称でNVList内の要素番号を正しく検索できるか? */ void test_find_index() { SDOPackage::NVList nvlist; nvlist.length(2); // (1) NVList要素のnameに"short",valueにshort型のデータをセット。 string name1 = "short"; CORBA::Short value1 = 1; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1; // (2) NVList要素のnameに"long",valueにlong型のデータをセット。 string name2 = "long"; CORBA::Long value2 = 111; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2; // (3) nvlistの中からNameValue.nameが"long"のNameValue.valueを検索して、要素番号を取得できることを確認する。 CORBA::Long ret; ret = find_index(nvlist, name1.c_str()); CPPUNIT_ASSERT_EQUAL((CORBA::Long)0, ret); // (4) nvlistの中からNameValue.nameが"short"のNameValue.valueを検索して、要素番号を取得できることを確認する。 ret = find_index(nvlist, name2.c_str()); CPPUNIT_ASSERT_EQUAL((CORBA::Long)1, ret); } /*! * @brief isString()のテスト * * - NVList内の指定した名称を持つ値がstring型かどうかを正しく判定できるか? */ void test_isString() { SDOPackage::NVList nvlist; nvlist.length(2); // (1) NVList要素のnameに"short",valueにshort型のデータをセット。 string name1 = "short"; CORBA::Short value1 = 1; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1; // (2) NVList要素のnameに"string",valueにstring型のデータをセット。 string name2 = "string"; string value2 = "test"; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2.c_str(); // (3) isString(nvlist,name)にて,指定されたnameのvalueの型がstringかどうかを判定。 CPPUNIT_ASSERT(!isString(nvlist, name1.c_str())); CPPUNIT_ASSERT(isString(nvlist, name2.c_str())); } /*! * @brief isStringValue()のテスト * * - NVList内の指定した名称を持つ値がstring型かどうかを正しく判定できるか? */ void test_isStringValue() { SDOPackage::NVList nvlist; nvlist.length(2); // (1) NVList要素のnameに"short",valueにshort型のデータをセット。 string name1 = "short"; CORBA::Short value1 = 1; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1; // (2) NVList要素のnameに"string",valueにstring型のデータをセット。 string name2 = "string"; string value2 = "test"; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2.c_str(); // (3) isString(nvlist,name)にて,指定されたnameのvalueの型がstringかどうかを判定。 CPPUNIT_ASSERT(!isStringValue(nvlist, name1.c_str(), "1")); CPPUNIT_ASSERT(isStringValue(nvlist, name2.c_str(), "test")); } /*! * @brief toString()のテスト * * - NVList内の指定した名称を持つ値がstring型である場合に、その値を正しく取得できるか? */ void test_toString() { SDOPackage::NVList nvlist; nvlist.length(2); // (1) NVList要素のnameに"short",valueにshort型のデータをセット。 string name1 = "short"; CORBA::Short value1 = 1; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1; // (2) NVList要素のnameに"string",valueにstring型のデータをセット。 string name2 = "string"; string value2 = "test"; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2.c_str(); // (3) toString(nvlist,name)にて,指定されたnameのvalueをstring型で意図とおりに取得できるか? string empty(""); CPPUNIT_ASSERT_EQUAL(empty, toString(nvlist, name1.c_str())); CPPUNIT_ASSERT_EQUAL(value2, toString(nvlist, name2.c_str())); } /*! * @brief appendStringValue()のテスト * * - 指定した名称と値を持つNameValueを、NVListに正しく追加できるか? */ void test_appendStringValue() { SDOPackage::NVList nvlist; nvlist.length(3); // (1) 追加対象となるNVListを作成する string name1 = "language"; string value1 = "japanese"; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1.c_str(); string name2 = "fruit"; string value2 = "apple"; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2.c_str(); string name3 = "drink"; string value3 = "coffee, coke"; nvlist[2].name = name3.c_str(); nvlist[2].value <<= value3.c_str(); // (2) 作成したNVListに、名称"os", 値"unix"のNameValueを正しく追加できるか? string name4 = "os"; string value4 = "unix"; CPPUNIT_ASSERT(appendStringValue(nvlist, name4.c_str(), value4.c_str())); CPPUNIT_ASSERT_EQUAL(value4, toString(nvlist, name4.c_str())); // (3) 既存の名称である"language"に、値"english"を正しく追加できるか? string name5 = name1; string value5 = "english"; CPPUNIT_ASSERT(appendStringValue(nvlist, name5.c_str(), value5.c_str())); string expectedValueLanguage = "japanese,english"; CPPUNIT_ASSERT_EQUAL(expectedValueLanguage, toString(nvlist, name5.c_str())); // (4) 既存の名称・値と全く同一のNameValueを追加しようとしたときに、意図どおり何も追加せずに終了するか? string name6 = name2; string value6 = value2; CPPUNIT_ASSERT(appendStringValue(nvlist, name6.c_str(), value6.c_str())); CPPUNIT_ASSERT_EQUAL(value2, toString(nvlist, name6.c_str())); // (5) 一部の値が、既存の値と重複するNameValueを追加しようとした時に、意図どおりにマージされるか? string name7 = name3; string value7 = "coke, beer"; CPPUNIT_ASSERT(appendStringValue(nvlist, name7.c_str(), value7.c_str())); string expectedValueDrink = "coffee, coke,coke, beer"; CPPUNIT_ASSERT_EQUAL(expectedValueDrink, toString(nvlist, name7.c_str())); } /*! * @brief append()のテスト * * - NVListの内容を、他のNVListに正しく追加できるか? */ void test_append() { // (1) 1つ目のNVListを作成する SDOPackage::NVList nvlistA; nvlistA.length(2); string nameA1 = "nameA1"; string valueA1 = "valueA1"; nvlistA[0].name = nameA1.c_str(); nvlistA[0].value <<= valueA1.c_str(); string nameA2 = "nameA2"; string valueA2 = "valueA2"; nvlistA[1].name = nameA2.c_str(); nvlistA[1].value <<= valueA2.c_str(); // (2) 2つ目のNVListを作成する SDOPackage::NVList nvlistB; nvlistB.length(2); string nameB1 = "nameB1"; string valueB1 = "valueB1"; nvlistB[0].name = nameB1.c_str(); nvlistB[0].value <<= valueB1.c_str(); string nameB2 = "nameB2"; string valueB2 = "valueB2"; nvlistB[1].name = nameB2.c_str(); nvlistB[1].value <<= valueB2.c_str(); // (3) 1つ目のNVListに、2つ目のNVListを追加する append(nvlistA, nvlistB); // (4) 正しく追加されたことを確認する CPPUNIT_ASSERT_EQUAL(valueA1, toString(nvlistA, nameA1.c_str())); CPPUNIT_ASSERT_EQUAL(valueA2, toString(nvlistA, nameA2.c_str())); CPPUNIT_ASSERT_EQUAL(valueB1, toString(nvlistA, nameB1.c_str())); CPPUNIT_ASSERT_EQUAL(valueB2, toString(nvlistA, nameB2.c_str())); } void test_dump() { SDOPackage::NVList nvlistC; nvlistC.length(3); string nameC1 = "nameC1"; string valueC1 = "valueC1"; nvlistC[0].name = nameC1.c_str(); nvlistC[0].value <<= valueC1.c_str(); string nameC2 = "nameC2"; string valueC2 = "valueC2"; nvlistC[1].name = nameC2.c_str(); nvlistC[1].value <<= valueC2.c_str(); string nameC3 = "name_hoge"; string valueC3 = "value_hoge"; nvlistC[2].name = nameC3.c_str(); nvlistC[2].value <<= valueC3.c_str(); dump(nvlistC); } // std::string toString(const SDOPackage::NVList& nv);のテストです。 void test_toStringNV() { SDOPackage::NVList nvlistD; nvlistD.length(2); string nameD1 = "nameD1"; string valueD1 = "valueD1"; nvlistD[0].name = nameD1.c_str(); nvlistD[0].value <<= valueD1.c_str(); string nameD2 = "nameD2"; string valueD2 = "valueD2"; nvlistD[1].name = nameD2.c_str(); nvlistD[1].value <<= valueD2.c_str(); string strD ="\n\nnameD1: valueD1\nnameD2: valueD2"; // std::cout << strD << std::endl; SDOPackage::NVList nvlistE; nvlistE.length(2); // (1) NVList要素のnameに"short",valueにshort型のデータをセット。 string nameE1 = "short"; CORBA::Short valueE1 = 1; nvlistE[0].name = nameE1.c_str(); nvlistE[0].value <<= valueE1; // (2) NVList要素のnameに"string",valueにstring型のデータをセット。 string nameE2 = "string"; string valueE2 = "test"; nvlistE[1].name = nameE2.c_str(); nvlistE[1].value <<= valueE2.c_str(); // (3) ストリング以外のデータがセットされたときのメッセージを確認。 std::string empty = "short: not a string value\nstring: test\n"; std::string str_nvlistE = toString(nvlistE); /* if (empty == str_nvlistE) { std::cout << "OKK"; } else { std::cout << "not match !!" << std::endl; } */ CPPUNIT_ASSERT(toString(nvlistE) == empty); } }; }; // namespace NVUtil /* * Register test suite */ CPPUNIT_TEST_SUITE_REGISTRATION(NVUtil::NVUtilTests); #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 // NVUtil_cpp
371  copyToProperties(prop, nvlist);
372 
373  // (3) 値を比較して、正しくコピーされていることを確認する string propValue1 = prop.getProperty(name1); CPPUNIT_ASSERT_EQUAL(value1, propValue1); string propValue2 = prop.getProperty(name2); CPPUNIT_ASSERT_EQUAL(value2, propValue2); } /*! * @brief find()のテスト * * - 指定した名称でNVList内の値を正しく検索できるか? */ void test_find() { SDOPackage::NVList nvlist; nvlist.length(2); // (1) NVList要素のnameに"short",valueにshort型のデータをセット。 string name1 = "short"; CORBA::Short value1 = 1; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1; // (2) NVList要素のnameに"long",valueにlong型のデータをセット。 string name2 = "long"; CORBA::Long value2 = 111; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2; // (3) nvlistの中からNameValue.nameが"long"のNameValue.valueを検索して、正しい値を取得できることを確認する。 CORBA::Short foundValue1; (find(nvlist, name1.c_str())) >>= foundValue1; CPPUNIT_ASSERT_EQUAL(value1, foundValue1); // (4) nvlistの中からNameValue.nameが"short"のNameValue.valueを検索して、正しい値を取得できることを確認する。 CORBA::Long foundValue2; (find(nvlist, name2.c_str())) >>= foundValue2; CPPUNIT_ASSERT_EQUAL(value2, foundValue2); } /*! * @brief find_index()のテスト * * - 指定した名称でNVList内の要素番号を正しく検索できるか? */ void test_find_index() { SDOPackage::NVList nvlist; nvlist.length(2); // (1) NVList要素のnameに"short",valueにshort型のデータをセット。 string name1 = "short"; CORBA::Short value1 = 1; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1; // (2) NVList要素のnameに"long",valueにlong型のデータをセット。 string name2 = "long"; CORBA::Long value2 = 111; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2; // (3) nvlistの中からNameValue.nameが"long"のNameValue.valueを検索して、要素番号を取得できることを確認する。 CORBA::Long ret; ret = find_index(nvlist, name1.c_str()); CPPUNIT_ASSERT_EQUAL((CORBA::Long)0, ret); // (4) nvlistの中からNameValue.nameが"short"のNameValue.valueを検索して、要素番号を取得できることを確認する。 ret = find_index(nvlist, name2.c_str()); CPPUNIT_ASSERT_EQUAL((CORBA::Long)1, ret); } /*! * @brief isString()のテスト * * - NVList内の指定した名称を持つ値がstring型かどうかを正しく判定できるか? */ void test_isString() { SDOPackage::NVList nvlist; nvlist.length(2); // (1) NVList要素のnameに"short",valueにshort型のデータをセット。 string name1 = "short"; CORBA::Short value1 = 1; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1; // (2) NVList要素のnameに"string",valueにstring型のデータをセット。 string name2 = "string"; string value2 = "test"; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2.c_str(); // (3) isString(nvlist,name)にて,指定されたnameのvalueの型がstringかどうかを判定。 CPPUNIT_ASSERT(!isString(nvlist, name1.c_str())); CPPUNIT_ASSERT(isString(nvlist, name2.c_str())); } /*! * @brief isStringValue()のテスト * * - NVList内の指定した名称を持つ値がstring型かどうかを正しく判定できるか? */ void test_isStringValue() { SDOPackage::NVList nvlist; nvlist.length(2); // (1) NVList要素のnameに"short",valueにshort型のデータをセット。 string name1 = "short"; CORBA::Short value1 = 1; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1; // (2) NVList要素のnameに"string",valueにstring型のデータをセット。 string name2 = "string"; string value2 = "test"; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2.c_str(); // (3) isString(nvlist,name)にて,指定されたnameのvalueの型がstringかどうかを判定。 CPPUNIT_ASSERT(!isStringValue(nvlist, name1.c_str(), "1")); CPPUNIT_ASSERT(isStringValue(nvlist, name2.c_str(), "test")); } /*! * @brief toString()のテスト * * - NVList内の指定した名称を持つ値がstring型である場合に、その値を正しく取得できるか? */ void test_toString() { SDOPackage::NVList nvlist; nvlist.length(2); // (1) NVList要素のnameに"short",valueにshort型のデータをセット。 string name1 = "short"; CORBA::Short value1 = 1; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1; // (2) NVList要素のnameに"string",valueにstring型のデータをセット。 string name2 = "string"; string value2 = "test"; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2.c_str(); // (3) toString(nvlist,name)にて,指定されたnameのvalueをstring型で意図とおりに取得できるか? string empty(""); CPPUNIT_ASSERT_EQUAL(empty, toString(nvlist, name1.c_str())); CPPUNIT_ASSERT_EQUAL(value2, toString(nvlist, name2.c_str())); } /*! * @brief appendStringValue()のテスト * * - 指定した名称と値を持つNameValueを、NVListに正しく追加できるか? */ void test_appendStringValue() { SDOPackage::NVList nvlist; nvlist.length(3); // (1) 追加対象となるNVListを作成する string name1 = "language"; string value1 = "japanese"; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1.c_str(); string name2 = "fruit"; string value2 = "apple"; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2.c_str(); string name3 = "drink"; string value3 = "coffee, coke"; nvlist[2].name = name3.c_str(); nvlist[2].value <<= value3.c_str(); // (2) 作成したNVListに、名称"os", 値"unix"のNameValueを正しく追加できるか? string name4 = "os"; string value4 = "unix"; CPPUNIT_ASSERT(appendStringValue(nvlist, name4.c_str(), value4.c_str())); CPPUNIT_ASSERT_EQUAL(value4, toString(nvlist, name4.c_str())); // (3) 既存の名称である"language"に、値"english"を正しく追加できるか? string name5 = name1; string value5 = "english"; CPPUNIT_ASSERT(appendStringValue(nvlist, name5.c_str(), value5.c_str())); string expectedValueLanguage = "japanese,english"; CPPUNIT_ASSERT_EQUAL(expectedValueLanguage, toString(nvlist, name5.c_str())); // (4) 既存の名称・値と全く同一のNameValueを追加しようとしたときに、意図どおり何も追加せずに終了するか? string name6 = name2; string value6 = value2; CPPUNIT_ASSERT(appendStringValue(nvlist, name6.c_str(), value6.c_str())); CPPUNIT_ASSERT_EQUAL(value2, toString(nvlist, name6.c_str())); // (5) 一部の値が、既存の値と重複するNameValueを追加しようとした時に、意図どおりにマージされるか? string name7 = name3; string value7 = "coke, beer"; CPPUNIT_ASSERT(appendStringValue(nvlist, name7.c_str(), value7.c_str())); string expectedValueDrink = "coffee, coke,coke, beer"; CPPUNIT_ASSERT_EQUAL(expectedValueDrink, toString(nvlist, name7.c_str())); } /*! * @brief append()のテスト * * - NVListの内容を、他のNVListに正しく追加できるか? */ void test_append() { // (1) 1つ目のNVListを作成する SDOPackage::NVList nvlistA; nvlistA.length(2); string nameA1 = "nameA1"; string valueA1 = "valueA1"; nvlistA[0].name = nameA1.c_str(); nvlistA[0].value <<= valueA1.c_str(); string nameA2 = "nameA2"; string valueA2 = "valueA2"; nvlistA[1].name = nameA2.c_str(); nvlistA[1].value <<= valueA2.c_str(); // (2) 2つ目のNVListを作成する SDOPackage::NVList nvlistB; nvlistB.length(2); string nameB1 = "nameB1"; string valueB1 = "valueB1"; nvlistB[0].name = nameB1.c_str(); nvlistB[0].value <<= valueB1.c_str(); string nameB2 = "nameB2"; string valueB2 = "valueB2"; nvlistB[1].name = nameB2.c_str(); nvlistB[1].value <<= valueB2.c_str(); // (3) 1つ目のNVListに、2つ目のNVListを追加する append(nvlistA, nvlistB); // (4) 正しく追加されたことを確認する CPPUNIT_ASSERT_EQUAL(valueA1, toString(nvlistA, nameA1.c_str())); CPPUNIT_ASSERT_EQUAL(valueA2, toString(nvlistA, nameA2.c_str())); CPPUNIT_ASSERT_EQUAL(valueB1, toString(nvlistA, nameB1.c_str())); CPPUNIT_ASSERT_EQUAL(valueB2, toString(nvlistA, nameB2.c_str())); } void test_dump() { SDOPackage::NVList nvlistC; nvlistC.length(3); string nameC1 = "nameC1"; string valueC1 = "valueC1"; nvlistC[0].name = nameC1.c_str(); nvlistC[0].value <<= valueC1.c_str(); string nameC2 = "nameC2"; string valueC2 = "valueC2"; nvlistC[1].name = nameC2.c_str(); nvlistC[1].value <<= valueC2.c_str(); string nameC3 = "name_hoge"; string valueC3 = "value_hoge"; nvlistC[2].name = nameC3.c_str(); nvlistC[2].value <<= valueC3.c_str(); dump(nvlistC); } // std::string toString(const SDOPackage::NVList& nv);のテストです。 void test_toStringNV() { SDOPackage::NVList nvlistD; nvlistD.length(2); string nameD1 = "nameD1"; string valueD1 = "valueD1"; nvlistD[0].name = nameD1.c_str(); nvlistD[0].value <<= valueD1.c_str(); string nameD2 = "nameD2"; string valueD2 = "valueD2"; nvlistD[1].name = nameD2.c_str(); nvlistD[1].value <<= valueD2.c_str(); string strD ="\n\nnameD1: valueD1\nnameD2: valueD2"; // std::cout << strD << std::endl; SDOPackage::NVList nvlistE; nvlistE.length(2); // (1) NVList要素のnameに"short",valueにshort型のデータをセット。 string nameE1 = "short"; CORBA::Short valueE1 = 1; nvlistE[0].name = nameE1.c_str(); nvlistE[0].value <<= valueE1; // (2) NVList要素のnameに"string",valueにstring型のデータをセット。 string nameE2 = "string"; string valueE2 = "test"; nvlistE[1].name = nameE2.c_str(); nvlistE[1].value <<= valueE2.c_str(); // (3) ストリング以外のデータがセットされたときのメッセージを確認。 std::string empty = "short: not a string value\nstring: test\n"; std::string str_nvlistE = toString(nvlistE); /* if (empty == str_nvlistE) { std::cout << "OKK"; } else { std::cout << "not match !!" << std::endl; } */ CPPUNIT_ASSERT(toString(nvlistE) == empty); } }; }; // namespace NVUtil /* * Register test suite */ CPPUNIT_TEST_SUITE_REGISTRATION(NVUtil::NVUtilTests); #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 // NVUtil_cpp
374  string propValue1 = prop.getProperty(name1);
375  CPPUNIT_ASSERT_EQUAL(value1, propValue1);
376  string propValue2 = prop.getProperty(name2);
377  CPPUNIT_ASSERT_EQUAL(value2, propValue2);
378  }
379 
385  void test_find()
386  {
387  SDOPackage::NVList nvlist;
388  nvlist.length(2);
389 
390  // (1) NVList要素のnameに"short",valueにshort型のデータをセット。
391  string name1 = "short";
392  CORBA::Short value1 = 1;
393  nvlist[0].name = name1.c_str();
394  nvlist[0].value <<= value1;
395 
396  // (2) NVList要素のnameに"long",valueにlong型のデータをセット。
397  string name2 = "long";
398  CORBA::Long value2 = 111;
399  nvlist[1].name = name2.c_str();
400  nvlist[1].value <<= value2;
401 
402  // (3) nvlistの中からNameValue.nameが"long"のNameValue.valueを検索して、正しい値を取得できることを確認する。
403  CORBA::Short foundValue1;
404  (find(nvlist, name1.c_str())) >>= foundValue1;
405  CPPUNIT_ASSERT_EQUAL(value1, foundValue1);
406 
407  // (4) nvlistの中からNameValue.nameが"short"のNameValue.valueを検索して、正しい値を取得できることを確認する。
408  CORBA::Long foundValue2;
409  (find(nvlist, name2.c_str())) >>= foundValue2;
410  CPPUNIT_ASSERT_EQUAL(value2, foundValue2);
411  }
412 
419  {
420  SDOPackage::NVList nvlist;
421  nvlist.length(2);
422 
423  // (1) NVList要素のnameに"short",valueにshort型のデータをセット。
424  string name1 = "short";
425  CORBA::Short value1 = 1;
426  nvlist[0].name = name1.c_str();
427  nvlist[0].value <<= value1;
428 
429  // (2) NVList要素のnameに"long",valueにlong型のデータをセット。
430  string name2 = "long";
431  CORBA::Long value2 = 111;
432  nvlist[1].name = name2.c_str();
433  nvlist[1].value <<= value2;
434 
435  // (3) nvlistの中からNameValue.nameが"long"のNameValue.valueを検索して、要素番号を取得できることを確認する。
436  CORBA::Long ret;
437  ret = find_index(nvlist, name1.c_str());
438  CPPUNIT_ASSERT_EQUAL((CORBA::Long)0, ret);
439 
440  // (4) nvlistの中からNameValue.nameが"short"のNameValue.valueを検索して、要素番号を取得できることを確認する。
441  ret = find_index(nvlist, name2.c_str());
442  CPPUNIT_ASSERT_EQUAL((CORBA::Long)1, ret);
443  }
444 
451  {
452  SDOPackage::NVList nvlist;
453  nvlist.length(2);
454 
455  // (1) NVList要素のnameに"short",valueにshort型のデータをセット。
456  string name1 = "short";
457  CORBA::Short value1 = 1;
458  nvlist[0].name = name1.c_str();
459  nvlist[0].value <<= value1;
460 
461  // (2) NVList要素のnameに"string",valueにstring型のデータをセット。
462  string name2 = "string";
463  string value2 = "test";
464  nvlist[1].name = name2.c_str();
465  nvlist[1].value <<= value2.c_str();
466 
467  // (3) isString(nvlist,name)にて,指定されたnameのvalueの型がstringかどうかを判定。
468  CPPUNIT_ASSERT(!isString(nvlist, name1.c_str()));
469  CPPUNIT_ASSERT(isString(nvlist, name2.c_str()));
470  }
471 
478  {
479  SDOPackage::NVList nvlist;
480  nvlist.length(2);
481 
482  // (1) NVList要素のnameに"short",valueにshort型のデータをセット。
483  string name1 = "short";
484  CORBA::Short value1 = 1;
485  nvlist[0].name = name1.c_str();
486  nvlist[0].value <<= value1;
487 
488  // (2) NVList要素のnameに"string",valueにstring型のデータをセット。
489  string name2 = "string";
490  string value2 = "test";
491  nvlist[1].name = name2.c_str();
492  nvlist[1].value <<= value2.c_str();
493 
494  // (3) isString(nvlist,name)にて,指定されたnameのvalueの型がstringかどうかを判定。
495  CPPUNIT_ASSERT(!isStringValue(nvlist, name1.c_str(), "1"));
496  CPPUNIT_ASSERT(isStringValue(nvlist, name2.c_str(), "test"));
497  }
498 
504  void test_toString() {
505 
506 
507  SDOPackage::NVList nvlist;
508  nvlist.length(2);
509 
510  // (1) NVList要素のnameに"short",valueにshort型のデータをセット。
511  string name1 = "short";
512  CORBA::Short value1 = 1;
513  nvlist[0].name = name1.c_str();
514  nvlist[0].value <<= value1;
515 
516  // (2) NVList要素のnameに"string",valueにstring型のデータをセット。
517  string name2 = "string";
518  string value2 = "test";
519  nvlist[1].name = name2.c_str();
520  nvlist[1].value <<= value2.c_str();
521 
522  // (3) toString(nvlist,name)にて,指定されたnameのvalueをstring型で意図とおりに取得できるか?
523  string empty("");
524  CPPUNIT_ASSERT_EQUAL(empty, toString(nvlist, name1.c_str()));
525  CPPUNIT_ASSERT_EQUAL(value2, toString(nvlist, name2.c_str()));
526  }
527 
534  {
535 
536  SDOPackage::NVList nvlist;
537  nvlist.length(3);
538 
539  // (1) 追加対象となるNVListを作成する string name1 = "language"; string value1 = "japanese"; nvlist[0].name = name1.c_str(); nvlist[0].value <<= value1.c_str(); string name2 = "fruit"; string value2 = "apple"; nvlist[1].name = name2.c_str(); nvlist[1].value <<= value2.c_str(); string name3 = "drink"; string value3 = "coffee, coke"; nvlist[2].name = name3.c_str(); nvlist[2].value <<= value3.c_str(); // (2) 作成したNVListに、名称"os", 値"unix"のNameValueを正しく追加できるか? string name4 = "os"; string value4 = "unix"; CPPUNIT_ASSERT(appendStringValue(nvlist, name4.c_str(), value4.c_str())); CPPUNIT_ASSERT_EQUAL(value4, toString(nvlist, name4.c_str())); // (3) 既存の名称である"language"に、値"english"を正しく追加できるか? string name5 = name1; string value5 = "english"; CPPUNIT_ASSERT(appendStringValue(nvlist, name5.c_str(), value5.c_str())); string expectedValueLanguage = "japanese,english"; CPPUNIT_ASSERT_EQUAL(expectedValueLanguage, toString(nvlist, name5.c_str())); // (4) 既存の名称・値と全く同一のNameValueを追加しようとしたときに、意図どおり何も追加せずに終了するか? string name6 = name2; string value6 = value2; CPPUNIT_ASSERT(appendStringValue(nvlist, name6.c_str(), value6.c_str())); CPPUNIT_ASSERT_EQUAL(value2, toString(nvlist, name6.c_str())); // (5) 一部の値が、既存の値と重複するNameValueを追加しようとした時に、意図どおりにマージされるか? string name7 = name3; string value7 = "coke, beer"; CPPUNIT_ASSERT(appendStringValue(nvlist, name7.c_str(), value7.c_str())); string expectedValueDrink = "coffee, coke,coke, beer"; CPPUNIT_ASSERT_EQUAL(expectedValueDrink, toString(nvlist, name7.c_str())); } /*! * @brief append()のテスト * * - NVListの内容を、他のNVListに正しく追加できるか? */ void test_append() { // (1) 1つ目のNVListを作成する SDOPackage::NVList nvlistA; nvlistA.length(2); string nameA1 = "nameA1"; string valueA1 = "valueA1"; nvlistA[0].name = nameA1.c_str(); nvlistA[0].value <<= valueA1.c_str(); string nameA2 = "nameA2"; string valueA2 = "valueA2"; nvlistA[1].name = nameA2.c_str(); nvlistA[1].value <<= valueA2.c_str(); // (2) 2つ目のNVListを作成する SDOPackage::NVList nvlistB; nvlistB.length(2); string nameB1 = "nameB1"; string valueB1 = "valueB1"; nvlistB[0].name = nameB1.c_str(); nvlistB[0].value <<= valueB1.c_str(); string nameB2 = "nameB2"; string valueB2 = "valueB2"; nvlistB[1].name = nameB2.c_str(); nvlistB[1].value <<= valueB2.c_str(); // (3) 1つ目のNVListに、2つ目のNVListを追加する append(nvlistA, nvlistB); // (4) 正しく追加されたことを確認する CPPUNIT_ASSERT_EQUAL(valueA1, toString(nvlistA, nameA1.c_str())); CPPUNIT_ASSERT_EQUAL(valueA2, toString(nvlistA, nameA2.c_str())); CPPUNIT_ASSERT_EQUAL(valueB1, toString(nvlistA, nameB1.c_str())); CPPUNIT_ASSERT_EQUAL(valueB2, toString(nvlistA, nameB2.c_str())); } void test_dump() { SDOPackage::NVList nvlistC; nvlistC.length(3); string nameC1 = "nameC1"; string valueC1 = "valueC1"; nvlistC[0].name = nameC1.c_str(); nvlistC[0].value <<= valueC1.c_str(); string nameC2 = "nameC2"; string valueC2 = "valueC2"; nvlistC[1].name = nameC2.c_str(); nvlistC[1].value <<= valueC2.c_str(); string nameC3 = "name_hoge"; string valueC3 = "value_hoge"; nvlistC[2].name = nameC3.c_str(); nvlistC[2].value <<= valueC3.c_str(); dump(nvlistC); } // std::string toString(const SDOPackage::NVList& nv);のテストです。 void test_toStringNV() { SDOPackage::NVList nvlistD; nvlistD.length(2); string nameD1 = "nameD1"; string valueD1 = "valueD1"; nvlistD[0].name = nameD1.c_str(); nvlistD[0].value <<= valueD1.c_str(); string nameD2 = "nameD2"; string valueD2 = "valueD2"; nvlistD[1].name = nameD2.c_str(); nvlistD[1].value <<= valueD2.c_str(); string strD ="\n\nnameD1: valueD1\nnameD2: valueD2"; // std::cout << strD << std::endl; SDOPackage::NVList nvlistE; nvlistE.length(2); // (1) NVList要素のnameに"short",valueにshort型のデータをセット。 string nameE1 = "short"; CORBA::Short valueE1 = 1; nvlistE[0].name = nameE1.c_str(); nvlistE[0].value <<= valueE1; // (2) NVList要素のnameに"string",valueにstring型のデータをセット。 string nameE2 = "string"; string valueE2 = "test"; nvlistE[1].name = nameE2.c_str(); nvlistE[1].value <<= valueE2.c_str(); // (3) ストリング以外のデータがセットされたときのメッセージを確認。 std::string empty = "short: not a string value\nstring: test\n"; std::string str_nvlistE = toString(nvlistE); /* if (empty == str_nvlistE) { std::cout << "OKK"; } else { std::cout << "not match !!" << std::endl; } */ CPPUNIT_ASSERT(toString(nvlistE) == empty); } }; }; // namespace NVUtil /* * Register test suite */ CPPUNIT_TEST_SUITE_REGISTRATION(NVUtil::NVUtilTests); #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 // NVUtil_cpp
540  string name1 = "language";
541  string value1 = "japanese";
542  nvlist[0].name = name1.c_str();
543  nvlist[0].value <<= value1.c_str();
544 
545  string name2 = "fruit";
546  string value2 = "apple";
547  nvlist[1].name = name2.c_str();
548  nvlist[1].value <<= value2.c_str();
549 
550  string name3 = "drink";
551  string value3 = "coffee, coke";
552  nvlist[2].name = name3.c_str();
553  nvlist[2].value <<= value3.c_str();
554 
555  // (2) 作成したNVListに、名称"os", 値"unix"のNameValueを正しく追加できるか?
556  string name4 = "os";
557  string value4 = "unix";
558  CPPUNIT_ASSERT(appendStringValue(nvlist, name4.c_str(), value4.c_str()));
559  CPPUNIT_ASSERT_EQUAL(value4, toString(nvlist, name4.c_str()));
560 
561  // (3) 既存の名称である"language"に、値"english"を正しく追加できるか?
562  string name5 = name1;
563  string value5 = "english";
564  CPPUNIT_ASSERT(appendStringValue(nvlist, name5.c_str(), value5.c_str()));
565  string expectedValueLanguage = "japanese,english";
566  CPPUNIT_ASSERT_EQUAL(expectedValueLanguage, toString(nvlist, name5.c_str()));
567 
568  // (4) 既存の名称・値と全く同一のNameValueを追加しようとしたときに、意図どおり何も追加せずに終了するか?
569  string name6 = name2;
570  string value6 = value2;
571  CPPUNIT_ASSERT(appendStringValue(nvlist, name6.c_str(), value6.c_str()));
572  CPPUNIT_ASSERT_EQUAL(value2, toString(nvlist, name6.c_str()));
573 
574  // (5) 一部の値が、既存の値と重複するNameValueを追加しようとした時に、意図どおりにマージされるか?
575  string name7 = name3;
576  string value7 = "coke, beer";
577  CPPUNIT_ASSERT(appendStringValue(nvlist, name7.c_str(), value7.c_str()));
578  string expectedValueDrink = "coffee, coke,coke, beer";
579  CPPUNIT_ASSERT_EQUAL(expectedValueDrink, toString(nvlist, name7.c_str()));
580  }
581 
587  void test_append()
588  {
589  // (1) 1つ目のNVListを作成する SDOPackage::NVList nvlistA; nvlistA.length(2); string nameA1 = "nameA1"; string valueA1 = "valueA1"; nvlistA[0].name = nameA1.c_str(); nvlistA[0].value <<= valueA1.c_str(); string nameA2 = "nameA2"; string valueA2 = "valueA2"; nvlistA[1].name = nameA2.c_str(); nvlistA[1].value <<= valueA2.c_str(); // (2) 2つ目のNVListを作成する SDOPackage::NVList nvlistB; nvlistB.length(2); string nameB1 = "nameB1"; string valueB1 = "valueB1"; nvlistB[0].name = nameB1.c_str(); nvlistB[0].value <<= valueB1.c_str(); string nameB2 = "nameB2"; string valueB2 = "valueB2"; nvlistB[1].name = nameB2.c_str(); nvlistB[1].value <<= valueB2.c_str(); // (3) 1つ目のNVListに、2つ目のNVListを追加する append(nvlistA, nvlistB); // (4) 正しく追加されたことを確認する CPPUNIT_ASSERT_EQUAL(valueA1, toString(nvlistA, nameA1.c_str())); CPPUNIT_ASSERT_EQUAL(valueA2, toString(nvlistA, nameA2.c_str())); CPPUNIT_ASSERT_EQUAL(valueB1, toString(nvlistA, nameB1.c_str())); CPPUNIT_ASSERT_EQUAL(valueB2, toString(nvlistA, nameB2.c_str())); } void test_dump() { SDOPackage::NVList nvlistC; nvlistC.length(3); string nameC1 = "nameC1"; string valueC1 = "valueC1"; nvlistC[0].name = nameC1.c_str(); nvlistC[0].value <<= valueC1.c_str(); string nameC2 = "nameC2"; string valueC2 = "valueC2"; nvlistC[1].name = nameC2.c_str(); nvlistC[1].value <<= valueC2.c_str(); string nameC3 = "name_hoge"; string valueC3 = "value_hoge"; nvlistC[2].name = nameC3.c_str(); nvlistC[2].value <<= valueC3.c_str(); dump(nvlistC); } // std::string toString(const SDOPackage::NVList& nv);のテストです。 void test_toStringNV() { SDOPackage::NVList nvlistD; nvlistD.length(2); string nameD1 = "nameD1"; string valueD1 = "valueD1"; nvlistD[0].name = nameD1.c_str(); nvlistD[0].value <<= valueD1.c_str(); string nameD2 = "nameD2"; string valueD2 = "valueD2"; nvlistD[1].name = nameD2.c_str(); nvlistD[1].value <<= valueD2.c_str(); string strD ="\n\nnameD1: valueD1\nnameD2: valueD2"; // std::cout << strD << std::endl; SDOPackage::NVList nvlistE; nvlistE.length(2); // (1) NVList要素のnameに"short",valueにshort型のデータをセット。 string nameE1 = "short"; CORBA::Short valueE1 = 1; nvlistE[0].name = nameE1.c_str(); nvlistE[0].value <<= valueE1; // (2) NVList要素のnameに"string",valueにstring型のデータをセット。 string nameE2 = "string"; string valueE2 = "test"; nvlistE[1].name = nameE2.c_str(); nvlistE[1].value <<= valueE2.c_str(); // (3) ストリング以外のデータがセットされたときのメッセージを確認。 std::string empty = "short: not a string value\nstring: test\n"; std::string str_nvlistE = toString(nvlistE); /* if (empty == str_nvlistE) { std::cout << "OKK"; } else { std::cout << "not match !!" << std::endl; } */ CPPUNIT_ASSERT(toString(nvlistE) == empty); } }; }; // namespace NVUtil /* * Register test suite */ CPPUNIT_TEST_SUITE_REGISTRATION(NVUtil::NVUtilTests); #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 // NVUtil_cpp
590  SDOPackage::NVList nvlistA;
591  nvlistA.length(2);
592 
593  string nameA1 = "nameA1";
594  string valueA1 = "valueA1";
595  nvlistA[0].name = nameA1.c_str();
596  nvlistA[0].value <<= valueA1.c_str();
597 
598  string nameA2 = "nameA2";
599  string valueA2 = "valueA2";
600  nvlistA[1].name = nameA2.c_str();
601  nvlistA[1].value <<= valueA2.c_str();
602 
603  // (2) 2つ目のNVListを作成する SDOPackage::NVList nvlistB; nvlistB.length(2); string nameB1 = "nameB1"; string valueB1 = "valueB1"; nvlistB[0].name = nameB1.c_str(); nvlistB[0].value <<= valueB1.c_str(); string nameB2 = "nameB2"; string valueB2 = "valueB2"; nvlistB[1].name = nameB2.c_str(); nvlistB[1].value <<= valueB2.c_str(); // (3) 1つ目のNVListに、2つ目のNVListを追加する append(nvlistA, nvlistB); // (4) 正しく追加されたことを確認する CPPUNIT_ASSERT_EQUAL(valueA1, toString(nvlistA, nameA1.c_str())); CPPUNIT_ASSERT_EQUAL(valueA2, toString(nvlistA, nameA2.c_str())); CPPUNIT_ASSERT_EQUAL(valueB1, toString(nvlistA, nameB1.c_str())); CPPUNIT_ASSERT_EQUAL(valueB2, toString(nvlistA, nameB2.c_str())); } void test_dump() { SDOPackage::NVList nvlistC; nvlistC.length(3); string nameC1 = "nameC1"; string valueC1 = "valueC1"; nvlistC[0].name = nameC1.c_str(); nvlistC[0].value <<= valueC1.c_str(); string nameC2 = "nameC2"; string valueC2 = "valueC2"; nvlistC[1].name = nameC2.c_str(); nvlistC[1].value <<= valueC2.c_str(); string nameC3 = "name_hoge"; string valueC3 = "value_hoge"; nvlistC[2].name = nameC3.c_str(); nvlistC[2].value <<= valueC3.c_str(); dump(nvlistC); } // std::string toString(const SDOPackage::NVList& nv);のテストです。 void test_toStringNV() { SDOPackage::NVList nvlistD; nvlistD.length(2); string nameD1 = "nameD1"; string valueD1 = "valueD1"; nvlistD[0].name = nameD1.c_str(); nvlistD[0].value <<= valueD1.c_str(); string nameD2 = "nameD2"; string valueD2 = "valueD2"; nvlistD[1].name = nameD2.c_str(); nvlistD[1].value <<= valueD2.c_str(); string strD ="\n\nnameD1: valueD1\nnameD2: valueD2"; // std::cout << strD << std::endl; SDOPackage::NVList nvlistE; nvlistE.length(2); // (1) NVList要素のnameに"short",valueにshort型のデータをセット。 string nameE1 = "short"; CORBA::Short valueE1 = 1; nvlistE[0].name = nameE1.c_str(); nvlistE[0].value <<= valueE1; // (2) NVList要素のnameに"string",valueにstring型のデータをセット。 string nameE2 = "string"; string valueE2 = "test"; nvlistE[1].name = nameE2.c_str(); nvlistE[1].value <<= valueE2.c_str(); // (3) ストリング以外のデータがセットされたときのメッセージを確認。 std::string empty = "short: not a string value\nstring: test\n"; std::string str_nvlistE = toString(nvlistE); /* if (empty == str_nvlistE) { std::cout << "OKK"; } else { std::cout << "not match !!" << std::endl; } */ CPPUNIT_ASSERT(toString(nvlistE) == empty); } }; }; // namespace NVUtil /* * Register test suite */ CPPUNIT_TEST_SUITE_REGISTRATION(NVUtil::NVUtilTests); #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 // NVUtil_cpp
604  SDOPackage::NVList nvlistB;
605  nvlistB.length(2);
606 
607  string nameB1 = "nameB1";
608  string valueB1 = "valueB1";
609  nvlistB[0].name = nameB1.c_str();
610  nvlistB[0].value <<= valueB1.c_str();
611 
612  string nameB2 = "nameB2";
613  string valueB2 = "valueB2";
614  nvlistB[1].name = nameB2.c_str();
615  nvlistB[1].value <<= valueB2.c_str();
616 
617  // (3) 1つ目のNVListに、2つ目のNVListを追加する append(nvlistA, nvlistB); // (4) 正しく追加されたことを確認する CPPUNIT_ASSERT_EQUAL(valueA1, toString(nvlistA, nameA1.c_str())); CPPUNIT_ASSERT_EQUAL(valueA2, toString(nvlistA, nameA2.c_str())); CPPUNIT_ASSERT_EQUAL(valueB1, toString(nvlistA, nameB1.c_str())); CPPUNIT_ASSERT_EQUAL(valueB2, toString(nvlistA, nameB2.c_str())); } void test_dump() { SDOPackage::NVList nvlistC; nvlistC.length(3); string nameC1 = "nameC1"; string valueC1 = "valueC1"; nvlistC[0].name = nameC1.c_str(); nvlistC[0].value <<= valueC1.c_str(); string nameC2 = "nameC2"; string valueC2 = "valueC2"; nvlistC[1].name = nameC2.c_str(); nvlistC[1].value <<= valueC2.c_str(); string nameC3 = "name_hoge"; string valueC3 = "value_hoge"; nvlistC[2].name = nameC3.c_str(); nvlistC[2].value <<= valueC3.c_str(); dump(nvlistC); } // std::string toString(const SDOPackage::NVList& nv);のテストです。 void test_toStringNV() { SDOPackage::NVList nvlistD; nvlistD.length(2); string nameD1 = "nameD1"; string valueD1 = "valueD1"; nvlistD[0].name = nameD1.c_str(); nvlistD[0].value <<= valueD1.c_str(); string nameD2 = "nameD2"; string valueD2 = "valueD2"; nvlistD[1].name = nameD2.c_str(); nvlistD[1].value <<= valueD2.c_str(); string strD ="\n\nnameD1: valueD1\nnameD2: valueD2"; // std::cout << strD << std::endl; SDOPackage::NVList nvlistE; nvlistE.length(2); // (1) NVList要素のnameに"short",valueにshort型のデータをセット。 string nameE1 = "short"; CORBA::Short valueE1 = 1; nvlistE[0].name = nameE1.c_str(); nvlistE[0].value <<= valueE1; // (2) NVList要素のnameに"string",valueにstring型のデータをセット。 string nameE2 = "string"; string valueE2 = "test"; nvlistE[1].name = nameE2.c_str(); nvlistE[1].value <<= valueE2.c_str(); // (3) ストリング以外のデータがセットされたときのメッセージを確認。 std::string empty = "short: not a string value\nstring: test\n"; std::string str_nvlistE = toString(nvlistE); /* if (empty == str_nvlistE) { std::cout << "OKK"; } else { std::cout << "not match !!" << std::endl; } */ CPPUNIT_ASSERT(toString(nvlistE) == empty); } }; }; // namespace NVUtil /* * Register test suite */ CPPUNIT_TEST_SUITE_REGISTRATION(NVUtil::NVUtilTests); #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 // NVUtil_cpp
618  append(nvlistA, nvlistB);
619 
620  // (4) 正しく追加されたことを確認する CPPUNIT_ASSERT_EQUAL(valueA1, toString(nvlistA, nameA1.c_str())); CPPUNIT_ASSERT_EQUAL(valueA2, toString(nvlistA, nameA2.c_str())); CPPUNIT_ASSERT_EQUAL(valueB1, toString(nvlistA, nameB1.c_str())); CPPUNIT_ASSERT_EQUAL(valueB2, toString(nvlistA, nameB2.c_str())); } void test_dump() { SDOPackage::NVList nvlistC; nvlistC.length(3); string nameC1 = "nameC1"; string valueC1 = "valueC1"; nvlistC[0].name = nameC1.c_str(); nvlistC[0].value <<= valueC1.c_str(); string nameC2 = "nameC2"; string valueC2 = "valueC2"; nvlistC[1].name = nameC2.c_str(); nvlistC[1].value <<= valueC2.c_str(); string nameC3 = "name_hoge"; string valueC3 = "value_hoge"; nvlistC[2].name = nameC3.c_str(); nvlistC[2].value <<= valueC3.c_str(); dump(nvlistC); } // std::string toString(const SDOPackage::NVList& nv);のテストです。 void test_toStringNV() { SDOPackage::NVList nvlistD; nvlistD.length(2); string nameD1 = "nameD1"; string valueD1 = "valueD1"; nvlistD[0].name = nameD1.c_str(); nvlistD[0].value <<= valueD1.c_str(); string nameD2 = "nameD2"; string valueD2 = "valueD2"; nvlistD[1].name = nameD2.c_str(); nvlistD[1].value <<= valueD2.c_str(); string strD ="\n\nnameD1: valueD1\nnameD2: valueD2"; // std::cout << strD << std::endl; SDOPackage::NVList nvlistE; nvlistE.length(2); // (1) NVList要素のnameに"short",valueにshort型のデータをセット。 string nameE1 = "short"; CORBA::Short valueE1 = 1; nvlistE[0].name = nameE1.c_str(); nvlistE[0].value <<= valueE1; // (2) NVList要素のnameに"string",valueにstring型のデータをセット。 string nameE2 = "string"; string valueE2 = "test"; nvlistE[1].name = nameE2.c_str(); nvlistE[1].value <<= valueE2.c_str(); // (3) ストリング以外のデータがセットされたときのメッセージを確認。 std::string empty = "short: not a string value\nstring: test\n"; std::string str_nvlistE = toString(nvlistE); /* if (empty == str_nvlistE) { std::cout << "OKK"; } else { std::cout << "not match !!" << std::endl; } */ CPPUNIT_ASSERT(toString(nvlistE) == empty); } }; }; // namespace NVUtil /* * Register test suite */ CPPUNIT_TEST_SUITE_REGISTRATION(NVUtil::NVUtilTests); #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 // NVUtil_cpp
621  CPPUNIT_ASSERT_EQUAL(valueA1, toString(nvlistA, nameA1.c_str()));
622  CPPUNIT_ASSERT_EQUAL(valueA2, toString(nvlistA, nameA2.c_str()));
623  CPPUNIT_ASSERT_EQUAL(valueB1, toString(nvlistA, nameB1.c_str()));
624  CPPUNIT_ASSERT_EQUAL(valueB2, toString(nvlistA, nameB2.c_str()));
625  }
626  void test_dump()
627  {
628  SDOPackage::NVList nvlistC;
629  nvlistC.length(3);
630 
631  string nameC1 = "nameC1";
632  string valueC1 = "valueC1";
633  nvlistC[0].name = nameC1.c_str();
634  nvlistC[0].value <<= valueC1.c_str();
635 
636  string nameC2 = "nameC2";
637  string valueC2 = "valueC2";
638  nvlistC[1].name = nameC2.c_str();
639  nvlistC[1].value <<= valueC2.c_str();
640 
641  string nameC3 = "name_hoge";
642  string valueC3 = "value_hoge";
643  nvlistC[2].name = nameC3.c_str();
644  nvlistC[2].value <<= valueC3.c_str();
645 
646 
647  dump(nvlistC);
648  }
649 
650  // std::string toString(const SDOPackage::NVList& nv);のテストです。
652  {
653  SDOPackage::NVList nvlistD;
654  nvlistD.length(2);
655 
656  string nameD1 = "nameD1";
657  string valueD1 = "valueD1";
658  nvlistD[0].name = nameD1.c_str();
659  nvlistD[0].value <<= valueD1.c_str();
660 
661  string nameD2 = "nameD2";
662  string valueD2 = "valueD2";
663  nvlistD[1].name = nameD2.c_str();
664  nvlistD[1].value <<= valueD2.c_str();
665 
666  string strD ="\n\nnameD1: valueD1\nnameD2: valueD2";
667 // std::cout << strD << std::endl;
668 
669  SDOPackage::NVList nvlistE;
670  nvlistE.length(2);
671 
672  // (1) NVList要素のnameに"short",valueにshort型のデータをセット。
673  string nameE1 = "short";
674  CORBA::Short valueE1 = 1;
675  nvlistE[0].name = nameE1.c_str();
676  nvlistE[0].value <<= valueE1;
677 
678  // (2) NVList要素のnameに"string",valueにstring型のデータをセット。
679  string nameE2 = "string";
680  string valueE2 = "test";
681  nvlistE[1].name = nameE2.c_str();
682  nvlistE[1].value <<= valueE2.c_str();
683 
684  // (3) ストリング以外のデータがセットされたときのメッセージを確認。
685 
686  std::string empty = "short: not a string value\nstring: test\n";
687  std::string str_nvlistE = toString(nvlistE);
688  /*
689  if (empty == str_nvlistE)
690  {
691  std::cout << "OKK";
692  }
693  else
694  {
695  std::cout << "not match !!" << std::endl;
696  }
697  */
698  CPPUNIT_ASSERT(toString(nvlistE) == empty);
699 
700 
701  }
702  };
703 }; // namespace NVUtil
704 
705 /*
706  * Register test suite
707  */
709 
710 #ifdef LOCAL_MAIN
711 int main(int argc, char* argv[])
712 {
713 
714  FORMAT format = TEXT_OUT;
715  int target = 0;
716  std::string xsl;
717  std::string ns;
718  std::string fname;
719  std::ofstream ofs;
720 
721  int i(1);
722  while (i < argc)
723  {
724  std::string arg(argv[i]);
725  std::string next_arg;
726  if (i + 1 < argc) next_arg = argv[i + 1];
727  else next_arg = "";
728 
729  if (arg == "--text") { format = TEXT_OUT; break; }
730  if (arg == "--xml")
731  {
732  if (next_arg == "")
733  {
734  fname = argv[0];
735  fname += ".xml";
736  }
737  else
738  {
739  fname = next_arg;
740  }
741  format = XML_OUT;
742  ofs.open(fname.c_str());
743  }
744  if ( arg == "--compiler" ) { format = COMPILER_OUT; break; }
745  if ( arg == "--cerr" ) { target = 1; break; }
746  if ( arg == "--xsl" )
747  {
748  if (next_arg == "") xsl = "default.xsl";
749  else xsl = next_arg;
750  }
751  if ( arg == "--namespace" )
752  {
753  if (next_arg == "")
754  {
755  std::cerr << "no namespace specified" << std::endl;
756  exit(1);
757  }
758  else
759  {
760  xsl = next_arg;
761  }
762  }
763  ++i;
764  }
765  CppUnit::TextUi::TestRunner runner;
766  if ( ns.empty() )
767  runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest());
768  else
769  runner.addTest(CppUnit::TestFactoryRegistry::getRegistry(ns).makeTest());
770  CppUnit::Outputter* outputter = 0;
771  std::ostream* stream = target ? &std::cerr : &std::cout;
772  switch ( format )
773  {
774  case TEXT_OUT :
775  outputter = new CppUnit::TextOutputter(&runner.result(),*stream);
776  break;
777  case XML_OUT :
778  std::cout << "XML_OUT" << std::endl;
779  outputter = new CppUnit::XmlOutputter(&runner.result(),
780  ofs, "shift_jis");
781  static_cast<CppUnit::XmlOutputter*>(outputter)->setStyleSheet(xsl);
782  break;
783  case COMPILER_OUT :
784  outputter = new CppUnit::CompilerOutputter(&runner.result(),*stream);
785  break;
786  }
787  runner.setOutputter(outputter);
788  runner.run();
789  return 0; // runner.run() ? 0 : 1;
790 }
791 #endif // MAIN
792 #endif // NVUtil_cpp
SDOPackage::NameValue newNV(const char *name, Value value)
Create NameValue.
Definition: NVUtil.h:79
int main(int argc, char **argv)
void test_newNV_Float()
newNV(char*,Value)のテスト
void test_copyToProperties()
copyToProperties()のテスト
int g_argc
Definition: NVUtilTests.cpp:65
void test_newNVOctet()
newNVOctet()のテスト
void test_append()
append()のテスト
bool isString(const SDOPackage::NVList &nv, const char *name)
Validate whether value type specified by name is string type.
Definition: NVUtil.cpp:239
void test_newNV_Long()
newNV(char*,Value)のテスト
void test_newNVBool()
newNVBool()のテスト
SDOPackage::NameValue newNVOctet(const char *name, const CORBA::Octet value)
Create NameValue typed CORBA::Octet.
Definition: NVUtil.cpp:77
bool appendStringValue(SDOPackage::NVList &nv, const char *name, const char *value)
Append the specified string to element of NVList.
Definition: NVUtil.cpp:313
std::vector< std::pair< std::string, std::string > > NVList
Definition: IRTC.h:67
void test_appendStringValue()
appendStringValue()のテスト
RTC::ReturnCode_t ret(RTC::Local::ReturnCode_t r)
void test_find()
find()のテスト
SDOPackage::NameValue newNVBool(const char *name, const CORBA::Boolean value)
This operation creates NameValue typed CORBA::Boolean.
Definition: NVUtil.cpp:62
void test_find_index()
find_index()のテスト
void test_copy()
copy()のテスト
Utility for NameValue.
Definition: NVUtil.cpp:38
void test_newNV_Double()
newNV(char*,Value)のテスト
CPPUNIT_TEST_SUITE_REGISTRATION(NVUtil::NVUtilTests)
virtual void setUp()
void test_newNV_Short()
newNV(char*,Value)のテスト
virtual void tearDown()
const CORBA::Long find_index(const SDOPackage::NVList &nv, const char *name)
Return the index of element specified by name from NVList.
Definition: NVUtil.cpp:227
void test_toProperties()
toProperties()のテスト
void test_isString()
isString()のテスト
void copyToProperties(coil::Properties &prop, const SDOPackage::NVList &nv)
Copy NVList to the Proeprties.
Definition: NVUtil.cpp:137
std::string toString(const SDOPackage::NVList &nv, const char *name)
Get NVList of specifid name as string.
Definition: NVUtil.cpp:282
const CORBA::Any & find(const SDOPackage::NVList &nv, const char *name)
Return the value specified by name from NVList.
Definition: NVUtil.cpp:212
void test_newNVChar()
newNVChar()のテスト
NameValue and NVList utility functions.
void test_newNV_Str()
newNV(const char*, const char*)のテスト
void dump(const SDOPackage::NVList &nv)
Print information configured in NVList as a string type to Standard Outport.
Definition: NVUtil.cpp:394
void append(SDOPackage::NVList &dest, const SDOPackage::NVList &src)
Append an element to NVList.
Definition: NVUtil.cpp:354
prop
Organization::get_organization_property ();.
coil::Properties toProperties(const SDOPackage::NVList &nv)
Transform NVList to the properties.
Definition: NVUtil.cpp:180
Class represents a set of properties.
Definition: Properties.h:101
SDOPackage::NameValue newNVChar(const char *name, const CORBA::Char value)
Create NameValue typed CORBA::Char.
Definition: NVUtil.cpp:47
bool isStringValue(const SDOPackage::NVList &nv, const char *name, const char *value)
Check whether the value of specified name specified matches the specified string. ...
Definition: NVUtil.cpp:262
void copyFromProperties(SDOPackage::NVList &nv, const coil::Properties &prop)
Copy the properties to NVList.
Definition: NVUtil.cpp:108
void test_toString()
toString()のテスト
vector< string > g_argv
Definition: NVUtilTests.cpp:66
void test_isStringValue()
isStringValue()のテスト
NVUtil Test.
Definition: NVUtilTests.cpp:72
const std::string & getProperty(const std::string &key) const
Search for the property with the specified key in this property.
Definition: Properties.cpp:156


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