00001
00033 #include <tut/tut.h>
00034 #include "linden_common.h"
00035 #include "lltut.h"
00036
00037 #include "message.h"
00038 #include "llsdmessagereader.h"
00039 #include "llsdutil.h"
00040
00041 namespace tut
00042 {
00043 struct LLSDMessageReaderTestData {
00044 static void ensureMessageName(const std::string& msg_name,
00045 const LLSD& msg_data,
00046 const std::string& expected_name)
00047 {
00048 LLSDMessageReader msg;
00049 msg.setMessage(gMessageStringTable.getString(msg_name.c_str()), msg_data);
00050 ensure_equals("Ensure name", std::string(msg.getMessageName()),
00051 expected_name);
00052 }
00053
00054 static void ensureNumberOfBlocks(const LLSD& msg_data,
00055 const std::string& block,
00056 S32 expected_number)
00057 {
00058 LLSDMessageReader msg;
00059 msg.setMessage("fakename", msg_data);
00060 ensure_equals("Ensure number of blocks", msg.getNumberOfBlocks(block.c_str()),
00061 expected_number);
00062 }
00063
00064 static void ensureMessageSize(const LLSD& msg_data,
00065 S32 expected_size)
00066 {
00067 LLSDMessageReader msg;
00068 msg.setMessage("fakename", msg_data);
00069 ensure_equals( "Ensure size", msg.getMessageSize(), expected_size);
00070 }
00071
00072 static void ensureBool(const LLSD& msg_data,
00073 const std::string& block,
00074 const std::string& var,
00075 S32 blocknum,
00076 BOOL expected)
00077 {
00078 LLSDMessageReader msg;
00079 msg.setMessage("fakename", msg_data);
00080 BOOL test_data;
00081 msg.getBOOL(block.c_str(), var.c_str(), test_data, blocknum);
00082 ensure_equals( "Ensure bool field", test_data, expected);
00083 }
00084 };
00085
00086 typedef test_group<LLSDMessageReaderTestData> LLSDMessageReaderTestGroup;
00087 typedef LLSDMessageReaderTestGroup::object LLSDMessageReaderTestObject;
00088 LLSDMessageReaderTestGroup llsdMessageReaderTestGroup("LLSDMessageReader");
00089
00090 template<> template<>
00091 void LLSDMessageReaderTestObject::test<1>()
00092
00093 {
00094 LLSD message = LLSD::emptyMap();
00095
00096 ensureMessageName("", message, "");
00097 ensureNumberOfBlocks(message, "Fakeblock", 0);
00098 ensureMessageSize(message, 0);
00099 }
00100
00101 template<> template<>
00102 void LLSDMessageReaderTestObject::test<2>()
00103
00104 {
00105 LLSD message = LLSD::emptyMap();
00106 message["block1"] = LLSD::emptyArray();
00107 message["block1"][0] = LLSD::emptyMap();
00108 message["block1"][0]["Field1"] = 0;
00109
00110 ensureMessageName("name2", message, "name2");
00111 ensureNumberOfBlocks(message, "block1", 1);
00112 ensureMessageSize(message, 0);
00113 }
00114
00115 template<> template<>
00116 void LLSDMessageReaderTestObject::test<3>()
00117
00118 {
00119 LLSD message = LLSD::emptyMap();
00120 message["block1"] = LLSD::emptyArray();
00121 BOOL bool_true = TRUE;
00122 BOOL bool_false = FALSE;
00123 message["block1"][0] = LLSD::emptyMap();
00124 message["block1"][0]["BoolField1"] = bool_true;
00125 message["block1"][1] = LLSD::emptyMap();
00126 message["block1"][1]["BoolField1"] = bool_false;
00127 message["block1"][1]["BoolField2"] = bool_true;
00128
00129 ensureMessageName("name3", message, "name3");
00130 ensureBool(message, "block1", "BoolField1", 0, TRUE);
00131 ensureBool(message, "block1", "BoolField1", 1, FALSE);
00132 ensureBool(message, "block1", "BoolField2", 1, TRUE);
00133 ensureNumberOfBlocks(message, "block1", 2);
00134 ensureMessageSize(message, 0);
00135 }
00136
00137 template<typename T>
00138 LLSDMessageReader testType(const T& value)
00139 {
00140 LLSD message = LLSD::emptyMap();
00141 message["block"][0]["var"] = value;
00142 LLSDMessageReader msg;
00143 msg.setMessage("fakename", message);
00144 return msg;
00145 }
00146
00147 template<> template<>
00148 void LLSDMessageReaderTestObject::test<4>()
00149
00150 {
00151 S8 outValue, inValue = -3;
00152 LLSDMessageReader msg = testType(inValue);
00153 msg.getS8("block", "var", outValue);
00154 ensure_equals("Ensure S8", outValue, inValue);
00155 }
00156 template<> template<>
00157 void
00158 LLSDMessageReaderTestObject::test<5>()
00159
00160 {
00161 U8 outValue, inValue = 2;
00162 LLSDMessageReader msg = testType(inValue);
00163 msg.getU8("block", "var", outValue);
00164 ensure_equals("Ensure U8", outValue, inValue);
00165 }
00166 template<> template<>
00167 void LLSDMessageReaderTestObject::test<6>()
00168
00169 {
00170 S16 outValue, inValue = 90;
00171 LLSDMessageReader msg = testType(inValue);
00172 msg.getS16("block", "var", outValue);
00173 ensure_equals("Ensure S16", outValue, inValue);
00174 }
00175 template<> template<>
00176 void LLSDMessageReaderTestObject::test<7>()
00177
00178 {
00179 U16 outValue, inValue = 3;
00180 LLSDMessageReader msg = testType(inValue);
00181 msg.getU16("block", "var", outValue);
00182 ensure_equals("Ensure S16", outValue, inValue);
00183 }
00184 template<> template<>
00185 void LLSDMessageReaderTestObject::test<8>()
00186
00187 {
00188 S32 outValue, inValue = 44;
00189 LLSDMessageReader msg = testType(inValue);
00190 msg.getS32("block", "var", outValue);
00191 ensure_equals("Ensure S32", outValue, inValue);
00192 }
00193 template<> template<>
00194 void LLSDMessageReaderTestObject::test<9>()
00195
00196 {
00197 F32 outValue, inValue = 121.44f;
00198 LLSDMessageReader msg = testType(inValue);
00199 msg.getF32("block", "var", outValue);
00200 ensure_equals("Ensure F32", outValue, inValue);
00201 }
00202 template<> template<>
00203 void LLSDMessageReaderTestObject::test<10>()
00204
00205 {
00206 U32 outValue, inValue = 88;
00207 LLSD sdValue = ll_sd_from_U32(inValue);
00208 LLSDMessageReader msg = testType(sdValue);
00209 msg.getU32("block", "var", outValue);
00210 ensure_equals("Ensure U32", outValue, inValue);
00211 }
00212 template<> template<>
00213 void LLSDMessageReaderTestObject::test<11>()
00214
00215 {
00216 U64 outValue, inValue = 121;
00217 LLSD sdValue = ll_sd_from_U64(inValue);
00218 LLSDMessageReader msg = testType(sdValue);
00219 msg.getU64("block", "var", outValue);
00220 ensure_equals("Ensure U64", outValue, inValue);
00221 }
00222 template<> template<>
00223 void LLSDMessageReaderTestObject::test<12>()
00224
00225 {
00226 F64 outValue, inValue = 3232143.33;
00227 LLSDMessageReader msg = testType(inValue);
00228 msg.getF64("block", "var", outValue);
00229 ensure_equals("Ensure F64", outValue, inValue);
00230 }
00231 template<> template<>
00232 void LLSDMessageReaderTestObject::test<13>()
00233
00234 {
00235 std::string outValue, inValue = "testing";
00236 LLSDMessageReader msg = testType<std::string>(inValue.c_str());
00237
00238 char buffer[MAX_STRING];
00239 msg.getString("block", "var", MAX_STRING, buffer);
00240 outValue = buffer;
00241 ensure_equals("Ensure String", outValue, inValue);
00242 }
00243 template<> template<>
00244 void LLSDMessageReaderTestObject::test<14>()
00245
00246 {
00247 LLVector3 outValue, inValue = LLVector3(1,2,3);
00248 LLSD sdValue = ll_sd_from_vector3(inValue);
00249 LLSDMessageReader msg = testType(sdValue);
00250 msg.getVector3("block", "var", outValue);
00251 ensure_equals("Ensure Vector3", outValue, inValue);
00252 }
00253 template<> template<>
00254 void LLSDMessageReaderTestObject::test<15>()
00255
00256 {
00257 LLVector4 outValue, inValue = LLVector4(1,2,3,4);
00258 LLSD sdValue = ll_sd_from_vector4(inValue);
00259 LLSDMessageReader msg = testType(sdValue);
00260 msg.getVector4("block", "var", outValue);
00261 ensure_equals("Ensure Vector4", outValue, inValue);
00262 }
00263 template<> template<>
00264 void LLSDMessageReaderTestObject::test<16>()
00265
00266 {
00267 LLVector3d outValue, inValue = LLVector3d(1,2,3);
00268 LLSD sdValue = ll_sd_from_vector3d(inValue);
00269 LLSDMessageReader msg = testType(sdValue);
00270 msg.getVector3d("block", "var", outValue);
00271 ensure_equals("Ensure Vector3d", outValue, inValue);
00272 }
00273 template<> template<>
00274 void LLSDMessageReaderTestObject::test<17>()
00275
00276 {
00277 LLQuaternion outValue, inValue = LLQuaternion(1,2,3,4);
00278 LLSD sdValue = ll_sd_from_quaternion(inValue);
00279 LLSDMessageReader msg = testType(sdValue);
00280 msg.getQuat("block", "var", outValue);
00281 ensure_equals("Ensure Quaternion", outValue, inValue);
00282 }
00283 template<> template<>
00284 void LLSDMessageReaderTestObject::test<18>()
00285
00286 {
00287 LLUUID outValue, inValue;
00288 inValue.generate();
00289 LLSDMessageReader msg = testType(inValue);
00290 msg.getUUID("block", "var", outValue);
00291 ensure_equals("Ensure UUID", outValue, inValue);
00292 }
00293 template<> template<>
00294 void LLSDMessageReaderTestObject::test<19>()
00295
00296 {
00297 U32 outValue, inValue = 12344556;
00298 LLSD sdValue = ll_sd_from_ipaddr(inValue);
00299 LLSDMessageReader msg = testType(sdValue);
00300 msg.getIPAddr("block", "var", outValue);
00301 ensure_equals("Ensure IPAddr", outValue, inValue);
00302 }
00303 template<> template<>
00304 void LLSDMessageReaderTestObject::test<20>()
00305
00306 {
00307 U16 outValue, inValue = 80;
00308 LLSDMessageReader msg = testType(inValue);
00309 msg.getIPPort("block", "var", outValue);
00310 ensure_equals("Ensure IPPort", outValue, inValue);
00311 }
00312 template<> template<>
00313 void LLSDMessageReaderTestObject::test<21>()
00314
00315 {
00316 std::vector<U8> outValue(2), inValue(2);
00317 inValue[0] = 0;
00318 inValue[1] = 1;
00319
00320 LLSDMessageReader msg = testType(inValue);
00321 msg.getBinaryData("block", "var", &(outValue[0]), inValue.size());
00322 ensure_equals("Ensure Binary", outValue, inValue);
00323 }
00324 }