llnamevalue_test.cpp
上传用户:king477883
上传日期:2021-03-01
资源大小:9553k
文件大小:17k
源码类别:

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2.  * @file llnamevalue_test.cpp
  3.  * @author Adroit
  4.  * @date 2007-02
  5.  * @brief LLNameValue unit test
  6.  *
  7.  * $LicenseInfo:firstyear=2007&license=viewergpl$
  8.  * 
  9.  * Copyright (c) 2007-2010, Linden Research, Inc.
  10.  * 
  11.  * Second Life Viewer Source Code
  12.  * The source code in this file ("Source Code") is provided by Linden Lab
  13.  * to you under the terms of the GNU General Public License, version 2.0
  14.  * ("GPL"), unless you have obtained a separate licensing agreement
  15.  * ("Other License"), formally executed by you and Linden Lab.  Terms of
  16.  * the GPL can be found in doc/GPL-license.txt in this distribution, or
  17.  * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
  18.  * 
  19.  * There are special exceptions to the terms and conditions of the GPL as
  20.  * it is applied to this Source Code. View the full text of the exception
  21.  * in the file doc/FLOSS-exception.txt in this software distribution, or
  22.  * online at
  23.  * http://secondlifegrid.net/programs/open_source/licensing/flossexception
  24.  * 
  25.  * By copying, modifying or distributing this software, you acknowledge
  26.  * that you have read and understood your obligations described above,
  27.  * and agree to abide by those obligations.
  28.  * 
  29.  * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
  30.  * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
  31.  * COMPLETENESS OR PERFORMANCE.
  32.  * $/LicenseInfo$
  33.  */
  34. #include "linden_common.h"
  35. #include "llsdserialize.h"
  36. #include "../llnamevalue.h"
  37. #include "../test/lltut.h"
  38. #if LL_WINDOWS
  39. // disable unreachable code warnings
  40. #pragma warning(disable: 4702)
  41. #endif
  42. namespace tut
  43. {
  44. struct namevalue_test
  45. {
  46. namevalue_test() 
  47. {
  48. }
  49.   };
  50. typedef test_group<namevalue_test> namevalue_t;
  51. typedef namevalue_t::object namevalue_object_t;
  52. tut::namevalue_t tut_namevalue("namevalue_test");
  53. template<> template<>
  54. void namevalue_object_t::test<1>()
  55. {
  56. // LLNameValue()
  57. LLNameValue nValue;
  58. ensure("mName should have been NULL", nValue.mName == NULL);
  59. ensure("getTypeEnum failed",nValue.getTypeEnum() == NVT_NULL);
  60. ensure("getClassEnum failed",nValue.getClassEnum() == NVC_NULL);
  61. ensure("getSendtoEnum failed",nValue.getSendtoEnum() == NVS_NULL);
  62. LLNameValue nValue1(" SecondLife ASSET RW SIM 232324343");
  63. }
  64. // LLNameValue(const char* data);
  65. //  LLNameValue(const char* name, const char* data, const char* type, const char* nvclass, const char* nvsendto, 
  66. // TNameValueCallback nvcb = NULL, void** user_data = NULL);
  67. template<> template<>
  68. void namevalue_object_t::test<2>()
  69. {
  70. LLNameValue nValue(" SecondLife ASSET RW S 232324343");
  71. ensure("mName not set correctly", (0 == strcmp(nValue.mName,"SecondLife")));
  72. ensure("getTypeEnum failed", nValue.getTypeEnum() == NVT_ASSET);
  73. ensure("getClassEnum failed", nValue.getClassEnum() == NVC_READ_WRITE);
  74. ensure("getSendtoEnum failed", nValue.getSendtoEnum() == NVS_SIM);
  75. ensure("getString failed", (0==strcmp(nValue.getAsset(),"232324343")));
  76. ensure("sendToData or sendToViewer failed", !nValue.sendToData() && !nValue.sendToViewer());
  77. LLNameValue nValue1("nr SecondLife_1 STRING READ_WRITE SIM 232324343");
  78. ensure("1. mName not set correctly", (0 == strcmp(nValue1.mName,"SecondLife_1")));
  79. ensure("1. getTypeEnum failed", nValue1.getTypeEnum() == NVT_STRING);
  80. ensure("1. getClassEnum failed", nValue1.getClassEnum() == NVC_READ_WRITE);
  81. ensure("1. getSendtoEnum failed", nValue1.getSendtoEnum() == NVS_SIM);
  82. ensure("1. getString failed", (0==strcmp(nValue1.getString(),"232324343")));
  83. ensure("1. sendToData or sendToViewer failed", !nValue1.sendToData() && !nValue1.sendToViewer());
  84. LLNameValue nValue2("SecondLife", "23.5", "F32", "R", "DS");
  85. ensure("2. getTypeEnum failed", nValue2.getTypeEnum() == NVT_F32);
  86. ensure("2. getClassEnum failed", nValue2.getClassEnum() == NVC_READ_ONLY);
  87. ensure("2. getSendtoEnum failed", nValue2.getSendtoEnum() == NVS_DATA_SIM);
  88. ensure("2. getF32 failed", *nValue2.getF32() == 23.5f);
  89. ensure("2. sendToData or sendToViewer failed", nValue2.sendToData() && !nValue2.sendToViewer());
  90. LLNameValue nValue3("SecondLife", "-43456787", "S32", "READ_ONLY", "SIM_SPACE");
  91. ensure("3. getTypeEnum failed", nValue3.getTypeEnum() == NVT_S32);
  92. ensure("3. getClassEnum failed", nValue3.getClassEnum() == NVC_READ_ONLY);
  93. ensure("3. getSendtoEnum failed", nValue3.getSendtoEnum() == NVS_DATA_SIM);
  94. ensure("3. getS32 failed", *nValue3.getS32() == -43456787);
  95. ensure("sendToData or sendToViewer failed", nValue3.sendToData() && !nValue3.sendToViewer());
  96. LLNameValue nValue4("SecondLife", "<1.0, 2.0, 3.0>", "VEC3", "RW", "SV");
  97. LLVector3 llvec4(1.0, 2.0, 3.0);
  98. ensure("4. getTypeEnum failed", nValue4.getTypeEnum() == NVT_VEC3);
  99. ensure("4. getClassEnum failed", nValue4.getClassEnum() == NVC_READ_WRITE);
  100. ensure("4. getSendtoEnum failed", nValue4.getSendtoEnum() == NVS_SIM_VIEWER);
  101. ensure("4. getVec3 failed", *nValue4.getVec3() == llvec4);
  102. ensure("4. sendToData or sendToViewer failed", !nValue4.sendToData() && nValue4.sendToViewer());
  103. LLNameValue nValue5("SecondLife", "-1.0, 2.4, 3", "VEC3", "RW", "SIM_VIEWER");
  104. LLVector3 llvec5(-1.0f, 2.4f, 3);
  105. ensure("5. getTypeEnum failed", nValue5.getTypeEnum() == NVT_VEC3);
  106. ensure("5. getClassEnum failed", nValue5.getClassEnum() == NVC_READ_WRITE);
  107. ensure("5. getSendtoEnum failed", nValue5.getSendtoEnum() == NVS_SIM_VIEWER);
  108. ensure("5. getVec3 failed", *nValue5.getVec3() == llvec5);
  109. ensure("5. sendToData or sendToViewer failed", !nValue5.sendToData() && nValue5.sendToViewer());
  110. LLNameValue nValue6("SecondLife", "89764323", "U32", "RW", "DSV");
  111. ensure("6. getTypeEnum failed", nValue6.getTypeEnum() == NVT_U32);
  112. ensure("6. getClassEnum failed", nValue6.getClassEnum() == NVC_READ_WRITE);
  113. ensure("6. getSendtoEnum failed", nValue6.getSendtoEnum() == NVS_DATA_SIM_VIEWER);
  114. ensure("6. getU32 failed", *nValue6.getU32() == 89764323);
  115. ensure("6. sendToData or sendToViewer failed", nValue6.sendToData() && nValue6.sendToViewer());
  116. LLNameValue nValue7("SecondLife", "89764323323232", "U64", "RW", "SIM_SPACE_VIEWER");
  117. U64 u64_7 = U64L(89764323323232);
  118. ensure("7. getTypeEnum failed", nValue7.getTypeEnum() == NVT_U64);
  119. ensure("7. getClassEnum failed", nValue7.getClassEnum() == NVC_READ_WRITE);
  120. ensure("7. getSendtoEnum failed", nValue7.getSendtoEnum() == NVS_DATA_SIM_VIEWER);
  121. ensure("7. getU32 failed", *nValue7.getU64() == u64_7);
  122. ensure("7. sendToData or sendToViewer failed", nValue7.sendToData() && nValue7.sendToViewer());
  123. }
  124. // LLNameValue(const char* name, const char* data, const char* type, const char* nvclass, 
  125. // TNameValueCallback nvcb = NULL, void** user_data = NULL);
  126. template<> template<>
  127. void namevalue_object_t::test<3>()
  128. {
  129. LLNameValue nValue("SecondLife", "232324343", "ASSET", "READ_WRITE");
  130. ensure("mName not set correctly", (0 == strcmp(nValue.mName,"SecondLife")));
  131. ensure("getTypeEnum failed", nValue.getTypeEnum() == NVT_ASSET);
  132. ensure("getClassEnum failed", nValue.getClassEnum() == NVC_READ_WRITE);
  133. ensure("getSendtoEnum failed", nValue.getSendtoEnum() == NVS_SIM);
  134. ensure("getString failed", (0==strcmp(nValue.getAsset(),"232324343")));
  135. LLNameValue nValue1("SecondLife", "232324343", "STRING", "READ_WRITE");
  136. ensure("1. mName not set correctly", (0 == strcmp(nValue1.mName,"SecondLife")));
  137. ensure("1. getTypeEnum failed", nValue1.getTypeEnum() == NVT_STRING);
  138. ensure("1. getClassEnum failed", nValue1.getClassEnum() == NVC_READ_WRITE);
  139. ensure("1. getSendtoEnum failed", nValue1.getSendtoEnum() == NVS_SIM);
  140. ensure("1. getString failed", (0==strcmp(nValue1.getString(),"232324343")));
  141. LLNameValue nValue2("SecondLife", "23.5", "F32", "R");
  142. ensure("2. getTypeEnum failed", nValue2.getTypeEnum() == NVT_F32);
  143. ensure("2. getClassEnum failed", nValue2.getClassEnum() == NVC_READ_ONLY);
  144. ensure("2. getSendtoEnum failed", nValue2.getSendtoEnum() == NVS_SIM);
  145. ensure("2. getF32 failed", *nValue2.getF32() == 23.5f);
  146. LLNameValue nValue3("SecondLife", "-43456787", "S32", "READ_ONLY");
  147. ensure("3. getTypeEnum failed", nValue3.getTypeEnum() == NVT_S32);
  148. ensure("3. getClassEnum failed", nValue3.getClassEnum() == NVC_READ_ONLY);
  149. ensure("3. getSendtoEnum failed", nValue3.getSendtoEnum() == NVS_SIM);
  150. ensure("3. getS32 failed", *nValue3.getS32() == -43456787);
  151. LLNameValue nValue4("SecondLife", "<1.0, 2.0, 3.0>", "VEC3", "RW");
  152. LLVector3 llvec4(1.0, 2.0, 3.0);
  153. ensure("4. getTypeEnum failed", nValue4.getTypeEnum() == NVT_VEC3);
  154. ensure("4. getClassEnum failed", nValue4.getClassEnum() == NVC_READ_WRITE);
  155. ensure("4. getSendtoEnum failed", nValue4.getSendtoEnum() == NVS_SIM);
  156. ensure("4. getVec3 failed", *nValue4.getVec3() == llvec4);
  157. LLNameValue nValue5("SecondLife", "-1.0, 2.4, 3", "VEC3", "RW");
  158. LLVector3 llvec5(-1.0f, 2.4f, 3);
  159. ensure("5. getTypeEnum failed", nValue5.getTypeEnum() == NVT_VEC3);
  160. ensure("5. getClassEnum failed", nValue5.getClassEnum() == NVC_READ_WRITE);
  161. ensure("5. getSendtoEnum failed", nValue5.getSendtoEnum() == NVS_SIM);
  162. ensure("5. getVec3 failed", *nValue5.getVec3() == llvec5);
  163. LLNameValue nValue6("SecondLife", "89764323", "U32", "RW");
  164. ensure("6. getTypeEnum failed", nValue6.getTypeEnum() == NVT_U32);
  165. ensure("6. getClassEnum failed", nValue6.getClassEnum() == NVC_READ_WRITE);
  166. ensure("6. getSendtoEnum failed", nValue6.getSendtoEnum() == NVS_SIM);
  167. ensure("6. getU32 failed", *nValue6.getU32() == 89764323);
  168. LLNameValue nValue7("SecondLife", "89764323323232", "U64", "RW");
  169. U64 u64_7 = U64L(89764323323232);
  170. ensure("7. getTypeEnum failed", nValue7.getTypeEnum() == NVT_U64);
  171. ensure("7. getClassEnum failed", nValue7.getClassEnum() == NVC_READ_WRITE);
  172. ensure("7. getSendtoEnum failed", nValue7.getSendtoEnum() == NVS_SIM);
  173. ensure("7. getU32 failed", *nValue7.getU64() == u64_7);
  174. }
  175. // LLNameValue(const char* name, const char* type, const char* nvclass, 
  176. // TNameValueCallback nvcb = NULL, void** user_data = NULL);
  177. template<> template<>
  178. void namevalue_object_t::test<4>()
  179. {
  180. LLNameValue nValue("SecondLife",  "STRING", "READ_WRITE");
  181. ensure("mName not set correctly", (0 == strcmp(nValue.mName,"SecondLife")));
  182. ensure("getTypeEnum failed", nValue.getTypeEnum() == NVT_STRING);
  183. ensure("getClassEnum failed", nValue.getClassEnum() == NVC_READ_WRITE);
  184. ensure("getSendtoEnum failed", nValue.getSendtoEnum() == NVS_SIM);
  185. LLNameValue nValue1("SecondLife",  "ASSET", "READ_WRITE");
  186. ensure("1. mName not set correctly", (0 == strcmp(nValue1.mName,"SecondLife")));
  187. ensure("1. getTypeEnum for RW failed", nValue1.getTypeEnum() == NVT_ASSET);
  188. ensure("1. getClassEnum for RW failed", nValue1.getClassEnum() == NVC_READ_WRITE);
  189. ensure("1. getSendtoEnum for RW failed", nValue1.getSendtoEnum() == NVS_SIM);
  190. LLNameValue nValue2("SecondLife", "F32", "READ_ONLY");
  191. ensure("2. getTypeEnum failed", nValue2.getTypeEnum() == NVT_F32);
  192. ensure("2. getClassEnum failed", nValue2.getClassEnum() == NVC_READ_ONLY);
  193. ensure("2. getSendtoEnum failed", nValue2.getSendtoEnum() == NVS_SIM);
  194. LLNameValue nValue3("SecondLife", "S32", "READ_ONLY");
  195. ensure("3. getTypeEnum failed", nValue3.getTypeEnum() == NVT_S32);
  196. ensure("3. getClassEnum failed", nValue3.getClassEnum() == NVC_READ_ONLY);
  197. ensure("3. getSendtoEnum failed", nValue3.getSendtoEnum() == NVS_SIM);
  198. LLNameValue nValue4("SecondLife", "VEC3", "READ_WRITE");
  199. ensure("4. getTypeEnum failed", nValue4.getTypeEnum() == NVT_VEC3);
  200. ensure("4. getClassEnum failed", nValue4.getClassEnum() == NVC_READ_WRITE);
  201. ensure("4. getSendtoEnum failed", nValue4.getSendtoEnum() == NVS_SIM);
  202. LLNameValue nValue6("SecondLife", "U32", "READ_WRITE");
  203. ensure("6. getTypeEnum failed", nValue6.getTypeEnum() == NVT_U32);
  204. ensure("6. getClassEnum failed", nValue6.getClassEnum() == NVC_READ_WRITE);
  205. ensure("6. getSendtoEnum failed", nValue6.getSendtoEnum() == NVS_SIM);
  206. LLNameValue nValue7("SecondLife", "U64", "READ_WRITE");
  207. ensure("7. getTypeEnum failed", nValue7.getTypeEnum() == NVT_U64);
  208. ensure("7. getClassEnum failed", nValue7.getClassEnum() == NVC_READ_WRITE);
  209. ensure("7. getSendtoEnum failed", nValue7.getSendtoEnum() == NVS_SIM);
  210. }
  211. template<> template<>
  212. void namevalue_object_t::test<5>()
  213. {
  214. LLNameValue nValue("SecondLife", "This is a test", "STRING", "RW", "SIM");
  215. ensure("getString failed", (0 == strcmp(nValue.getString(),"This is a test")));
  216. }
  217. template<> template<>
  218. void namevalue_object_t::test<6>()
  219. {
  220. LLNameValue nValue("SecondLife", "This is a test", "ASSET", "RW", "S");
  221. ensure("getAsset failed", (0 == strcmp(nValue.getAsset(),"This is a test")));
  222. }
  223.          
  224. template<> template<>
  225. void namevalue_object_t::test<7>()
  226. {
  227. LLNameValue nValue("SecondLife", "555555", "F32", "RW", "SIM");
  228. ensure("getF32 failed",*nValue.getF32() == 555555.f);
  229. }
  230. template<> template<>
  231. void namevalue_object_t::test<8>()
  232. {
  233. LLNameValue nValue("SecondLife", "-5555", "S32", "RW", "SIM");
  234. ensure("getS32 failed", *nValue.getS32() == -5555);
  235. S32 sVal = 0x7FFFFFFF;
  236. nValue.setS32(sVal);
  237. ensure("getS32 failed", *nValue.getS32() == sVal);
  238. sVal = -0x7FFFFFFF;
  239. nValue.setS32(sVal);
  240. ensure("getS32 failed", *nValue.getS32() == sVal);
  241. sVal = 0;
  242. nValue.setS32(sVal);
  243. ensure("getS32 failed", *nValue.getS32() == sVal);
  244. }
  245. template<> template<>
  246. void namevalue_object_t::test<9>()
  247. {
  248. LLNameValue nValue("SecondLife", "<-3, 2, 1>", "VEC3", "RW", "SIM");
  249. LLVector3 vecExpected(-3, 2, 1);
  250. LLVector3 vec;
  251. nValue.getVec3(vec);
  252. ensure("getVec3 failed", vec == vecExpected);
  253. }
  254. template<> template<>
  255. void namevalue_object_t::test<10>()
  256. {
  257. LLNameValue nValue("SecondLife", "12345678", "U32", "RW", "SIM");
  258. ensure("getU32 failed",*nValue.getU32() == 12345678);
  259. U32 val = 0xFFFFFFFF;
  260. nValue.setU32(val);
  261. ensure("U32 max", *nValue.getU32() == val);
  262. val = 0;
  263. nValue.setU32(val);
  264. ensure("U32 min", *nValue.getU32() == val);
  265. }
  266. template<> template<>
  267. void namevalue_object_t::test<11>()
  268. {
  269. //skip_fail("incomplete support for U64.");
  270. LLNameValue nValue("SecondLife", "44444444444", "U64", "RW", "SIM");
  271. ensure("getU64 failed",*nValue.getU64() == U64L(44444444444));
  272. // there is no LLNameValue::setU64()  
  273. }
  274. template<> template<>
  275. void namevalue_object_t::test<12>()
  276. {
  277. //skip_fail("incomplete support for U64.");
  278. LLNameValue nValue("SecondLife U64 RW DSV 44444444444");
  279. std::string ret_str = nValue.printNameValue();
  280. ensure_equals("1:printNameValue failed",ret_str,"SecondLife U64 RW DSV 44444444444");
  281. LLNameValue nValue1(ret_str.c_str());
  282. ensure_equals("Serialization of printNameValue failed", *nValue.getU64(), *nValue1.getU64());
  283. }
  284. template<> template<>
  285. void namevalue_object_t::test<13>()
  286. {
  287. LLNameValue nValue("SecondLife STRING RW DSV 44444444444");
  288. std::string ret_str = nValue.printData();
  289. ensure_equals("1:printData failed",ret_str,"44444444444");
  290. LLNameValue nValue1("SecondLife S32 RW DSV 44444");
  291. ret_str = nValue1.printData();
  292. ensure_equals("2:printData failed",ret_str,"44444");
  293. }
  294. template<> template<>
  295. void namevalue_object_t::test<14>()
  296. {
  297. LLNameValue nValue("SecodLife STRING RW SIM 22222");
  298. std::ostringstream stream1,stream2,stream3, stream4, stream5;
  299. stream1 << nValue;
  300. ensure_equals("STRING << failed",stream1.str(),"22222");
  301. LLNameValue nValue1("SecodLife F32 RW SIM 22222");
  302. stream2 << nValue1;
  303. ensure_equals("F32 << failed",stream2.str(),"22222");
  304. LLNameValue nValue2("SecodLife S32 RW SIM 22222");
  305. stream3<< nValue2;
  306. ensure_equals("S32 << failed",stream3.str(),"22222");
  307. LLNameValue nValue3("SecodLife U32 RW SIM 122222");
  308. stream4<< nValue3;
  309. ensure_equals("U32 << failed",stream4.str(),"122222");
  310. // I don't think we use U64 name value pairs.  JC
  311. //skip_fail("incomplete support for U64.");
  312. //LLNameValue nValue4("SecodLife U64 RW SIM 22222");
  313. //stream5<< nValue4;
  314. //ensure("U64 << failed",0 == strcmp((stream5.str()).c_str(),"22222"));
  315. }
  316. template<> template<>
  317. void namevalue_object_t::test<15>()
  318. {
  319. LLNameValue nValue("SecondLife", "This is a test", "ASSET", "R", "S");
  320. ensure("getAsset failed", (0 == strcmp(nValue.getAsset(),"This is a test")));
  321. // this should not have updated as it is read only.
  322. nValue.setAsset("New Value should not be updated");
  323. ensure("setAsset on ReadOnly failed", (0 == strcmp(nValue.getAsset(),"This is a test")));
  324. LLNameValue nValue1("SecondLife", "1234", "U32", "R", "S");
  325. // this should not have updated as it is read only.
  326. nValue1.setU32(4567);
  327. ensure("setU32 on ReadOnly failed", *nValue1.getU32() == 1234);
  328. LLNameValue nValue2("SecondLife", "1234", "S32", "R", "S");
  329. // this should not have updated as it is read only.
  330. nValue2.setS32(4567);
  331. ensure("setS32 on ReadOnly failed", *nValue2.getS32() == 1234);
  332. LLNameValue nValue3("SecondLife", "1234", "F32", "R", "S");
  333. // this should not have updated as it is read only.
  334. nValue3.setF32(4567);
  335. ensure("setF32 on ReadOnly failed", *nValue3.getF32() == 1234);
  336. LLNameValue nValue4("SecondLife", "<1,2,3>", "VEC3", "R", "S");
  337. // this should not have updated as it is read only.
  338. LLVector3 vec(4,5,6);
  339. nValue3.setVec3(vec);
  340. LLVector3 vec1(1,2,3);
  341. ensure("setVec3 on ReadOnly failed", *nValue4.getVec3() == vec1);
  342. // cant test for U64 as no set64 exists nor any operators support U64 type
  343. }         
  344. }