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

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2.  * @file llsdmessagereader_tut.cpp
  3.  * @date   February 2006
  4.  * @brief LLSDMessageReader unit tests
  5.  *
  6.  * $LicenseInfo:firstyear=2006&license=viewergpl$
  7.  * 
  8.  * Copyright (c) 2006-2010, Linden Research, Inc.
  9.  * 
  10.  * Second Life Viewer Source Code
  11.  * The source code in this file ("Source Code") is provided by Linden Lab
  12.  * to you under the terms of the GNU General Public License, version 2.0
  13.  * ("GPL"), unless you have obtained a separate licensing agreement
  14.  * ("Other License"), formally executed by you and Linden Lab.  Terms of
  15.  * the GPL can be found in doc/GPL-license.txt in this distribution, or
  16.  * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
  17.  * 
  18.  * There are special exceptions to the terms and conditions of the GPL as
  19.  * it is applied to this Source Code. View the full text of the exception
  20.  * in the file doc/FLOSS-exception.txt in this software distribution, or
  21.  * online at
  22.  * http://secondlifegrid.net/programs/open_source/licensing/flossexception
  23.  * 
  24.  * By copying, modifying or distributing this software, you acknowledge
  25.  * that you have read and understood your obligations described above,
  26.  * and agree to abide by those obligations.
  27.  * 
  28.  * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
  29.  * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
  30.  * COMPLETENESS OR PERFORMANCE.
  31.  * $/LicenseInfo$
  32.  */
  33. #include <tut/tut.hpp>
  34. #include "linden_common.h"
  35. #include "lltut.h"
  36. #include "v3dmath.h"
  37. #include "v3math.h"
  38. #include "v4math.h"
  39. #include "llquaternion.h"
  40. #include "message.h"
  41. #include "llsdmessagereader.h"
  42. #include "llsdutil.h"
  43. #include "llsdutil_math.h"
  44. namespace tut
  45. {
  46. struct LLSDMessageReaderTestData {
  47. static void ensureMessageName(const std::string& msg_name,
  48. const LLSD& msg_data,
  49. const std::string& expected_name)
  50. {
  51. LLSDMessageReader msg;
  52. msg.setMessage(LLMessageStringTable::getInstance()->getString(msg_name.c_str()), msg_data);
  53. ensure_equals("Ensure name", std::string(msg.getMessageName()), 
  54.   expected_name);
  55. }
  56. static void ensureNumberOfBlocks(const LLSD& msg_data,
  57. const std::string& block,
  58. S32 expected_number)
  59. {
  60. LLSDMessageReader msg;
  61. msg.setMessage("fakename", msg_data);
  62. ensure_equals("Ensure number of blocks", msg.getNumberOfBlocks(block.c_str()), 
  63.   expected_number);
  64. }
  65. static void ensureMessageSize(const LLSD& msg_data,
  66. S32 expected_size)
  67. {
  68. LLSDMessageReader msg;
  69. msg.setMessage("fakename", msg_data);
  70. ensure_equals( "Ensure size", msg.getMessageSize(), expected_size);
  71. }
  72. static void ensureBool(const LLSD& msg_data,
  73. const std::string& block,
  74. const std::string& var,
  75. S32 blocknum,
  76. BOOL expected)
  77. {
  78. LLSDMessageReader msg;
  79. msg.setMessage("fakename", msg_data);
  80. BOOL test_data;
  81. msg.getBOOL(block.c_str(), var.c_str(), test_data, blocknum);
  82.   ensure_equals( "Ensure bool field", test_data, expected);
  83.   }
  84.   };
  85.   typedef test_group<LLSDMessageReaderTestData> LLSDMessageReaderTestGroup;
  86.   typedef LLSDMessageReaderTestGroup::object LLSDMessageReaderTestObject;
  87.   LLSDMessageReaderTestGroup llsdMessageReaderTestGroup("LLSDMessageReader");
  88.   template<> template<>
  89.   void LLSDMessageReaderTestObject::test<1>()
  90.   // construction and test of empty LLSD
  91.   {
  92.   LLSD message = LLSD::emptyMap();
  93.   ensureMessageName("", message, "");
  94.   ensureNumberOfBlocks(message, "Fakeblock", 0);
  95.   ensureMessageSize(message, 0);
  96.   }
  97.   template<> template<>
  98.   void LLSDMessageReaderTestObject::test<2>()
  99.   // construction and test of simple message with one block
  100.   {
  101.   LLSD message = LLSD::emptyMap();
  102.   message["block1"] = LLSD::emptyArray();
  103.   message["block1"][0] = LLSD::emptyMap();
  104.   message["block1"][0]["Field1"] = 0;
  105.   ensureMessageName("name2", message, "name2");
  106.   ensureNumberOfBlocks(message, "block1", 1);
  107.   ensureMessageSize(message, 0);
  108.   }
  109.   template<> template<>
  110.   void LLSDMessageReaderTestObject::test<3>()
  111.   // multiple blocks
  112.   {
  113.   LLSD message = LLSD::emptyMap();
  114.   message["block1"] = LLSD::emptyArray();
  115.   BOOL bool_true = TRUE;
  116.   BOOL bool_false = FALSE;
  117.   message["block1"][0] = LLSD::emptyMap();
  118.   message["block1"][0]["BoolField1"] = bool_true;
  119. message["block1"][1] = LLSD::emptyMap();
  120.   message["block1"][1]["BoolField1"] = bool_false;
  121.   message["block1"][1]["BoolField2"] = bool_true;
  122.   ensureMessageName("name3", message, "name3");
  123.   ensureBool(message, "block1", "BoolField1", 0, TRUE);
  124.   ensureBool(message, "block1", "BoolField1", 1, FALSE);
  125.   ensureBool(message, "block1", "BoolField2", 1, TRUE);
  126.   ensureNumberOfBlocks(message, "block1", 2);
  127.   ensureMessageSize(message, 0);
  128.   }
  129.   template<typename T>
  130.   LLSDMessageReader testType(const T& value)
  131.   {
  132.   LLSD message = LLSD::emptyMap();
  133.   message["block"][0]["var"] = value;
  134.   LLSDMessageReader msg;
  135.   msg.setMessage("fakename", message);
  136.   return msg;
  137.   }
  138.   template<> template<>
  139.   void LLSDMessageReaderTestObject::test<4>()
  140.   // S8
  141.   {
  142.   S8 outValue, inValue = -3;
  143.   LLSDMessageReader msg = testType(inValue);
  144.   msg.getS8("block", "var", outValue);
  145.   ensure_equals("Ensure S8", outValue, inValue);
  146.   }
  147.   template<> template<>
  148.   void 
  149. LLSDMessageReaderTestObject::test<5>()
  150. // U8
  151. {
  152. U8 outValue, inValue = 2;
  153. LLSDMessageReader msg = testType(inValue);
  154. msg.getU8("block", "var", outValue);
  155. ensure_equals("Ensure U8", outValue, inValue);
  156. }
  157. template<> template<>
  158. void LLSDMessageReaderTestObject::test<6>()
  159. // S16
  160. {
  161. S16 outValue, inValue = 90;
  162. LLSDMessageReader msg = testType(inValue);
  163. msg.getS16("block", "var", outValue);
  164. ensure_equals("Ensure S16", outValue, inValue);
  165. }
  166. template<> template<>
  167. void LLSDMessageReaderTestObject::test<7>()
  168. // U16
  169. {
  170. U16 outValue, inValue = 3;
  171. LLSDMessageReader msg = testType(inValue);
  172. msg.getU16("block", "var", outValue);
  173. ensure_equals("Ensure S16", outValue, inValue);
  174. }
  175. template<> template<>
  176. void LLSDMessageReaderTestObject::test<8>()
  177. // S32
  178. {
  179. S32 outValue, inValue = 44;
  180. LLSDMessageReader msg = testType(inValue);
  181. msg.getS32("block", "var", outValue);
  182. ensure_equals("Ensure S32", outValue, inValue);
  183. }
  184. template<> template<>
  185. void LLSDMessageReaderTestObject::test<9>()
  186. // F32
  187. {
  188. F32 outValue, inValue = 121.44f;
  189. LLSDMessageReader msg = testType(inValue);
  190. msg.getF32("block", "var", outValue);
  191. ensure_equals("Ensure F32", outValue, inValue);
  192. }
  193. template<> template<>
  194. void LLSDMessageReaderTestObject::test<10>()
  195. // U32
  196. {
  197. U32 outValue, inValue = 88;
  198. LLSD sdValue = ll_sd_from_U32(inValue);
  199. LLSDMessageReader msg = testType(sdValue);
  200. msg.getU32("block", "var", outValue);
  201. ensure_equals("Ensure U32", outValue, inValue);
  202. }
  203. template<> template<>
  204. void LLSDMessageReaderTestObject::test<11>()
  205. // U64
  206. {
  207. U64 outValue, inValue = 121;
  208. LLSD sdValue = ll_sd_from_U64(inValue);
  209. LLSDMessageReader msg = testType(sdValue);
  210. msg.getU64("block", "var", outValue);
  211. ensure_equals("Ensure U64", outValue, inValue);
  212. }
  213. template<> template<>
  214. void LLSDMessageReaderTestObject::test<12>()
  215. // F64
  216. {
  217. F64 outValue, inValue = 3232143.33;
  218. LLSDMessageReader msg = testType(inValue);
  219. msg.getF64("block", "var", outValue);
  220. ensure_equals("Ensure F64", outValue, inValue);
  221. }
  222. template<> template<>
  223. void LLSDMessageReaderTestObject::test<13>()
  224. // String
  225. {
  226.  std::string outValue, inValue = "testing";
  227. LLSDMessageReader msg = testType<std::string>(inValue.c_str());
  228. char buffer[MAX_STRING];
  229. msg.getString("block", "var", MAX_STRING, buffer);
  230. outValue = buffer;
  231. ensure_equals("Ensure String", outValue, inValue);
  232. }
  233. template<> template<>
  234. void LLSDMessageReaderTestObject::test<14>()
  235. // Vector3
  236. {
  237.  LLVector3 outValue, inValue = LLVector3(1,2,3);
  238. LLSD sdValue = ll_sd_from_vector3(inValue);
  239. LLSDMessageReader msg = testType(sdValue);
  240. msg.getVector3("block", "var", outValue);
  241. ensure_equals("Ensure Vector3", outValue, inValue);
  242. }
  243. template<> template<>
  244. void LLSDMessageReaderTestObject::test<15>()
  245. // Vector4
  246. {
  247. LLVector4 outValue, inValue = LLVector4(1,2,3,4);
  248. LLSD sdValue = ll_sd_from_vector4(inValue);
  249. LLSDMessageReader msg = testType(sdValue);
  250. msg.getVector4("block", "var", outValue);
  251. ensure_equals("Ensure Vector4", outValue, inValue);
  252. }
  253. template<> template<>
  254. void LLSDMessageReaderTestObject::test<16>()
  255. // Vector3d
  256. {
  257.  LLVector3d outValue, inValue = LLVector3d(1,2,3);
  258.  LLSD sdValue = ll_sd_from_vector3d(inValue);
  259. LLSDMessageReader msg = testType(sdValue);
  260. msg.getVector3d("block", "var", outValue);
  261. ensure_equals("Ensure Vector3d", outValue, inValue);
  262. }
  263. template<> template<>
  264. void LLSDMessageReaderTestObject::test<17>()
  265. // Quaternion
  266. {
  267.  LLQuaternion outValue, inValue = LLQuaternion(1,2,3,4);
  268. LLSD sdValue = ll_sd_from_quaternion(inValue);
  269. LLSDMessageReader msg = testType(sdValue);
  270. msg.getQuat("block", "var", outValue);
  271. ensure_equals("Ensure Quaternion", outValue, inValue);
  272. }
  273. template<> template<>
  274. void LLSDMessageReaderTestObject::test<18>()
  275. // UUID
  276. {
  277. LLUUID outValue, inValue;
  278. inValue.generate();
  279. LLSDMessageReader msg = testType(inValue);
  280. msg.getUUID("block", "var", outValue);
  281. ensure_equals("Ensure UUID", outValue, inValue);
  282. }
  283. template<> template<>
  284. void LLSDMessageReaderTestObject::test<19>()
  285. // IPAddr
  286. {
  287. U32 outValue, inValue = 12344556;
  288. LLSD sdValue = ll_sd_from_ipaddr(inValue);
  289. LLSDMessageReader msg = testType(sdValue);
  290. msg.getIPAddr("block", "var", outValue);
  291. ensure_equals("Ensure IPAddr", outValue, inValue);
  292. }
  293. template<> template<>
  294. void LLSDMessageReaderTestObject::test<20>()
  295. // IPPort
  296. {
  297. U16 outValue, inValue = 80;
  298. LLSDMessageReader msg = testType(inValue);
  299. msg.getIPPort("block", "var", outValue);
  300. ensure_equals("Ensure IPPort", outValue, inValue);
  301. }
  302. template<> template<>
  303. void LLSDMessageReaderTestObject::test<21>()
  304. // Binary 
  305. {
  306. std::vector<U8> outValue(2), inValue(2);
  307. inValue[0] = 0;
  308. inValue[1] = 1;
  309.   
  310. LLSDMessageReader msg = testType(inValue);
  311. msg.getBinaryData("block", "var", &(outValue[0]), inValue.size());
  312. ensure_equals("Ensure Binary", outValue, inValue);
  313. }
  314. }