/DotNet/Source/ProtoBufRemote.Test/ParameterConverterTest.cs

https://code.google.com/p/protobuf-remote/ · C# · 370 lines · 320 code · 46 blank · 4 comment · 0 complexity · 2c8077ac98d957f72dd5bfabe61758ab MD5 · raw file

  1. using System.IO;
  2. using System.Linq;
  3. using NUnit.Framework;
  4. using ProtoBuf;
  5. namespace ProtoBufRemote.Test
  6. {
  7. [TestFixture]
  8. public class ParameterConverterTest
  9. {
  10. private RpcMessage.Parameter message;
  11. string errorMsg;
  12. object param;
  13. [SetUp]
  14. public void Init()
  15. {
  16. message = new RpcMessage.Parameter();
  17. }
  18. //======================================================================================================
  19. //======================================================================================================
  20. [Test]
  21. public void FromMessageBoolTest()
  22. {
  23. bool boolParam = false;
  24. Assert.That(ParameterConverter.FromMessage(message, typeof(bool), out param, out errorMsg), Is.False);
  25. Assert.That(ParameterConverter.BoolFromMessage(message, ref boolParam, ref errorMsg), Is.False);
  26. message.BoolParam = true;
  27. Assert.That(ParameterConverter.FromMessage(message, typeof(bool), out param, out errorMsg), Is.True);
  28. Assert.That(param, Is.True);
  29. Assert.That(ParameterConverter.BoolFromMessage(message, ref boolParam, ref errorMsg), Is.True);
  30. Assert.That(boolParam, Is.True);
  31. }
  32. [Test]
  33. public void FromMessageByteTest()
  34. {
  35. Assert.That(ParameterConverter.FromMessage(message, typeof(byte), out param, out errorMsg), Is.False);
  36. message.UintParam = 42;
  37. Assert.That(ParameterConverter.FromMessage(message, typeof(byte), out param, out errorMsg), Is.True);
  38. Assert.That(param, Is.EqualTo(42));
  39. }
  40. [Test]
  41. public void FromMessageSbyteTest()
  42. {
  43. Assert.That(ParameterConverter.FromMessage(message, typeof(sbyte), out param, out errorMsg), Is.False);
  44. message.IntParam = -42;
  45. Assert.That(ParameterConverter.FromMessage(message, typeof(sbyte), out param, out errorMsg), Is.True);
  46. Assert.That(param, Is.EqualTo(-42));
  47. }
  48. [Test]
  49. public void FromMessageCharTest()
  50. {
  51. Assert.That(ParameterConverter.FromMessage(message, typeof(char), out param, out errorMsg), Is.False);
  52. message.UintParam = 'a';
  53. Assert.That(ParameterConverter.FromMessage(message, typeof(char), out param, out errorMsg), Is.True);
  54. Assert.That(param, Is.EqualTo('a'));
  55. }
  56. [Test]
  57. public void FromMessageShortTest()
  58. {
  59. Assert.That(ParameterConverter.FromMessage(message, typeof(short), out param, out errorMsg), Is.False);
  60. message.IntParam = -42;
  61. Assert.That(ParameterConverter.FromMessage(message, typeof(short), out param, out errorMsg), Is.True);
  62. Assert.That(param, Is.EqualTo(-42));
  63. }
  64. [Test]
  65. public void FromMessageUshortTest()
  66. {
  67. Assert.That(ParameterConverter.FromMessage(message, typeof(ushort), out param, out errorMsg), Is.False);
  68. message.UintParam = 42;
  69. Assert.That(ParameterConverter.FromMessage(message, typeof(ushort), out param, out errorMsg), Is.True);
  70. Assert.That(param, Is.EqualTo(42));
  71. }
  72. [Test]
  73. public void FromMessageIntTest()
  74. {
  75. int intParam = 0;
  76. Assert.That(ParameterConverter.FromMessage(message, typeof(int), out param, out errorMsg), Is.False);
  77. Assert.That(ParameterConverter.IntFromMessage(message, ref intParam, ref errorMsg), Is.False);
  78. message.IntParam = -42;
  79. Assert.That(ParameterConverter.FromMessage(message, typeof(int), out param, out errorMsg), Is.True);
  80. Assert.That(param, Is.EqualTo(-42));
  81. Assert.That(ParameterConverter.IntFromMessage(message, ref intParam, ref errorMsg), Is.True);
  82. Assert.That(intParam, Is.EqualTo(-42));
  83. }
  84. [Test]
  85. public void FromMessageUintTest()
  86. {
  87. uint uintParam = 0;
  88. Assert.That(ParameterConverter.FromMessage(message, typeof(uint), out param, out errorMsg), Is.False);
  89. Assert.That(ParameterConverter.UintFromMessage(message, ref uintParam, ref errorMsg), Is.False);
  90. message.UintParam = 42;
  91. Assert.That(ParameterConverter.FromMessage(message, typeof(uint), out param, out errorMsg), Is.True);
  92. Assert.That(param, Is.EqualTo(42));
  93. Assert.That(ParameterConverter.UintFromMessage(message, ref uintParam, ref errorMsg), Is.True);
  94. Assert.That(uintParam, Is.EqualTo(42));
  95. }
  96. [Test]
  97. public void FromMessageLongTest()
  98. {
  99. long longParam = 0;
  100. Assert.That(ParameterConverter.FromMessage(message, typeof(long), out param, out errorMsg), Is.False);
  101. Assert.That(ParameterConverter.Int64FromMessage(message, ref longParam, ref errorMsg), Is.False);
  102. message.Int64Param = -42000000000;
  103. Assert.That(ParameterConverter.FromMessage(message, typeof(long), out param, out errorMsg), Is.True);
  104. Assert.That(param, Is.EqualTo(-42000000000));
  105. Assert.That(ParameterConverter.Int64FromMessage(message, ref longParam, ref errorMsg), Is.True);
  106. Assert.That(longParam, Is.EqualTo(-42000000000));
  107. }
  108. [Test]
  109. public void FromMessageUlongTest()
  110. {
  111. ulong ulongParam = 0;
  112. Assert.That(ParameterConverter.FromMessage(message, typeof(ulong), out param, out errorMsg), Is.False);
  113. Assert.That(ParameterConverter.Uint64FromMessage(message, ref ulongParam, ref errorMsg), Is.False);
  114. message.Uint64Param = 42000000000;
  115. Assert.That(ParameterConverter.FromMessage(message, typeof(ulong), out param, out errorMsg), Is.True);
  116. Assert.That(param, Is.EqualTo(42000000000));
  117. Assert.That(ParameterConverter.Uint64FromMessage(message, ref ulongParam, ref errorMsg), Is.True);
  118. Assert.That(ulongParam, Is.EqualTo(42000000000));
  119. }
  120. [Test]
  121. public void FromMessageFloatTest()
  122. {
  123. float floatParam = 0.0f;
  124. Assert.That(ParameterConverter.FromMessage(message, typeof(float), out param, out errorMsg), Is.False);
  125. Assert.That(ParameterConverter.FloatFromMessage(message, ref floatParam, ref errorMsg), Is.False);
  126. message.FloatParam = 42.0f;
  127. Assert.That(ParameterConverter.FromMessage(message, typeof(float), out param, out errorMsg), Is.True);
  128. Assert.That(param, Is.EqualTo(42.0f));
  129. Assert.That(ParameterConverter.FloatFromMessage(message, ref floatParam, ref errorMsg), Is.True);
  130. Assert.That(floatParam, Is.EqualTo(42.0f));
  131. }
  132. [Test]
  133. public void FromMessageDoubleTest()
  134. {
  135. double doubleParam = 0.0;
  136. Assert.That(ParameterConverter.FromMessage(message, typeof(double), out param, out errorMsg), Is.False);
  137. Assert.That(ParameterConverter.DoubleFromMessage(message, ref doubleParam, ref errorMsg), Is.False);
  138. message.DoubleParam = 42.0;
  139. Assert.That(ParameterConverter.FromMessage(message, typeof(double), out param, out errorMsg), Is.True);
  140. Assert.That(param, Is.EqualTo(42.0));
  141. Assert.That(ParameterConverter.DoubleFromMessage(message, ref doubleParam, ref errorMsg), Is.True);
  142. Assert.That(doubleParam, Is.EqualTo(42.0));
  143. }
  144. [Test]
  145. public void FromMessageStringTest()
  146. {
  147. string stringParam = null;
  148. Assert.That(ParameterConverter.FromMessage(message, typeof(string), out param, out errorMsg), Is.False);
  149. Assert.That(ParameterConverter.StringFromMessage(message, ref stringParam, ref errorMsg), Is.False);
  150. message.StringParam = "Hello";
  151. Assert.That(ParameterConverter.FromMessage(message, typeof(string), out param, out errorMsg), Is.True);
  152. Assert.That(param, Is.EqualTo("Hello"));
  153. Assert.That(ParameterConverter.StringFromMessage(message, ref stringParam, ref errorMsg), Is.True);
  154. Assert.That(stringParam, Is.EqualTo("Hello"));
  155. }
  156. [Test]
  157. public void FromMessageNullStringTest()
  158. {
  159. message.IsNull = true;
  160. Assert.That(ParameterConverter.FromMessage(message, typeof(string), out param, out errorMsg), Is.True);
  161. Assert.That(param, Is.EqualTo(null));
  162. }
  163. [Test]
  164. public void FromMessageProtoTest()
  165. {
  166. Assert.That(ParameterConverter.FromMessage(message, typeof(MultiplyInput), out param, out errorMsg), Is.False);
  167. Assert.That(ParameterConverter.ProtoFromMessage(message, typeof(MultiplyInput), ref param, ref errorMsg), Is.False);
  168. var messageParam = new MultiplyInput();
  169. messageParam.FirstNumber = 10;
  170. messageParam.SecondNumber = 11;
  171. messageParam.Prefix = "Test";
  172. var memStream = new MemoryStream();
  173. Serializer.Serialize(memStream, messageParam);
  174. message.ProtoParam = memStream.ToArray();
  175. Assert.That(ParameterConverter.FromMessage(message, typeof(MultiplyInput), out param, out errorMsg), Is.True);
  176. MultiplyInput result = (MultiplyInput)param;
  177. Assert.That(result.FirstNumber, Is.EqualTo(10));
  178. Assert.That(result.SecondNumber, Is.EqualTo(11));
  179. Assert.That(result.Prefix, Is.EqualTo("Test"));
  180. Assert.That(ParameterConverter.ProtoFromMessage(message, typeof(MultiplyInput), ref param, ref errorMsg), Is.True);
  181. result = (MultiplyInput)param;
  182. Assert.That(result.FirstNumber, Is.EqualTo(10));
  183. Assert.That(result.SecondNumber, Is.EqualTo(11));
  184. Assert.That(result.Prefix, Is.EqualTo("Test"));
  185. }
  186. [Test]
  187. public void FromMessageNullProtoTest()
  188. {
  189. message.IsNull = true;
  190. Assert.That(ParameterConverter.FromMessage(message, typeof(MultiplyInput), out param, out errorMsg), Is.True);
  191. Assert.That(param, Is.EqualTo(null));
  192. }
  193. [Test]
  194. public void FromMessageNullValueTypeFailureTest()
  195. {
  196. message.IsNull = true;
  197. Assert.That(ParameterConverter.FromMessage(message, typeof(int), out param, out errorMsg), Is.False);
  198. }
  199. [Test]
  200. public void FromMessageUnsupportedValueTypeFailureTest()
  201. {
  202. message.IsNull = true;
  203. Assert.That(ParameterConverter.FromMessage(message, typeof(decimal), out param, out errorMsg), Is.False);
  204. }
  205. class NonProtoClass
  206. {
  207. }
  208. [Test]
  209. public void FromMessageNonProtoFailureTest()
  210. {
  211. message.ProtoParam = new byte[10];
  212. Assert.That(ParameterConverter.FromMessage(message, typeof(NonProtoClass), out param, out errorMsg), Is.False);
  213. }
  214. [Test]
  215. public void FromMessageProtoMissingFailureTest()
  216. {
  217. message.IntParam = 10;
  218. Assert.That(ParameterConverter.FromMessage(message, typeof(MultiplyInput), out param, out errorMsg), Is.False);
  219. }
  220. //======================================================================================================
  221. //======================================================================================================
  222. [Test]
  223. public void ToMessageNullTest()
  224. {
  225. Assert.That(ParameterConverter.ToMessage(null, out message, out errorMsg), Is.True);
  226. Assert.That(message.IsNull, Is.True);
  227. }
  228. [Test]
  229. public void ToMessageBoolTest()
  230. {
  231. Assert.That(ParameterConverter.ToMessage(true, out message, out errorMsg), Is.True);
  232. Assert.That(message.BoolParam, Is.True);
  233. }
  234. [Test]
  235. public void ToMessageSbyteTest()
  236. {
  237. Assert.That(ParameterConverter.ToMessage((sbyte)-42, out message, out errorMsg), Is.True);
  238. Assert.That(message.IntParam, Is.EqualTo(-42));
  239. }
  240. [Test]
  241. public void ToMessageByteTest()
  242. {
  243. Assert.That(ParameterConverter.ToMessage((byte)42, out message, out errorMsg), Is.True);
  244. Assert.That(message.UintParam, Is.EqualTo(42));
  245. }
  246. [Test]
  247. public void ToMessageCharTest()
  248. {
  249. Assert.That(ParameterConverter.ToMessage('a', out message, out errorMsg), Is.True);
  250. Assert.That((char)message.UintParam, Is.EqualTo('a'));
  251. }
  252. [Test]
  253. public void ToMessageShortTest()
  254. {
  255. Assert.That(ParameterConverter.ToMessage((short)-42, out message, out errorMsg), Is.True);
  256. Assert.That(message.IntParam, Is.EqualTo(-42));
  257. }
  258. [Test]
  259. public void ToMessageUshortTest()
  260. {
  261. Assert.That(ParameterConverter.ToMessage((ushort)42, out message, out errorMsg), Is.True);
  262. Assert.That(message.UintParam, Is.EqualTo(42));
  263. }
  264. [Test]
  265. public void ToMessageIntTest()
  266. {
  267. Assert.That(ParameterConverter.ToMessage((int)-42, out message, out errorMsg), Is.True);
  268. Assert.That(message.IntParam, Is.EqualTo(-42));
  269. }
  270. [Test]
  271. public void ToMessageUintTest()
  272. {
  273. Assert.That(ParameterConverter.ToMessage((uint)42, out message, out errorMsg), Is.True);
  274. Assert.That(message.UintParam, Is.EqualTo(42));
  275. }
  276. [Test]
  277. public void ToMessageInt64Test()
  278. {
  279. Assert.That(ParameterConverter.ToMessage((long)-42000000000, out message, out errorMsg), Is.True);
  280. Assert.That(message.Int64Param, Is.EqualTo(-42000000000));
  281. }
  282. [Test]
  283. public void ToMessageUint64Test()
  284. {
  285. Assert.That(ParameterConverter.ToMessage((ulong)42000000000, out message, out errorMsg), Is.True);
  286. Assert.That(message.Uint64Param, Is.EqualTo(42000000000));
  287. }
  288. [Test]
  289. public void ToMessageFloatTest()
  290. {
  291. Assert.That(ParameterConverter.ToMessage(42.0f, out message, out errorMsg), Is.True);
  292. Assert.That(message.FloatParam, Is.EqualTo(42.0f));
  293. }
  294. [Test]
  295. public void ToMessageDoubleTest()
  296. {
  297. Assert.That(ParameterConverter.ToMessage(42.0, out message, out errorMsg), Is.True);
  298. Assert.That(message.DoubleParam, Is.EqualTo(42.0));
  299. }
  300. [Test]
  301. public void ToMessageStringTest()
  302. {
  303. Assert.That(ParameterConverter.ToMessage("Hello", out message, out errorMsg), Is.True);
  304. Assert.That(message.StringParam, Is.EqualTo("Hello"));
  305. }
  306. [Test]
  307. public void ToMessageProtoTest()
  308. {
  309. var inputMessage = new MultiplyInput();
  310. inputMessage.FirstNumber = 20;
  311. inputMessage.SecondNumber = 21;
  312. inputMessage.Prefix = "Test";
  313. var memStream = new MemoryStream();
  314. Serializer.Serialize(memStream, inputMessage);
  315. Assert.That(ParameterConverter.ToMessage(inputMessage, out message, out errorMsg), Is.True);
  316. Assert.That(message.ProtoParam.SequenceEqual(memStream.ToArray()), Is.True);
  317. }
  318. [Test]
  319. public void ToMessageUnsupportedTypeTest()
  320. {
  321. Assert.That(!ParameterConverter.ToMessage((decimal)10.0, out message, out errorMsg), Is.True);
  322. }
  323. }
  324. }