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

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2.  * @file llsdmessagebuilder_tut.cpp
  3.  * @date   February 2006
  4.  * @brief LLSDMessageBuilder 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 "llmessagetemplate.h"
  37. #include "llsdmessagebuilder.h"
  38. #include "llsdmessagereader.h"
  39. #include "llsdtraits.h"
  40. #include "llquaternion.h"
  41. #include "u64.h"
  42. #include "v3dmath.h"
  43. #include "v3math.h"
  44. #include "v4math.h"
  45. #include "llsdutil.h"
  46. //#include "llsdutil.cpp"
  47. #include "llsdutil_math.cpp"
  48. #include "lltemplatemessagebuilder.h"
  49. namespace tut
  50. {
  51. static LLTemplateMessageBuilder::message_template_name_map_t templateNameMap;
  52.     LLMsgData* messageData = NULL;
  53.     LLMsgBlkData* messageBlockData = NULL;
  54. struct LLSDMessageBuilderTestData {
  55. LLSDMessageBuilderTestData()
  56. {
  57. messageData = new LLMsgData("testMessage");
  58. messageBlockData = new LLMsgBlkData("testBlock", 0);
  59. }
  60. static LLSDMessageBuilder defaultBuilder()
  61. {
  62. LLSDMessageBuilder builder;
  63. builder.newMessage("name");
  64. builder.nextBlock("block");
  65. return builder;
  66. }
  67. static LLSDMessageReader setReader(const LLSDMessageBuilder& builder)
  68. {
  69. LLSDMessageReader reader;
  70. reader.setMessage("name", builder.getMessage());
  71. return reader;
  72. }
  73. static void addValue(LLMsgBlkData* mbd, char* name, void* v, EMsgVariableType type, int size, int data_size = -1)
  74. {
  75. LLMsgVarData tmp(name, type);
  76. tmp.addData(v, size, type, data_size);
  77. mbd->mMemberVarData[name] = tmp;
  78. }
  79. static LLMessageBlock* defaultTemplateBlock(const EMsgVariableType type = MVT_NULL, const S32 size = 0, EMsgBlockType block = MBT_VARIABLE)
  80. {
  81. return createTemplateBlock(_PREHASH_Test0, type, size, block);
  82. }
  83. static LLMessageBlock* createTemplateBlock(char* name, const EMsgVariableType type = MVT_NULL, const S32 size = 0, EMsgBlockType block = MBT_VARIABLE)
  84. {
  85. LLMessageBlock* result = new LLMessageBlock(name, block);
  86. if(type != MVT_NULL)
  87. {
  88. result->addVariable(_PREHASH_Test0, type, size);
  89. }
  90. return result;
  91. }
  92. static LLTemplateMessageBuilder* defaultTemplateBuilder(LLMessageTemplate& messageTemplate, char* name = _PREHASH_Test0)
  93. {
  94. templateNameMap[_PREHASH_TestMessage] = &messageTemplate;
  95. LLTemplateMessageBuilder* builder = new LLTemplateMessageBuilder(templateNameMap);
  96. builder->newMessage(_PREHASH_TestMessage);
  97. builder->nextBlock(name);
  98. return builder;
  99. }
  100. static LLMessageTemplate defaultTemplate()
  101. {
  102. return LLMessageTemplate(_PREHASH_TestMessage, 1, MFT_HIGH);
  103. }
  104. };
  105. typedef test_group<LLSDMessageBuilderTestData> LLSDMessageBuilderTestGroup;
  106. typedef LLSDMessageBuilderTestGroup::object LLSDMessageBuilderTestObject;
  107. LLSDMessageBuilderTestGroup llsdMessageBuilderTestGroup("LLSDMessageBuilder");
  108. template<> template<>
  109. void LLSDMessageBuilderTestObject::test<1>()
  110. // construction and test of undefined
  111. {
  112.   LLSDMessageBuilder builder = defaultBuilder();
  113.   LLSDMessageReader reader = setReader(builder);
  114. }
  115. template<> template<>
  116. void LLSDMessageBuilderTestObject::test<2>()
  117.  // BOOL
  118. {
  119.   BOOL outValue, inValue = TRUE;
  120.   LLSDMessageBuilder builder = defaultBuilder();
  121.   builder.addBOOL("var", inValue);
  122.   LLSDMessageReader reader = setReader(builder);
  123.   reader.getBOOL("block", "var", outValue);
  124.   ensure_equals("Ensure BOOL", inValue, outValue);
  125. }
  126. template<> template<>
  127. void LLSDMessageBuilderTestObject::test<3>()
  128.  // U8
  129. {
  130.   U8 outValue, inValue = 2;
  131.   LLSDMessageBuilder builder = defaultBuilder();
  132.   builder.addU8("var", inValue);
  133.   LLSDMessageReader reader = setReader(builder);
  134.   reader.getU8("block", "var", outValue);
  135.   ensure_equals("Ensure U8", inValue, outValue);
  136. }
  137. template<> template<>
  138. void LLSDMessageBuilderTestObject::test<4>()
  139.  // S16
  140. {
  141.   S16 outValue, inValue = 90;
  142.   LLSDMessageBuilder builder = defaultBuilder();
  143.   builder.addS16("var", inValue);
  144.   LLSDMessageReader reader = setReader(builder);
  145.   reader.getS16("block", "var", outValue);
  146.   ensure_equals("Ensure S16", inValue, outValue);
  147. }
  148. template<> template<>
  149. void LLSDMessageBuilderTestObject::test<5>()
  150.  // U16
  151. {
  152.   U16 outValue, inValue = 3;
  153.   LLSDMessageBuilder builder = defaultBuilder();
  154.   builder.addU16("var", inValue);
  155.   LLSDMessageReader reader = setReader(builder);
  156.   reader.getU16("block", "var", outValue);
  157.   ensure_equals("Ensure U16", inValue, outValue);
  158. }
  159. template<> template<>
  160. void LLSDMessageBuilderTestObject::test<6>()
  161.  // S32
  162. {
  163.   S32 outValue, inValue = 44;
  164.   LLSDMessageBuilder builder = defaultBuilder();
  165.   builder.addS32("var", inValue);
  166.   LLSDMessageReader reader = setReader(builder);
  167.   reader.getS32("block", "var", outValue);
  168.   ensure_equals("Ensure S32", inValue, outValue);
  169. }
  170. template<> template<>
  171. void LLSDMessageBuilderTestObject::test<7>()
  172.  // F32
  173. {
  174.   F32 outValue, inValue = 121.44f;
  175.   LLSDMessageBuilder builder = defaultBuilder();
  176.   builder.addF32("var", inValue);
  177.   LLSDMessageReader reader = setReader(builder);
  178.   reader.getF32("block", "var", outValue);
  179.   ensure_equals("Ensure F32", inValue, outValue);
  180. }
  181. template<> template<>
  182. void LLSDMessageBuilderTestObject::test<8>()
  183.  // U32
  184. {
  185.   U32 outValue, inValue = 88;
  186.   LLSDMessageBuilder builder = defaultBuilder();
  187.   builder.addU32("var", inValue);
  188.   LLSDMessageReader reader = setReader(builder);
  189.   reader.getU32("block", "var", outValue);
  190.   ensure_equals("Ensure U32", inValue, outValue);
  191. }
  192. template<> template<>
  193. void LLSDMessageBuilderTestObject::test<9>()
  194.  // U64
  195. {
  196.   U64 outValue, inValue = 121;
  197.   LLSDMessageBuilder builder = defaultBuilder();
  198.   builder.addU64("var", inValue);
  199.   LLSDMessageReader reader = setReader(builder);
  200.   reader.getU64("block", "var", outValue);
  201.   ensure_equals("Ensure U64", inValue, outValue);
  202. }
  203. template<> template<>
  204. void LLSDMessageBuilderTestObject::test<10>()
  205.  // F64
  206. {
  207.   F64 outValue, inValue = 3232143.33;
  208.   LLSDMessageBuilder builder = defaultBuilder();
  209.   builder.addF64("var", inValue);
  210.   LLSDMessageReader reader = setReader(builder);
  211.   reader.getF64("block", "var", outValue);
  212.   ensure_equals("Ensure F64", inValue, outValue);
  213. }
  214. template<> template<>
  215. void LLSDMessageBuilderTestObject::test<11>()
  216.  // Vector3
  217. {
  218.   LLVector3 outValue, inValue = LLVector3(1,2,3);
  219.   LLSDMessageBuilder builder = defaultBuilder();
  220.   builder.addVector3("var", inValue);
  221.   LLSDMessageReader reader = setReader(builder);
  222.   reader.getVector3("block", "var", outValue);
  223.   ensure_equals("Ensure Vector3", inValue, outValue);
  224. }
  225. template<> template<>
  226. void LLSDMessageBuilderTestObject::test<12>()
  227.  // Vector4
  228. {
  229.   LLVector4 outValue, inValue = LLVector4(1,2,3,4);
  230.   LLSDMessageBuilder builder = defaultBuilder();
  231.   builder.addVector4("var", inValue);
  232.   LLSDMessageReader reader = setReader(builder);
  233.   reader.getVector4("block", "var", outValue);
  234.   ensure_equals("Ensure Vector4", inValue, outValue);
  235. }
  236. template<> template<>
  237. void LLSDMessageBuilderTestObject::test<13>()
  238.  // Vector3d
  239. {
  240.   LLVector3d outValue, inValue = LLVector3d(1,2,3);
  241.   LLSDMessageBuilder builder = defaultBuilder();
  242.   builder.addVector3d("var", inValue);
  243.   LLSDMessageReader reader = setReader(builder);
  244.   reader.getVector3d("block", "var", outValue);
  245.   ensure_equals("Ensure Vector3d", inValue, outValue);
  246. }
  247. template<> template<>
  248. void LLSDMessageBuilderTestObject::test<14>()
  249.  // Quaternion
  250. {
  251.   LLQuaternion outValue, inValue = LLQuaternion(1,2,3,4);
  252.   LLSDMessageBuilder builder = defaultBuilder();
  253.   builder.addQuat("var", inValue);
  254.   LLSDMessageReader reader = setReader(builder);
  255.   reader.getQuat("block", "var", outValue);
  256.   ensure_equals("Ensure Quaternion", inValue, outValue);
  257. }
  258. template<> template<>
  259. void LLSDMessageBuilderTestObject::test<15>()
  260.  // UUID
  261. {
  262.   LLUUID outValue, inValue;
  263.   inValue.generate();
  264.   LLSDMessageBuilder builder = defaultBuilder();
  265.   builder.addUUID("var", inValue);
  266.   LLSDMessageReader reader = setReader(builder);
  267.   reader.getUUID("block", "var", outValue);
  268.   ensure_equals("Ensure UUID", inValue, outValue);
  269. }
  270. template<> template<>
  271. void LLSDMessageBuilderTestObject::test<16>()
  272.  // IPAddr
  273. {
  274.   U32 outValue, inValue = 12344556;
  275.   LLSDMessageBuilder builder = defaultBuilder();
  276.   builder.addIPAddr("var", inValue);
  277.   LLSDMessageReader reader = setReader(builder);
  278.   reader.getIPAddr("block", "var", outValue);
  279.   ensure_equals("Ensure IPAddr", inValue, outValue);
  280. }
  281.  template<> template<>
  282. void LLSDMessageBuilderTestObject::test<17>()
  283.  // IPPort
  284. {
  285.  U16 outValue, inValue = 80;
  286.   LLSDMessageBuilder builder = defaultBuilder();
  287.   builder.addIPPort("var", inValue);
  288.   LLSDMessageReader reader = setReader(builder);
  289.   reader.getIPPort("block", "var", outValue);
  290.   ensure_equals("Ensure IPPort", inValue, outValue);
  291. }
  292. template<> template<>
  293. void LLSDMessageBuilderTestObject::test<18>()
  294. {
  295.  std::string outValue, inValue = "testing";
  296.   LLSDMessageBuilder builder = defaultBuilder();
  297.   builder.addString("var", inValue.c_str());
  298.   LLSDMessageReader reader = setReader(builder);
  299.   char buffer[MAX_STRING];
  300.   reader.getString("block", "var", MAX_STRING, buffer);
  301.   outValue = buffer;
  302.   ensure_equals("Ensure String", inValue, outValue);
  303. }
  304. template<> template<>
  305. void LLSDMessageBuilderTestObject::test<19>()
  306. {
  307.   LLMsgBlkData* mbd = new LLMsgBlkData("testBlock", 0);
  308.   LLMsgData* md = new LLMsgData("testMessage");
  309.   md->addBlock(mbd);
  310.   LLSDMessageBuilder builder = defaultBuilder();
  311.   
  312.   builder.copyFromMessageData(*md);
  313.   LLSD output = builder.getMessage();
  314.   ensure("Ensure message block created when copied from legacy message to llsd", output["testBlock"].isDefined());
  315. }
  316. // MVT_FIXED
  317. template<> template<>
  318. void LLSDMessageBuilderTestObject::test<20>()
  319. {
  320.   char binData[] = "abcdefghijklmnop";
  321.   addValue(messageBlockData, (char *)"testBinData", &binData, MVT_FIXED, sizeof(binData));
  322.   messageData->addBlock(messageBlockData);
  323.   LLSDMessageBuilder builder = defaultBuilder();
  324.   
  325.   builder.copyFromMessageData(*messageData);
  326.   LLSD output = builder.getMessage();
  327.   std::vector<U8> v = output["testBlock"][0]["testBinData"].asBinary();
  328.   ensure("Ensure MVT_S16Array data copied from legacy to llsd give a valid vector", v.size() > 0);
  329.   ensure_memory_matches("Ensure fixed binary data works in a message copied from legacy to llsd",
  330.   &v[0], sizeof(binData), binData, sizeof(binData));
  331. }
  332. // MVT_VARIABLE data_size 1 (U8's)
  333. template<> template<>
  334. void LLSDMessageBuilderTestObject::test<21>()
  335. {
  336.  /* U8 binData[] = "abcdefghijklmnop";
  337.   addValue(messageBlockData, "testBinData", &binData, MVT_VARIABLE, sizeof(binData), 1);
  338.   messageData->addBlock(messageBlockData);
  339.   LLSDMessageBuilder builder = defaultBuilder();
  340.   
  341.   builder.copyFromMessageData(*messageData);
  342.   LLSD output = builder.getMessage();
  343.   std::vector<U8> v = output["testBlock"][0]["testBinData"].asBinary();
  344.   ensure("Ensure MVT_S16Array data copied from legacy to llsd give a valid vector", v.size() > 0);
  345.   ensure_memory_matches("Ensure MVT_VARIABLE U8 binary data works in a message copied from legacy to llsd",
  346.   &v[0], sizeof(binData), binData, sizeof(binData));*/
  347. }
  348. // MVT_VARIABLE data_size 2 (U16's)
  349. template<> template<>
  350. void LLSDMessageBuilderTestObject::test<22>()
  351. {
  352.   U16 binData[] = {1,2,3,4,5,6,7,8,9}; //9 shorts
  353.   addValue(messageBlockData, (char *)"testBinData", &binData, MVT_VARIABLE, sizeof(binData) >> 1, 2);
  354.   messageData->addBlock(messageBlockData);
  355.   LLSDMessageBuilder builder = defaultBuilder();
  356.   
  357.   builder.copyFromMessageData(*messageData);
  358.   LLSD output = builder.getMessage();
  359.   std::vector<U8> v = output["testBlock"][0]["testBinData"].asBinary();
  360.   ensure("Ensure MVT_S16Array data copied from legacy to llsd give a valid vector", v.size() > 0);
  361.   ensure_memory_matches("Ensure MVT_VARIABLE U16 binary data works in a message copied from legacy to llsd",
  362.   &v[0], sizeof(binData) >> 1, binData, sizeof(binData) >> 1);
  363. }
  364. // MVT_VARIABLE data_size 4 (S32's)
  365. template<> template<>
  366. void LLSDMessageBuilderTestObject::test<23>()
  367. {
  368.   U32 binData[] = {9,8,7,6,5,4,3,2,1};
  369.   addValue(messageBlockData, (char *)"testBinData", &binData, MVT_VARIABLE, sizeof(binData) >> 2, 4);
  370.   messageData->addBlock(messageBlockData);
  371.   LLSDMessageBuilder builder = defaultBuilder();
  372.   
  373.   builder.copyFromMessageData(*messageData);
  374.   LLSD output = builder.getMessage();
  375.   std::vector<U8> v = output["testBlock"][0]["testBinData"].asBinary();
  376.   ensure("Ensure MVT_S16Array data copied from legacy to llsd give a valid vector", v.size() > 0);
  377.   ensure_memory_matches("Ensure MVT_VARIABLE S32 binary data works in a message copied from legacy to llsd",
  378.   &v[0], sizeof(binData) >> 2, binData, sizeof(binData) >> 2);
  379. }
  380. // MVT_U8
  381. template<> template<>
  382. void LLSDMessageBuilderTestObject::test<24>()
  383. {
  384.   U8 data = 0xa5;
  385.   addValue(messageBlockData, (char *)"testBinData", &data, MVT_U8, sizeof(data));
  386.   messageData->addBlock(messageBlockData);
  387.   LLSDMessageBuilder builder = defaultBuilder();
  388.   
  389.   builder.copyFromMessageData(*messageData);
  390.   LLSD output = builder.getMessage();
  391.   ensure_equals("Ensure MVT_U8 data works in a message copied from legacy to llsd",
  392.   output["testBlock"][0]["testBinData"].asInteger(), data);
  393. }
  394. // MVT_U16
  395. template<> template<>
  396. void LLSDMessageBuilderTestObject::test<25>()
  397. {
  398.   U16 data = 0xa55a;
  399.   addValue(messageBlockData, (char *)"testBinData", &data, MVT_U16, sizeof(data));
  400.   messageData->addBlock(messageBlockData);
  401.   LLSDMessageBuilder builder = defaultBuilder();
  402.   
  403.   builder.copyFromMessageData(*messageData);
  404.   LLSD output = builder.getMessage();
  405.   ensure_equals("Ensure MVT_U16 data works in a message copied from legacy to llsd",
  406.   output["testBlock"][0]["testBinData"].asInteger(), data);
  407. }
  408. // MVT_U32
  409. template<> template<>
  410. void LLSDMessageBuilderTestObject::test<26>()
  411. {
  412.   U32 data = 0xa55a7117;
  413.   addValue(messageBlockData, (char *)"testBinData", &data, MVT_U32, sizeof(data));
  414.   messageData->addBlock(messageBlockData);
  415.   LLSDMessageBuilder builder = defaultBuilder();
  416.   
  417.   builder.copyFromMessageData(*messageData);
  418.   LLSD output = builder.getMessage();
  419.   ensure_equals("Ensure MVT_U32 data works in a message copied from legacy to llsd",
  420.   ll_U32_from_sd(output["testBlock"][0]["testBinData"]), data);
  421. }
  422. // MVT_U64 - crush into an s32: LLSD does not support 64 bit values
  423. template<> template<>
  424. void LLSDMessageBuilderTestObject::test<27>()
  425. {
  426.   U64 data = U64L(0xa55a711711223344);
  427.   addValue(messageBlockData, (char *)"testBinData", &data, MVT_U64, sizeof(data));
  428.   messageData->addBlock(messageBlockData);
  429.   LLSDMessageBuilder builder = defaultBuilder();
  430.   
  431.   builder.copyFromMessageData(*messageData);
  432.   LLSD output = builder.getMessage();
  433.   ensure_equals("Ensure MVT_U64 data works in a message copied from legacy to llsd",
  434.   ll_U64_from_sd(output["testBlock"][0]["testBinData"]), data);
  435. }
  436. // MVT_S8
  437. template<> template<>
  438. void LLSDMessageBuilderTestObject::test<28>()
  439. {
  440.   S8 data = -31;
  441.   addValue(messageBlockData, (char *)"testBinData", &data, MVT_S8, sizeof(data));
  442.   messageData->addBlock(messageBlockData);
  443.   LLSDMessageBuilder builder = defaultBuilder();
  444.   
  445.   builder.copyFromMessageData(*messageData);
  446.   LLSD output = builder.getMessage();
  447.   ensure_equals("Ensure MVT_S8 data works in a message copied from legacy to llsd",
  448.   output["testBlock"][0]["testBinData"].asInteger(), data);
  449. }
  450. // MVT_S16
  451. template<> template<>
  452. void LLSDMessageBuilderTestObject::test<29>()
  453. {
  454.   S16 data = -31;
  455.   addValue(messageBlockData, (char *)"testBinData", &data, MVT_S16, sizeof(data));
  456.   messageData->addBlock(messageBlockData);
  457.   LLSDMessageBuilder builder = defaultBuilder();
  458.   
  459.   builder.copyFromMessageData(*messageData);
  460.   LLSD output = builder.getMessage();
  461.   ensure_equals("Ensure MVT_S16 data works in a message copied from legacy to llsd",
  462.   output["testBlock"][0]["testBinData"].asInteger(), data);
  463. }
  464. // MVT_S32
  465. template<> template<>
  466. void LLSDMessageBuilderTestObject::test<30>()
  467. {
  468.   S32 data = -3100;
  469.   addValue(messageBlockData, (char *)"testBinData", &data, MVT_S32, sizeof(data));
  470.   messageData->addBlock(messageBlockData);
  471.   LLSDMessageBuilder builder = defaultBuilder();
  472.   
  473.   builder.copyFromMessageData(*messageData);
  474.   LLSD output = builder.getMessage();
  475.   ensure_equals("Ensure MVT_S32 data works in a message copied from legacy to llsd",
  476.   output["testBlock"][0]["testBinData"].asInteger(), data);
  477. }
  478. // MVT_S64 - crush into an s32: LLSD does not support 64 bit values
  479. template<> template<>
  480. void LLSDMessageBuilderTestObject::test<31>()
  481. {
  482.   S64 data = -31003100;
  483.   addValue(messageBlockData, (char *)"testBinData", &data, MVT_S64, sizeof(data));
  484.   messageData->addBlock(messageBlockData);
  485.   LLSDMessageBuilder builder = defaultBuilder();
  486.   
  487.   builder.copyFromMessageData(*messageData);
  488.   LLSD output = builder.getMessage();
  489.   ensure_equals("Ensure MVT_S64 data works in a message copied from legacy to llsd",
  490.   output["testBlock"][0]["testBinData"].asInteger(), (S32)data);
  491. }
  492. // MVT_F32
  493. template<> template<>
  494. void LLSDMessageBuilderTestObject::test<32>()
  495. {
  496.   F32 data = 1234.1234f;
  497.   addValue(messageBlockData, (char *)"testBinData", &data, MVT_F32, sizeof(data));
  498.   messageData->addBlock(messageBlockData);
  499.   LLSDMessageBuilder builder = defaultBuilder();
  500.   
  501.   builder.copyFromMessageData(*messageData);
  502.   LLSD output = builder.getMessage();
  503.   ensure_equals("Ensure MVT_F32 data works in a message copied from legacy to llsd",
  504.   output["testBlock"][0]["testBinData"].asReal(), data);
  505. }
  506. // MVT_F64
  507. template<> template<>
  508. void LLSDMessageBuilderTestObject::test<33>()
  509. {
  510.   F64 data = 1234.1234;
  511.   addValue(messageBlockData, (char *)"testBinData", &data, MVT_F64, sizeof(data));
  512.   messageData->addBlock(messageBlockData);
  513.   LLSDMessageBuilder builder = defaultBuilder();
  514.   
  515.   builder.copyFromMessageData(*messageData);
  516.   LLSD output = builder.getMessage();
  517.   ensure_equals("Ensure MVT_F64 data works in a message copied from legacy to llsd",
  518.   output["testBlock"][0]["testBinData"].asReal(), data);
  519. }
  520. // MVT_LLVector3
  521. template<> template<>
  522. void LLSDMessageBuilderTestObject::test<34>()
  523. {
  524.   LLVector3 data(1,2,3);
  525.   addValue(messageBlockData, (char *)"testBinData", &data, MVT_LLVector3, sizeof(data));
  526.   messageData->addBlock(messageBlockData);
  527.   LLSDMessageBuilder builder = defaultBuilder();
  528.   
  529.   builder.copyFromMessageData(*messageData);
  530.   LLSD output = builder.getMessage();
  531.   ensure_equals("Ensure MVT_LLVector3 data works in a message copied from legacy to llsd",
  532.   ll_vector3_from_sd(output["testBlock"][0]["testBinData"]), data);
  533. }
  534. // MVT_LLVector3d
  535. template<> template<>
  536. void LLSDMessageBuilderTestObject::test<35>()
  537. {
  538.   LLVector3d data(1,2,3);
  539.   addValue(messageBlockData, (char *)"testBinData", &data, MVT_LLVector3d, sizeof(data));
  540.   messageData->addBlock(messageBlockData);
  541.   LLSDMessageBuilder builder = defaultBuilder();
  542.   
  543.   builder.copyFromMessageData(*messageData);
  544.   LLSD output = builder.getMessage();
  545.   ensure_equals("Ensure MVT_LLVector3 data works in a message copied from legacy to llsd",
  546.   ll_vector3d_from_sd(output["testBlock"][0]["testBinData"]), data);
  547. }
  548. // MVT_LLVector4
  549. template<> template<>
  550. void LLSDMessageBuilderTestObject::test<36>()
  551. {
  552.   LLVector4 data(1,2,3,4);
  553.   LLSD v = ll_sd_from_vector4(data);
  554.   addValue(messageBlockData, (char *)"testBinData", &data, MVT_LLVector4, sizeof(data));
  555.   messageData->addBlock(messageBlockData);
  556.   LLSDMessageBuilder builder = defaultBuilder();
  557.   
  558.   builder.copyFromMessageData(*messageData);
  559.   LLSD output = builder.getMessage();
  560.   ensure_equals("Ensure MVT_LLVector4 data works in a message copied from legacy to llsd",
  561.   output["testBlock"][0]["testBinData"], v);
  562. }
  563. // MVT_LLQuaternion
  564. template<> template<>
  565. void LLSDMessageBuilderTestObject::test<37>()
  566. {
  567.   LLQuaternion data(1,2,3,0);
  568.   //we send a quaternion packed into a vec3 (w is infered) - so sizeof(vec) == 12 bytes not 16.
  569.   LLVector3 vec = data.packToVector3();
  570.   addValue(messageBlockData, (char *)"testBinData", &vec, MVT_LLQuaternion, sizeof(vec));
  571.   messageData->addBlock(messageBlockData);
  572.   LLSDMessageBuilder builder = defaultBuilder();
  573.   
  574.   builder.copyFromMessageData(*messageData);
  575.   LLSD output = builder.getMessage();
  576.   ensure_equals("Ensure MVT_LLQuaternion data works in a message copied from legacy to llsd",
  577.   ll_quaternion_from_sd(output["testBlock"][0]["testBinData"]), data);
  578. }
  579. // MVT_LLUUID
  580. template<> template<>
  581. void LLSDMessageBuilderTestObject::test<38>()
  582. {
  583.   LLUUID data("01234567-0123-0123-0123-234567abcdef");
  584.   addValue(messageBlockData, (char *)"testBinData", &data, MVT_LLUUID, sizeof(data));
  585.   messageData->addBlock(messageBlockData);
  586.   LLSDMessageBuilder builder = defaultBuilder();
  587.   
  588.   builder.copyFromMessageData(*messageData);
  589.   LLSD output = builder.getMessage();
  590.  
  591.   std::string v = output["testBlock"][0]["testBinData"].asUUID().asString();
  592.   ensure_equals("Ensure MVT_LLUUID data works in a message copied from legacy to llsd",
  593.   output["testBlock"][0]["testBinData"].asUUID(), data);
  594. }
  595. // MVT_BOOL
  596. template<> template<>
  597. void LLSDMessageBuilderTestObject::test<39>()
  598. {
  599.   BOOL valueTrue = true;
  600.   BOOL valueFalse = false;
  601.   LLMsgData* md = new LLMsgData("testMessage");
  602.   LLMsgBlkData* mbd = new LLMsgBlkData("testBlock", 0);
  603.   addValue(mbd, (char *)"testBoolFalse", &valueFalse, MVT_BOOL, sizeof(BOOL));
  604.   addValue(mbd, (char *)"testBoolTrue", &valueTrue, MVT_BOOL, sizeof(BOOL));
  605.   md->addBlock(mbd);
  606.   LLSDMessageBuilder builder = defaultBuilder();
  607.   
  608.   builder.copyFromMessageData(*md);
  609.   LLSD output = builder.getMessage();
  610.   ensure("Ensure bools work in a message copied from legacy to llsd",
  611.   output["testBlock"][0]["testBoolTrue"].asBoolean() && !output["testBlock"][0]["testBoolFalse"].asBoolean());
  612. }
  613. // MVT_IP_ADDR
  614. template<> template<>
  615. void LLSDMessageBuilderTestObject::test<40>()
  616. {
  617.   U32 data(0xff887766);
  618.   LLSD v = ll_sd_from_ipaddr(data);
  619.   addValue(messageBlockData, (char *)"testBinData", &data, MVT_IP_ADDR, sizeof(data));
  620.   messageData->addBlock(messageBlockData);
  621.   LLSDMessageBuilder builder = defaultBuilder();
  622.   
  623.   builder.copyFromMessageData(*messageData);
  624.   LLSD output = builder.getMessage();
  625.   ensure_equals("Ensure MVT_IP_ADDR data works in a message copied from legacy to llsd",
  626.   output["testBlock"][0]["testBinData"], v);
  627. }
  628. // MVT_IP_PORT
  629. template<> template<>
  630. void LLSDMessageBuilderTestObject::test<41>()
  631. {
  632.   U16 data = 0xff88;
  633.   addValue(messageBlockData, (char *)"testBinData", &data, MVT_IP_PORT, sizeof(data));
  634.   messageData->addBlock(messageBlockData);
  635.   LLSDMessageBuilder builder = defaultBuilder();
  636.   
  637.   builder.copyFromMessageData(*messageData);
  638.   LLSD output = builder.getMessage();
  639.   ensure_equals("Ensure MVT_IP_PORT data works in a message copied from legacy to llsd",
  640.   output["testBlock"][0]["testBinData"].asInteger(), data);
  641. }
  642. // MVT_U16Vec3
  643. template<> template<>
  644. void LLSDMessageBuilderTestObject::test<42>()
  645. {
  646.   U16 data[3] = {0,1,2};
  647.   addValue(messageBlockData, (char *)"testBinData", &data, MVT_U16Vec3, sizeof(data));
  648.   messageData->addBlock(messageBlockData);
  649.   LLSDMessageBuilder builder = defaultBuilder();
  650.   
  651.   builder.copyFromMessageData(*messageData);
  652.   LLSD output = builder.getMessage();
  653.   std::vector<U8> v = output["testBlock"][0]["testBinData"].asBinary();
  654.   ensure("Ensure MVT_U16Vec3 data copied from legacy to llsd give a valid vector", v.size() > 0);
  655.   ensure_memory_matches("Ensure MVT_U16Vec3 data works in a message copied from legacy to llsd",
  656.   (U16*)&v[0], 6, data, 6);
  657. }
  658. // MVT_U16Quat
  659. template<> template<>
  660. void LLSDMessageBuilderTestObject::test<43>()
  661. {
  662.   U16 data[4] = {0,1,2,4};
  663.   addValue(messageBlockData, (char *)"testBinData", &data, MVT_U16Quat, sizeof(data));
  664.   messageData->addBlock(messageBlockData);
  665.   LLSDMessageBuilder builder = defaultBuilder();
  666.   
  667.   builder.copyFromMessageData(*messageData);
  668.   LLSD output = builder.getMessage();
  669.   std::vector<U8> v = output["testBlock"][0]["testBinData"].asBinary();
  670.   ensure("Ensure MVT_U16Quat data copied from legacy to llsd give a valid vector", v.size() > 0);
  671.   ensure_memory_matches("Ensure MVT_U16Quat data works in a message copied from legacy to llsd",
  672.   (U16*)&v[0], 8, data, 8);
  673. }
  674. // MVT_S16Array
  675. template<> template<>
  676. void LLSDMessageBuilderTestObject::test<44>()
  677. {
  678.   S16 data[19] = {0,-1,2,-4,5,-6,7,-8,9,-10,11,-12,13,-14,15,16,17,18};
  679.   addValue(messageBlockData, (char *)"testBinData", &data, MVT_S16Array, sizeof(data));
  680.   messageData->addBlock(messageBlockData);
  681.   LLSDMessageBuilder builder = defaultBuilder();
  682.   
  683.   builder.copyFromMessageData(*messageData);
  684.   LLSD output = builder.getMessage();
  685.   std::vector<U8> v = output["testBlock"][0]["testBinData"].asBinary();
  686.   ensure("Ensure MVT_S16Array data copied from legacy to llsd give a valid vector", v.size() > 0);
  687.   ensure_memory_matches("Ensure MVT_S16Array data works in a message copied from legacy to llsd",
  688.   (U16*)&v[0], 19, data, 19);
  689. }
  690. template<> template<>
  691. void LLSDMessageBuilderTestObject::test<45>()
  692. {
  693. LLMessageTemplate messageTemplate = defaultTemplate();
  694. messageTemplate.addBlock(defaultTemplateBlock(MVT_U8, 1));
  695. U8 inValue = 2;
  696. LLTemplateMessageBuilder* template_builder = defaultTemplateBuilder(messageTemplate);
  697. template_builder->addU8(_PREHASH_Test0, inValue);
  698. LLSDMessageBuilder builder;
  699. builder.copyFromMessageData(*template_builder->getCurrentMessage());
  700. LLSD output = builder.getMessage();
  701. ensure_equals(output["Test0"][0]["Test0"].asInteger(), 2);
  702. }
  703. template<> template<>
  704. void LLSDMessageBuilderTestObject::test<46>()
  705. {
  706. LLMessageTemplate messageTemplate = defaultTemplate();
  707. messageTemplate.addBlock(defaultTemplateBlock(MVT_VARIABLE, 1));
  708. std::string inValue = "testing";
  709. LLTemplateMessageBuilder* builder = defaultTemplateBuilder(messageTemplate);
  710. builder->addString(_PREHASH_Test0, inValue.c_str());
  711. LLSDMessageBuilder sd_builder;
  712. sd_builder.copyFromMessageData(*builder->getCurrentMessage());
  713. LLSD output = sd_builder.getMessage();
  714. ensure_equals(output["Test0"][0]["Test0"].asString(), std::string("testing"));
  715. }
  716. }