test_copyhelper.pas 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779
  1. {$INCLUDE sdo_global.inc}
  2. unit test_copyhelper;
  3. interface
  4. uses
  5. SysUtils, Classes//, Dialogs
  6. {$IFDEF FPC}
  7. ,fpcunit, testutils, testregistry
  8. {$ENDIF}
  9. {$IFNDEF FPC}
  10. ,TestFrameWork
  11. {$ENDIF}
  12. , sdo, sdo_types, test_suite_utils ;
  13. type
  14. TSDOCopyHelper_Test = class(TWstBaseTest)
  15. private
  16. FFactory : ISDODataFactory;
  17. private
  18. function CreateFactory() : ISDODataFactory;
  19. function CreateCopyHelper() : TSDOCopyHelperClass;
  20. function createObjA(const AUri : string; const AFact : ISDODataFactory) : ISDODataObject;
  21. function createObjB(const AUri : string; const AFact : ISDODataFactory) : ISDODataObject;
  22. function createObjC(const AUri : string; const AFact : ISDODataFactory) : ISDODataObject;
  23. protected
  24. procedure SetUp(); override;
  25. procedure TearDown(); override;
  26. published
  27. procedure shallow_copy_nil_obj();
  28. procedure shallow_copy_empty_obj();
  29. procedure shallow_copy();
  30. procedure shallow_copy_cursorPos();
  31. procedure copy_nil_obj();
  32. procedure copy_empty_obj();
  33. procedure copy();
  34. procedure copy_cursorPos();
  35. end;
  36. implementation
  37. uses sdo_datafactory, sdo_linked_list;
  38. const
  39. s_uri = 'urn-test';
  40. s_type_object_A = 'objectA';
  41. s_type_object_B = 'objectB';
  42. s_type_object_C = 'objectC';
  43. s_type_object_D = 'objectD';
  44. s_bool_prop = 'bool_prop'; s_bool_propList = 'bool_prop_list';
  45. s_byte_prop = 'byte_prop'; s_byte_propList = 'byte_prop_list';
  46. s_bytes_prop = 'bytes_prop'; s_bytes_propList = 'bytes_prop_list';
  47. s_char_prop = 'char_prop'; s_char_propList = 'char_prop_list';
  48. s_currency_prop = 'currency_prop'; s_currency_propList = 'currency_prop_list';
  49. s_date_prop = 'date_prop'; s_date_propList = 'date_prop_list';
  50. s_double_prop = 'double_prop'; s_double_propList = 'double_prop_list';
  51. s_float_prop = 'float_prop'; s_float_propList = 'float_prop_list';
  52. s_integer_prop = 'integer_prop'; s_integer_propList = 'integer_prop_list';
  53. s_long_prop = 'long_prop'; s_long_propList = 'long_prop_list';
  54. s_short_prop = 'short_prop'; s_short_propList = 'short_prop_list';
  55. s_string_prop = 'string_prop'; s_string_propList = 'string_prop_list';
  56. s_object_prop = 'object_prop'; s_object_propList = 'object_prop_list';
  57. s_object_ref_prop = 'object_ref_prop';
  58. CURRENCY_CONT_ARRAY : array[0..3] of TSDOCurrency = (
  59. 123456789.3258, 0, -1478369.9876, -5869.9831
  60. );
  61. DOUBLE_CONT_ARRAY : array[0..3] of TSDODouble = (
  62. 123456789.3258942121, 0, -147258369.987654321, -58369.98321
  63. );
  64. FLOAT_CONT_ARRAY : array[0..3] of TSDOFloat = (
  65. -123789.325121, -96321.558, 0, 83629.5851
  66. );
  67. { TSDOCopyHelper_Test }
  68. procedure TSDOCopyHelper_Test.copy();
  69. var
  70. locA, locB, locC, locD : ISDODataObject;
  71. locA1, locB1, locC1, locD1 : ISDODataObject;
  72. begin
  73. locA := createObjA(s_uri,FFactory);
  74. locB := createObjB(s_uri,FFactory);
  75. locC := createObjC(s_uri,FFactory);
  76. locD := FFactory.createNew(s_uri,s_type_object_D);
  77. locA1 := TSDOCopyHelper.copyShallow(locA);
  78. CheckEquals(True, TSDOEqualityHelper.equalShallow(locA,locA1));
  79. locB1 := TSDOCopyHelper.copyShallow(locB);
  80. CheckEquals(True, TSDOEqualityHelper.equalShallow(locB,locB1));
  81. locC1 := TSDOCopyHelper.copyShallow(locC);
  82. CheckEquals(True, TSDOEqualityHelper.equalShallow(locC,locC1));
  83. locD1 := TSDOCopyHelper.copyShallow(locD);
  84. CheckEquals(True, TSDOEqualityHelper.equalShallow(locD,locD1));
  85. end;
  86. procedure TSDOCopyHelper_Test.copy_empty_obj();
  87. var
  88. locA, locB, locC, locD : ISDODataObject;
  89. locA1, locB1, locC1, locD1 : ISDODataObject;
  90. begin
  91. locA := FFactory.createNew(s_uri,s_type_object_A);
  92. locB := FFactory.createNew(s_uri,s_type_object_B);
  93. locC := FFactory.createNew(s_uri,s_type_object_C);
  94. locD := FFactory.createNew(s_uri,s_type_object_D);
  95. locA1 := TSDOCopyHelper.copyShallow(locA);
  96. CheckEquals(True, TSDOEqualityHelper.equalShallow(locA,locA1));
  97. locB1 := TSDOCopyHelper.copyShallow(locB);
  98. CheckEquals(True, TSDOEqualityHelper.equalShallow(locB,locB1));
  99. locC1 := TSDOCopyHelper.copyShallow(locC);
  100. CheckEquals(True, TSDOEqualityHelper.equalShallow(locC,locC1));
  101. locD1 := TSDOCopyHelper.copyShallow(locD);
  102. CheckEquals(True, TSDOEqualityHelper.equalShallow(locD,locD1));
  103. end;
  104. procedure TSDOCopyHelper_Test.copy_nil_obj();
  105. var
  106. locX : ISDODataObject;
  107. begin
  108. locX := CreateCopyHelper().copy(nil);
  109. CheckEquals(PtrUInt(nil), PtrUInt(locX));
  110. end;
  111. function TSDOCopyHelper_Test.CreateCopyHelper() : TSDOCopyHelperClass;
  112. begin
  113. Result := TSDOCopyHelper;
  114. end;
  115. function TSDOCopyHelper_Test.CreateFactory() : ISDODataFactory;
  116. var
  117. locFactory : ISDODataFactory;
  118. procedure Add_ObjectA(const AUri : string);
  119. var
  120. locObj : ISDOType;
  121. begin
  122. locFactory.AddType(AUri,s_type_object_A,[]);
  123. locObj := locFactory.getType(AUri,s_type_object_A);
  124. locFactory.addProperty(locObj,s_bool_prop,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType], []);
  125. locFactory.addProperty(locObj,s_bool_propList,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType],[pfIsMany]);
  126. locFactory.addProperty(locObj,s_byte_prop,sdo_namespace,SDOTypeDefaultTypeNames[ByteType], []);
  127. locFactory.addProperty(locObj,s_byte_propList,sdo_namespace,SDOTypeDefaultTypeNames[ByteType],[pfIsMany]);
  128. {$IFDEF HAS_SDO_BYTES}
  129. locFactory.addProperty(locObj,s_bytes_prop,sdo_namespace,SDOTypeDefaultTypeNames[BytesType], []);
  130. locFactory.addProperty(locObj,s_bytes_propList,sdo_namespace,SDOTypeDefaultTypeNames[BytesType],[pfIsMany]);
  131. {$ENDIF HAS_SDO_BYTES}
  132. {$IFDEF HAS_SDO_CHAR}
  133. locFactory.addProperty(locObj,s_char_prop,sdo_namespace,SDOTypeDefaultTypeNames[CharacterType], []);
  134. locFactory.addProperty(locObj,s_char_propList,sdo_namespace,SDOTypeDefaultTypeNames[CharacterType],[pfIsMany]);
  135. {$ENDIF HAS_SDO_CHAR}
  136. {$IFDEF HAS_SDO_CURRENCY}
  137. locFactory.addProperty(locObj,s_currency_prop,sdo_namespace,SDOTypeDefaultTypeNames[CurrencyType], []);
  138. locFactory.addProperty(locObj,s_currency_propList,sdo_namespace,SDOTypeDefaultTypeNames[CurrencyType],[pfIsMany]);
  139. {$ENDIF HAS_SDO_CURRENCY}
  140. locFactory.addProperty(locObj,s_date_prop,sdo_namespace,SDOTypeDefaultTypeNames[DateTimeType], []);
  141. locFactory.addProperty(locObj,s_date_propList,sdo_namespace,SDOTypeDefaultTypeNames[DateTimeType],[pfIsMany]);
  142. {$IFDEF HAS_SDO_DOUBLE}
  143. locFactory.addProperty(locObj,s_double_prop,sdo_namespace,SDOTypeDefaultTypeNames[DoubleType], []);
  144. locFactory.addProperty(locObj,s_double_propList,sdo_namespace,SDOTypeDefaultTypeNames[DoubleType],[pfIsMany]);
  145. {$ENDIF HAS_SDO_DOUBLE}
  146. {$IFDEF HAS_SDO_FLOAT}
  147. locFactory.addProperty(locObj,s_float_prop,sdo_namespace,SDOTypeDefaultTypeNames[FloatType], []);
  148. locFactory.addProperty(locObj,s_float_propList,sdo_namespace,SDOTypeDefaultTypeNames[FloatType],[pfIsMany]);
  149. {$ENDIF HAS_SDO_FLOAT}
  150. locFactory.addProperty(locObj,s_integer_prop,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType], []);
  151. locFactory.addProperty(locObj,s_integer_propList,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType],[pfIsMany]);
  152. {$IFDEF HAS_SDO_LONG}
  153. locFactory.addProperty(locObj,s_long_prop,sdo_namespace,SDOTypeDefaultTypeNames[LongType], []);
  154. locFactory.addProperty(locObj,s_long_propList,sdo_namespace,SDOTypeDefaultTypeNames[LongType],[pfIsMany]);
  155. {$ENDIF HAS_SDO_LONG}
  156. {$IFDEF HAS_SDO_SHORT}
  157. locFactory.addProperty(locObj,s_short_prop,sdo_namespace,SDOTypeDefaultTypeNames[ShortType], []);
  158. locFactory.addProperty(locObj,s_short_propList,sdo_namespace,SDOTypeDefaultTypeNames[ShortType],[pfIsMany]);
  159. {$ENDIF HAS_SDO_SHORT}
  160. locFactory.addProperty(locObj,s_string_prop,sdo_namespace,SDOTypeDefaultTypeNames[StringType], []);
  161. locFactory.addProperty(locObj,s_string_propList,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsMany]);
  162. end;
  163. procedure Add_ObjectB();
  164. var
  165. locObj : ISDOType;
  166. begin
  167. locFactory.AddType(s_uri,s_type_object_B,[]);
  168. locObj := locFactory.getType(s_uri,s_type_object_B);
  169. locFactory.addProperty(locObj,s_bool_prop,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType], []);
  170. locFactory.addProperty(locObj,s_bool_propList,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType],[pfIsMany]);
  171. locFactory.addProperty(locObj,s_byte_prop,sdo_namespace,SDOTypeDefaultTypeNames[ByteType], []);
  172. locFactory.addProperty(locObj,s_byte_propList,sdo_namespace,SDOTypeDefaultTypeNames[ByteType],[pfIsMany]);
  173. {$IFDEF HAS_SDO_BYTES}
  174. locFactory.addProperty(locObj,s_bytes_prop,sdo_namespace,SDOTypeDefaultTypeNames[BytesType], []);
  175. locFactory.addProperty(locObj,s_bytes_propList,sdo_namespace,SDOTypeDefaultTypeNames[BytesType],[pfIsMany]);
  176. {$ENDIF HAS_SDO_BYTES}
  177. {$IFDEF HAS_SDO_CHAR}
  178. locFactory.addProperty(locObj,s_char_prop,sdo_namespace,SDOTypeDefaultTypeNames[CharacterType], []);
  179. locFactory.addProperty(locObj,s_char_propList,sdo_namespace,SDOTypeDefaultTypeNames[CharacterType],[pfIsMany]);
  180. {$ENDIF HAS_SDO_CHAR}
  181. {$IFDEF HAS_SDO_CURRENCY}
  182. locFactory.addProperty(locObj,s_currency_prop,sdo_namespace,SDOTypeDefaultTypeNames[CurrencyType], []);
  183. locFactory.addProperty(locObj,s_currency_propList,sdo_namespace,SDOTypeDefaultTypeNames[CurrencyType],[pfIsMany]);
  184. {$ENDIF HAS_SDO_CURRENCY}
  185. locFactory.addProperty(locObj,s_date_prop,sdo_namespace,SDOTypeDefaultTypeNames[DateTimeType], []);
  186. locFactory.addProperty(locObj,s_date_propList,sdo_namespace,SDOTypeDefaultTypeNames[DateTimeType],[pfIsMany]);
  187. {$IFDEF HAS_SDO_DOUBLE}
  188. locFactory.addProperty(locObj,s_double_prop,sdo_namespace,SDOTypeDefaultTypeNames[DoubleType], []);
  189. locFactory.addProperty(locObj,s_double_propList,sdo_namespace,SDOTypeDefaultTypeNames[DoubleType],[pfIsMany]);
  190. {$ENDIF HAS_SDO_DOUBLE}
  191. {$IFDEF HAS_SDO_FLOAT}
  192. locFactory.addProperty(locObj,s_float_prop,sdo_namespace,SDOTypeDefaultTypeNames[FloatType], []);
  193. locFactory.addProperty(locObj,s_float_propList,sdo_namespace,SDOTypeDefaultTypeNames[FloatType],[pfIsMany]);
  194. {$ENDIF HAS_SDO_FLOAT}
  195. locFactory.addProperty(locObj,s_integer_prop,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType], []);
  196. {$IFDEF HAS_SDO_LONG}
  197. locFactory.addProperty(locObj,s_long_prop,sdo_namespace,SDOTypeDefaultTypeNames[LongType], []);
  198. locFactory.addProperty(locObj,s_long_propList,sdo_namespace,SDOTypeDefaultTypeNames[LongType],[pfIsMany]);
  199. {$ENDIF HAS_SDO_LONG}
  200. {$IFDEF HAS_SDO_SHORT}
  201. locFactory.addProperty(locObj,s_short_prop,sdo_namespace,SDOTypeDefaultTypeNames[ShortType], []);
  202. locFactory.addProperty(locObj,s_short_propList,sdo_namespace,SDOTypeDefaultTypeNames[ShortType],[pfIsMany]);
  203. {$ENDIF HAS_SDO_SHORT}
  204. locFactory.addProperty(locObj,s_integer_propList,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType],[pfIsMany]);
  205. locFactory.addProperty(locObj,s_string_prop,sdo_namespace,SDOTypeDefaultTypeNames[StringType], []);
  206. locFactory.addProperty(locObj,s_string_propList,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsMany]);
  207. locFactory.addProperty(locObj,s_object_prop,s_uri,s_type_object_A,[pfIsContainment]);
  208. locFactory.addProperty(locObj,s_object_ref_prop,s_uri,s_type_object_A,[]);
  209. locFactory.addProperty(locObj,s_object_propList,s_uri,s_type_object_A,[pfIsMany,pfIsContainment]);
  210. end;
  211. procedure Add_ObjectC();
  212. var
  213. locObj : ISDOType;
  214. begin
  215. locFactory.AddType(s_uri,s_type_object_C,[]);
  216. locObj := locFactory.getType(s_uri,s_type_object_C);
  217. locFactory.addProperty(locObj,s_bool_prop,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType], []);
  218. locFactory.addProperty(locObj,s_bool_propList,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType],[pfIsMany]);
  219. locFactory.addProperty(locObj,s_byte_prop,sdo_namespace,SDOTypeDefaultTypeNames[ByteType], []);
  220. locFactory.addProperty(locObj,s_byte_propList,sdo_namespace,SDOTypeDefaultTypeNames[ByteType],[pfIsMany]);
  221. {$IFDEF HAS_SDO_BYTES}
  222. locFactory.addProperty(locObj,s_bytes_prop,sdo_namespace,SDOTypeDefaultTypeNames[BytesType], []);
  223. locFactory.addProperty(locObj,s_bytes_propList,sdo_namespace,SDOTypeDefaultTypeNames[BytesType],[pfIsMany]);
  224. {$ENDIF HAS_SDO_BYTES}
  225. {$IFDEF HAS_SDO_CHAR}
  226. locFactory.addProperty(locObj,s_char_prop,sdo_namespace,SDOTypeDefaultTypeNames[CharacterType], []);
  227. locFactory.addProperty(locObj,s_char_propList,sdo_namespace,SDOTypeDefaultTypeNames[CharacterType],[pfIsMany]);
  228. {$ENDIF HAS_SDO_CHAR}
  229. {$IFDEF HAS_SDO_CURRENCY}
  230. locFactory.addProperty(locObj,s_currency_prop,sdo_namespace,SDOTypeDefaultTypeNames[CurrencyType], []);
  231. locFactory.addProperty(locObj,s_currency_propList,sdo_namespace,SDOTypeDefaultTypeNames[CurrencyType],[pfIsMany]);
  232. {$ENDIF HAS_SDO_CURRENCY}
  233. locFactory.addProperty(locObj,s_date_prop,sdo_namespace,SDOTypeDefaultTypeNames[DateTimeType], []);
  234. locFactory.addProperty(locObj,s_date_propList,sdo_namespace,SDOTypeDefaultTypeNames[DateTimeType],[pfIsMany]);
  235. {$IFDEF HAS_SDO_DOUBLE}
  236. locFactory.addProperty(locObj,s_double_prop,sdo_namespace,SDOTypeDefaultTypeNames[DoubleType], []);
  237. locFactory.addProperty(locObj,s_double_propList,sdo_namespace,SDOTypeDefaultTypeNames[DoubleType],[pfIsMany]);
  238. {$ENDIF HAS_SDO_DOUBLE}
  239. {$IFDEF HAS_SDO_FLOAT}
  240. locFactory.addProperty(locObj,s_float_prop,sdo_namespace,SDOTypeDefaultTypeNames[FloatType], []);
  241. locFactory.addProperty(locObj,s_float_propList,sdo_namespace,SDOTypeDefaultTypeNames[FloatType],[pfIsMany]);
  242. {$ENDIF HAS_SDO_FLOAT}
  243. locFactory.addProperty(locObj,s_integer_prop,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType], []);
  244. locFactory.addProperty(locObj,s_integer_propList,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType],[pfIsMany]);
  245. {$IFDEF HAS_SDO_LONG}
  246. locFactory.addProperty(locObj,s_long_prop,sdo_namespace,SDOTypeDefaultTypeNames[LongType], []);
  247. locFactory.addProperty(locObj,s_long_propList,sdo_namespace,SDOTypeDefaultTypeNames[LongType],[pfIsMany]);
  248. {$ENDIF HAS_SDO_LONG}
  249. {$IFDEF HAS_SDO_SHORT}
  250. locFactory.addProperty(locObj,s_short_prop,sdo_namespace,SDOTypeDefaultTypeNames[ShortType], []);
  251. locFactory.addProperty(locObj,s_short_propList,sdo_namespace,SDOTypeDefaultTypeNames[ShortType],[pfIsMany]);
  252. {$ENDIF HAS_SDO_SHORT}
  253. locFactory.addProperty(locObj,s_string_prop,sdo_namespace,SDOTypeDefaultTypeNames[StringType], []);
  254. locFactory.addProperty(locObj,s_string_propList,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsMany]);
  255. end;
  256. procedure Add_ObjectD();
  257. begin
  258. locFactory.AddType(s_uri,s_type_object_D,[]);
  259. end;
  260. begin
  261. locFactory := TSDODataFactory.Create() as ISDODataFactory;
  262. Add_ObjectA(s_uri);
  263. Add_ObjectB();
  264. Add_ObjectC();
  265. Add_ObjectD();
  266. Result := locFactory;
  267. end;
  268. function TSDOCopyHelper_Test.createObjA(const AUri: string; const AFact: ISDODataFactory): ISDODataObject;
  269. const
  270. VAL_1 : TSDODate = ( Date : 35000; HourOffset : 3; MinuteOffset : 4; );
  271. VAL_2 : TSDODate = ( Date : 40000; HourOffset : 0; MinuteOffset : 0; );
  272. VAL_3 : TSDODate = ( Date : 38000; HourOffset : 5; MinuteOffset : 45; );
  273. VAL_4 : TSDODate = ( Date : 39000; HourOffset : 6; MinuteOffset : 55; );
  274. var
  275. VAL_1_BYTES, VAL_2_BYTES, VAL_3_BYTES, VAL_4_BYTES : TSDOBytes;
  276. procedure SetConstants();
  277. var
  278. v : TSDOBytes;
  279. k : Integer;
  280. begin
  281. SetLength(v,10);
  282. for k := 0 to High(v) do
  283. v[k] := k mod High(TSDOByte);
  284. VAL_1_BYTES := v;
  285. v := nil;
  286. VAL_2_BYTES := nil;
  287. SetLength(v,20);
  288. for k := 0 to High(v) do
  289. v[k] := ( ( 3 * k ) + 1 ) mod High(TSDOByte);
  290. VAL_3_BYTES := v;
  291. v := nil;
  292. SetLength(v,30);
  293. for k := 0 to High(v) do
  294. v[k] := ( ( 3 * k ) + 1 ) mod High(TSDOByte);
  295. VAL_4_BYTES := v;
  296. v := nil;
  297. end;
  298. var
  299. ls : ISDODataObjectList;
  300. begin
  301. SetConstants();
  302. Result := AFact.createNew(AUri,s_type_object_A);
  303. Result.setBoolean(s_bool_prop,True);
  304. Result.setByte(s_byte_prop,123);
  305. {$IFDEF HAS_SDO_BYTES}
  306. Result.setBytes(s_bytes_prop,VAL_1_BYTES);
  307. {$ENDIF HAS_SDO_BYTES}
  308. {$IFDEF HAS_SDO_CHAR}
  309. Result.setCharacter(s_char_prop,'x');
  310. {$ENDIF HAS_SDO_CHAR}
  311. {$IFDEF HAS_SDO_CURRENCY}
  312. Result.setCurrency(s_currency_prop,123.4567);
  313. {$ENDIF HAS_SDO_CURRENCY}
  314. Result.setDate(s_date_prop,VAL_1);
  315. {$IFDEF HAS_SDO_DOUBLE}
  316. Result.setDouble(s_double_prop,78.3654);
  317. {$ENDIF HAS_SDO_DOUBLE}
  318. {$IFDEF HAS_SDO_FLOAT}
  319. Result.setFloat(s_float_prop,-159.753);
  320. {$ENDIF HAS_SDO_FLOAT}
  321. Result.setInteger(s_integer_prop,1210);
  322. {$IFDEF HAS_SDO_LONG}
  323. Result.setLong(s_long_prop,123456789987654321);
  324. {$ENDIF HAS_SDO_LONG}
  325. {$IFDEF HAS_SDO_SHORT}
  326. Result.setShort(s_short_prop,6541);
  327. {$ENDIF HAS_SDO_SHORT}
  328. Result.setString(s_string_prop,'inoussa wst fpc');
  329. ls := Result.getList(s_bool_propList);
  330. ls.append(True);
  331. ls.append(True);
  332. ls.append(False);
  333. ls.append(True);
  334. ls.append(False);
  335. ls := Result.getList(s_byte_propList);
  336. ls.append(TSDOByte(1));
  337. ls.append(TSDOByte(2));
  338. ls.append(TSDOByte(3));
  339. {$IFDEF HAS_SDO_BYTES}
  340. ls := Result.getList(s_bytes_propList);
  341. ls.appendBytes(VAL_1_BYTES);
  342. ls.appendBytes(VAL_2_BYTES);
  343. ls.appendBytes(VAL_3_BYTES);
  344. ls.appendBytes(VAL_4_BYTES);
  345. {$ENDIF HAS_SDO_BYTES}
  346. {$IFDEF HAS_SDO_CHAR}
  347. ls := Result.getList(s_char_propList);
  348. ls.append(TSDOChar('a'));
  349. ls.append(TSDOChar('b'));
  350. ls.append(TSDOChar('p'));
  351. {$ENDIF HAS_SDO_CHAR}
  352. {$IFDEF HAS_SDO_CURRENCY}
  353. ls := Result.getList(s_currency_propList);
  354. ls.appendCurrency(CURRENCY_CONT_ARRAY[0]);
  355. ls.appendCurrency(CURRENCY_CONT_ARRAY[1]);
  356. ls.appendCurrency(CURRENCY_CONT_ARRAY[2]);
  357. ls.appendCurrency(CURRENCY_CONT_ARRAY[3]);
  358. {$ENDIF HAS_SDO_CURRENCY}
  359. {$IFDEF HAS_SDO_DOUBLE}
  360. ls := Result.getList(s_double_propList);
  361. ls.append(DOUBLE_CONT_ARRAY[0]);
  362. ls.append(DOUBLE_CONT_ARRAY[1]);
  363. ls.append(DOUBLE_CONT_ARRAY[2]);
  364. ls.append(DOUBLE_CONT_ARRAY[3]);
  365. {$ENDIF HAS_SDO_DOUBLE}
  366. {$IFDEF HAS_SDO_FLOAT}
  367. ls := Result.getList(s_float_propList);
  368. ls.append(FLOAT_CONT_ARRAY[0]);
  369. ls.append(FLOAT_CONT_ARRAY[1]);
  370. ls.append(FLOAT_CONT_ARRAY[2]);
  371. ls.append(FLOAT_CONT_ARRAY[3]);
  372. {$ENDIF HAS_SDO_FLOAT}
  373. ls := Result.getList(s_date_propList);
  374. ls.append(VAL_1);
  375. ls.append(VAL_2);
  376. ls.append(VAL_3);
  377. ls.append(VAL_4);
  378. ls := Result.getList(s_integer_propList);
  379. ls.append(TSDOInteger(12));
  380. ls.append(TSDOInteger(10));
  381. ls.append(TSDOInteger(76));
  382. ls.append(TSDOInteger(-123));
  383. ls.append(TSDOInteger(0));
  384. {$IFDEF HAS_SDO_LONG}
  385. ls := Result.getList(s_long_propList);
  386. ls.append(TSDOLong(748159623849516236));
  387. ls.append(TSDOLong(0));
  388. ls.append(TSDOLong(-3692581479137842655));
  389. ls.append(TSDOLong(112233445566778899));
  390. {$ENDIF HAS_SDO_LONG}
  391. {$IFDEF HAS_SDO_SHORT}
  392. ls := Result.getList(s_short_propList);
  393. ls.append(TSDOLong(7481));
  394. ls.append(TSDOLong(0));
  395. ls.append(TSDOLong(-3655));
  396. ls.append(TSDOLong(8899));
  397. {$ENDIF HAS_SDO_ShORT}
  398. ls := Result.getList(s_string_propList);
  399. ls.append(TSDOString('object'));
  400. ls.append(TSDOString(''));
  401. ls.append(TSDOString('pascal'));
  402. ls.append(TSDOString('Lazarus'));
  403. ls.append(TSDOString('Delphi'));
  404. end;
  405. function TSDOCopyHelper_Test.createObjB(const AUri: string; const AFact: ISDODataFactory): ISDODataObject;
  406. const
  407. VAL_1 : TSDODate = ( Date : 45678; HourOffset : 3; MinuteOffset : 4; );
  408. VAL_2 : TSDODate = ( Date : 41234; HourOffset : 0; MinuteOffset : 0; );
  409. VAL_3 : TSDODate = ( Date : 38976; HourOffset : 5; MinuteOffset : 45; );
  410. VAL_4 : TSDODate = ( Date : 39254; HourOffset : 6; MinuteOffset : 55; );
  411. var
  412. VAL_1_BYTES, VAL_2_BYTES, VAL_3_BYTES, VAL_4_BYTES : TSDOBytes;
  413. procedure SetConstants();
  414. var
  415. v : TSDOBytes;
  416. k : Integer;
  417. begin
  418. SetLength(v,5);
  419. for k := 0 to High(v) do
  420. v[k] := k mod High(TSDOByte);
  421. VAL_1_BYTES := v;
  422. v := nil;
  423. VAL_2_BYTES := nil;
  424. SetLength(v,23);
  425. for k := 0 to High(v) do
  426. v[k] := ( ( 3 * k ) + 1 ) mod High(TSDOByte);
  427. VAL_3_BYTES := v;
  428. v := nil;
  429. SetLength(v,35);
  430. for k := 0 to High(v) do
  431. v[k] := ( ( 3 * k ) + 1 ) mod High(TSDOByte);
  432. VAL_4_BYTES := v;
  433. v := nil;
  434. end;
  435. var
  436. ls : ISDODataObjectList;
  437. begin
  438. SetConstants();
  439. Result := AFact.createNew(AUri,s_type_object_B);
  440. Result.setBoolean(s_bool_prop,True);
  441. Result.setByte(s_byte_prop,123);
  442. {$IFDEF HAS_SDO_BYTES}
  443. Result.setBytes(s_bytes_prop,VAL_1_BYTES);
  444. {$ENDIF HAS_SDO_BYTES}
  445. {$IFDEF HAS_SDO_CHAR}
  446. Result.setCharacter(s_char_prop,'l');
  447. {$ENDIF HAS_SDO_CHAR}
  448. Result.setDate(s_date_prop,VAL_2);
  449. {$IFDEF HAS_SDO_DOUBLE}
  450. Result.setDouble(s_double_prop,8521.0255);
  451. {$ENDIF HAS_SDO_DOUBLE}
  452. {$IFDEF HAS_SDO_FLOAT}
  453. Result.setFloat(s_float_prop,-5852.655753);
  454. {$ENDIF HAS_SDO_FLOAT}
  455. Result.setInteger(s_integer_prop,1210);
  456. {$IFDEF HAS_SDO_LONG}
  457. Result.setLong(s_long_prop,123456789987654321);
  458. {$ENDIF HAS_SDO_LONG}
  459. {$IFDEF HAS_SDO_SHORT}
  460. Result.setShort(s_short_prop,6541);
  461. {$ENDIF HAS_SDO_SHORT}
  462. Result.setString(s_string_prop,'inoussa wst fpc');
  463. ls := Result.getList(s_bool_propList);
  464. ls.append(True);
  465. ls.append(True);
  466. ls.append(False);
  467. ls.append(True);
  468. ls.append(False);
  469. ls := Result.getList(s_byte_propList);
  470. ls.append(1);
  471. ls.append(2);
  472. ls.append(3);
  473. {$IFDEF HAS_SDO_BYTES}
  474. ls := Result.getList(s_bytes_propList);
  475. ls.appendBytes(VAL_1_BYTES);
  476. ls.appendBytes(VAL_2_BYTES);
  477. ls.appendBytes(VAL_3_BYTES);
  478. ls.appendBytes(VAL_4_BYTES);
  479. {$ENDIF HAS_SDO_BYTES}
  480. {$IFDEF HAS_SDO_CHAR}
  481. ls := Result.getList(s_char_propList);
  482. ls.append(TSDOChar('a'));
  483. ls.append(TSDOChar('b'));
  484. ls.append(TSDOChar('p'));
  485. {$ENDIF HAS_SDO_CHAR}
  486. {$IFDEF HAS_SDO_CURRENCY}
  487. ls := Result.getList(s_currency_propList);
  488. ls.appendCurrency(CURRENCY_CONT_ARRAY[0]);
  489. ls.appendCurrency(CURRENCY_CONT_ARRAY[1]);
  490. ls.appendCurrency(CURRENCY_CONT_ARRAY[2]);
  491. ls.appendCurrency(CURRENCY_CONT_ARRAY[3]);
  492. {$ENDIF HAS_SDO_CURRENCY}
  493. {$IFDEF HAS_SDO_DOUBLE}
  494. ls := Result.getList(s_double_propList);
  495. ls.append(DOUBLE_CONT_ARRAY[0]);
  496. ls.append(DOUBLE_CONT_ARRAY[1]);
  497. ls.append(DOUBLE_CONT_ARRAY[2]);
  498. ls.append(DOUBLE_CONT_ARRAY[3]);
  499. {$ENDIF HAS_SDO_DOUBLE}
  500. {$IFDEF HAS_SDO_FLOAT}
  501. ls := Result.getList(s_float_propList);
  502. ls.append(FLOAT_CONT_ARRAY[0]);
  503. ls.append(FLOAT_CONT_ARRAY[1]);
  504. ls.append(FLOAT_CONT_ARRAY[2]);
  505. ls.append(FLOAT_CONT_ARRAY[3]);
  506. {$ENDIF HAS_SDO_FLOAT}
  507. ls := Result.getList(s_date_propList);
  508. ls.append(VAL_1);
  509. ls.append(VAL_2);
  510. ls.append(VAL_3);
  511. ls.append(VAL_4);
  512. ls := Result.getList(s_integer_propList);
  513. ls.append(12);
  514. ls.append(10);
  515. ls.append(76);
  516. ls.append(-123);
  517. ls.append(0);
  518. {$IFDEF HAS_SDO_LONG}
  519. ls := Result.getList(s_long_propList);
  520. ls.append(TSDOLong(7481596238495162375));
  521. ls.append(TSDOLong(0));
  522. ls.append(TSDOLong(-3692581479137842655));
  523. ls.append(TSDOLong(112233445566778899));
  524. {$ENDIF HAS_SDO_LONG}
  525. {$IFDEF HAS_SDO_SHORT}
  526. ls := Result.getList(s_short_propList);
  527. ls.append(TSDOLong(7481));
  528. ls.append(TSDOLong(0));
  529. ls.append(TSDOLong(-3655));
  530. ls.append(TSDOLong(8899));
  531. {$ENDIF HAS_SDO_ShORT}
  532. ls := Result.getList(s_string_propList);
  533. ls.append('object');
  534. ls.append('');
  535. ls.append('pascal');
  536. ls.append('Lazarus');
  537. ls.append('Delphi');
  538. Result.setDataObject(s_object_prop,AFact.createNew(s_uri,s_type_object_A));
  539. Result.getDataObject(s_object_prop).setString(s_string_prop,'B->A->' + s_string_prop);
  540. Result.setDataObject(s_object_ref_prop,AFact.createNew(s_uri,s_type_object_A));
  541. Result.getDataObject(s_object_ref_prop).setString(s_string_prop,'ref B->A->' + s_string_prop);
  542. ls := Result.getList(s_object_propList);
  543. ls.append(AFact.createNew(AUri,s_type_object_A));
  544. ls.append(AFact.createNew(AUri,s_type_object_A));
  545. ls.getCursor().MoveFirst();
  546. ls.getDataObject().setString(s_string_prop,'B->A[0]->' + s_string_prop);
  547. ls.getCursor().MoveNext();
  548. ls.getDataObject().setString(s_string_prop,'B->A[1]->' + s_string_prop);
  549. end;
  550. function TSDOCopyHelper_Test.createObjC(const AUri: string; const AFact: ISDODataFactory): ISDODataObject;
  551. const
  552. VAL_1 : TSDODate = ( Date : 38678; HourOffset : 3; MinuteOffset : 4; );
  553. VAL_2 : TSDODate = ( Date : 39234; HourOffset : 0; MinuteOffset : 0; );
  554. VAL_3 : TSDODate = ( Date : 40976; HourOffset : 5; MinuteOffset : 45; );
  555. VAL_4 : TSDODate = ( Date : 41254; HourOffset : 6; MinuteOffset : 55; );
  556. var
  557. ls : ISDODataObjectList;
  558. begin
  559. Result := AFact.createNew(AUri,s_type_object_A);
  560. Result.setBoolean(s_bool_prop,True);
  561. Result.setByte(s_byte_prop,123);
  562. Result.setDate(s_date_prop,VAL_3);
  563. Result.setInteger(s_integer_prop,1210);
  564. Result.setString(s_string_prop,'inoussa wst fpc');
  565. ls := Result.getList(s_bool_propList);
  566. ls.append(True);
  567. ls.append(True);
  568. ls.append(False);
  569. ls.append(True);
  570. ls.append(False);
  571. ls := Result.getList(s_byte_propList);
  572. ls.append(1);
  573. ls.append(2);
  574. ls.append(3);
  575. ls := Result.getList(s_date_propList);
  576. ls.append(VAL_1);
  577. ls.append(VAL_2);
  578. ls.append(VAL_3);
  579. ls.append(VAL_4);
  580. ls := Result.getList(s_integer_propList);
  581. ls.append(12);
  582. ls.append(10);
  583. ls.append(76);
  584. ls.append(-123);
  585. ls.append(0);
  586. ls := Result.getList(s_string_propList);
  587. ls.append('object');
  588. ls.append('');
  589. ls.append('pascal');
  590. ls.append('Lazarus');
  591. ls.append('Delphi');
  592. end;
  593. procedure TSDOCopyHelper_Test.shallow_copy_cursorPos();
  594. var
  595. x, y : ISDODataObject;
  596. lsB, lsI : ISDODataObjectList;
  597. bmB, bmI : TLinkedListBookmark;
  598. begin
  599. x := createObjA(s_uri, FFactory);
  600. lsB := x.getList(s_bool_propList);
  601. lsB.getCursor().MoveFirst();
  602. lsB.getCursor().MoveNext();
  603. lsB.getCursor().MoveNext();
  604. lsI := x.getList(s_integer_propList);
  605. lsI.getCursor().MoveLast();
  606. lsI.getCursor().MovePrevious();
  607. bmB := lsB.getCursor().GetBookmark();
  608. bmI := lsI.getCursor().GetBookmark();
  609. y := TSDOCopyHelper.copyShallow(x);
  610. CheckEquals(bmB,lsB.getCursor().GetBookmark());
  611. CheckEquals(bmI,lsI.getCursor().GetBookmark());
  612. end;
  613. procedure TSDOCopyHelper_Test.SetUp();
  614. begin
  615. inherited;
  616. FFactory := CreateFactory();
  617. end;
  618. procedure TSDOCopyHelper_Test.shallow_copy();
  619. var
  620. locA, locB, locC, locD : ISDODataObject;
  621. locA1, locB1, locC1, locD1 : ISDODataObject;
  622. begin
  623. locA := createObjA(s_uri,FFactory);
  624. locB := createObjB(s_uri,FFactory);
  625. locC := createObjC(s_uri,FFactory);
  626. locD := FFactory.createNew(s_uri,s_type_object_D);
  627. locA1 := TSDOCopyHelper.copyShallow(locA);
  628. CheckEquals(True, TSDOEqualityHelper.equalShallow(locA,locA1));
  629. locB1 := TSDOCopyHelper.copyShallow(locB);
  630. CheckEquals(True, TSDOEqualityHelper.equalShallow(locB,locB1));
  631. locC1 := TSDOCopyHelper.copyShallow(locC);
  632. CheckEquals(True, TSDOEqualityHelper.equalShallow(locC,locC1));
  633. locD1 := TSDOCopyHelper.copyShallow(locD);
  634. CheckEquals(True, TSDOEqualityHelper.equalShallow(locD,locD1));
  635. end;
  636. procedure TSDOCopyHelper_Test.shallow_copy_empty_obj();
  637. var
  638. locA, locB, locC, locD : ISDODataObject;
  639. locA1, locB1, locC1, locD1 : ISDODataObject;
  640. begin
  641. locA := FFactory.createNew(s_uri,s_type_object_A);
  642. locB := FFactory.createNew(s_uri,s_type_object_B);
  643. locC := FFactory.createNew(s_uri,s_type_object_C);
  644. locD := FFactory.createNew(s_uri,s_type_object_D);
  645. locA1 := TSDOCopyHelper.copyShallow(locA);
  646. CheckEquals(True, TSDOEqualityHelper.equalShallow(locA,locA1));
  647. locB1 := TSDOCopyHelper.copyShallow(locB);
  648. CheckEquals(True, TSDOEqualityHelper.equalShallow(locB,locB1));
  649. locC1 := TSDOCopyHelper.copyShallow(locC);
  650. CheckEquals(True, TSDOEqualityHelper.equalShallow(locC,locC1));
  651. locD1 := TSDOCopyHelper.copyShallow(locD);
  652. CheckEquals(True, TSDOEqualityHelper.equalShallow(locD,locD1));
  653. end;
  654. procedure TSDOCopyHelper_Test.shallow_copy_nil_obj();
  655. var
  656. locX : ISDODataObject;
  657. begin
  658. locX := CreateCopyHelper().copy(nil);
  659. CheckEquals(PtrUInt(nil), PtrUInt(locX));
  660. end;
  661. procedure TSDOCopyHelper_Test.TearDown();
  662. begin
  663. FFactory := nil;
  664. inherited;
  665. end;
  666. procedure TSDOCopyHelper_Test.copy_cursorPos();
  667. var
  668. x, y : ISDODataObject;
  669. lsB, lsI : ISDODataObjectList;
  670. bmB, bmI : TLinkedListBookmark;
  671. begin
  672. x := createObjA(s_uri, FFactory);
  673. lsB := x.getList(s_bool_propList);
  674. lsB.getCursor().MoveFirst();
  675. lsB.getCursor().MoveNext();
  676. lsB.getCursor().MoveNext();
  677. lsI := x.getList(s_integer_propList);
  678. lsI.getCursor().MoveLast();
  679. lsI.getCursor().MovePrevious();
  680. bmB := lsB.getCursor().GetBookmark();
  681. bmI := lsI.getCursor().GetBookmark();
  682. y := TSDOCopyHelper.copyShallow(x);
  683. CheckEquals(bmB,lsB.getCursor().GetBookmark());
  684. CheckEquals(bmI,lsI.getCursor().GetBookmark());
  685. end;
  686. initialization
  687. RegisterTest('Helpers',TSDOCopyHelper_Test.Suite);
  688. end.