PageRenderTime 46ms CodeModel.GetById 15ms RepoModel.GetById 0ms app.codeStats 0ms

/source/library/Interlace.Pinch/Interlace.Pinch.Tests/TestSurrogates.cs

https://bitbucket.org/VahidN/interlace
C# | 608 lines | 462 code | 140 blank | 6 comment | 42 complexity | f2a5b6d72842f85a84a1ec8aac091c9a MD5 | raw file
  1. using System.Collections.Generic;
  2. using System.ComponentModel;
  3. using Interlace.Pinch.Implementation;
  4. namespace Interlace.Pinch.Test
  5. {
  6. public class MyDateTimeSurrogateFactory : IPinchableFactory
  7. {
  8. static MyDateTimeSurrogateFactory _instance = new MyDateTimeSurrogateFactory();
  9. public object Create(IPinchDecodingContext context)
  10. {
  11. return new MyDateTimeSurrogate(context);
  12. }
  13. public static IPinchableFactory Instance
  14. {
  15. get
  16. {
  17. return _instance;
  18. }
  19. }
  20. }
  21. public partial class MyDateTimeSurrogate : IPinchable, INotifyPropertyChanged
  22. {
  23. long _ticks;
  24. static PinchFieldProperties _ticksProperties = new PinchFieldProperties(1, 1, null);
  25. public MyDateTimeSurrogate()
  26. {
  27. }
  28. public MyDateTimeSurrogate(IPinchDecodingContext context)
  29. {
  30. }
  31. public long Ticks
  32. {
  33. get { return _ticks; }
  34. set
  35. {
  36. _ticks = value;
  37. FirePropertyChanged("Ticks");
  38. }
  39. }
  40. int IPinchable.ProtocolVersion
  41. {
  42. get
  43. {
  44. return 1;
  45. }
  46. }
  47. protected virtual void OnAdditionalFutureFields(IPinchDecoder decoder)
  48. {
  49. }
  50. void IPinchable.Encode(IPinchEncoder encoder)
  51. {
  52. encoder.OpenSequence(1);
  53. // Encode fields for version 1:
  54. encoder.EncodeRequiredInt64(_ticks, _ticksProperties);
  55. encoder.CloseSequence();
  56. }
  57. void IPinchable.Decode(IPinchDecoder decoder)
  58. {
  59. int remainingFields = decoder.OpenSequence();
  60. // Decode members for version 1:
  61. if (remainingFields >= 1)
  62. {
  63. _ticks = (long)decoder.DecodeRequiredInt64(_ticksProperties);
  64. remainingFields -= 1;
  65. }
  66. else
  67. {
  68. if (remainingFields != 0) throw new PinchInvalidCodingException();
  69. }
  70. if (remainingFields > 0)
  71. {
  72. OnAdditionalFutureFields(decoder);
  73. decoder.SkipFields(remainingFields);
  74. }
  75. decoder.CloseSequence();
  76. }
  77. #region INotifyPropertyChanged Members
  78. public event PropertyChangedEventHandler PropertyChanged;
  79. protected void FirePropertyChanged(string propertyName)
  80. {
  81. if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
  82. }
  83. #endregion
  84. #region Surrogate Methods
  85. public static MyDateTimeSurrogate ValueToSurrogateOptional(System.DateTime? value)
  86. {
  87. if (value != null)
  88. {
  89. MyDateTimeSurrogate surrogate = MyDateTimeSurrogate.ValueToSurrogate((System.DateTime)value);
  90. if (surrogate == null) throw new PinchNullRequiredFieldException();
  91. return surrogate;
  92. }
  93. else
  94. {
  95. return null;
  96. }
  97. }
  98. public static MyDateTimeSurrogate ValueToSurrogateRequired(System.DateTime value)
  99. {
  100. MyDateTimeSurrogate surrogate = MyDateTimeSurrogate.ValueToSurrogate(value);
  101. if (surrogate == null) throw new PinchNullRequiredFieldException();
  102. return surrogate;
  103. }
  104. public static System.DateTime? SurrogateToValueOptional(MyDateTimeSurrogate surrogate)
  105. {
  106. if (surrogate != null)
  107. {
  108. return MyDateTimeSurrogate.SurrogateToValue(surrogate);
  109. }
  110. else
  111. {
  112. return null;
  113. }
  114. }
  115. public static System.DateTime SurrogateToValueRequired(MyDateTimeSurrogate surrogate)
  116. {
  117. if (surrogate != null)
  118. {
  119. return MyDateTimeSurrogate.SurrogateToValue(surrogate);
  120. }
  121. else
  122. {
  123. throw new PinchNullRequiredFieldException();
  124. }
  125. }
  126. #endregion
  127. }
  128. public class MyUriSurrogateFactory : IPinchableFactory
  129. {
  130. static MyUriSurrogateFactory _instance = new MyUriSurrogateFactory();
  131. public object Create(IPinchDecodingContext context)
  132. {
  133. return new MyUriSurrogate(context);
  134. }
  135. public static IPinchableFactory Instance
  136. {
  137. get
  138. {
  139. return _instance;
  140. }
  141. }
  142. }
  143. public partial class MyUriSurrogate : IPinchable, INotifyPropertyChanged
  144. {
  145. string _address;
  146. static PinchFieldProperties _addressProperties = new PinchFieldProperties(1, 1, null);
  147. public MyUriSurrogate()
  148. {
  149. }
  150. public MyUriSurrogate(IPinchDecodingContext context)
  151. {
  152. }
  153. public string Address
  154. {
  155. get { return _address; }
  156. set
  157. {
  158. _address = value;
  159. FirePropertyChanged("Address");
  160. }
  161. }
  162. int IPinchable.ProtocolVersion
  163. {
  164. get
  165. {
  166. return 1;
  167. }
  168. }
  169. protected virtual void OnAdditionalFutureFields(IPinchDecoder decoder)
  170. {
  171. }
  172. void IPinchable.Encode(IPinchEncoder encoder)
  173. {
  174. encoder.OpenSequence(1);
  175. // Encode fields for version 1:
  176. encoder.EncodeOptionalString(_address, _addressProperties);
  177. encoder.CloseSequence();
  178. }
  179. void IPinchable.Decode(IPinchDecoder decoder)
  180. {
  181. int remainingFields = decoder.OpenSequence();
  182. // Decode members for version 1:
  183. if (remainingFields >= 1)
  184. {
  185. _address = (string)decoder.DecodeOptionalString(_addressProperties);
  186. remainingFields -= 1;
  187. }
  188. else
  189. {
  190. if (remainingFields != 0) throw new PinchInvalidCodingException();
  191. }
  192. if (remainingFields > 0)
  193. {
  194. OnAdditionalFutureFields(decoder);
  195. decoder.SkipFields(remainingFields);
  196. }
  197. decoder.CloseSequence();
  198. }
  199. #region INotifyPropertyChanged Members
  200. public event PropertyChangedEventHandler PropertyChanged;
  201. protected void FirePropertyChanged(string propertyName)
  202. {
  203. if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
  204. }
  205. #endregion
  206. #region Surrogate Methods
  207. public static MyUriSurrogate ValueToSurrogateOptional(System.Uri value)
  208. {
  209. if (value != null)
  210. {
  211. MyUriSurrogate surrogate = MyUriSurrogate.ValueToSurrogate((System.Uri)value);
  212. if (surrogate == null) throw new PinchNullRequiredFieldException();
  213. return surrogate;
  214. }
  215. else
  216. {
  217. return null;
  218. }
  219. }
  220. public static MyUriSurrogate ValueToSurrogateRequired(System.Uri value)
  221. {
  222. MyUriSurrogate surrogate = MyUriSurrogate.ValueToSurrogate(value);
  223. if (surrogate == null) throw new PinchNullRequiredFieldException();
  224. return surrogate;
  225. }
  226. public static System.Uri SurrogateToValueOptional(MyUriSurrogate surrogate)
  227. {
  228. if (surrogate != null)
  229. {
  230. return MyUriSurrogate.SurrogateToValue(surrogate);
  231. }
  232. else
  233. {
  234. return null;
  235. }
  236. }
  237. public static System.Uri SurrogateToValueRequired(MyUriSurrogate surrogate)
  238. {
  239. if (surrogate != null)
  240. {
  241. return MyUriSurrogate.SurrogateToValue(surrogate);
  242. }
  243. else
  244. {
  245. throw new PinchNullRequiredFieldException();
  246. }
  247. }
  248. #endregion
  249. }
  250. public class BucketOfSurrogatesFactory : IPinchableFactory
  251. {
  252. static BucketOfSurrogatesFactory _instance = new BucketOfSurrogatesFactory();
  253. public object Create(IPinchDecodingContext context)
  254. {
  255. return new BucketOfSurrogates(context);
  256. }
  257. public static IPinchableFactory Instance
  258. {
  259. get
  260. {
  261. return _instance;
  262. }
  263. }
  264. }
  265. public partial class BucketOfSurrogates : IPinchable, INotifyPropertyChanged
  266. {
  267. System.DateTime _requiredDateTime;
  268. System.DateTime? _optionalDateTime;
  269. List<System.DateTime> _listOfRequiredDateTime;
  270. List<System.DateTime?> _listOfOptionalDateTime;
  271. System.Uri _requiredUri;
  272. System.Uri _optionalUri;
  273. List<System.Uri> _listOfRequiredUri;
  274. List<System.Uri> _listOfOptionalUri;
  275. static PinchFieldProperties _requiredDateTimeProperties = new PinchFieldProperties(7, 1, null);
  276. static PinchFieldProperties _optionalDateTimeProperties = new PinchFieldProperties(5, 1, null);
  277. static PinchFieldProperties _listOfRequiredDateTimeProperties = new PinchFieldProperties(3, 1, null);
  278. static PinchFieldProperties _listOfOptionalDateTimeProperties = new PinchFieldProperties(1, 1, null);
  279. static PinchFieldProperties _requiredUriProperties = new PinchFieldProperties(8, 1, null);
  280. static PinchFieldProperties _optionalUriProperties = new PinchFieldProperties(6, 1, null);
  281. static PinchFieldProperties _listOfRequiredUriProperties = new PinchFieldProperties(4, 1, null);
  282. static PinchFieldProperties _listOfOptionalUriProperties = new PinchFieldProperties(2, 1, null);
  283. public BucketOfSurrogates()
  284. {
  285. _listOfRequiredDateTime = new List<System.DateTime>();
  286. _listOfOptionalDateTime = new List<System.DateTime?>();
  287. _listOfRequiredUri = new List<System.Uri>();
  288. _listOfOptionalUri = new List<System.Uri>();
  289. }
  290. public BucketOfSurrogates(IPinchDecodingContext context)
  291. {
  292. }
  293. public System.DateTime RequiredDateTime
  294. {
  295. get { return _requiredDateTime; }
  296. set
  297. {
  298. _requiredDateTime = value;
  299. FirePropertyChanged("RequiredDateTime");
  300. }
  301. }
  302. public System.DateTime? OptionalDateTime
  303. {
  304. get { return _optionalDateTime; }
  305. set
  306. {
  307. _optionalDateTime = value;
  308. FirePropertyChanged("OptionalDateTime");
  309. }
  310. }
  311. public List<System.DateTime> ListOfRequiredDateTime
  312. {
  313. get { return _listOfRequiredDateTime; }
  314. set
  315. {
  316. _listOfRequiredDateTime = value;
  317. FirePropertyChanged("ListOfRequiredDateTime");
  318. }
  319. }
  320. public List<System.DateTime?> ListOfOptionalDateTime
  321. {
  322. get { return _listOfOptionalDateTime; }
  323. set
  324. {
  325. _listOfOptionalDateTime = value;
  326. FirePropertyChanged("ListOfOptionalDateTime");
  327. }
  328. }
  329. public System.Uri RequiredUri
  330. {
  331. get { return _requiredUri; }
  332. set
  333. {
  334. _requiredUri = value;
  335. FirePropertyChanged("RequiredUri");
  336. }
  337. }
  338. public System.Uri OptionalUri
  339. {
  340. get { return _optionalUri; }
  341. set
  342. {
  343. _optionalUri = value;
  344. FirePropertyChanged("OptionalUri");
  345. }
  346. }
  347. public List<System.Uri> ListOfRequiredUri
  348. {
  349. get { return _listOfRequiredUri; }
  350. set
  351. {
  352. _listOfRequiredUri = value;
  353. FirePropertyChanged("ListOfRequiredUri");
  354. }
  355. }
  356. public List<System.Uri> ListOfOptionalUri
  357. {
  358. get { return _listOfOptionalUri; }
  359. set
  360. {
  361. _listOfOptionalUri = value;
  362. FirePropertyChanged("ListOfOptionalUri");
  363. }
  364. }
  365. int IPinchable.ProtocolVersion
  366. {
  367. get
  368. {
  369. return 1;
  370. }
  371. }
  372. protected virtual void OnAdditionalFutureFields(IPinchDecoder decoder)
  373. {
  374. }
  375. void IPinchable.Encode(IPinchEncoder encoder)
  376. {
  377. encoder.OpenSequence(8);
  378. // Encode fields for version 1:
  379. encoder.OpenSequence(_listOfOptionalDateTime.Count);
  380. foreach (System.DateTime? value in _listOfOptionalDateTime)
  381. {
  382. encoder.EncodeOptionalStructure(MyDateTimeSurrogate.ValueToSurrogateOptional(value), _listOfOptionalDateTimeProperties);
  383. }
  384. encoder.CloseSequence();
  385. encoder.OpenSequence(_listOfOptionalUri.Count);
  386. foreach (System.Uri value in _listOfOptionalUri)
  387. {
  388. encoder.EncodeOptionalStructure(MyUriSurrogate.ValueToSurrogateOptional(value), _listOfOptionalUriProperties);
  389. }
  390. encoder.CloseSequence();
  391. encoder.OpenSequence(_listOfRequiredDateTime.Count);
  392. foreach (System.DateTime value in _listOfRequiredDateTime)
  393. {
  394. encoder.EncodeRequiredStructure(MyDateTimeSurrogate.ValueToSurrogateRequired(value), _listOfRequiredDateTimeProperties);
  395. }
  396. encoder.CloseSequence();
  397. encoder.OpenSequence(_listOfRequiredUri.Count);
  398. foreach (System.Uri value in _listOfRequiredUri)
  399. {
  400. encoder.EncodeRequiredStructure(MyUriSurrogate.ValueToSurrogateRequired(value), _listOfRequiredUriProperties);
  401. }
  402. encoder.CloseSequence();
  403. encoder.EncodeOptionalStructure(MyDateTimeSurrogate.ValueToSurrogateOptional(_optionalDateTime), _optionalDateTimeProperties);
  404. encoder.EncodeOptionalStructure(MyUriSurrogate.ValueToSurrogateOptional(_optionalUri), _optionalUriProperties);
  405. encoder.EncodeRequiredStructure(MyDateTimeSurrogate.ValueToSurrogateRequired(_requiredDateTime), _requiredDateTimeProperties);
  406. encoder.EncodeRequiredStructure(MyUriSurrogate.ValueToSurrogateRequired(_requiredUri), _requiredUriProperties);
  407. encoder.CloseSequence();
  408. }
  409. void IPinchable.Decode(IPinchDecoder decoder)
  410. {
  411. int remainingFields = decoder.OpenSequence();
  412. // Decode members for version 1:
  413. if (remainingFields >= 8)
  414. {
  415. int listOfOptionalDateTimeCount = decoder.OpenSequence();
  416. _listOfOptionalDateTime = new List<System.DateTime?>();
  417. for (int i = 0; i < listOfOptionalDateTimeCount; i++)
  418. {
  419. _listOfOptionalDateTime.Add(MyDateTimeSurrogate.SurrogateToValueOptional((MyDateTimeSurrogate)decoder.DecodeOptionalStructure(MyDateTimeSurrogateFactory.Instance, _listOfOptionalDateTimeProperties)));
  420. }
  421. decoder.CloseSequence();
  422. int listOfOptionalUriCount = decoder.OpenSequence();
  423. _listOfOptionalUri = new List<System.Uri>();
  424. for (int i = 0; i < listOfOptionalUriCount; i++)
  425. {
  426. _listOfOptionalUri.Add(MyUriSurrogate.SurrogateToValueOptional((MyUriSurrogate)decoder.DecodeOptionalStructure(MyUriSurrogateFactory.Instance, _listOfOptionalUriProperties)));
  427. }
  428. decoder.CloseSequence();
  429. int listOfRequiredDateTimeCount = decoder.OpenSequence();
  430. _listOfRequiredDateTime = new List<System.DateTime>();
  431. for (int i = 0; i < listOfRequiredDateTimeCount; i++)
  432. {
  433. _listOfRequiredDateTime.Add(MyDateTimeSurrogate.SurrogateToValueRequired((MyDateTimeSurrogate)decoder.DecodeRequiredStructure(MyDateTimeSurrogateFactory.Instance, _listOfRequiredDateTimeProperties)));
  434. }
  435. decoder.CloseSequence();
  436. int listOfRequiredUriCount = decoder.OpenSequence();
  437. _listOfRequiredUri = new List<System.Uri>();
  438. for (int i = 0; i < listOfRequiredUriCount; i++)
  439. {
  440. _listOfRequiredUri.Add(MyUriSurrogate.SurrogateToValueRequired((MyUriSurrogate)decoder.DecodeRequiredStructure(MyUriSurrogateFactory.Instance, _listOfRequiredUriProperties)));
  441. }
  442. decoder.CloseSequence();
  443. _optionalDateTime = MyDateTimeSurrogate.SurrogateToValueOptional((MyDateTimeSurrogate)decoder.DecodeOptionalStructure(MyDateTimeSurrogateFactory.Instance, _optionalDateTimeProperties));
  444. _optionalUri = MyUriSurrogate.SurrogateToValueOptional((MyUriSurrogate)decoder.DecodeOptionalStructure(MyUriSurrogateFactory.Instance, _optionalUriProperties));
  445. _requiredDateTime = MyDateTimeSurrogate.SurrogateToValueRequired((MyDateTimeSurrogate)decoder.DecodeRequiredStructure(MyDateTimeSurrogateFactory.Instance, _requiredDateTimeProperties));
  446. _requiredUri = MyUriSurrogate.SurrogateToValueRequired((MyUriSurrogate)decoder.DecodeRequiredStructure(MyUriSurrogateFactory.Instance, _requiredUriProperties));
  447. remainingFields -= 8;
  448. }
  449. else
  450. {
  451. if (remainingFields != 0) throw new PinchInvalidCodingException();
  452. }
  453. if (remainingFields > 0)
  454. {
  455. OnAdditionalFutureFields(decoder);
  456. decoder.SkipFields(remainingFields);
  457. }
  458. decoder.CloseSequence();
  459. }
  460. #region INotifyPropertyChanged Members
  461. public event PropertyChangedEventHandler PropertyChanged;
  462. protected void FirePropertyChanged(string propertyName)
  463. {
  464. if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
  465. }
  466. #endregion
  467. }
  468. }