test_equalityhelper.pas 36 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031
  1. {$INCLUDE sdo_global.inc}
  2. unit test_equalityhelper;
  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. TSDOEqualityHelper_Test = class(TWstBaseTest)
  15. private
  16. function CreateFactory() : ISDODataFactory;
  17. function CreateEqualityHelper() : TSDOEqualityHelperClass;
  18. function createObjA(const AUri : string; const AFact : ISDODataFactory) : ISDODataObject;
  19. function createObjB(const AUri : string; const AFact : ISDODataFactory) : ISDODataObject;
  20. function createObjC(const AUri : string; const AFact : ISDODataFactory) : ISDODataObject;
  21. published
  22. procedure equalShallow_empty_object();
  23. procedure equalShallow_object();
  24. procedure equalShallow_object_not_equal_type();
  25. procedure equalShallow_object_not_equal_value();
  26. procedure equalShallow_cursorPos();
  27. procedure equal_empty_object();
  28. procedure equal_object();
  29. procedure equal_object_not_equal_type();
  30. procedure equal_object_not_equal_value();
  31. procedure equal_cursorPos();
  32. end;
  33. implementation
  34. uses sdo_datafactory, sdo_linked_list;
  35. const
  36. s_uri = 'urn-test'; s_uri_2 = 'urn-test2';
  37. s_type_object_A = 'objectA';
  38. s_type_object_B = 'objectB';
  39. s_type_object_C = 'objectC';
  40. s_bool_prop = 'bool_prop'; s_bool_propList = 'bool_prop_list';
  41. s_byte_prop = 'byte_prop'; s_byte_propList = 'byte_prop_list';
  42. s_bytes_prop = 'bytes_prop'; s_bytes_propList = 'bytes_prop_list';
  43. s_char_prop = 'char_prop'; s_char_propList = 'char_prop_list';
  44. s_currency_prop = 'currency_prop'; s_currency_propList = 'currency_prop_list';
  45. s_date_prop = 'date_prop'; s_date_propList = 'date_prop_list';
  46. s_double_prop = 'double_prop'; s_double_propList = 'double_prop_list';
  47. s_float_prop = 'float_prop'; s_float_propList = 'float_prop_list';
  48. s_integer_prop = 'integer_prop'; s_integer_propList = 'integer_prop_list';
  49. s_long_prop = 'long_prop'; s_long_propList = 'long_prop_list';
  50. s_short_prop = 'short_prop'; s_short_propList = 'short_prop_list';
  51. s_string_prop = 'string_prop'; s_string_propList = 'string_prop_list';
  52. s_object_prop = 'object_prop'; s_object_propList = 'object_prop_list';
  53. { TSDOEqualityHelper_Test }
  54. function TSDOEqualityHelper_Test.CreateEqualityHelper() : TSDOEqualityHelperClass;
  55. begin
  56. Result := TSDOEqualityHelper;
  57. end;
  58. function TSDOEqualityHelper_Test.CreateFactory() : ISDODataFactory;
  59. var
  60. locFactory : ISDODataFactory;
  61. procedure Add_ObjectA(const AUri : string);
  62. var
  63. locObj : ISDOType;
  64. begin
  65. locFactory.AddType(AUri,s_type_object_A,[]);
  66. locObj := locFactory.getType(AUri,s_type_object_A);
  67. locFactory.addProperty(locObj,s_bool_prop,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType], []);
  68. locFactory.addProperty(locObj,s_bool_propList,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType],[pfIsMany]);
  69. locFactory.addProperty(locObj,s_byte_prop,sdo_namespace,SDOTypeDefaultTypeNames[ByteType], []);
  70. locFactory.addProperty(locObj,s_byte_propList,sdo_namespace,SDOTypeDefaultTypeNames[ByteType],[pfIsMany]);
  71. {$IFDEF HAS_SDO_BYTES}
  72. locFactory.addProperty(locObj,s_bytes_prop,sdo_namespace,SDOTypeDefaultTypeNames[BytesType], []);
  73. locFactory.addProperty(locObj,s_bytes_propList,sdo_namespace,SDOTypeDefaultTypeNames[BytesType],[pfIsMany]);
  74. {$ENDIF HAS_SDO_BYTES}
  75. {$IFDEF HAS_SDO_CHAR}
  76. locFactory.addProperty(locObj,s_char_prop,sdo_namespace,SDOTypeDefaultTypeNames[CharacterType], []);
  77. locFactory.addProperty(locObj,s_char_propList,sdo_namespace,SDOTypeDefaultTypeNames[CharacterType],[pfIsMany]);
  78. {$ENDIF HAS_SDO_CHAR}
  79. {$IFDEF HAS_SDO_CURRENCY}
  80. locFactory.addProperty(locObj,s_currency_prop,sdo_namespace,SDOTypeDefaultTypeNames[CurrencyType], []);
  81. locFactory.addProperty(locObj,s_currency_propList,sdo_namespace,SDOTypeDefaultTypeNames[CurrencyType],[pfIsMany]);
  82. {$ENDIF HAS_SDO_CURRENCY}
  83. locFactory.addProperty(locObj,s_date_prop,sdo_namespace,SDOTypeDefaultTypeNames[DateTimeType], []);
  84. locFactory.addProperty(locObj,s_date_propList,sdo_namespace,SDOTypeDefaultTypeNames[DateTimeType],[pfIsMany]);
  85. {$IFDEF HAS_SDO_DOUBLE}
  86. locFactory.addProperty(locObj,s_double_prop,sdo_namespace,SDOTypeDefaultTypeNames[DoubleType], []);
  87. locFactory.addProperty(locObj,s_double_propList,sdo_namespace,SDOTypeDefaultTypeNames[DoubleType],[pfIsMany]);
  88. {$ENDIF HAS_SDO_DOUBLE}
  89. {$IFDEF HAS_SDO_FLOAT}
  90. locFactory.addProperty(locObj,s_float_prop,sdo_namespace,SDOTypeDefaultTypeNames[FloatType], []);
  91. locFactory.addProperty(locObj,s_float_propList,sdo_namespace,SDOTypeDefaultTypeNames[FloatType],[pfIsMany]);
  92. {$ENDIF HAS_SDO_FLOAT}
  93. locFactory.addProperty(locObj,s_integer_prop,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType], []);
  94. locFactory.addProperty(locObj,s_integer_propList,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType],[pfIsMany]);
  95. {$IFDEF HAS_SDO_LONG}
  96. locFactory.addProperty(locObj,s_long_prop,sdo_namespace,SDOTypeDefaultTypeNames[LongType], []);
  97. locFactory.addProperty(locObj,s_long_propList,sdo_namespace,SDOTypeDefaultTypeNames[LongType],[pfIsMany]);
  98. {$ENDIF HAS_SDO_LONG}
  99. {$IFDEF HAS_SDO_SHORT}
  100. locFactory.addProperty(locObj,s_short_prop,sdo_namespace,SDOTypeDefaultTypeNames[ShortType], []);
  101. locFactory.addProperty(locObj,s_short_propList,sdo_namespace,SDOTypeDefaultTypeNames[ShortType],[pfIsMany]);
  102. {$ENDIF HAS_SDO_SHORT}
  103. locFactory.addProperty(locObj,s_string_prop,sdo_namespace,SDOTypeDefaultTypeNames[StringType], []);
  104. locFactory.addProperty(locObj,s_string_propList,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsMany]);
  105. end;
  106. procedure Add_ObjectB();
  107. var
  108. locObj : ISDOType;
  109. begin
  110. locFactory.AddType(s_uri,s_type_object_B,[]);
  111. locObj := locFactory.getType(s_uri,s_type_object_B);
  112. locFactory.addProperty(locObj,s_bool_prop,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType], []);
  113. locFactory.addProperty(locObj,s_bool_propList,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType],[pfIsMany]);
  114. locFactory.addProperty(locObj,s_byte_prop,sdo_namespace,SDOTypeDefaultTypeNames[ByteType], []);
  115. locFactory.addProperty(locObj,s_byte_propList,sdo_namespace,SDOTypeDefaultTypeNames[ByteType],[pfIsMany]);
  116. {$IFDEF HAS_SDO_BYTES}
  117. locFactory.addProperty(locObj,s_bytes_prop,sdo_namespace,SDOTypeDefaultTypeNames[BytesType], []);
  118. locFactory.addProperty(locObj,s_bytes_propList,sdo_namespace,SDOTypeDefaultTypeNames[BytesType],[pfIsMany]);
  119. {$ENDIF HAS_SDO_BYTES}
  120. {$IFDEF HAS_SDO_CHAR}
  121. locFactory.addProperty(locObj,s_char_prop,sdo_namespace,SDOTypeDefaultTypeNames[CharacterType], []);
  122. locFactory.addProperty(locObj,s_char_propList,sdo_namespace,SDOTypeDefaultTypeNames[CharacterType],[pfIsMany]);
  123. {$ENDIF HAS_SDO_CHAR}
  124. {$IFDEF HAS_SDO_CURRENCY}
  125. locFactory.addProperty(locObj,s_currency_prop,sdo_namespace,SDOTypeDefaultTypeNames[CurrencyType], []);
  126. locFactory.addProperty(locObj,s_currency_propList,sdo_namespace,SDOTypeDefaultTypeNames[CurrencyType],[pfIsMany]);
  127. {$ENDIF HAS_SDO_CURRENCY}
  128. locFactory.addProperty(locObj,s_date_prop,sdo_namespace,SDOTypeDefaultTypeNames[DateTimeType], []);
  129. locFactory.addProperty(locObj,s_date_propList,sdo_namespace,SDOTypeDefaultTypeNames[DateTimeType],[pfIsMany]);
  130. {$IFDEF HAS_SDO_DOUBLE}
  131. locFactory.addProperty(locObj,s_double_prop,sdo_namespace,SDOTypeDefaultTypeNames[DoubleType], []);
  132. locFactory.addProperty(locObj,s_double_propList,sdo_namespace,SDOTypeDefaultTypeNames[DoubleType],[pfIsMany]);
  133. {$ENDIF HAS_SDO_DOUBLE}
  134. {$IFDEF HAS_SDO_FLOAT}
  135. locFactory.addProperty(locObj,s_float_prop,sdo_namespace,SDOTypeDefaultTypeNames[FloatType], []);
  136. locFactory.addProperty(locObj,s_float_propList,sdo_namespace,SDOTypeDefaultTypeNames[FloatType],[pfIsMany]);
  137. {$ENDIF HAS_SDO_FLOAT}
  138. locFactory.addProperty(locObj,s_integer_prop,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType], []);
  139. {$IFDEF HAS_SDO_LONG}
  140. locFactory.addProperty(locObj,s_long_prop,sdo_namespace,SDOTypeDefaultTypeNames[LongType], []);
  141. locFactory.addProperty(locObj,s_long_propList,sdo_namespace,SDOTypeDefaultTypeNames[LongType],[pfIsMany]);
  142. {$ENDIF HAS_SDO_LONG}
  143. {$IFDEF HAS_SDO_SHORT}
  144. locFactory.addProperty(locObj,s_short_prop,sdo_namespace,SDOTypeDefaultTypeNames[ShortType], []);
  145. locFactory.addProperty(locObj,s_short_propList,sdo_namespace,SDOTypeDefaultTypeNames[ShortType],[pfIsMany]);
  146. {$ENDIF HAS_SDO_SHORT}
  147. locFactory.addProperty(locObj,s_integer_propList,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType],[pfIsMany]);
  148. locFactory.addProperty(locObj,s_string_prop,sdo_namespace,SDOTypeDefaultTypeNames[StringType], []);
  149. locFactory.addProperty(locObj,s_string_propList,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsMany]);
  150. locFactory.addProperty(locObj,s_object_prop,s_uri,s_type_object_A,[pfIsContainment]);
  151. locFactory.addProperty(locObj,s_object_propList,s_uri,s_type_object_A,[pfIsMany,pfIsContainment]);
  152. end;
  153. procedure Add_ObjectC();
  154. var
  155. locObj : ISDOType;
  156. begin
  157. locFactory.AddType(s_uri_2,s_type_object_C,[]);
  158. locObj := locFactory.getType(s_uri_2,s_type_object_C);
  159. locFactory.addProperty(locObj,s_bool_prop,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType], []);
  160. locFactory.addProperty(locObj,s_bool_propList,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType],[pfIsMany]);
  161. locFactory.addProperty(locObj,s_byte_prop,sdo_namespace,SDOTypeDefaultTypeNames[ByteType], []);
  162. locFactory.addProperty(locObj,s_byte_propList,sdo_namespace,SDOTypeDefaultTypeNames[ByteType],[pfIsMany]);
  163. {$IFDEF HAS_SDO_BYTES}
  164. locFactory.addProperty(locObj,s_bytes_prop,sdo_namespace,SDOTypeDefaultTypeNames[BytesType], []);
  165. locFactory.addProperty(locObj,s_bytes_propList,sdo_namespace,SDOTypeDefaultTypeNames[BytesType],[pfIsMany]);
  166. {$ENDIF HAS_SDO_BYTES}
  167. {$IFDEF HAS_SDO_CHAR}
  168. locFactory.addProperty(locObj,s_char_prop,sdo_namespace,SDOTypeDefaultTypeNames[CharacterType], []);
  169. locFactory.addProperty(locObj,s_char_propList,sdo_namespace,SDOTypeDefaultTypeNames[CharacterType],[pfIsMany]);
  170. {$ENDIF HAS_SDO_CHAR}
  171. {$IFDEF HAS_SDO_CURRENCY}
  172. locFactory.addProperty(locObj,s_currency_prop,sdo_namespace,SDOTypeDefaultTypeNames[CurrencyType], []);
  173. locFactory.addProperty(locObj,s_currency_propList,sdo_namespace,SDOTypeDefaultTypeNames[CurrencyType],[pfIsMany]);
  174. {$ENDIF HAS_SDO_CURRENCY}
  175. locFactory.addProperty(locObj,s_date_prop,sdo_namespace,SDOTypeDefaultTypeNames[DateTimeType], []);
  176. locFactory.addProperty(locObj,s_date_propList,sdo_namespace,SDOTypeDefaultTypeNames[DateTimeType],[pfIsMany]);
  177. {$IFDEF HAS_SDO_DOUBLE}
  178. locFactory.addProperty(locObj,s_double_prop,sdo_namespace,SDOTypeDefaultTypeNames[DoubleType], []);
  179. locFactory.addProperty(locObj,s_double_propList,sdo_namespace,SDOTypeDefaultTypeNames[DoubleType],[pfIsMany]);
  180. {$ENDIF HAS_SDO_DOUBLE}
  181. {$IFDEF HAS_SDO_FLOAT}
  182. locFactory.addProperty(locObj,s_float_prop,sdo_namespace,SDOTypeDefaultTypeNames[FloatType], []);
  183. locFactory.addProperty(locObj,s_float_propList,sdo_namespace,SDOTypeDefaultTypeNames[FloatType],[pfIsMany]);
  184. {$ENDIF HAS_SDO_FLOAT}
  185. locFactory.addProperty(locObj,s_integer_prop,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType], []);
  186. locFactory.addProperty(locObj,s_integer_propList,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType],[pfIsMany]);
  187. {$IFDEF HAS_SDO_LONG}
  188. locFactory.addProperty(locObj,s_long_prop,sdo_namespace,SDOTypeDefaultTypeNames[LongType], []);
  189. locFactory.addProperty(locObj,s_long_propList,sdo_namespace,SDOTypeDefaultTypeNames[LongType],[pfIsMany]);
  190. {$ENDIF HAS_SDO_LONG}
  191. {$IFDEF HAS_SDO_SHORT}
  192. locFactory.addProperty(locObj,s_short_prop,sdo_namespace,SDOTypeDefaultTypeNames[ShortType], []);
  193. locFactory.addProperty(locObj,s_short_propList,sdo_namespace,SDOTypeDefaultTypeNames[ShortType],[pfIsMany]);
  194. {$ENDIF HAS_SDO_SHORT}
  195. locFactory.addProperty(locObj,s_string_prop,sdo_namespace,SDOTypeDefaultTypeNames[StringType], []);
  196. locFactory.addProperty(locObj,s_string_propList,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsMany]);
  197. end;
  198. begin
  199. locFactory := TSDODataFactory.Create() as ISDODataFactory;
  200. Add_ObjectA(s_uri);
  201. Add_ObjectA(s_uri_2);
  202. Add_ObjectB();
  203. Add_ObjectC();
  204. Result := locFactory;
  205. end;
  206. function TSDOEqualityHelper_Test.createObjA(const AUri: string; const AFact: ISDODataFactory): ISDODataObject;
  207. const
  208. VAL_1 : TSDODate = ( Date : 35000; HourOffset : 3; MinuteOffset : 4; );
  209. VAL_2 : TSDODate = ( Date : 40000; HourOffset : 0; MinuteOffset : 0; );
  210. VAL_3 : TSDODate = ( Date : 38000; HourOffset : 5; MinuteOffset : 45; );
  211. VAL_4 : TSDODate = ( Date : 39000; HourOffset : 6; MinuteOffset : 55; );
  212. {$IFDEF HAS_SDO_DOUBLE}
  213. DOUBLE_VALUES_REPEATED_DIGITED : array[0..3] of TSDODouble = (
  214. 123456789.3258942121, 0, -147258369.987654321, -58369.98321
  215. );
  216. {$ENDIF HAS_SDO_DOUBLE}
  217. {$IFDEF HAS_SDO_FLOAT}
  218. FLOAT_VALUES_REPEATED_DIGITED : array[0..3] of TSDOFloat = (
  219. -123789.325121, -96321.558, 0, 83629.5851
  220. );
  221. {$ENDIF HAS_SDO_FLOAT}
  222. {$IFDEF HAS_SDO_CURRENCY}
  223. CURRENCY_VALUES_REPEATED_DIGITED : array[0..3] of TSDOCurrency = (
  224. 6789.3258, 0, -258369.9876, -542424242369.9421
  225. );
  226. {$ENDIF HAS_SDO_CURRENCY}
  227. var
  228. VAL_1_BYTES, VAL_2_BYTES, VAL_3_BYTES, VAL_4_BYTES : TSDOBytes;
  229. procedure SetConstants();
  230. var
  231. v : TSDOBytes;
  232. k : Integer;
  233. begin
  234. SetLength(v,10);
  235. for k := 0 to High(v) do
  236. v[k] := k mod High(Byte);
  237. VAL_1_BYTES := v;
  238. v := nil;
  239. VAL_2_BYTES := nil;
  240. SetLength(v,20);
  241. for k := 0 to High(v) do
  242. v[k] := ( ( 3 * k ) + 1 ) mod High(Byte);
  243. VAL_3_BYTES := v;
  244. v := nil;
  245. SetLength(v,30);
  246. for k := 0 to High(v) do
  247. v[k] := ( ( 3 * k ) + 1 ) mod High(Byte);
  248. VAL_4_BYTES := v;
  249. v := nil;
  250. end;
  251. var
  252. ls : ISDODataObjectList;
  253. begin
  254. SetConstants();
  255. Result := AFact.createNew(AUri,s_type_object_A);
  256. Result.setBoolean(s_bool_prop,True);
  257. Result.setByte(s_byte_prop,123);
  258. {$IFDEF HAS_SDO_BYTES}
  259. Result.setBytes(s_bytes_prop,VAL_1_BYTES);
  260. {$ENDIF HAS_SDO_BYTES}
  261. {$IFDEF HAS_SDO_CHAR}
  262. Result.setCharacter(s_char_prop,'x');
  263. {$ENDIF HAS_SDO_CHAR}
  264. {$IFDEF HAS_SDO_CURRENCY}
  265. Result.setCurrency(s_currency_prop,123.4567);
  266. {$ENDIF HAS_SDO_CURRENCY}
  267. Result.setDate(s_date_prop,VAL_1);
  268. {$IFDEF HAS_SDO_DOUBLE}
  269. Result.setDouble(s_double_prop,78.3654);
  270. {$ENDIF HAS_SDO_DOUBLE}
  271. {$IFDEF HAS_SDO_FLOAT}
  272. Result.setFloat(s_float_prop,-159.753);
  273. {$ENDIF HAS_SDO_FLOAT}
  274. Result.setInteger(s_integer_prop,1210);
  275. {$IFDEF HAS_SDO_LONG}
  276. Result.setLong(s_long_prop,123456789987654321);
  277. {$ENDIF HAS_SDO_LONG}
  278. {$IFDEF HAS_SDO_SHORT}
  279. Result.setShort(s_short_prop,6541);
  280. {$ENDIF HAS_SDO_SHORT}
  281. Result.setString(s_string_prop,'inoussa wst fpc');
  282. ls := Result.getList(s_bool_propList);
  283. ls.append(True);
  284. ls.append(True);
  285. ls.append(False);
  286. ls.append(True);
  287. ls.append(False);
  288. ls := Result.getList(s_byte_propList);
  289. ls.append(TSDOByte(1));
  290. ls.append(TSDOByte(12));
  291. ls.append(TSDOByte(23));
  292. {$IFDEF HAS_SDO_BYTES}
  293. ls := Result.getList(s_bytes_propList);
  294. ls.appendBytes(VAL_1_BYTES);
  295. ls.appendBytes(VAL_2_BYTES);
  296. ls.appendBytes(VAL_3_BYTES);
  297. ls.appendBytes(VAL_4_BYTES);
  298. {$ENDIF HAS_SDO_BYTES}
  299. {$IFDEF HAS_SDO_CHAR}
  300. ls := Result.getList(s_char_propList);
  301. ls.append(TSDOChar('a'));
  302. ls.append(TSDOChar('b'));
  303. ls.append(TSDOChar('p'));
  304. {$ENDIF HAS_SDO_CHAR}
  305. {$IFDEF HAS_SDO_CURRENCY}
  306. ls := Result.getList(s_currency_propList);
  307. ls.appendCurrency(CURRENCY_VALUES_REPEATED_DIGITED[0]);
  308. ls.appendCurrency(CURRENCY_VALUES_REPEATED_DIGITED[1]);
  309. ls.appendCurrency(CURRENCY_VALUES_REPEATED_DIGITED[2]);
  310. ls.appendCurrency(CURRENCY_VALUES_REPEATED_DIGITED[3]);
  311. {$ENDIF HAS_SDO_CURRENCY}
  312. {$IFDEF HAS_SDO_DOUBLE}
  313. ls := Result.getList(s_double_propList);
  314. ls.append(DOUBLE_VALUES_REPEATED_DIGITED[0]);
  315. ls.append(DOUBLE_VALUES_REPEATED_DIGITED[1]);
  316. ls.append(DOUBLE_VALUES_REPEATED_DIGITED[2]);
  317. ls.append(DOUBLE_VALUES_REPEATED_DIGITED[3]);
  318. {$ENDIF HAS_SDO_DOUBLE}
  319. {$IFDEF HAS_SDO_FLOAT}
  320. ls := Result.getList(s_float_propList);
  321. ls.append(FLOAT_VALUES_REPEATED_DIGITED[0]);
  322. ls.append(FLOAT_VALUES_REPEATED_DIGITED[1]);
  323. ls.append(FLOAT_VALUES_REPEATED_DIGITED[2]);
  324. ls.append(FLOAT_VALUES_REPEATED_DIGITED[3]);
  325. {$ENDIF HAS_SDO_FLOAT}
  326. ls := Result.getList(s_date_propList);
  327. ls.append(VAL_1);
  328. ls.append(VAL_2);
  329. ls.append(VAL_3);
  330. ls.append(VAL_4);
  331. ls := Result.getList(s_integer_propList);
  332. ls.append(12);
  333. ls.append(10);
  334. ls.append(76);
  335. ls.append(-123);
  336. ls.append(0);
  337. {$IFDEF HAS_SDO_LONG}
  338. ls := Result.getList(s_long_propList);
  339. ls.append(TSDOLong(748159623849516236));
  340. ls.append(TSDOLong(0));
  341. ls.append(TSDOLong(-3692581479137842655));
  342. ls.append(TSDOLong(112233445566778899));
  343. {$ENDIF HAS_SDO_LONG}
  344. {$IFDEF HAS_SDO_SHORT}
  345. ls := Result.getList(s_short_propList);
  346. ls.append(TSDOLong(7481));
  347. ls.append(TSDOLong(0));
  348. ls.append(TSDOLong(-3655));
  349. ls.append(TSDOLong(8899));
  350. {$ENDIF HAS_SDO_ShORT}
  351. ls := Result.getList(s_string_propList);
  352. ls.append('object');
  353. ls.append('');
  354. ls.append('pascal');
  355. ls.append('Lazarus');
  356. ls.append('Delphi');
  357. end;
  358. function TSDOEqualityHelper_Test.createObjB(const AUri: string; const AFact: ISDODataFactory): ISDODataObject;
  359. const
  360. VAL_1 : TSDODate = ( Date : 45678; HourOffset : 3; MinuteOffset : 4; );
  361. VAL_2 : TSDODate = ( Date : 41234; HourOffset : 0; MinuteOffset : 0; );
  362. VAL_3 : TSDODate = ( Date : 38976; HourOffset : 5; MinuteOffset : 45; );
  363. VAL_4 : TSDODate = ( Date : 39254; HourOffset : 6; MinuteOffset : 55; );
  364. {$IFDEF HAS_SDO_DOUBLE}
  365. DOUBLE_VALUES_REPEATED_DIGITED : array[0..3] of TSDODouble = (
  366. 123456789.3258942121, 0, -147258369.987654321, -58369.98321
  367. );
  368. {$ENDIF HAS_SDO_DOUBLE}
  369. {$IFDEF HAS_SDO_FLOAT}
  370. FLOAT_VALUES_REPEATED_DIGITED : array[0..3] of TSDOFloat = (
  371. -123789.325121, -96321.558, 0, 83629.5851
  372. );
  373. {$ENDIF HAS_SDO_FLOAT}
  374. {$IFDEF HAS_SDO_CURRENCY}
  375. CURRENCY_VALUES_REPEATED_DIGITED : array[0..3] of TSDOCurrency = (
  376. 6789.3258, 0, -258369.9876, -542424242369.9421
  377. );
  378. {$ENDIF HAS_SDO_CURRENCY}
  379. var
  380. VAL_1_BYTES, VAL_2_BYTES, VAL_3_BYTES, VAL_4_BYTES : TSDOBytes;
  381. procedure SetConstants();
  382. var
  383. v : TSDOBytes;
  384. k : Integer;
  385. begin
  386. SetLength(v,5);
  387. for k := 0 to High(v) do
  388. v[k] := k mod High(Byte);
  389. VAL_1_BYTES := v;
  390. v := nil;
  391. VAL_2_BYTES := nil;
  392. SetLength(v,23);
  393. for k := 0 to High(v) do
  394. v[k] := ( ( 3 * k ) + 1 ) mod High(Byte);
  395. VAL_3_BYTES := v;
  396. v := nil;
  397. SetLength(v,35);
  398. for k := 0 to High(v) do
  399. v[k] := ( ( 3 * k ) + 1 ) mod High(Byte);
  400. VAL_4_BYTES := v;
  401. v := nil;
  402. end;
  403. var
  404. ls : ISDODataObjectList;
  405. begin
  406. SetConstants();
  407. Result := AFact.createNew(AUri,s_type_object_B);
  408. Result.setBoolean(s_bool_prop,True);
  409. Result.setByte(s_byte_prop,123);
  410. {$IFDEF HAS_SDO_BYTES}
  411. Result.setBytes(s_bytes_prop,VAL_1_BYTES);
  412. {$ENDIF HAS_SDO_BYTES}
  413. {$IFDEF HAS_SDO_CHAR}
  414. Result.setCharacter(s_char_prop,'l');
  415. {$ENDIF HAS_SDO_CHAR}
  416. {$IFDEF HAS_SDO_CURRENCY}
  417. Result.setCurrency(s_currency_prop,23.45);
  418. {$ENDIF HAS_SDO_CURRENCY}
  419. Result.setDate(s_date_prop,VAL_2);
  420. {$IFDEF HAS_SDO_DOUBLE}
  421. Result.setDouble(s_double_prop,8521.0255);
  422. {$ENDIF HAS_SDO_DOUBLE}
  423. {$IFDEF HAS_SDO_FLOAT}
  424. Result.setFloat(s_float_prop,-5852.655753);
  425. {$ENDIF HAS_SDO_FLOAT}
  426. Result.setInteger(s_integer_prop,1210);
  427. {$IFDEF HAS_SDO_LONG}
  428. Result.setLong(s_long_prop,123456789987654321);
  429. {$ENDIF HAS_SDO_LONG}
  430. {$IFDEF HAS_SDO_SHORT}
  431. Result.setShort(s_short_prop,6541);
  432. {$ENDIF HAS_SDO_SHORT}
  433. Result.setString(s_string_prop,'inoussa wst fpc');
  434. ls := Result.getList(s_bool_propList);
  435. ls.append(True);
  436. ls.append(True);
  437. ls.append(False);
  438. ls.append(True);
  439. ls.append(False);
  440. ls := Result.getList(s_byte_propList);
  441. ls.append(TSDOByte(1));
  442. ls.append(TSDOByte(12));
  443. ls.append(TSDOByte(23));
  444. {$IFDEF HAS_SDO_BYTES}
  445. ls := Result.getList(s_bytes_propList);
  446. ls.appendBytes(VAL_1_BYTES);
  447. ls.appendBytes(VAL_2_BYTES);
  448. ls.appendBytes(VAL_3_BYTES);
  449. ls.appendBytes(VAL_4_BYTES);
  450. {$ENDIF HAS_SDO_BYTES}
  451. {$IFDEF HAS_SDO_CHAR}
  452. ls := Result.getList(s_char_propList);
  453. ls.append(TSDOChar('a'));
  454. ls.append(TSDOChar('b'));
  455. ls.append(TSDOChar('p'));
  456. {$ENDIF HAS_SDO_CHAR}
  457. {$IFDEF HAS_SDO_CURRENCY}
  458. ls := Result.getList(s_currency_propList);
  459. ls.appendCurrency(CURRENCY_VALUES_REPEATED_DIGITED[0]);
  460. ls.appendCurrency(CURRENCY_VALUES_REPEATED_DIGITED[1]);
  461. ls.appendCurrency(CURRENCY_VALUES_REPEATED_DIGITED[2]);
  462. ls.appendCurrency(CURRENCY_VALUES_REPEATED_DIGITED[3]);
  463. {$ENDIF HAS_SDO_CURRENCY}
  464. {$IFDEF HAS_SDO_DOUBLE}
  465. ls := Result.getList(s_double_propList);
  466. ls.append(DOUBLE_VALUES_REPEATED_DIGITED[0]);
  467. ls.append(DOUBLE_VALUES_REPEATED_DIGITED[1]);
  468. ls.append(DOUBLE_VALUES_REPEATED_DIGITED[2]);
  469. ls.append(DOUBLE_VALUES_REPEATED_DIGITED[3]);
  470. {$ENDIF HAS_SDO_DOUBLE}
  471. {$IFDEF HAS_SDO_FLOAT}
  472. ls := Result.getList(s_float_propList);
  473. ls.append(FLOAT_VALUES_REPEATED_DIGITED[0]);
  474. ls.append(FLOAT_VALUES_REPEATED_DIGITED[1]);
  475. ls.append(FLOAT_VALUES_REPEATED_DIGITED[2]);
  476. ls.append(FLOAT_VALUES_REPEATED_DIGITED[3]);
  477. {$ENDIF HAS_SDO_FLOAT}
  478. ls := Result.getList(s_date_propList);
  479. ls.append(VAL_1);
  480. ls.append(VAL_2);
  481. ls.append(VAL_3);
  482. ls.append(VAL_4);
  483. ls := Result.getList(s_integer_propList);
  484. ls.append(12);
  485. ls.append(10);
  486. ls.append(76);
  487. ls.append(-123);
  488. ls.append(0);
  489. {$IFDEF HAS_SDO_LONG}
  490. ls := Result.getList(s_long_propList);
  491. ls.append(TSDOLong(7481596238495162375));
  492. ls.append(TSDOLong(0));
  493. ls.append(TSDOLong(-3692581479137842655));
  494. ls.append(TSDOLong(112233445566778899));
  495. {$ENDIF HAS_SDO_LONG}
  496. {$IFDEF HAS_SDO_SHORT}
  497. ls := Result.getList(s_short_propList);
  498. ls.append(TSDOLong(7481));
  499. ls.append(TSDOLong(0));
  500. ls.append(TSDOLong(-3655));
  501. ls.append(TSDOLong(8899));
  502. {$ENDIF HAS_SDO_ShORT}
  503. ls := Result.getList(s_string_propList);
  504. ls.append('object');
  505. ls.append('');
  506. ls.append('pascal');
  507. ls.append('Lazarus');
  508. ls.append('Delphi');
  509. Result.setDataObject(s_object_prop,AFact.createNew(s_uri,s_type_object_A));
  510. Result.getDataObject(s_object_prop).setString(s_string_prop,'B->A->' + s_string_prop);
  511. ls := Result.getList(s_object_propList);
  512. ls.append(AFact.createNew(AUri,s_type_object_A));
  513. ls.append(AFact.createNew(AUri,s_type_object_A));
  514. ls.getCursor().MoveFirst();
  515. ls.getDataObject().setString(s_string_prop,'B->A[0]->' + s_string_prop);
  516. ls.getCursor().MoveNext();
  517. ls.getDataObject().setString(s_string_prop,'B->A[1]->' + s_string_prop);
  518. end;
  519. function TSDOEqualityHelper_Test.createObjC(const AUri: string; const AFact: ISDODataFactory): ISDODataObject;
  520. const
  521. VAL_1 : TSDODate = ( Date : 38678; HourOffset : 3; MinuteOffset : 4; );
  522. VAL_2 : TSDODate = ( Date : 39234; HourOffset : 0; MinuteOffset : 0; );
  523. VAL_3 : TSDODate = ( Date : 40976; HourOffset : 5; MinuteOffset : 45; );
  524. VAL_4 : TSDODate = ( Date : 41254; HourOffset : 6; MinuteOffset : 55; );
  525. var
  526. ls : ISDODataObjectList;
  527. begin
  528. Result := AFact.createNew(AUri,s_type_object_A);
  529. Result.setByte(s_byte_prop,123);
  530. Result.setDate(s_date_prop,VAL_3);
  531. Result.setBoolean(s_bool_prop,True);
  532. Result.setInteger(s_integer_prop,1210);
  533. Result.setString(s_string_prop,'inoussa wst fpc');
  534. ls := Result.getList(s_bool_propList);
  535. ls.append(True);
  536. ls.append(True);
  537. ls.append(False);
  538. ls.append(True);
  539. ls.append(False);
  540. ls := Result.getList(s_byte_propList);
  541. ls.append(TSDOByte(1));
  542. ls.append(TSDOByte(12));
  543. ls.append(TSDOByte(23));
  544. ls := Result.getList(s_date_propList);
  545. ls.append(VAL_1);
  546. ls.append(VAL_2);
  547. ls.append(VAL_3);
  548. ls.append(VAL_4);
  549. ls := Result.getList(s_integer_propList);
  550. ls.append(12);
  551. ls.append(10);
  552. ls.append(76);
  553. ls.append(-123);
  554. ls.append(0);
  555. ls := Result.getList(s_string_propList);
  556. ls.append('object');
  557. ls.append('');
  558. ls.append('pascal');
  559. ls.append('Lazarus');
  560. ls.append('Delphi');
  561. end;
  562. procedure TSDOEqualityHelper_Test.equal_empty_object();
  563. var
  564. fA, fB : ISDODataFactory;
  565. x, y : ISDODataObject;
  566. eh : TSDOEqualityHelperClass;
  567. begin
  568. fA := CreateFactory();
  569. fB := CreateFactory();
  570. eh := CreateEqualityHelper();
  571. x := fA.createNew(s_uri,s_type_object_A);
  572. y := fA.createNew(s_uri,s_type_object_A);
  573. CheckEquals(True,eh.equal(x,y));
  574. CheckEquals(True,eh.equal(y,x));
  575. x := fA.createNew(s_uri,s_type_object_A);
  576. y := fB.createNew(s_uri,s_type_object_A);
  577. CheckEquals(True,eh.equal(x,y));
  578. CheckEquals(True,eh.equal(y,x));
  579. x := fA.createNew(s_uri,s_type_object_B);
  580. y := fA.createNew(s_uri,s_type_object_B);
  581. CheckEquals(True,eh.equal(x,y));
  582. CheckEquals(True,eh.equal(y,x));
  583. x := fA.createNew(s_uri,s_type_object_B);
  584. y := fB.createNew(s_uri,s_type_object_B);
  585. CheckEquals(True,eh.equal(x,y));
  586. CheckEquals(True,eh.equal(y,x));
  587. x := fA.createNew(s_uri_2,s_type_object_C);
  588. y := fB.createNew(s_uri_2,s_type_object_C);
  589. CheckEquals(True,eh.equal(x,y));
  590. CheckEquals(True,eh.equal(y,x));
  591. end;
  592. procedure TSDOEqualityHelper_Test.equalShallow_empty_object();
  593. var
  594. fA, fB : ISDODataFactory;
  595. x, y : ISDODataObject;
  596. eh : TSDOEqualityHelperClass;
  597. begin
  598. fA := CreateFactory();
  599. fB := CreateFactory();
  600. eh := CreateEqualityHelper();
  601. x := fA.createNew(s_uri,s_type_object_A);
  602. y := fA.createNew(s_uri,s_type_object_A);
  603. CheckEquals(True,eh.equalShallow(x,y));
  604. CheckEquals(True,eh.equalShallow(y,x));
  605. x := fA.createNew(s_uri,s_type_object_A);
  606. y := fB.createNew(s_uri,s_type_object_A);
  607. CheckEquals(True,eh.equalShallow(x,y));
  608. CheckEquals(True,eh.equalShallow(y,x));
  609. x := fA.createNew(s_uri,s_type_object_B);
  610. y := fA.createNew(s_uri,s_type_object_B);
  611. CheckEquals(True,eh.equalShallow(x,y));
  612. CheckEquals(True,eh.equalShallow(y,x));
  613. x := fA.createNew(s_uri,s_type_object_B);
  614. y := fB.createNew(s_uri,s_type_object_B);
  615. CheckEquals(True,eh.equalShallow(x,y));
  616. CheckEquals(True,eh.equalShallow(y,x));
  617. x := fA.createNew(s_uri_2,s_type_object_C);
  618. y := fB.createNew(s_uri_2,s_type_object_C);
  619. CheckEquals(True,eh.equalShallow(x,y));
  620. CheckEquals(True,eh.equalShallow(y,x));
  621. end;
  622. procedure TSDOEqualityHelper_Test.equalShallow_object();
  623. var
  624. fA, fB : ISDODataFactory;
  625. x, y : ISDODataObject;
  626. eh : TSDOEqualityHelperClass;
  627. begin
  628. fA := CreateFactory();
  629. fB := CreateFactory();
  630. eh := CreateEqualityHelper();
  631. x := createObjA(s_uri, fA);
  632. y := createObjA(s_uri, fA);
  633. CheckEquals(True,eh.equalShallow(x,y));
  634. CheckEquals(True,eh.equalShallow(y,x));
  635. x := createObjA(s_uri, fA);
  636. y := createObjA(s_uri, fB);
  637. CheckEquals(True,eh.equalShallow(x,y));
  638. CheckEquals(True,eh.equalShallow(y,x));
  639. end;
  640. procedure TSDOEqualityHelper_Test.equalShallow_object_not_equal_type();
  641. var
  642. fA, fB : ISDODataFactory;
  643. x, y : ISDODataObject;
  644. eh : TSDOEqualityHelperClass;
  645. begin
  646. fA := CreateFactory();
  647. fB := CreateFactory();
  648. eh := CreateEqualityHelper();
  649. x := createObjA(s_uri, fA);
  650. y := createObjA(s_uri_2, fA);
  651. CheckEquals(False,eh.equalShallow(x,y));
  652. CheckEquals(False,eh.equalShallow(y,x));
  653. x := createObjA(s_uri, fA);
  654. y := createObjC(s_uri_2, fA);
  655. CheckEquals(False,eh.equalShallow(x,y));
  656. CheckEquals(False,eh.equalShallow(y,x));
  657. x := createObjA(s_uri, fA);
  658. y := createObjA(s_uri_2, fB);
  659. CheckEquals(False,eh.equalShallow(x,y));
  660. CheckEquals(False,eh.equalShallow(y,x));
  661. x := createObjA(s_uri, fA);
  662. y := createObjC(s_uri_2, fB);
  663. CheckEquals(False,eh.equalShallow(x,y));
  664. CheckEquals(False,eh.equalShallow(y,x));
  665. end;
  666. procedure TSDOEqualityHelper_Test.equalShallow_object_not_equal_value();
  667. var
  668. fA, fB : ISDODataFactory;
  669. x, y : ISDODataObject;
  670. eh : TSDOEqualityHelperClass;
  671. ls : ISDODataObjectList;
  672. begin
  673. fA := CreateFactory();
  674. fB := CreateFactory();
  675. eh := CreateEqualityHelper();
  676. // ObjectA
  677. x := createObjA(s_uri, fA);
  678. y := createObjA(s_uri, fA);
  679. CheckEquals(True,eh.equalShallow(x,y));
  680. CheckEquals(True,eh.equalShallow(y,x));
  681. x.setBoolean(s_bool_prop, not x.getBoolean(s_bool_prop));
  682. CheckEquals(False,eh.equalShallow(x,y));
  683. CheckEquals(False,eh.equalShallow(y,x));
  684. x.setBoolean(s_bool_prop, not x.getBoolean(s_bool_prop));
  685. x.setByte(s_byte_prop, 98);
  686. CheckEquals(False,eh.equalShallow(x,y));
  687. CheckEquals(False,eh.equalShallow(y,x));
  688. x.setByte(s_byte_prop, y.getByte(s_byte_prop));
  689. x.setInteger(s_integer_prop, 98766);
  690. CheckEquals(False,eh.equalShallow(x,y));
  691. CheckEquals(False,eh.equalShallow(y,x));
  692. x.setInteger(s_integer_prop, y.getInteger(s_integer_prop));
  693. x.setString(s_string_prop, 'mlkqsdf');
  694. CheckEquals(False,eh.equalShallow(x,y));
  695. CheckEquals(False,eh.equalShallow(y,x));
  696. x.setString(s_string_prop, y.getString(s_string_prop));
  697. // ObjectB
  698. x := createObjB(s_uri, fA);
  699. y := createObjB(s_uri, fA);
  700. CheckEquals(True,eh.equalShallow(x,y));
  701. CheckEquals(True,eh.equalShallow(y,x));
  702. x.setBoolean(s_bool_prop, not x.getBoolean(s_bool_prop));
  703. CheckEquals(False,eh.equalShallow(x,y));
  704. CheckEquals(False,eh.equalShallow(y,x));
  705. x.setBoolean(s_bool_prop, not x.getBoolean(s_bool_prop));
  706. x.setByte(s_byte_prop, 98);
  707. CheckEquals(False,eh.equalShallow(x,y));
  708. CheckEquals(False,eh.equalShallow(y,x));
  709. x.setByte(s_byte_prop, y.getByte(s_byte_prop));
  710. x.setInteger(s_integer_prop, 98766);
  711. CheckEquals(False,eh.equalShallow(x,y));
  712. CheckEquals(False,eh.equalShallow(y,x));
  713. x.setInteger(s_integer_prop, y.getInteger(s_integer_prop));
  714. x.setString(s_string_prop, 'mlkqsdf');
  715. CheckEquals(False,eh.equalShallow(x,y));
  716. CheckEquals(False,eh.equalShallow(y,x));
  717. x.setString(s_string_prop, y.getString(s_string_prop));
  718. x.getDataObject(s_object_prop).setByte(s_byte_prop,51);
  719. CheckEquals(True,eh.equalShallow(x,y),'<equalShallow> should not compare object properties.');
  720. CheckEquals(True,eh.equalShallow(y,x),'<equalShallow> should not compare object properties.');
  721. x.getDataObject(s_object_prop).setByte(s_byte_prop,y.getDataObject(s_object_prop).getInteger(s_byte_prop));
  722. x.getDataObject(s_object_prop).setInteger(s_integer_prop,66666);
  723. CheckEquals(True,eh.equalShallow(x,y),'<equalShallow> should not compare object properties.');
  724. CheckEquals(True,eh.equalShallow(y,x),'<equalShallow> should not compare object properties.');
  725. x.getDataObject(s_object_prop).setInteger(s_integer_prop,y.getDataObject(s_object_prop).getInteger(s_integer_prop));
  726. ls := x.getList(s_integer_propList);
  727. ls.getCursor().MoveLast();
  728. ls.setInteger(-777);
  729. CheckEquals(False,eh.equalShallow(x,y));
  730. CheckEquals(False,eh.equalShallow(y,x));
  731. end;
  732. procedure TSDOEqualityHelper_Test.equal_object();
  733. var
  734. fA, fB : ISDODataFactory;
  735. x, y : ISDODataObject;
  736. eh : TSDOEqualityHelperClass;
  737. begin
  738. fA := CreateFactory();
  739. fB := CreateFactory();
  740. eh := CreateEqualityHelper();
  741. x := createObjA(s_uri, fA);
  742. y := createObjA(s_uri, fA);
  743. CheckEquals(True,eh.equalShallow(x,y));
  744. CheckEquals(True,eh.equalShallow(y,x));
  745. x := createObjA(s_uri, fA);
  746. y := createObjA(s_uri, fB);
  747. CheckEquals(True,eh.equalShallow(x,y));
  748. CheckEquals(True,eh.equalShallow(y,x));
  749. end;
  750. procedure TSDOEqualityHelper_Test.equal_object_not_equal_type();
  751. var
  752. fA, fB : ISDODataFactory;
  753. x, y : ISDODataObject;
  754. eh : TSDOEqualityHelperClass;
  755. begin
  756. fA := CreateFactory();
  757. fB := CreateFactory();
  758. eh := CreateEqualityHelper();
  759. x := createObjA(s_uri, fA);
  760. y := createObjA(s_uri_2, fA);
  761. CheckEquals(False,eh.equal(x,y));
  762. CheckEquals(False,eh.equal(y,x));
  763. x := createObjA(s_uri, fA);
  764. y := createObjC(s_uri_2, fA);
  765. CheckEquals(False,eh.equal(x,y));
  766. CheckEquals(False,eh.equal(y,x));
  767. x := createObjA(s_uri, fA);
  768. y := createObjA(s_uri_2, fB);
  769. CheckEquals(False,eh.equal(x,y));
  770. CheckEquals(False,eh.equal(y,x));
  771. x := createObjA(s_uri, fA);
  772. y := createObjC(s_uri_2, fB);
  773. CheckEquals(False,eh.equal(x,y));
  774. CheckEquals(False,eh.equal(y,x));
  775. end;
  776. procedure TSDOEqualityHelper_Test.equal_object_not_equal_value();
  777. var
  778. fA, fB : ISDODataFactory;
  779. x, y : ISDODataObject;
  780. eh : TSDOEqualityHelperClass;
  781. ls : ISDODataObjectList;
  782. tmpInt : TSDOInteger;
  783. begin
  784. fA := CreateFactory();
  785. fB := CreateFactory();
  786. eh := CreateEqualityHelper();
  787. // ObjectA
  788. x := createObjA(s_uri, fA);
  789. y := createObjA(s_uri, fA);
  790. CheckEquals(True,eh.equal(x,y));
  791. CheckEquals(True,eh.equal(y,x));
  792. x.setBoolean(s_bool_prop, not x.getBoolean(s_bool_prop));
  793. CheckEquals(False,eh.equal(x,y));
  794. CheckEquals(False,eh.equal(y,x));
  795. x.setBoolean(s_bool_prop, not x.getBoolean(s_bool_prop));
  796. x.setByte(s_byte_prop, 64);
  797. CheckEquals(False,eh.equal(x,y));
  798. CheckEquals(False,eh.equal(y,x));
  799. x.setByte(s_byte_prop, y.getByte(s_byte_prop));
  800. x.setInteger(s_integer_prop, 98766);
  801. CheckEquals(False,eh.equal(x,y));
  802. CheckEquals(False,eh.equal(y,x));
  803. x.setInteger(s_integer_prop, y.getInteger(s_integer_prop));
  804. x.setString(s_string_prop, 'mlkqsdf');
  805. CheckEquals(False,eh.equal(x,y));
  806. CheckEquals(False,eh.equal(y,x));
  807. x.setString(s_string_prop, y.getString(s_string_prop));
  808. // ObjectB
  809. x := createObjB(s_uri, fA);
  810. y := createObjB(s_uri, fA);
  811. CheckEquals(True,eh.equal(x,y));
  812. CheckEquals(True,eh.equal(y,x));
  813. x.setBoolean(s_bool_prop, not x.getBoolean(s_bool_prop));
  814. CheckEquals(False,eh.equal(x,y));
  815. CheckEquals(False,eh.equal(y,x));
  816. x.setBoolean(s_bool_prop, not x.getBoolean(s_bool_prop));
  817. x.setByte(s_byte_prop, 64);
  818. CheckEquals(False,eh.equal(x,y));
  819. CheckEquals(False,eh.equal(y,x));
  820. x.setByte(s_byte_prop, y.getByte(s_byte_prop));
  821. CheckEquals(True,eh.equal(x,y));
  822. x.setInteger(s_integer_prop, 98766);
  823. CheckEquals(False,eh.equal(x,y));
  824. CheckEquals(False,eh.equal(y,x));
  825. x.setInteger(s_integer_prop, y.getInteger(s_integer_prop));
  826. CheckEquals(True,eh.equal(x,y));
  827. x.setString(s_string_prop, 'mlkqsdf');
  828. CheckEquals(False,eh.equal(x,y));
  829. CheckEquals(False,eh.equal(y,x));
  830. x.setString(s_string_prop, y.getString(s_string_prop));
  831. CheckEquals(True,eh.equal(x,y));
  832. x.getDataObject(s_object_prop).setInteger(s_integer_prop,66666);
  833. CheckEquals(False,eh.equal(x,y),'<equalShallow> should compare object properties.');
  834. CheckEquals(False,eh.equal(y,x),'<equalShallow> should compare object properties.');
  835. if y.getDataObject(s_object_prop).isSet(s_integer_prop) then
  836. x.getDataObject(s_object_prop).setInteger(s_integer_prop,y.getDataObject(s_object_prop).getInteger(s_integer_prop))
  837. else
  838. x.getDataObject(s_object_prop).unset(s_integer_prop);
  839. CheckEquals(True,eh.equal(x,y));
  840. ls := x.getList(s_integer_propList);
  841. ls.getCursor().MoveLast();
  842. tmpInt := ls.getInteger();
  843. ls.setInteger(-777);
  844. CheckEquals(False,eh.equalShallow(x,y));
  845. CheckEquals(False,eh.equalShallow(y,x));
  846. ls.setInteger(tmpInt);
  847. end;
  848. procedure TSDOEqualityHelper_Test.equalShallow_cursorPos();
  849. var
  850. fA : ISDODataFactory;
  851. x, y : ISDODataObject;
  852. lsB, lsI : ISDODataObjectList;
  853. eh : TSDOEqualityHelperClass;
  854. bmB, bmI : TLinkedListBookmark;
  855. begin
  856. fA := CreateFactory();
  857. eh := CreateEqualityHelper();
  858. x := createObjA(s_uri, fA);
  859. lsB := x.getList(s_bool_propList);
  860. lsB.getCursor().MoveFirst();
  861. lsB.getCursor().MoveNext();
  862. lsB.getCursor().MoveNext();
  863. lsI := x.getList(s_integer_propList);
  864. lsI.getCursor().MoveLast();
  865. lsI.getCursor().MovePrevious();
  866. y := createObjA(s_uri, fA);
  867. bmB := lsB.getCursor().GetBookmark();
  868. bmI := lsI.getCursor().GetBookmark();
  869. eh.equalShallow(x,y);
  870. CheckEquals(bmB,lsB.getCursor().GetBookmark());
  871. CheckEquals(bmI,lsI.getCursor().GetBookmark());
  872. eh.equalShallow(y,x);
  873. CheckEquals(bmB,lsB.getCursor().GetBookmark());
  874. CheckEquals(bmI,lsI.getCursor().GetBookmark());
  875. end;
  876. procedure TSDOEqualityHelper_Test.equal_cursorPos();
  877. var
  878. fA : ISDODataFactory;
  879. x, y : ISDODataObject;
  880. lsB, lsI : ISDODataObjectList;
  881. eh : TSDOEqualityHelperClass;
  882. bmB, bmI : TLinkedListBookmark;
  883. begin
  884. fA := CreateFactory();
  885. eh := CreateEqualityHelper();
  886. x := createObjA(s_uri, fA);
  887. lsB := x.getList(s_bool_propList);
  888. lsB.getCursor().MoveFirst();
  889. lsB.getCursor().MoveNext();
  890. lsB.getCursor().MoveNext();
  891. lsI := x.getList(s_integer_propList);
  892. lsI.getCursor().MoveLast();
  893. lsI.getCursor().MovePrevious();
  894. y := createObjA(s_uri, fA);
  895. bmB := lsB.getCursor().GetBookmark();
  896. bmI := lsI.getCursor().GetBookmark();
  897. eh.equal(x,y);
  898. CheckEquals(bmB,lsB.getCursor().GetBookmark());
  899. CheckEquals(bmI,lsI.getCursor().GetBookmark());
  900. eh.equal(y,x);
  901. CheckEquals(bmB,lsB.getCursor().GetBookmark());
  902. CheckEquals(bmI,lsI.getCursor().GetBookmark());
  903. end;
  904. initialization
  905. RegisterTest('Helpers',TSDOEqualityHelper_Test.Suite);
  906. end.