|
|
@@ -0,0 +1,12466 @@
|
|
|
+{$INCLUDE sdo_global.inc}
|
|
|
+unit test_changesummary;
|
|
|
+
|
|
|
+interface
|
|
|
+uses
|
|
|
+ SysUtils, Classes, Contnrs
|
|
|
+{$IFDEF FPC}
|
|
|
+ ,fpcunit, testutils, testregistry
|
|
|
+{$ENDIF}
|
|
|
+{$IFNDEF FPC}
|
|
|
+ ,TestFrameWork
|
|
|
+{$ENDIF}
|
|
|
+ , test_suite_utils, sdo_types, sdo, sdo_changesummary;
|
|
|
+
|
|
|
+type
|
|
|
+
|
|
|
+ TValueSetting_Test = class(TWstBaseTest)
|
|
|
+ private
|
|
|
+ class function CreateFactory() : ISDODataFactory;
|
|
|
+ protected
|
|
|
+ procedure CheckEquals(expected, actual: TSDODate; msg: string = ''; const AStrict : Boolean = True); overload;
|
|
|
+ published
|
|
|
+ procedure create_boolean();
|
|
|
+ procedure create_byte();
|
|
|
+ procedure create_date();
|
|
|
+ procedure create_integer();
|
|
|
+ procedure create_string();
|
|
|
+{$IFDEF HAS_SDO_BYTES}
|
|
|
+ procedure create_bytes();
|
|
|
+{$ENDIF HAS_SDO_BYTES}
|
|
|
+{$IFDEF HAS_SDO_CHAR}
|
|
|
+ procedure create_char();
|
|
|
+{$ENDIF HAS_SDO_CHAR}
|
|
|
+{$IFDEF HAS_SDO_CURRENCY}
|
|
|
+ procedure create_currency();
|
|
|
+{$ENDIF HAS_SDO_CURRENCY}
|
|
|
+{$IFDEF HAS_SDO_DOUBLE}
|
|
|
+ procedure create_double();
|
|
|
+{$ENDIF HAS_SDO_DOUBLE}
|
|
|
+{$IFDEF HAS_SDO_FLOAT}
|
|
|
+ procedure create_float();
|
|
|
+{$ENDIF HAS_SDO_FLOAT}
|
|
|
+{$IFDEF HAS_SDO_LONG}
|
|
|
+ procedure create_long();
|
|
|
+{$ENDIF HAS_SDO_LONG}
|
|
|
+{$IFDEF HAS_SDO_SHORT}
|
|
|
+ procedure create_short();
|
|
|
+{$ENDIF HAS_SDO_SHORT}
|
|
|
+ end;
|
|
|
+
|
|
|
+ (*TDicho_Test = class(TTestCase)
|
|
|
+ published
|
|
|
+ procedure find();
|
|
|
+ procedure build();
|
|
|
+ end; *)
|
|
|
+
|
|
|
+ TSDOSettingList_Test = class(TWstBaseTest)
|
|
|
+ private
|
|
|
+ class function CreateFactory() : ISDODataFactory;
|
|
|
+ published
|
|
|
+ procedure size();
|
|
|
+ procedure insert();
|
|
|
+ procedure append();
|
|
|
+ procedure remove();
|
|
|
+ procedure getItem();
|
|
|
+ end;
|
|
|
+
|
|
|
+ TSDOChangedDataObjectList_Test = class(TWstBaseTest)
|
|
|
+ private
|
|
|
+ class function CreateFactory() : ISDODataFactory;
|
|
|
+ class function CreateObject() : ISDOChangedDataObjectListEx;
|
|
|
+ published
|
|
|
+ procedure size();
|
|
|
+
|
|
|
+ procedure append();
|
|
|
+ procedure find();
|
|
|
+ end;
|
|
|
+
|
|
|
+ TChangeRecorder_Test = class(TWstBaseTest)
|
|
|
+ protected
|
|
|
+ FRecorder : TChangeRecorder;
|
|
|
+ FChangeSummary : ISDOChangeSummary;
|
|
|
+ FFactory : ISDODataFactory;
|
|
|
+ protected
|
|
|
+ procedure CheckEquals(expected, actual: TSDODate; msg: string = ''; const AStrict : Boolean = True); overload;
|
|
|
+ procedure SetUp(); override;
|
|
|
+ procedure TearDown(); override;
|
|
|
+ procedure InitRecorder();
|
|
|
+ protected
|
|
|
+ function CreateRecorder() : TChangeRecorder;
|
|
|
+ class function Create_Factory() : ISDODataFactory;
|
|
|
+ procedure record_int(const ADataObject : ISDODataObject; const APropName : string);
|
|
|
+ procedure record_bool(const ADataObject : ISDODataObject; const APropName : string);
|
|
|
+ procedure record_byte(const ADataObject : ISDODataObject; const APropName : string);
|
|
|
+{$IFDEF HAS_SDO_BYTES}
|
|
|
+ procedure record_bytes(const ADataObject : ISDODataObject; const APropName : string);
|
|
|
+{$ENDIF HAS_SDO_BYTES}
|
|
|
+ procedure record_date(const ADataObject : ISDODataObject; const APropName : string);
|
|
|
+ procedure record_string(const ADataObject : ISDODataObject; const APropName : string);
|
|
|
+ procedure record_obj(const ADataObject : ISDODataObject; const APropName : string);
|
|
|
+{$IFDEF HAS_SDO_CHAR}
|
|
|
+ procedure record_char(const ADataObject : ISDODataObject; const APropName : string);
|
|
|
+{$ENDIF HAS_SDO_CHAR}
|
|
|
+{$IFDEF HAS_SDO_CURRENCY}
|
|
|
+ procedure record_currency(const ADataObject : ISDODataObject; const APropName : string);
|
|
|
+{$ENDIF HAS_SDO_CURRENCY}
|
|
|
+{$IFDEF HAS_SDO_DOUBLE}
|
|
|
+ procedure record_double(const ADataObject : ISDODataObject; const APropName : string);
|
|
|
+{$ENDIF HAS_SDO_DOUBLE}
|
|
|
+{$IFDEF HAS_SDO_FLOAT}
|
|
|
+ procedure record_float(const ADataObject : ISDODataObject; const APropName : string);
|
|
|
+{$ENDIF HAS_SDO_FLOAT}
|
|
|
+{$IFDEF HAS_SDO_LONG}
|
|
|
+ procedure record_long(const ADataObject : ISDODataObject; const APropName : string);
|
|
|
+{$ENDIF HAS_SDO_LONG}
|
|
|
+{$IFDEF HAS_SDO_SHORT}
|
|
|
+ procedure record_short(const ADataObject : ISDODataObject; const APropName : string);
|
|
|
+{$ENDIF HAS_SDO_SHORT}
|
|
|
+
|
|
|
+ procedure record_list_int(const ADataObject : ISDODataObject; const APropName : string);
|
|
|
+ published
|
|
|
+ procedure multi_call_int();
|
|
|
+ procedure multi_call_boolean();
|
|
|
+ procedure multi_call_byte();
|
|
|
+ procedure multi_call_date();
|
|
|
+{$IFDEF HAS_SDO_BYTES}
|
|
|
+ procedure multi_call_bytes();
|
|
|
+{$ENDIF HAS_SDO_BYTES}
|
|
|
+{$IFDEF HAS_SDO_CHAR}
|
|
|
+ procedure multi_call_char();
|
|
|
+{$ENDIF HAS_SDO_CHAR}
|
|
|
+{$IFDEF HAS_SDO_CURRENCY}
|
|
|
+ procedure multi_call_currency();
|
|
|
+{$ENDIF HAS_SDO_CURRENCY}
|
|
|
+{$IFDEF HAS_SDO_DOUBLE}
|
|
|
+ procedure multi_call_double();
|
|
|
+{$ENDIF HAS_SDO_DOUBLE}
|
|
|
+{$IFDEF HAS_SDO_FLOAT}
|
|
|
+ procedure multi_call_float();
|
|
|
+{$ENDIF HAS_SDO_FLOAT}
|
|
|
+{$IFDEF HAS_SDO_LONG}
|
|
|
+ procedure multi_call_long();
|
|
|
+{$ENDIF HAS_SDO_LONG}
|
|
|
+{$IFDEF HAS_SDO_SHORT}
|
|
|
+ procedure multi_call_short();
|
|
|
+{$ENDIF HAS_SDO_SHORT}
|
|
|
+ procedure multi_call_string();
|
|
|
+
|
|
|
+
|
|
|
+ procedure int_change();
|
|
|
+ procedure bool_change();
|
|
|
+ procedure byte_change();
|
|
|
+ procedure date_change();
|
|
|
+{$IFDEF HAS_SDO_BYTES}
|
|
|
+ procedure bytes_change();
|
|
|
+{$ENDIF HAS_SDO_BYTES}
|
|
|
+{$IFDEF HAS_SDO_CHAR}
|
|
|
+ procedure char_change();
|
|
|
+{$ENDIF HAS_SDO_CHAR}
|
|
|
+{$IFDEF HAS_SDO_CURRENCY}
|
|
|
+ procedure currency_change();
|
|
|
+{$ENDIF HAS_SDO_CURRENCY}
|
|
|
+{$IFDEF HAS_SDO_DOUBLE}
|
|
|
+ procedure double_change();
|
|
|
+{$ENDIF HAS_SDO_DOUBLE}
|
|
|
+{$IFDEF HAS_SDO_FLOAT}
|
|
|
+ procedure float_change();
|
|
|
+{$ENDIF HAS_SDO_FLOAT}
|
|
|
+{$IFDEF HAS_SDO_LONG}
|
|
|
+ procedure long_change();
|
|
|
+{$ENDIF HAS_SDO_LONG}
|
|
|
+{$IFDEF HAS_SDO_SHORT}
|
|
|
+ procedure short_change();
|
|
|
+{$ENDIF HAS_SDO_SHORT}
|
|
|
+ procedure string_change();
|
|
|
+
|
|
|
+ procedure object_change_contained_prop();
|
|
|
+ procedure object_change_referenced_prop();
|
|
|
+ end;
|
|
|
+
|
|
|
+ TSDOChangeSummary_Test = class(TWstBaseTest)
|
|
|
+ protected
|
|
|
+ FRecorder : TChangeRecorder;
|
|
|
+ FFactory : ISDODataFactory;
|
|
|
+ FFactoryX : ISDODataFactory;
|
|
|
+ FChangeSummary : ISDOChangeSummary;
|
|
|
+ protected
|
|
|
+ procedure CheckEquals(expected, actual: TSDODate; msg: string = ''; const AStrict : Boolean = True); overload;
|
|
|
+ procedure SetUp(); override;
|
|
|
+ procedure TearDown(); override;
|
|
|
+ procedure InitRecorder();
|
|
|
+ protected
|
|
|
+ function CreateRecorder() : TChangeRecorder;
|
|
|
+ class function Create_Factory() : ISDODataFactory;
|
|
|
+ class function Create_FactoryX() : ISDODataFactory;
|
|
|
+ private
|
|
|
+ procedure check_value(
|
|
|
+ const AObj : ISDODataObject;
|
|
|
+ const AProp : ISDOProperty;
|
|
|
+ const AValue : TValueSetting
|
|
|
+ );
|
|
|
+ published
|
|
|
+ procedure logging_state();
|
|
|
+ procedure logging_state_2();
|
|
|
+ procedure isCreated();
|
|
|
+ procedure isCreated_create_delete();
|
|
|
+ procedure isDeleted();
|
|
|
+ procedure isDeleted_nested();
|
|
|
+ procedure isModified();
|
|
|
+
|
|
|
+ procedure getChangedDataObjects();
|
|
|
+ procedure getChangedDataObjects_contained_delete();
|
|
|
+ procedure getChangedDataObjects_multi_value_prop();
|
|
|
+
|
|
|
+ procedure getOldValues();
|
|
|
+ procedure getOldValues_bool();
|
|
|
+ procedure getOldValues_byte();
|
|
|
+ procedure getOldValues_date();
|
|
|
+ procedure getOldValues_integer();
|
|
|
+ procedure getOldValues_object_prop();
|
|
|
+ procedure getOldValues_string();
|
|
|
+{$IFDEF HAS_SDO_BYTES}
|
|
|
+ procedure getOldValues_bytes();
|
|
|
+{$ENDIF HAS_SDO_BYTES}
|
|
|
+{$IFDEF HAS_SDO_CHAR}
|
|
|
+ procedure getOldValues_char();
|
|
|
+{$ENDIF HAS_SDO_CHAR}
|
|
|
+{$IFDEF HAS_SDO_CURRENCY}
|
|
|
+ procedure getOldValues_currency();
|
|
|
+{$ENDIF HAS_SDO_CURRENCY}
|
|
|
+{$IFDEF HAS_SDO_DOUBLE}
|
|
|
+ procedure getOldValues_double();
|
|
|
+{$ENDIF HAS_SDO_DOUBLE}
|
|
|
+{$IFDEF HAS_SDO_FLOAT}
|
|
|
+ procedure getOldValues_float();
|
|
|
+{$ENDIF HAS_SDO_FLOAT}
|
|
|
+{$IFDEF HAS_SDO_LONG}
|
|
|
+ procedure getOldValues_long();
|
|
|
+{$ENDIF HAS_SDO_LONG}
|
|
|
+{$IFDEF HAS_SDO_SHORT}
|
|
|
+ procedure getOldValues_short();
|
|
|
+{$ENDIF HAS_SDO_SHORT}
|
|
|
+
|
|
|
+ procedure getOldValue();
|
|
|
+ procedure getOldValue_bool();
|
|
|
+ procedure getOldValue_byte();
|
|
|
+ procedure getOldValue_date();
|
|
|
+ procedure getOldValue_integer();
|
|
|
+ procedure getOldValue_string();
|
|
|
+{$IFDEF HAS_SDO_BYTES}
|
|
|
+ procedure getOldValue_bytes();
|
|
|
+{$ENDIF HAS_SDO_BYTES}
|
|
|
+{$IFDEF HAS_SDO_CHAR}
|
|
|
+ procedure getOldValue_char();
|
|
|
+{$ENDIF HAS_SDO_CHAR}
|
|
|
+{$IFDEF HAS_SDO_CURRENCY}
|
|
|
+ procedure getOldValue_currency();
|
|
|
+{$ENDIF HAS_SDO_CURRENCY}
|
|
|
+{$IFDEF HAS_SDO_DOUBLE}
|
|
|
+ procedure getOldValue_double();
|
|
|
+{$ENDIF HAS_SDO_DOUBLE}
|
|
|
+{$IFDEF HAS_SDO_FLOAT}
|
|
|
+ procedure getOldValue_float();
|
|
|
+{$ENDIF HAS_SDO_FLOAT}
|
|
|
+{$IFDEF HAS_SDO_LONG}
|
|
|
+ procedure getOldValue_long();
|
|
|
+{$ENDIF HAS_SDO_LONG}
|
|
|
+{$IFDEF HAS_SDO_SHORT}
|
|
|
+ procedure getOldValue_short();
|
|
|
+{$ENDIF HAS_SDO_SHORT}
|
|
|
+
|
|
|
+
|
|
|
+ procedure getOldValue_object_prop();
|
|
|
+ procedure getOldContainer();
|
|
|
+ procedure getOldContainmentProperty();
|
|
|
+
|
|
|
+ procedure undoChanges_simple() ;
|
|
|
+ procedure undoChanges_simple_bool() ;
|
|
|
+ procedure undoChanges_simple_byte() ;
|
|
|
+ procedure undoChanges_simple_date() ;
|
|
|
+ procedure undoChanges_simple_integer() ;
|
|
|
+ procedure undoChanges_simple_string() ;
|
|
|
+{$IFDEF HAS_SDO_BYTES}
|
|
|
+ procedure undoChanges_simple_bytes();
|
|
|
+{$ENDIF HAS_SDO_BYTES}
|
|
|
+{$IFDEF HAS_SDO_CHAR}
|
|
|
+ procedure undoChanges_simple_char();
|
|
|
+{$ENDIF HAS_SDO_CHAR}
|
|
|
+{$IFDEF HAS_SDO_CURRENCY}
|
|
|
+ procedure undoChanges_simple_currency();
|
|
|
+{$ENDIF HAS_SDO_CURRENCY}
|
|
|
+{$IFDEF HAS_SDO_DOUBLE}
|
|
|
+ procedure undoChanges_simple_double();
|
|
|
+{$ENDIF HAS_SDO_DOUBLE}
|
|
|
+{$IFDEF HAS_SDO_FLOAT}
|
|
|
+ procedure undoChanges_simple_float();
|
|
|
+{$ENDIF HAS_SDO_FLOAT}
|
|
|
+{$IFDEF HAS_SDO_LONG}
|
|
|
+ procedure undoChanges_simple_long();
|
|
|
+{$ENDIF HAS_SDO_LONG}
|
|
|
+{$IFDEF HAS_SDO_SHORT}
|
|
|
+ procedure undoChanges_simple_short();
|
|
|
+{$ENDIF HAS_SDO_SHORT}
|
|
|
+
|
|
|
+
|
|
|
+ procedure undoChanges_simple_unset() ;
|
|
|
+ procedure undoChanges_simple_unset_bool() ;
|
|
|
+ procedure undoChanges_simple_unset_byte() ;
|
|
|
+ procedure undoChanges_simple_unset_date() ;
|
|
|
+ procedure undoChanges_simple_unset_integer() ;
|
|
|
+ procedure undoChanges_simple_unset_string() ;
|
|
|
+{$IFDEF HAS_SDO_BYTES}
|
|
|
+ procedure undoChanges_simple_unset_bytes();
|
|
|
+{$ENDIF HAS_SDO_BYTES}
|
|
|
+{$IFDEF HAS_SDO_CHAR}
|
|
|
+ procedure undoChanges_simple_unset_char();
|
|
|
+{$ENDIF HAS_SDO_CHAR}
|
|
|
+{$IFDEF HAS_SDO_CURRENCY}
|
|
|
+ procedure undoChanges_simple_unset_currency();
|
|
|
+{$ENDIF HAS_SDO_CURRENCY}
|
|
|
+{$IFDEF HAS_SDO_DOUBLE}
|
|
|
+ procedure undoChanges_simple_unset_double();
|
|
|
+{$ENDIF HAS_SDO_DOUBLE}
|
|
|
+{$IFDEF HAS_SDO_FLOAT}
|
|
|
+ procedure undoChanges_simple_unset_float();
|
|
|
+{$ENDIF HAS_SDO_FLOAT}
|
|
|
+{$IFDEF HAS_SDO_LONG}
|
|
|
+ procedure undoChanges_simple_unset_long();
|
|
|
+{$ENDIF HAS_SDO_LONG}
|
|
|
+{$IFDEF HAS_SDO_SHORT}
|
|
|
+ procedure undoChanges_simple_unset_short();
|
|
|
+{$ENDIF HAS_SDO_SHORT}
|
|
|
+
|
|
|
+
|
|
|
+ procedure undoChanges_simple_setnull() ;
|
|
|
+ procedure undoChanges_simple_setnull_bool() ;
|
|
|
+ procedure undoChanges_simple_setnull_byte() ;
|
|
|
+ procedure undoChanges_simple_setnull_date() ;
|
|
|
+ procedure undoChanges_simple_setnull_integer() ;
|
|
|
+ procedure undoChanges_simple_setnull_string() ;
|
|
|
+{$IFDEF HAS_SDO_BYTES}
|
|
|
+ procedure undoChanges_simple_setnull_bytes();
|
|
|
+{$ENDIF HAS_SDO_BYTES}
|
|
|
+{$IFDEF HAS_SDO_CHAR}
|
|
|
+ procedure undoChanges_simple_setnull_char();
|
|
|
+{$ENDIF HAS_SDO_CHAR}
|
|
|
+{$IFDEF HAS_SDO_CURRENCY}
|
|
|
+ procedure undoChanges_simple_setnull_currency();
|
|
|
+{$ENDIF HAS_SDO_CURRENCY}
|
|
|
+{$IFDEF HAS_SDO_DOUBLE}
|
|
|
+ procedure undoChanges_simple_setnull_double();
|
|
|
+{$ENDIF HAS_SDO_DOUBLE}
|
|
|
+{$IFDEF HAS_SDO_FLOAT}
|
|
|
+ procedure undoChanges_simple_setnull_float();
|
|
|
+{$ENDIF HAS_SDO_FLOAT}
|
|
|
+{$IFDEF HAS_SDO_LONG}
|
|
|
+ procedure undoChanges_simple_setnull_long();
|
|
|
+{$ENDIF HAS_SDO_LONG}
|
|
|
+{$IFDEF HAS_SDO_SHORT}
|
|
|
+ procedure undoChanges_simple_setnull_short();
|
|
|
+{$ENDIF HAS_SDO_SHORT}
|
|
|
+
|
|
|
+
|
|
|
+ procedure undoChanges_object_contained_startWith_OBJ_OBJ();
|
|
|
+ procedure undoChanges_object_contained_startWith_OBJ_OBJ_OBJ() ;
|
|
|
+ procedure undoChanges_object_contained_startWith_NIL_OBJ_OBJ() ;
|
|
|
+ procedure undoChanges_object_referenced_startWIth_OBJ_OBJ() ;
|
|
|
+ procedure undoChanges_object_referenced_startWith_NIL_OBJ() ;
|
|
|
+ procedure undoChanges_delete_contained_object();
|
|
|
+
|
|
|
+ procedure getOldXpath();
|
|
|
+ procedure getOldXpath_1();
|
|
|
+ procedure getOldValues_created_object_settinglist_is_empty();
|
|
|
+ procedure getOldXpath_nested_deleted_object();
|
|
|
+ end;
|
|
|
+
|
|
|
+ TSDODataObjectCS_Test = class(TWstBaseTest)
|
|
|
+ private
|
|
|
+ FFactory : ISDODataFactory;
|
|
|
+ protected
|
|
|
+ class function Create_Factory() : ISDODataFactory;
|
|
|
+ protected
|
|
|
+ procedure SetUp(); override;
|
|
|
+ procedure TearDown(); override;
|
|
|
+ procedure CheckEquals(expected, actual: TSDODate; msg: string = ''; const AStrict : Boolean = True); overload;
|
|
|
+ procedure check_bool_logging(const AObj : ISDODataObject; const APropName : string);
|
|
|
+ procedure check_byte_logging(const AObj : ISDODataObject; const APropName : string);
|
|
|
+ procedure check_date_logging(const AObj : ISDODataObject; const APropName : string);
|
|
|
+ procedure check_int_logging(const AObj : ISDODataObject; const APropName : string);
|
|
|
+ procedure check_string_logging(const AObj : ISDODataObject; const APropName : string);
|
|
|
+{$IFDEF HAS_SDO_BYTES}
|
|
|
+ procedure check_bytes_logging(const AObj : ISDODataObject; const APropName : string);
|
|
|
+{$ENDIF HAS_SDO_BYTES}
|
|
|
+{$IFDEF HAS_SDO_CHAR}
|
|
|
+ procedure check_char_logging(const AObj : ISDODataObject; const APropName : string);
|
|
|
+{$ENDIF HAS_SDO_CHAR}
|
|
|
+{$IFDEF HAS_SDO_CURRENCY}
|
|
|
+ procedure check_currency_logging(const AObj : ISDODataObject; const APropName : string);
|
|
|
+{$ENDIF HAS_SDO_CURRENCY}
|
|
|
+{$IFDEF HAS_SDO_DOUBLE}
|
|
|
+ procedure check_double_logging(const AObj : ISDODataObject; const APropName : string);
|
|
|
+{$ENDIF HAS_SDO_DOUBLE}
|
|
|
+{$IFDEF HAS_SDO_FLOAT}
|
|
|
+ procedure check_float_logging(const AObj : ISDODataObject; const APropName : string);
|
|
|
+{$ENDIF HAS_SDO_FLOAT}
|
|
|
+{$IFDEF HAS_SDO_LONG}
|
|
|
+ procedure check_long_logging(const AObj : ISDODataObject; const APropName : string);
|
|
|
+{$ENDIF HAS_SDO_LONG}
|
|
|
+{$IFDEF HAS_SDO_SHORT}
|
|
|
+ procedure check_short_logging(const AObj : ISDODataObject; const APropName : string);
|
|
|
+{$ENDIF HAS_SDO_SHORT}
|
|
|
+ published
|
|
|
+ procedure create_default_props();
|
|
|
+ procedure logging_bool();
|
|
|
+ procedure logging_byte();
|
|
|
+ procedure logging_date();
|
|
|
+ procedure logging_int();
|
|
|
+ procedure logging_string();
|
|
|
+{$IFDEF HAS_SDO_BYTES}
|
|
|
+ procedure logging_bytes();
|
|
|
+{$ENDIF HAS_SDO_BYTES}
|
|
|
+{$IFDEF HAS_SDO_CHAR}
|
|
|
+ procedure logging_char();
|
|
|
+{$ENDIF HAS_SDO_CHAR}
|
|
|
+{$IFDEF HAS_SDO_CURRENCY}
|
|
|
+ procedure logging_currency();
|
|
|
+{$ENDIF HAS_SDO_CURRENCY}
|
|
|
+{$IFDEF HAS_SDO_DOUBLE}
|
|
|
+ procedure logging_double();
|
|
|
+{$ENDIF HAS_SDO_DOUBLE}
|
|
|
+{$IFDEF HAS_SDO_FLOAT}
|
|
|
+ procedure logging_float();
|
|
|
+{$ENDIF HAS_SDO_FLOAT}
|
|
|
+{$IFDEF HAS_SDO_LONG}
|
|
|
+ procedure logging_long();
|
|
|
+{$ENDIF HAS_SDO_LONG}
|
|
|
+{$IFDEF HAS_SDO_SHORT}
|
|
|
+ procedure logging_short();
|
|
|
+{$ENDIF HAS_SDO_SHORT}
|
|
|
+
|
|
|
+ procedure getChangeSummary();
|
|
|
+ end;
|
|
|
+
|
|
|
+ TSDOChangeSummaryMultiValueProps_Test = class(TWstBaseTest)
|
|
|
+ private
|
|
|
+ FFactory : ISDODataFactory;
|
|
|
+ protected
|
|
|
+ procedure SetUp(); override;
|
|
|
+ procedure TearDown(); override;
|
|
|
+ procedure CheckEquals(expected, actual: TSDODate; msg: string = ''; const AStrict : Boolean = True); overload;
|
|
|
+ published
|
|
|
+ procedure getOldValues_bool();
|
|
|
+ procedure undoChanges_bool();
|
|
|
+ procedure undoChanges_bool_deleted();
|
|
|
+ procedure undoChanges_nested_bool();
|
|
|
+
|
|
|
+ procedure getOldValues_byte();
|
|
|
+ procedure undoChanges_byte();
|
|
|
+ procedure undoChanges_byte_deleted();
|
|
|
+ procedure undoChanges_nested_byte();
|
|
|
+
|
|
|
+ procedure getOldValues_date();
|
|
|
+ procedure undoChanges_date();
|
|
|
+ procedure undoChanges_date_deleted();
|
|
|
+ procedure undoChanges_nested_date();
|
|
|
+
|
|
|
+ procedure getOldValues_integer();
|
|
|
+ procedure undoChanges_integer();
|
|
|
+ procedure undoChanges_integer_deleted();
|
|
|
+ procedure undoChanges_nested_integer();
|
|
|
+
|
|
|
+ procedure getOldValues_objects();
|
|
|
+ procedure undoChanges_object();
|
|
|
+ procedure undoChanges_object_deleted();
|
|
|
+ procedure undoChanges_nested_object();
|
|
|
+
|
|
|
+ procedure getOldValues_string();
|
|
|
+ procedure undoChanges_string();
|
|
|
+ procedure undoChanges_string_deleted();
|
|
|
+ procedure undoChanges_nested_string();
|
|
|
+
|
|
|
+{$IFDEF HAS_SDO_BYTES}
|
|
|
+ procedure getOldValues_bytes();
|
|
|
+ procedure undoChanges_bytes();
|
|
|
+ procedure undoChanges_bytes_deleted();
|
|
|
+ procedure undoChanges_nested_bytes();
|
|
|
+{$ENDIF HAS_SDO_BYTES}
|
|
|
+
|
|
|
+{$IFDEF HAS_SDO_CHAR}
|
|
|
+ procedure getOldValues_char();
|
|
|
+ procedure undoChanges_char();
|
|
|
+ procedure undoChanges_char_deleted();
|
|
|
+ procedure undoChanges_nested_char();
|
|
|
+{$ENDIF HAS_SDO_CHAR}
|
|
|
+
|
|
|
+{$IFDEF HAS_SDO_CURRENCY}
|
|
|
+ procedure getOldValues_currency();
|
|
|
+ procedure undoChanges_currency();
|
|
|
+ procedure undoChanges_currency_deleted();
|
|
|
+ procedure undoChanges_nested_currency();
|
|
|
+{$ENDIF HAS_SDO_CURRENCY}
|
|
|
+
|
|
|
+{$IFDEF HAS_SDO_DOUBLE}
|
|
|
+ procedure getOldValues_double();
|
|
|
+ procedure undoChanges_double();
|
|
|
+ procedure undoChanges_double_deleted();
|
|
|
+ procedure undoChanges_nested_double();
|
|
|
+{$ENDIF HAS_SDO_DOUBLE}
|
|
|
+
|
|
|
+{$IFDEF HAS_SDO_FLOAT}
|
|
|
+ procedure getOldValues_float();
|
|
|
+ procedure undoChanges_float();
|
|
|
+ procedure undoChanges_float_deleted();
|
|
|
+ procedure undoChanges_nested_float();
|
|
|
+{$ENDIF HAS_SDO_FLOAT}
|
|
|
+
|
|
|
+{$IFDEF HAS_SDO_LONG}
|
|
|
+ procedure getOldValues_long();
|
|
|
+ procedure undoChanges_long();
|
|
|
+ procedure undoChanges_long_deleted();
|
|
|
+ procedure undoChanges_nested_long();
|
|
|
+{$ENDIF HAS_SDO_LONG}
|
|
|
+
|
|
|
+{$IFDEF HAS_SDO_SHORT}
|
|
|
+ procedure getOldValues_short();
|
|
|
+ procedure undoChanges_short();
|
|
|
+ procedure undoChanges_short_deleted();
|
|
|
+ procedure undoChanges_nested_short();
|
|
|
+{$ENDIF HAS_SDO_SHORT}
|
|
|
+
|
|
|
+ procedure isDeleted();
|
|
|
+ procedure isDeleted_nested();
|
|
|
+
|
|
|
+ procedure getChangedDataObjects_contained_delete_multiprop_1();
|
|
|
+ procedure getChangedDataObjects_contained_delete_multiprop_2();
|
|
|
+ procedure getChangedDataObjects_contained_delete_multiprop_3();
|
|
|
+ end;
|
|
|
+
|
|
|
+implementation
|
|
|
+
|
|
|
+uses
|
|
|
+ sdo_datafactory, Math, sdo_copyhelper, sdo_equalityhelper,
|
|
|
+ sdo_consts, sdo_convert_helper, DateUtils, sdo_date_utils;
|
|
|
+
|
|
|
+const
|
|
|
+ s_uri = 'urn-test';
|
|
|
+ s_type_object_A = 'objectA';
|
|
|
+ s_type_object_B = 'objectB';
|
|
|
+ s_type_object_C = 'objectC';
|
|
|
+ s_bool_prop = 'bool_prop'; s_bool_propList = 'bool_prop_list';
|
|
|
+ s_byte_prop = 'byte_prop'; s_byte_propList = 'byte_prop_list';
|
|
|
+ s_bytes_prop = 'bytes_prop'; s_bytes_propList = 'bytes_prop_list';
|
|
|
+ s_char_prop = 'char_prop'; s_char_propList = 'char_prop_list';
|
|
|
+ s_currency_prop = 'currency_prop'; s_currency_propList = 'currency_prop_list';
|
|
|
+ s_date_prop = 'date_prop'; s_date_propList = 'date_prop_list';
|
|
|
+ s_double_prop = 'double_prop'; s_double_propList = 'double_prop_list';
|
|
|
+ s_float_prop = 'float_prop'; s_float_propList = 'float_prop_list';
|
|
|
+ s_integer_prop = 'integer_prop'; s_integer_propList = 'integer_prop_list';
|
|
|
+ s_long_prop = 'long_prop'; s_long_propList = 'long_prop_list';
|
|
|
+ s_short_prop = 'short_prop'; s_short_propList = 'short_prop_list';
|
|
|
+ s_string_prop = 'string_prop'; s_string_propList = 'string_prop_list';
|
|
|
+ s_object_prop = 'object_prop'; s_object_propList = 'object_prop_list';
|
|
|
+ s_object_ref_prop = 'object_ref_prop';
|
|
|
+ s_changesummary_prop = 'change_summary_prop';
|
|
|
+
|
|
|
+ s_Employee = 'Employee';
|
|
|
+ s_EmployeeType = 'EmployeeType';
|
|
|
+ s_Department = 'Department';
|
|
|
+ s_location = 'location';
|
|
|
+ s_manager = 'manager';
|
|
|
+ s_name = 'name';
|
|
|
+ s_number = 'number';
|
|
|
+ s_sn = 'SN';
|
|
|
+
|
|
|
+function CastExtractor(const AList : TObjectList; const AIndex : PtrInt) : PtrInt;
|
|
|
+begin
|
|
|
+ Result := PtrInt(AList[AIndex]);
|
|
|
+end;
|
|
|
+
|
|
|
+function sortComparer(Item1, Item2: Pointer): Integer;
|
|
|
+begin
|
|
|
+ Result := PtrInt(Item2) - PtrInt(Item1);
|
|
|
+end;
|
|
|
+
|
|
|
+function SortInterfaceList(const AIL : IInterfaceList) : IInterfaceList;
|
|
|
+var
|
|
|
+ ls : TList;
|
|
|
+ i : PtrInt;
|
|
|
+begin
|
|
|
+ Result := TInterfaceList.Create();
|
|
|
+ if ( Assigned(AIL) and ( AIL.Count > 0 ) ) then begin
|
|
|
+ ls := TList.Create();
|
|
|
+ try
|
|
|
+ for i := 0 to Pred(AIL.Count) do begin
|
|
|
+ ls.Add(Pointer(AIL.Items[i] as IInterface));
|
|
|
+ end;
|
|
|
+ ls.Sort(@sortComparer);
|
|
|
+ for i := 0 to Pred(AIL.Count) do begin
|
|
|
+ Result.Add(IInterface(ls[i]));
|
|
|
+ end;
|
|
|
+ finally
|
|
|
+ ls.Free();
|
|
|
+ end;
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+
|
|
|
+{ TValueSetting_Test }
|
|
|
+
|
|
|
+procedure TValueSetting_Test.CheckEquals(expected, actual: TSDODate; msg: string; const AStrict: Boolean);
|
|
|
+var
|
|
|
+ e, a : TDateTime;
|
|
|
+ e_y, e_m, e_d, e_h, e_mn, e_ss, e_ms : Word;
|
|
|
+ a_y, a_m, a_d, a_h, a_mn, a_ss, a_ms : Word;
|
|
|
+begin
|
|
|
+ if AStrict then begin
|
|
|
+ Check(CompareMem(@expected, @actual, SizeOf(TSDODate)), msg);
|
|
|
+ end else begin
|
|
|
+ e := NormalizeToUTC(expected);
|
|
|
+ a := NormalizeToUTC(actual);
|
|
|
+ DecodeDateTime(e, e_y, e_m, e_d, e_h, e_mn, e_ss, e_ms);
|
|
|
+ DecodeDateTime(a, a_y, a_m, a_d, a_h, a_mn, a_ss, a_ms);
|
|
|
+ CheckEquals(e_y,a_y,msg);
|
|
|
+ CheckEquals(e_m,a_m,msg);
|
|
|
+ CheckEquals(e_d,a_d,msg);
|
|
|
+ CheckEquals(e_h,a_h,msg);
|
|
|
+ CheckEquals(e_mn,a_mn,msg);
|
|
|
+ CheckEquals(e_ss,a_ss,msg);
|
|
|
+ CheckEquals(e_ms,a_ms,msg);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+class function TValueSetting_Test.CreateFactory() : ISDODataFactory;
|
|
|
+var
|
|
|
+ locFactory : ISDODataFactory;
|
|
|
+
|
|
|
+ procedure Add_ObjectA(const AUri : string);
|
|
|
+ var
|
|
|
+ locObj : ISDOType;
|
|
|
+ begin
|
|
|
+ locFactory.AddType(AUri,s_type_object_A,[]);
|
|
|
+ locObj := locFactory.getType(AUri,s_type_object_A);
|
|
|
+ locFactory.addProperty(locObj,s_bool_prop,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType], []);
|
|
|
+ locFactory.addProperty(locObj,s_bool_propList,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType],[pfIsMany]);
|
|
|
+ locFactory.addProperty(locObj,s_byte_prop,sdo_namespace,SDOTypeDefaultTypeNames[ByteType], []);
|
|
|
+ locFactory.addProperty(locObj,s_byte_propList,sdo_namespace,SDOTypeDefaultTypeNames[ByteType],[pfIsMany]);
|
|
|
+{$IFDEF HAS_SDO_BYTES}
|
|
|
+ locFactory.addProperty(locObj,s_bytes_prop,sdo_namespace,SDOTypeDefaultTypeNames[BytesType], []);
|
|
|
+ locFactory.addProperty(locObj,s_bytes_propList,sdo_namespace,SDOTypeDefaultTypeNames[BytesType],[pfIsMany]);
|
|
|
+{$ENDIF HAS_SDO_BYTES}
|
|
|
+{$IFDEF HAS_SDO_CHAR}
|
|
|
+ locFactory.addProperty(locObj,s_char_prop,sdo_namespace,SDOTypeDefaultTypeNames[CharacterType], []);
|
|
|
+ locFactory.addProperty(locObj,s_char_propList,sdo_namespace,SDOTypeDefaultTypeNames[CharacterType],[pfIsMany]);
|
|
|
+{$ENDIF HAS_SDO_CHAR}
|
|
|
+{$IFDEF HAS_SDO_CURRENCY}
|
|
|
+ locFactory.addProperty(locObj,s_currency_prop,sdo_namespace,SDOTypeDefaultTypeNames[CurrencyType], []);
|
|
|
+ locFactory.addProperty(locObj,s_currency_propList,sdo_namespace,SDOTypeDefaultTypeNames[CurrencyType],[pfIsMany]);
|
|
|
+{$ENDIF HAS_SDO_CURRENCY}
|
|
|
+ locFactory.addProperty(locObj,s_date_prop,sdo_namespace,SDOTypeDefaultTypeNames[DateTimeType], []);
|
|
|
+ locFactory.addProperty(locObj,s_date_propList,sdo_namespace,SDOTypeDefaultTypeNames[DateTimeType],[pfIsMany]);
|
|
|
+{$IFDEF HAS_SDO_DOUBLE}
|
|
|
+ locFactory.addProperty(locObj,s_double_prop,sdo_namespace,SDOTypeDefaultTypeNames[DoubleType], []);
|
|
|
+ locFactory.addProperty(locObj,s_double_propList,sdo_namespace,SDOTypeDefaultTypeNames[DoubleType],[pfIsMany]);
|
|
|
+{$ENDIF HAS_SDO_DOUBLE}
|
|
|
+{$IFDEF HAS_SDO_FLOAT}
|
|
|
+ locFactory.addProperty(locObj,s_float_prop,sdo_namespace,SDOTypeDefaultTypeNames[FloatType], []);
|
|
|
+ locFactory.addProperty(locObj,s_float_propList,sdo_namespace,SDOTypeDefaultTypeNames[FloatType],[pfIsMany]);
|
|
|
+{$ENDIF HAS_SDO_FLOAT}
|
|
|
+ locFactory.addProperty(locObj,s_integer_prop,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType], []);
|
|
|
+ locFactory.addProperty(locObj,s_integer_propList,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType],[pfIsMany]);
|
|
|
+{$IFDEF HAS_SDO_LONG}
|
|
|
+ locFactory.addProperty(locObj,s_long_prop,sdo_namespace,SDOTypeDefaultTypeNames[LongType], []);
|
|
|
+ locFactory.addProperty(locObj,s_long_propList,sdo_namespace,SDOTypeDefaultTypeNames[LongType],[pfIsMany]);
|
|
|
+{$ENDIF HAS_SDO_LONG}
|
|
|
+{$IFDEF HAS_SDO_SHORT}
|
|
|
+ locFactory.addProperty(locObj,s_short_prop,sdo_namespace,SDOTypeDefaultTypeNames[ShortType], []);
|
|
|
+ locFactory.addProperty(locObj,s_short_propList,sdo_namespace,SDOTypeDefaultTypeNames[ShortType],[pfIsMany]);
|
|
|
+{$ENDIF HAS_SDO_SHORT}
|
|
|
+ locFactory.addProperty(locObj,s_string_prop,sdo_namespace,SDOTypeDefaultTypeNames[StringType], []);
|
|
|
+ locFactory.addProperty(locObj,s_string_propList,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsMany]);
|
|
|
+ end;
|
|
|
+begin
|
|
|
+ locFactory := TSDODataFactory.Create() as ISDODataFactory;
|
|
|
+ Add_ObjectA(s_uri);
|
|
|
+
|
|
|
+ Result := locFactory;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TValueSetting_Test.create_boolean();
|
|
|
+var
|
|
|
+ ok : Boolean;
|
|
|
+ boolVal : TSDOBoolean;
|
|
|
+ fact : ISDODataFactory;
|
|
|
+ objectAType : ISDOType;
|
|
|
+ localObj : TValueSetting;
|
|
|
+ prp : ISDOProperty;
|
|
|
+begin
|
|
|
+ fact := CreateFactory();
|
|
|
+ objectAType := fact.getType(s_uri,s_type_object_A);
|
|
|
+ ok := False;
|
|
|
+ try
|
|
|
+ TValueSetting.Create(False,False,boolVal,nil,0);
|
|
|
+ except
|
|
|
+ on e : ESDOIllegalArgumentException do
|
|
|
+ ok := True;
|
|
|
+ end;
|
|
|
+ CheckEquals(True,ok,'Invalid property parametter');
|
|
|
+
|
|
|
+ // simple value
|
|
|
+ prp := objectAType.getProperty(s_bool_prop) as ISDOProperty;
|
|
|
+ boolVal := False;
|
|
|
+ localObj := TValueSetting.Create(True,True,boolVal,prp,0);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( True, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( True, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 0, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( False, localObj.getBooleanValue(), 'getBooleanValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.BoolToByte(localObj.getBooleanValue()), localObj.getByteValue(), 'getByteValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.BoolToInteger(localObj.getBooleanValue()), localObj.getIntegerValue(), 'getIntegerValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.BoolToString(localObj.getBooleanValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ localObj := TValueSetting.Create(False,True,boolVal,prp,0);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( False, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( True, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 0, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( False, localObj.getBooleanValue(), 'getBooleanValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.BoolToByte(localObj.getBooleanValue()), localObj.getByteValue(), 'getByteValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.BoolToInteger(localObj.getBooleanValue()), localObj.getIntegerValue(), 'getIntegerValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.BoolToString(localObj.getBooleanValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ boolVal := False;
|
|
|
+ localObj := TValueSetting.Create(True,False,boolVal,prp,0);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( True, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( False, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 0, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( boolVal, localObj.getBooleanValue(), 'getBooleanValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.BoolToByte(localObj.getBooleanValue()), localObj.getByteValue(), 'getByteValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.BoolToInteger(localObj.getBooleanValue()), localObj.getIntegerValue(), 'getIntegerValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.BoolToString(localObj.getBooleanValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ boolVal := True;
|
|
|
+ localObj := TValueSetting.Create(True,False,boolVal,prp,0);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( True, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( False, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 0, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( boolVal, localObj.getBooleanValue(), 'getBooleanValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.BoolToByte(localObj.getBooleanValue()), localObj.getByteValue(), 'getByteValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.BoolToInteger(localObj.getBooleanValue()), localObj.getIntegerValue(), 'getIntegerValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.BoolToString(localObj.getBooleanValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ // multi value
|
|
|
+ prp := objectAType.getProperty(s_bool_propList) as ISDOProperty;
|
|
|
+ boolVal := True;
|
|
|
+ localObj := TValueSetting.Create(True,True,boolVal,prp,12);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( True, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( True, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 12, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( False, localObj.getBooleanValue(), 'getBooleanValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.BoolToByte(localObj.getBooleanValue()), localObj.getByteValue(), 'getByteValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.BoolToInteger(localObj.getBooleanValue()), localObj.getIntegerValue(), 'getIntegerValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.BoolToString(localObj.getBooleanValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ boolVal := True;
|
|
|
+ localObj := TValueSetting.Create(False,True,boolVal,prp,23);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( False, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( True, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 23, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( False, localObj.getBooleanValue(), 'getBooleanValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.BoolToByte(localObj.getBooleanValue()), localObj.getByteValue(), 'getByteValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.BoolToInteger(localObj.getBooleanValue()), localObj.getIntegerValue(), 'getIntegerValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.BoolToString(localObj.getBooleanValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ boolVal := False;
|
|
|
+ localObj := TValueSetting.Create(True,False,boolVal,prp,34);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( True, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( False, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 34, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( boolVal, localObj.getBooleanValue(), 'getBooleanValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.BoolToByte(localObj.getBooleanValue()), localObj.getByteValue(), 'getByteValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.BoolToInteger(localObj.getBooleanValue()), localObj.getIntegerValue(), 'getIntegerValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.BoolToString(localObj.getBooleanValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ boolVal := True;
|
|
|
+ localObj := TValueSetting.Create(True,False,boolVal,prp,34);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( True, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( False, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 34, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( boolVal, localObj.getBooleanValue(), 'getBooleanValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.BoolToByte(localObj.getBooleanValue()), localObj.getByteValue(), 'getByteValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.BoolToInteger(localObj.getBooleanValue()), localObj.getIntegerValue(), 'getIntegerValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.BoolToString(localObj.getBooleanValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TValueSetting_Test.create_byte();
|
|
|
+var
|
|
|
+ ok : Boolean;
|
|
|
+ locVal : TSDOByte;
|
|
|
+ fact : ISDODataFactory;
|
|
|
+ objectAType : ISDOType;
|
|
|
+ localObj : TValueSetting;
|
|
|
+ prp : ISDOProperty;
|
|
|
+begin
|
|
|
+ locVal := 123;
|
|
|
+ fact := CreateFactory();
|
|
|
+ objectAType := fact.getType(s_uri,s_type_object_A);
|
|
|
+ ok := False;
|
|
|
+ try
|
|
|
+ TValueSetting.Create(False,False,locVal,nil,0);
|
|
|
+ except
|
|
|
+ on e : ESDOIllegalArgumentException do
|
|
|
+ ok := True;
|
|
|
+ end;
|
|
|
+ CheckEquals(True,ok,'Invalid property parametter');
|
|
|
+
|
|
|
+ // simple value
|
|
|
+ prp := objectAType.getProperty(s_byte_prop) as ISDOProperty;
|
|
|
+ localObj := TValueSetting.Create(True,True,locVal,prp,0);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( True, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( True, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 0, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( 0, localObj.getByteValue(), 'getByteValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.ByteToBool(localObj.getByteValue()), localObj.getBooleanValue(), 'getBooleanValue');
|
|
|
+ CheckEquals( localObj.getByteValue(), localObj.getIntegerValue(), 'getIntegerValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.ByteToString(localObj.getByteValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ localObj := TValueSetting.Create(False,True,locVal,prp,0);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( False, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( True, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 0, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( 0, localObj.getByteValue(), 'getByteValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.ByteToBool(localObj.getByteValue()), localObj.getBooleanValue(), 'getBooleanValue');
|
|
|
+ CheckEquals( localObj.getByteValue(), localObj.getIntegerValue(), 'getIntegerValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.ByteToString(localObj.getByteValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ localObj := TValueSetting.Create(True,False,locVal,prp,0);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( True, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( False, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 0, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( locVal, localObj.getByteValue(), 'getByteValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.ByteToBool(localObj.getByteValue()), localObj.getBooleanValue(), 'getBooleanValue');
|
|
|
+ CheckEquals( localObj.getByteValue(), localObj.getIntegerValue(), 'getIntegerValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.ByteToString(localObj.getByteValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ locVal := 67;
|
|
|
+ localObj := TValueSetting.Create(True,False,locVal,prp,0);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( True, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( False, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 0, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( locVal, localObj.getByteValue(), 'getByteValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.ByteToBool(localObj.getByteValue()), localObj.getBooleanValue(), 'getBooleanValue');
|
|
|
+ CheckEquals( localObj.getByteValue(), localObj.getIntegerValue(), 'getIntegerValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.ByteToString(localObj.getByteValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ // multi value
|
|
|
+ prp := objectAType.getProperty(s_byte_propList) as ISDOProperty;
|
|
|
+ localObj := TValueSetting.Create(True,True,locVal,prp,12);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( True, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( True, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 12, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( 0, localObj.getByteValue(), 'getByteValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.ByteToBool(localObj.getByteValue()), localObj.getBooleanValue(), 'getBooleanValue');
|
|
|
+ CheckEquals( localObj.getByteValue(), localObj.getIntegerValue(), 'getIntegerValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.ByteToString(localObj.getByteValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ localObj := TValueSetting.Create(False,True,locVal,prp,23);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( False, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( True, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 23, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( 0, localObj.getByteValue(), 'getByteValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.ByteToBool(localObj.getByteValue()), localObj.getBooleanValue(), 'getBooleanValue');
|
|
|
+ CheckEquals( localObj.getByteValue(), localObj.getIntegerValue(), 'getIntegerValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.ByteToString(localObj.getByteValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ locVal := 34;
|
|
|
+ localObj := TValueSetting.Create(True,False,locVal,prp,34);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( True, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( False, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 34, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( locVal, localObj.getByteValue(), 'getByteValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.ByteToBool(localObj.getByteValue()), localObj.getBooleanValue(), 'getBooleanValue');
|
|
|
+ CheckEquals( localObj.getByteValue(), localObj.getIntegerValue(), 'getIntegerValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.ByteToString(localObj.getByteValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+{$IFDEF HAS_SDO_BYTES}
|
|
|
+procedure TValueSetting_Test.create_bytes();
|
|
|
+const
|
|
|
+ PROP_NAME = s_bytes_prop;
|
|
|
+ LIST_PROP_NAME = s_bytes_propList;
|
|
|
+ VAL_1 : array[0..2] of TSDOByte = ( 2, 24, 12 );
|
|
|
+ VAL_2 : array[0..5] of TSDOByte = ( 1, 07, 6, 2, 24, 12 );
|
|
|
+ VAL_3 : array[0..1] of TSDOByte = ( 24,6 );
|
|
|
+
|
|
|
+
|
|
|
+ function LocalCopy(const AValue : array of TSDOByte) : TSDOBytes;
|
|
|
+ begin
|
|
|
+ SetLength(Result,Length(AValue));
|
|
|
+ if ( Length(Result) > 0 ) then
|
|
|
+ Move(AValue[0],Result[0],Length(Result));
|
|
|
+ end;
|
|
|
+
|
|
|
+var
|
|
|
+ ok : Boolean;
|
|
|
+ locVal : TSDOBytes;
|
|
|
+ fact : ISDODataFactory;
|
|
|
+ objectAType : ISDOType;
|
|
|
+ localObj : TValueSetting;
|
|
|
+ prp : ISDOProperty;
|
|
|
+begin
|
|
|
+ locVal := LocalCopy(VAL_1);
|
|
|
+ fact := CreateFactory();
|
|
|
+ objectAType := fact.getType(s_uri,s_type_object_A);
|
|
|
+ ok := False;
|
|
|
+ try
|
|
|
+ TValueSetting.Create(False,False,locVal,nil,0);
|
|
|
+ except
|
|
|
+ on e : ESDOIllegalArgumentException do
|
|
|
+ ok := True;
|
|
|
+ end;
|
|
|
+ CheckEquals(True,ok,'Invalid property parametter');
|
|
|
+
|
|
|
+ // simple value
|
|
|
+ prp := objectAType.getProperty(PROP_NAME) as ISDOProperty;
|
|
|
+ localObj := TValueSetting.Create(True,True,locVal,prp,0);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( True, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( True, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 0, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( nil, localObj.getBytesValue(), 'getBytesValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.BytesToString(localObj.getBytesValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ localObj := TValueSetting.Create(False,True,locVal,prp,0);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( False, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( True, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 0, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( nil, localObj.getBytesValue(), 'getBytesValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.BytesToString(localObj.getBytesValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ localObj := TValueSetting.Create(True,False,locVal,prp,0);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( True, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( False, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 0, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( locVal, localObj.getBytesValue(), 'getBytesValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.BytesToString(localObj.getBytesValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ locVal := LocalCopy(VAL_2);
|
|
|
+ localObj := TValueSetting.Create(True,False,locVal,prp,0);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( True, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( False, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 0, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( locVal, localObj.getBytesValue(), 'getBytesValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.BytesToString(localObj.getBytesValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ // multi value
|
|
|
+ prp := objectAType.getProperty(LIST_PROP_NAME) as ISDOProperty;
|
|
|
+ localObj := TValueSetting.Create(True,True,locVal,prp,12);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( True, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( True, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 12, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( nil, localObj.getBytesValue(), 'getBytesValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.BytesToString(localObj.getBytesValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ localObj := TValueSetting.Create(False,True,locVal,prp,23);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( False, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( True, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 23, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( nil, localObj.getBytesValue(), 'getBytesValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.BytesToString(localObj.getBytesValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ locVal := LocalCopy(VAL_3);
|
|
|
+ localObj := TValueSetting.Create(True,False,locVal,prp,34);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( True, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( False, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 34, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( locVal, localObj.getBytesValue(), 'getBytesValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.BytesToString(localObj.getBytesValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+{$ENDIF HAS_SDO_BYTES}
|
|
|
+
|
|
|
+{$IFDEF HAS_SDO_CHAR}
|
|
|
+procedure TValueSetting_Test.create_char();
|
|
|
+const
|
|
|
+ PROP_NAME = s_char_prop;
|
|
|
+ LIST_PROP_NAME = s_char_propList;
|
|
|
+var
|
|
|
+ ok : Boolean;
|
|
|
+ locVal : TSDOChar;
|
|
|
+ fact : ISDODataFactory;
|
|
|
+ objectAType : ISDOType;
|
|
|
+ localObj : TValueSetting;
|
|
|
+ prp : ISDOProperty;
|
|
|
+begin
|
|
|
+ locVal := 'K';
|
|
|
+ fact := CreateFactory();
|
|
|
+ objectAType := fact.getType(s_uri,s_type_object_A);
|
|
|
+ ok := False;
|
|
|
+ try
|
|
|
+ TValueSetting.Create(False,False,locVal,nil,0);
|
|
|
+ except
|
|
|
+ on e : ESDOIllegalArgumentException do
|
|
|
+ ok := True;
|
|
|
+ end;
|
|
|
+ CheckEquals(True,ok,'Invalid property parametter');
|
|
|
+
|
|
|
+ // simple value
|
|
|
+ prp := objectAType.getProperty(PROP_NAME) as ISDOProperty;
|
|
|
+ localObj := TValueSetting.Create(True,True,locVal,prp,0);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( True, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( True, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 0, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( #0, localObj.getCharacterValue(), 'getCharacterValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.CharToBool(localObj.getCharacterValue()), localObj.getBooleanValue(), 'getBooleanValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.CharToByte(localObj.getCharacterValue()), localObj.getByteValue(), 'getByteValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.CharToInteger(localObj.getCharacterValue()), localObj.getIntegerValue(), 'getIntegerValue');
|
|
|
+{$IFDEF HAS_SDO_LONG}
|
|
|
+ CheckEquals( TSDOConvertHelper.CharToLong(localObj.getCharacterValue()), localObj.getLongValue(), 'getLongValue');
|
|
|
+{$ENDIF HAS_SDO_LONG}
|
|
|
+{$IFDEF HAS_SDO_SHORT}
|
|
|
+ CheckEquals( TSDOConvertHelper.CharToShort(localObj.getCharacterValue()), localObj.getShortValue(), 'getShortValue');
|
|
|
+{$ENDIF HAS_SDO_SHORT}
|
|
|
+ CheckEquals( localObj.getCharacterValue(), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ localObj := TValueSetting.Create(False,True,locVal,prp,0);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( False, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( True, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 0, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( #0, localObj.getCharacterValue(), 'getCharacterValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.CharToBool(localObj.getCharacterValue()), localObj.getBooleanValue(), 'getBooleanValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.CharToByte(localObj.getCharacterValue()), localObj.getByteValue(), 'getByteValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.CharToInteger(localObj.getCharacterValue()), localObj.getIntegerValue(), 'getIntegerValue');
|
|
|
+{$IFDEF HAS_SDO_LONG}
|
|
|
+ CheckEquals( TSDOConvertHelper.CharToLong(localObj.getCharacterValue()), localObj.getLongValue(), 'getLongValue');
|
|
|
+{$ENDIF HAS_SDO_LONG}
|
|
|
+{$IFDEF HAS_SDO_SHORT}
|
|
|
+ CheckEquals( TSDOConvertHelper.CharToShort(localObj.getCharacterValue()), localObj.getShortValue(), 'getShortValue');
|
|
|
+{$ENDIF HAS_SDO_SHORT}
|
|
|
+ CheckEquals( localObj.getCharacterValue(), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ localObj := TValueSetting.Create(True,False,locVal,prp,0);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( True, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( False, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 0, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( locVal, localObj.getCharacterValue(), 'getCharacterValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.CharToBool(localObj.getCharacterValue()), localObj.getBooleanValue(), 'getBooleanValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.CharToByte(localObj.getCharacterValue()), localObj.getByteValue(), 'getByteValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.CharToInteger(localObj.getCharacterValue()), localObj.getIntegerValue(), 'getIntegerValue');
|
|
|
+{$IFDEF HAS_SDO_LONG}
|
|
|
+ CheckEquals( TSDOConvertHelper.CharToLong(localObj.getCharacterValue()), localObj.getLongValue(), 'getLongValue');
|
|
|
+{$ENDIF HAS_SDO_LONG}
|
|
|
+{$IFDEF HAS_SDO_SHORT}
|
|
|
+ CheckEquals( TSDOConvertHelper.CharToShort(localObj.getCharacterValue()), localObj.getShortValue(), 'getShortValue');
|
|
|
+{$ENDIF HAS_SDO_SHORT}
|
|
|
+ CheckEquals( localObj.getCharacterValue(), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ locVal := 'h';
|
|
|
+ localObj := TValueSetting.Create(True,False,locVal,prp,0);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( True, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( False, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 0, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( locVal, localObj.getCharacterValue(), 'getCharacterValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.CharToBool(localObj.getCharacterValue()), localObj.getBooleanValue(), 'getBooleanValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.CharToByte(localObj.getCharacterValue()), localObj.getByteValue(), 'getByteValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.CharToInteger(localObj.getCharacterValue()), localObj.getIntegerValue(), 'getIntegerValue');
|
|
|
+{$IFDEF HAS_SDO_LONG}
|
|
|
+ CheckEquals( TSDOConvertHelper.CharToLong(localObj.getCharacterValue()), localObj.getLongValue(), 'getLongValue');
|
|
|
+{$ENDIF HAS_SDO_LONG}
|
|
|
+{$IFDEF HAS_SDO_SHORT}
|
|
|
+ CheckEquals( TSDOConvertHelper.CharToShort(localObj.getCharacterValue()), localObj.getShortValue(), 'getShortValue');
|
|
|
+{$ENDIF HAS_SDO_SHORT}
|
|
|
+ CheckEquals( localObj.getCharacterValue(), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ // multi value
|
|
|
+ prp := objectAType.getProperty(LIST_PROP_NAME) as ISDOProperty;
|
|
|
+ localObj := TValueSetting.Create(True,True,locVal,prp,12);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( True, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( True, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 12, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( #0, localObj.getCharacterValue(), 'getCharacterValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.CharToBool(localObj.getCharacterValue()), localObj.getBooleanValue(), 'getBooleanValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.CharToByte(localObj.getCharacterValue()), localObj.getByteValue(), 'getByteValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.CharToInteger(localObj.getCharacterValue()), localObj.getIntegerValue(), 'getIntegerValue');
|
|
|
+{$IFDEF HAS_SDO_LONG}
|
|
|
+ CheckEquals( TSDOConvertHelper.CharToLong(localObj.getCharacterValue()), localObj.getLongValue(), 'getLongValue');
|
|
|
+{$ENDIF HAS_SDO_LONG}
|
|
|
+{$IFDEF HAS_SDO_SHORT}
|
|
|
+ CheckEquals( TSDOConvertHelper.CharToShort(localObj.getCharacterValue()), localObj.getShortValue(), 'getShortValue');
|
|
|
+{$ENDIF HAS_SDO_SHORT}
|
|
|
+ CheckEquals( localObj.getCharacterValue(), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ localObj := TValueSetting.Create(False,True,locVal,prp,23);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( False, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( True, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 23, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( #0, localObj.getCharacterValue(), 'getCharacterValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.CharToBool(localObj.getCharacterValue()), localObj.getBooleanValue(), 'getBooleanValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.CharToByte(localObj.getCharacterValue()), localObj.getByteValue(), 'getByteValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.CharToInteger(localObj.getCharacterValue()), localObj.getIntegerValue(), 'getIntegerValue');
|
|
|
+{$IFDEF HAS_SDO_LONG}
|
|
|
+ CheckEquals( TSDOConvertHelper.CharToLong(localObj.getCharacterValue()), localObj.getLongValue(), 'getLongValue');
|
|
|
+{$ENDIF HAS_SDO_LONG}
|
|
|
+{$IFDEF HAS_SDO_SHORT}
|
|
|
+ CheckEquals( TSDOConvertHelper.CharToShort(localObj.getCharacterValue()), localObj.getShortValue(), 'getShortValue');
|
|
|
+{$ENDIF HAS_SDO_SHORT}
|
|
|
+ CheckEquals( localObj.getCharacterValue(), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ locVal := '1';
|
|
|
+ localObj := TValueSetting.Create(True,False,locVal,prp,34);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( True, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( False, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 34, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( locVal, localObj.getCharacterValue(), 'getCharacterValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.CharToBool(localObj.getCharacterValue()), localObj.getBooleanValue(), 'getBooleanValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.CharToByte(localObj.getCharacterValue()), localObj.getByteValue(), 'getByteValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.CharToInteger(localObj.getCharacterValue()), localObj.getIntegerValue(), 'getIntegerValue');
|
|
|
+{$IFDEF HAS_SDO_LONG}
|
|
|
+ CheckEquals( TSDOConvertHelper.CharToLong(localObj.getCharacterValue()), localObj.getLongValue(), 'getLongValue');
|
|
|
+{$ENDIF HAS_SDO_LONG}
|
|
|
+{$IFDEF HAS_SDO_SHORT}
|
|
|
+ CheckEquals( TSDOConvertHelper.CharToShort(localObj.getCharacterValue()), localObj.getShortValue(), 'getShortValue');
|
|
|
+{$ENDIF HAS_SDO_SHORT}
|
|
|
+ CheckEquals( localObj.getCharacterValue(), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+{$ENDIF HAS_SDO_CHAR}
|
|
|
+
|
|
|
+procedure TValueSetting_Test.create_date();
|
|
|
+var
|
|
|
+ ok : Boolean;
|
|
|
+ locVal : TSDODateTime;
|
|
|
+ fact : ISDODataFactory;
|
|
|
+ objectAType : ISDOType;
|
|
|
+ localObj : TValueSetting;
|
|
|
+ prp : ISDOProperty;
|
|
|
+begin
|
|
|
+ FillChar(locVal,SizeOf(locVal),#0);
|
|
|
+
|
|
|
+ fact := CreateFactory();
|
|
|
+ objectAType := fact.getType(s_uri,s_type_object_A);
|
|
|
+ ok := False;
|
|
|
+ try
|
|
|
+ TValueSetting.Create(False,False,locVal,nil,0);
|
|
|
+ except
|
|
|
+ on e : ESDOIllegalArgumentException do
|
|
|
+ ok := True;
|
|
|
+ end;
|
|
|
+ CheckEquals(True,ok,'Invalid property parametter');
|
|
|
+
|
|
|
+ // simple value
|
|
|
+ prp := objectAType.getProperty(s_date_prop) as ISDOProperty;
|
|
|
+ localObj := TValueSetting.Create(True,True,locVal,prp,0);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( True, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( True, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 0, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( ZERO_DATE, localObj.getDateValue(), 'getDateValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.DateToString(localObj.getDateValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ localObj := TValueSetting.Create(False,True,locVal,prp,0);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( False, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( True, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 0, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( ZERO_DATE, localObj.getDateValue(), 'getDateValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.DateToString(localObj.getDateValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ localObj := TValueSetting.Create(True,False,locVal,prp,0);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( True, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( False, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 0, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( ZERO_DATE, localObj.getDateValue(), 'getDateValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.DateToString(localObj.getDateValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ locVal.Date := 39000;
|
|
|
+ locVal.HourOffset := 1;
|
|
|
+ locVal.MinuteOffset := 2;
|
|
|
+ localObj := TValueSetting.Create(True,False,locVal,prp,0);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( True, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( False, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 0, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( locVal, localObj.getDateValue(), 'getDateValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.DateToString(localObj.getDateValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ // multi value
|
|
|
+ prp := objectAType.getProperty(s_date_propList) as ISDOProperty;
|
|
|
+ localObj := TValueSetting.Create(True,True,locVal,prp,12);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( True, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( True, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 12, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( ZERO_DATE, localObj.getDateValue(), 'getDateValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.DateToString(localObj.getDateValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ localObj := TValueSetting.Create(False,True,locVal,prp,23);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( False, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( True, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 23, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( ZERO_DATE, localObj.getDateValue(), 'getDateValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.DateToString(localObj.getDateValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ localObj := TValueSetting.Create(True,False,locVal,prp,34);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( True, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( False, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 34, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( locVal, localObj.getDateValue(), 'getDateValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.DateToString(localObj.getDateValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+{$IFDEF HAS_SDO_CURRENCY}
|
|
|
+procedure TValueSetting_Test.create_currency();
|
|
|
+const
|
|
|
+ PROP_NAME = s_currency_prop;
|
|
|
+ LIST_PROP_NAME = s_currency_propList;
|
|
|
+var
|
|
|
+ ok : Boolean;
|
|
|
+ locVal : TSDOCurrency;
|
|
|
+ fact : ISDODataFactory;
|
|
|
+ objectAType : ISDOType;
|
|
|
+ localObj : TValueSetting;
|
|
|
+ prp : ISDOProperty;
|
|
|
+begin
|
|
|
+ locVal := 67;
|
|
|
+ fact := CreateFactory();
|
|
|
+ objectAType := fact.getType(s_uri,s_type_object_A);
|
|
|
+ ok := False;
|
|
|
+ try
|
|
|
+ TValueSetting.Create(False,False,locVal,nil,0);
|
|
|
+ except
|
|
|
+ on e : ESDOIllegalArgumentException do
|
|
|
+ ok := True;
|
|
|
+ end;
|
|
|
+ CheckEquals(True,ok,'Invalid property parametter');
|
|
|
+
|
|
|
+ // simple value
|
|
|
+ prp := objectAType.getProperty(PROP_NAME) as ISDOProperty;
|
|
|
+ localObj := TValueSetting.Create(True,True,locVal,prp,0);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( True, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( True, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 0, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( 0, localObj.getCurrencyValue(), 'getCurrencyValue');
|
|
|
+{$IFDEF HAS_SDO_FLOAT}
|
|
|
+ CheckEquals( localObj.getCurrencyValue(), localObj.getFloatValue(), 'getFloatValue');
|
|
|
+{$ENDIF HAS_SDO_FLOAT}
|
|
|
+{$IFDEF HAS_SDO_DOUBLE}
|
|
|
+ CheckEquals( localObj.getCurrencyValue(), localObj.getDoubleValue(), 'getDoubleValue');
|
|
|
+{$ENDIF HAS_SDO_DOUBLE}
|
|
|
+ CheckEquals( TSDOConvertHelper.CurrencyToString(localObj.getCurrencyValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ localObj := TValueSetting.Create(False,True,locVal,prp,0);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( False, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( True, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 0, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( 0, localObj.getCurrencyValue(), 'getCurrencyValue');
|
|
|
+{$IFDEF HAS_SDO_FLOAT}
|
|
|
+ CheckEquals( localObj.getCurrencyValue(), localObj.getFloatValue(), 'getFloatValue');
|
|
|
+{$ENDIF HAS_SDO_FLOAT}
|
|
|
+{$IFDEF HAS_SDO_DOUBLE}
|
|
|
+ CheckEquals( localObj.getCurrencyValue(), localObj.getDoubleValue(), 'getDoubleValue');
|
|
|
+{$ENDIF HAS_SDO_DOUBLE}
|
|
|
+ CheckEquals( TSDOConvertHelper.CurrencyToString(localObj.getCurrencyValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ localObj := TValueSetting.Create(True,False,locVal,prp,0);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( True, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( False, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 0, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( locVal, localObj.getCurrencyValue(), 'getCurrencyValue');
|
|
|
+{$IFDEF HAS_SDO_FLOAT}
|
|
|
+ CheckEquals( localObj.getCurrencyValue(), localObj.getFloatValue(), 'getFloatValue');
|
|
|
+{$ENDIF HAS_SDO_FLOAT}
|
|
|
+{$IFDEF HAS_SDO_DOUBLE}
|
|
|
+ CheckEquals( localObj.getCurrencyValue(), localObj.getDoubleValue(), 'getDoubleValue');
|
|
|
+{$ENDIF HAS_SDO_DOUBLE}
|
|
|
+ CheckEquals( TSDOConvertHelper.CurrencyToString(localObj.getCurrencyValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ locVal := 45;
|
|
|
+ localObj := TValueSetting.Create(True,False,locVal,prp,0);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( True, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( False, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 0, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( locVal, localObj.getCurrencyValue(), 'getCurrencyValue');
|
|
|
+{$IFDEF HAS_SDO_FLOAT}
|
|
|
+ CheckEquals( localObj.getCurrencyValue(), localObj.getFloatValue(), 'getFloatValue');
|
|
|
+{$ENDIF HAS_SDO_FLOAT}
|
|
|
+{$IFDEF HAS_SDO_DOUBLE}
|
|
|
+ CheckEquals( localObj.getCurrencyValue(), localObj.getDoubleValue(), 'getDoubleValue');
|
|
|
+{$ENDIF HAS_SDO_DOUBLE}
|
|
|
+ CheckEquals( TSDOConvertHelper.CurrencyToString(localObj.getCurrencyValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ locVal := 1236891478.2522;
|
|
|
+ localObj := TValueSetting.Create(True,False,locVal,prp,0);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( True, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( False, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 0, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( locVal, localObj.getCurrencyValue(), 'getCurrencyValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.CurrencyToString(localObj.getCurrencyValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ locVal := -225544778.8622;
|
|
|
+ localObj := TValueSetting.Create(True,False,locVal,prp,0);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( True, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( False, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 0, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( locVal, localObj.getCurrencyValue(), 'getCurrencyValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.CurrencyToString(localObj.getCurrencyValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ // multi value
|
|
|
+ prp := objectAType.getProperty(LIST_PROP_NAME) as ISDOProperty;
|
|
|
+ localObj := TValueSetting.Create(True,True,locVal,prp,12);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( True, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( True, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 12, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( 0, localObj.getCurrencyValue(), 'getCurrencyValue');
|
|
|
+{$IFDEF HAS_SDO_FLOAT}
|
|
|
+ CheckEquals( localObj.getCurrencyValue(), localObj.getFloatValue(), 'getFloatValue');
|
|
|
+{$ENDIF HAS_SDO_FLOAT}
|
|
|
+{$IFDEF HAS_SDO_DOUBLE}
|
|
|
+ CheckEquals( localObj.getCurrencyValue(), localObj.getDoubleValue(), 'getDoubleValue');
|
|
|
+{$ENDIF HAS_SDO_DOUBLE}
|
|
|
+ CheckEquals( TSDOConvertHelper.CurrencyToString(localObj.getCurrencyValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ localObj := TValueSetting.Create(False,True,locVal,prp,23);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( False, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( True, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 23, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( 0, localObj.getCurrencyValue(), 'getCurrencyValue');
|
|
|
+{$IFDEF HAS_SDO_FLOAT}
|
|
|
+ CheckEquals( localObj.getCurrencyValue(), localObj.getFloatValue(), 'getFloatValue');
|
|
|
+{$ENDIF HAS_SDO_FLOAT}
|
|
|
+{$IFDEF HAS_SDO_DOUBLE}
|
|
|
+ CheckEquals( localObj.getCurrencyValue(), localObj.getDoubleValue(), 'getDoubleValue');
|
|
|
+{$ENDIF HAS_SDO_DOUBLE}
|
|
|
+ CheckEquals( TSDOConvertHelper.CurrencyToString(localObj.getCurrencyValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ locVal := 99;
|
|
|
+ localObj := TValueSetting.Create(True,False,locVal,prp,34);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( True, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( False, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 34, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( locVal, localObj.getCurrencyValue(), 'getCurrencyValue');
|
|
|
+{$IFDEF HAS_SDO_FLOAT}
|
|
|
+ CheckEquals( localObj.getCurrencyValue(), localObj.getFloatValue(), 'getFloatValue');
|
|
|
+{$ENDIF HAS_SDO_FLOAT}
|
|
|
+{$IFDEF HAS_SDO_DOUBLE}
|
|
|
+ CheckEquals( localObj.getCurrencyValue(), localObj.getDoubleValue(), 'getDoubleValue');
|
|
|
+{$ENDIF HAS_SDO_DOUBLE}
|
|
|
+ CheckEquals( TSDOConvertHelper.CurrencyToString(localObj.getCurrencyValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ locVal := 24667733.1155;
|
|
|
+ localObj := TValueSetting.Create(True,False,locVal,prp,34);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( True, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( False, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 34, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( locVal, localObj.getCurrencyValue(), 'getCurrencyValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.CurrencyToString(localObj.getCurrencyValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ locVal := -5588663211424;
|
|
|
+ localObj := TValueSetting.Create(True,False,locVal,prp,34);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( True, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( False, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 34, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( locVal, localObj.getCurrencyValue(), 'getCurrencyValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.CurrencyToString(localObj.getCurrencyValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+{$ENDIF HAS_SDO_CURRENCY}
|
|
|
+
|
|
|
+{$IFDEF HAS_SDO_DOUBLE}
|
|
|
+procedure TValueSetting_Test.create_double();
|
|
|
+const
|
|
|
+ PROP_NAME = s_double_prop;
|
|
|
+ LIST_PROP_NAME = s_double_propList;
|
|
|
+var
|
|
|
+ ok : Boolean;
|
|
|
+ locVal : TSDODouble;
|
|
|
+ fact : ISDODataFactory;
|
|
|
+ objectAType : ISDOType;
|
|
|
+ localObj : TValueSetting;
|
|
|
+ prp : ISDOProperty;
|
|
|
+begin
|
|
|
+ locVal := 67;
|
|
|
+ fact := CreateFactory();
|
|
|
+ objectAType := fact.getType(s_uri,s_type_object_A);
|
|
|
+ ok := False;
|
|
|
+ try
|
|
|
+ TValueSetting.Create(False,False,locVal,nil,0);
|
|
|
+ except
|
|
|
+ on e : ESDOIllegalArgumentException do
|
|
|
+ ok := True;
|
|
|
+ end;
|
|
|
+ CheckEquals(True,ok,'Invalid property parametter');
|
|
|
+
|
|
|
+ // simple value
|
|
|
+ prp := objectAType.getProperty(PROP_NAME) as ISDOProperty;
|
|
|
+ localObj := TValueSetting.Create(True,True,locVal,prp,0);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( True, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( True, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 0, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( 0, localObj.getDoubleValue(), 'getDoubleValue');
|
|
|
+{$IFDEF HAS_SDO_CURRENCY}
|
|
|
+ CheckEquals( localObj.getDoubleValue(), localObj.getCurrencyValue(), 'getCurrencyValue');
|
|
|
+{$ENDIF HAS_SDO_CURRENCY}
|
|
|
+{$IFDEF HAS_SDO_FLOAT}
|
|
|
+ CheckEquals( localObj.getDoubleValue(), localObj.getFloatValue(), 'getFloatValue');
|
|
|
+{$ENDIF HAS_SDO_FLOAT}
|
|
|
+ CheckEquals( TSDOConvertHelper.FloatToString(localObj.getDoubleValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ localObj := TValueSetting.Create(False,True,locVal,prp,0);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( False, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( True, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 0, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( 0, localObj.getDoubleValue(), 'getDoubleValue');
|
|
|
+{$IFDEF HAS_SDO_CURRENCY}
|
|
|
+ CheckEquals( localObj.getDoubleValue(), localObj.getCurrencyValue(), 'getCurrencyValue');
|
|
|
+{$ENDIF HAS_SDO_CURRENCY}
|
|
|
+{$IFDEF HAS_SDO_FLOAT}
|
|
|
+ CheckEquals( localObj.getDoubleValue(), localObj.getFloatValue(), 'getFloatValue');
|
|
|
+{$ENDIF HAS_SDO_FLOAT}
|
|
|
+ CheckEquals( TSDOConvertHelper.FloatToString(localObj.getDoubleValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ localObj := TValueSetting.Create(True,False,locVal,prp,0);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( True, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( False, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 0, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( locVal, localObj.getDoubleValue(), 'getDoubleValue');
|
|
|
+{$IFDEF HAS_SDO_CURRENCY}
|
|
|
+ CheckEquals( localObj.getDoubleValue(), localObj.getCurrencyValue(), 'getCurrencyValue');
|
|
|
+{$ENDIF HAS_SDO_CURRENCY}
|
|
|
+{$IFDEF HAS_SDO_FLOAT}
|
|
|
+ CheckEquals( localObj.getDoubleValue(), localObj.getFloatValue(), 'getFloatValue');
|
|
|
+{$ENDIF HAS_SDO_FLOAT}
|
|
|
+ CheckEquals( TSDOConvertHelper.FloatToString(localObj.getDoubleValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ locVal := 45;
|
|
|
+ localObj := TValueSetting.Create(True,False,locVal,prp,0);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( True, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( False, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 0, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( locVal, localObj.getDoubleValue(), 'getDoubleValue');
|
|
|
+{$IFDEF HAS_SDO_CURRENCY}
|
|
|
+ CheckEquals( localObj.getDoubleValue(), localObj.getCurrencyValue(), 'getCurrencyValue');
|
|
|
+{$ENDIF HAS_SDO_CURRENCY}
|
|
|
+{$IFDEF HAS_SDO_FLOAT}
|
|
|
+ CheckEquals( localObj.getDoubleValue(), localObj.getFloatValue(), 'getFloatValue');
|
|
|
+{$ENDIF HAS_SDO_FLOAT}
|
|
|
+ CheckEquals( TSDOConvertHelper.FloatToString(localObj.getDoubleValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ locVal := 12365479;
|
|
|
+ localObj := TValueSetting.Create(True,False,locVal,prp,0);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( True, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( False, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 0, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( locVal, localObj.getDoubleValue(), 'getDoubleValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.FloatToString(localObj.getDoubleValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ locVal := -225544721;
|
|
|
+ localObj := TValueSetting.Create(True,False,locVal,prp,0);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( True, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( False, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 0, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( locVal, localObj.getDoubleValue(), 'getDoubleValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.FloatToString(localObj.getDoubleValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ // multi value
|
|
|
+ prp := objectAType.getProperty(LIST_PROP_NAME) as ISDOProperty;
|
|
|
+ localObj := TValueSetting.Create(True,True,locVal,prp,12);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( True, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( True, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 12, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( 0, localObj.getDoubleValue(), 'getDoubleValue');
|
|
|
+{$IFDEF HAS_SDO_CURRENCY}
|
|
|
+ CheckEquals( localObj.getDoubleValue(), localObj.getCurrencyValue(), 'getCurrencyValue');
|
|
|
+{$ENDIF HAS_SDO_CURRENCY}
|
|
|
+{$IFDEF HAS_SDO_FLOAT}
|
|
|
+ CheckEquals( localObj.getDoubleValue(), localObj.getFloatValue(), 'getFloatValue');
|
|
|
+{$ENDIF HAS_SDO_FLOAT}
|
|
|
+ CheckEquals( TSDOConvertHelper.FloatToString(localObj.getDoubleValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ localObj := TValueSetting.Create(False,True,locVal,prp,23);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( False, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( True, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 23, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( 0, localObj.getDoubleValue(), 'getDoubleValue');
|
|
|
+{$IFDEF HAS_SDO_CURRENCY}
|
|
|
+ CheckEquals( localObj.getDoubleValue(), localObj.getCurrencyValue(), 'getCurrencyValue');
|
|
|
+{$ENDIF HAS_SDO_CURRENCY}
|
|
|
+{$IFDEF HAS_SDO_FLOAT}
|
|
|
+ CheckEquals( localObj.getDoubleValue(), localObj.getFloatValue(), 'getFloatValue');
|
|
|
+{$ENDIF HAS_SDO_FLOAT}
|
|
|
+ CheckEquals( TSDOConvertHelper.FloatToString(localObj.getDoubleValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ locVal := 99;
|
|
|
+ localObj := TValueSetting.Create(True,False,locVal,prp,34);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( True, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( False, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 34, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( locVal, localObj.getDoubleValue(), 'getDoubleValue');
|
|
|
+{$IFDEF HAS_SDO_CURRENCY}
|
|
|
+ CheckEquals( localObj.getDoubleValue(), localObj.getCurrencyValue(), 'getCurrencyValue');
|
|
|
+{$ENDIF HAS_SDO_CURRENCY}
|
|
|
+{$IFDEF HAS_SDO_FLOAT}
|
|
|
+ CheckEquals( localObj.getDoubleValue(), localObj.getFloatValue(), 'getFloatValue');
|
|
|
+{$ENDIF HAS_SDO_FLOAT}
|
|
|
+ CheckEquals( TSDOConvertHelper.FloatToString(localObj.getDoubleValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ locVal := 8855224;
|
|
|
+ localObj := TValueSetting.Create(True,False,locVal,prp,34);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( True, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( False, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 34, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( locVal, localObj.getDoubleValue(), 'getDoubleValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.FloatToString(localObj.getDoubleValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ locVal := -55886424;
|
|
|
+ localObj := TValueSetting.Create(True,False,locVal,prp,34);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( True, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( False, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 34, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( locVal, localObj.getDoubleValue(), 'getDoubleValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.FloatToString(localObj.getDoubleValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+{$ENDIF HAS_SDO_DOUBLE}
|
|
|
+
|
|
|
+{$IFDEF HAS_SDO_FLOAT}
|
|
|
+procedure TValueSetting_Test.create_float();
|
|
|
+const
|
|
|
+ PROP_NAME = s_float_prop;
|
|
|
+ LIST_PROP_NAME = s_float_propList;
|
|
|
+var
|
|
|
+ ok : Boolean;
|
|
|
+ locVal : TSDOFloat;
|
|
|
+ fact : ISDODataFactory;
|
|
|
+ objectAType : ISDOType;
|
|
|
+ localObj : TValueSetting;
|
|
|
+ prp : ISDOProperty;
|
|
|
+begin
|
|
|
+ locVal := 67;
|
|
|
+ fact := CreateFactory();
|
|
|
+ objectAType := fact.getType(s_uri,s_type_object_A);
|
|
|
+ ok := False;
|
|
|
+ try
|
|
|
+ TValueSetting.Create(False,False,locVal,nil,0);
|
|
|
+ except
|
|
|
+ on e : ESDOIllegalArgumentException do
|
|
|
+ ok := True;
|
|
|
+ end;
|
|
|
+ CheckEquals(True,ok,'Invalid property parametter');
|
|
|
+
|
|
|
+ // simple value
|
|
|
+ prp := objectAType.getProperty(PROP_NAME) as ISDOProperty;
|
|
|
+ localObj := TValueSetting.Create(True,True,locVal,prp,0);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( True, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( True, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 0, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( 0, localObj.getFloatValue(), 'getFloatValue');
|
|
|
+{$IFDEF HAS_SDO_CURRENCY}
|
|
|
+ CheckEquals( localObj.getFloatValue(), localObj.getCurrencyValue(), 'getCurrencyValue');
|
|
|
+{$ENDIF HAS_SDO_CURRENCY}
|
|
|
+{$IFDEF HAS_SDO_DOUBLE}
|
|
|
+ CheckEquals( localObj.getFloatValue(), localObj.getDoubleValue(), 'getDoubleValue');
|
|
|
+{$ENDIF HAS_SDO_DOUBLE}
|
|
|
+ CheckEquals( TSDOConvertHelper.FloatToString(localObj.getFloatValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ localObj := TValueSetting.Create(False,True,locVal,prp,0);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( False, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( True, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 0, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( 0, localObj.getFloatValue(), 'getFloatValue');
|
|
|
+{$IFDEF HAS_SDO_CURRENCY}
|
|
|
+ CheckEquals( localObj.getFloatValue(), localObj.getCurrencyValue(), 'getCurrencyValue');
|
|
|
+{$ENDIF HAS_SDO_CURRENCY}
|
|
|
+{$IFDEF HAS_SDO_DOUBLE}
|
|
|
+ CheckEquals( localObj.getFloatValue(), localObj.getDoubleValue(), 'getDoubleValue');
|
|
|
+{$ENDIF HAS_SDO_DOUBLE}
|
|
|
+ CheckEquals( TSDOConvertHelper.FloatToString(localObj.getFloatValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ localObj := TValueSetting.Create(True,False,locVal,prp,0);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( True, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( False, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 0, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( locVal, localObj.getFloatValue(), 'getFloatValue');
|
|
|
+{$IFDEF HAS_SDO_CURRENCY}
|
|
|
+ CheckEquals( localObj.getFloatValue(), localObj.getCurrencyValue(), 'getCurrencyValue');
|
|
|
+{$ENDIF HAS_SDO_CURRENCY}
|
|
|
+{$IFDEF HAS_SDO_DOUBLE}
|
|
|
+ CheckEquals( localObj.getFloatValue(), localObj.getDoubleValue(), 'getDoubleValue');
|
|
|
+{$ENDIF HAS_SDO_DOUBLE}
|
|
|
+ CheckEquals( TSDOConvertHelper.FloatToString(localObj.getFloatValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ locVal := 45;
|
|
|
+ localObj := TValueSetting.Create(True,False,locVal,prp,0);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( True, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( False, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 0, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( locVal, localObj.getFloatValue(), 'getFloatValue');
|
|
|
+{$IFDEF HAS_SDO_CURRENCY}
|
|
|
+ CheckEquals( localObj.getFloatValue(), localObj.getCurrencyValue(), 'getCurrencyValue');
|
|
|
+{$ENDIF HAS_SDO_CURRENCY}
|
|
|
+{$IFDEF HAS_SDO_DOUBLE}
|
|
|
+ CheckEquals( localObj.getFloatValue(), localObj.getDoubleValue(), 'getDoubleValue');
|
|
|
+{$ENDIF HAS_SDO_DOUBLE}
|
|
|
+ CheckEquals( TSDOConvertHelper.FloatToString(localObj.getFloatValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ locVal := 1236547891;
|
|
|
+ localObj := TValueSetting.Create(True,False,locVal,prp,0);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( True, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( False, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 0, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( locVal, localObj.getFloatValue(), 'getFloatValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.FloatToString(localObj.getFloatValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ locVal := -2255442;
|
|
|
+ localObj := TValueSetting.Create(True,False,locVal,prp,0);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( True, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( False, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 0, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( locVal, localObj.getFloatValue(), 'getFloatValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.FloatToString(localObj.getFloatValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ // multi value
|
|
|
+ prp := objectAType.getProperty(LIST_PROP_NAME) as ISDOProperty;
|
|
|
+ localObj := TValueSetting.Create(True,True,locVal,prp,12);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( True, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( True, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 12, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( 0, localObj.getFloatValue(), 'getFloatValue');
|
|
|
+{$IFDEF HAS_SDO_CURRENCY}
|
|
|
+ CheckEquals( localObj.getFloatValue(), localObj.getCurrencyValue(), 'getCurrencyValue');
|
|
|
+{$ENDIF HAS_SDO_CURRENCY}
|
|
|
+{$IFDEF HAS_SDO_DOUBLE}
|
|
|
+ CheckEquals( localObj.getFloatValue(), localObj.getDoubleValue(), 'getDoubleValue');
|
|
|
+{$ENDIF HAS_SDO_DOUBLE}
|
|
|
+ CheckEquals( TSDOConvertHelper.FloatToString(localObj.getFloatValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ localObj := TValueSetting.Create(False,True,locVal,prp,23);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( False, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( True, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 23, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( 0, localObj.getFloatValue(), 'getFloatValue');
|
|
|
+{$IFDEF HAS_SDO_CURRENCY}
|
|
|
+ CheckEquals( localObj.getFloatValue(), localObj.getCurrencyValue(), 'getCurrencyValue');
|
|
|
+{$ENDIF HAS_SDO_CURRENCY}
|
|
|
+{$IFDEF HAS_SDO_DOUBLE}
|
|
|
+ CheckEquals( localObj.getFloatValue(), localObj.getDoubleValue(), 'getDoubleValue');
|
|
|
+{$ENDIF HAS_SDO_DOUBLE}
|
|
|
+ CheckEquals( TSDOConvertHelper.FloatToString(localObj.getFloatValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ locVal := 99;
|
|
|
+ localObj := TValueSetting.Create(True,False,locVal,prp,34);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( True, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( False, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 34, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( locVal, localObj.getFloatValue(), 'getFloatValue');
|
|
|
+{$IFDEF HAS_SDO_CURRENCY}
|
|
|
+ CheckEquals( localObj.getFloatValue(), localObj.getCurrencyValue(), 'getCurrencyValue');
|
|
|
+{$ENDIF HAS_SDO_CURRENCY}
|
|
|
+{$IFDEF HAS_SDO_DOUBLE}
|
|
|
+ CheckEquals( localObj.getFloatValue(), localObj.getDoubleValue(), 'getDoubleValue');
|
|
|
+{$ENDIF HAS_SDO_DOUBLE}
|
|
|
+ CheckEquals( TSDOConvertHelper.FloatToString(localObj.getFloatValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ locVal := 88552255;
|
|
|
+ localObj := TValueSetting.Create(True,False,locVal,prp,34);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( True, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( False, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 34, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( locVal, localObj.getFloatValue(), 'getFloatValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.FloatToString(localObj.getFloatValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ locVal := -55886624;
|
|
|
+ localObj := TValueSetting.Create(True,False,locVal,prp,34);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( True, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( False, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 34, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( locVal, localObj.getFloatValue(), 'getFloatValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.FloatToString(localObj.getFloatValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+{$ENDIF HAS_SDO_FLOAT}
|
|
|
+
|
|
|
+procedure TValueSetting_Test.create_integer();
|
|
|
+var
|
|
|
+ ok : Boolean;
|
|
|
+ intVal : TSDOInteger;
|
|
|
+ fact : ISDODataFactory;
|
|
|
+ objectAType : ISDOType;
|
|
|
+ localObj : TValueSetting;
|
|
|
+ prp : ISDOProperty;
|
|
|
+begin
|
|
|
+ intVal := 1210;
|
|
|
+ fact := CreateFactory();
|
|
|
+ objectAType := fact.getType(s_uri,s_type_object_A);
|
|
|
+ ok := False;
|
|
|
+ try
|
|
|
+ TValueSetting.Create(False,False,intVal,nil,0);
|
|
|
+ except
|
|
|
+ on e : ESDOIllegalArgumentException do
|
|
|
+ ok := True;
|
|
|
+ end;
|
|
|
+ CheckEquals(True,ok,'Invalid property parametter');
|
|
|
+
|
|
|
+ // simple value
|
|
|
+ prp := objectAType.getProperty(s_integer_prop) as ISDOProperty;
|
|
|
+ localObj := TValueSetting.Create(True,True,intVal,prp,0);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( True, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( True, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 0, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( 0, localObj.getIntegerValue(), 'getIntegerValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.IntegerToBool(localObj.getIntegerValue()), localObj.getBooleanValue(), 'getBooleanValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.IntegerToString(localObj.getIntegerValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ localObj := TValueSetting.Create(False,True,intVal,prp,0);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( False, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( True, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 0, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( 0, localObj.getIntegerValue(), 'getIntegerValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.IntegerToBool(localObj.getIntegerValue()), localObj.getBooleanValue(), 'getBooleanValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.IntegerToString(localObj.getIntegerValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ localObj := TValueSetting.Create(True,False,intVal,prp,0);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( True, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( False, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 0, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( intVal, localObj.getIntegerValue(), 'getIntegerValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.IntegerToBool(localObj.getIntegerValue()), localObj.getBooleanValue(), 'getBooleanValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.IntegerToString(localObj.getIntegerValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ intVal := 67;
|
|
|
+ localObj := TValueSetting.Create(True,False,intVal,prp,0);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( True, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( False, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 0, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( intVal, localObj.getIntegerValue(), 'getIntegerValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.IntegerToBool(localObj.getIntegerValue()), localObj.getBooleanValue(), 'getBooleanValue');
|
|
|
+ CheckEquals( localObj.getByteValue(), localObj.getIntegerValue(), 'getByteValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.IntegerToString(localObj.getIntegerValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ // multi value
|
|
|
+ prp := objectAType.getProperty(s_integer_propList) as ISDOProperty;
|
|
|
+ localObj := TValueSetting.Create(True,True,intVal,prp,12);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( True, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( True, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 12, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( 0, localObj.getIntegerValue(), 'getIntegerValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.IntegerToBool(localObj.getIntegerValue()), localObj.getBooleanValue(), 'getBooleanValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.IntegerToString(localObj.getIntegerValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ localObj := TValueSetting.Create(False,True,intVal,prp,23);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( False, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( True, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 23, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( 0, localObj.getIntegerValue(), 'getIntegerValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.IntegerToBool(localObj.getIntegerValue()), localObj.getBooleanValue(), 'getBooleanValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.IntegerToString(localObj.getIntegerValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ intVal := 345;
|
|
|
+ localObj := TValueSetting.Create(True,False,intVal,prp,34);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( True, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( False, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 34, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( intVal, localObj.getIntegerValue(), 'getIntegerValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.IntegerToBool(localObj.getIntegerValue()), localObj.getBooleanValue(), 'getBooleanValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.IntegerToString(localObj.getIntegerValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+{$IFDEF HAS_SDO_LONG}
|
|
|
+procedure TValueSetting_Test.create_long();
|
|
|
+const
|
|
|
+ PROP_NAME = s_long_prop;
|
|
|
+ LIST_PROP_NAME = s_long_propList;
|
|
|
+var
|
|
|
+ ok : Boolean;
|
|
|
+ locVal : TSDOLong;
|
|
|
+ fact : ISDODataFactory;
|
|
|
+ objectAType : ISDOType;
|
|
|
+ localObj : TValueSetting;
|
|
|
+ prp : ISDOProperty;
|
|
|
+begin
|
|
|
+ locVal := 67;
|
|
|
+ fact := CreateFactory();
|
|
|
+ objectAType := fact.getType(s_uri,s_type_object_A);
|
|
|
+ ok := False;
|
|
|
+ try
|
|
|
+ TValueSetting.Create(False,False,locVal,nil,0);
|
|
|
+ except
|
|
|
+ on e : ESDOIllegalArgumentException do
|
|
|
+ ok := True;
|
|
|
+ end;
|
|
|
+ CheckEquals(True,ok,'Invalid property parametter');
|
|
|
+
|
|
|
+ // simple value
|
|
|
+ prp := objectAType.getProperty(PROP_NAME) as ISDOProperty;
|
|
|
+ localObj := TValueSetting.Create(True,True,locVal,prp,0);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( True, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( True, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 0, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( 0, localObj.getLongValue(), 'getLongValue');
|
|
|
+{$IFDEF HAS_SDO_CHAR}
|
|
|
+ CheckEquals( TSDOConvertHelper.LongToChar(localObj.getLongValue()), localObj.getCharacterValue(), 'getCharacterValue');
|
|
|
+{$ENDIF HAS_SDO_CHAR}
|
|
|
+ CheckEquals( TSDOConvertHelper.LongToBool(localObj.getLongValue()), localObj.getBooleanValue(), 'getBooleanValue');
|
|
|
+ CheckEquals( localObj.getLongValue(), localObj.getByteValue(), 'getByteValue');
|
|
|
+ CheckEquals( localObj.getLongValue(), localObj.getIntegerValue(), 'getIntegerValue');
|
|
|
+{$IFDEF HAS_SDO_SHORT}
|
|
|
+ CheckEquals( localObj.getLongValue(), localObj.getShortValue(), 'getShortValue');
|
|
|
+{$ENDIF HAS_SDO_SHORT}
|
|
|
+ CheckEquals( TSDOConvertHelper.LongToString(localObj.getLongValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ localObj := TValueSetting.Create(False,True,locVal,prp,0);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( False, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( True, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 0, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( 0, localObj.getLongValue(), 'getLongValue');
|
|
|
+{$IFDEF HAS_SDO_CHAR}
|
|
|
+ CheckEquals( TSDOConvertHelper.LongToChar(localObj.getLongValue()), localObj.getCharacterValue(), 'getCharacterValue');
|
|
|
+{$ENDIF HAS_SDO_CHAR}
|
|
|
+ CheckEquals( TSDOConvertHelper.LongToBool(localObj.getLongValue()), localObj.getBooleanValue(), 'getBooleanValue');
|
|
|
+ CheckEquals( localObj.getLongValue(), localObj.getByteValue(), 'getByteValue');
|
|
|
+ CheckEquals( localObj.getLongValue(), localObj.getIntegerValue(), 'getIntegerValue');
|
|
|
+{$IFDEF HAS_SDO_SHORT}
|
|
|
+ CheckEquals( localObj.getLongValue(), localObj.getShortValue(), 'getShortValue');
|
|
|
+{$ENDIF HAS_SDO_SHORT}
|
|
|
+ CheckEquals( TSDOConvertHelper.LongToString(localObj.getLongValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ localObj := TValueSetting.Create(True,False,locVal,prp,0);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( True, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( False, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 0, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( locVal, localObj.getLongValue(), 'getLongValue');
|
|
|
+{$IFDEF HAS_SDO_CHAR}
|
|
|
+ CheckEquals( TSDOConvertHelper.LongToChar(localObj.getLongValue()), localObj.getCharacterValue(), 'getCharacterValue');
|
|
|
+{$ENDIF HAS_SDO_CHAR}
|
|
|
+ CheckEquals( TSDOConvertHelper.LongToBool(localObj.getLongValue()), localObj.getBooleanValue(), 'getBooleanValue');
|
|
|
+ CheckEquals( localObj.getLongValue(), localObj.getByteValue(), 'getByteValue');
|
|
|
+ CheckEquals( localObj.getLongValue(), localObj.getIntegerValue(), 'getIntegerValue');
|
|
|
+{$IFDEF HAS_SDO_SHORT}
|
|
|
+ CheckEquals( localObj.getLongValue(), localObj.getShortValue(), 'getShortValue');
|
|
|
+{$ENDIF HAS_SDO_SHORT}
|
|
|
+ CheckEquals( TSDOConvertHelper.LongToString(localObj.getLongValue()), localObj.getStringValue(), 'getStringValue'); finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ locVal := 45;
|
|
|
+ localObj := TValueSetting.Create(True,False,locVal,prp,0);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( True, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( False, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 0, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( locVal, localObj.getLongValue(), 'getLongValue');
|
|
|
+{$IFDEF HAS_SDO_CHAR}
|
|
|
+ CheckEquals( TSDOConvertHelper.LongToChar(localObj.getLongValue()), localObj.getCharacterValue(), 'getCharacterValue');
|
|
|
+{$ENDIF HAS_SDO_CHAR}
|
|
|
+ CheckEquals( TSDOConvertHelper.LongToBool(localObj.getLongValue()), localObj.getBooleanValue(), 'getBooleanValue');
|
|
|
+ CheckEquals( localObj.getLongValue(), localObj.getByteValue(), 'getByteValue');
|
|
|
+ CheckEquals( localObj.getLongValue(), localObj.getIntegerValue(), 'getIntegerValue');
|
|
|
+{$IFDEF HAS_SDO_SHORT}
|
|
|
+ CheckEquals( localObj.getLongValue(), localObj.getShortValue(), 'getShortValue');
|
|
|
+{$ENDIF HAS_SDO_SHORT}
|
|
|
+ CheckEquals( TSDOConvertHelper.LongToString(localObj.getLongValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ locVal := 12365478914782522;
|
|
|
+ localObj := TValueSetting.Create(True,False,locVal,prp,0);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( True, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( False, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 0, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( locVal, localObj.getLongValue(), 'getLongValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.LongToString(localObj.getLongValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ locVal := -22554477886221222;
|
|
|
+ localObj := TValueSetting.Create(True,False,locVal,prp,0);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( True, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( False, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 0, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( locVal, localObj.getLongValue(), 'getLongValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.LongToString(localObj.getLongValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ // multi value
|
|
|
+ prp := objectAType.getProperty(LIST_PROP_NAME) as ISDOProperty;
|
|
|
+ localObj := TValueSetting.Create(True,True,locVal,prp,12);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( True, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( True, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 12, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( 0, localObj.getLongValue(), 'getLongValue');
|
|
|
+{$IFDEF HAS_SDO_CHAR}
|
|
|
+ CheckEquals( TSDOConvertHelper.LongToChar(localObj.getLongValue()), localObj.getCharacterValue(), 'getCharacterValue');
|
|
|
+{$ENDIF HAS_SDO_CHAR}
|
|
|
+ CheckEquals( TSDOConvertHelper.LongToBool(localObj.getLongValue()), localObj.getBooleanValue(), 'getBooleanValue');
|
|
|
+ CheckEquals( localObj.getLongValue(), localObj.getByteValue(), 'getByteValue');
|
|
|
+ CheckEquals( localObj.getLongValue(), localObj.getIntegerValue(), 'getIntegerValue');
|
|
|
+{$IFDEF HAS_SDO_SHORT}
|
|
|
+ CheckEquals( localObj.getLongValue(), localObj.getShortValue(), 'getShortValue');
|
|
|
+{$ENDIF HAS_SDO_SHORT}
|
|
|
+ CheckEquals( TSDOConvertHelper.LongToString(localObj.getLongValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ localObj := TValueSetting.Create(False,True,locVal,prp,23);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( False, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( True, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 23, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( 0, localObj.getLongValue(), 'getLongValue');
|
|
|
+{$IFDEF HAS_SDO_CHAR}
|
|
|
+ CheckEquals( TSDOConvertHelper.LongToChar(localObj.getLongValue()), localObj.getCharacterValue(), 'getCharacterValue');
|
|
|
+{$ENDIF HAS_SDO_CHAR}
|
|
|
+ CheckEquals( TSDOConvertHelper.LongToBool(localObj.getLongValue()), localObj.getBooleanValue(), 'getBooleanValue');
|
|
|
+ CheckEquals( localObj.getLongValue(), localObj.getByteValue(), 'getByteValue');
|
|
|
+ CheckEquals( localObj.getLongValue(), localObj.getIntegerValue(), 'getIntegerValue');
|
|
|
+{$IFDEF HAS_SDO_SHORT}
|
|
|
+ CheckEquals( localObj.getLongValue(), localObj.getShortValue(), 'getShortValue');
|
|
|
+{$ENDIF HAS_SDO_SHORT}
|
|
|
+ CheckEquals( TSDOConvertHelper.LongToString(localObj.getLongValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ locVal := 99;
|
|
|
+ localObj := TValueSetting.Create(True,False,locVal,prp,34);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( True, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( False, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 34, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( locVal, localObj.getLongValue(), 'getLongValue');
|
|
|
+{$IFDEF HAS_SDO_CHAR}
|
|
|
+ CheckEquals( TSDOConvertHelper.LongToChar(localObj.getLongValue()), localObj.getCharacterValue(), 'getCharacterValue');
|
|
|
+{$ENDIF HAS_SDO_CHAR}
|
|
|
+ CheckEquals( TSDOConvertHelper.LongToBool(localObj.getLongValue()), localObj.getBooleanValue(), 'getBooleanValue');
|
|
|
+ CheckEquals( localObj.getLongValue(), localObj.getByteValue(), 'getByteValue');
|
|
|
+ CheckEquals( localObj.getLongValue(), localObj.getIntegerValue(), 'getIntegerValue');
|
|
|
+{$IFDEF HAS_SDO_SHORT}
|
|
|
+ CheckEquals( localObj.getLongValue(), localObj.getShortValue(), 'getShortValue');
|
|
|
+{$ENDIF HAS_SDO_SHORT}
|
|
|
+ CheckEquals( TSDOConvertHelper.LongToString(localObj.getLongValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ locVal := 88552246677331155;
|
|
|
+ localObj := TValueSetting.Create(True,False,locVal,prp,34);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( True, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( False, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 34, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( locVal, localObj.getLongValue(), 'getLongValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.LongToString(localObj.getLongValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ locVal := -5588663211424;
|
|
|
+ localObj := TValueSetting.Create(True,False,locVal,prp,34);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( True, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( False, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 34, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( locVal, localObj.getLongValue(), 'getLongValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.LongToString(localObj.getLongValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+{$ENDIF HAS_SDO_LONG}
|
|
|
+
|
|
|
+{$IFDEF HAS_SDO_SHORT}
|
|
|
+procedure TValueSetting_Test.create_short();
|
|
|
+const
|
|
|
+ PROP_NAME = s_short_prop;
|
|
|
+ LIST_PROP_NAME = s_short_propList;
|
|
|
+var
|
|
|
+ ok : Boolean;
|
|
|
+ locVal : TSDOShort;
|
|
|
+ fact : ISDODataFactory;
|
|
|
+ objectAType : ISDOType;
|
|
|
+ localObj : TValueSetting;
|
|
|
+ prp : ISDOProperty;
|
|
|
+begin
|
|
|
+ locVal := 67;
|
|
|
+ fact := CreateFactory();
|
|
|
+ objectAType := fact.getType(s_uri,s_type_object_A);
|
|
|
+ ok := False;
|
|
|
+ try
|
|
|
+ TValueSetting.Create(False,False,locVal,nil,0);
|
|
|
+ except
|
|
|
+ on e : ESDOIllegalArgumentException do
|
|
|
+ ok := True;
|
|
|
+ end;
|
|
|
+ CheckEquals(True,ok,'Invalid property parametter');
|
|
|
+
|
|
|
+ // simple value
|
|
|
+ prp := objectAType.getProperty(PROP_NAME) as ISDOProperty;
|
|
|
+ localObj := TValueSetting.Create(True,True,locVal,prp,0);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( True, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( True, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 0, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( 0, localObj.getShortValue(), 'getShortValue');
|
|
|
+{$IFDEF HAS_SDO_CHAR}
|
|
|
+ CheckEquals( TSDOConvertHelper.ShortToChar(localObj.getShortValue()), localObj.getCharacterValue(), 'getCharacterValue');
|
|
|
+{$ENDIF HAS_SDO_CHAR}
|
|
|
+ CheckEquals( TSDOConvertHelper.ShortToBool(localObj.getShortValue()), localObj.getBooleanValue(), 'getBooleanValue');
|
|
|
+ CheckEquals( localObj.getShortValue(), localObj.getByteValue(), 'getByteValue');
|
|
|
+ CheckEquals( localObj.getShortValue(), localObj.getIntegerValue(), 'getIntegerValue');
|
|
|
+{$IFDEF HAS_SDO_LONG}
|
|
|
+ CheckEquals( localObj.getShortValue(), localObj.getLongValue(), 'getLongValue');
|
|
|
+{$ENDIF HAS_SDO_LONG}
|
|
|
+ CheckEquals( TSDOConvertHelper.ShortToString(localObj.getShortValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ localObj := TValueSetting.Create(False,True,locVal,prp,0);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( False, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( True, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 0, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( 0, localObj.getShortValue(), 'getShortValue');
|
|
|
+{$IFDEF HAS_SDO_CHAR}
|
|
|
+ CheckEquals( TSDOConvertHelper.ShortToChar(localObj.getShortValue()), localObj.getCharacterValue(), 'getCharacterValue');
|
|
|
+{$ENDIF HAS_SDO_CHAR}
|
|
|
+ CheckEquals( TSDOConvertHelper.ShortToBool(localObj.getShortValue()), localObj.getBooleanValue(), 'getBooleanValue');
|
|
|
+ CheckEquals( localObj.getShortValue(), localObj.getByteValue(), 'getByteValue');
|
|
|
+ CheckEquals( localObj.getShortValue(), localObj.getIntegerValue(), 'getIntegerValue');
|
|
|
+{$IFDEF HAS_SDO_LONG}
|
|
|
+ CheckEquals( localObj.getShortValue(), localObj.getLongValue(), 'getLongValue');
|
|
|
+{$ENDIF HAS_SDO_LONG}
|
|
|
+ CheckEquals( TSDOConvertHelper.ShortToString(localObj.getShortValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ localObj := TValueSetting.Create(True,False,locVal,prp,0);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( True, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( False, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 0, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( locVal, localObj.getShortValue(), 'getShortValue');
|
|
|
+{$IFDEF HAS_SDO_CHAR}
|
|
|
+ CheckEquals( TSDOConvertHelper.ShortToChar(localObj.getShortValue()), localObj.getCharacterValue(), 'getCharacterValue');
|
|
|
+{$ENDIF HAS_SDO_CHAR}
|
|
|
+ CheckEquals( TSDOConvertHelper.ShortToBool(localObj.getShortValue()), localObj.getBooleanValue(), 'getBooleanValue');
|
|
|
+ CheckEquals( localObj.getShortValue(), localObj.getByteValue(), 'getByteValue');
|
|
|
+ CheckEquals( localObj.getShortValue(), localObj.getIntegerValue(), 'getIntegerValue');
|
|
|
+{$IFDEF HAS_SDO_LONG}
|
|
|
+ CheckEquals( localObj.getShortValue(), localObj.getLongValue(), 'getLongValue');
|
|
|
+{$ENDIF HAS_SDO_LONG}
|
|
|
+ CheckEquals( TSDOConvertHelper.ShortToString(localObj.getShortValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ locVal := 45;
|
|
|
+ localObj := TValueSetting.Create(True,False,locVal,prp,0);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( True, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( False, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 0, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( locVal, localObj.getShortValue(), 'getShortValue');
|
|
|
+{$IFDEF HAS_SDO_CHAR}
|
|
|
+ CheckEquals( TSDOConvertHelper.ShortToChar(localObj.getShortValue()), localObj.getCharacterValue(), 'getCharacterValue');
|
|
|
+{$ENDIF HAS_SDO_CHAR}
|
|
|
+ CheckEquals( TSDOConvertHelper.ShortToBool(localObj.getShortValue()), localObj.getBooleanValue(), 'getBooleanValue');
|
|
|
+ CheckEquals( localObj.getShortValue(), localObj.getByteValue(), 'getByteValue');
|
|
|
+ CheckEquals( localObj.getShortValue(), localObj.getIntegerValue(), 'getIntegerValue');
|
|
|
+{$IFDEF HAS_SDO_LONG}
|
|
|
+ CheckEquals( localObj.getShortValue(), localObj.getLongValue(), 'getLongValue');
|
|
|
+{$ENDIF HAS_SDO_LONG}
|
|
|
+ CheckEquals( TSDOConvertHelper.ShortToString(localObj.getShortValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ locVal := 23567;
|
|
|
+ localObj := TValueSetting.Create(True,False,locVal,prp,0);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( True, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( False, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 0, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( locVal, localObj.getShortValue(), 'getShortValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.ShortToString(localObj.getShortValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ locVal := -22552;
|
|
|
+ localObj := TValueSetting.Create(True,False,locVal,prp,0);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( True, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( False, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 0, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( locVal, localObj.getShortValue(), 'getShortValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.ShortToString(localObj.getShortValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ // multi value
|
|
|
+ prp := objectAType.getProperty(LIST_PROP_NAME) as ISDOProperty;
|
|
|
+ localObj := TValueSetting.Create(True,True,locVal,prp,12);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( True, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( True, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 12, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( 0, localObj.getShortValue(), 'getShortValue');
|
|
|
+{$IFDEF HAS_SDO_CHAR}
|
|
|
+ CheckEquals( TSDOConvertHelper.ShortToChar(localObj.getShortValue()), localObj.getCharacterValue(), 'getCharacterValue');
|
|
|
+{$ENDIF HAS_SDO_CHAR}
|
|
|
+ CheckEquals( TSDOConvertHelper.ShortToBool(localObj.getShortValue()), localObj.getBooleanValue(), 'getBooleanValue');
|
|
|
+ CheckEquals( localObj.getShortValue(), localObj.getByteValue(), 'getByteValue');
|
|
|
+ CheckEquals( localObj.getShortValue(), localObj.getIntegerValue(), 'getIntegerValue');
|
|
|
+{$IFDEF HAS_SDO_LONG}
|
|
|
+ CheckEquals( localObj.getShortValue(), localObj.getLongValue(), 'getLongValue');
|
|
|
+{$ENDIF HAS_SDO_LONG}
|
|
|
+ CheckEquals( TSDOConvertHelper.ShortToString(localObj.getShortValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ localObj := TValueSetting.Create(False,True,locVal,prp,23);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( False, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( True, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 23, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( 0, localObj.getShortValue(), 'getShortValue');
|
|
|
+{$IFDEF HAS_SDO_CHAR}
|
|
|
+ CheckEquals( TSDOConvertHelper.ShortToChar(localObj.getShortValue()), localObj.getCharacterValue(), 'getCharacterValue');
|
|
|
+{$ENDIF HAS_SDO_CHAR}
|
|
|
+ CheckEquals( TSDOConvertHelper.ShortToBool(localObj.getShortValue()), localObj.getBooleanValue(), 'getBooleanValue');
|
|
|
+ CheckEquals( localObj.getShortValue(), localObj.getByteValue(), 'getByteValue');
|
|
|
+ CheckEquals( localObj.getShortValue(), localObj.getIntegerValue(), 'getIntegerValue');
|
|
|
+{$IFDEF HAS_SDO_LONG}
|
|
|
+ CheckEquals( localObj.getShortValue(), localObj.getLongValue(), 'getLongValue');
|
|
|
+{$ENDIF HAS_SDO_LONG}
|
|
|
+ CheckEquals( TSDOConvertHelper.ShortToString(localObj.getShortValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ locVal := 99;
|
|
|
+ localObj := TValueSetting.Create(True,False,locVal,prp,34);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( True, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( False, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 34, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( locVal, localObj.getShortValue(), 'getShortValue');
|
|
|
+{$IFDEF HAS_SDO_CHAR}
|
|
|
+ CheckEquals( TSDOConvertHelper.ShortToChar(localObj.getShortValue()), localObj.getCharacterValue(), 'getCharacterValue');
|
|
|
+{$ENDIF HAS_SDO_CHAR}
|
|
|
+ CheckEquals( TSDOConvertHelper.ShortToBool(localObj.getShortValue()), localObj.getBooleanValue(), 'getBooleanValue');
|
|
|
+ CheckEquals( localObj.getShortValue(), localObj.getByteValue(), 'getByteValue');
|
|
|
+ CheckEquals( localObj.getShortValue(), localObj.getIntegerValue(), 'getIntegerValue');
|
|
|
+{$IFDEF HAS_SDO_LONG}
|
|
|
+ CheckEquals( localObj.getShortValue(), localObj.getLongValue(), 'getLongValue');
|
|
|
+{$ENDIF HAS_SDO_LONG}
|
|
|
+ CheckEquals( TSDOConvertHelper.ShortToString(localObj.getShortValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ locVal := 8855;
|
|
|
+ localObj := TValueSetting.Create(True,False,locVal,prp,34);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( True, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( False, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 34, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( locVal, localObj.getShortValue(), 'getShortValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.ShortToString(localObj.getShortValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ locVal := -11424;
|
|
|
+ localObj := TValueSetting.Create(True,False,locVal,prp,34);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( True, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( False, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 34, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( locVal, localObj.getShortValue(), 'getShortValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.ShortToString(localObj.getShortValue()), localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+{$ENDIF HAS_SDO_SHORT}
|
|
|
+
|
|
|
+procedure TValueSetting_Test.create_string();
|
|
|
+var
|
|
|
+ ok : Boolean;
|
|
|
+ strVal : TSDOString;
|
|
|
+ fact : ISDODataFactory;
|
|
|
+ objectAType : ISDOType;
|
|
|
+ localObj : TValueSetting;
|
|
|
+ prp : ISDOProperty;
|
|
|
+begin
|
|
|
+ strVal := 'sdo sample string';
|
|
|
+ fact := CreateFactory();
|
|
|
+ objectAType := fact.getType(s_uri,s_type_object_A);
|
|
|
+ ok := False;
|
|
|
+ try
|
|
|
+ TValueSetting.Create(False,False,strVal,nil,0);
|
|
|
+ except
|
|
|
+ on e : ESDOIllegalArgumentException do
|
|
|
+ ok := True;
|
|
|
+ end;
|
|
|
+ CheckEquals(True,ok,'Invalid property parametter');
|
|
|
+
|
|
|
+ // simple value
|
|
|
+ prp := objectAType.getProperty(s_string_prop) as ISDOProperty;
|
|
|
+ localObj := TValueSetting.Create(True,True,strVal,prp,0);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( True, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( True, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 0, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( '', localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ localObj := TValueSetting.Create(False,True,strVal,prp,0);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( False, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( True, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 0, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( '', localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ localObj := TValueSetting.Create(True,False,strVal,prp,0);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( True, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( False, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 0, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( strVal, localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ strVal := '123';
|
|
|
+ localObj := TValueSetting.Create(True,False,strVal,prp,0);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( True, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( False, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 0, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( strVal, localObj.getStringValue(), 'getStringValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.StringToByte(localObj.getStringValue()), localObj.getByteValue(), 'getByteValue');
|
|
|
+ CheckEquals( TSDOConvertHelper.StringToInteger(localObj.getStringValue()), localObj.getIntegerValue(), 'getIntegerValue');
|
|
|
+{$IFDEF HAS_SDO_BYTES}
|
|
|
+ CheckEquals( TSDOConvertHelper.StringToBytes(localObj.getStringValue()), localObj.getBytesValue(), 'getBytesValue');
|
|
|
+{$ENDIF HAS_SDO_BYTES}
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ // multi value
|
|
|
+ prp := objectAType.getProperty(s_string_propList) as ISDOProperty;
|
|
|
+ localObj := TValueSetting.Create(True,True,strVal,prp,12);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( True, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( True, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 12, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( '', localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ localObj := TValueSetting.Create(False,True,strVal,prp,23);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( False, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( True, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 23, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( '', localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ localObj := TValueSetting.Create(True,False,strVal,prp,34);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( True, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( False, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 34, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( strVal, localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ strVal := 'qwsdff';
|
|
|
+ localObj := TValueSetting.Create(True,False,strVal,prp,34);
|
|
|
+ try
|
|
|
+ CheckEquals( PtrInt(prp), PtrInt(localObj.getProperty()), 'getProperty' );
|
|
|
+ CheckEquals( True, localObj.isSet(), 'isSet' );
|
|
|
+ CheckEquals( False, localObj.isNull(), 'isNull' );
|
|
|
+ CheckEquals( 34, localObj.getIndex(), 'getIndex' );
|
|
|
+ CheckEquals( strVal, localObj.getStringValue(), 'getStringValue');
|
|
|
+ finally
|
|
|
+ FreeAndNil(localObj);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+{ TSDOSettingList_Test }
|
|
|
+
|
|
|
+procedure TSDOSettingList_Test.append();
|
|
|
+var
|
|
|
+ ok : Boolean;
|
|
|
+ intVal : TSDOInteger;
|
|
|
+ fact : ISDODataFactory;
|
|
|
+ objectAType : ISDOType;
|
|
|
+ stg0, stg1, stg2, stg3 : TValueSetting;
|
|
|
+ localObj : ISDOSettingList;
|
|
|
+ prp : ISDOProperty;
|
|
|
+begin
|
|
|
+ intVal := 1210;
|
|
|
+ fact := CreateFactory();
|
|
|
+ objectAType := fact.getType(s_uri,s_type_object_A);
|
|
|
+ prp := objectAType.getProperty(s_integer_prop) as ISDOProperty;
|
|
|
+
|
|
|
+ localObj := TSDOSettingList.Create();
|
|
|
+ ok := False;
|
|
|
+ try
|
|
|
+ localObj.append(nil);
|
|
|
+ except
|
|
|
+ on e : ESDOIllegalArgumentException do
|
|
|
+ ok := True;
|
|
|
+ end;
|
|
|
+ CheckEquals(True,ok,'append(0,nil)');
|
|
|
+
|
|
|
+ stg0 := TValueSetting.Create(True,False,intVal,prp,0);
|
|
|
+ localObj.append(stg0);
|
|
|
+ CheckEquals(1,localObj.size());
|
|
|
+ CheckSame(stg0,localObj.getItem(0));
|
|
|
+ localObj.append(stg0);
|
|
|
+ CheckEquals(1,localObj.size(),'appended twice');
|
|
|
+ CheckSame(stg0,localObj.getItem(0),'appended twice');
|
|
|
+
|
|
|
+ stg1 := TValueSetting.Create(True,False,intVal,prp,0);
|
|
|
+ localObj.append(stg1);
|
|
|
+ CheckEquals(2,localObj.size());
|
|
|
+ CheckSame(stg0,localObj.getItem(0));
|
|
|
+ CheckSame(stg1,localObj.getItem(1));
|
|
|
+
|
|
|
+ stg2 := TValueSetting.Create(True,False,intVal,prp,0);
|
|
|
+ localObj.append(stg2);
|
|
|
+ CheckEquals(3,localObj.size());
|
|
|
+ CheckSame(stg0,localObj.getItem(0));
|
|
|
+ CheckSame(stg1,localObj.getItem(1));
|
|
|
+ CheckSame(stg2,localObj.getItem(2));
|
|
|
+ localObj.append(stg2);
|
|
|
+ CheckEquals(3,localObj.size(),'appended twice');
|
|
|
+ CheckSame(stg0,localObj.getItem(0),'appended twice');
|
|
|
+ CheckSame(stg1,localObj.getItem(1),'appended twice');
|
|
|
+ CheckSame(stg2,localObj.getItem(2),'appended twice');
|
|
|
+
|
|
|
+ stg3 := TValueSetting.Create(True,False,intVal,prp,0);
|
|
|
+ localObj.append(stg3);
|
|
|
+ CheckEquals(4,localObj.size());
|
|
|
+ CheckSame(stg0,localObj.getItem(0));
|
|
|
+ CheckSame(stg1,localObj.getItem(1));
|
|
|
+ CheckSame(stg2,localObj.getItem(2));
|
|
|
+ CheckSame(stg3,localObj.getItem(3));
|
|
|
+end;
|
|
|
+
|
|
|
+class function TSDOSettingList_Test.CreateFactory() : ISDODataFactory;
|
|
|
+var
|
|
|
+ locFactory : ISDODataFactory;
|
|
|
+
|
|
|
+ procedure Add_ObjectA(const AUri : string);
|
|
|
+ var
|
|
|
+ locObj : ISDOType;
|
|
|
+ begin
|
|
|
+ locFactory.AddType(AUri,s_type_object_A,[]);
|
|
|
+ locObj := locFactory.getType(AUri,s_type_object_A);
|
|
|
+ locFactory.addProperty(locObj,s_bool_prop,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType], []);
|
|
|
+ locFactory.addProperty(locObj,s_bool_propList,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType],[pfIsMany]);
|
|
|
+ locFactory.addProperty(locObj,s_integer_prop,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType], []);
|
|
|
+ locFactory.addProperty(locObj,s_integer_propList,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType],[pfIsMany]);
|
|
|
+ locFactory.addProperty(locObj,s_string_prop,sdo_namespace,SDOTypeDefaultTypeNames[StringType], []);
|
|
|
+ locFactory.addProperty(locObj,s_string_propList,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsMany]);
|
|
|
+ end;
|
|
|
+begin
|
|
|
+ locFactory := TSDODataFactory.Create() as ISDODataFactory;
|
|
|
+ Add_ObjectA(s_uri);
|
|
|
+
|
|
|
+ Result := locFactory;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOSettingList_Test.getItem();
|
|
|
+var
|
|
|
+ ok : Boolean;
|
|
|
+ intVal : TSDOInteger;
|
|
|
+ fact : ISDODataFactory;
|
|
|
+ objectAType : ISDOType;
|
|
|
+ stg0, stg1, stg2, stg3 : TValueSetting;
|
|
|
+ localObj : ISDOSettingList;
|
|
|
+ prp : ISDOProperty;
|
|
|
+begin
|
|
|
+ intVal := 1210;
|
|
|
+ fact := CreateFactory();
|
|
|
+ objectAType := fact.getType(s_uri,s_type_object_A);
|
|
|
+ prp := objectAType.getProperty(s_integer_prop) as ISDOProperty;
|
|
|
+
|
|
|
+ localObj := TSDOSettingList.Create();
|
|
|
+ ok := False;
|
|
|
+ try
|
|
|
+ localObj.getItem(0);
|
|
|
+ except
|
|
|
+ on e : ESDOIndexOutOfRangeException do
|
|
|
+ ok := True;
|
|
|
+ end;
|
|
|
+ CheckEquals(True,ok,'getItem(0,nil)');
|
|
|
+
|
|
|
+ stg0 := TValueSetting.Create(True,False,intVal,prp,0);
|
|
|
+ localObj.insert(0,stg0);
|
|
|
+ CheckEquals(1,localObj.size());
|
|
|
+ CheckSame(stg0,localObj.getItem(0));
|
|
|
+
|
|
|
+ stg1 := TValueSetting.Create(True,False,intVal,prp,0);
|
|
|
+ localObj.insert(0,stg1);
|
|
|
+ CheckEquals(2,localObj.size());
|
|
|
+ CheckSame(stg0,localObj.getItem(1));
|
|
|
+ CheckSame(stg1,localObj.getItem(0));
|
|
|
+
|
|
|
+ stg2 := TValueSetting.Create(True,False,intVal,prp,0);
|
|
|
+ localObj.insert(1,stg2);
|
|
|
+ CheckEquals(3,localObj.size());
|
|
|
+ CheckSame(stg0,localObj.getItem(2));
|
|
|
+ CheckSame(stg1,localObj.getItem(0));
|
|
|
+ CheckSame(stg2,localObj.getItem(1));
|
|
|
+
|
|
|
+ stg3 := TValueSetting.Create(True,False,intVal,prp,0);
|
|
|
+ localObj.insert((localObj.size() - 1),stg3);
|
|
|
+ CheckEquals(4,localObj.size());
|
|
|
+ CheckSame(stg0,localObj.getItem(3));
|
|
|
+ CheckSame(stg1,localObj.getItem(0));
|
|
|
+ CheckSame(stg2,localObj.getItem(1));
|
|
|
+ CheckSame(stg3,localObj.getItem(2));
|
|
|
+
|
|
|
+ localObj.remove(0);
|
|
|
+ CheckSame(stg0,localObj.getItem(2));
|
|
|
+ CheckSame(stg2,localObj.getItem(0));
|
|
|
+ CheckSame(stg3,localObj.getItem(1));
|
|
|
+
|
|
|
+ localObj.remove(2);
|
|
|
+ CheckSame(stg2,localObj.getItem(0));
|
|
|
+ CheckSame(stg3,localObj.getItem(1));
|
|
|
+
|
|
|
+ stg0 := TValueSetting.Create(True,False,intVal,prp,0);
|
|
|
+ localObj.append(stg0);
|
|
|
+ CheckSame(stg2,localObj.getItem(0));
|
|
|
+ CheckSame(stg3,localObj.getItem(1));
|
|
|
+ CheckSame(stg0,localObj.getItem(2));
|
|
|
+
|
|
|
+ localObj.remove(1);
|
|
|
+ CheckSame(stg2,localObj.getItem(0));
|
|
|
+ CheckSame(stg0,localObj.getItem(1));
|
|
|
+
|
|
|
+ localObj.remove(1);
|
|
|
+ localObj.remove(0);
|
|
|
+ ok := False;
|
|
|
+ try
|
|
|
+ localObj.getItem(0);
|
|
|
+ except
|
|
|
+ on e : ESDOIndexOutOfRangeException do
|
|
|
+ ok := True;
|
|
|
+ end;
|
|
|
+ CheckEquals(True,ok,'getItem(0,nil)');
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOSettingList_Test.insert();
|
|
|
+var
|
|
|
+ ok : Boolean;
|
|
|
+ intVal : TSDOInteger;
|
|
|
+ fact : ISDODataFactory;
|
|
|
+ objectAType : ISDOType;
|
|
|
+ stg0, stg1, stg2, stg3 : TValueSetting;
|
|
|
+ localObj : ISDOSettingList;
|
|
|
+ prp : ISDOProperty;
|
|
|
+begin
|
|
|
+ intVal := 1210;
|
|
|
+ fact := CreateFactory();
|
|
|
+ objectAType := fact.getType(s_uri,s_type_object_A);
|
|
|
+ prp := objectAType.getProperty(s_integer_prop) as ISDOProperty;
|
|
|
+
|
|
|
+ localObj := TSDOSettingList.Create();
|
|
|
+ ok := False;
|
|
|
+ try
|
|
|
+ localObj.insert(0,nil);
|
|
|
+ except
|
|
|
+ on e : ESDOIllegalArgumentException do
|
|
|
+ ok := True;
|
|
|
+ end;
|
|
|
+ CheckEquals(True,ok,'insert(0,nil)');
|
|
|
+
|
|
|
+ stg0 := TValueSetting.Create(True,False,intVal,prp,0);
|
|
|
+ localObj.insert(0,stg0);
|
|
|
+ CheckEquals(1,localObj.size());
|
|
|
+ CheckSame(stg0,localObj.getItem(0));
|
|
|
+ localObj.insert(0,stg0);
|
|
|
+ CheckEquals(1,localObj.size(),'inserted twice');
|
|
|
+ CheckSame(stg0,localObj.getItem(0),'inserted twice');
|
|
|
+
|
|
|
+ stg1 := TValueSetting.Create(True,False,intVal,prp,0);
|
|
|
+ localObj.insert(0,stg1);
|
|
|
+ CheckEquals(2,localObj.size());
|
|
|
+ CheckSame(stg0,localObj.getItem(1));
|
|
|
+ CheckSame(stg1,localObj.getItem(0));
|
|
|
+
|
|
|
+ stg2 := TValueSetting.Create(True,False,intVal,prp,0);
|
|
|
+ localObj.insert(1,stg2);
|
|
|
+ CheckEquals(3,localObj.size());
|
|
|
+ CheckSame(stg0,localObj.getItem(2));
|
|
|
+ CheckSame(stg1,localObj.getItem(0));
|
|
|
+ CheckSame(stg2,localObj.getItem(1));
|
|
|
+ localObj.insert(1,stg2);
|
|
|
+ CheckEquals(3,localObj.size(),'inserted twice');
|
|
|
+ CheckSame(stg0,localObj.getItem(2),'inserted twice');
|
|
|
+ CheckSame(stg1,localObj.getItem(0),'inserted twice');
|
|
|
+ CheckSame(stg2,localObj.getItem(1),'inserted twice');
|
|
|
+
|
|
|
+ stg3 := TValueSetting.Create(True,False,intVal,prp,0);
|
|
|
+ localObj.insert((localObj.size() - 1),stg3);
|
|
|
+ CheckEquals(4,localObj.size());
|
|
|
+ CheckSame(stg0,localObj.getItem(3));
|
|
|
+ CheckSame(stg1,localObj.getItem(0));
|
|
|
+ CheckSame(stg2,localObj.getItem(1));
|
|
|
+ CheckSame(stg3,localObj.getItem(2));
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOSettingList_Test.remove();
|
|
|
+var
|
|
|
+ ok : Boolean;
|
|
|
+ intVal : TSDOInteger;
|
|
|
+ fact : ISDODataFactory;
|
|
|
+ objectAType : ISDOType;
|
|
|
+ stg0, stg1 : TValueSetting;
|
|
|
+ localObj : ISDOSettingList;
|
|
|
+ prp : ISDOProperty;
|
|
|
+begin
|
|
|
+ intVal := 1210;
|
|
|
+ fact := CreateFactory();
|
|
|
+ objectAType := fact.getType(s_uri,s_type_object_A);
|
|
|
+ prp := objectAType.getProperty(s_integer_prop) as ISDOProperty;
|
|
|
+
|
|
|
+ localObj := TSDOSettingList.Create();
|
|
|
+ ok := False;
|
|
|
+ try
|
|
|
+ localObj.remove(0);
|
|
|
+ except
|
|
|
+ on e : ESDOIndexOutOfRangeException do
|
|
|
+ ok := True;
|
|
|
+ end;
|
|
|
+ CheckEquals(True,ok,'remove(0,nil)');
|
|
|
+
|
|
|
+ stg0 := TValueSetting.Create(True,False,intVal,prp,0);
|
|
|
+ localObj.append(stg0);
|
|
|
+ ok := False;
|
|
|
+ try
|
|
|
+ localObj.remove(1);
|
|
|
+ except
|
|
|
+ on e : ESDOIndexOutOfRangeException do
|
|
|
+ ok := True;
|
|
|
+ end;
|
|
|
+ CheckEquals(True,ok,'remove(1,nil)');
|
|
|
+
|
|
|
+ localObj.remove(0);
|
|
|
+ CheckEquals(0,localObj.size());
|
|
|
+ ok := False;
|
|
|
+ try
|
|
|
+ localObj.remove(0);
|
|
|
+ except
|
|
|
+ on e : ESDOIndexOutOfRangeException do
|
|
|
+ ok := True;
|
|
|
+ end;
|
|
|
+ CheckEquals(True,ok,'remove(0,nil)');
|
|
|
+
|
|
|
+
|
|
|
+ stg0 := TValueSetting.Create(True,False,intVal,prp,0);
|
|
|
+ localObj.append(stg0);
|
|
|
+ stg1 := TValueSetting.Create(True,False,intVal,prp,0);
|
|
|
+ localObj.append(stg1);
|
|
|
+ ok := False;
|
|
|
+ try
|
|
|
+ localObj.remove(2);
|
|
|
+ except
|
|
|
+ on e : ESDOIndexOutOfRangeException do
|
|
|
+ ok := True;
|
|
|
+ end;
|
|
|
+ CheckEquals(True,ok,'remove(2,nil)');
|
|
|
+
|
|
|
+ localObj.remove(1);
|
|
|
+ CheckSame(stg0,localObj.getItem(0));
|
|
|
+ stg1 := TValueSetting.Create(True,False,intVal,prp,0);
|
|
|
+ localObj.append(stg1);
|
|
|
+ CheckSame(stg0,localObj.getItem(0));
|
|
|
+ CheckSame(stg1,localObj.getItem(1));
|
|
|
+ localObj.remove(0);
|
|
|
+ localObj.remove(0);
|
|
|
+ CheckEquals(0,localObj.size());
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOSettingList_Test.size();
|
|
|
+var
|
|
|
+ intVal : TSDOInteger;
|
|
|
+ fact : ISDODataFactory;
|
|
|
+ objectAType : ISDOType;
|
|
|
+ stg : TValueSetting;
|
|
|
+ localObj : ISDOSettingList;
|
|
|
+ prp : ISDOProperty;
|
|
|
+begin
|
|
|
+ intVal := 1210;
|
|
|
+ fact := CreateFactory();
|
|
|
+ objectAType := fact.getType(s_uri,s_type_object_A);
|
|
|
+ prp := objectAType.getProperty(s_integer_prop) as ISDOProperty;
|
|
|
+
|
|
|
+ localObj := TSDOSettingList.Create();
|
|
|
+ CheckEquals(0,localObj.size());
|
|
|
+ CheckEquals(0,localObj.size());
|
|
|
+
|
|
|
+ stg := TValueSetting.Create(True,False,intVal,prp,0);
|
|
|
+ localObj.append(stg);
|
|
|
+ CheckEquals(1,localObj.size());
|
|
|
+ stg := TValueSetting.Create(True,False,intVal,prp,0);
|
|
|
+ localObj.append(stg);
|
|
|
+ CheckEquals(2,localObj.size());
|
|
|
+ localObj.remove(1);
|
|
|
+ CheckEquals(1,localObj.size());
|
|
|
+ localObj.remove(0);
|
|
|
+ CheckEquals(0,localObj.size());
|
|
|
+
|
|
|
+ stg := TValueSetting.Create(True,False,intVal,prp,0);
|
|
|
+ localObj.insert(0,stg);
|
|
|
+ CheckEquals(1,localObj.size());
|
|
|
+
|
|
|
+ stg := TValueSetting.Create(True,False,intVal,prp,0);
|
|
|
+ localObj.insert(0,stg);
|
|
|
+ CheckEquals(2,localObj.size());
|
|
|
+end;
|
|
|
+
|
|
|
+{ TDicho_Test }
|
|
|
+(*
|
|
|
+procedure TDicho_Test.build();
|
|
|
+var
|
|
|
+ ls : TObjectList;
|
|
|
+ NBR, i, j, k : PtrInt;
|
|
|
+ msg, order : string;
|
|
|
+begin
|
|
|
+ j := 0;
|
|
|
+ Randomize();
|
|
|
+ NBR := RandomRange(100,500);
|
|
|
+ ls := TObjectList.Create(False);
|
|
|
+ try
|
|
|
+ order := '';
|
|
|
+ for i := 1 to NBR do begin
|
|
|
+ while True do begin
|
|
|
+ j := RandomRange(0,1000);
|
|
|
+ if ( ls.IndexOf(TObject(j)) = -1 ) then
|
|
|
+ Break;
|
|
|
+ end;
|
|
|
+ CheckEquals(False,findDicho(ls,j,k,@CastExtractor));
|
|
|
+ ls.Insert(k,TObject(j));
|
|
|
+ order := order + ';' + IntToStr(j);
|
|
|
+ end;
|
|
|
+ for i := 1 to Pred(NBR) do begin
|
|
|
+ if ( PtrInt(ls[i-1]) > PtrInt(ls[i]) ) then begin
|
|
|
+ msg := '';
|
|
|
+ for j := 0 to Pred(NBR) do begin
|
|
|
+ if (j > 0) then
|
|
|
+ msg := msg + '; ';
|
|
|
+ msg := Format('%sls[%d] = %d',[msg,j,PtrInt(ls[j])]);
|
|
|
+ end;
|
|
|
+ Check(False,msg + ' ; Order = ' + order);
|
|
|
+ end;
|
|
|
+ {Check(
|
|
|
+ PtrInt(ls[i-1]) < PtrInt(ls[i]),
|
|
|
+ Format('i = %d; ls[i] = %d; ls[i-1] = %d',[i, PtrInt(ls[i]), PtrInt(ls[i-1])])
|
|
|
+ );}
|
|
|
+ end;
|
|
|
+ finally
|
|
|
+ ls.Free();
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TDicho_Test.find();
|
|
|
+var
|
|
|
+ offset, value, index, lngth, i : PtrInt;
|
|
|
+ passed : Boolean;
|
|
|
+ v : TObjectList;
|
|
|
+begin
|
|
|
+ v := TObjectList.Create(False);
|
|
|
+ try
|
|
|
+ for offset := 1 to 5 do begin
|
|
|
+ for lngth := 1 to 2049 do begin
|
|
|
+ v.Clear();
|
|
|
+ v.Capacity := lngth;
|
|
|
+ for i := 0 to Pred(lngth) do begin
|
|
|
+ v.Add(TObject(i*offset));
|
|
|
+ end;
|
|
|
+ for value := 0 to Pred(lngth) do begin
|
|
|
+ passed := findDicho(v,value*offset,index,@CastExtractor);
|
|
|
+ passed := passed and ( index = value );
|
|
|
+ CheckEquals(True,passed);
|
|
|
+ end;
|
|
|
+ end;
|
|
|
+ end;
|
|
|
+ finally
|
|
|
+ v.Free();
|
|
|
+ end;
|
|
|
+end; *)
|
|
|
+
|
|
|
+{ TSDOChangedDataObjectList_Test }
|
|
|
+
|
|
|
+procedure TSDOChangedDataObjectList_Test.append();
|
|
|
+var
|
|
|
+ localObj : ISDOChangedDataObjectListEx;
|
|
|
+ fact : ISDODataFactory;
|
|
|
+ i, j, k : PtrInt;
|
|
|
+ il(*, ilSorted*) : IInterfaceList;
|
|
|
+ obj : ISDODataObject;
|
|
|
+ ct : TChangeType;
|
|
|
+ ok : Boolean;
|
|
|
+ NBR_INST : PtrInt;
|
|
|
+begin
|
|
|
+ k := 0;
|
|
|
+ Randomize();
|
|
|
+ NBR_INST := RandomRange(100,1000);
|
|
|
+ fact := CreateFactory();
|
|
|
+ il := TInterfaceList.Create();
|
|
|
+
|
|
|
+ localObj := CreateObject();
|
|
|
+
|
|
|
+ for i := 0 to Pred(NBR_INST) do begin
|
|
|
+ ct := TChangeType( ( i mod 3 ) + 1 );
|
|
|
+ obj := fact.createNew(s_uri,s_type_object_A);
|
|
|
+ localObj.append(obj,ct);
|
|
|
+ il.Add(obj);
|
|
|
+ end;
|
|
|
+ {// The list is no longer sorted!
|
|
|
+ ilSorted := SortInterfaceList(il);
|
|
|
+ for i := 0 to Pred(NBR_INST) do begin
|
|
|
+ CheckEquals(PtrInt(ilSorted[i]),PtrInt(localObj.getDataObject(Pred(NBR_INST) - i)));
|
|
|
+ end; }
|
|
|
+ for i := 0 to Pred(NBR_INST) do begin
|
|
|
+ ok := False;
|
|
|
+ for j := 0 to Pred(NBR_INST) do begin
|
|
|
+ if ( il[i] = localObj.getDataObject(j) ) then begin
|
|
|
+ k := j;
|
|
|
+ ok := True;
|
|
|
+ Break;
|
|
|
+ end;
|
|
|
+ end;
|
|
|
+ CheckEquals(True, ok, 'getDataObject');
|
|
|
+ CheckEquals(PtrInt(TChangeType( ( i mod 3 ) + 1 )), PtrInt(Ord(localObj.getType(k))), 'getType()');
|
|
|
+ end;
|
|
|
+
|
|
|
+ for i := 0 to Pred(NBR_INST) do begin
|
|
|
+ obj := localObj.getDataObject(i);
|
|
|
+ ok := False;
|
|
|
+ try
|
|
|
+ localObj.append(obj,ctCreate);
|
|
|
+ except
|
|
|
+ on e : ESDODuplicatedItemException do
|
|
|
+ ok := True;
|
|
|
+ end;
|
|
|
+ CheckEquals(True,ok,Format('Duplicated item, i = %d',[i]));
|
|
|
+
|
|
|
+ ok := False;
|
|
|
+ try
|
|
|
+ localObj.append(obj,ctChange);
|
|
|
+ except
|
|
|
+ on e : ESDODuplicatedItemException do
|
|
|
+ ok := True;
|
|
|
+ end;
|
|
|
+ CheckEquals(True,ok,Format('Duplicated item, i = %d',[i]));
|
|
|
+
|
|
|
+ ok := False;
|
|
|
+ try
|
|
|
+ localObj.append(obj,ctDelete);
|
|
|
+ except
|
|
|
+ on e : ESDODuplicatedItemException do
|
|
|
+ ok := True;
|
|
|
+ end;
|
|
|
+ CheckEquals(True,ok,Format('Duplicated item, i = %d',[i]));
|
|
|
+ end;
|
|
|
+
|
|
|
+ { The list is no longer sorted!
|
|
|
+ for i := 0 to Pred(NBR_INST - 1) do begin
|
|
|
+ obj := localObj.getDataObject(i);
|
|
|
+ CheckEquals(True,PtrInt(obj) < PtrInt(localObj.getDataObject(i+1)));
|
|
|
+ end;
|
|
|
+ for i := ( 0 + 1 ) to Pred(NBR_INST) do begin
|
|
|
+ obj := localObj.getDataObject(i);
|
|
|
+ CheckEquals(True,PtrInt(obj) > PtrInt(localObj.getDataObject(i-1)));
|
|
|
+ end;}
|
|
|
+end;
|
|
|
+
|
|
|
+class function TSDOChangedDataObjectList_Test.CreateFactory() : ISDODataFactory;
|
|
|
+var
|
|
|
+ locFactory : ISDODataFactory;
|
|
|
+
|
|
|
+ procedure Add_ObjectA(const AUri : string);
|
|
|
+ var
|
|
|
+ locObj : ISDOType;
|
|
|
+ begin
|
|
|
+ locFactory.AddType(AUri,s_type_object_A,[]);
|
|
|
+ locObj := locFactory.getType(AUri,s_type_object_A);
|
|
|
+ locFactory.addProperty(locObj,s_bool_prop,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType], []);
|
|
|
+ locFactory.addProperty(locObj,s_bool_propList,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType],[pfIsMany]);
|
|
|
+ locFactory.addProperty(locObj,s_integer_prop,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType], []);
|
|
|
+ locFactory.addProperty(locObj,s_integer_propList,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType],[pfIsMany]);
|
|
|
+ locFactory.addProperty(locObj,s_string_prop,sdo_namespace,SDOTypeDefaultTypeNames[StringType], []);
|
|
|
+ locFactory.addProperty(locObj,s_string_propList,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsMany]);
|
|
|
+ end;
|
|
|
+begin
|
|
|
+ locFactory := TSDODataFactory.Create() as ISDODataFactory;
|
|
|
+ Add_ObjectA(s_uri);
|
|
|
+
|
|
|
+ Result := locFactory;
|
|
|
+end;
|
|
|
+
|
|
|
+class function TSDOChangedDataObjectList_Test.CreateObject() : ISDOChangedDataObjectListEx;
|
|
|
+begin
|
|
|
+ Result := TSDOChangedDataObjectList.Create();
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangedDataObjectList_Test.find();
|
|
|
+var
|
|
|
+ localObj : ISDOChangedDataObjectListEx;
|
|
|
+ fact : ISDODataFactory;
|
|
|
+ i, j : PtrInt;
|
|
|
+ il: IInterfaceList;
|
|
|
+ obj : ISDODataObject;
|
|
|
+ NBR_INST : PtrInt;
|
|
|
+begin
|
|
|
+ Randomize();
|
|
|
+ NBR_INST := RandomRange(100,1000);
|
|
|
+ fact := CreateFactory();
|
|
|
+ il := TInterfaceList.Create();
|
|
|
+
|
|
|
+ localObj := CreateObject();
|
|
|
+
|
|
|
+ for i := 0 to Pred(NBR_INST) do begin
|
|
|
+ obj := fact.createNew(s_uri,s_type_object_A);
|
|
|
+ localObj.append(obj,TChangeType( ( i mod 3 ) + 1 ));
|
|
|
+ il.Add(obj);
|
|
|
+ end;
|
|
|
+
|
|
|
+ for i := 0 to Pred(NBR_INST) do begin
|
|
|
+ CheckEquals(True,localObj.find(il[i] as ISDODataObject,j));
|
|
|
+ Check(j >= 0);
|
|
|
+ Check(j < NBR_INST);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangedDataObjectList_Test.size();
|
|
|
+var
|
|
|
+ localObj : ISDOChangedDataObjectListEx;
|
|
|
+ fact : ISDODataFactory;
|
|
|
+ il : IInterfaceList;
|
|
|
+begin
|
|
|
+ fact := CreateFactory();
|
|
|
+ localObj := CreateObject();
|
|
|
+
|
|
|
+ CheckEquals(0,localObj.size());
|
|
|
+ CheckEquals(0,localObj.size());
|
|
|
+
|
|
|
+ il := TInterfaceList.Create();
|
|
|
+ il.Add(fact.createNew(s_uri,s_type_object_A));
|
|
|
+ localObj.append(il[il.Count - 1] as ISDODataObject,ctDelete);
|
|
|
+ CheckEquals(1,localObj.size());
|
|
|
+ il.Add(fact.createNew(s_uri,s_type_object_A));
|
|
|
+ localObj.append(il[il.Count - 1] as ISDODataObject,ctCreate);
|
|
|
+ CheckEquals(2,localObj.size());
|
|
|
+ il.Add(fact.createNew(s_uri,s_type_object_A));
|
|
|
+ localObj.append(il[il.Count - 1] as ISDODataObject,ctChange);
|
|
|
+ CheckEquals(3,localObj.size());
|
|
|
+end;
|
|
|
+
|
|
|
+{ TChangeRecorder_Test }
|
|
|
+
|
|
|
+procedure TChangeRecorder_Test.bool_change();
|
|
|
+const
|
|
|
+ LOCAL_PROP = s_bool_prop;
|
|
|
+var
|
|
|
+ locObj : ISDODataObject;
|
|
|
+begin
|
|
|
+ locObj := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+
|
|
|
+ record_bool(locObj,LOCAL_PROP);
|
|
|
+
|
|
|
+ InitRecorder();
|
|
|
+ locObj.setBoolean(LOCAL_PROP,False);
|
|
|
+ record_bool(locObj,LOCAL_PROP);
|
|
|
+
|
|
|
+ InitRecorder();
|
|
|
+ locObj.setBoolean(LOCAL_PROP,True);
|
|
|
+ record_bool(locObj,LOCAL_PROP);
|
|
|
+
|
|
|
+ InitRecorder();
|
|
|
+ locObj.setNull(LOCAL_PROP);
|
|
|
+ record_bool(locObj,LOCAL_PROP);
|
|
|
+
|
|
|
+ InitRecorder();
|
|
|
+ locObj.setBoolean(LOCAL_PROP,False);
|
|
|
+ record_bool(locObj,LOCAL_PROP);
|
|
|
+
|
|
|
+ InitRecorder();
|
|
|
+ locObj.unset(LOCAL_PROP);
|
|
|
+ record_bool(locObj,LOCAL_PROP);
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TChangeRecorder_Test.byte_change();
|
|
|
+const
|
|
|
+ LOCAL_PROP = s_byte_prop;
|
|
|
+var
|
|
|
+ locObj : ISDODataObject;
|
|
|
+begin
|
|
|
+ locObj := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+
|
|
|
+ record_byte(locObj,LOCAL_PROP);
|
|
|
+
|
|
|
+ InitRecorder();
|
|
|
+ locObj.setByte(LOCAL_PROP,123);
|
|
|
+ record_byte(locObj,LOCAL_PROP);
|
|
|
+
|
|
|
+ InitRecorder();
|
|
|
+ locObj.setByte(LOCAL_PROP,76);
|
|
|
+ record_byte(locObj,LOCAL_PROP);
|
|
|
+
|
|
|
+ InitRecorder();
|
|
|
+ locObj.setNull(LOCAL_PROP);
|
|
|
+ record_byte(locObj,LOCAL_PROP);
|
|
|
+
|
|
|
+ InitRecorder();
|
|
|
+ locObj.setByte(LOCAL_PROP,123);
|
|
|
+ record_byte(locObj,LOCAL_PROP);
|
|
|
+
|
|
|
+ InitRecorder();
|
|
|
+ locObj.unset(LOCAL_PROP);
|
|
|
+ record_byte(locObj,LOCAL_PROP);
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TChangeRecorder_Test.CheckEquals(expected, actual: TSDODate;
|
|
|
+ msg: string; const AStrict: Boolean);
|
|
|
+var
|
|
|
+ e, a : TDateTime;
|
|
|
+ e_y, e_m, e_d, e_h, e_mn, e_ss, e_ms : Word;
|
|
|
+ a_y, a_m, a_d, a_h, a_mn, a_ss, a_ms : Word;
|
|
|
+begin
|
|
|
+ if AStrict then begin
|
|
|
+ Check(CompareMem(@expected, @actual, SizeOf(TSDODate)), msg);
|
|
|
+ end else begin
|
|
|
+ e := NormalizeToUTC(expected);
|
|
|
+ a := NormalizeToUTC(actual);
|
|
|
+ DecodeDateTime(e, e_y, e_m, e_d, e_h, e_mn, e_ss, e_ms);
|
|
|
+ DecodeDateTime(a, a_y, a_m, a_d, a_h, a_mn, a_ss, a_ms);
|
|
|
+ CheckEquals(e_y,a_y,msg);
|
|
|
+ CheckEquals(e_m,a_m,msg);
|
|
|
+ CheckEquals(e_d,a_d,msg);
|
|
|
+ CheckEquals(e_h,a_h,msg);
|
|
|
+ CheckEquals(e_mn,a_mn,msg);
|
|
|
+ CheckEquals(e_ss,a_ss,msg);
|
|
|
+ CheckEquals(e_ms,a_ms,msg);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+function TChangeRecorder_Test.CreateRecorder() : TChangeRecorder;
|
|
|
+var
|
|
|
+ ls : ISDOChangedDataObjectList;
|
|
|
+begin
|
|
|
+ ls := TSDOChangedDataObjectList.Create();
|
|
|
+ FChangeSummary := TSDOChangeSummary.Create(ls);
|
|
|
+ Result := TChangeRecorder.Create(ls, FChangeSummary);
|
|
|
+end;
|
|
|
+
|
|
|
+function IndexOf(const AObject : ISDODataObject; const AList : ISDOChangedDataObjectList) : PtrInt;
|
|
|
+var
|
|
|
+ i : PtrInt;
|
|
|
+begin
|
|
|
+ Result := -1;
|
|
|
+ for i := 0 to Pred(AList.size()) do begin
|
|
|
+ if ( AList.getDataObject(i) = AObject ) then begin
|
|
|
+ Result := i;
|
|
|
+ Break;
|
|
|
+ end;
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+class function TChangeRecorder_Test.Create_Factory() : ISDODataFactory;
|
|
|
+var
|
|
|
+ locFactory : ISDODataFactory;
|
|
|
+
|
|
|
+ procedure Add_ObjectA(const AUri : string);
|
|
|
+ var
|
|
|
+ locObj : ISDOType;
|
|
|
+ begin
|
|
|
+ locFactory.AddType(AUri,s_type_object_A,[]);
|
|
|
+ locFactory.AddType(AUri,s_type_object_B,[]);
|
|
|
+ locFactory.AddType(AUri,s_type_object_C,[]);
|
|
|
+ locObj := locFactory.getType(AUri,s_type_object_A);
|
|
|
+ locFactory.addProperty(locObj,s_bool_prop,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType], []);
|
|
|
+ locFactory.addProperty(locObj,s_bool_propList,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType],[pfIsMany]);
|
|
|
+ locFactory.addProperty(locObj,s_byte_prop,sdo_namespace,SDOTypeDefaultTypeNames[ByteType], []);
|
|
|
+ locFactory.addProperty(locObj,s_byte_propList,sdo_namespace,SDOTypeDefaultTypeNames[ByteType],[pfIsMany]);
|
|
|
+{$IFDEF HAS_SDO_BYTES}
|
|
|
+ locFactory.addProperty(locObj,s_bytes_prop,sdo_namespace,SDOTypeDefaultTypeNames[BytesType], []);
|
|
|
+ locFactory.addProperty(locObj,s_bytes_propList,sdo_namespace,SDOTypeDefaultTypeNames[BytesType],[pfIsMany]);
|
|
|
+{$ENDIF HAS_SDO_BYTES}
|
|
|
+{$IFDEF HAS_SDO_CHAR}
|
|
|
+ locFactory.addProperty(locObj,s_char_prop,sdo_namespace,SDOTypeDefaultTypeNames[CharacterType], []);
|
|
|
+ locFactory.addProperty(locObj,s_char_propList,sdo_namespace,SDOTypeDefaultTypeNames[CharacterType],[pfIsMany]);
|
|
|
+{$ENDIF HAS_SDO_CHAR}
|
|
|
+{$IFDEF HAS_SDO_CURRENCY}
|
|
|
+ locFactory.addProperty(locObj,s_currency_prop,sdo_namespace,SDOTypeDefaultTypeNames[CurrencyType], []);
|
|
|
+ locFactory.addProperty(locObj,s_currency_propList,sdo_namespace,SDOTypeDefaultTypeNames[CurrencyType],[pfIsMany]);
|
|
|
+{$ENDIF HAS_SDO_CURRENCY}
|
|
|
+ locFactory.addProperty(locObj,s_date_prop,sdo_namespace,SDOTypeDefaultTypeNames[DateTimeType], []);
|
|
|
+ locFactory.addProperty(locObj,s_date_propList,sdo_namespace,SDOTypeDefaultTypeNames[DateTimeType],[pfIsMany]);
|
|
|
+{$IFDEF HAS_SDO_DOUBLE}
|
|
|
+ locFactory.addProperty(locObj,s_double_prop,sdo_namespace,SDOTypeDefaultTypeNames[DoubleType], []);
|
|
|
+ locFactory.addProperty(locObj,s_double_propList,sdo_namespace,SDOTypeDefaultTypeNames[DoubleType],[pfIsMany]);
|
|
|
+{$ENDIF HAS_SDO_DOUBLE}
|
|
|
+{$IFDEF HAS_SDO_FLOAT}
|
|
|
+ locFactory.addProperty(locObj,s_float_prop,sdo_namespace,SDOTypeDefaultTypeNames[FloatType], []);
|
|
|
+ locFactory.addProperty(locObj,s_float_propList,sdo_namespace,SDOTypeDefaultTypeNames[FloatType],[pfIsMany]);
|
|
|
+{$ENDIF HAS_SDO_FLOAT}
|
|
|
+ locFactory.addProperty(locObj,s_integer_prop,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType], []);
|
|
|
+ locFactory.addProperty(locObj,s_integer_propList,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType],[pfIsMany]);
|
|
|
+{$IFDEF HAS_SDO_LONG}
|
|
|
+ locFactory.addProperty(locObj,s_long_prop,sdo_namespace,SDOTypeDefaultTypeNames[LongType], []);
|
|
|
+ locFactory.addProperty(locObj,s_long_propList,sdo_namespace,SDOTypeDefaultTypeNames[LongType],[pfIsMany]);
|
|
|
+{$ENDIF HAS_SDO_LONG}
|
|
|
+{$IFDEF HAS_SDO_SHORT}
|
|
|
+ locFactory.addProperty(locObj,s_short_prop,sdo_namespace,SDOTypeDefaultTypeNames[ShortType], []);
|
|
|
+ locFactory.addProperty(locObj,s_short_propList,sdo_namespace,SDOTypeDefaultTypeNames[ShortType],[pfIsMany]);
|
|
|
+{$ENDIF HAS_SDO_SHORT}
|
|
|
+ locFactory.addProperty(locObj,s_string_prop,sdo_namespace,SDOTypeDefaultTypeNames[StringType], []);
|
|
|
+ locFactory.addProperty(locObj,s_string_propList,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsMany]);
|
|
|
+ locFactory.addProperty(locObj,s_object_prop,AUri,s_type_object_B,[pfIsContainment]);
|
|
|
+ locFactory.addProperty(locObj,s_object_ref_prop,AUri,s_type_object_C,[]);
|
|
|
+ end;
|
|
|
+begin
|
|
|
+ locFactory := TSDODataFactory.Create() as ISDODataFactory;
|
|
|
+ Add_ObjectA(s_uri);
|
|
|
+
|
|
|
+ Result := locFactory;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TChangeRecorder_Test.date_change();
|
|
|
+const
|
|
|
+ LOCAL_PROP = s_date_prop;
|
|
|
+ VAL_1 : TSDODate = ( Date : 39000; HourOffset : 1; MinuteOffset : 2; );
|
|
|
+ VAL_2 : TSDODate = ( Date : 45678; HourOffset : 9; MinuteOffset : 10; );
|
|
|
+var
|
|
|
+ locObj : ISDODataObject;
|
|
|
+begin
|
|
|
+ locObj := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+
|
|
|
+ record_date(locObj,LOCAL_PROP);
|
|
|
+
|
|
|
+ InitRecorder();
|
|
|
+ locObj.setDate(LOCAL_PROP,VAL_1);
|
|
|
+ record_date(locObj,LOCAL_PROP);
|
|
|
+
|
|
|
+ InitRecorder();
|
|
|
+ locObj.setDate(LOCAL_PROP,VAL_2);
|
|
|
+ record_date(locObj,LOCAL_PROP);
|
|
|
+
|
|
|
+ InitRecorder();
|
|
|
+ locObj.setNull(LOCAL_PROP);
|
|
|
+ record_date(locObj,LOCAL_PROP);
|
|
|
+
|
|
|
+ InitRecorder();
|
|
|
+ locObj.setDate(LOCAL_PROP,VAL_1);
|
|
|
+ record_date(locObj,LOCAL_PROP);
|
|
|
+
|
|
|
+ InitRecorder();
|
|
|
+ locObj.unset(LOCAL_PROP);
|
|
|
+ record_date(locObj,LOCAL_PROP);
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TChangeRecorder_Test.InitRecorder();
|
|
|
+begin
|
|
|
+ FreeAndNil(FRecorder);
|
|
|
+ FChangeSummary := nil;
|
|
|
+ FRecorder := CreateRecorder();
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TChangeRecorder_Test.int_change();
|
|
|
+const
|
|
|
+ LOCAL_PROP = s_integer_prop;
|
|
|
+var
|
|
|
+ locObj : ISDODataObject;
|
|
|
+begin
|
|
|
+ locObj := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+
|
|
|
+ record_int(locObj,LOCAL_PROP);
|
|
|
+
|
|
|
+ InitRecorder();
|
|
|
+ locObj.setInteger(LOCAL_PROP,1210);
|
|
|
+ record_int(locObj,LOCAL_PROP);
|
|
|
+
|
|
|
+ InitRecorder();
|
|
|
+ locObj.setInteger(LOCAL_PROP,-76);
|
|
|
+ record_int(locObj,LOCAL_PROP);
|
|
|
+
|
|
|
+ InitRecorder();
|
|
|
+ locObj.setNull(LOCAL_PROP);
|
|
|
+ record_int(locObj,LOCAL_PROP);
|
|
|
+
|
|
|
+ InitRecorder();
|
|
|
+ locObj.setInteger(LOCAL_PROP,1210);
|
|
|
+ record_int(locObj,LOCAL_PROP);
|
|
|
+
|
|
|
+ InitRecorder();
|
|
|
+ locObj.unset(LOCAL_PROP);
|
|
|
+ record_int(locObj,LOCAL_PROP);
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TChangeRecorder_Test.multi_call_boolean();
|
|
|
+var
|
|
|
+ locObj : ISDODataObject;
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locChangeInfo : TDataObjectChangeInfo;
|
|
|
+ i : PtrInt;
|
|
|
+ locListX : ISDOChangedDataObjectListEx;
|
|
|
+begin
|
|
|
+ locObj := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ locProp := locObj.getProperty(s_bool_prop);
|
|
|
+
|
|
|
+ FRecorder.recordChange(locObj,locProp);
|
|
|
+ i := IndexOf(locObj,FRecorder.Store);
|
|
|
+ Check( ( i >= 0 ) );
|
|
|
+ locListX := FRecorder.Store as ISDOChangedDataObjectListEx;
|
|
|
+ locChangeInfo := locListX.getInfo(i);
|
|
|
+ CheckEquals(1,locChangeInfo.ChangeList.size());
|
|
|
+
|
|
|
+ FRecorder.recordChange(locObj,locProp);
|
|
|
+ locObj.setBoolean(locProp,False);
|
|
|
+ i := IndexOf(locObj,FRecorder.Store);
|
|
|
+ Check( ( i >= 0 ) );
|
|
|
+ locListX := FRecorder.Store as ISDOChangedDataObjectListEx;
|
|
|
+ locChangeInfo := locListX.getInfo(i);
|
|
|
+ CheckEquals(1,locChangeInfo.ChangeList.size());
|
|
|
+
|
|
|
+ FRecorder.recordChange(locObj,locProp);
|
|
|
+ FRecorder.recordChange(locObj,locProp);
|
|
|
+ CheckEquals(1,locChangeInfo.ChangeList.size());
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TChangeRecorder_Test.multi_call_byte();
|
|
|
+var
|
|
|
+ locObj : ISDODataObject;
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locChangeInfo : TDataObjectChangeInfo;
|
|
|
+ i : PtrInt;
|
|
|
+ locListX : ISDOChangedDataObjectListEx;
|
|
|
+begin
|
|
|
+ locObj := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ locProp := locObj.getProperty(s_byte_prop);
|
|
|
+
|
|
|
+ FRecorder.recordChange(locObj,locProp);
|
|
|
+ i := IndexOf(locObj,FRecorder.Store);
|
|
|
+ Check( ( i >= 0 ) );
|
|
|
+ locListX := FRecorder.Store as ISDOChangedDataObjectListEx;
|
|
|
+ locChangeInfo := locListX.getInfo(i);
|
|
|
+ CheckEquals(1,locChangeInfo.ChangeList.size());
|
|
|
+
|
|
|
+ FRecorder.recordChange(locObj,locProp);
|
|
|
+ locObj.setByte(locProp,78);
|
|
|
+ i := IndexOf(locObj,FRecorder.Store);
|
|
|
+ Check( ( i >= 0 ) );
|
|
|
+ locListX := FRecorder.Store as ISDOChangedDataObjectListEx;
|
|
|
+ locChangeInfo := locListX.getInfo(i);
|
|
|
+ CheckEquals(1,locChangeInfo.ChangeList.size());
|
|
|
+
|
|
|
+ FRecorder.recordChange(locObj,locProp);
|
|
|
+ FRecorder.recordChange(locObj,locProp);
|
|
|
+ CheckEquals(1,locChangeInfo.ChangeList.size());
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TChangeRecorder_Test.multi_call_date();
|
|
|
+const
|
|
|
+ VAL_1 : TSDODate = ( Date : 39000; HourOffset : 1; MinuteOffset : 2; );
|
|
|
+var
|
|
|
+ locObj : ISDODataObject;
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locChangeInfo : TDataObjectChangeInfo;
|
|
|
+ i : PtrInt;
|
|
|
+ locListX : ISDOChangedDataObjectListEx;
|
|
|
+begin
|
|
|
+ locObj := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ locProp := locObj.getProperty(s_date_prop);
|
|
|
+
|
|
|
+ FRecorder.recordChange(locObj,locProp);
|
|
|
+ i := IndexOf(locObj,FRecorder.Store);
|
|
|
+ Check( ( i >= 0 ) );
|
|
|
+ locListX := FRecorder.Store as ISDOChangedDataObjectListEx;
|
|
|
+ locChangeInfo := locListX.getInfo(i);
|
|
|
+ CheckEquals(1,locChangeInfo.ChangeList.size());
|
|
|
+
|
|
|
+ FRecorder.recordChange(locObj,locProp);
|
|
|
+ locObj.setDate(locProp,VAL_1);
|
|
|
+ i := IndexOf(locObj,FRecorder.Store);
|
|
|
+ Check( ( i >= 0 ) );
|
|
|
+ locListX := FRecorder.Store as ISDOChangedDataObjectListEx;
|
|
|
+ locChangeInfo := locListX.getInfo(i);
|
|
|
+ CheckEquals(1,locChangeInfo.ChangeList.size());
|
|
|
+
|
|
|
+ FRecorder.recordChange(locObj,locProp);
|
|
|
+ FRecorder.recordChange(locObj,locProp);
|
|
|
+ CheckEquals(1,locChangeInfo.ChangeList.size());
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TChangeRecorder_Test.multi_call_int();
|
|
|
+var
|
|
|
+ locObj : ISDODataObject;
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locChangeInfo : TDataObjectChangeInfo;
|
|
|
+ i : PtrInt;
|
|
|
+ locListX : ISDOChangedDataObjectListEx;
|
|
|
+begin
|
|
|
+ locObj := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ locProp := locObj.getProperty(s_integer_prop);
|
|
|
+
|
|
|
+ FRecorder.recordChange(locObj,locProp);
|
|
|
+ i := IndexOf(locObj,FRecorder.Store);
|
|
|
+ Check( ( i >= 0 ) );
|
|
|
+ locListX := FRecorder.Store as ISDOChangedDataObjectListEx;
|
|
|
+ locChangeInfo := locListX.getInfo(i);
|
|
|
+ CheckEquals(1,locChangeInfo.ChangeList.size());
|
|
|
+
|
|
|
+ FRecorder.recordChange(locObj,locProp);
|
|
|
+ locObj.setInteger(locProp,1210);
|
|
|
+ i := IndexOf(locObj,FRecorder.Store);
|
|
|
+ Check( ( i >= 0 ) );
|
|
|
+ locListX := FRecorder.Store as ISDOChangedDataObjectListEx;
|
|
|
+ locChangeInfo := locListX.getInfo(i);
|
|
|
+ CheckEquals(1,locChangeInfo.ChangeList.size());
|
|
|
+
|
|
|
+ FRecorder.recordChange(locObj,locProp);
|
|
|
+ FRecorder.recordChange(locObj,locProp);
|
|
|
+ CheckEquals(1,locChangeInfo.ChangeList.size());
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TChangeRecorder_Test.multi_call_string();
|
|
|
+var
|
|
|
+ locObj : ISDODataObject;
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locChangeInfo : TDataObjectChangeInfo;
|
|
|
+ i : PtrInt;
|
|
|
+ locListX : ISDOChangedDataObjectListEx;
|
|
|
+begin
|
|
|
+ locObj := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ locProp := locObj.getProperty(s_string_prop);
|
|
|
+
|
|
|
+ FRecorder.recordChange(locObj,locProp);
|
|
|
+ i := IndexOf(locObj,FRecorder.Store);
|
|
|
+ Check( ( i >= 0 ) );
|
|
|
+ locListX := FRecorder.Store as ISDOChangedDataObjectListEx;
|
|
|
+ locChangeInfo := locListX.getInfo(i);
|
|
|
+ CheckEquals(1,locChangeInfo.ChangeList.size());
|
|
|
+
|
|
|
+ FRecorder.recordChange(locObj,locProp);
|
|
|
+ locObj.setString(locProp,'qwerty#azerty');
|
|
|
+ i := IndexOf(locObj,FRecorder.Store);
|
|
|
+ Check( ( i >= 0 ) );
|
|
|
+ locListX := FRecorder.Store as ISDOChangedDataObjectListEx;
|
|
|
+ locChangeInfo := locListX.getInfo(i);
|
|
|
+ CheckEquals(1,locChangeInfo.ChangeList.size());
|
|
|
+
|
|
|
+ FRecorder.recordChange(locObj,locProp);
|
|
|
+ FRecorder.recordChange(locObj,locProp);
|
|
|
+ CheckEquals(1,locChangeInfo.ChangeList.size());
|
|
|
+end;
|
|
|
+
|
|
|
+{$IFDEF HAS_SDO_CHAR}
|
|
|
+procedure TChangeRecorder_Test.record_char(
|
|
|
+ const ADataObject: ISDODataObject;
|
|
|
+ const APropName: string
|
|
|
+);
|
|
|
+var
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locValue : TSDOChar;
|
|
|
+ locSetting : TValueSetting;
|
|
|
+ i : PtrInt;
|
|
|
+ locListX : ISDOChangedDataObjectListEx;
|
|
|
+ locChangeInfo : TDataObjectChangeInfo;
|
|
|
+begin
|
|
|
+ locProp := ADataObject.getProperty(APropName);
|
|
|
+ CheckNotEquals(PtrUInt(nil),PtrUInt(locProp),Format('Invalid property : "%s"',[APropName]));
|
|
|
+
|
|
|
+ i := IndexOf(ADataObject,FRecorder.Store);
|
|
|
+ CheckEquals(-1,i);
|
|
|
+
|
|
|
+ locValue := ADataObject.getCharacter(APropName);
|
|
|
+ FRecorder.recordChange(ADataObject,locProp);
|
|
|
+ CheckEquals(locValue,ADataObject.getCharacter(APropName), 'The change recorder should not modify the object.');
|
|
|
+
|
|
|
+ i := IndexOf(ADataObject,FRecorder.Store);
|
|
|
+ Check( ( i >= 0 ) );
|
|
|
+
|
|
|
+ locListX := FRecorder.Store as ISDOChangedDataObjectListEx;
|
|
|
+ locChangeInfo := locListX.getInfo(i);
|
|
|
+ CheckNotEquals(PtrUInt(nil),PtrUInt(locChangeInfo));
|
|
|
+ CheckEquals(PtrUInt(ADataObject), PtrUInt(locChangeInfo.DataObject));
|
|
|
+ CheckEquals(Ord(ctChange), Ord(locChangeInfo.ChangeType));
|
|
|
+ CheckNotEquals(PtrUInt(nil),PtrUInt(locChangeInfo.ChangeList));
|
|
|
+
|
|
|
+ CheckEquals(1, locChangeInfo.ChangeList.size());
|
|
|
+ locSetting := locChangeInfo.ChangeList.getItem(0);
|
|
|
+ CheckEquals(PtrUInt(locProp), PtrUInt(locSetting.getProperty()));
|
|
|
+ CheckEquals(ADataObject.isNull(locProp), locSetting.isNull());
|
|
|
+ CheckEquals(ADataObject.isSet(locProp), locSetting.isSet());
|
|
|
+ CheckEquals(ADataObject.getCharacter(locProp), locSetting.getCharacterValue());
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TChangeRecorder_Test.multi_call_char();
|
|
|
+const
|
|
|
+ LOCAL_PROP = s_char_prop;
|
|
|
+var
|
|
|
+ locObj : ISDODataObject;
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locChangeInfo : TDataObjectChangeInfo;
|
|
|
+ i : PtrInt;
|
|
|
+ locListX : ISDOChangedDataObjectListEx;
|
|
|
+begin
|
|
|
+ locObj := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ locProp := locObj.getProperty(LOCAL_PROP);
|
|
|
+
|
|
|
+ FRecorder.recordChange(locObj,locProp);
|
|
|
+ i := IndexOf(locObj,FRecorder.Store);
|
|
|
+ Check( ( i >= 0 ) );
|
|
|
+ locListX := FRecorder.Store as ISDOChangedDataObjectListEx;
|
|
|
+ locChangeInfo := locListX.getInfo(i);
|
|
|
+ CheckEquals(1,locChangeInfo.ChangeList.size());
|
|
|
+
|
|
|
+ FRecorder.recordChange(locObj,locProp);
|
|
|
+ locObj.setCharacter(locProp,TSDOChar(78));
|
|
|
+ i := IndexOf(locObj,FRecorder.Store);
|
|
|
+ Check( ( i >= 0 ) );
|
|
|
+ locListX := FRecorder.Store as ISDOChangedDataObjectListEx;
|
|
|
+ locChangeInfo := locListX.getInfo(i);
|
|
|
+ CheckEquals(1,locChangeInfo.ChangeList.size());
|
|
|
+
|
|
|
+ FRecorder.recordChange(locObj,locProp);
|
|
|
+ FRecorder.recordChange(locObj,locProp);
|
|
|
+ CheckEquals(1,locChangeInfo.ChangeList.size());
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TChangeRecorder_Test.char_change();
|
|
|
+const
|
|
|
+ LOCAL_PROP = s_char_prop;
|
|
|
+var
|
|
|
+ locObj : ISDODataObject;
|
|
|
+begin
|
|
|
+ locObj := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+
|
|
|
+ record_char(locObj,LOCAL_PROP);
|
|
|
+
|
|
|
+ InitRecorder();
|
|
|
+ locObj.setCharacter(LOCAL_PROP,TSDOChar(123));
|
|
|
+ record_char(locObj,LOCAL_PROP);
|
|
|
+
|
|
|
+ InitRecorder();
|
|
|
+ locObj.setCharacter(LOCAL_PROP,TSDOChar(76));
|
|
|
+ record_char(locObj,LOCAL_PROP);
|
|
|
+
|
|
|
+ InitRecorder();
|
|
|
+ locObj.setNull(LOCAL_PROP);
|
|
|
+ record_char(locObj,LOCAL_PROP);
|
|
|
+
|
|
|
+ InitRecorder();
|
|
|
+ locObj.setCharacter(LOCAL_PROP,TSDOChar(123));
|
|
|
+ record_char(locObj,LOCAL_PROP);
|
|
|
+
|
|
|
+ InitRecorder();
|
|
|
+ locObj.unset(LOCAL_PROP);
|
|
|
+ record_char(locObj,LOCAL_PROP);
|
|
|
+end;
|
|
|
+{$ENDIF HAS_SDO_CHAR}
|
|
|
+
|
|
|
+{$IFDEF HAS_SDO_BYTES}
|
|
|
+procedure TChangeRecorder_Test.record_bytes(
|
|
|
+ const ADataObject: ISDODataObject;
|
|
|
+ const APropName: string
|
|
|
+);
|
|
|
+var
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locValue : TSDOBytes;
|
|
|
+ locSetting : TValueSetting;
|
|
|
+ i : PtrInt;
|
|
|
+ locListX : ISDOChangedDataObjectListEx;
|
|
|
+ locChangeInfo : TDataObjectChangeInfo;
|
|
|
+begin
|
|
|
+ locProp := ADataObject.getProperty(APropName);
|
|
|
+ CheckNotEquals(PtrUInt(nil),PtrUInt(locProp),Format('Invalid property : "%s"',[APropName]));
|
|
|
+
|
|
|
+ i := IndexOf(ADataObject,FRecorder.Store);
|
|
|
+ CheckEquals(-1,i);
|
|
|
+
|
|
|
+ locValue := ADataObject.getBytes(APropName);
|
|
|
+ FRecorder.recordChange(ADataObject,locProp);
|
|
|
+ CheckEquals(locValue,ADataObject.getBytes(APropName), 'The change recorder should not modify the object.');
|
|
|
+
|
|
|
+ i := IndexOf(ADataObject,FRecorder.Store);
|
|
|
+ Check( ( i >= 0 ) );
|
|
|
+
|
|
|
+ locListX := FRecorder.Store as ISDOChangedDataObjectListEx;
|
|
|
+ locChangeInfo := locListX.getInfo(i);
|
|
|
+ CheckNotEquals(PtrUInt(nil),PtrUInt(locChangeInfo));
|
|
|
+ CheckEquals(PtrUInt(ADataObject), PtrUInt(locChangeInfo.DataObject));
|
|
|
+ CheckEquals(Ord(ctChange), Ord(locChangeInfo.ChangeType));
|
|
|
+ CheckNotEquals(PtrUInt(nil),PtrUInt(locChangeInfo.ChangeList));
|
|
|
+
|
|
|
+ CheckEquals(1, locChangeInfo.ChangeList.size());
|
|
|
+ locSetting := locChangeInfo.ChangeList.getItem(0);
|
|
|
+ CheckEquals(PtrUInt(locProp), PtrUInt(locSetting.getProperty()));
|
|
|
+ CheckEquals(ADataObject.isNull(locProp), locSetting.isNull());
|
|
|
+ CheckEquals(ADataObject.isSet(locProp), locSetting.isSet());
|
|
|
+ CheckEquals(ADataObject.getBytes(locProp), locSetting.getBytesValue());
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TChangeRecorder_Test.multi_call_bytes();
|
|
|
+const
|
|
|
+ LOCAL_PROP = s_bytes_prop;
|
|
|
+var
|
|
|
+ VAL_1 : TSDOBytes;
|
|
|
+
|
|
|
+ procedure SetConstants();
|
|
|
+ var
|
|
|
+ v : TSDOBytes;
|
|
|
+ k : Integer;
|
|
|
+ begin
|
|
|
+ SetLength(v,10);
|
|
|
+ for k := 0 to High(v) do
|
|
|
+ v[k] := k mod High(TSDOByte);
|
|
|
+ VAL_1 := v;
|
|
|
+ end;
|
|
|
+
|
|
|
+var
|
|
|
+ locObj : ISDODataObject;
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locChangeInfo : TDataObjectChangeInfo;
|
|
|
+ i : PtrInt;
|
|
|
+ locListX : ISDOChangedDataObjectListEx;
|
|
|
+begin
|
|
|
+ SetConstants();
|
|
|
+ locObj := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ locProp := locObj.getProperty(LOCAL_PROP);
|
|
|
+
|
|
|
+ FRecorder.recordChange(locObj,locProp);
|
|
|
+ i := IndexOf(locObj,FRecorder.Store);
|
|
|
+ Check( ( i >= 0 ) );
|
|
|
+ locListX := FRecorder.Store as ISDOChangedDataObjectListEx;
|
|
|
+ locChangeInfo := locListX.getInfo(i);
|
|
|
+ CheckEquals(1,locChangeInfo.ChangeList.size());
|
|
|
+
|
|
|
+ FRecorder.recordChange(locObj,locProp);
|
|
|
+ locObj.setBytes(locProp,VAL_1);
|
|
|
+ i := IndexOf(locObj,FRecorder.Store);
|
|
|
+ Check( ( i >= 0 ) );
|
|
|
+ locListX := FRecorder.Store as ISDOChangedDataObjectListEx;
|
|
|
+ locChangeInfo := locListX.getInfo(i);
|
|
|
+ CheckEquals(1,locChangeInfo.ChangeList.size());
|
|
|
+
|
|
|
+ FRecorder.recordChange(locObj,locProp);
|
|
|
+ FRecorder.recordChange(locObj,locProp);
|
|
|
+ CheckEquals(1,locChangeInfo.ChangeList.size());
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TChangeRecorder_Test.bytes_change();
|
|
|
+const
|
|
|
+ LOCAL_PROP = s_bytes_prop;
|
|
|
+var
|
|
|
+ VAL_1, VAL_2, VAL_3 : TSDOBytes;
|
|
|
+
|
|
|
+ procedure SetConstants();
|
|
|
+ var
|
|
|
+ v : TSDOBytes;
|
|
|
+ k : Integer;
|
|
|
+ begin
|
|
|
+ SetLength(v,10);
|
|
|
+ for k := 0 to High(v) do
|
|
|
+ v[k] := k mod High(TSDOByte);
|
|
|
+ VAL_1 := v;
|
|
|
+ v := nil;
|
|
|
+
|
|
|
+ VAL_2 := nil;
|
|
|
+
|
|
|
+ SetLength(v,20);
|
|
|
+ for k := 0 to High(v) do
|
|
|
+ v[k] := ( ( 3 * k ) + 1 ) mod High(TSDOByte);
|
|
|
+ VAL_3 := v;
|
|
|
+ end;
|
|
|
+
|
|
|
+var
|
|
|
+ locObj : ISDODataObject;
|
|
|
+begin
|
|
|
+ SetConstants();
|
|
|
+ locObj := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+
|
|
|
+ record_bytes(locObj,LOCAL_PROP);
|
|
|
+
|
|
|
+ InitRecorder();
|
|
|
+ locObj.setBytes(LOCAL_PROP,VAL_1);
|
|
|
+ record_bytes(locObj,LOCAL_PROP);
|
|
|
+
|
|
|
+ InitRecorder();
|
|
|
+ locObj.setBytes(LOCAL_PROP,VAL_2);
|
|
|
+ record_bytes(locObj,LOCAL_PROP);
|
|
|
+
|
|
|
+ InitRecorder();
|
|
|
+ locObj.setNull(LOCAL_PROP);
|
|
|
+ record_bytes(locObj,LOCAL_PROP);
|
|
|
+
|
|
|
+ InitRecorder();
|
|
|
+ locObj.setBytes(LOCAL_PROP,VAL_3);
|
|
|
+ record_bytes(locObj,LOCAL_PROP);
|
|
|
+
|
|
|
+ InitRecorder();
|
|
|
+ locObj.unset(LOCAL_PROP);
|
|
|
+ record_bytes(locObj,LOCAL_PROP);
|
|
|
+end;
|
|
|
+{$ENDIF HAS_SDO_BYTES}
|
|
|
+
|
|
|
+{$IFDEF HAS_SDO_CURRENCY}
|
|
|
+procedure TChangeRecorder_Test.record_currency(
|
|
|
+ const ADataObject: ISDODataObject;
|
|
|
+ const APropName: string
|
|
|
+);
|
|
|
+var
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locValue : TSDOCurrency;
|
|
|
+ locSetting : TValueSetting;
|
|
|
+ i : PtrInt;
|
|
|
+ locListX : ISDOChangedDataObjectListEx;
|
|
|
+ locChangeInfo : TDataObjectChangeInfo;
|
|
|
+begin
|
|
|
+ locProp := ADataObject.getProperty(APropName);
|
|
|
+ CheckNotEquals(PtrUInt(nil),PtrUInt(locProp),Format('Invalid property : "%s"',[APropName]));
|
|
|
+
|
|
|
+ i := IndexOf(ADataObject,FRecorder.Store);
|
|
|
+ CheckEquals(-1,i);
|
|
|
+
|
|
|
+ locValue := ADataObject.getCurrency(APropName);
|
|
|
+ FRecorder.recordChange(ADataObject,locProp);
|
|
|
+ CheckEquals(locValue,ADataObject.getCurrency(APropName), 'The change recorder should not modify the object.');
|
|
|
+
|
|
|
+ i := IndexOf(ADataObject,FRecorder.Store);
|
|
|
+ Check( ( i >= 0 ) );
|
|
|
+
|
|
|
+ locListX := FRecorder.Store as ISDOChangedDataObjectListEx;
|
|
|
+ locChangeInfo := locListX.getInfo(i);
|
|
|
+ CheckNotEquals(PtrUInt(nil),PtrUInt(locChangeInfo));
|
|
|
+ CheckEquals(PtrUInt(ADataObject), PtrUInt(locChangeInfo.DataObject));
|
|
|
+ CheckEquals(Ord(ctChange), Ord(locChangeInfo.ChangeType));
|
|
|
+ CheckNotEquals(PtrUInt(nil),PtrUInt(locChangeInfo.ChangeList));
|
|
|
+
|
|
|
+ CheckEquals(1, locChangeInfo.ChangeList.size());
|
|
|
+ locSetting := locChangeInfo.ChangeList.getItem(0);
|
|
|
+ CheckEquals(PtrUInt(locProp), PtrUInt(locSetting.getProperty()));
|
|
|
+ CheckEquals(ADataObject.isNull(locProp), locSetting.isNull());
|
|
|
+ CheckEquals(ADataObject.isSet(locProp), locSetting.isSet());
|
|
|
+ CheckEquals(ADataObject.getCurrency(locProp), locSetting.getCurrencyValue());
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TChangeRecorder_Test.multi_call_currency();
|
|
|
+const
|
|
|
+ LOCAL_PROP = s_currency_prop;
|
|
|
+var
|
|
|
+ locObj : ISDODataObject;
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locChangeInfo : TDataObjectChangeInfo;
|
|
|
+ i : PtrInt;
|
|
|
+ locListX : ISDOChangedDataObjectListEx;
|
|
|
+begin
|
|
|
+ locObj := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ locProp := locObj.getProperty(LOCAL_PROP);
|
|
|
+
|
|
|
+ FRecorder.recordChange(locObj,locProp);
|
|
|
+ i := IndexOf(locObj,FRecorder.Store);
|
|
|
+ Check( ( i >= 0 ) );
|
|
|
+ locListX := FRecorder.Store as ISDOChangedDataObjectListEx;
|
|
|
+ locChangeInfo := locListX.getInfo(i);
|
|
|
+ CheckEquals(1,locChangeInfo.ChangeList.size());
|
|
|
+
|
|
|
+ FRecorder.recordChange(locObj,locProp);
|
|
|
+ locObj.setCurrency(locProp,7886556852);
|
|
|
+ i := IndexOf(locObj,FRecorder.Store);
|
|
|
+ Check( ( i >= 0 ) );
|
|
|
+ locListX := FRecorder.Store as ISDOChangedDataObjectListEx;
|
|
|
+ locChangeInfo := locListX.getInfo(i);
|
|
|
+ CheckEquals(1,locChangeInfo.ChangeList.size());
|
|
|
+
|
|
|
+ FRecorder.recordChange(locObj,locProp);
|
|
|
+ FRecorder.recordChange(locObj,locProp);
|
|
|
+ CheckEquals(1,locChangeInfo.ChangeList.size());
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TChangeRecorder_Test.currency_change();
|
|
|
+const
|
|
|
+ LOCAL_PROP = s_currency_prop;
|
|
|
+var
|
|
|
+ locObj : ISDODataObject;
|
|
|
+begin
|
|
|
+ locObj := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+
|
|
|
+ record_currency(locObj,LOCAL_PROP);
|
|
|
+
|
|
|
+ InitRecorder();
|
|
|
+ locObj.setCurrency(LOCAL_PROP,123963258741);
|
|
|
+ record_currency(locObj,LOCAL_PROP);
|
|
|
+
|
|
|
+ InitRecorder();
|
|
|
+ locObj.setCurrency(LOCAL_PROP,7614785236654);
|
|
|
+ record_currency(locObj,LOCAL_PROP);
|
|
|
+
|
|
|
+ InitRecorder();
|
|
|
+ locObj.setNull(LOCAL_PROP);
|
|
|
+ record_currency(locObj,LOCAL_PROP);
|
|
|
+
|
|
|
+ InitRecorder();
|
|
|
+ locObj.setCurrency(LOCAL_PROP,123321652);
|
|
|
+ record_currency(locObj,LOCAL_PROP);
|
|
|
+
|
|
|
+ InitRecorder();
|
|
|
+ locObj.unset(LOCAL_PROP);
|
|
|
+ record_currency(locObj,LOCAL_PROP);
|
|
|
+end;
|
|
|
+{$ENDIF HAS_SDO_CURRENCY}
|
|
|
+
|
|
|
+{$IFDEF HAS_SDO_DOUBLE}
|
|
|
+procedure TChangeRecorder_Test.record_double(
|
|
|
+ const ADataObject: ISDODataObject;
|
|
|
+ const APropName: string
|
|
|
+);
|
|
|
+var
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locValue : TSDODouble;
|
|
|
+ locSetting : TValueSetting;
|
|
|
+ i : PtrInt;
|
|
|
+ locListX : ISDOChangedDataObjectListEx;
|
|
|
+ locChangeInfo : TDataObjectChangeInfo;
|
|
|
+begin
|
|
|
+ locProp := ADataObject.getProperty(APropName);
|
|
|
+ CheckNotEquals(PtrUInt(nil),PtrUInt(locProp),Format('Invalid property : "%s"',[APropName]));
|
|
|
+
|
|
|
+ i := IndexOf(ADataObject,FRecorder.Store);
|
|
|
+ CheckEquals(-1,i);
|
|
|
+
|
|
|
+ locValue := ADataObject.getDouble(APropName);
|
|
|
+ FRecorder.recordChange(ADataObject,locProp);
|
|
|
+ CheckEquals(locValue,ADataObject.getDouble(APropName), 'The change recorder should not modify the object.');
|
|
|
+
|
|
|
+ i := IndexOf(ADataObject,FRecorder.Store);
|
|
|
+ Check( ( i >= 0 ) );
|
|
|
+
|
|
|
+ locListX := FRecorder.Store as ISDOChangedDataObjectListEx;
|
|
|
+ locChangeInfo := locListX.getInfo(i);
|
|
|
+ CheckNotEquals(PtrUInt(nil),PtrUInt(locChangeInfo));
|
|
|
+ CheckEquals(PtrUInt(ADataObject), PtrUInt(locChangeInfo.DataObject));
|
|
|
+ CheckEquals(Ord(ctChange), Ord(locChangeInfo.ChangeType));
|
|
|
+ CheckNotEquals(PtrUInt(nil),PtrUInt(locChangeInfo.ChangeList));
|
|
|
+
|
|
|
+ CheckEquals(1, locChangeInfo.ChangeList.size());
|
|
|
+ locSetting := locChangeInfo.ChangeList.getItem(0);
|
|
|
+ CheckEquals(PtrUInt(locProp), PtrUInt(locSetting.getProperty()));
|
|
|
+ CheckEquals(ADataObject.isNull(locProp), locSetting.isNull());
|
|
|
+ CheckEquals(ADataObject.isSet(locProp), locSetting.isSet());
|
|
|
+ CheckEquals(ADataObject.getDouble(locProp), locSetting.getDoubleValue());
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TChangeRecorder_Test.multi_call_double();
|
|
|
+const
|
|
|
+ LOCAL_PROP = s_double_prop;
|
|
|
+var
|
|
|
+ locObj : ISDODataObject;
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locChangeInfo : TDataObjectChangeInfo;
|
|
|
+ i : PtrInt;
|
|
|
+ locListX : ISDOChangedDataObjectListEx;
|
|
|
+begin
|
|
|
+ locObj := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ locProp := locObj.getProperty(LOCAL_PROP);
|
|
|
+
|
|
|
+ FRecorder.recordChange(locObj,locProp);
|
|
|
+ i := IndexOf(locObj,FRecorder.Store);
|
|
|
+ Check( ( i >= 0 ) );
|
|
|
+ locListX := FRecorder.Store as ISDOChangedDataObjectListEx;
|
|
|
+ locChangeInfo := locListX.getInfo(i);
|
|
|
+ CheckEquals(1,locChangeInfo.ChangeList.size());
|
|
|
+
|
|
|
+ FRecorder.recordChange(locObj,locProp);
|
|
|
+ locObj.setDouble(locProp,7886556852);
|
|
|
+ i := IndexOf(locObj,FRecorder.Store);
|
|
|
+ Check( ( i >= 0 ) );
|
|
|
+ locListX := FRecorder.Store as ISDOChangedDataObjectListEx;
|
|
|
+ locChangeInfo := locListX.getInfo(i);
|
|
|
+ CheckEquals(1,locChangeInfo.ChangeList.size());
|
|
|
+
|
|
|
+ FRecorder.recordChange(locObj,locProp);
|
|
|
+ FRecorder.recordChange(locObj,locProp);
|
|
|
+ CheckEquals(1,locChangeInfo.ChangeList.size());
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TChangeRecorder_Test.double_change();
|
|
|
+const
|
|
|
+ LOCAL_PROP = s_double_prop;
|
|
|
+var
|
|
|
+ locObj : ISDODataObject;
|
|
|
+begin
|
|
|
+ locObj := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+
|
|
|
+ record_double(locObj,LOCAL_PROP);
|
|
|
+
|
|
|
+ InitRecorder();
|
|
|
+ locObj.setDouble(LOCAL_PROP,123963258741);
|
|
|
+ record_double(locObj,LOCAL_PROP);
|
|
|
+
|
|
|
+ InitRecorder();
|
|
|
+ locObj.setDouble(LOCAL_PROP,7614785236654);
|
|
|
+ record_double(locObj,LOCAL_PROP);
|
|
|
+
|
|
|
+ InitRecorder();
|
|
|
+ locObj.setNull(LOCAL_PROP);
|
|
|
+ record_double(locObj,LOCAL_PROP);
|
|
|
+
|
|
|
+ InitRecorder();
|
|
|
+ locObj.setDouble(LOCAL_PROP,123321652);
|
|
|
+ record_double(locObj,LOCAL_PROP);
|
|
|
+
|
|
|
+ InitRecorder();
|
|
|
+ locObj.unset(LOCAL_PROP);
|
|
|
+ record_double(locObj,LOCAL_PROP);
|
|
|
+end;
|
|
|
+{$ENDIF HAS_SDO_DOUBLE}
|
|
|
+
|
|
|
+{$IFDEF HAS_SDO_FLOAT}
|
|
|
+procedure TChangeRecorder_Test.record_float(
|
|
|
+ const ADataObject: ISDODataObject;
|
|
|
+ const APropName: string
|
|
|
+);
|
|
|
+var
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locValue : TSDOFloat;
|
|
|
+ locSetting : TValueSetting;
|
|
|
+ i : PtrInt;
|
|
|
+ locListX : ISDOChangedDataObjectListEx;
|
|
|
+ locChangeInfo : TDataObjectChangeInfo;
|
|
|
+begin
|
|
|
+ locProp := ADataObject.getProperty(APropName);
|
|
|
+ CheckNotEquals(PtrUInt(nil),PtrUInt(locProp),Format('Invalid property : "%s"',[APropName]));
|
|
|
+
|
|
|
+ i := IndexOf(ADataObject,FRecorder.Store);
|
|
|
+ CheckEquals(-1,i);
|
|
|
+
|
|
|
+ locValue := ADataObject.getFloat(APropName);
|
|
|
+ FRecorder.recordChange(ADataObject,locProp);
|
|
|
+ CheckEquals(locValue,ADataObject.getFloat(APropName), 'The change recorder should not modify the object.');
|
|
|
+
|
|
|
+ i := IndexOf(ADataObject,FRecorder.Store);
|
|
|
+ Check( ( i >= 0 ) );
|
|
|
+
|
|
|
+ locListX := FRecorder.Store as ISDOChangedDataObjectListEx;
|
|
|
+ locChangeInfo := locListX.getInfo(i);
|
|
|
+ CheckNotEquals(PtrUInt(nil),PtrUInt(locChangeInfo));
|
|
|
+ CheckEquals(PtrUInt(ADataObject), PtrUInt(locChangeInfo.DataObject));
|
|
|
+ CheckEquals(Ord(ctChange), Ord(locChangeInfo.ChangeType));
|
|
|
+ CheckNotEquals(PtrUInt(nil),PtrUInt(locChangeInfo.ChangeList));
|
|
|
+
|
|
|
+ CheckEquals(1, locChangeInfo.ChangeList.size());
|
|
|
+ locSetting := locChangeInfo.ChangeList.getItem(0);
|
|
|
+ CheckEquals(PtrUInt(locProp), PtrUInt(locSetting.getProperty()));
|
|
|
+ CheckEquals(ADataObject.isNull(locProp), locSetting.isNull());
|
|
|
+ CheckEquals(ADataObject.isSet(locProp), locSetting.isSet());
|
|
|
+ CheckEquals(ADataObject.getFloat(locProp), locSetting.getFloatValue());
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TChangeRecorder_Test.multi_call_float();
|
|
|
+const
|
|
|
+ LOCAL_PROP = s_float_prop;
|
|
|
+var
|
|
|
+ locObj : ISDODataObject;
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locChangeInfo : TDataObjectChangeInfo;
|
|
|
+ i : PtrInt;
|
|
|
+ locListX : ISDOChangedDataObjectListEx;
|
|
|
+begin
|
|
|
+ locObj := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ locProp := locObj.getProperty(LOCAL_PROP);
|
|
|
+
|
|
|
+ FRecorder.recordChange(locObj,locProp);
|
|
|
+ i := IndexOf(locObj,FRecorder.Store);
|
|
|
+ Check( ( i >= 0 ) );
|
|
|
+ locListX := FRecorder.Store as ISDOChangedDataObjectListEx;
|
|
|
+ locChangeInfo := locListX.getInfo(i);
|
|
|
+ CheckEquals(1,locChangeInfo.ChangeList.size());
|
|
|
+
|
|
|
+ FRecorder.recordChange(locObj,locProp);
|
|
|
+ locObj.setFloat(locProp,7886556852);
|
|
|
+ i := IndexOf(locObj,FRecorder.Store);
|
|
|
+ Check( ( i >= 0 ) );
|
|
|
+ locListX := FRecorder.Store as ISDOChangedDataObjectListEx;
|
|
|
+ locChangeInfo := locListX.getInfo(i);
|
|
|
+ CheckEquals(1,locChangeInfo.ChangeList.size());
|
|
|
+
|
|
|
+ FRecorder.recordChange(locObj,locProp);
|
|
|
+ FRecorder.recordChange(locObj,locProp);
|
|
|
+ CheckEquals(1,locChangeInfo.ChangeList.size());
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TChangeRecorder_Test.float_change();
|
|
|
+const
|
|
|
+ LOCAL_PROP = s_float_prop;
|
|
|
+var
|
|
|
+ locObj : ISDODataObject;
|
|
|
+begin
|
|
|
+ locObj := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+
|
|
|
+ record_float(locObj,LOCAL_PROP);
|
|
|
+
|
|
|
+ InitRecorder();
|
|
|
+ locObj.setFloat(LOCAL_PROP,123963258741);
|
|
|
+ record_float(locObj,LOCAL_PROP);
|
|
|
+
|
|
|
+ InitRecorder();
|
|
|
+ locObj.setFloat(LOCAL_PROP,7614785236654);
|
|
|
+ record_float(locObj,LOCAL_PROP);
|
|
|
+
|
|
|
+ InitRecorder();
|
|
|
+ locObj.setNull(LOCAL_PROP);
|
|
|
+ record_float(locObj,LOCAL_PROP);
|
|
|
+
|
|
|
+ InitRecorder();
|
|
|
+ locObj.setFloat(LOCAL_PROP,123321652);
|
|
|
+ record_float(locObj,LOCAL_PROP);
|
|
|
+
|
|
|
+ InitRecorder();
|
|
|
+ locObj.unset(LOCAL_PROP);
|
|
|
+ record_float(locObj,LOCAL_PROP);
|
|
|
+end;
|
|
|
+{$ENDIF HAS_SDO_FLOAT}
|
|
|
+
|
|
|
+{$IFDEF HAS_SDO_LONG}
|
|
|
+procedure TChangeRecorder_Test.record_long(
|
|
|
+ const ADataObject: ISDODataObject;
|
|
|
+ const APropName: string
|
|
|
+);
|
|
|
+var
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locValue : TSDOLong;
|
|
|
+ locSetting : TValueSetting;
|
|
|
+ i : PtrInt;
|
|
|
+ locListX : ISDOChangedDataObjectListEx;
|
|
|
+ locChangeInfo : TDataObjectChangeInfo;
|
|
|
+begin
|
|
|
+ locProp := ADataObject.getProperty(APropName);
|
|
|
+ CheckNotEquals(PtrUInt(nil),PtrUInt(locProp),Format('Invalid property : "%s"',[APropName]));
|
|
|
+
|
|
|
+ i := IndexOf(ADataObject,FRecorder.Store);
|
|
|
+ CheckEquals(-1,i);
|
|
|
+
|
|
|
+ locValue := ADataObject.getLong(APropName);
|
|
|
+ FRecorder.recordChange(ADataObject,locProp);
|
|
|
+ CheckEquals(locValue,ADataObject.getLong(APropName), 'The change recorder should not modify the object.');
|
|
|
+
|
|
|
+ i := IndexOf(ADataObject,FRecorder.Store);
|
|
|
+ Check( ( i >= 0 ) );
|
|
|
+
|
|
|
+ locListX := FRecorder.Store as ISDOChangedDataObjectListEx;
|
|
|
+ locChangeInfo := locListX.getInfo(i);
|
|
|
+ CheckNotEquals(PtrUInt(nil),PtrUInt(locChangeInfo));
|
|
|
+ CheckEquals(PtrUInt(ADataObject), PtrUInt(locChangeInfo.DataObject));
|
|
|
+ CheckEquals(Ord(ctChange), Ord(locChangeInfo.ChangeType));
|
|
|
+ CheckNotEquals(PtrUInt(nil),PtrUInt(locChangeInfo.ChangeList));
|
|
|
+
|
|
|
+ CheckEquals(1, locChangeInfo.ChangeList.size());
|
|
|
+ locSetting := locChangeInfo.ChangeList.getItem(0);
|
|
|
+ CheckEquals(PtrUInt(locProp), PtrUInt(locSetting.getProperty()));
|
|
|
+ CheckEquals(ADataObject.isNull(locProp), locSetting.isNull());
|
|
|
+ CheckEquals(ADataObject.isSet(locProp), locSetting.isSet());
|
|
|
+ CheckEquals(ADataObject.getLong(locProp), locSetting.getLongValue());
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TChangeRecorder_Test.multi_call_long();
|
|
|
+const
|
|
|
+ LOCAL_PROP = s_long_prop;
|
|
|
+var
|
|
|
+ locObj : ISDODataObject;
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locChangeInfo : TDataObjectChangeInfo;
|
|
|
+ i : PtrInt;
|
|
|
+ locListX : ISDOChangedDataObjectListEx;
|
|
|
+begin
|
|
|
+ locObj := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ locProp := locObj.getProperty(LOCAL_PROP);
|
|
|
+
|
|
|
+ FRecorder.recordChange(locObj,locProp);
|
|
|
+ i := IndexOf(locObj,FRecorder.Store);
|
|
|
+ Check( ( i >= 0 ) );
|
|
|
+ locListX := FRecorder.Store as ISDOChangedDataObjectListEx;
|
|
|
+ locChangeInfo := locListX.getInfo(i);
|
|
|
+ CheckEquals(1,locChangeInfo.ChangeList.size());
|
|
|
+
|
|
|
+ FRecorder.recordChange(locObj,locProp);
|
|
|
+ locObj.setLong(locProp,TSDOLong(78865235820256852));
|
|
|
+ i := IndexOf(locObj,FRecorder.Store);
|
|
|
+ Check( ( i >= 0 ) );
|
|
|
+ locListX := FRecorder.Store as ISDOChangedDataObjectListEx;
|
|
|
+ locChangeInfo := locListX.getInfo(i);
|
|
|
+ CheckEquals(1,locChangeInfo.ChangeList.size());
|
|
|
+
|
|
|
+ FRecorder.recordChange(locObj,locProp);
|
|
|
+ FRecorder.recordChange(locObj,locProp);
|
|
|
+ CheckEquals(1,locChangeInfo.ChangeList.size());
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TChangeRecorder_Test.long_change();
|
|
|
+const
|
|
|
+ LOCAL_PROP = s_long_prop;
|
|
|
+var
|
|
|
+ locObj : ISDODataObject;
|
|
|
+begin
|
|
|
+ locObj := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+
|
|
|
+ record_long(locObj,LOCAL_PROP);
|
|
|
+
|
|
|
+ InitRecorder();
|
|
|
+ locObj.setLong(LOCAL_PROP,TSDOLong(123963258741));
|
|
|
+ record_long(locObj,LOCAL_PROP);
|
|
|
+
|
|
|
+ InitRecorder();
|
|
|
+ locObj.setLong(LOCAL_PROP,TSDOLong(761478523699123654));
|
|
|
+ record_long(locObj,LOCAL_PROP);
|
|
|
+
|
|
|
+ InitRecorder();
|
|
|
+ locObj.setNull(LOCAL_PROP);
|
|
|
+ record_long(locObj,LOCAL_PROP);
|
|
|
+
|
|
|
+ InitRecorder();
|
|
|
+ locObj.setLong(LOCAL_PROP,TSDOLong(1233216549874741225));
|
|
|
+ record_long(locObj,LOCAL_PROP);
|
|
|
+
|
|
|
+ InitRecorder();
|
|
|
+ locObj.unset(LOCAL_PROP);
|
|
|
+ record_long(locObj,LOCAL_PROP);
|
|
|
+end;
|
|
|
+{$ENDIF HAS_SDO_LONG}
|
|
|
+
|
|
|
+{$IFDEF HAS_SDO_SHORT}
|
|
|
+procedure TChangeRecorder_Test.record_short(
|
|
|
+ const ADataObject: ISDODataObject;
|
|
|
+ const APropName: string
|
|
|
+);
|
|
|
+var
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locValue : TSDOShort;
|
|
|
+ locSetting : TValueSetting;
|
|
|
+ i : PtrInt;
|
|
|
+ locListX : ISDOChangedDataObjectListEx;
|
|
|
+ locChangeInfo : TDataObjectChangeInfo;
|
|
|
+begin
|
|
|
+ locProp := ADataObject.getProperty(APropName);
|
|
|
+ CheckNotEquals(PtrUInt(nil),PtrUInt(locProp),Format('Invalid property : "%s"',[APropName]));
|
|
|
+
|
|
|
+ i := IndexOf(ADataObject,FRecorder.Store);
|
|
|
+ CheckEquals(-1,i);
|
|
|
+
|
|
|
+ locValue := ADataObject.getShort(APropName);
|
|
|
+ FRecorder.recordChange(ADataObject,locProp);
|
|
|
+ CheckEquals(locValue,ADataObject.getShort(APropName), 'The change recorder should not modify the object.');
|
|
|
+
|
|
|
+ i := IndexOf(ADataObject,FRecorder.Store);
|
|
|
+ Check( ( i >= 0 ) );
|
|
|
+
|
|
|
+ locListX := FRecorder.Store as ISDOChangedDataObjectListEx;
|
|
|
+ locChangeInfo := locListX.getInfo(i);
|
|
|
+ CheckNotEquals(PtrUInt(nil),PtrUInt(locChangeInfo));
|
|
|
+ CheckEquals(PtrUInt(ADataObject), PtrUInt(locChangeInfo.DataObject));
|
|
|
+ CheckEquals(Ord(ctChange), Ord(locChangeInfo.ChangeType));
|
|
|
+ CheckNotEquals(PtrUInt(nil),PtrUInt(locChangeInfo.ChangeList));
|
|
|
+
|
|
|
+ CheckEquals(1, locChangeInfo.ChangeList.size());
|
|
|
+ locSetting := locChangeInfo.ChangeList.getItem(0);
|
|
|
+ CheckEquals(PtrUInt(locProp), PtrUInt(locSetting.getProperty()));
|
|
|
+ CheckEquals(ADataObject.isNull(locProp), locSetting.isNull());
|
|
|
+ CheckEquals(ADataObject.isSet(locProp), locSetting.isSet());
|
|
|
+ CheckEquals(ADataObject.getShort(locProp), locSetting.getShortValue());
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TChangeRecorder_Test.multi_call_short();
|
|
|
+const
|
|
|
+ LOCAL_PROP = s_short_prop;
|
|
|
+var
|
|
|
+ locObj : ISDODataObject;
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locChangeInfo : TDataObjectChangeInfo;
|
|
|
+ i : PtrInt;
|
|
|
+ locListX : ISDOChangedDataObjectListEx;
|
|
|
+begin
|
|
|
+ locObj := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ locProp := locObj.getProperty(LOCAL_PROP);
|
|
|
+
|
|
|
+ FRecorder.recordChange(locObj,locProp);
|
|
|
+ i := IndexOf(locObj,FRecorder.Store);
|
|
|
+ Check( ( i >= 0 ) );
|
|
|
+ locListX := FRecorder.Store as ISDOChangedDataObjectListEx;
|
|
|
+ locChangeInfo := locListX.getInfo(i);
|
|
|
+ CheckEquals(1,locChangeInfo.ChangeList.size());
|
|
|
+
|
|
|
+ FRecorder.recordChange(locObj,locProp);
|
|
|
+ locObj.setShort(locProp,TSDOShort(7882));
|
|
|
+ i := IndexOf(locObj,FRecorder.Store);
|
|
|
+ Check( ( i >= 0 ) );
|
|
|
+ locListX := FRecorder.Store as ISDOChangedDataObjectListEx;
|
|
|
+ locChangeInfo := locListX.getInfo(i);
|
|
|
+ CheckEquals(1,locChangeInfo.ChangeList.size());
|
|
|
+
|
|
|
+ FRecorder.recordChange(locObj,locProp);
|
|
|
+ FRecorder.recordChange(locObj,locProp);
|
|
|
+ CheckEquals(1,locChangeInfo.ChangeList.size());
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TChangeRecorder_Test.short_change();
|
|
|
+const
|
|
|
+ LOCAL_PROP = s_short_prop;
|
|
|
+var
|
|
|
+ locObj : ISDODataObject;
|
|
|
+begin
|
|
|
+ locObj := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+
|
|
|
+ record_short(locObj,LOCAL_PROP);
|
|
|
+
|
|
|
+ InitRecorder();
|
|
|
+ locObj.setShort(LOCAL_PROP,TSDOShort(1239));
|
|
|
+ record_short(locObj,LOCAL_PROP);
|
|
|
+
|
|
|
+ InitRecorder();
|
|
|
+ locObj.setShort(LOCAL_PROP,TSDOShort(-7614));
|
|
|
+ record_short(locObj,LOCAL_PROP);
|
|
|
+
|
|
|
+ InitRecorder();
|
|
|
+ locObj.setNull(LOCAL_PROP);
|
|
|
+ record_short(locObj,LOCAL_PROP);
|
|
|
+
|
|
|
+ InitRecorder();
|
|
|
+ locObj.setShort(LOCAL_PROP,TSDOShort(1225));
|
|
|
+ record_short(locObj,LOCAL_PROP);
|
|
|
+
|
|
|
+ InitRecorder();
|
|
|
+ locObj.unset(LOCAL_PROP);
|
|
|
+ record_short(locObj,LOCAL_PROP);
|
|
|
+end;
|
|
|
+{$ENDIF HAS_SDO_SHORT}
|
|
|
+
|
|
|
+procedure TChangeRecorder_Test.object_change_contained_prop();
|
|
|
+const
|
|
|
+ LOCAL_PROP = s_object_prop;
|
|
|
+ LOCAL_PROP_CLASS = s_type_object_B;
|
|
|
+var
|
|
|
+ locObj : ISDODataObject;
|
|
|
+begin
|
|
|
+ locObj := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+
|
|
|
+ record_obj(locObj,LOCAL_PROP);
|
|
|
+
|
|
|
+ InitRecorder();
|
|
|
+ locObj.setDataObject(LOCAL_PROP,FFactory.createNew(s_uri,LOCAL_PROP_CLASS));
|
|
|
+ record_obj(locObj,LOCAL_PROP);
|
|
|
+
|
|
|
+ InitRecorder();
|
|
|
+ locObj.setDataObject(LOCAL_PROP,nil);
|
|
|
+ record_obj(locObj,LOCAL_PROP);
|
|
|
+
|
|
|
+ InitRecorder();
|
|
|
+ locObj.setNull(LOCAL_PROP);
|
|
|
+ record_obj(locObj,LOCAL_PROP);
|
|
|
+
|
|
|
+ InitRecorder();
|
|
|
+ locObj.setDataObject(LOCAL_PROP,FFactory.createNew(s_uri,LOCAL_PROP_CLASS));
|
|
|
+ record_obj(locObj,LOCAL_PROP);
|
|
|
+
|
|
|
+ InitRecorder();
|
|
|
+ locObj.unset(LOCAL_PROP);
|
|
|
+ record_obj(locObj,LOCAL_PROP);
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TChangeRecorder_Test.object_change_referenced_prop();
|
|
|
+const
|
|
|
+ LOCAL_PROP = s_object_ref_prop;
|
|
|
+ LOCAL_PROP_CLASS = s_type_object_C;
|
|
|
+var
|
|
|
+ locObj : ISDODataObject;
|
|
|
+begin
|
|
|
+ locObj := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+
|
|
|
+ record_obj(locObj,LOCAL_PROP);
|
|
|
+
|
|
|
+ InitRecorder();
|
|
|
+ locObj.setDataObject(LOCAL_PROP,FFactory.createNew(s_uri,LOCAL_PROP_CLASS));
|
|
|
+ record_obj(locObj,LOCAL_PROP);
|
|
|
+
|
|
|
+ InitRecorder();
|
|
|
+ locObj.setDataObject(LOCAL_PROP,nil);
|
|
|
+ record_obj(locObj,LOCAL_PROP);
|
|
|
+
|
|
|
+ InitRecorder();
|
|
|
+ locObj.setNull(LOCAL_PROP);
|
|
|
+ record_obj(locObj,LOCAL_PROP);
|
|
|
+
|
|
|
+ InitRecorder();
|
|
|
+ locObj.setDataObject(LOCAL_PROP,FFactory.createNew(s_uri,LOCAL_PROP_CLASS));
|
|
|
+ record_obj(locObj,LOCAL_PROP);
|
|
|
+
|
|
|
+ InitRecorder();
|
|
|
+ locObj.unset(LOCAL_PROP);
|
|
|
+ record_obj(locObj,LOCAL_PROP);
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TChangeRecorder_Test.record_bool(
|
|
|
+ const ADataObject: ISDODataObject;
|
|
|
+ const APropName: string
|
|
|
+);
|
|
|
+var
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locValue : TSDOBoolean;
|
|
|
+ locSetting : TValueSetting;
|
|
|
+ i : PtrInt;
|
|
|
+ locListX : ISDOChangedDataObjectListEx;
|
|
|
+ locChangeInfo : TDataObjectChangeInfo;
|
|
|
+begin
|
|
|
+ locProp := ADataObject.getProperty(APropName);
|
|
|
+ CheckNotEquals(PtrUInt(nil),PtrUInt(locProp),Format('Invalid property : "%s"',[APropName]));
|
|
|
+
|
|
|
+ i := IndexOf(ADataObject,FRecorder.Store);
|
|
|
+ CheckEquals(-1,i);
|
|
|
+
|
|
|
+ locValue := ADataObject.getBoolean(APropName);
|
|
|
+ FRecorder.recordChange(ADataObject,locProp);
|
|
|
+ CheckEquals(locValue,ADataObject.getBoolean(APropName), 'The change recorder should not modify the object.');
|
|
|
+
|
|
|
+ i := IndexOf(ADataObject,FRecorder.Store);
|
|
|
+ Check( ( i >= 0 ) );
|
|
|
+
|
|
|
+ locListX := FRecorder.Store as ISDOChangedDataObjectListEx;
|
|
|
+ locChangeInfo := locListX.getInfo(i);
|
|
|
+ CheckNotEquals(PtrUInt(nil),PtrUInt(locChangeInfo));
|
|
|
+ CheckEquals(PtrUInt(ADataObject), PtrUInt(locChangeInfo.DataObject));
|
|
|
+ CheckEquals(Ord(ctChange), Ord(locChangeInfo.ChangeType));
|
|
|
+ CheckNotEquals(PtrUInt(nil),PtrUInt(locChangeInfo.ChangeList));
|
|
|
+
|
|
|
+ CheckEquals(1, locChangeInfo.ChangeList.size());
|
|
|
+ locSetting := locChangeInfo.ChangeList.getItem(0);
|
|
|
+ CheckEquals(PtrUInt(locProp), PtrUInt(locSetting.getProperty()));
|
|
|
+ CheckEquals(ADataObject.isNull(locProp), locSetting.isNull());
|
|
|
+ CheckEquals(ADataObject.isSet(locProp), locSetting.isSet());
|
|
|
+ CheckEquals(ADataObject.getBoolean(locProp), locSetting.getBooleanValue());
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TChangeRecorder_Test.record_byte(
|
|
|
+ const ADataObject: ISDODataObject;
|
|
|
+ const APropName: string
|
|
|
+);
|
|
|
+var
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locValue : TSDOByte;
|
|
|
+ locSetting : TValueSetting;
|
|
|
+ i : PtrInt;
|
|
|
+ locListX : ISDOChangedDataObjectListEx;
|
|
|
+ locChangeInfo : TDataObjectChangeInfo;
|
|
|
+begin
|
|
|
+ locProp := ADataObject.getProperty(APropName);
|
|
|
+ CheckNotEquals(PtrUInt(nil),PtrUInt(locProp),Format('Invalid property : "%s"',[APropName]));
|
|
|
+
|
|
|
+ i := IndexOf(ADataObject,FRecorder.Store);
|
|
|
+ CheckEquals(-1,i);
|
|
|
+
|
|
|
+ locValue := ADataObject.getByte(APropName);
|
|
|
+ FRecorder.recordChange(ADataObject,locProp);
|
|
|
+ CheckEquals(locValue,ADataObject.getByte(APropName), 'The change recorder should not modify the object.');
|
|
|
+
|
|
|
+ i := IndexOf(ADataObject,FRecorder.Store);
|
|
|
+ Check( ( i >= 0 ) );
|
|
|
+
|
|
|
+ locListX := FRecorder.Store as ISDOChangedDataObjectListEx;
|
|
|
+ locChangeInfo := locListX.getInfo(i);
|
|
|
+ CheckNotEquals(PtrUInt(nil),PtrUInt(locChangeInfo));
|
|
|
+ CheckEquals(PtrUInt(ADataObject), PtrUInt(locChangeInfo.DataObject));
|
|
|
+ CheckEquals(Ord(ctChange), Ord(locChangeInfo.ChangeType));
|
|
|
+ CheckNotEquals(PtrUInt(nil),PtrUInt(locChangeInfo.ChangeList));
|
|
|
+
|
|
|
+ CheckEquals(1, locChangeInfo.ChangeList.size());
|
|
|
+ locSetting := locChangeInfo.ChangeList.getItem(0);
|
|
|
+ CheckEquals(PtrUInt(locProp), PtrUInt(locSetting.getProperty()));
|
|
|
+ CheckEquals(ADataObject.isNull(locProp), locSetting.isNull());
|
|
|
+ CheckEquals(ADataObject.isSet(locProp), locSetting.isSet());
|
|
|
+ CheckEquals(ADataObject.getByte(locProp), locSetting.getByteValue());
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TChangeRecorder_Test.record_date(
|
|
|
+ const ADataObject: ISDODataObject;
|
|
|
+ const APropName: string
|
|
|
+);
|
|
|
+var
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locValue : TSDODateTime;
|
|
|
+ locSetting : TValueSetting;
|
|
|
+ i : PtrInt;
|
|
|
+ locListX : ISDOChangedDataObjectListEx;
|
|
|
+ locChangeInfo : TDataObjectChangeInfo;
|
|
|
+begin
|
|
|
+ locProp := ADataObject.getProperty(APropName);
|
|
|
+ CheckNotEquals(PtrUInt(nil),PtrUInt(locProp),Format('Invalid property : "%s"',[APropName]));
|
|
|
+
|
|
|
+ i := IndexOf(ADataObject,FRecorder.Store);
|
|
|
+ CheckEquals(-1,i);
|
|
|
+
|
|
|
+ locValue := ADataObject.getDate(APropName);
|
|
|
+ FRecorder.recordChange(ADataObject,locProp);
|
|
|
+ CheckEquals(locValue,ADataObject.getDate(APropName), 'The change recorder should not modify the object.');
|
|
|
+
|
|
|
+ i := IndexOf(ADataObject,FRecorder.Store);
|
|
|
+ Check( ( i >= 0 ) );
|
|
|
+
|
|
|
+ locListX := FRecorder.Store as ISDOChangedDataObjectListEx;
|
|
|
+ locChangeInfo := locListX.getInfo(i);
|
|
|
+ CheckNotEquals(PtrUInt(nil),PtrUInt(locChangeInfo));
|
|
|
+ CheckEquals(PtrUInt(ADataObject), PtrUInt(locChangeInfo.DataObject));
|
|
|
+ CheckEquals(Ord(ctChange), Ord(locChangeInfo.ChangeType));
|
|
|
+ CheckNotEquals(PtrUInt(nil),PtrUInt(locChangeInfo.ChangeList));
|
|
|
+
|
|
|
+ CheckEquals(1, locChangeInfo.ChangeList.size());
|
|
|
+ locSetting := locChangeInfo.ChangeList.getItem(0);
|
|
|
+ CheckEquals(PtrUInt(locProp), PtrUInt(locSetting.getProperty()));
|
|
|
+ CheckEquals(ADataObject.isNull(locProp), locSetting.isNull());
|
|
|
+ CheckEquals(ADataObject.isSet(locProp), locSetting.isSet());
|
|
|
+ CheckEquals(ADataObject.getDate(locProp), locSetting.getDateValue());
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TChangeRecorder_Test.record_int(
|
|
|
+ const ADataObject : ISDODataObject;
|
|
|
+ const APropName : string
|
|
|
+);
|
|
|
+var
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locValue : TSDOInteger;
|
|
|
+ locSetting : TValueSetting;
|
|
|
+ i : PtrInt;
|
|
|
+ locListX : ISDOChangedDataObjectListEx;
|
|
|
+ locChangeInfo : TDataObjectChangeInfo;
|
|
|
+begin
|
|
|
+ locProp := ADataObject.getProperty(APropName);
|
|
|
+ CheckNotEquals(PtrUInt(nil),PtrUInt(locProp),Format('Invalid property : "%s"',[APropName]));
|
|
|
+
|
|
|
+ i := IndexOf(ADataObject,FRecorder.Store);
|
|
|
+ CheckEquals(-1,i);
|
|
|
+
|
|
|
+ locValue := ADataObject.getInteger(APropName);
|
|
|
+ FRecorder.recordChange(ADataObject,locProp);
|
|
|
+ CheckEquals(locValue,ADataObject.getInteger(APropName), 'The change recorder should not modify the object.');
|
|
|
+
|
|
|
+ i := IndexOf(ADataObject,FRecorder.Store);
|
|
|
+ Check( ( i >= 0 ) );
|
|
|
+
|
|
|
+ locListX := FRecorder.Store as ISDOChangedDataObjectListEx;
|
|
|
+ locChangeInfo := locListX.getInfo(i);
|
|
|
+ CheckNotEquals(PtrUInt(nil),PtrUInt(locChangeInfo));
|
|
|
+ CheckEquals(PtrUInt(ADataObject), PtrUInt(locChangeInfo.DataObject));
|
|
|
+ CheckEquals(Ord(ctChange), Ord(locChangeInfo.ChangeType));
|
|
|
+ CheckNotEquals(PtrUInt(nil),PtrUInt(locChangeInfo.ChangeList));
|
|
|
+
|
|
|
+ CheckEquals(1, locChangeInfo.ChangeList.size());
|
|
|
+ locSetting := locChangeInfo.ChangeList.getItem(0);
|
|
|
+ CheckEquals(PtrUInt(locProp), PtrUInt(locSetting.getProperty()));
|
|
|
+ CheckEquals(ADataObject.isNull(locProp), locSetting.isNull());
|
|
|
+ CheckEquals(ADataObject.isSet(locProp), locSetting.isSet());
|
|
|
+ CheckEquals(ADataObject.getInteger(locProp), locSetting.getIntegerValue());
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TChangeRecorder_Test.record_list_int(
|
|
|
+ const ADataObject: ISDODataObject;
|
|
|
+ const APropName: string
|
|
|
+);
|
|
|
+{var
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locValueList : ISDODataObjectList;
|
|
|
+ locSetting : TValueSetting;
|
|
|
+ i : PtrInt;
|
|
|
+ locListX : ISDOChangedDataObjectListEx;
|
|
|
+ locChangeInfo : TDataObjectChangeInfo;}
|
|
|
+begin
|
|
|
+ {locProp := ADataObject.getProperty(APropName);
|
|
|
+ CheckNotEquals(PtrUInt(nil),PtrUInt(locProp),Format('Invalid property : "%s"',[APropName]));
|
|
|
+ CheckEquals(True, locProp.isMany());
|
|
|
+
|
|
|
+ i := IndexOf(ADataObject,FRecorder.Store);
|
|
|
+ CheckEquals(-1,i);
|
|
|
+
|
|
|
+ locValue := ADataObject.getInteger(APropName);
|
|
|
+ FRecorder.recordChange(ADataObject,locProp);
|
|
|
+ CheckEquals(locValue,ADataObject.getInteger(APropName), 'The change recorder should not modify the object.');
|
|
|
+
|
|
|
+ i := IndexOf(ADataObject,FRecorder.Store);
|
|
|
+ Check( ( i >= 0 ) );
|
|
|
+
|
|
|
+ locListX := FRecorder.Store as ISDOChangedDataObjectListEx;
|
|
|
+ locChangeInfo := locListX.getInfo(i);
|
|
|
+ CheckNotEquals(PtrUInt(nil),PtrUInt(locChangeInfo));
|
|
|
+ CheckEquals(PtrUInt(ADataObject), PtrUInt(locChangeInfo.DataObject));
|
|
|
+ CheckEquals(Ord(ctChange), Ord(locChangeInfo.ChangeType));
|
|
|
+ CheckNotEquals(PtrUInt(nil),PtrUInt(locChangeInfo.ChangeList));
|
|
|
+
|
|
|
+ CheckEquals(1, locChangeInfo.ChangeList.size());
|
|
|
+ locSetting := locChangeInfo.ChangeList.getItem(0);
|
|
|
+ CheckEquals(PtrUInt(locProp), PtrUInt(locSetting.getProperty()));
|
|
|
+ CheckEquals(ADataObject.isNull(locProp), locSetting.isNull());
|
|
|
+ CheckEquals(ADataObject.isSet(locProp), locSetting.isSet());
|
|
|
+ CheckEquals(ADataObject.getInteger(locProp), locSetting.getIntegerValue());}
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TChangeRecorder_Test.record_obj(
|
|
|
+ const ADataObject: ISDODataObject;
|
|
|
+ const APropName: string
|
|
|
+);
|
|
|
+var
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locValue : ISDODataObject;
|
|
|
+ locSetting : TValueSetting;
|
|
|
+ i : PtrInt;
|
|
|
+ locListX : ISDOChangedDataObjectListEx;
|
|
|
+ locChangeInfo : TDataObjectChangeInfo;
|
|
|
+begin
|
|
|
+ locProp := ADataObject.getProperty(APropName);
|
|
|
+ CheckNotEquals(PtrUInt(nil),PtrUInt(locProp),Format('Invalid property : "%s"',[APropName]));
|
|
|
+
|
|
|
+ i := IndexOf(ADataObject,FRecorder.Store);
|
|
|
+ CheckEquals(-1,i);
|
|
|
+
|
|
|
+ locValue := ADataObject.getDataObject(APropName);
|
|
|
+ FRecorder.recordChange(ADataObject,locProp);
|
|
|
+ CheckEquals(PtrUInt(locValue),PtrUInt(ADataObject.getDataObject(APropName)), 'The change recorder should not modify the object.');
|
|
|
+
|
|
|
+ i := IndexOf(ADataObject,FRecorder.Store);
|
|
|
+ Check( ( i >= 0 ) );
|
|
|
+
|
|
|
+ locListX := FRecorder.Store as ISDOChangedDataObjectListEx;
|
|
|
+ locChangeInfo := locListX.getInfo(i);
|
|
|
+ CheckNotEquals(PtrUInt(nil),PtrUInt(locChangeInfo));
|
|
|
+ CheckEquals(PtrUInt(ADataObject), PtrUInt(locChangeInfo.DataObject));
|
|
|
+ CheckEquals(Ord(ctChange), Ord(locChangeInfo.ChangeType));
|
|
|
+ CheckNotEquals(PtrUInt(nil),PtrUInt(locChangeInfo.ChangeList));
|
|
|
+
|
|
|
+ CheckEquals(1, locChangeInfo.ChangeList.size());
|
|
|
+ locSetting := locChangeInfo.ChangeList.getItem(0);
|
|
|
+ CheckEquals(PtrUInt(locProp), PtrUInt(locSetting.getProperty()));
|
|
|
+ CheckEquals(ADataObject.isNull(locProp), locSetting.isNull());
|
|
|
+ CheckEquals(ADataObject.isSet(locProp), locSetting.isSet());
|
|
|
+ CheckEquals(PtrUInt(ADataObject.getDataObject(locProp)), PtrUInt(locSetting.getDataObjectValue()));
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TChangeRecorder_Test.record_string(
|
|
|
+ const ADataObject: ISDODataObject;
|
|
|
+ const APropName: string
|
|
|
+);
|
|
|
+var
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locValue : TSDOString;
|
|
|
+ locSetting : TValueSetting;
|
|
|
+ i : PtrInt;
|
|
|
+ locListX : ISDOChangedDataObjectListEx;
|
|
|
+ locChangeInfo : TDataObjectChangeInfo;
|
|
|
+begin
|
|
|
+ locProp := ADataObject.getProperty(APropName);
|
|
|
+ CheckNotEquals(PtrUInt(nil),PtrUInt(locProp),Format('Invalid property : "%s"',[APropName]));
|
|
|
+
|
|
|
+ i := IndexOf(ADataObject,FRecorder.Store);
|
|
|
+ CheckEquals(-1,i);
|
|
|
+
|
|
|
+ locValue := ADataObject.getString(APropName);
|
|
|
+ FRecorder.recordChange(ADataObject,locProp);
|
|
|
+ CheckEquals(locValue,ADataObject.getString(APropName), 'The change recorder should not modify the object.');
|
|
|
+
|
|
|
+ i := IndexOf(ADataObject,FRecorder.Store);
|
|
|
+ Check( ( i >= 0 ) );
|
|
|
+
|
|
|
+ locListX := FRecorder.Store as ISDOChangedDataObjectListEx;
|
|
|
+ locChangeInfo := locListX.getInfo(i);
|
|
|
+ CheckNotEquals(PtrUInt(nil),PtrUInt(locChangeInfo));
|
|
|
+ CheckEquals(PtrUInt(ADataObject), PtrUInt(locChangeInfo.DataObject));
|
|
|
+ CheckEquals(Ord(ctChange), Ord(locChangeInfo.ChangeType));
|
|
|
+ CheckNotEquals(PtrUInt(nil),PtrUInt(locChangeInfo.ChangeList));
|
|
|
+
|
|
|
+ CheckEquals(1, locChangeInfo.ChangeList.size());
|
|
|
+ locSetting := locChangeInfo.ChangeList.getItem(0);
|
|
|
+ CheckEquals(PtrUInt(locProp), PtrUInt(locSetting.getProperty()));
|
|
|
+ CheckEquals(ADataObject.isNull(locProp), locSetting.isNull());
|
|
|
+ CheckEquals(ADataObject.isSet(locProp), locSetting.isSet());
|
|
|
+ CheckEquals(ADataObject.getString(locProp), locSetting.getStringValue());
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TChangeRecorder_Test.SetUp();
|
|
|
+begin
|
|
|
+ inherited;
|
|
|
+ FRecorder := CreateRecorder();
|
|
|
+ FFactory := Create_Factory();
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TChangeRecorder_Test.string_change();
|
|
|
+const
|
|
|
+ LOCAL_PROP = s_string_prop;
|
|
|
+var
|
|
|
+ locObj : ISDODataObject;
|
|
|
+begin
|
|
|
+ locObj := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+
|
|
|
+ record_string(locObj,LOCAL_PROP);
|
|
|
+
|
|
|
+ InitRecorder();
|
|
|
+ locObj.setString(LOCAL_PROP,RandomString(RandomRange(0,1000)));
|
|
|
+ record_string(locObj,LOCAL_PROP);
|
|
|
+
|
|
|
+ InitRecorder();
|
|
|
+ locObj.setString(LOCAL_PROP,'');
|
|
|
+ record_string(locObj,LOCAL_PROP);
|
|
|
+
|
|
|
+ InitRecorder();
|
|
|
+ locObj.setNull(LOCAL_PROP);
|
|
|
+ record_string(locObj,LOCAL_PROP);
|
|
|
+
|
|
|
+ InitRecorder();
|
|
|
+ locObj.setString(LOCAL_PROP,RandomString(RandomRange(0,1000)));
|
|
|
+ record_string(locObj,LOCAL_PROP);
|
|
|
+
|
|
|
+ InitRecorder();
|
|
|
+ locObj.unset(LOCAL_PROP);
|
|
|
+ record_string(locObj,LOCAL_PROP);
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TChangeRecorder_Test.TearDown();
|
|
|
+begin
|
|
|
+ FFactory := nil;
|
|
|
+ FreeAndNil(FRecorder);
|
|
|
+ inherited;
|
|
|
+end;
|
|
|
+
|
|
|
+{ TSDOChangeSummary_Test }
|
|
|
+
|
|
|
+class function TSDOChangeSummary_Test.Create_Factory() : ISDODataFactory;
|
|
|
+var
|
|
|
+ locFactory : ISDODataFactory;
|
|
|
+
|
|
|
+ procedure Add_ObjectA(const AUri : string);
|
|
|
+ var
|
|
|
+ locObj : ISDOType;
|
|
|
+ begin
|
|
|
+ locFactory.AddType(AUri,s_type_object_A,[]);
|
|
|
+ locObj := locFactory.getType(AUri,s_type_object_A);
|
|
|
+ locFactory.addProperty(locObj,s_bool_prop,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType],[]);
|
|
|
+ locFactory.addProperty(locObj,s_bool_propList,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType],[pfIsMany]);
|
|
|
+ locFactory.addProperty(locObj,s_byte_prop,sdo_namespace,SDOTypeDefaultTypeNames[ByteType],[]);
|
|
|
+ locFactory.addProperty(locObj,s_byte_propList,sdo_namespace,SDOTypeDefaultTypeNames[ByteType],[pfIsMany]);
|
|
|
+{$IFDEF HAS_SDO_BYTES}
|
|
|
+ locFactory.addProperty(locObj,s_bytes_prop,sdo_namespace,SDOTypeDefaultTypeNames[BytesType], []);
|
|
|
+ locFactory.addProperty(locObj,s_bytes_propList,sdo_namespace,SDOTypeDefaultTypeNames[BytesType],[pfIsMany]);
|
|
|
+{$ENDIF HAS_SDO_BYTES}
|
|
|
+{$IFDEF HAS_SDO_CHAR}
|
|
|
+ locFactory.addProperty(locObj,s_char_prop,sdo_namespace,SDOTypeDefaultTypeNames[CharacterType], []);
|
|
|
+ locFactory.addProperty(locObj,s_char_propList,sdo_namespace,SDOTypeDefaultTypeNames[CharacterType],[pfIsMany]);
|
|
|
+{$ENDIF HAS_SDO_CHAR}
|
|
|
+{$IFDEF HAS_SDO_CURRENCY}
|
|
|
+ locFactory.addProperty(locObj,s_currency_prop,sdo_namespace,SDOTypeDefaultTypeNames[CurrencyType], []);
|
|
|
+ locFactory.addProperty(locObj,s_currency_propList,sdo_namespace,SDOTypeDefaultTypeNames[CurrencyType],[pfIsMany]);
|
|
|
+{$ENDIF HAS_SDO_CURRENCY}
|
|
|
+ locFactory.addProperty(locObj,s_date_prop,sdo_namespace,SDOTypeDefaultTypeNames[DateTimeType],[]);
|
|
|
+ locFactory.addProperty(locObj,s_date_propList,sdo_namespace,SDOTypeDefaultTypeNames[DateTimeType],[pfIsMany]);
|
|
|
+{$IFDEF HAS_SDO_DOUBLE}
|
|
|
+ locFactory.addProperty(locObj,s_double_prop,sdo_namespace,SDOTypeDefaultTypeNames[DoubleType], []);
|
|
|
+ locFactory.addProperty(locObj,s_double_propList,sdo_namespace,SDOTypeDefaultTypeNames[DoubleType],[pfIsMany]);
|
|
|
+{$ENDIF HAS_SDO_DOUBLE}
|
|
|
+{$IFDEF HAS_SDO_FLOAT}
|
|
|
+ locFactory.addProperty(locObj,s_float_prop,sdo_namespace,SDOTypeDefaultTypeNames[FloatType], []);
|
|
|
+ locFactory.addProperty(locObj,s_float_propList,sdo_namespace,SDOTypeDefaultTypeNames[FloatType],[pfIsMany]);
|
|
|
+{$ENDIF HAS_SDO_FLOAT}
|
|
|
+ locFactory.addProperty(locObj,s_integer_prop,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType],[]);
|
|
|
+ locFactory.addProperty(locObj,s_integer_propList,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType],[pfIsMany]);
|
|
|
+{$IFDEF HAS_SDO_LONG}
|
|
|
+ locFactory.addProperty(locObj,s_long_prop,sdo_namespace,SDOTypeDefaultTypeNames[LongType], []);
|
|
|
+ locFactory.addProperty(locObj,s_long_propList,sdo_namespace,SDOTypeDefaultTypeNames[LongType],[pfIsMany]);
|
|
|
+{$ENDIF HAS_SDO_LONG}
|
|
|
+{$IFDEF HAS_SDO_SHORT}
|
|
|
+ locFactory.addProperty(locObj,s_short_prop,sdo_namespace,SDOTypeDefaultTypeNames[ShortType], []);
|
|
|
+ locFactory.addProperty(locObj,s_short_propList,sdo_namespace,SDOTypeDefaultTypeNames[ShortType],[pfIsMany]);
|
|
|
+{$ENDIF HAS_SDO_SHORT}
|
|
|
+ locFactory.addProperty(locObj,s_string_prop,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
|
|
|
+ locFactory.addProperty(locObj,s_string_propList,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsMany]);
|
|
|
+ end;
|
|
|
+begin
|
|
|
+ locFactory := TSDODataFactory.Create() as ISDODataFactory;
|
|
|
+ Add_ObjectA(s_uri);
|
|
|
+
|
|
|
+ Result := locFactory;
|
|
|
+end;
|
|
|
+
|
|
|
+function TSDOChangeSummary_Test.CreateRecorder(): TChangeRecorder;
|
|
|
+var
|
|
|
+ ls : ISDOChangedDataObjectList;
|
|
|
+begin
|
|
|
+ ls := TSDOChangedDataObjectList.Create();
|
|
|
+ FChangeSummary := TSDOChangeSummary.Create(ls);
|
|
|
+ Result := TChangeRecorder.Create(ls, FChangeSummary);
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.InitRecorder();
|
|
|
+begin
|
|
|
+ FChangeSummary := nil;
|
|
|
+ FreeAndNil(FRecorder);
|
|
|
+ FRecorder := CreateRecorder();
|
|
|
+ //FChangeSummary := TSDOChangeSummary.Create(FRecorder.Store);
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.SetUp();
|
|
|
+begin
|
|
|
+ inherited;
|
|
|
+ FRecorder := CreateRecorder();
|
|
|
+ FFactory := Create_Factory();
|
|
|
+ FFactoryX := Create_FactoryX();
|
|
|
+ InitRecorder();
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.TearDown();
|
|
|
+begin
|
|
|
+ FChangeSummary := nil;
|
|
|
+ FreeAndNil(FRecorder);
|
|
|
+ FFactoryX := nil;
|
|
|
+ FFactory := nil;
|
|
|
+ inherited;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.logging_state();
|
|
|
+begin
|
|
|
+ CheckEquals(False,FChangeSummary.isLogging(),'By default, the logging should b OFF');
|
|
|
+
|
|
|
+ FChangeSummary.endLogging();
|
|
|
+ CheckEquals(False,FChangeSummary.isLogging());
|
|
|
+ FChangeSummary.endLogging();
|
|
|
+ FChangeSummary.endLogging();
|
|
|
+ CheckEquals(False,FChangeSummary.isLogging());
|
|
|
+
|
|
|
+ FChangeSummary.beginLogging();
|
|
|
+ CheckEquals(True,FChangeSummary.isLogging());
|
|
|
+ FChangeSummary.beginLogging();
|
|
|
+ FChangeSummary.beginLogging();
|
|
|
+ CheckEquals(True,FChangeSummary.isLogging());
|
|
|
+
|
|
|
+ FChangeSummary.endLogging();
|
|
|
+ CheckEquals(False,FChangeSummary.isLogging());
|
|
|
+
|
|
|
+ FChangeSummary.beginLogging();
|
|
|
+ CheckEquals(True,FChangeSummary.isLogging());
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.isCreated();
|
|
|
+var
|
|
|
+ locObj : ISDODataObject;
|
|
|
+begin
|
|
|
+ locObj := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ FChangeSummary.beginLogging();
|
|
|
+
|
|
|
+ CheckEquals(False,FChangeSummary.isCreated(nil));
|
|
|
+ CheckEquals(False,FChangeSummary.isCreated(locObj));
|
|
|
+ FRecorder.recordCreation(locObj);
|
|
|
+ CheckEquals(True,FChangeSummary.isCreated(locObj));
|
|
|
+
|
|
|
+ //-------------------------
|
|
|
+ InitRecorder();
|
|
|
+ FChangeSummary.beginLogging();
|
|
|
+ CheckEquals(False,FChangeSummary.isCreated(locObj));
|
|
|
+ FRecorder.recordChange(locObj,locObj.getProperty(s_integer_prop));
|
|
|
+ CheckEquals(False,FChangeSummary.isCreated(locObj));
|
|
|
+
|
|
|
+ //-------------------------
|
|
|
+ InitRecorder();
|
|
|
+ FChangeSummary.beginLogging();
|
|
|
+ CheckEquals(False,FChangeSummary.isCreated(locObj));
|
|
|
+ FRecorder.recordDeletion(locObj);
|
|
|
+ CheckEquals(False,FChangeSummary.isCreated(locObj));
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.isModified();
|
|
|
+var
|
|
|
+ locObj : ISDODataObject;
|
|
|
+begin
|
|
|
+ locObj := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ FChangeSummary.beginLogging();
|
|
|
+
|
|
|
+ CheckEquals(False,FChangeSummary.isModified(nil));
|
|
|
+ CheckEquals(False,FChangeSummary.isModified(locObj));
|
|
|
+ FRecorder.recordChange(locObj,locObj.getProperty(s_integer_prop));
|
|
|
+ CheckEquals(True,FChangeSummary.isModified(locObj));
|
|
|
+
|
|
|
+ //-------------------------
|
|
|
+ InitRecorder();
|
|
|
+ FChangeSummary.beginLogging();
|
|
|
+ CheckEquals(False,FChangeSummary.isModified(locObj));
|
|
|
+ FRecorder.recordCreation(locObj);
|
|
|
+ CheckEquals(False,FChangeSummary.isModified(locObj));
|
|
|
+
|
|
|
+ //-------------------------
|
|
|
+ InitRecorder();
|
|
|
+ FChangeSummary.beginLogging();
|
|
|
+ CheckEquals(False,FChangeSummary.isModified(locObj));
|
|
|
+ FRecorder.recordDeletion(locObj);
|
|
|
+ CheckEquals(False,FChangeSummary.isModified(locObj));
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.isDeleted();
|
|
|
+var
|
|
|
+ locObj : ISDODataObject;
|
|
|
+ ls : ISDOChangedDataObjectList;
|
|
|
+ i, c, locFoundIdx : PtrInt;
|
|
|
+ locFound : Boolean;
|
|
|
+begin
|
|
|
+ locObj := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ locObj.setInteger(s_integer_prop,RandomRange(-1210,1210));
|
|
|
+ locObj.getList(s_integer_propList).append(RandomRange(-1210,1210));
|
|
|
+ locObj.getList(s_integer_propList).append(RandomRange(-1210,1210));
|
|
|
+ locObj.setString(s_string_prop,RandomString(1000));
|
|
|
+ locObj.getList(s_string_propList).append(RandomString(1210));
|
|
|
+ locObj.getList(s_string_propList).append(RandomString(1210));
|
|
|
+
|
|
|
+ FChangeSummary.beginLogging();
|
|
|
+ CheckEquals(False,FChangeSummary.isDeleted(nil));
|
|
|
+ CheckEquals(False,FChangeSummary.isDeleted(locObj));
|
|
|
+ FRecorder.recordDeletion(locObj);
|
|
|
+ CheckEquals(True,FChangeSummary.isDeleted(locObj));
|
|
|
+ ls := FChangeSummary.getChangedDataObjects();
|
|
|
+ Check( ls.size() > 0 );
|
|
|
+ c := ls.size();
|
|
|
+ locFoundIdx := -1;
|
|
|
+ locFound := False;
|
|
|
+ for i := 0 to Pred(c) do begin
|
|
|
+ if ( ls.getType(i) = ctDelete ) and ( locObj = ls.getDataObject(i) ) then begin
|
|
|
+ locFoundIdx := i;
|
|
|
+ locFound := True;
|
|
|
+ Break;
|
|
|
+ end;
|
|
|
+ end;
|
|
|
+ CheckEquals(True,locFound);
|
|
|
+ if ( locFoundIdx < Pred(c) ) then begin
|
|
|
+ locFound := False;
|
|
|
+ for i := Succ(locFoundIdx) to Pred(c) do begin
|
|
|
+ if ( ls.getType(i) = ctDelete ) and ( locObj = ls.getDataObject(i) ) then begin
|
|
|
+ locFound := True;
|
|
|
+ Break;
|
|
|
+ end;
|
|
|
+ end;
|
|
|
+ CheckEquals(False, locFound, 'There should be _only one copy_ of the deleted object.');
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.getChangedDataObjects();
|
|
|
+const LOCAL_PROP = s_integer_prop;
|
|
|
+var
|
|
|
+ ls : ISDOChangedDataObjectList;
|
|
|
+ vobj : array of ISDODataObject;
|
|
|
+ vct : array of TChangeType;
|
|
|
+ l, i, j : PtrInt;
|
|
|
+ locProp : ISDOProperty;
|
|
|
+begin
|
|
|
+ ls := FChangeSummary.getChangedDataObjects();
|
|
|
+ CheckNotEquals(PtrUInt(nil),PtrUInt(ls));
|
|
|
+ CheckEquals(0,ls.size());
|
|
|
+
|
|
|
+ l := RandomRange(0,1000);
|
|
|
+ if ( l > 0 ) then begin
|
|
|
+ SetLength(vobj,l);
|
|
|
+ try
|
|
|
+ SetLength(vct,l);
|
|
|
+ for i := 0 to Pred(l) do begin
|
|
|
+ vobj[i] := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ vobj[i].setInteger(s_integer_prop,i + 1);
|
|
|
+ vct[i] := TChangeType(RandomRange(Ord(ctCreate),Ord(ctDelete)));
|
|
|
+ end;
|
|
|
+ locProp := FFactory.getType(s_uri,s_type_object_A).getProperty(LOCAL_PROP);
|
|
|
+ for i := 0 to Pred(l) do begin
|
|
|
+ case vct[i] of
|
|
|
+ ctCreate : FRecorder.recordCreation(vobj[i]);
|
|
|
+ ctChange : FRecorder.recordChange(vobj[i],vobj[i].getProperty(s_integer_prop));
|
|
|
+ ctDelete : FRecorder.recordDeletion(vobj[i]);
|
|
|
+ end;
|
|
|
+ end;
|
|
|
+
|
|
|
+ ls := FChangeSummary.getChangedDataObjects();
|
|
|
+ CheckEquals(l,ls.size());
|
|
|
+ for i := 0 to Pred(l) do begin
|
|
|
+ j := IndexOf(vobj[i],ls);
|
|
|
+ Check( ( j >= 0 ) );
|
|
|
+ CheckEquals(Ord(vct[i]), Ord(ls.getType(j)));
|
|
|
+ end;
|
|
|
+ finally
|
|
|
+ SetLength(vct,0);
|
|
|
+ SetLength(vobj,0);
|
|
|
+ end;
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.getOldValues();
|
|
|
+var
|
|
|
+ locObjA, locObjB : ISDODataObject;
|
|
|
+ ls : ISDOSettingList;
|
|
|
+ locPropInt, locPropString : ISDOProperty;
|
|
|
+begin
|
|
|
+ locPropInt := FFactory.getType(s_uri,s_type_object_A).getProperty(s_integer_prop);
|
|
|
+ locPropString := FFactory.getType(s_uri,s_type_object_A).getProperty(s_string_prop);
|
|
|
+ locObjA := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ locObjB := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ FChangeSummary.beginLogging();
|
|
|
+
|
|
|
+ ls := FChangeSummary.getOldValues(locObjA);
|
|
|
+ CheckEquals(0, ls.size());
|
|
|
+ ls := FChangeSummary.getOldValues(locObjB);
|
|
|
+ CheckEquals(0, ls.size());
|
|
|
+
|
|
|
+ locObjA.setInteger(locPropInt,1210);
|
|
|
+ FRecorder.recordChange(locObjA,locPropInt);
|
|
|
+ ls := FChangeSummary.getOldValues(locObjA);
|
|
|
+ CheckEquals(1,ls.size());
|
|
|
+
|
|
|
+ locObjB.setInteger(locPropInt,1210);
|
|
|
+ FRecorder.recordChange(locObjB,locPropInt);
|
|
|
+ ls := FChangeSummary.getOldValues(locObjA);
|
|
|
+ CheckEquals(1,ls.size());
|
|
|
+
|
|
|
+ ls := FChangeSummary.getOldValues(locObjB);
|
|
|
+ CheckEquals(1,ls.size());
|
|
|
+
|
|
|
+ locObjA.setString(locPropString,RandomString(1000));
|
|
|
+ FRecorder.recordChange(locObjA,locPropString);
|
|
|
+ ls := FChangeSummary.getOldValues(locObjA);
|
|
|
+ CheckEquals(2,ls.size());
|
|
|
+
|
|
|
+ ls := FChangeSummary.getOldValues(locObjB);
|
|
|
+ CheckEquals(1,ls.size());
|
|
|
+
|
|
|
+ locObjB.setString(locPropString,RandomString(1000));
|
|
|
+ FRecorder.recordChange(locObjB,locPropString);
|
|
|
+ ls := FChangeSummary.getOldValues(locObjA);
|
|
|
+ CheckEquals(2,ls.size());
|
|
|
+
|
|
|
+ ls := FChangeSummary.getOldValues(locObjB);
|
|
|
+ CheckEquals(2,ls.size());
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.getOldValue();
|
|
|
+var
|
|
|
+ locObjA, locObjB : ISDODataObject;
|
|
|
+ locPropInt, locPropString : ISDOProperty;
|
|
|
+ locSetting : TValueSetting;
|
|
|
+begin
|
|
|
+ locPropInt := FFactory.getType(s_uri,s_type_object_A).getProperty(s_integer_prop);
|
|
|
+ locPropString := FFactory.getType(s_uri,s_type_object_A).getProperty(s_string_prop);
|
|
|
+ locObjA := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ locObjB := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ FChangeSummary.beginLogging();
|
|
|
+
|
|
|
+ CheckEquals(PtrUInt(nil), PtrUInt(FChangeSummary.getOldValue(locObjA,locPropInt)));
|
|
|
+ CheckEquals(PtrUInt(nil), PtrUInt(FChangeSummary.getOldValue(locObjA,locPropString)));
|
|
|
+
|
|
|
+ locObjA.setInteger(locPropInt,1210);
|
|
|
+ FRecorder.recordChange(locObjA,locPropInt);
|
|
|
+ locSetting := FChangeSummary.getOldValue(locObjA,locPropInt);
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting));
|
|
|
+ CheckEquals(PtrUInt(locPropInt), PtrUInt(locSetting.getProperty()));
|
|
|
+ CheckEquals(PtrUInt(nil), PtrUInt(FChangeSummary.getOldValue(locObjA,locPropString)));
|
|
|
+
|
|
|
+ locObjB.setInteger(locPropInt,1210);
|
|
|
+ FRecorder.recordChange(locObjB,locPropInt);
|
|
|
+ locSetting := FChangeSummary.getOldValue(locObjB,locPropInt);
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting));
|
|
|
+ CheckEquals(PtrUInt(locPropInt), PtrUInt(locSetting.getProperty()));
|
|
|
+ CheckEquals(PtrUInt(nil), PtrUInt(FChangeSummary.getOldValue(locObjB,locPropString)));
|
|
|
+
|
|
|
+
|
|
|
+ locObjA.setString(locPropString,RandomString(1000));
|
|
|
+ FRecorder.recordChange(locObjA,locPropString);
|
|
|
+ locSetting := FChangeSummary.getOldValue(locObjA,locPropInt);
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting));
|
|
|
+ CheckEquals(PtrUInt(locPropInt), PtrUInt(locSetting.getProperty()));
|
|
|
+ locSetting := FChangeSummary.getOldValue(locObjA,locPropString);
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting));
|
|
|
+ CheckEquals(PtrUInt(locPropString), PtrUInt(locSetting.getProperty()));
|
|
|
+
|
|
|
+
|
|
|
+ locObjB.setString(locPropString,RandomString(1000));
|
|
|
+ FRecorder.recordChange(locObjB,locPropString);
|
|
|
+ locSetting := FChangeSummary.getOldValue(locObjB,locPropInt);
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting));
|
|
|
+ CheckEquals(PtrUInt(locPropInt), PtrUInt(locSetting.getProperty()));
|
|
|
+ locSetting := FChangeSummary.getOldValue(locObjB,locPropString);
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting));
|
|
|
+ CheckEquals(PtrUInt(locPropString), PtrUInt(locSetting.getProperty()));
|
|
|
+end;
|
|
|
+
|
|
|
+type TAccesMode = ( amShallow, amDeep );
|
|
|
+function find(
|
|
|
+ const ADataObject : ISDODataObject;
|
|
|
+ const AList : ISDOChangedDataObjectList;
|
|
|
+ const ACompareMode : TAccesMode
|
|
|
+) : Integer;
|
|
|
+var
|
|
|
+ i, c : PtrInt;
|
|
|
+begin
|
|
|
+ Result := -1;
|
|
|
+ c := AList.size();
|
|
|
+ if ( c > 0 ) then begin
|
|
|
+ if ( ACompareMode = amShallow ) then begin
|
|
|
+ for i := 0 to Pred(c) do begin
|
|
|
+ if TSDOEqualityHelper.equalShallow(ADataObject,AList.getDataObject(i)) then begin
|
|
|
+ Result := i;
|
|
|
+ Break;
|
|
|
+ end;
|
|
|
+ end;
|
|
|
+ end else begin
|
|
|
+ for i := 0 to Pred(c) do begin
|
|
|
+ if TSDOEqualityHelper.equal(ADataObject,AList.getDataObject(i)) then begin
|
|
|
+ Result := i;
|
|
|
+ Break;
|
|
|
+ end;
|
|
|
+ end;
|
|
|
+ end;
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.getOldContainer();
|
|
|
+var
|
|
|
+ locA, locB, locB1, locC : ISDODataObject;
|
|
|
+ locCS : ISDOChangeSummary;
|
|
|
+begin
|
|
|
+ locA := FFactoryX.createNew(s_uri,s_type_object_A);
|
|
|
+ locCS := locA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locB := FFactoryX.createNew(s_uri,s_type_object_B);
|
|
|
+ locB1 := FFactoryX.createNew(s_uri,s_type_object_B);
|
|
|
+ locC := FFactoryX.createNew(s_uri,s_type_object_C);
|
|
|
+
|
|
|
+ CheckEquals(PtrUInt(nil), PtrUInt(locCS.getOldContainer(locA)));
|
|
|
+ CheckEquals(PtrUInt(nil), PtrUInt(locCS.getOldContainer(locB)));
|
|
|
+ CheckEquals(PtrUInt(nil), PtrUInt(locCS.getOldContainer(locC)));
|
|
|
+
|
|
|
+ locA.setDataObject(s_object_prop,locB);
|
|
|
+ CheckEquals(PtrUInt(nil), PtrUInt(locCS.getOldContainer(locA)));
|
|
|
+ CheckEquals(PtrUInt(locA), PtrUInt(locCS.getOldContainer(locB)));
|
|
|
+ CheckEquals(PtrUInt(nil), PtrUInt(locCS.getOldContainer(locC)));
|
|
|
+
|
|
|
+ locA.setDataObject(s_object_prop,locB1);
|
|
|
+ CheckEquals(PtrUInt(nil), PtrUInt(locCS.getOldContainer(locA)));
|
|
|
+ CheckEquals(PtrUInt(nil), PtrUInt(locCS.getOldContainer(locB)), '"locB" should no longer be referenced by the ChangeSummary at this stade( create + delete = 0 ).');
|
|
|
+ CheckEquals(PtrUInt(nil), PtrUInt(locCS.getOldContainer(locC)));
|
|
|
+
|
|
|
+ locB1.setDataObject(s_object_prop,locC);
|
|
|
+ CheckEquals(PtrUInt(nil), PtrUInt(locCS.getOldContainer(locA)));
|
|
|
+ CheckEquals(PtrUInt(nil), PtrUInt(locCS.getOldContainer(locB)), '"locB" should no longer be referenced by the ChangeSummary at this stade( create + delete = 0 ).');
|
|
|
+ CheckEquals(PtrUInt(locB1), PtrUInt(locCS.getOldContainer(locC)));
|
|
|
+ locB1.setDataObject(s_object_prop,nil);
|
|
|
+ CheckEquals(PtrUInt(nil), PtrUInt(locCS.getOldContainer(locA)));
|
|
|
+ CheckEquals(PtrUInt(nil), PtrUInt(locCS.getOldContainer(locB)), '"locB" should no longer be referenced by the ChangeSummary at this stade( create + delete = 0 ).');
|
|
|
+ CheckEquals(PtrUInt(nil), PtrUInt(locCS.getOldContainer(locC)), '"locC" should no longer be referenced by the ChangeSummary at this stade( create + delete = 0 ).');
|
|
|
+
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.getOldContainmentProperty();
|
|
|
+
|
|
|
+ procedure Check_dont_have_old_prop(const ADataObject : ISDODataObject; const ACS : ISDOChangeSummary);
|
|
|
+ var
|
|
|
+ ok : Boolean;
|
|
|
+ begin
|
|
|
+ ok := False;
|
|
|
+ try
|
|
|
+ ACS.getOldContainmentProperty(ADataObject);
|
|
|
+ except
|
|
|
+ on e : ESDOInvalidStateOperationException do
|
|
|
+ ok := True;
|
|
|
+ end;
|
|
|
+ Check(ok, 'this object should not have a Old Containment Property.');
|
|
|
+ end;
|
|
|
+
|
|
|
+var
|
|
|
+ locA, locB, locB1, locC : ISDODataObject;
|
|
|
+ locCS : ISDOChangeSummary;
|
|
|
+begin
|
|
|
+ locA := FFactoryX.createNew(s_uri,s_type_object_A);
|
|
|
+ locCS := locA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locB := FFactoryX.createNew(s_uri,s_type_object_B);
|
|
|
+ locB1 := FFactoryX.createNew(s_uri,s_type_object_B);
|
|
|
+ locC := FFactoryX.createNew(s_uri,s_type_object_C);
|
|
|
+
|
|
|
+ Check_dont_have_old_prop(locA,locCS);
|
|
|
+ Check_dont_have_old_prop(locB,locCS);
|
|
|
+ Check_dont_have_old_prop(locC,locCS);
|
|
|
+
|
|
|
+ locA.setDataObject(s_object_prop,locB);
|
|
|
+ Check_dont_have_old_prop(locA,locCS);
|
|
|
+ Check_dont_have_old_prop(locC,locCS);
|
|
|
+
|
|
|
+ locA.setDataObject(s_object_prop,locB1);
|
|
|
+ Check_dont_have_old_prop(locA,locCS);
|
|
|
+ Check_dont_have_old_prop(locB,locCS);
|
|
|
+ Check_dont_have_old_prop(locC,locCS);
|
|
|
+
|
|
|
+ locB1.setDataObject(s_object_prop,locC);
|
|
|
+ Check_dont_have_old_prop(locA,locCS);
|
|
|
+ Check_dont_have_old_prop(locB,locCS);
|
|
|
+ locB1.setDataObject(s_object_prop,nil);
|
|
|
+ Check_dont_have_old_prop(locA,locCS);
|
|
|
+ Check_dont_have_old_prop(locB,locCS);
|
|
|
+ Check_dont_have_old_prop(locC,locCS);
|
|
|
+end;
|
|
|
+
|
|
|
+class function TSDOChangeSummary_Test.Create_FactoryX(): ISDODataFactory;
|
|
|
+var
|
|
|
+ locFactory : ISDODataFactory;
|
|
|
+
|
|
|
+ procedure Add_Objects(const AUri : string);
|
|
|
+ var
|
|
|
+ locObj : ISDOType;
|
|
|
+ begin
|
|
|
+ locFactory.AddType(AUri,s_type_object_C,[]);
|
|
|
+ locObj := locFactory.getType(AUri,s_type_object_C);
|
|
|
+ locFactory.addProperty(locObj,s_bool_prop,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType], []);
|
|
|
+ locFactory.addProperty(locObj,s_byte_prop,sdo_namespace,SDOTypeDefaultTypeNames[ByteType], []);
|
|
|
+{$IFDEF HAS_SDO_BYTES}
|
|
|
+ locFactory.addProperty(locObj,s_bytes_prop,sdo_namespace,SDOTypeDefaultTypeNames[BytesType], []);
|
|
|
+{$ENDIF HAS_SDO_BYTES}
|
|
|
+{$IFDEF HAS_SDO_CHAR}
|
|
|
+ locFactory.addProperty(locObj,s_char_prop,sdo_namespace,SDOTypeDefaultTypeNames[CharacterType], []);
|
|
|
+{$ENDIF HAS_SDO_CHAR}
|
|
|
+{$IFDEF HAS_SDO_CURRENCY}
|
|
|
+ locFactory.addProperty(locObj,s_currency_prop,sdo_namespace,SDOTypeDefaultTypeNames[CurrencyType], []);
|
|
|
+{$ENDIF HAS_SDO_CURRENCY}
|
|
|
+ locFactory.addProperty(locObj,s_date_prop,sdo_namespace,SDOTypeDefaultTypeNames[DateTimeType], []);
|
|
|
+{$IFDEF HAS_SDO_DOUBLE}
|
|
|
+ locFactory.addProperty(locObj,s_double_prop,sdo_namespace,SDOTypeDefaultTypeNames[DoubleType], []);
|
|
|
+{$ENDIF HAS_SDO_DOUBLE}
|
|
|
+{$IFDEF HAS_SDO_FLOAT}
|
|
|
+ locFactory.addProperty(locObj,s_float_prop,sdo_namespace,SDOTypeDefaultTypeNames[FloatType], []);
|
|
|
+{$ENDIF HAS_SDO_FLOAT}
|
|
|
+ locFactory.addProperty(locObj,s_integer_prop,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType], []);
|
|
|
+{$IFDEF HAS_SDO_LONG}
|
|
|
+ locFactory.addProperty(locObj,s_long_prop,sdo_namespace,SDOTypeDefaultTypeNames[LongType], []);
|
|
|
+{$ENDIF HAS_SDO_LONG}
|
|
|
+{$IFDEF HAS_SDO_SHORT}
|
|
|
+ locFactory.addProperty(locObj,s_short_prop,sdo_namespace,SDOTypeDefaultTypeNames[ShortType], []);
|
|
|
+{$ENDIF HAS_SDO_SHORT}
|
|
|
+ locFactory.addProperty(locObj,s_string_prop,sdo_namespace,SDOTypeDefaultTypeNames[StringType], []);
|
|
|
+
|
|
|
+ locFactory.AddType(AUri,s_type_object_B,[]);
|
|
|
+ locObj := locFactory.getType(AUri,s_type_object_B);
|
|
|
+ locFactory.addProperty(locObj,s_bool_prop,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType], []);
|
|
|
+ locFactory.addProperty(locObj,s_byte_prop,sdo_namespace,SDOTypeDefaultTypeNames[ByteType], []);
|
|
|
+{$IFDEF HAS_SDO_BYTES}
|
|
|
+ locFactory.addProperty(locObj,s_bytes_prop,sdo_namespace,SDOTypeDefaultTypeNames[BytesType], []);
|
|
|
+{$ENDIF HAS_SDO_BYTES}
|
|
|
+{$IFDEF HAS_SDO_CHAR}
|
|
|
+ locFactory.addProperty(locObj,s_char_prop,sdo_namespace,SDOTypeDefaultTypeNames[CharacterType], []);
|
|
|
+{$ENDIF HAS_SDO_CHAR}
|
|
|
+{$IFDEF HAS_SDO_CURRENCY}
|
|
|
+ locFactory.addProperty(locObj,s_currency_prop,sdo_namespace,SDOTypeDefaultTypeNames[CurrencyType], []);
|
|
|
+{$ENDIF HAS_SDO_CURRENCY}
|
|
|
+ locFactory.addProperty(locObj,s_date_prop,sdo_namespace,SDOTypeDefaultTypeNames[DateTimeType], []);
|
|
|
+{$IFDEF HAS_SDO_DOUBLE}
|
|
|
+ locFactory.addProperty(locObj,s_double_prop,sdo_namespace,SDOTypeDefaultTypeNames[DoubleType], []);
|
|
|
+{$ENDIF HAS_SDO_DOUBLE}
|
|
|
+{$IFDEF HAS_SDO_FLOAT}
|
|
|
+ locFactory.addProperty(locObj,s_float_prop,sdo_namespace,SDOTypeDefaultTypeNames[FloatType], []);
|
|
|
+{$ENDIF HAS_SDO_FLOAT}
|
|
|
+ locFactory.addProperty(locObj,s_integer_prop,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType], []);
|
|
|
+{$IFDEF HAS_SDO_LONG}
|
|
|
+ locFactory.addProperty(locObj,s_long_prop,sdo_namespace,SDOTypeDefaultTypeNames[LongType], []);
|
|
|
+{$ENDIF HAS_SDO_LONG}
|
|
|
+{$IFDEF HAS_SDO_SHORT}
|
|
|
+ locFactory.addProperty(locObj,s_short_prop,sdo_namespace,SDOTypeDefaultTypeNames[ShortType], []);
|
|
|
+{$ENDIF HAS_SDO_SHORT}
|
|
|
+ locFactory.addProperty(locObj,s_string_prop,sdo_namespace,SDOTypeDefaultTypeNames[StringType], []);
|
|
|
+ locFactory.addProperty(locObj,s_object_prop,s_uri,s_type_object_C,[pfIsContainment]);
|
|
|
+
|
|
|
+ locFactory.AddType(AUri,s_type_object_A,[]);
|
|
|
+ locObj := locFactory.getType(AUri,s_type_object_A);
|
|
|
+ locFactory.addProperty(locObj,s_bool_prop,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType], []);
|
|
|
+ locFactory.addProperty(locObj,s_bool_propList,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType],[pfIsMany]);
|
|
|
+ locFactory.addProperty(locObj,s_byte_prop,sdo_namespace,SDOTypeDefaultTypeNames[ByteType], []);
|
|
|
+ locFactory.addProperty(locObj,s_byte_propList,sdo_namespace,SDOTypeDefaultTypeNames[ByteType], [pfIsMany]);
|
|
|
+{$IFDEF HAS_SDO_BYTES}
|
|
|
+ locFactory.addProperty(locObj,s_bytes_prop,sdo_namespace,SDOTypeDefaultTypeNames[BytesType], []);
|
|
|
+ locFactory.addProperty(locObj,s_bytes_propList,sdo_namespace,SDOTypeDefaultTypeNames[BytesType],[pfIsMany]);
|
|
|
+{$ENDIF HAS_SDO_BYTES}
|
|
|
+{$IFDEF HAS_SDO_CHAR}
|
|
|
+ locFactory.addProperty(locObj,s_char_prop,sdo_namespace,SDOTypeDefaultTypeNames[CharacterType], []);
|
|
|
+ locFactory.addProperty(locObj,s_char_propList,sdo_namespace,SDOTypeDefaultTypeNames[CharacterType],[pfIsMany]);
|
|
|
+{$ENDIF HAS_SDO_CHAR}
|
|
|
+{$IFDEF HAS_SDO_CURRENCY}
|
|
|
+ locFactory.addProperty(locObj,s_currency_prop,sdo_namespace,SDOTypeDefaultTypeNames[CurrencyType], []);
|
|
|
+ locFactory.addProperty(locObj,s_currency_propList,sdo_namespace,SDOTypeDefaultTypeNames[CurrencyType],[pfIsMany]);
|
|
|
+{$ENDIF HAS_SDO_CURRENCY}
|
|
|
+ locFactory.addProperty(locObj,s_date_prop,sdo_namespace,SDOTypeDefaultTypeNames[DateTimeType], []);
|
|
|
+ locFactory.addProperty(locObj,s_date_propList,sdo_namespace,SDOTypeDefaultTypeNames[DateTimeType], [pfIsMany]);
|
|
|
+{$IFDEF HAS_SDO_DOUBLE}
|
|
|
+ locFactory.addProperty(locObj,s_double_prop,sdo_namespace,SDOTypeDefaultTypeNames[DoubleType], []);
|
|
|
+ locFactory.addProperty(locObj,s_double_propList,sdo_namespace,SDOTypeDefaultTypeNames[DoubleType],[pfIsMany]);
|
|
|
+{$ENDIF HAS_SDO_DOUBLE}
|
|
|
+{$IFDEF HAS_SDO_FLOAT}
|
|
|
+ locFactory.addProperty(locObj,s_float_prop,sdo_namespace,SDOTypeDefaultTypeNames[FloatType], []);
|
|
|
+ locFactory.addProperty(locObj,s_float_propList,sdo_namespace,SDOTypeDefaultTypeNames[FloatType],[pfIsMany]);
|
|
|
+{$ENDIF HAS_SDO_FLOAT}
|
|
|
+ locFactory.addProperty(locObj,s_integer_prop,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType], []);
|
|
|
+ locFactory.addProperty(locObj,s_integer_propList,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType],[pfIsMany]);
|
|
|
+{$IFDEF HAS_SDO_LONG}
|
|
|
+ locFactory.addProperty(locObj,s_long_prop,sdo_namespace,SDOTypeDefaultTypeNames[LongType], []);
|
|
|
+ locFactory.addProperty(locObj,s_long_propList,sdo_namespace,SDOTypeDefaultTypeNames[LongType],[pfIsMany]);
|
|
|
+{$ENDIF HAS_SDO_LONG}
|
|
|
+{$IFDEF HAS_SDO_SHORT}
|
|
|
+ locFactory.addProperty(locObj,s_short_prop,sdo_namespace,SDOTypeDefaultTypeNames[ShortType], []);
|
|
|
+ locFactory.addProperty(locObj,s_short_propList,sdo_namespace,SDOTypeDefaultTypeNames[ShortType],[pfIsMany]);
|
|
|
+{$ENDIF HAS_SDO_SHORT}
|
|
|
+ locFactory.addProperty(locObj,s_string_prop,sdo_namespace,SDOTypeDefaultTypeNames[StringType], []);
|
|
|
+ locFactory.addProperty(locObj,s_string_propList,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsMany]);
|
|
|
+ locFactory.addProperty(locObj,s_object_prop,s_uri,s_type_object_B,[pfIsContainment]);
|
|
|
+ locFactory.addProperty(locObj,s_object_ref_prop,s_uri,s_type_object_B,[]);
|
|
|
+ locFactory.addProperty(locObj,s_changesummary_prop,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly]);
|
|
|
+
|
|
|
+ end;
|
|
|
+begin
|
|
|
+ locFactory := TSDODataFactory.Create() as ISDODataFactory;
|
|
|
+ Add_Objects(s_uri);
|
|
|
+
|
|
|
+ Result := locFactory;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.isDeleted_nested();
|
|
|
+ procedure Check_DeletedObject(const AObj : ISDODataObject; const AList : ISDOChangedDataObjectList);
|
|
|
+ var
|
|
|
+ i, c, locFoundIdx : PtrInt;
|
|
|
+ locFound : Boolean;
|
|
|
+ begin
|
|
|
+ Check( AList.size() > 0 );
|
|
|
+ c := AList.size();
|
|
|
+ locFoundIdx := -1;
|
|
|
+ locFound := False;
|
|
|
+ for i := 0 to Pred(c) do begin
|
|
|
+ if ( AList.getType(i) = ctDelete ) and ( AObj = AList.getDataObject(i) ) then begin
|
|
|
+ locFoundIdx := i;
|
|
|
+ locFound := True;
|
|
|
+ Break;
|
|
|
+ end;
|
|
|
+ end;
|
|
|
+ CheckEquals(True,locFound);
|
|
|
+ if ( locFoundIdx < Pred(c) ) then begin
|
|
|
+ locFound := False;
|
|
|
+ for i := Succ(locFoundIdx) to Pred(c) do begin
|
|
|
+ if ( AList.getType(i) = ctDelete ) and ( AObj = AList.getDataObject(i) ) then begin
|
|
|
+ locFound := True;
|
|
|
+ Break;
|
|
|
+ end;
|
|
|
+ end;
|
|
|
+ CheckEquals(False, locFound, 'There should be _only one copy_ of the deleted object.');
|
|
|
+ end;
|
|
|
+ end;
|
|
|
+
|
|
|
+
|
|
|
+var
|
|
|
+ locA, locB, locC : ISDODataObject;
|
|
|
+ ls : ISDOChangedDataObjectList;
|
|
|
+begin
|
|
|
+ locC := FFactoryX.createNew(s_uri,s_type_object_C);
|
|
|
+ locC.setInteger(s_integer_prop,RandomRange(-12345,12456));
|
|
|
+ locC.setString(s_string_prop,RandomString(1000));
|
|
|
+ locB := FFactoryX.createNew(s_uri,s_type_object_B);
|
|
|
+ locB.setInteger(s_integer_prop,RandomRange(-12345,12456));
|
|
|
+ locB.setString(s_string_prop,RandomString(1000));
|
|
|
+ locB.setDataObject(s_object_prop,locC);
|
|
|
+ locA := FFactoryX.createNew(s_uri,s_type_object_A);
|
|
|
+ locA.setInteger(s_integer_prop,RandomRange(-1210,1210));
|
|
|
+ locA.getList(s_integer_propList).append(RandomRange(-1210,1210));
|
|
|
+ locA.getList(s_integer_propList).append(RandomRange(-1210,1210));
|
|
|
+ locA.setString(s_string_prop,RandomString(1000));
|
|
|
+ locA.getList(s_string_propList).append(RandomString(1210));
|
|
|
+ locA.getList(s_string_propList).append(RandomString(1210));
|
|
|
+ locA.setDataObject(s_object_prop,locB);
|
|
|
+
|
|
|
+ FChangeSummary.beginLogging();
|
|
|
+
|
|
|
+ CheckEquals(False,FChangeSummary.isDeleted(locA));
|
|
|
+ CheckEquals(False,FChangeSummary.isDeleted(locB));
|
|
|
+ CheckEquals(False,FChangeSummary.isDeleted(locC));
|
|
|
+
|
|
|
+ FRecorder.recordDeletion(locB);
|
|
|
+ ls := FChangeSummary.getChangedDataObjects();
|
|
|
+ Check_DeletedObject(locB,ls);
|
|
|
+
|
|
|
+ FRecorder.recordDeletion(locA);
|
|
|
+ CheckEquals(True,FChangeSummary.isDeleted(locA));
|
|
|
+ CheckEquals(True,FChangeSummary.isDeleted(locB));
|
|
|
+ CheckEquals(True,FChangeSummary.isDeleted(locC));
|
|
|
+ ls := FChangeSummary.getChangedDataObjects();
|
|
|
+ Check_DeletedObject(locA,ls);
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.undoChanges_simple();
|
|
|
+var
|
|
|
+ locObjA : ISDODataObject;
|
|
|
+ locPropBool, locPropInt, locPropString : ISDOProperty;
|
|
|
+ locSettingBool, locSettingInt, locSettingString : TValueSetting;
|
|
|
+ ibuffer : TSDOInteger;
|
|
|
+ sbuffer : TSDOString;
|
|
|
+ bbuffer : TSDOBoolean;
|
|
|
+ locCS : ISDOChangeSummary;
|
|
|
+begin
|
|
|
+ locPropBool := FFactoryX.getType(s_uri,s_type_object_A).getProperty(s_bool_prop);
|
|
|
+ locPropInt := FFactoryX.getType(s_uri,s_type_object_A).getProperty(s_integer_prop);
|
|
|
+ locPropString := FFactoryX.getType(s_uri,s_type_object_A).getProperty(s_string_prop);
|
|
|
+ locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
|
|
|
+ locObjA.setInteger(locPropInt,RandomRange(-1210,1210));
|
|
|
+ locObjA.setString(locPropString,RandomString(1000));
|
|
|
+ locSettingBool := nil;
|
|
|
+ locSettingInt := nil;
|
|
|
+ locSettingString := nil;
|
|
|
+ try
|
|
|
+ bbuffer := locObjA.getBoolean(locPropBool);
|
|
|
+ locSettingBool := TValueSetting.Create(locObjA.isSet(locPropBool),locObjA.isNull(locPropBool),bbuffer,locPropBool,0);
|
|
|
+ ibuffer := locObjA.getInteger(locPropInt);
|
|
|
+ locSettingInt := TValueSetting.Create(locObjA.isSet(locPropInt),locObjA.isNull(locPropInt),ibuffer,locPropInt,0);
|
|
|
+ sbuffer := locObjA.getString(locPropString);
|
|
|
+ locSettingString := TValueSetting.Create(locObjA.isSet(locPropString),locObjA.isNull(locPropString),sbuffer,locPropString,0);
|
|
|
+
|
|
|
+ locCS := locObjA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locObjA.setBoolean(locPropBool,( ( RandomRange(0,1000) mod 2 ) = 0 ) );
|
|
|
+ locObjA.setInteger(locPropInt,RandomRange(-1210,1210));
|
|
|
+ locObjA.setString(locPropString,RandomString(1000));
|
|
|
+ locCS.endLogging();
|
|
|
+ locCS.undoChanges();
|
|
|
+ CheckEquals(0,locCS.getChangedDataObjects().size());
|
|
|
+ check_value(locObjA,locPropBool,locSettingBool);
|
|
|
+ check_value(locObjA,locPropInt,locSettingInt);
|
|
|
+ check_value(locObjA,locPropString,locSettingString);
|
|
|
+
|
|
|
+ FreeAndNil(locSettingBool);
|
|
|
+ FreeAndNil(locSettingInt);
|
|
|
+ FreeAndNil(locSettingString);
|
|
|
+ bbuffer := locObjA.getBoolean(locPropBool);
|
|
|
+ locSettingBool := TValueSetting.Create(locObjA.isSet(locPropBool),locObjA.isNull(locPropBool),bbuffer,locPropBool,0);
|
|
|
+ ibuffer := locObjA.getInteger(locPropInt);
|
|
|
+ locSettingInt := TValueSetting.Create(locObjA.isSet(locPropInt),locObjA.isNull(locPropInt),ibuffer,locPropInt,0);
|
|
|
+ sbuffer := locObjA.getString(locPropString);
|
|
|
+ locSettingString := TValueSetting.Create(locObjA.isSet(locPropString),locObjA.isNull(locPropString),sbuffer,locPropString,0);
|
|
|
+
|
|
|
+ locCS := locObjA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locObjA.setBoolean(locPropBool,( ( RandomRange(0,1000) mod 2 ) = 0 ) );
|
|
|
+ locObjA.setBoolean(locPropBool,( ( RandomRange(0,1000) mod 2 ) = 0 ) );
|
|
|
+ locObjA.setInteger(locPropInt,RandomRange(-1210,1210));
|
|
|
+ locObjA.setInteger(locPropInt,RandomRange(-1210,1210));
|
|
|
+ locObjA.setString(locPropString,RandomString(1000));
|
|
|
+ locObjA.setString(locPropString,RandomString(1000));
|
|
|
+ locCS.endLogging();
|
|
|
+ locCS.undoChanges();
|
|
|
+ CheckEquals(0,locCS.getChangedDataObjects().size());
|
|
|
+ check_value(locObjA,locPropBool,locSettingBool);
|
|
|
+ check_value(locObjA,locPropInt,locSettingInt);
|
|
|
+ check_value(locObjA,locPropString,locSettingString);
|
|
|
+ finally
|
|
|
+ FreeAndNil(locSettingBool);
|
|
|
+ FreeAndNil(locSettingInt);
|
|
|
+ FreeAndNil(locSettingString);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.undoChanges_object_contained_startWith_OBJ_OBJ();
|
|
|
+var
|
|
|
+ locObjA, locB, locBB, locA1, locB1 : ISDODataObject;
|
|
|
+ locCS : ISDOChangeSummary;
|
|
|
+begin
|
|
|
+ locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
|
|
|
+ locObjA.setBoolean(s_bool_prop,( ( RandomRange(0,1000) mod 2 ) = 0 ) );
|
|
|
+ locObjA.setByte(s_byte_prop,RandomRange(Low(TSDOByte),High(TSDOByte)));
|
|
|
+ locObjA.setInteger(s_integer_prop,RandomRange(-1210,1210));
|
|
|
+ locObjA.setString(s_string_prop,RandomString(1000));
|
|
|
+ locB := FFactoryX.createNew(s_uri,s_type_object_B);
|
|
|
+ locB.setBoolean(locB.getProperty(s_bool_prop),( ( RandomRange(0,1000) mod 2 ) = 0 ));
|
|
|
+ locB.setByte(s_byte_prop,RandomRange(Low(TSDOByte),High(TSDOByte)));
|
|
|
+ locB.setInteger(locB.getProperty(s_integer_prop),RandomRange(-1210,1210));
|
|
|
+ locB.setString(locB.getProperty(s_string_prop),RandomString(1210));
|
|
|
+ locObjA.setDataObject(s_object_prop,locB);
|
|
|
+ locBB := FFactoryX.createNew(s_uri,s_type_object_B);
|
|
|
+ locBB.setBoolean(locBB.getProperty(s_bool_prop),( ( RandomRange(0,1000) mod 2 ) = 0 ));
|
|
|
+ locBB.setByte(s_byte_prop,RandomRange(Low(TSDOByte),High(TSDOByte)));
|
|
|
+ locBB.setInteger(locBB.getProperty(s_integer_prop),RandomRange(-1210,1210));
|
|
|
+ locBB.setString(locBB.getProperty(s_string_prop),RandomString(1210));
|
|
|
+
|
|
|
+ locA1 := TSDOCopyHelper.copy(locObjA);
|
|
|
+ locB1 := TSDOCopyHelper.copy(locB);
|
|
|
+
|
|
|
+ locCS := locObjA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locObjA.setBoolean(s_bool_prop,( ( RandomRange(0,1000) mod 2 ) = 0 ) );
|
|
|
+ locObjA.setByte(s_byte_prop,RandomRange(Low(TSDOByte),High(TSDOByte)));
|
|
|
+ locObjA.setInteger(s_integer_prop,RandomRange(-1210,1210));
|
|
|
+ locObjA.setString(s_string_prop,RandomString(1000));
|
|
|
+ locB.setBoolean(locB.getProperty(s_bool_prop),( ( RandomRange(0,1000) mod 2 ) = 0 ));
|
|
|
+ locB.setByte(s_byte_prop,RandomRange(Low(TSDOByte),High(TSDOByte)));
|
|
|
+ locB.setInteger(locB.getProperty(s_integer_prop),RandomRange(-1210,1210));
|
|
|
+ locB.setString(locB.getProperty(s_string_prop),RandomString(1210));
|
|
|
+ locObjA.setDataObject(s_object_prop,locBB);
|
|
|
+ locCS.endLogging();
|
|
|
+ locCS.undoChanges();
|
|
|
+ CheckEquals(0,locCS.getChangedDataObjects().size());
|
|
|
+ Check(TSDOEqualityHelper.equal(locObjA,locA1));
|
|
|
+ Check(TSDOEqualityHelper.equal(locObjA.getDataObject(s_object_prop),locB1));
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.undoChanges_object_contained_startWith_NIL_OBJ_OBJ();
|
|
|
+var
|
|
|
+ locObjA, locB, locBB, locA1, locB1 : ISDODataObject;
|
|
|
+ locPropBool, locPropInt, locPropString, locPropObj_propB : ISDOProperty;
|
|
|
+ locCS : ISDOChangeSummary;
|
|
|
+begin
|
|
|
+ locPropBool := FFactoryX.getType(s_uri,s_type_object_A).getProperty(s_bool_prop);
|
|
|
+ locPropInt := FFactoryX.getType(s_uri,s_type_object_A).getProperty(s_integer_prop);
|
|
|
+ locPropString := FFactoryX.getType(s_uri,s_type_object_A).getProperty(s_string_prop);
|
|
|
+ locPropObj_propB := FFactoryX.getType(s_uri,s_type_object_A).getProperty(s_object_prop);
|
|
|
+ locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
|
|
|
+ locB := FFactoryX.createNew(s_uri,s_type_object_B);
|
|
|
+
|
|
|
+ locA1 := TSDOCopyHelper.copy(locObjA);
|
|
|
+ locB1 := TSDOCopyHelper.copy(locB);
|
|
|
+
|
|
|
+ locCS := locObjA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locObjA.setBoolean(locPropBool,( ( RandomRange(0,1000) mod 2 ) = 0 ) );
|
|
|
+ locObjA.setInteger(locPropInt,RandomRange(-1210,1210));
|
|
|
+ locObjA.setString(locPropString,RandomString(1000));
|
|
|
+
|
|
|
+ locB.setBoolean(locB.getProperty(s_bool_prop),( ( RandomRange(0,1000) mod 2 ) = 0 ));
|
|
|
+ locB.setInteger(locB.getProperty(s_integer_prop),RandomRange(-1210,1210));
|
|
|
+ locB.setString(locB.getProperty(s_string_prop),RandomString(1210));
|
|
|
+ locObjA.setDataObject(locPropObj_propB,locB);
|
|
|
+ locBB := locObjA.createDataObject(s_object_prop);
|
|
|
+ locBB.setBoolean(locBB.getProperty(s_bool_prop),( ( RandomRange(0,1000) mod 2 ) = 0 ));
|
|
|
+ locBB.setInteger(locBB.getProperty(s_integer_prop),RandomRange(-1210,1210));
|
|
|
+ locBB.setString(locBB.getProperty(s_string_prop),RandomString(1210));
|
|
|
+
|
|
|
+ locCS.endLogging();
|
|
|
+ locCS.undoChanges();
|
|
|
+ CheckEquals(0,locCS.getChangedDataObjects().size());
|
|
|
+ Check(TSDOEqualityHelper.equal(locObjA,locA1));
|
|
|
+ Check(TSDOEqualityHelper.equal(locObjA.getDataObject(locPropObj_propB),nil));
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.getOldXpath();
|
|
|
+var
|
|
|
+ locObjA, locB, locC, locBB : ISDODataObject;
|
|
|
+ locPropObj_propB : ISDOProperty;
|
|
|
+ locCS : ISDOChangeSummary;
|
|
|
+begin
|
|
|
+ locPropObj_propB := FFactoryX.getType(s_uri,s_type_object_A).getProperty(s_object_prop);
|
|
|
+ locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
|
|
|
+ locB := FFactoryX.createNew(s_uri,s_type_object_B);
|
|
|
+
|
|
|
+ locCS := locObjA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ CheckEquals('',locCS.getOldXpath(locObjA));
|
|
|
+ CheckEquals('',locCS.getOldXpath(locB));
|
|
|
+ locObjA.setDataObject(locPropObj_propB,locB);
|
|
|
+ CheckEquals('',locCS.getOldXpath(locObjA));
|
|
|
+ CheckEquals('',locCS.getOldXpath(locB));
|
|
|
+ locBB := locObjA.createDataObject(locPropObj_propB);
|
|
|
+ CheckEquals('',locCS.getOldXpath(locObjA));
|
|
|
+ CheckEquals('',locCS.getOldXpath(locB));
|
|
|
+ CheckEquals('',locCS.getOldXpath(locBB));
|
|
|
+ locC := locBB.createDataObject(s_object_prop);
|
|
|
+ CheckEquals('',locCS.getOldXpath(locC));
|
|
|
+ locBB.setDataObject(s_object_prop,nil);
|
|
|
+ CheckEquals('',locCS.getOldXpath(locB));
|
|
|
+ CheckEquals('',locCS.getOldXpath(locC));
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.logging_state_2();
|
|
|
+var
|
|
|
+ locObj : ISDODataObject;
|
|
|
+begin
|
|
|
+ locObj := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ FChangeSummary.beginLogging();
|
|
|
+ FRecorder.recordCreation(locObj);
|
|
|
+ Check(FChangeSummary.getChangedDataObjects().size() > 0);
|
|
|
+ FChangeSummary.endLogging();
|
|
|
+ Check(FChangeSummary.getChangedDataObjects().size() > 0);
|
|
|
+ FChangeSummary.beginLogging();
|
|
|
+ CheckEquals(0,FChangeSummary.getChangedDataObjects().size(), 'After beginLoggin->endLogging->begginLoggin the changes list must be empty');
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.check_value(
|
|
|
+ const AObj: ISDODataObject;
|
|
|
+ const AProp: ISDOProperty;
|
|
|
+ const AValue: TValueSetting
|
|
|
+);
|
|
|
+begin
|
|
|
+ CheckEquals(AValue.isSet(), AObj.isSet(AProp));
|
|
|
+ CheckEquals(AValue.isNull(), AObj.isNull(AProp));
|
|
|
+ if not AValue.isNull() then begin
|
|
|
+ case AProp.getTypeEnum() of
|
|
|
+ BooleanType : CheckEquals(AValue.getBooleanValue(), AObj.getBoolean(AProp));
|
|
|
+ ByteType : CheckEquals(AValue.getByteValue(), AObj.getByte(AProp));
|
|
|
+{$IFDEF HAS_SDO_BYTES}
|
|
|
+ BytesType : CheckEquals(AValue.getBytesValue(), AObj.getBytes(AProp));
|
|
|
+{$ENDIF HAS_SDO_BYTES}
|
|
|
+{$IFDEF HAS_SDO_CHAR}
|
|
|
+ CharacterType: CheckEquals(AValue.getCharacterValue(), AObj.getCharacter(AProp));
|
|
|
+{$ENDIF HAS_SDO_CHAR}
|
|
|
+{$IFDEF HAS_SDO_CURRENCY}
|
|
|
+ CurrencyType : CheckEquals(AValue.getCurrencyValue(), AObj.getCurrency(AProp));
|
|
|
+{$ENDIF HAS_SDO_CURRENCY}
|
|
|
+ DateTimeType : CheckEquals(AValue.getDateValue(), AObj.getDate(AProp));
|
|
|
+{$IFDEF HAS_SDO_DOUBLE}
|
|
|
+ DoubleType : CheckEquals(AValue.getDoubleValue(), AObj.getDouble(AProp));
|
|
|
+{$ENDIF HAS_SDO_DOUBLE}
|
|
|
+{$IFDEF HAS_SDO_FLOAT}
|
|
|
+ FloatType : CheckEquals(AValue.getFloatValue(), AObj.getFloat(AProp));
|
|
|
+{$ENDIF HAS_SDO_FLOAT}
|
|
|
+ IntegerType : CheckEquals(AValue.getIntegerValue(), AObj.getInteger(AProp));
|
|
|
+{$IFDEF HAS_SDO_LONG}
|
|
|
+ LongType : CheckEquals(AValue.getLongValue(), AObj.getLong(AProp));
|
|
|
+{$ENDIF HAS_SDO_LONG}
|
|
|
+{$IFDEF HAS_SDO_SHORT}
|
|
|
+ ShortType : CheckEquals(AValue.getShortValue(), AObj.getShort(AProp));
|
|
|
+{$ENDIF HAS_SDO_SHORT}
|
|
|
+ ObjectType : Check(TSDOEqualityHelper.equal(AValue.getDataObjectValue(),AObj.getDataObject(AProp)));
|
|
|
+ StringType : CheckEquals(AValue.getStringValue(), AObj.getString(AProp));
|
|
|
+ else
|
|
|
+ Assert(False,'NOT implemented.');
|
|
|
+ end;
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.undoChanges_simple_unset();
|
|
|
+var
|
|
|
+ locObjA : ISDODataObject;
|
|
|
+ locPropBool, locPropInt, locPropString : ISDOProperty;
|
|
|
+ locSettingBool, locSettingInt, locSettingString : TValueSetting;
|
|
|
+ ibuffer : TSDOInteger;
|
|
|
+ sbuffer : TSDOString;
|
|
|
+ bbuffer : TSDOBoolean;
|
|
|
+ locCS : ISDOChangeSummary;
|
|
|
+begin
|
|
|
+ locPropBool := FFactoryX.getType(s_uri,s_type_object_A).getProperty(s_bool_prop);
|
|
|
+ locPropInt := FFactoryX.getType(s_uri,s_type_object_A).getProperty(s_integer_prop);
|
|
|
+ locPropString := FFactoryX.getType(s_uri,s_type_object_A).getProperty(s_string_prop);
|
|
|
+ locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
|
|
|
+ locObjA.setBoolean(locPropBool,( ( RandomRange(0,1000) mod 2 ) = 0 ) );
|
|
|
+ locObjA.setInteger(locPropInt,RandomRange(-1210,1210));
|
|
|
+ locObjA.setString(locPropString,RandomString(1000));
|
|
|
+ locSettingBool := nil;
|
|
|
+ locSettingInt := nil;
|
|
|
+ locSettingString := nil;
|
|
|
+ try
|
|
|
+ bbuffer := locObjA.getBoolean(locPropBool);
|
|
|
+ locSettingBool := TValueSetting.Create(locObjA.isSet(locPropBool),locObjA.isNull(locPropBool),bbuffer,locPropBool,0);
|
|
|
+ ibuffer := locObjA.getInteger(locPropInt);
|
|
|
+ locSettingInt := TValueSetting.Create(locObjA.isSet(locPropInt),locObjA.isNull(locPropInt),ibuffer,locPropInt,0);
|
|
|
+ sbuffer := locObjA.getString(locPropString);
|
|
|
+ locSettingString := TValueSetting.Create(locObjA.isSet(locPropString),locObjA.isNull(locPropString),sbuffer,locPropString,0);
|
|
|
+
|
|
|
+ locCS := locObjA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locObjA.unset(locPropBool);
|
|
|
+ locObjA.unset(locPropInt);
|
|
|
+ locObjA.unset(locPropString);
|
|
|
+ locCS.endLogging();
|
|
|
+ locCS.undoChanges();
|
|
|
+ CheckEquals(0,locCS.getChangedDataObjects().size());
|
|
|
+ check_value(locObjA,locPropBool,locSettingBool);
|
|
|
+ check_value(locObjA,locPropInt,locSettingInt);
|
|
|
+ check_value(locObjA,locPropString,locSettingString);
|
|
|
+ finally
|
|
|
+ FreeAndNil(locSettingBool);
|
|
|
+ FreeAndNil(locSettingInt);
|
|
|
+ FreeAndNil(locSettingString);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.undoChanges_simple_setnull();
|
|
|
+var
|
|
|
+ locObjA : ISDODataObject;
|
|
|
+ locPropBool, locPropInt, locPropString : ISDOProperty;
|
|
|
+ locSettingBool, locSettingInt, locSettingString : TValueSetting;
|
|
|
+ ibuffer : TSDOInteger;
|
|
|
+ sbuffer : TSDOString;
|
|
|
+ bbuffer : TSDOBoolean;
|
|
|
+ locCS : ISDOChangeSummary;
|
|
|
+begin
|
|
|
+ locPropBool := FFactoryX.getType(s_uri,s_type_object_A).getProperty(s_bool_prop);
|
|
|
+ locPropInt := FFactoryX.getType(s_uri,s_type_object_A).getProperty(s_integer_prop);
|
|
|
+ locPropString := FFactoryX.getType(s_uri,s_type_object_A).getProperty(s_string_prop);
|
|
|
+ locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
|
|
|
+ locObjA.setBoolean(locPropBool,( ( RandomRange(0,1000) mod 2 ) = 0 ) );
|
|
|
+ locObjA.setInteger(locPropInt,RandomRange(-1210,1210));
|
|
|
+ locObjA.setString(locPropString,RandomString(1000));
|
|
|
+ locSettingBool := nil;
|
|
|
+ locSettingInt := nil;
|
|
|
+ locSettingString := nil;
|
|
|
+ try
|
|
|
+ bbuffer := locObjA.getBoolean(locPropBool);
|
|
|
+ locSettingBool := TValueSetting.Create(locObjA.isSet(locPropBool),locObjA.isNull(locPropBool),bbuffer,locPropBool,0);
|
|
|
+ ibuffer := locObjA.getInteger(locPropInt);
|
|
|
+ locSettingInt := TValueSetting.Create(locObjA.isSet(locPropInt),locObjA.isNull(locPropInt),ibuffer,locPropInt,0);
|
|
|
+ sbuffer := locObjA.getString(locPropString);
|
|
|
+ locSettingString := TValueSetting.Create(locObjA.isSet(locPropString),locObjA.isNull(locPropString),sbuffer,locPropString,0);
|
|
|
+
|
|
|
+ locCS := locObjA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locObjA.setNull(locPropBool);
|
|
|
+ locObjA.setNull(locPropInt);
|
|
|
+ locObjA.setNull(locPropString);
|
|
|
+ locCS.endLogging();
|
|
|
+ locCS.undoChanges();
|
|
|
+ CheckEquals(0,locCS.getChangedDataObjects().size());
|
|
|
+ check_value(locObjA,locPropBool,locSettingBool);
|
|
|
+ check_value(locObjA,locPropInt,locSettingInt);
|
|
|
+ check_value(locObjA,locPropString,locSettingString);
|
|
|
+ finally
|
|
|
+ FreeAndNil(locSettingBool);
|
|
|
+ FreeAndNil(locSettingInt);
|
|
|
+ FreeAndNil(locSettingString);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.getOldValue_object_prop();
|
|
|
+var
|
|
|
+ locObj1, locObj2 : ISDODataObject;
|
|
|
+ locPropCont, locPropRef : ISDOProperty;
|
|
|
+ locSetting : TValueSetting;
|
|
|
+begin
|
|
|
+ locPropCont := FFactoryX.getType(s_uri,s_type_object_A).getProperty(s_object_prop);
|
|
|
+ locPropRef := FFactoryX.getType(s_uri,s_type_object_A).getProperty(s_object_ref_prop);
|
|
|
+ locObj1 := FFactoryX.createNew(s_uri,s_type_object_A);
|
|
|
+ locObj2 := FFactoryX.createNew(s_uri,s_type_object_A);
|
|
|
+ FChangeSummary.beginLogging();
|
|
|
+
|
|
|
+ CheckEquals(PtrUInt(nil), PtrUInt(FChangeSummary.getOldValue(locObj1,locPropCont)));
|
|
|
+ CheckEquals(PtrUInt(nil), PtrUInt(FChangeSummary.getOldValue(locObj1,locPropRef)));
|
|
|
+
|
|
|
+ locObj1.setDataObject(locPropCont,FFactoryX.createNew(s_uri,s_type_object_B));
|
|
|
+ FRecorder.recordChange(locObj1,locPropCont);
|
|
|
+ locSetting := FChangeSummary.getOldValue(locObj1,locPropCont);
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting));
|
|
|
+ CheckEquals(PtrUInt(locPropCont), PtrUInt(locSetting.getProperty()));
|
|
|
+ CheckEquals(PtrUInt(nil), PtrUInt(FChangeSummary.getOldValue(locObj1,locPropRef)));
|
|
|
+
|
|
|
+ locObj2.setDataObject(locPropCont,FFactoryX.createNew(s_uri,s_type_object_B));
|
|
|
+ FRecorder.recordChange(locObj2,locPropCont);
|
|
|
+ locSetting := FChangeSummary.getOldValue(locObj2,locPropCont);
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting));
|
|
|
+ CheckEquals(PtrUInt(locPropCont), PtrUInt(locSetting.getProperty()));
|
|
|
+ CheckEquals(PtrUInt(nil), PtrUInt(FChangeSummary.getOldValue(locObj2,locPropRef)));
|
|
|
+
|
|
|
+ locObj1.setDataObject(locPropRef,FFactoryX.createNew(s_uri,s_type_object_B));
|
|
|
+ FRecorder.recordChange(locObj1,locPropRef);
|
|
|
+ locSetting := FChangeSummary.getOldValue(locObj1,locPropCont);
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting));
|
|
|
+ CheckEquals(PtrUInt(locPropCont), PtrUInt(locSetting.getProperty()));
|
|
|
+ locSetting := FChangeSummary.getOldValue(locObj1,locPropRef);
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting));
|
|
|
+ CheckEquals(PtrUInt(locPropRef), PtrUInt(locSetting.getProperty()));
|
|
|
+
|
|
|
+ locObj2.setDataObject(locPropRef,FFactoryX.createNew(s_uri,s_type_object_B));
|
|
|
+ FRecorder.recordChange(locObj2,locPropRef);
|
|
|
+ locSetting := FChangeSummary.getOldValue(locObj2,locPropCont);
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting));
|
|
|
+ CheckEquals(PtrUInt(locPropCont), PtrUInt(locSetting.getProperty()));
|
|
|
+ locSetting := FChangeSummary.getOldValue(locObj2,locPropRef);
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting));
|
|
|
+ CheckEquals(PtrUInt(locPropRef), PtrUInt(locSetting.getProperty()));
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.getOldValues_object_prop();
|
|
|
+var
|
|
|
+ locObjA, locObjB : ISDODataObject;
|
|
|
+ ls : ISDOSettingList;
|
|
|
+ locPropInt, locPropString, locPropObjCont, locPropObjRef : ISDOProperty;
|
|
|
+begin
|
|
|
+ locPropInt := FFactoryX.getType(s_uri,s_type_object_A).getProperty(s_integer_prop);
|
|
|
+ locPropString := FFactoryX.getType(s_uri,s_type_object_A).getProperty(s_string_prop);
|
|
|
+ locPropObjCont := FFactoryX.getType(s_uri,s_type_object_A).getProperty(s_object_prop);
|
|
|
+ locPropObjRef := FFactoryX.getType(s_uri,s_type_object_A).getProperty(s_object_ref_prop);
|
|
|
+ locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
|
|
|
+ locObjB := FFactoryX.createNew(s_uri,s_type_object_A);
|
|
|
+ FChangeSummary.beginLogging();
|
|
|
+
|
|
|
+ ls := FChangeSummary.getOldValues(locObjA);
|
|
|
+ CheckEquals(0, ls.size());
|
|
|
+ ls := FChangeSummary.getOldValues(locObjB);
|
|
|
+ CheckEquals(0, ls.size());
|
|
|
+
|
|
|
+ locObjA.setInteger(locPropInt,1210);
|
|
|
+ FRecorder.recordChange(locObjA,locPropInt);
|
|
|
+ ls := FChangeSummary.getOldValues(locObjA);
|
|
|
+ CheckEquals(1,ls.size());
|
|
|
+
|
|
|
+ locObjB.setInteger(locPropInt,1210);
|
|
|
+ FRecorder.recordChange(locObjB,locPropInt);
|
|
|
+ ls := FChangeSummary.getOldValues(locObjA);
|
|
|
+ CheckEquals(1,ls.size());
|
|
|
+
|
|
|
+ ls := FChangeSummary.getOldValues(locObjB);
|
|
|
+ CheckEquals(1,ls.size());
|
|
|
+
|
|
|
+ locObjA.setString(locPropString,RandomString(1000));
|
|
|
+ FRecorder.recordChange(locObjA,locPropString);
|
|
|
+ ls := FChangeSummary.getOldValues(locObjA);
|
|
|
+ CheckEquals(2,ls.size());
|
|
|
+
|
|
|
+ ls := FChangeSummary.getOldValues(locObjB);
|
|
|
+ CheckEquals(1,ls.size());
|
|
|
+
|
|
|
+ locObjB.setString(locPropString,RandomString(1000));
|
|
|
+ FRecorder.recordChange(locObjB,locPropString);
|
|
|
+ ls := FChangeSummary.getOldValues(locObjA);
|
|
|
+ CheckEquals(2,ls.size());
|
|
|
+
|
|
|
+ ls := FChangeSummary.getOldValues(locObjB);
|
|
|
+ CheckEquals(2,ls.size());
|
|
|
+
|
|
|
+ locObjA.setDataObject(locPropObjCont,FFactoryX.createNew(s_uri,s_type_object_B));
|
|
|
+ FRecorder.recordChange(locObjA,locPropObjCont);
|
|
|
+ ls := FChangeSummary.getOldValues(locObjA);
|
|
|
+ CheckEquals(3,ls.size());
|
|
|
+
|
|
|
+ ls := FChangeSummary.getOldValues(locObjB);
|
|
|
+ CheckEquals(2,ls.size());
|
|
|
+
|
|
|
+ locObjB.setDataObject(locPropObjCont,FFactoryX.createNew(s_uri,s_type_object_B));
|
|
|
+ FRecorder.recordChange(locObjB,locPropObjCont);
|
|
|
+ ls := FChangeSummary.getOldValues(locObjA);
|
|
|
+ CheckEquals(3,ls.size());
|
|
|
+
|
|
|
+ ls := FChangeSummary.getOldValues(locObjB);
|
|
|
+ CheckEquals(3,ls.size());
|
|
|
+
|
|
|
+ locObjA.setDataObject(locPropObjRef,FFactoryX.createNew(s_uri,s_type_object_B));
|
|
|
+ FRecorder.recordChange(locObjA,locPropObjRef);
|
|
|
+ ls := FChangeSummary.getOldValues(locObjA);
|
|
|
+ CheckEquals(4,ls.size());
|
|
|
+
|
|
|
+ ls := FChangeSummary.getOldValues(locObjB);
|
|
|
+ CheckEquals(3,ls.size());
|
|
|
+
|
|
|
+ locObjB.setDataObject(locPropObjRef,FFactoryX.createNew(s_uri,s_type_object_B));
|
|
|
+ FRecorder.recordChange(locObjB,locPropObjRef);
|
|
|
+ ls := FChangeSummary.getOldValues(locObjA);
|
|
|
+ CheckEquals(4,ls.size());
|
|
|
+
|
|
|
+ ls := FChangeSummary.getOldValues(locObjB);
|
|
|
+ CheckEquals(4,ls.size());
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.undoChanges_object_referenced_startWIth_OBJ_OBJ();
|
|
|
+var
|
|
|
+ locObjA, locB, locBB, locA1, locB1 : ISDODataObject;
|
|
|
+ locPropBool, locPropInt, locPropString, locPropObj_propB : ISDOProperty;
|
|
|
+ locCS : ISDOChangeSummary;
|
|
|
+begin
|
|
|
+ locPropBool := FFactoryX.getType(s_uri,s_type_object_A).getProperty(s_bool_prop);
|
|
|
+ locPropInt := FFactoryX.getType(s_uri,s_type_object_A).getProperty(s_integer_prop);
|
|
|
+ locPropString := FFactoryX.getType(s_uri,s_type_object_A).getProperty(s_string_prop);
|
|
|
+ locPropObj_propB := FFactoryX.getType(s_uri,s_type_object_A).getProperty(s_object_ref_prop);
|
|
|
+ locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
|
|
|
+ locObjA.setBoolean(locPropBool,( ( RandomRange(0,1000) mod 2 ) = 0 ) );
|
|
|
+ locObjA.setInteger(locPropInt,RandomRange(-1210,1210));
|
|
|
+ locObjA.setString(locPropString,RandomString(1000));
|
|
|
+ locB := (*the object must be in the containment tree*)
|
|
|
+ locObjA.createDataObject(s_object_prop);
|
|
|
+ locB.setBoolean(locB.getProperty(s_bool_prop),( ( RandomRange(0,1000) mod 2 ) = 0 ));
|
|
|
+ locB.setInteger(locB.getProperty(s_integer_prop),RandomRange(-1210,1210));
|
|
|
+ locB.setString(locB.getProperty(s_string_prop),RandomString(1210));
|
|
|
+ (* This is necessary because locObjA.createDataObject(s_object_prop) is for "s_object_prop" not for "s_object_ref_prop"*)
|
|
|
+ locObjA.setDataObject(locPropObj_propB,locB);
|
|
|
+ locBB := FFactoryX.createNew(s_uri,s_type_object_B);
|
|
|
+ locBB.setBoolean(locBB.getProperty(s_bool_prop),( ( RandomRange(0,1000) mod 2 ) = 0 ));
|
|
|
+ locBB.setInteger(locBB.getProperty(s_integer_prop),RandomRange(-1210,1210));
|
|
|
+ locBB.setString(locBB.getProperty(s_string_prop),RandomString(1210));
|
|
|
+
|
|
|
+ locA1 := TSDOCopyHelper.copy(locObjA);
|
|
|
+ locB1 := TSDOCopyHelper.copy(locB);
|
|
|
+
|
|
|
+ locCS := locObjA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locObjA.setBoolean(locPropBool,( ( RandomRange(0,1000) mod 2 ) = 0 ) );
|
|
|
+ locObjA.setInteger(locPropInt,RandomRange(-1210,1210));
|
|
|
+ locObjA.setString(locPropString,RandomString(1000));
|
|
|
+ locObjA.setDataObject(locPropObj_propB,locBB);
|
|
|
+ locCS.endLogging();
|
|
|
+ locCS.undoChanges();
|
|
|
+ CheckEquals(0,locCS.getChangedDataObjects().size());
|
|
|
+ //Check(TSDOEqualityHelper.equal(locObjA,locA1));
|
|
|
+ CheckEquals(PtrUInt(locObjA.getDataObject(s_object_prop)), PtrUInt(locObjA.getDataObject(locPropObj_propB)));
|
|
|
+ //Check(TSDOEqualityHelper.equal(locObjA.getDataObject(locPropObj_propB),locB1));
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.undoChanges_object_referenced_startWith_NIL_OBJ();
|
|
|
+var
|
|
|
+ locObjA, locB, locBB, locA1, locB1 : ISDODataObject;
|
|
|
+ locPropBool, locPropInt, locPropString, locPropObj_propB : ISDOProperty;
|
|
|
+ locCS : ISDOChangeSummary;
|
|
|
+begin
|
|
|
+ locPropBool := FFactoryX.getType(s_uri,s_type_object_A).getProperty(s_bool_prop);
|
|
|
+ locPropInt := FFactoryX.getType(s_uri,s_type_object_A).getProperty(s_integer_prop);
|
|
|
+ locPropString := FFactoryX.getType(s_uri,s_type_object_A).getProperty(s_string_prop);
|
|
|
+ locPropObj_propB := FFactoryX.getType(s_uri,s_type_object_A).getProperty(s_object_ref_prop);
|
|
|
+ locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
|
|
|
+ locBB := (*the object must be in the containment tree*)
|
|
|
+ locObjA.createDataObject(s_object_prop);
|
|
|
+
|
|
|
+ locA1 := TSDOCopyHelper.copy(locObjA);
|
|
|
+ locB1 := TSDOCopyHelper.copy(locB);
|
|
|
+
|
|
|
+ locCS := locObjA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locObjA.setBoolean(locPropBool,( ( RandomRange(0,1000) mod 2 ) = 0 ) );
|
|
|
+ locObjA.setInteger(locPropInt,RandomRange(-1210,1210));
|
|
|
+ locObjA.setString(locPropString,RandomString(1000));
|
|
|
+ locObjA.setDataObject(locPropObj_propB,locB);
|
|
|
+ locObjA.setDataObject(locPropObj_propB,locBB);
|
|
|
+ locCS.endLogging();
|
|
|
+ locCS.undoChanges();
|
|
|
+ CheckEquals(0,locCS.getChangedDataObjects().size());
|
|
|
+ Check(TSDOEqualityHelper.equal(locObjA,locA1));
|
|
|
+ Check(TSDOEqualityHelper.equal(locObjA.getDataObject(locPropObj_propB),nil));
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.undoChanges_object_contained_startWith_OBJ_OBJ_OBJ();
|
|
|
+var
|
|
|
+ locObjA, locB, locBB, locA1, locB1 : ISDODataObject;
|
|
|
+ locPropBool, locPropInt, locPropString, locPropObj_propB : ISDOProperty;
|
|
|
+ locCS : ISDOChangeSummary;
|
|
|
+begin
|
|
|
+ locPropBool := FFactoryX.getType(s_uri,s_type_object_A).getProperty(s_bool_prop);
|
|
|
+ locPropInt := FFactoryX.getType(s_uri,s_type_object_A).getProperty(s_integer_prop);
|
|
|
+ locPropString := FFactoryX.getType(s_uri,s_type_object_A).getProperty(s_string_prop);
|
|
|
+ locPropObj_propB := FFactoryX.getType(s_uri,s_type_object_A).getProperty(s_object_prop);
|
|
|
+ locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
|
|
|
+ locObjA.setBoolean(locPropBool,( ( RandomRange(0,1000) mod 2 ) = 0 ) );
|
|
|
+ locObjA.setInteger(locPropInt,RandomRange(-1210,1210));
|
|
|
+ locObjA.setString(locPropString,RandomString(1000));
|
|
|
+ locB := FFactoryX.createNew(s_uri,s_type_object_B);
|
|
|
+ locB.setBoolean(locB.getProperty(s_bool_prop),( ( RandomRange(0,1000) mod 2 ) = 0 ));
|
|
|
+ locB.setInteger(locB.getProperty(s_integer_prop),RandomRange(-1210,1210));
|
|
|
+ locB.setString(locB.getProperty(s_string_prop),RandomString(1210));
|
|
|
+ locObjA.setDataObject(locPropObj_propB,locB);
|
|
|
+ locBB := FFactoryX.createNew(s_uri,s_type_object_B);
|
|
|
+ locBB.setBoolean(locBB.getProperty(s_bool_prop),( ( RandomRange(0,1000) mod 2 ) = 0 ));
|
|
|
+ locBB.setInteger(locBB.getProperty(s_integer_prop),RandomRange(-1210,1210));
|
|
|
+ locBB.setString(locBB.getProperty(s_string_prop),RandomString(1210));
|
|
|
+
|
|
|
+ locA1 := TSDOCopyHelper.copy(locObjA);
|
|
|
+ locB1 := TSDOCopyHelper.copy(locB);
|
|
|
+
|
|
|
+ locCS := locObjA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locObjA.setBoolean(locPropBool,( ( RandomRange(0,1000) mod 2 ) = 0 ) );
|
|
|
+ locObjA.setInteger(locPropInt,RandomRange(-1210,1210));
|
|
|
+ locObjA.setString(locPropString,RandomString(1000));
|
|
|
+ {locB.setBoolean(locB.getProperty(s_bool_prop),( ( RandomRange(0,1000) mod 2 ) = 0 ));
|
|
|
+ locB.setInteger(locB.getProperty(s_integer_prop),RandomRange(-1210,1210));
|
|
|
+ locB.setString(locB.getProperty(s_string_prop),RandomString(1210)); }
|
|
|
+ locObjA.setDataObject(locPropObj_propB,locBB);
|
|
|
+ locObjA.createDataObject(locPropObj_propB);
|
|
|
+ locCS.endLogging();
|
|
|
+ locCS.undoChanges();
|
|
|
+ CheckEquals(0,locCS.getChangedDataObjects().size());
|
|
|
+ Check(TSDOEqualityHelper.equal(locObjA,locA1));
|
|
|
+ Check(TSDOEqualityHelper.equal(locObjA.getDataObject(locPropObj_propB),locB1));
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.isCreated_create_delete();
|
|
|
+var
|
|
|
+ locObj : ISDODataObject;
|
|
|
+begin
|
|
|
+ locObj := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ FChangeSummary.beginLogging();
|
|
|
+
|
|
|
+ CheckEquals(False,FChangeSummary.isCreated(nil));
|
|
|
+ CheckEquals(False,FChangeSummary.isCreated(locObj));
|
|
|
+ FRecorder.recordCreation(locObj);
|
|
|
+ CheckEquals(True,FChangeSummary.isCreated(locObj));
|
|
|
+ FRecorder.recordDeletion(locObj);
|
|
|
+ CheckEquals(False,FChangeSummary.isDeleted(locObj));
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.undoChanges_delete_contained_object();
|
|
|
+var
|
|
|
+ locA, locB0, locB1, locC0, locC1 : ISDODataObject;
|
|
|
+ locCopyA : ISDODataObject;
|
|
|
+ locCS : ISDOChangeSummary;
|
|
|
+begin
|
|
|
+ locA := FFactoryX.createNew(s_uri,s_type_object_A);
|
|
|
+ locA.setString(s_string_prop,RandomString(1000));
|
|
|
+ locB0 := locA.createDataObject(s_object_prop);
|
|
|
+ locB0.setString(s_string_prop,RandomString(1000));
|
|
|
+ locC0 := locB0.createDataObject(s_object_prop);
|
|
|
+ locC0.setString(s_string_prop,RandomString(1000));
|
|
|
+
|
|
|
+ locCopyA := TSDOCopyHelper.copy(locA);
|
|
|
+
|
|
|
+ locCS := locA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locB1 := locA.createDataObject(s_object_prop);
|
|
|
+ locB1.setString(s_string_prop,RandomString(1000));
|
|
|
+ locC1 := locB1.createDataObject(s_object_prop);
|
|
|
+ locC1.setString(s_string_prop,RandomString(1000));
|
|
|
+ locCS.endLogging();
|
|
|
+ locCS.undoChanges();
|
|
|
+ CheckEquals(0,locCS.getChangedDataObjects().size());
|
|
|
+ Check(TSDOEqualityHelper.equal(locCopyA,locA));
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.getOldXpath_1();
|
|
|
+var
|
|
|
+ locObjA, locB, locBB : ISDODataObject;
|
|
|
+ locPropObj_propB : ISDOProperty;
|
|
|
+ locCS : ISDOChangeSummary;
|
|
|
+begin
|
|
|
+ locPropObj_propB := FFactoryX.getType(s_uri,s_type_object_A).getProperty(s_object_prop);
|
|
|
+ locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
|
|
|
+ locB := FFactoryX.createNew(s_uri,s_type_object_B);
|
|
|
+ locObjA.setDataObject(locPropObj_propB,locB);
|
|
|
+
|
|
|
+ locCS := locObjA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ CheckEquals('',locCS.getOldXpath(locObjA));
|
|
|
+ CheckEquals('',locCS.getOldXpath(locB));
|
|
|
+ locBB := locObjA.createDataObject(locPropObj_propB);
|
|
|
+ CheckEquals('',locCS.getOldXpath(locObjA));
|
|
|
+ CheckEquals(locPropObj_propB.getName(),locCS.getOldXpath(locB));
|
|
|
+ CheckEquals('',locCS.getOldXpath(locBB));
|
|
|
+ locObjA.createDataObject(locPropObj_propB);
|
|
|
+ CheckEquals(locPropObj_propB.getName(),locCS.getOldXpath(locB));
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.getOldXpath_nested_deleted_object();
|
|
|
+var
|
|
|
+ locFac : ISDODataFactory;
|
|
|
+ locA, locB, locBB, locC, locD : ISDODataObject;
|
|
|
+ locCS : ISDOChangeSummary;
|
|
|
+begin
|
|
|
+ locFac := TSDODataFactory.Create() as ISDODataFactory;
|
|
|
+ locFac.AddType(s_uri,'a',[]);
|
|
|
+ locFac.AddType(s_uri,'b',[]);
|
|
|
+ locFac.AddType(s_uri,'c',[]);
|
|
|
+ locFac.AddType(s_uri,'d',[]);
|
|
|
+ locFac.addProperty(s_uri,'a','p_ab',s_uri,'b',[pfIsContainment]);
|
|
|
+ locFac.addProperty(s_uri,'a','p_ac',s_uri,'c',[]);
|
|
|
+ locFac.addProperty(s_uri,'a','p_ad',s_uri,'d',[]);
|
|
|
+ locFac.addProperty(s_uri,'a',s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly]);
|
|
|
+ locFac.addProperty(s_uri,'b','p_bc',s_uri,'c',[pfIsContainment]);
|
|
|
+ locFac.addProperty(s_uri,'c','p_cd',s_uri,'d',[pfIsContainment]);
|
|
|
+
|
|
|
+ locA := locFac.createNew(s_uri,'a');
|
|
|
+ locB := locA.createDataObject('p_ab');
|
|
|
+ locC := locB.createDataObject('p_bc');
|
|
|
+ locD := locC.createDataObject('p_cd');
|
|
|
+
|
|
|
+ locCS := locA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locBB := locA.createDataObject('p_ab');
|
|
|
+ CheckEquals('p_ab',locCS.getOldXpath(locB));
|
|
|
+ CheckEquals('p_ab/p_bc',locCS.getOldXpath(locC));
|
|
|
+ CheckEquals('p_ab/p_bc/p_cd',locCS.getOldXpath(locD));
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.getOldValues_created_object_settinglist_is_empty();
|
|
|
+var
|
|
|
+ locA, locB : ISDODataObject;
|
|
|
+ locCS : ISDOChangeSummary;
|
|
|
+begin
|
|
|
+ locA := FFactoryX.createNew(s_uri,s_type_object_A);
|
|
|
+ locCS := locA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locB := locA.createDataObject(s_object_prop);
|
|
|
+ locB.setInteger(s_integer_prop,1210);
|
|
|
+ locB.setString(s_string_prop, 'kis');
|
|
|
+ CheckEquals(0, locCS.getOldValues(locB).size());
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.getChangedDataObjects_contained_delete;
|
|
|
+var
|
|
|
+ locFac : ISDODataFactory;
|
|
|
+ locA, locB, locC, locD : ISDODataObject;
|
|
|
+ locCS : ISDOChangeSummary;
|
|
|
+ i : PtrInt;
|
|
|
+ ls : ISDOChangedDataObjectList;
|
|
|
+begin
|
|
|
+ locFac := TSDODataFactory.Create() as ISDODataFactory;
|
|
|
+ locFac.AddType(s_uri,'a',[]);
|
|
|
+ locFac.AddType(s_uri,'b',[]);
|
|
|
+ locFac.AddType(s_uri,'c',[]);
|
|
|
+ locFac.AddType(s_uri,'d',[]);
|
|
|
+ locFac.addProperty(s_uri,'a','p_ab',s_uri,'b',[pfIsContainment]);
|
|
|
+ locFac.addProperty(s_uri,'a',s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly]);
|
|
|
+ locFac.addProperty(s_uri,'b','p_bc',s_uri,'c',[pfIsContainment]);
|
|
|
+ locFac.addProperty(s_uri,'c','p_cd',s_uri,'d',[pfIsContainment]);
|
|
|
+ locFac.addProperty(s_uri,'d','p_int',sdo_namespace,SDOTypeDefaultTypeNames[IntegerType],[]);
|
|
|
+
|
|
|
+ locA := locFac.createNew(s_uri,'a');
|
|
|
+ locCS := locA.getChangeSummary();
|
|
|
+ locCS.endLogging();
|
|
|
+ locB := locA.createDataObject('p_ab');
|
|
|
+ locC := locB.createDataObject('p_bc');
|
|
|
+ locD := locC.createDataObject('p_cd');
|
|
|
+ locCS.beginLogging();
|
|
|
+ locD.setInteger('p_int',1210);
|
|
|
+ locA.setDataObject('p_ab',nil);
|
|
|
+
|
|
|
+ ls := locCS.getChangedDataObjects();
|
|
|
+ i := IndexOf(locD,ls);
|
|
|
+ Check( ( i < 0 ) or ( Ord(ls.getType(i)) = Ord(ctDelete) ) );
|
|
|
+ Check(locCS.isDeleted(locD));
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.getChangedDataObjects_multi_value_prop;
|
|
|
+var
|
|
|
+ locFac : ISDODataFactory;
|
|
|
+ locA, locB : ISDODataObject;
|
|
|
+ locLs : ISDODataObjectList;
|
|
|
+ locCS : ISDOChangeSummary;
|
|
|
+ i : PtrInt;
|
|
|
+ ls : ISDOChangedDataObjectList;
|
|
|
+begin
|
|
|
+ locFac := TSDODataFactory.Create() as ISDODataFactory;
|
|
|
+ locFac.AddType(s_uri,'a',[]);
|
|
|
+ locFac.AddType(s_uri,'b',[]);
|
|
|
+ locFac.addProperty(s_uri,'a','p_ab',s_uri,'b',[pfIsContainment,pfIsMany]);
|
|
|
+ locFac.addProperty(s_uri,'a',s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly]);
|
|
|
+ locFac.addProperty(s_uri,'b','p_int',sdo_namespace,SDOTypeDefaultTypeNames[IntegerType],[]);
|
|
|
+
|
|
|
+ locA := locFac.createNew(s_uri,'a');
|
|
|
+ locCS := locA.getChangeSummary();
|
|
|
+ locCS.endLogging();
|
|
|
+ locLs := locA.getList('p_ab');
|
|
|
+ for i := 1 to 5 do begin
|
|
|
+ locB := locFac.createNew(s_uri,'b');
|
|
|
+ locB.setInteger('p_int',i);
|
|
|
+ locLs.append(locB);
|
|
|
+ end;
|
|
|
+ locCS.beginLogging();
|
|
|
+ locLs.delete(2);
|
|
|
+ locLs.delete(0);
|
|
|
+
|
|
|
+ ls := locCS.getChangedDataObjects();
|
|
|
+ CheckEquals(3, ls.size());
|
|
|
+ CheckEquals(Ord(ctChange), Ord(ls.getType(0)), 'a');
|
|
|
+ CheckEquals(Ord(ctDelete), Ord(ls.getType(1)), 'a.p_ab[2]');
|
|
|
+ CheckEquals(Ord(ctDelete), Ord(ls.getType(2)), 'a.p_ab[3]');
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.undoChanges_simple_bool();
|
|
|
+const
|
|
|
+ LOCAL_PROP_NAME = s_bool_prop;
|
|
|
+var
|
|
|
+ locObjA : ISDODataObject;
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locSetting : TValueSetting;
|
|
|
+ buffer : TSDOBoolean;
|
|
|
+ locCS : ISDOChangeSummary;
|
|
|
+begin
|
|
|
+ locProp := FFactoryX.getType(s_uri,s_type_object_A).getProperty(LOCAL_PROP_NAME);
|
|
|
+ locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
|
|
|
+ locObjA.setBoolean(locProp,False);
|
|
|
+ locSetting := nil;
|
|
|
+ try
|
|
|
+ buffer := locObjA.getBoolean(locProp);
|
|
|
+ locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
|
|
|
+
|
|
|
+ locCS := locObjA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locObjA.setBoolean(locProp,True);
|
|
|
+ locCS.endLogging();
|
|
|
+ locCS.undoChanges();
|
|
|
+ CheckEquals(0,locCS.getChangedDataObjects().size());
|
|
|
+ check_value(locObjA,locProp,locSetting);
|
|
|
+
|
|
|
+ FreeAndNil(locSetting);
|
|
|
+ buffer := locObjA.getBoolean(locProp);
|
|
|
+ locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
|
|
|
+
|
|
|
+ locCS := locObjA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locObjA.setBoolean(locProp,True);
|
|
|
+ locObjA.setBoolean(locProp,False);
|
|
|
+ locCS.endLogging();
|
|
|
+ locCS.undoChanges();
|
|
|
+ CheckEquals(0,locCS.getChangedDataObjects().size());
|
|
|
+ check_value(locObjA,locProp,locSetting);
|
|
|
+ finally
|
|
|
+ FreeAndNil(locSetting);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.undoChanges_simple_byte();
|
|
|
+const
|
|
|
+ LOCAL_PROP_NAME = s_byte_prop;
|
|
|
+var
|
|
|
+ locObjA : ISDODataObject;
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locSetting : TValueSetting;
|
|
|
+ buffer : TSDOByte;
|
|
|
+ locCS : ISDOChangeSummary;
|
|
|
+begin
|
|
|
+ locProp := FFactoryX.getType(s_uri,s_type_object_A).getProperty(LOCAL_PROP_NAME);
|
|
|
+ locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
|
|
|
+ locObjA.setByte(locProp,RandomRange(Low(TSDOByte),High(TSDOByte)));
|
|
|
+ locSetting := nil;
|
|
|
+ try
|
|
|
+ buffer := locObjA.getByte(locProp);
|
|
|
+ locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
|
|
|
+
|
|
|
+ locCS := locObjA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locObjA.setByte(locProp,RandomRange(Low(TSDOByte),High(TSDOByte)));
|
|
|
+ locCS.endLogging();
|
|
|
+ locCS.undoChanges();
|
|
|
+ CheckEquals(0,locCS.getChangedDataObjects().size());
|
|
|
+ check_value(locObjA,locProp,locSetting);
|
|
|
+
|
|
|
+ FreeAndNil(locSetting);
|
|
|
+ buffer := locObjA.getByte(locProp);
|
|
|
+ locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
|
|
|
+
|
|
|
+ locCS := locObjA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locObjA.setByte(locProp,RandomRange(Low(TSDOByte),High(TSDOByte)));
|
|
|
+ locObjA.setByte(locProp,RandomRange(Low(TSDOByte),High(TSDOByte)));
|
|
|
+ locCS.endLogging();
|
|
|
+ locCS.undoChanges();
|
|
|
+ CheckEquals(0,locCS.getChangedDataObjects().size());
|
|
|
+ check_value(locObjA,locProp,locSetting);
|
|
|
+ finally
|
|
|
+ FreeAndNil(locSetting);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.undoChanges_simple_unset_bool();
|
|
|
+const
|
|
|
+ LOCAL_PROP_NAME = s_bool_prop;
|
|
|
+var
|
|
|
+ locObjA : ISDODataObject;
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locSetting : TValueSetting;
|
|
|
+ buffer : TSDOBoolean;
|
|
|
+ locCS : ISDOChangeSummary;
|
|
|
+begin
|
|
|
+ locProp := FFactoryX.getType(s_uri,s_type_object_A).getProperty(LOCAL_PROP_NAME);
|
|
|
+ locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
|
|
|
+ locObjA.setBoolean(locProp,True);
|
|
|
+ locSetting := nil;
|
|
|
+ try
|
|
|
+ buffer := locObjA.getBoolean(locProp);
|
|
|
+ locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
|
|
|
+
|
|
|
+ locCS := locObjA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locObjA.unset(locProp);
|
|
|
+ locCS.endLogging();
|
|
|
+ locCS.undoChanges();
|
|
|
+ CheckEquals(0,locCS.getChangedDataObjects().size());
|
|
|
+ check_value(locObjA,locProp,locSetting);
|
|
|
+ finally
|
|
|
+ FreeAndNil(locSetting);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.undoChanges_simple_unset_byte();
|
|
|
+const
|
|
|
+ LOCAL_PROP_NAME = s_byte_prop;
|
|
|
+var
|
|
|
+ locObjA : ISDODataObject;
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locSetting : TValueSetting;
|
|
|
+ buffer : TSDOByte;
|
|
|
+ locCS : ISDOChangeSummary;
|
|
|
+begin
|
|
|
+ locProp := FFactoryX.getType(s_uri,s_type_object_A).getProperty(LOCAL_PROP_NAME);
|
|
|
+ locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
|
|
|
+ locObjA.setByte(locProp,RandomRange(Low(TSDOByte),High(TSDOByte)));
|
|
|
+ locSetting := nil;
|
|
|
+ try
|
|
|
+ buffer := locObjA.getByte(locProp);
|
|
|
+ locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
|
|
|
+
|
|
|
+ locCS := locObjA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locObjA.unset(locProp);
|
|
|
+ locCS.endLogging();
|
|
|
+ locCS.undoChanges();
|
|
|
+ CheckEquals(0,locCS.getChangedDataObjects().size());
|
|
|
+ check_value(locObjA,locProp,locSetting);
|
|
|
+ finally
|
|
|
+ FreeAndNil(locSetting);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.undoChanges_simple_unset_integer();
|
|
|
+const
|
|
|
+ LOCAL_PROP_NAME = s_integer_prop;
|
|
|
+var
|
|
|
+ locObjA : ISDODataObject;
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locSetting : TValueSetting;
|
|
|
+ buffer : TSDOInteger;
|
|
|
+ locCS : ISDOChangeSummary;
|
|
|
+begin
|
|
|
+ locProp := FFactoryX.getType(s_uri,s_type_object_A).getProperty(LOCAL_PROP_NAME);
|
|
|
+ locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
|
|
|
+ locObjA.setInteger(locProp,456789);
|
|
|
+ locSetting := nil;
|
|
|
+ try
|
|
|
+ buffer := locObjA.getInteger(locProp);
|
|
|
+ locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
|
|
|
+
|
|
|
+ locCS := locObjA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locObjA.unset(locProp);
|
|
|
+ locCS.endLogging();
|
|
|
+ locCS.undoChanges();
|
|
|
+ CheckEquals(0,locCS.getChangedDataObjects().size());
|
|
|
+ check_value(locObjA,locProp,locSetting);
|
|
|
+ finally
|
|
|
+ FreeAndNil(locSetting);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.undoChanges_simple_unset_string();
|
|
|
+const
|
|
|
+ LOCAL_PROP_NAME = s_string_prop;
|
|
|
+var
|
|
|
+ locObjA : ISDODataObject;
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locSetting : TValueSetting;
|
|
|
+ buffer : TSDOString;
|
|
|
+ locCS : ISDOChangeSummary;
|
|
|
+begin
|
|
|
+ locProp := FFactoryX.getType(s_uri,s_type_object_A).getProperty(LOCAL_PROP_NAME);
|
|
|
+ locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
|
|
|
+ locObjA.setString(locProp,'X-PASCAL');
|
|
|
+ locSetting := nil;
|
|
|
+ try
|
|
|
+ buffer := locObjA.getString(locProp);
|
|
|
+ locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
|
|
|
+
|
|
|
+ locCS := locObjA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locObjA.unset(locProp);
|
|
|
+ locCS.endLogging();
|
|
|
+ locCS.undoChanges();
|
|
|
+ CheckEquals(0,locCS.getChangedDataObjects().size());
|
|
|
+ check_value(locObjA,locProp,locSetting);
|
|
|
+ finally
|
|
|
+ FreeAndNil(locSetting);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.undoChanges_simple_setnull_bool();
|
|
|
+const
|
|
|
+ LOCAL_PROP_NAME = s_bool_prop;
|
|
|
+var
|
|
|
+ locObjA : ISDODataObject;
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locSetting : TValueSetting;
|
|
|
+ buffer : TSDOBoolean;
|
|
|
+ locCS : ISDOChangeSummary;
|
|
|
+begin
|
|
|
+ locProp := FFactoryX.getType(s_uri,s_type_object_A).getProperty(LOCAL_PROP_NAME);
|
|
|
+ locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
|
|
|
+ locObjA.setBoolean(locProp,True);
|
|
|
+ locSetting := nil;
|
|
|
+ try
|
|
|
+ buffer := locObjA.getBoolean(locProp);
|
|
|
+ locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
|
|
|
+
|
|
|
+ locCS := locObjA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locObjA.setNull(locProp);
|
|
|
+ locCS.endLogging();
|
|
|
+ locCS.undoChanges();
|
|
|
+ CheckEquals(0,locCS.getChangedDataObjects().size());
|
|
|
+ check_value(locObjA,locProp,locSetting);
|
|
|
+ finally
|
|
|
+ FreeAndNil(locSetting);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.undoChanges_simple_setnull_byte();
|
|
|
+const
|
|
|
+ LOCAL_PROP_NAME = s_byte_prop;
|
|
|
+var
|
|
|
+ locObjA : ISDODataObject;
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locSetting : TValueSetting;
|
|
|
+ buffer : TSDOByte;
|
|
|
+ locCS : ISDOChangeSummary;
|
|
|
+begin
|
|
|
+ locProp := FFactoryX.getType(s_uri,s_type_object_A).getProperty(LOCAL_PROP_NAME);
|
|
|
+ locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
|
|
|
+ locObjA.setByte(locProp,RandomRange(Low(TSDOByte),High(TSDOByte)));
|
|
|
+ locSetting := nil;
|
|
|
+ try
|
|
|
+ buffer := locObjA.getByte(locProp);
|
|
|
+ locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
|
|
|
+
|
|
|
+ locCS := locObjA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locObjA.setNull(locProp);
|
|
|
+ locCS.endLogging();
|
|
|
+ locCS.undoChanges();
|
|
|
+ CheckEquals(0,locCS.getChangedDataObjects().size());
|
|
|
+ check_value(locObjA,locProp,locSetting);
|
|
|
+ finally
|
|
|
+ FreeAndNil(locSetting);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.undoChanges_simple_setnull_integer();
|
|
|
+const
|
|
|
+ LOCAL_PROP_NAME = s_integer_prop;
|
|
|
+var
|
|
|
+ locObjA : ISDODataObject;
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locSetting : TValueSetting;
|
|
|
+ buffer : TSDOInteger;
|
|
|
+ locCS : ISDOChangeSummary;
|
|
|
+begin
|
|
|
+ locProp := FFactoryX.getType(s_uri,s_type_object_A).getProperty(LOCAL_PROP_NAME);
|
|
|
+ locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
|
|
|
+ locObjA.setInteger(locProp,78910);
|
|
|
+ locSetting := nil;
|
|
|
+ try
|
|
|
+ buffer := locObjA.getInteger(locProp);
|
|
|
+ locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
|
|
|
+
|
|
|
+ locCS := locObjA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locObjA.setNull(locProp);
|
|
|
+ locCS.endLogging();
|
|
|
+ locCS.undoChanges();
|
|
|
+ CheckEquals(0,locCS.getChangedDataObjects().size());
|
|
|
+ check_value(locObjA,locProp,locSetting);
|
|
|
+ finally
|
|
|
+ FreeAndNil(locSetting);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.undoChanges_simple_setnull_string();
|
|
|
+const
|
|
|
+ LOCAL_PROP_NAME = s_string_prop;
|
|
|
+var
|
|
|
+ locObjA : ISDODataObject;
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locSetting : TValueSetting;
|
|
|
+ buffer : TSDOString;
|
|
|
+ locCS : ISDOChangeSummary;
|
|
|
+begin
|
|
|
+ locProp := FFactoryX.getType(s_uri,s_type_object_A).getProperty(LOCAL_PROP_NAME);
|
|
|
+ locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
|
|
|
+ locObjA.setString(locProp,'FGHJKLM');
|
|
|
+ locSetting := nil;
|
|
|
+ try
|
|
|
+ buffer := locObjA.getString(locProp);
|
|
|
+ locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
|
|
|
+
|
|
|
+ locCS := locObjA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locObjA.setNull(locProp);
|
|
|
+ locCS.endLogging();
|
|
|
+ locCS.undoChanges();
|
|
|
+ CheckEquals(0,locCS.getChangedDataObjects().size());
|
|
|
+ check_value(locObjA,locProp,locSetting);
|
|
|
+ finally
|
|
|
+ FreeAndNil(locSetting);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.getOldValues_bool();
|
|
|
+const
|
|
|
+ VAL_1 : TSDOBoolean = False;
|
|
|
+ PROP_NAME = s_bool_prop;
|
|
|
+var
|
|
|
+ locObjA, locObjB : ISDODataObject;
|
|
|
+ ls : ISDOSettingList;
|
|
|
+ locProp : ISDOProperty;
|
|
|
+begin
|
|
|
+ locProp := FFactory.getType(s_uri,s_type_object_A).getProperty(PROP_NAME);
|
|
|
+ locObjA := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ locObjB := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ FChangeSummary.beginLogging();
|
|
|
+
|
|
|
+ ls := FChangeSummary.getOldValues(locObjA);
|
|
|
+ CheckEquals(0, ls.size());
|
|
|
+ ls := FChangeSummary.getOldValues(locObjB);
|
|
|
+ CheckEquals(0, ls.size());
|
|
|
+
|
|
|
+ locObjA.setBoolean(locProp,VAL_1);
|
|
|
+ FRecorder.recordChange(locObjA,locProp);
|
|
|
+ ls := FChangeSummary.getOldValues(locObjA);
|
|
|
+ CheckEquals(1,ls.size());
|
|
|
+
|
|
|
+ locObjB.setBoolean(locProp,VAL_1);
|
|
|
+ FRecorder.recordChange(locObjB,locProp);
|
|
|
+ ls := FChangeSummary.getOldValues(locObjA);
|
|
|
+ CheckEquals(1,ls.size());
|
|
|
+
|
|
|
+ ls := FChangeSummary.getOldValues(locObjB);
|
|
|
+ CheckEquals(1,ls.size());
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.getOldValues_byte();
|
|
|
+const
|
|
|
+ VAL_1 : TSDOByte = 123;
|
|
|
+ PROP_NAME = s_byte_prop;
|
|
|
+var
|
|
|
+ locObjA, locObjB : ISDODataObject;
|
|
|
+ ls : ISDOSettingList;
|
|
|
+ locProp : ISDOProperty;
|
|
|
+begin
|
|
|
+ locProp := FFactory.getType(s_uri,s_type_object_A).getProperty(PROP_NAME);
|
|
|
+ locObjA := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ locObjB := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ FChangeSummary.beginLogging();
|
|
|
+
|
|
|
+ ls := FChangeSummary.getOldValues(locObjA);
|
|
|
+ CheckEquals(0, ls.size());
|
|
|
+ ls := FChangeSummary.getOldValues(locObjB);
|
|
|
+ CheckEquals(0, ls.size());
|
|
|
+
|
|
|
+ locObjA.setByte(locProp,VAL_1);
|
|
|
+ FRecorder.recordChange(locObjA,locProp);
|
|
|
+ ls := FChangeSummary.getOldValues(locObjA);
|
|
|
+ CheckEquals(1,ls.size());
|
|
|
+
|
|
|
+ locObjB.setByte(locProp,VAL_1);
|
|
|
+ FRecorder.recordChange(locObjB,locProp);
|
|
|
+ ls := FChangeSummary.getOldValues(locObjA);
|
|
|
+ CheckEquals(1,ls.size());
|
|
|
+
|
|
|
+ ls := FChangeSummary.getOldValues(locObjB);
|
|
|
+ CheckEquals(1,ls.size());
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.getOldValue_bool();
|
|
|
+const
|
|
|
+ VAL_1 : TSDOBoolean = True;
|
|
|
+ VAL_2 : TSDOBoolean = False;
|
|
|
+ PROP_NAME = s_bool_prop;
|
|
|
+var
|
|
|
+ locObjA, locObjB : ISDODataObject;
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locSetting : TValueSetting;
|
|
|
+begin
|
|
|
+ locProp := FFactory.getType(s_uri,s_type_object_A).getProperty(PROP_NAME);
|
|
|
+ locObjA := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ locObjB := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ FChangeSummary.beginLogging();
|
|
|
+
|
|
|
+ CheckEquals(PtrUInt(nil), PtrUInt(FChangeSummary.getOldValue(locObjA,locProp)));
|
|
|
+
|
|
|
+ locObjA.setBoolean(locProp,VAL_1);
|
|
|
+ FRecorder.recordChange(locObjA,locProp);
|
|
|
+ locSetting := FChangeSummary.getOldValue(locObjA,locProp);
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting));
|
|
|
+ CheckEquals(PtrUInt(locProp), PtrUInt(locSetting.getProperty()));
|
|
|
+
|
|
|
+ locObjB.setBoolean(locProp,VAL_2);
|
|
|
+ FRecorder.recordChange(locObjB,locProp);
|
|
|
+ locSetting := FChangeSummary.getOldValue(locObjB,locProp);
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting));
|
|
|
+ CheckEquals(PtrUInt(locProp), PtrUInt(locSetting.getProperty()));
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.getOldValue_byte();
|
|
|
+const
|
|
|
+ VAL_1 : TSDOByte = 123;
|
|
|
+ VAL_2 : TSDOByte = 78;
|
|
|
+ PROP_NAME = s_byte_prop;
|
|
|
+var
|
|
|
+ locObjA, locObjB : ISDODataObject;
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locSetting : TValueSetting;
|
|
|
+begin
|
|
|
+ locProp := FFactory.getType(s_uri,s_type_object_A).getProperty(PROP_NAME);
|
|
|
+ locObjA := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ locObjB := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ FChangeSummary.beginLogging();
|
|
|
+
|
|
|
+ CheckEquals(PtrUInt(nil), PtrUInt(FChangeSummary.getOldValue(locObjA,locProp)));
|
|
|
+
|
|
|
+ locObjA.setByte(locProp,VAL_1);
|
|
|
+ FRecorder.recordChange(locObjA,locProp);
|
|
|
+ locSetting := FChangeSummary.getOldValue(locObjA,locProp);
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting));
|
|
|
+ CheckEquals(PtrUInt(locProp), PtrUInt(locSetting.getProperty()));
|
|
|
+
|
|
|
+ locObjB.setByte(locProp,VAL_2);
|
|
|
+ FRecorder.recordChange(locObjB,locProp);
|
|
|
+ locSetting := FChangeSummary.getOldValue(locObjB,locProp);
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting));
|
|
|
+ CheckEquals(PtrUInt(locProp), PtrUInt(locSetting.getProperty()));
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.getOldValues_date();
|
|
|
+const
|
|
|
+ VAL_1 : TSDODateTime = ( Date : 39000; HourOffset : 5; MinuteOffset : 6; );
|
|
|
+ VAL_2 : TSDODateTime = ( Date : 34567; HourOffset : 8; MinuteOffset : 9; );
|
|
|
+var
|
|
|
+ locObjA, locObjB : ISDODataObject;
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locSetting : TValueSetting;
|
|
|
+begin
|
|
|
+ locProp := FFactory.getType(s_uri,s_type_object_A).getProperty(s_date_prop);
|
|
|
+ locObjA := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ locObjB := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ FChangeSummary.beginLogging();
|
|
|
+
|
|
|
+ CheckEquals(PtrUInt(nil), PtrUInt(FChangeSummary.getOldValue(locObjA,locProp)));
|
|
|
+
|
|
|
+ locObjA.setDate(locProp,VAL_1);
|
|
|
+ FRecorder.recordChange(locObjA,locProp);
|
|
|
+ locSetting := FChangeSummary.getOldValue(locObjA,locProp);
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting));
|
|
|
+ CheckEquals(PtrUInt(locProp), PtrUInt(locSetting.getProperty()));
|
|
|
+
|
|
|
+ locObjB.setDate(locProp,VAL_2);
|
|
|
+ FRecorder.recordChange(locObjB,locProp);
|
|
|
+ locSetting := FChangeSummary.getOldValue(locObjB,locProp);
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting));
|
|
|
+ CheckEquals(PtrUInt(locProp), PtrUInt(locSetting.getProperty()));
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.getOldValues_integer();
|
|
|
+const
|
|
|
+ VAL_1 : TSDOInteger = 123456;
|
|
|
+ PROP_NAME = s_integer_prop;
|
|
|
+var
|
|
|
+ locObjA, locObjB : ISDODataObject;
|
|
|
+ ls : ISDOSettingList;
|
|
|
+ locProp : ISDOProperty;
|
|
|
+begin
|
|
|
+ locProp := FFactory.getType(s_uri,s_type_object_A).getProperty(PROP_NAME);
|
|
|
+ locObjA := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ locObjB := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ FChangeSummary.beginLogging();
|
|
|
+
|
|
|
+ ls := FChangeSummary.getOldValues(locObjA);
|
|
|
+ CheckEquals(0, ls.size());
|
|
|
+ ls := FChangeSummary.getOldValues(locObjB);
|
|
|
+ CheckEquals(0, ls.size());
|
|
|
+
|
|
|
+ locObjA.setInteger(locProp,VAL_1);
|
|
|
+ FRecorder.recordChange(locObjA,locProp);
|
|
|
+ ls := FChangeSummary.getOldValues(locObjA);
|
|
|
+ CheckEquals(1,ls.size());
|
|
|
+
|
|
|
+ locObjB.setInteger(locProp,VAL_1);
|
|
|
+ FRecorder.recordChange(locObjB,locProp);
|
|
|
+ ls := FChangeSummary.getOldValues(locObjA);
|
|
|
+ CheckEquals(1,ls.size());
|
|
|
+
|
|
|
+ ls := FChangeSummary.getOldValues(locObjB);
|
|
|
+ CheckEquals(1,ls.size());
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.getOldValues_string();
|
|
|
+const
|
|
|
+ VAL_1 : TSDOString = 'sdo.standart.AZERTY';
|
|
|
+ PROP_NAME = s_string_prop;
|
|
|
+var
|
|
|
+ locObjA, locObjB : ISDODataObject;
|
|
|
+ ls : ISDOSettingList;
|
|
|
+ locProp : ISDOProperty;
|
|
|
+begin
|
|
|
+ locProp := FFactory.getType(s_uri,s_type_object_A).getProperty(PROP_NAME);
|
|
|
+ locObjA := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ locObjB := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ FChangeSummary.beginLogging();
|
|
|
+
|
|
|
+ ls := FChangeSummary.getOldValues(locObjA);
|
|
|
+ CheckEquals(0, ls.size());
|
|
|
+ ls := FChangeSummary.getOldValues(locObjB);
|
|
|
+ CheckEquals(0, ls.size());
|
|
|
+
|
|
|
+ locObjA.setString(locProp,VAL_1);
|
|
|
+ FRecorder.recordChange(locObjA,locProp);
|
|
|
+ ls := FChangeSummary.getOldValues(locObjA);
|
|
|
+ CheckEquals(1,ls.size());
|
|
|
+
|
|
|
+ locObjB.setString(locProp,VAL_1);
|
|
|
+ FRecorder.recordChange(locObjB,locProp);
|
|
|
+ ls := FChangeSummary.getOldValues(locObjA);
|
|
|
+ CheckEquals(1,ls.size());
|
|
|
+
|
|
|
+ ls := FChangeSummary.getOldValues(locObjB);
|
|
|
+ CheckEquals(1,ls.size());
|
|
|
+end;
|
|
|
+
|
|
|
+{$IFDEF HAS_SDO_BYTES}
|
|
|
+procedure TSDOChangeSummary_Test.getOldValues_bytes();
|
|
|
+const
|
|
|
+ PROP_NAME = s_bytes_prop;
|
|
|
+var
|
|
|
+ VAL_1 : TSDOBytes;
|
|
|
+
|
|
|
+ procedure SetConstants();
|
|
|
+ var
|
|
|
+ v : TSDOBytes;
|
|
|
+ k : Integer;
|
|
|
+ begin
|
|
|
+ SetLength(v,10);
|
|
|
+ for k := 0 to High(v) do
|
|
|
+ v[k] := k mod High(TSDOByte);
|
|
|
+ VAL_1 := v;
|
|
|
+ end;
|
|
|
+
|
|
|
+var
|
|
|
+ locObjA, locObjB : ISDODataObject;
|
|
|
+ ls : ISDOSettingList;
|
|
|
+ locProp : ISDOProperty;
|
|
|
+begin
|
|
|
+ SetConstants();
|
|
|
+ locProp := FFactory.getType(s_uri,s_type_object_A).getProperty(PROP_NAME);
|
|
|
+ locObjA := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ locObjB := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ FChangeSummary.beginLogging();
|
|
|
+
|
|
|
+ ls := FChangeSummary.getOldValues(locObjA);
|
|
|
+ CheckEquals(0, ls.size());
|
|
|
+ ls := FChangeSummary.getOldValues(locObjB);
|
|
|
+ CheckEquals(0, ls.size());
|
|
|
+
|
|
|
+ locObjA.setBytes(locProp,VAL_1);
|
|
|
+ FRecorder.recordChange(locObjA,locProp);
|
|
|
+ ls := FChangeSummary.getOldValues(locObjA);
|
|
|
+ CheckEquals(1,ls.size());
|
|
|
+
|
|
|
+ locObjB.setBytes(locProp,VAL_1);
|
|
|
+ FRecorder.recordChange(locObjB,locProp);
|
|
|
+ ls := FChangeSummary.getOldValues(locObjA);
|
|
|
+ CheckEquals(1,ls.size());
|
|
|
+
|
|
|
+ ls := FChangeSummary.getOldValues(locObjB);
|
|
|
+ CheckEquals(1,ls.size());
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.getOldValue_bytes();
|
|
|
+const
|
|
|
+ PROP_NAME = s_bytes_prop;
|
|
|
+var
|
|
|
+ VAL_1, VAL_2 : TSDOBytes;
|
|
|
+
|
|
|
+ procedure SetConstants();
|
|
|
+ var
|
|
|
+ v : TSDOBytes;
|
|
|
+ k : Integer;
|
|
|
+ begin
|
|
|
+ SetLength(v,10);
|
|
|
+ for k := 0 to High(v) do
|
|
|
+ v[k] := k mod High(TSDOByte);
|
|
|
+ VAL_1 := v;
|
|
|
+ v := nil;
|
|
|
+
|
|
|
+ SetLength(v,20);
|
|
|
+ for k := 0 to High(v) do
|
|
|
+ v[k] := ( ( 3 * k ) + 1 ) mod High(TSDOByte);
|
|
|
+ VAL_2 := v;
|
|
|
+ end;
|
|
|
+
|
|
|
+var
|
|
|
+ locObjA, locObjB : ISDODataObject;
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locSetting : TValueSetting;
|
|
|
+begin
|
|
|
+ SetConstants();
|
|
|
+ locProp := FFactory.getType(s_uri,s_type_object_A).getProperty(PROP_NAME);
|
|
|
+ locObjA := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ locObjB := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ FChangeSummary.beginLogging();
|
|
|
+
|
|
|
+ CheckEquals(PtrUInt(nil), PtrUInt(FChangeSummary.getOldValue(locObjA,locProp)));
|
|
|
+
|
|
|
+ locObjA.setBytes(locProp,VAL_1);
|
|
|
+ FRecorder.recordChange(locObjA,locProp);
|
|
|
+ locSetting := FChangeSummary.getOldValue(locObjA,locProp);
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting));
|
|
|
+ CheckEquals(PtrUInt(locProp), PtrUInt(locSetting.getProperty()));
|
|
|
+
|
|
|
+ locObjB.setBytes(locProp,VAL_2);
|
|
|
+ FRecorder.recordChange(locObjB,locProp);
|
|
|
+ locSetting := FChangeSummary.getOldValue(locObjB,locProp);
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting));
|
|
|
+ CheckEquals(PtrUInt(locProp), PtrUInt(locSetting.getProperty()));
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.undoChanges_simple_bytes();
|
|
|
+const
|
|
|
+ LOCAL_PROP_NAME = s_bytes_prop;
|
|
|
+var
|
|
|
+ locObjA : ISDODataObject;
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locSetting : TValueSetting;
|
|
|
+ buffer : TSDOBytes;
|
|
|
+ locCS : ISDOChangeSummary;
|
|
|
+begin
|
|
|
+ locProp := FFactoryX.getType(s_uri,s_type_object_A).getProperty(LOCAL_PROP_NAME);
|
|
|
+ locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
|
|
|
+ locObjA.setBytes(locProp,RandomBytes(100));
|
|
|
+ locSetting := nil;
|
|
|
+ try
|
|
|
+ buffer := locObjA.getBytes(locProp);
|
|
|
+ locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
|
|
|
+
|
|
|
+ locCS := locObjA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locObjA.setBytes(locProp,RandomBytes(100));
|
|
|
+ locCS.endLogging();
|
|
|
+ locCS.undoChanges();
|
|
|
+ CheckEquals(0,locCS.getChangedDataObjects().size());
|
|
|
+ check_value(locObjA,locProp,locSetting);
|
|
|
+
|
|
|
+ FreeAndNil(locSetting);
|
|
|
+ buffer := locObjA.getBytes(locProp);
|
|
|
+ locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
|
|
|
+
|
|
|
+ locCS := locObjA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locObjA.setBytes(locProp,RandomBytes(100));
|
|
|
+ locObjA.setBytes(locProp,RandomBytes(100));
|
|
|
+ locCS.endLogging();
|
|
|
+ locCS.undoChanges();
|
|
|
+ CheckEquals(0,locCS.getChangedDataObjects().size());
|
|
|
+ check_value(locObjA,locProp,locSetting);
|
|
|
+ finally
|
|
|
+ FreeAndNil(locSetting);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.undoChanges_simple_unset_bytes();
|
|
|
+const
|
|
|
+ LOCAL_PROP_NAME = s_bytes_prop;
|
|
|
+var
|
|
|
+ locObjA : ISDODataObject;
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locSetting : TValueSetting;
|
|
|
+ buffer : TSDOBytes;
|
|
|
+ locCS : ISDOChangeSummary;
|
|
|
+begin
|
|
|
+ locProp := FFactoryX.getType(s_uri,s_type_object_A).getProperty(LOCAL_PROP_NAME);
|
|
|
+ locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
|
|
|
+ locObjA.setBytes(locProp,RandomBytes(100));
|
|
|
+ locSetting := nil;
|
|
|
+ try
|
|
|
+ buffer := locObjA.getBytes(locProp);
|
|
|
+ locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
|
|
|
+
|
|
|
+ locCS := locObjA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locObjA.unset(locProp);
|
|
|
+ locCS.endLogging();
|
|
|
+ locCS.undoChanges();
|
|
|
+ CheckEquals(0,locCS.getChangedDataObjects().size());
|
|
|
+ check_value(locObjA,locProp,locSetting);
|
|
|
+ finally
|
|
|
+ FreeAndNil(locSetting);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.undoChanges_simple_setnull_bytes();
|
|
|
+const
|
|
|
+ LOCAL_PROP_NAME = s_bytes_prop;
|
|
|
+var
|
|
|
+ locObjA : ISDODataObject;
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locSetting : TValueSetting;
|
|
|
+ buffer : TSDOBytes;
|
|
|
+ locCS : ISDOChangeSummary;
|
|
|
+begin
|
|
|
+ locProp := FFactoryX.getType(s_uri,s_type_object_A).getProperty(LOCAL_PROP_NAME);
|
|
|
+ locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
|
|
|
+ locObjA.setBytes(locProp,RandomBytes(100));
|
|
|
+ locSetting := nil;
|
|
|
+ try
|
|
|
+ buffer := locObjA.getBytes(locProp);
|
|
|
+ locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
|
|
|
+
|
|
|
+ locCS := locObjA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locObjA.setNull(locProp);
|
|
|
+ locCS.endLogging();
|
|
|
+ locCS.undoChanges();
|
|
|
+ CheckEquals(0,locCS.getChangedDataObjects().size());
|
|
|
+ check_value(locObjA,locProp,locSetting);
|
|
|
+ finally
|
|
|
+ FreeAndNil(locSetting);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+{$ENDIF HAS_SDO_BYTES}
|
|
|
+
|
|
|
+{$IFDEF HAS_SDO_CHAR}
|
|
|
+procedure TSDOChangeSummary_Test.getOldValues_char();
|
|
|
+const
|
|
|
+ VAL_1 : TSDOChar = 'c';
|
|
|
+ PROP_NAME = s_char_prop;
|
|
|
+var
|
|
|
+ locObjA, locObjB : ISDODataObject;
|
|
|
+ ls : ISDOSettingList;
|
|
|
+ locProp : ISDOProperty;
|
|
|
+begin
|
|
|
+ locProp := FFactory.getType(s_uri,s_type_object_A).getProperty(PROP_NAME);
|
|
|
+ locObjA := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ locObjB := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ FChangeSummary.beginLogging();
|
|
|
+
|
|
|
+ ls := FChangeSummary.getOldValues(locObjA);
|
|
|
+ CheckEquals(0, ls.size());
|
|
|
+ ls := FChangeSummary.getOldValues(locObjB);
|
|
|
+ CheckEquals(0, ls.size());
|
|
|
+
|
|
|
+ locObjA.setCharacter(locProp,VAL_1);
|
|
|
+ FRecorder.recordChange(locObjA,locProp);
|
|
|
+ ls := FChangeSummary.getOldValues(locObjA);
|
|
|
+ CheckEquals(1,ls.size());
|
|
|
+
|
|
|
+ locObjB.setCharacter(locProp,VAL_1);
|
|
|
+ FRecorder.recordChange(locObjB,locProp);
|
|
|
+ ls := FChangeSummary.getOldValues(locObjA);
|
|
|
+ CheckEquals(1,ls.size());
|
|
|
+
|
|
|
+ ls := FChangeSummary.getOldValues(locObjB);
|
|
|
+ CheckEquals(1,ls.size());
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.getOldValue_char();
|
|
|
+const
|
|
|
+ VAL_1 : TSDOChar = 'd';
|
|
|
+ VAL_2 : TSDOChar = 'i';
|
|
|
+ PROP_NAME = s_char_prop;
|
|
|
+var
|
|
|
+ locObjA, locObjB : ISDODataObject;
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locSetting : TValueSetting;
|
|
|
+begin
|
|
|
+ locProp := FFactory.getType(s_uri,s_type_object_A).getProperty(PROP_NAME);
|
|
|
+ locObjA := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ locObjB := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ FChangeSummary.beginLogging();
|
|
|
+
|
|
|
+ CheckEquals(PtrUInt(nil), PtrUInt(FChangeSummary.getOldValue(locObjA,locProp)));
|
|
|
+
|
|
|
+ locObjA.setCharacter(locProp,VAL_1);
|
|
|
+ FRecorder.recordChange(locObjA,locProp);
|
|
|
+ locSetting := FChangeSummary.getOldValue(locObjA,locProp);
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting));
|
|
|
+ CheckEquals(PtrUInt(locProp), PtrUInt(locSetting.getProperty()));
|
|
|
+
|
|
|
+ locObjB.setCharacter(locProp,VAL_2);
|
|
|
+ FRecorder.recordChange(locObjB,locProp);
|
|
|
+ locSetting := FChangeSummary.getOldValue(locObjB,locProp);
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting));
|
|
|
+ CheckEquals(PtrUInt(locProp), PtrUInt(locSetting.getProperty()));
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.undoChanges_simple_char();
|
|
|
+const
|
|
|
+ LOCAL_PROP_NAME = s_char_prop;
|
|
|
+var
|
|
|
+ locObjA : ISDODataObject;
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locSetting : TValueSetting;
|
|
|
+ buffer : TSDOChar;
|
|
|
+ locCS : ISDOChangeSummary;
|
|
|
+begin
|
|
|
+ locProp := FFactoryX.getType(s_uri,s_type_object_A).getProperty(LOCAL_PROP_NAME);
|
|
|
+ locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
|
|
|
+ locObjA.setCharacter(locProp,TSDOChar(RandomRange(Ord(Low(TSDOChar)),Ord(High(TSDOChar)))));
|
|
|
+ locSetting := nil;
|
|
|
+ try
|
|
|
+ buffer := locObjA.getCharacter(locProp);
|
|
|
+ locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
|
|
|
+
|
|
|
+ locCS := locObjA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locObjA.setCharacter(locProp,TSDOChar(RandomRange(Ord(Low(TSDOChar)),Ord(High(TSDOChar)))));
|
|
|
+ locCS.endLogging();
|
|
|
+ locCS.undoChanges();
|
|
|
+ CheckEquals(0,locCS.getChangedDataObjects().size());
|
|
|
+ check_value(locObjA,locProp,locSetting);
|
|
|
+
|
|
|
+ FreeAndNil(locSetting);
|
|
|
+ buffer := locObjA.getCharacter(locProp);
|
|
|
+ locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
|
|
|
+
|
|
|
+ locCS := locObjA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locObjA.setCharacter(locProp,TSDOChar(RandomRange(Ord(Low(TSDOChar)),Ord(High(TSDOChar)))));
|
|
|
+ locObjA.setCharacter(locProp,TSDOChar(RandomRange(Ord(Low(TSDOChar)),Ord(High(TSDOChar)))));
|
|
|
+ locCS.endLogging();
|
|
|
+ locCS.undoChanges();
|
|
|
+ CheckEquals(0,locCS.getChangedDataObjects().size());
|
|
|
+ check_value(locObjA,locProp,locSetting);
|
|
|
+ finally
|
|
|
+ FreeAndNil(locSetting);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.undoChanges_simple_unset_char();
|
|
|
+const
|
|
|
+ LOCAL_PROP_NAME = s_char_prop;
|
|
|
+var
|
|
|
+ locObjA : ISDODataObject;
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locSetting : TValueSetting;
|
|
|
+ buffer : TSDOChar;
|
|
|
+ locCS : ISDOChangeSummary;
|
|
|
+begin
|
|
|
+ locProp := FFactoryX.getType(s_uri,s_type_object_A).getProperty(LOCAL_PROP_NAME);
|
|
|
+ locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
|
|
|
+ locObjA.setCharacter(locProp,TSDOChar(RandomRange(Ord(Low(TSDOChar)),Ord(High(TSDOChar)))));
|
|
|
+ locSetting := nil;
|
|
|
+ try
|
|
|
+ buffer := locObjA.getCharacter(locProp);
|
|
|
+ locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
|
|
|
+
|
|
|
+ locCS := locObjA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locObjA.unset(locProp);
|
|
|
+ locCS.endLogging();
|
|
|
+ locCS.undoChanges();
|
|
|
+ CheckEquals(0,locCS.getChangedDataObjects().size());
|
|
|
+ check_value(locObjA,locProp,locSetting);
|
|
|
+ finally
|
|
|
+ FreeAndNil(locSetting);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.undoChanges_simple_setnull_char();
|
|
|
+const
|
|
|
+ LOCAL_PROP_NAME = s_char_prop;
|
|
|
+var
|
|
|
+ locObjA : ISDODataObject;
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locSetting : TValueSetting;
|
|
|
+ buffer : TSDOChar;
|
|
|
+ locCS : ISDOChangeSummary;
|
|
|
+begin
|
|
|
+ locProp := FFactoryX.getType(s_uri,s_type_object_A).getProperty(LOCAL_PROP_NAME);
|
|
|
+ locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
|
|
|
+ locObjA.setCharacter(locProp,TSDOChar(RandomRange(Ord(Low(TSDOChar)),Ord(High(TSDOChar)))));
|
|
|
+ locSetting := nil;
|
|
|
+ try
|
|
|
+ buffer := locObjA.getCharacter(locProp);
|
|
|
+ locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
|
|
|
+
|
|
|
+ locCS := locObjA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locObjA.setNull(locProp);
|
|
|
+ locCS.endLogging();
|
|
|
+ locCS.undoChanges();
|
|
|
+ CheckEquals(0,locCS.getChangedDataObjects().size());
|
|
|
+ check_value(locObjA,locProp,locSetting);
|
|
|
+ finally
|
|
|
+ FreeAndNil(locSetting);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+{$ENDIF HAS_SDO_CHAR}
|
|
|
+
|
|
|
+{$IFDEF HAS_SDO_CURRENCY}
|
|
|
+procedure TSDOChangeSummary_Test.getOldValues_currency();
|
|
|
+const
|
|
|
+ VAL_1 : TSDOCurrency = 1238527419247;
|
|
|
+ PROP_NAME = s_currency_prop;
|
|
|
+var
|
|
|
+ locObjA, locObjB : ISDODataObject;
|
|
|
+ ls : ISDOSettingList;
|
|
|
+ locProp : ISDOProperty;
|
|
|
+begin
|
|
|
+ locProp := FFactory.getType(s_uri,s_type_object_A).getProperty(PROP_NAME);
|
|
|
+ locObjA := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ locObjB := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ FChangeSummary.beginLogging();
|
|
|
+
|
|
|
+ ls := FChangeSummary.getOldValues(locObjA);
|
|
|
+ CheckEquals(0, ls.size());
|
|
|
+ ls := FChangeSummary.getOldValues(locObjB);
|
|
|
+ CheckEquals(0, ls.size());
|
|
|
+
|
|
|
+ locObjA.setCurrency(locProp,VAL_1);
|
|
|
+ FRecorder.recordChange(locObjA,locProp);
|
|
|
+ ls := FChangeSummary.getOldValues(locObjA);
|
|
|
+ CheckEquals(1,ls.size());
|
|
|
+
|
|
|
+ locObjB.setCurrency(locProp,VAL_1);
|
|
|
+ FRecorder.recordChange(locObjB,locProp);
|
|
|
+ ls := FChangeSummary.getOldValues(locObjA);
|
|
|
+ CheckEquals(1,ls.size());
|
|
|
+
|
|
|
+ ls := FChangeSummary.getOldValues(locObjB);
|
|
|
+ CheckEquals(1,ls.size());
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.getOldValue_currency();
|
|
|
+const
|
|
|
+ VAL_1 : TSDOCurrency = 98765432178225;
|
|
|
+ VAL_2 : TSDOCurrency = -4587412254554;
|
|
|
+ PROP_NAME = s_currency_prop;
|
|
|
+var
|
|
|
+ locObjA, locObjB : ISDODataObject;
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locSetting : TValueSetting;
|
|
|
+begin
|
|
|
+ locProp := FFactory.getType(s_uri,s_type_object_A).getProperty(PROP_NAME);
|
|
|
+ locObjA := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ locObjB := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ FChangeSummary.beginLogging();
|
|
|
+
|
|
|
+ CheckEquals(PtrUInt(nil), PtrUInt(FChangeSummary.getOldValue(locObjA,locProp)));
|
|
|
+
|
|
|
+ locObjA.setCurrency(locProp,VAL_1);
|
|
|
+ FRecorder.recordChange(locObjA,locProp);
|
|
|
+ locSetting := FChangeSummary.getOldValue(locObjA,locProp);
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting));
|
|
|
+ CheckEquals(PtrUInt(locProp), PtrUInt(locSetting.getProperty()));
|
|
|
+
|
|
|
+ locObjB.setCurrency(locProp,VAL_2);
|
|
|
+ FRecorder.recordChange(locObjB,locProp);
|
|
|
+ locSetting := FChangeSummary.getOldValue(locObjB,locProp);
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting));
|
|
|
+ CheckEquals(PtrUInt(locProp), PtrUInt(locSetting.getProperty()));
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.undoChanges_simple_currency();
|
|
|
+const
|
|
|
+ LOCAL_PROP_NAME = s_currency_prop;
|
|
|
+var
|
|
|
+ locObjA : ISDODataObject;
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locSetting : TValueSetting;
|
|
|
+ buffer : TSDOCurrency;
|
|
|
+ locCS : ISDOChangeSummary;
|
|
|
+begin
|
|
|
+ locProp := FFactoryX.getType(s_uri,s_type_object_A).getProperty(LOCAL_PROP_NAME);
|
|
|
+ locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
|
|
|
+ locObjA.setCurrency(locProp,test_suite_utils.RandomRange(Low(Word),High(Word)));
|
|
|
+ locSetting := nil;
|
|
|
+ try
|
|
|
+ buffer := locObjA.getCurrency(locProp);
|
|
|
+ locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
|
|
|
+
|
|
|
+ locCS := locObjA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locObjA.setCurrency(locProp,test_suite_utils.RandomRange(Low(Word),High(Word)));
|
|
|
+ locCS.endLogging();
|
|
|
+ locCS.undoChanges();
|
|
|
+ CheckEquals(0,locCS.getChangedDataObjects().size());
|
|
|
+ check_value(locObjA,locProp,locSetting);
|
|
|
+
|
|
|
+ FreeAndNil(locSetting);
|
|
|
+ buffer := locObjA.getCurrency(locProp);
|
|
|
+ locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
|
|
|
+
|
|
|
+ locCS := locObjA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locObjA.setCurrency(locProp,test_suite_utils.RandomRange(Low(Word),High(Word)));
|
|
|
+ locObjA.setCurrency(locProp,test_suite_utils.RandomRange(Low(Word),High(Word)));
|
|
|
+ locCS.endLogging();
|
|
|
+ locCS.undoChanges();
|
|
|
+ CheckEquals(0,locCS.getChangedDataObjects().size());
|
|
|
+ check_value(locObjA,locProp,locSetting);
|
|
|
+ finally
|
|
|
+ FreeAndNil(locSetting);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.undoChanges_simple_unset_currency();
|
|
|
+const
|
|
|
+ LOCAL_PROP_NAME = s_currency_prop;
|
|
|
+var
|
|
|
+ locObjA : ISDODataObject;
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locSetting : TValueSetting;
|
|
|
+ buffer : TSDOCurrency;
|
|
|
+ locCS : ISDOChangeSummary;
|
|
|
+begin
|
|
|
+ locProp := FFactoryX.getType(s_uri,s_type_object_A).getProperty(LOCAL_PROP_NAME);
|
|
|
+ locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
|
|
|
+ locObjA.setCurrency(locProp,test_suite_utils.RandomRange(Low(Word),High(Word)));
|
|
|
+ locSetting := nil;
|
|
|
+ try
|
|
|
+ buffer := locObjA.getCurrency(locProp);
|
|
|
+ locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
|
|
|
+
|
|
|
+ locCS := locObjA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locObjA.unset(locProp);
|
|
|
+ locCS.endLogging();
|
|
|
+ locCS.undoChanges();
|
|
|
+ CheckEquals(0,locCS.getChangedDataObjects().size());
|
|
|
+ check_value(locObjA,locProp,locSetting);
|
|
|
+ finally
|
|
|
+ FreeAndNil(locSetting);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.undoChanges_simple_setnull_currency();
|
|
|
+const
|
|
|
+ LOCAL_PROP_NAME = s_currency_prop;
|
|
|
+var
|
|
|
+ locObjA : ISDODataObject;
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locSetting : TValueSetting;
|
|
|
+ buffer : TSDOCurrency;
|
|
|
+ locCS : ISDOChangeSummary;
|
|
|
+begin
|
|
|
+ locProp := FFactoryX.getType(s_uri,s_type_object_A).getProperty(LOCAL_PROP_NAME);
|
|
|
+ locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
|
|
|
+ locObjA.setCurrency(locProp,test_suite_utils.RandomRange(Low(Word),High(Word)));
|
|
|
+ locSetting := nil;
|
|
|
+ try
|
|
|
+ buffer := locObjA.getCurrency(locProp);
|
|
|
+ locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
|
|
|
+
|
|
|
+ locCS := locObjA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locObjA.setNull(locProp);
|
|
|
+ locCS.endLogging();
|
|
|
+ locCS.undoChanges();
|
|
|
+ CheckEquals(0,locCS.getChangedDataObjects().size());
|
|
|
+ check_value(locObjA,locProp,locSetting);
|
|
|
+ finally
|
|
|
+ FreeAndNil(locSetting);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+{$ENDIF HAS_SDO_CURRENCY}
|
|
|
+
|
|
|
+{$IFDEF HAS_SDO_DOUBLE}
|
|
|
+procedure TSDOChangeSummary_Test.getOldValues_double();
|
|
|
+const
|
|
|
+ VAL_1 : TSDODouble = 1238527419247;
|
|
|
+ PROP_NAME = s_double_prop;
|
|
|
+var
|
|
|
+ locObjA, locObjB : ISDODataObject;
|
|
|
+ ls : ISDOSettingList;
|
|
|
+ locProp : ISDOProperty;
|
|
|
+begin
|
|
|
+ locProp := FFactory.getType(s_uri,s_type_object_A).getProperty(PROP_NAME);
|
|
|
+ locObjA := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ locObjB := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ FChangeSummary.beginLogging();
|
|
|
+
|
|
|
+ ls := FChangeSummary.getOldValues(locObjA);
|
|
|
+ CheckEquals(0, ls.size());
|
|
|
+ ls := FChangeSummary.getOldValues(locObjB);
|
|
|
+ CheckEquals(0, ls.size());
|
|
|
+
|
|
|
+ locObjA.setDouble(locProp,VAL_1);
|
|
|
+ FRecorder.recordChange(locObjA,locProp);
|
|
|
+ ls := FChangeSummary.getOldValues(locObjA);
|
|
|
+ CheckEquals(1,ls.size());
|
|
|
+
|
|
|
+ locObjB.setDouble(locProp,VAL_1);
|
|
|
+ FRecorder.recordChange(locObjB,locProp);
|
|
|
+ ls := FChangeSummary.getOldValues(locObjA);
|
|
|
+ CheckEquals(1,ls.size());
|
|
|
+
|
|
|
+ ls := FChangeSummary.getOldValues(locObjB);
|
|
|
+ CheckEquals(1,ls.size());
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.getOldValue_double();
|
|
|
+const
|
|
|
+ VAL_1 : TSDODouble = 9876543211478225;
|
|
|
+ VAL_2 : TSDODouble = -4587412282254554;
|
|
|
+ PROP_NAME = s_double_prop;
|
|
|
+var
|
|
|
+ locObjA, locObjB : ISDODataObject;
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locSetting : TValueSetting;
|
|
|
+begin
|
|
|
+ locProp := FFactory.getType(s_uri,s_type_object_A).getProperty(PROP_NAME);
|
|
|
+ locObjA := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ locObjB := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ FChangeSummary.beginLogging();
|
|
|
+
|
|
|
+ CheckEquals(PtrUInt(nil), PtrUInt(FChangeSummary.getOldValue(locObjA,locProp)));
|
|
|
+
|
|
|
+ locObjA.setDouble(locProp,VAL_1);
|
|
|
+ FRecorder.recordChange(locObjA,locProp);
|
|
|
+ locSetting := FChangeSummary.getOldValue(locObjA,locProp);
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting));
|
|
|
+ CheckEquals(PtrUInt(locProp), PtrUInt(locSetting.getProperty()));
|
|
|
+
|
|
|
+ locObjB.setDouble(locProp,VAL_2);
|
|
|
+ FRecorder.recordChange(locObjB,locProp);
|
|
|
+ locSetting := FChangeSummary.getOldValue(locObjB,locProp);
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting));
|
|
|
+ CheckEquals(PtrUInt(locProp), PtrUInt(locSetting.getProperty()));
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.undoChanges_simple_double();
|
|
|
+const
|
|
|
+ LOCAL_PROP_NAME = s_double_prop;
|
|
|
+var
|
|
|
+ locObjA : ISDODataObject;
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locSetting : TValueSetting;
|
|
|
+ buffer : TSDODouble;
|
|
|
+ locCS : ISDOChangeSummary;
|
|
|
+begin
|
|
|
+ locProp := FFactoryX.getType(s_uri,s_type_object_A).getProperty(LOCAL_PROP_NAME);
|
|
|
+ locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
|
|
|
+ locObjA.setDouble(locProp,test_suite_utils.RandomRange(Low(Word),High(Word)));
|
|
|
+ locSetting := nil;
|
|
|
+ try
|
|
|
+ buffer := locObjA.getDouble(locProp);
|
|
|
+ locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
|
|
|
+
|
|
|
+ locCS := locObjA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locObjA.setDouble(locProp,test_suite_utils.RandomRange(Low(Word),High(Word)));
|
|
|
+ locCS.endLogging();
|
|
|
+ locCS.undoChanges();
|
|
|
+ CheckEquals(0,locCS.getChangedDataObjects().size());
|
|
|
+ check_value(locObjA,locProp,locSetting);
|
|
|
+
|
|
|
+ FreeAndNil(locSetting);
|
|
|
+ buffer := locObjA.getDouble(locProp);
|
|
|
+ locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
|
|
|
+
|
|
|
+ locCS := locObjA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locObjA.setDouble(locProp,test_suite_utils.RandomRange(Low(Word),High(Word)));
|
|
|
+ locObjA.setDouble(locProp,test_suite_utils.RandomRange(Low(Word),High(Word)));
|
|
|
+ locCS.endLogging();
|
|
|
+ locCS.undoChanges();
|
|
|
+ CheckEquals(0,locCS.getChangedDataObjects().size());
|
|
|
+ check_value(locObjA,locProp,locSetting);
|
|
|
+ finally
|
|
|
+ FreeAndNil(locSetting);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.undoChanges_simple_unset_double();
|
|
|
+const
|
|
|
+ LOCAL_PROP_NAME = s_double_prop;
|
|
|
+var
|
|
|
+ locObjA : ISDODataObject;
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locSetting : TValueSetting;
|
|
|
+ buffer : TSDODouble;
|
|
|
+ locCS : ISDOChangeSummary;
|
|
|
+begin
|
|
|
+ locProp := FFactoryX.getType(s_uri,s_type_object_A).getProperty(LOCAL_PROP_NAME);
|
|
|
+ locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
|
|
|
+ locObjA.setDouble(locProp,test_suite_utils.RandomRange(Low(Word),High(Word)));
|
|
|
+ locSetting := nil;
|
|
|
+ try
|
|
|
+ buffer := locObjA.getDouble(locProp);
|
|
|
+ locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
|
|
|
+
|
|
|
+ locCS := locObjA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locObjA.unset(locProp);
|
|
|
+ locCS.endLogging();
|
|
|
+ locCS.undoChanges();
|
|
|
+ CheckEquals(0,locCS.getChangedDataObjects().size());
|
|
|
+ check_value(locObjA,locProp,locSetting);
|
|
|
+ finally
|
|
|
+ FreeAndNil(locSetting);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.undoChanges_simple_setnull_double();
|
|
|
+const
|
|
|
+ LOCAL_PROP_NAME = s_double_prop;
|
|
|
+var
|
|
|
+ locObjA : ISDODataObject;
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locSetting : TValueSetting;
|
|
|
+ buffer : TSDODouble;
|
|
|
+ locCS : ISDOChangeSummary;
|
|
|
+begin
|
|
|
+ locProp := FFactoryX.getType(s_uri,s_type_object_A).getProperty(LOCAL_PROP_NAME);
|
|
|
+ locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
|
|
|
+ locObjA.setDouble(locProp,test_suite_utils.RandomRange(Low(Word),High(Word)));
|
|
|
+ locSetting := nil;
|
|
|
+ try
|
|
|
+ buffer := locObjA.getDouble(locProp);
|
|
|
+ locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
|
|
|
+
|
|
|
+ locCS := locObjA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locObjA.setNull(locProp);
|
|
|
+ locCS.endLogging();
|
|
|
+ locCS.undoChanges();
|
|
|
+ CheckEquals(0,locCS.getChangedDataObjects().size());
|
|
|
+ check_value(locObjA,locProp,locSetting);
|
|
|
+ finally
|
|
|
+ FreeAndNil(locSetting);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+{$ENDIF HAS_SDO_DOUBLE}
|
|
|
+
|
|
|
+{$IFDEF HAS_SDO_FLOAT}
|
|
|
+procedure TSDOChangeSummary_Test.getOldValues_float();
|
|
|
+const
|
|
|
+ VAL_1 : TSDOFloat = 1238527419247;
|
|
|
+ PROP_NAME = s_float_prop;
|
|
|
+var
|
|
|
+ locObjA, locObjB : ISDODataObject;
|
|
|
+ ls : ISDOSettingList;
|
|
|
+ locProp : ISDOProperty;
|
|
|
+begin
|
|
|
+ locProp := FFactory.getType(s_uri,s_type_object_A).getProperty(PROP_NAME);
|
|
|
+ locObjA := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ locObjB := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ FChangeSummary.beginLogging();
|
|
|
+
|
|
|
+ ls := FChangeSummary.getOldValues(locObjA);
|
|
|
+ CheckEquals(0, ls.size());
|
|
|
+ ls := FChangeSummary.getOldValues(locObjB);
|
|
|
+ CheckEquals(0, ls.size());
|
|
|
+
|
|
|
+ locObjA.setFloat(locProp,VAL_1);
|
|
|
+ FRecorder.recordChange(locObjA,locProp);
|
|
|
+ ls := FChangeSummary.getOldValues(locObjA);
|
|
|
+ CheckEquals(1,ls.size());
|
|
|
+
|
|
|
+ locObjB.setFloat(locProp,VAL_1);
|
|
|
+ FRecorder.recordChange(locObjB,locProp);
|
|
|
+ ls := FChangeSummary.getOldValues(locObjA);
|
|
|
+ CheckEquals(1,ls.size());
|
|
|
+
|
|
|
+ ls := FChangeSummary.getOldValues(locObjB);
|
|
|
+ CheckEquals(1,ls.size());
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.getOldValue_float();
|
|
|
+const
|
|
|
+ VAL_1 : TSDOFloat = 9876543211478225;
|
|
|
+ VAL_2 : TSDOFloat = -4587412282254554;
|
|
|
+ PROP_NAME = s_float_prop;
|
|
|
+var
|
|
|
+ locObjA, locObjB : ISDODataObject;
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locSetting : TValueSetting;
|
|
|
+begin
|
|
|
+ locProp := FFactory.getType(s_uri,s_type_object_A).getProperty(PROP_NAME);
|
|
|
+ locObjA := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ locObjB := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ FChangeSummary.beginLogging();
|
|
|
+
|
|
|
+ CheckEquals(PtrUInt(nil), PtrUInt(FChangeSummary.getOldValue(locObjA,locProp)));
|
|
|
+
|
|
|
+ locObjA.setFloat(locProp,VAL_1);
|
|
|
+ FRecorder.recordChange(locObjA,locProp);
|
|
|
+ locSetting := FChangeSummary.getOldValue(locObjA,locProp);
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting));
|
|
|
+ CheckEquals(PtrUInt(locProp), PtrUInt(locSetting.getProperty()));
|
|
|
+
|
|
|
+ locObjB.setFloat(locProp,VAL_2);
|
|
|
+ FRecorder.recordChange(locObjB,locProp);
|
|
|
+ locSetting := FChangeSummary.getOldValue(locObjB,locProp);
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting));
|
|
|
+ CheckEquals(PtrUInt(locProp), PtrUInt(locSetting.getProperty()));
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.undoChanges_simple_float();
|
|
|
+const
|
|
|
+ LOCAL_PROP_NAME = s_float_prop;
|
|
|
+var
|
|
|
+ locObjA : ISDODataObject;
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locSetting : TValueSetting;
|
|
|
+ buffer : TSDOFloat;
|
|
|
+ locCS : ISDOChangeSummary;
|
|
|
+begin
|
|
|
+ locProp := FFactoryX.getType(s_uri,s_type_object_A).getProperty(LOCAL_PROP_NAME);
|
|
|
+ locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
|
|
|
+ locObjA.setFloat(locProp,test_suite_utils.RandomRange(Low(Word),High(Word)));
|
|
|
+ locSetting := nil;
|
|
|
+ try
|
|
|
+ buffer := locObjA.getFloat(locProp);
|
|
|
+ locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
|
|
|
+
|
|
|
+ locCS := locObjA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locObjA.setFloat(locProp,test_suite_utils.RandomRange(Low(Word),High(Word)));
|
|
|
+ locCS.endLogging();
|
|
|
+ locCS.undoChanges();
|
|
|
+ CheckEquals(0,locCS.getChangedDataObjects().size());
|
|
|
+ check_value(locObjA,locProp,locSetting);
|
|
|
+
|
|
|
+ FreeAndNil(locSetting);
|
|
|
+ buffer := locObjA.getFloat(locProp);
|
|
|
+ locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
|
|
|
+
|
|
|
+ locCS := locObjA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locObjA.setFloat(locProp,test_suite_utils.RandomRange(Low(Word),High(Word)));
|
|
|
+ locObjA.setFloat(locProp,test_suite_utils.RandomRange(Low(Word),High(Word)));
|
|
|
+ locCS.endLogging();
|
|
|
+ locCS.undoChanges();
|
|
|
+ CheckEquals(0,locCS.getChangedDataObjects().size());
|
|
|
+ check_value(locObjA,locProp,locSetting);
|
|
|
+ finally
|
|
|
+ FreeAndNil(locSetting);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.undoChanges_simple_unset_float();
|
|
|
+const
|
|
|
+ LOCAL_PROP_NAME = s_float_prop;
|
|
|
+var
|
|
|
+ locObjA : ISDODataObject;
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locSetting : TValueSetting;
|
|
|
+ buffer : TSDOFloat;
|
|
|
+ locCS : ISDOChangeSummary;
|
|
|
+begin
|
|
|
+ locProp := FFactoryX.getType(s_uri,s_type_object_A).getProperty(LOCAL_PROP_NAME);
|
|
|
+ locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
|
|
|
+ locObjA.setFloat(locProp,test_suite_utils.RandomRange(Low(Word),High(Word)));
|
|
|
+ locSetting := nil;
|
|
|
+ try
|
|
|
+ buffer := locObjA.getFloat(locProp);
|
|
|
+ locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
|
|
|
+
|
|
|
+ locCS := locObjA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locObjA.unset(locProp);
|
|
|
+ locCS.endLogging();
|
|
|
+ locCS.undoChanges();
|
|
|
+ CheckEquals(0,locCS.getChangedDataObjects().size());
|
|
|
+ check_value(locObjA,locProp,locSetting);
|
|
|
+ finally
|
|
|
+ FreeAndNil(locSetting);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.undoChanges_simple_setnull_float();
|
|
|
+const
|
|
|
+ LOCAL_PROP_NAME = s_float_prop;
|
|
|
+var
|
|
|
+ locObjA : ISDODataObject;
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locSetting : TValueSetting;
|
|
|
+ buffer : TSDOFloat;
|
|
|
+ locCS : ISDOChangeSummary;
|
|
|
+begin
|
|
|
+ locProp := FFactoryX.getType(s_uri,s_type_object_A).getProperty(LOCAL_PROP_NAME);
|
|
|
+ locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
|
|
|
+ locObjA.setFloat(locProp,test_suite_utils.RandomRange(Low(Word),High(Word)));
|
|
|
+ locSetting := nil;
|
|
|
+ try
|
|
|
+ buffer := locObjA.getFloat(locProp);
|
|
|
+ locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
|
|
|
+
|
|
|
+ locCS := locObjA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locObjA.setNull(locProp);
|
|
|
+ locCS.endLogging();
|
|
|
+ locCS.undoChanges();
|
|
|
+ CheckEquals(0,locCS.getChangedDataObjects().size());
|
|
|
+ check_value(locObjA,locProp,locSetting);
|
|
|
+ finally
|
|
|
+ FreeAndNil(locSetting);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+{$ENDIF HAS_SDO_FLOAT}
|
|
|
+
|
|
|
+{$IFDEF HAS_SDO_LONG}
|
|
|
+procedure TSDOChangeSummary_Test.getOldValues_long();
|
|
|
+const
|
|
|
+ VAL_1 : TSDOLong = 123852741963654247;
|
|
|
+ PROP_NAME = s_long_prop;
|
|
|
+var
|
|
|
+ locObjA, locObjB : ISDODataObject;
|
|
|
+ ls : ISDOSettingList;
|
|
|
+ locProp : ISDOProperty;
|
|
|
+begin
|
|
|
+ locProp := FFactory.getType(s_uri,s_type_object_A).getProperty(PROP_NAME);
|
|
|
+ locObjA := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ locObjB := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ FChangeSummary.beginLogging();
|
|
|
+
|
|
|
+ ls := FChangeSummary.getOldValues(locObjA);
|
|
|
+ CheckEquals(0, ls.size());
|
|
|
+ ls := FChangeSummary.getOldValues(locObjB);
|
|
|
+ CheckEquals(0, ls.size());
|
|
|
+
|
|
|
+ locObjA.setLong(locProp,VAL_1);
|
|
|
+ FRecorder.recordChange(locObjA,locProp);
|
|
|
+ ls := FChangeSummary.getOldValues(locObjA);
|
|
|
+ CheckEquals(1,ls.size());
|
|
|
+
|
|
|
+ locObjB.setLong(locProp,VAL_1);
|
|
|
+ FRecorder.recordChange(locObjB,locProp);
|
|
|
+ ls := FChangeSummary.getOldValues(locObjA);
|
|
|
+ CheckEquals(1,ls.size());
|
|
|
+
|
|
|
+ ls := FChangeSummary.getOldValues(locObjB);
|
|
|
+ CheckEquals(1,ls.size());
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.getOldValue_long();
|
|
|
+const
|
|
|
+ VAL_1 : TSDOLong = 9876543211478225;
|
|
|
+ VAL_2 : TSDOLong = -4587412282254554;
|
|
|
+ PROP_NAME = s_long_prop;
|
|
|
+var
|
|
|
+ locObjA, locObjB : ISDODataObject;
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locSetting : TValueSetting;
|
|
|
+begin
|
|
|
+ locProp := FFactory.getType(s_uri,s_type_object_A).getProperty(PROP_NAME);
|
|
|
+ locObjA := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ locObjB := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ FChangeSummary.beginLogging();
|
|
|
+
|
|
|
+ CheckEquals(PtrUInt(nil), PtrUInt(FChangeSummary.getOldValue(locObjA,locProp)));
|
|
|
+
|
|
|
+ locObjA.setLong(locProp,VAL_1);
|
|
|
+ FRecorder.recordChange(locObjA,locProp);
|
|
|
+ locSetting := FChangeSummary.getOldValue(locObjA,locProp);
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting));
|
|
|
+ CheckEquals(PtrUInt(locProp), PtrUInt(locSetting.getProperty()));
|
|
|
+
|
|
|
+ locObjB.setLong(locProp,VAL_2);
|
|
|
+ FRecorder.recordChange(locObjB,locProp);
|
|
|
+ locSetting := FChangeSummary.getOldValue(locObjB,locProp);
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting));
|
|
|
+ CheckEquals(PtrUInt(locProp), PtrUInt(locSetting.getProperty()));
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.undoChanges_simple_long();
|
|
|
+const
|
|
|
+ LOCAL_PROP_NAME = s_long_prop;
|
|
|
+var
|
|
|
+ locObjA : ISDODataObject;
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locSetting : TValueSetting;
|
|
|
+ buffer : TSDOLong;
|
|
|
+ locCS : ISDOChangeSummary;
|
|
|
+begin
|
|
|
+ locProp := FFactoryX.getType(s_uri,s_type_object_A).getProperty(LOCAL_PROP_NAME);
|
|
|
+ locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
|
|
|
+ locObjA.setLong(locProp,test_suite_utils.RandomRange(Low(TSDOLong),High(TSDOLong)));
|
|
|
+ locSetting := nil;
|
|
|
+ try
|
|
|
+ buffer := locObjA.getLong(locProp);
|
|
|
+ locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
|
|
|
+
|
|
|
+ locCS := locObjA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locObjA.setLong(locProp,test_suite_utils.RandomRange(Low(TSDOLong),High(TSDOLong)));
|
|
|
+ locCS.endLogging();
|
|
|
+ locCS.undoChanges();
|
|
|
+ CheckEquals(0,locCS.getChangedDataObjects().size());
|
|
|
+ check_value(locObjA,locProp,locSetting);
|
|
|
+
|
|
|
+ FreeAndNil(locSetting);
|
|
|
+ buffer := locObjA.getLong(locProp);
|
|
|
+ locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
|
|
|
+
|
|
|
+ locCS := locObjA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locObjA.setLong(locProp,test_suite_utils.RandomRange(Low(TSDOLong),High(TSDOLong)));
|
|
|
+ locObjA.setLong(locProp,test_suite_utils.RandomRange(Low(TSDOLong),High(TSDOLong)));
|
|
|
+ locCS.endLogging();
|
|
|
+ locCS.undoChanges();
|
|
|
+ CheckEquals(0,locCS.getChangedDataObjects().size());
|
|
|
+ check_value(locObjA,locProp,locSetting);
|
|
|
+ finally
|
|
|
+ FreeAndNil(locSetting);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.undoChanges_simple_unset_long();
|
|
|
+const
|
|
|
+ LOCAL_PROP_NAME = s_long_prop;
|
|
|
+var
|
|
|
+ locObjA : ISDODataObject;
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locSetting : TValueSetting;
|
|
|
+ buffer : TSDOLong;
|
|
|
+ locCS : ISDOChangeSummary;
|
|
|
+begin
|
|
|
+ locProp := FFactoryX.getType(s_uri,s_type_object_A).getProperty(LOCAL_PROP_NAME);
|
|
|
+ locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
|
|
|
+ locObjA.setLong(locProp,test_suite_utils.RandomRange(Low(TSDOLong),High(TSDOLong)));
|
|
|
+ locSetting := nil;
|
|
|
+ try
|
|
|
+ buffer := locObjA.getLong(locProp);
|
|
|
+ locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
|
|
|
+
|
|
|
+ locCS := locObjA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locObjA.unset(locProp);
|
|
|
+ locCS.endLogging();
|
|
|
+ locCS.undoChanges();
|
|
|
+ CheckEquals(0,locCS.getChangedDataObjects().size());
|
|
|
+ check_value(locObjA,locProp,locSetting);
|
|
|
+ finally
|
|
|
+ FreeAndNil(locSetting);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.undoChanges_simple_setnull_long();
|
|
|
+const
|
|
|
+ LOCAL_PROP_NAME = s_long_prop;
|
|
|
+var
|
|
|
+ locObjA : ISDODataObject;
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locSetting : TValueSetting;
|
|
|
+ buffer : TSDOLong;
|
|
|
+ locCS : ISDOChangeSummary;
|
|
|
+begin
|
|
|
+ locProp := FFactoryX.getType(s_uri,s_type_object_A).getProperty(LOCAL_PROP_NAME);
|
|
|
+ locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
|
|
|
+ locObjA.setLong(locProp,test_suite_utils.RandomRange(Low(TSDOLong),High(TSDOLong)));
|
|
|
+ locSetting := nil;
|
|
|
+ try
|
|
|
+ buffer := locObjA.getLong(locProp);
|
|
|
+ locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
|
|
|
+
|
|
|
+ locCS := locObjA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locObjA.setNull(locProp);
|
|
|
+ locCS.endLogging();
|
|
|
+ locCS.undoChanges();
|
|
|
+ CheckEquals(0,locCS.getChangedDataObjects().size());
|
|
|
+ check_value(locObjA,locProp,locSetting);
|
|
|
+ finally
|
|
|
+ FreeAndNil(locSetting);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+{$ENDIF HAS_SDO_LONG}
|
|
|
+
|
|
|
+{$IFDEF HAS_SDO_SHORT}
|
|
|
+procedure TSDOChangeSummary_Test.getOldValues_short();
|
|
|
+const
|
|
|
+ VAL_1 : TSDOShort = 12385;
|
|
|
+ PROP_NAME = s_short_prop;
|
|
|
+var
|
|
|
+ locObjA, locObjB : ISDODataObject;
|
|
|
+ ls : ISDOSettingList;
|
|
|
+ locProp : ISDOProperty;
|
|
|
+begin
|
|
|
+ locProp := FFactory.getType(s_uri,s_type_object_A).getProperty(PROP_NAME);
|
|
|
+ locObjA := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ locObjB := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ FChangeSummary.beginLogging();
|
|
|
+
|
|
|
+ ls := FChangeSummary.getOldValues(locObjA);
|
|
|
+ CheckEquals(0, ls.size());
|
|
|
+ ls := FChangeSummary.getOldValues(locObjB);
|
|
|
+ CheckEquals(0, ls.size());
|
|
|
+
|
|
|
+ locObjA.setShort(locProp,VAL_1);
|
|
|
+ FRecorder.recordChange(locObjA,locProp);
|
|
|
+ ls := FChangeSummary.getOldValues(locObjA);
|
|
|
+ CheckEquals(1,ls.size());
|
|
|
+
|
|
|
+ locObjB.setShort(locProp,VAL_1);
|
|
|
+ FRecorder.recordChange(locObjB,locProp);
|
|
|
+ ls := FChangeSummary.getOldValues(locObjA);
|
|
|
+ CheckEquals(1,ls.size());
|
|
|
+
|
|
|
+ ls := FChangeSummary.getOldValues(locObjB);
|
|
|
+ CheckEquals(1,ls.size());
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.getOldValue_short();
|
|
|
+const
|
|
|
+ VAL_1 : TSDOShort = 9876;
|
|
|
+ VAL_2 : TSDOShort = -4587;
|
|
|
+ PROP_NAME = s_short_prop;
|
|
|
+var
|
|
|
+ locObjA, locObjB : ISDODataObject;
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locSetting : TValueSetting;
|
|
|
+begin
|
|
|
+ locProp := FFactory.getType(s_uri,s_type_object_A).getProperty(PROP_NAME);
|
|
|
+ locObjA := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ locObjB := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ FChangeSummary.beginLogging();
|
|
|
+
|
|
|
+ CheckEquals(PtrUInt(nil), PtrUInt(FChangeSummary.getOldValue(locObjA,locProp)));
|
|
|
+
|
|
|
+ locObjA.setShort(locProp,VAL_1);
|
|
|
+ FRecorder.recordChange(locObjA,locProp);
|
|
|
+ locSetting := FChangeSummary.getOldValue(locObjA,locProp);
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting));
|
|
|
+ CheckEquals(PtrUInt(locProp), PtrUInt(locSetting.getProperty()));
|
|
|
+
|
|
|
+ locObjB.setShort(locProp,VAL_2);
|
|
|
+ FRecorder.recordChange(locObjB,locProp);
|
|
|
+ locSetting := FChangeSummary.getOldValue(locObjB,locProp);
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting));
|
|
|
+ CheckEquals(PtrUInt(locProp), PtrUInt(locSetting.getProperty()));
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.undoChanges_simple_short();
|
|
|
+const
|
|
|
+ LOCAL_PROP_NAME = s_short_prop;
|
|
|
+var
|
|
|
+ locObjA : ISDODataObject;
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locSetting : TValueSetting;
|
|
|
+ buffer : TSDOShort;
|
|
|
+ locCS : ISDOChangeSummary;
|
|
|
+begin
|
|
|
+ locProp := FFactoryX.getType(s_uri,s_type_object_A).getProperty(LOCAL_PROP_NAME);
|
|
|
+ locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
|
|
|
+ locObjA.setShort(locProp,RandomRange(Low(TSDOShort),High(TSDOShort)));
|
|
|
+ locSetting := nil;
|
|
|
+ try
|
|
|
+ buffer := locObjA.getShort(locProp);
|
|
|
+ locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
|
|
|
+
|
|
|
+ locCS := locObjA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locObjA.setShort(locProp,RandomRange(Low(TSDOShort),High(TSDOShort)));
|
|
|
+ locCS.endLogging();
|
|
|
+ locCS.undoChanges();
|
|
|
+ CheckEquals(0,locCS.getChangedDataObjects().size());
|
|
|
+ check_value(locObjA,locProp,locSetting);
|
|
|
+
|
|
|
+ FreeAndNil(locSetting);
|
|
|
+ buffer := locObjA.getShort(locProp);
|
|
|
+ locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
|
|
|
+
|
|
|
+ locCS := locObjA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locObjA.setShort(locProp,RandomRange(Low(TSDOShort),High(TSDOShort)));
|
|
|
+ locObjA.setShort(locProp,RandomRange(Low(TSDOShort),High(TSDOShort)));
|
|
|
+ locCS.endLogging();
|
|
|
+ locCS.undoChanges();
|
|
|
+ CheckEquals(0,locCS.getChangedDataObjects().size());
|
|
|
+ check_value(locObjA,locProp,locSetting);
|
|
|
+ finally
|
|
|
+ FreeAndNil(locSetting);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.undoChanges_simple_unset_short();
|
|
|
+const
|
|
|
+ LOCAL_PROP_NAME = s_short_prop;
|
|
|
+var
|
|
|
+ locObjA : ISDODataObject;
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locSetting : TValueSetting;
|
|
|
+ buffer : TSDOShort;
|
|
|
+ locCS : ISDOChangeSummary;
|
|
|
+begin
|
|
|
+ locProp := FFactoryX.getType(s_uri,s_type_object_A).getProperty(LOCAL_PROP_NAME);
|
|
|
+ locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
|
|
|
+ locObjA.setShort(locProp,RandomRange(Low(TSDOShort),High(TSDOShort)));
|
|
|
+ locSetting := nil;
|
|
|
+ try
|
|
|
+ buffer := locObjA.getShort(locProp);
|
|
|
+ locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
|
|
|
+
|
|
|
+ locCS := locObjA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locObjA.unset(locProp);
|
|
|
+ locCS.endLogging();
|
|
|
+ locCS.undoChanges();
|
|
|
+ CheckEquals(0,locCS.getChangedDataObjects().size());
|
|
|
+ check_value(locObjA,locProp,locSetting);
|
|
|
+ finally
|
|
|
+ FreeAndNil(locSetting);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.undoChanges_simple_setnull_short();
|
|
|
+const
|
|
|
+ LOCAL_PROP_NAME = s_short_prop;
|
|
|
+var
|
|
|
+ locObjA : ISDODataObject;
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locSetting : TValueSetting;
|
|
|
+ buffer : TSDOShort;
|
|
|
+ locCS : ISDOChangeSummary;
|
|
|
+begin
|
|
|
+ locProp := FFactoryX.getType(s_uri,s_type_object_A).getProperty(LOCAL_PROP_NAME);
|
|
|
+ locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
|
|
|
+ locObjA.setShort(locProp,RandomRange(Low(TSDOShort),High(TSDOShort)));
|
|
|
+ locSetting := nil;
|
|
|
+ try
|
|
|
+ buffer := locObjA.getShort(locProp);
|
|
|
+ locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
|
|
|
+
|
|
|
+ locCS := locObjA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locObjA.setNull(locProp);
|
|
|
+ locCS.endLogging();
|
|
|
+ locCS.undoChanges();
|
|
|
+ CheckEquals(0,locCS.getChangedDataObjects().size());
|
|
|
+ check_value(locObjA,locProp,locSetting);
|
|
|
+ finally
|
|
|
+ FreeAndNil(locSetting);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+{$ENDIF HAS_SDO_SHORT}
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.getOldValue_date();
|
|
|
+const
|
|
|
+ VAL_1 : TSDODateTime = ( Date : 39000; HourOffset : 5; MinuteOffset : 6; );
|
|
|
+ VAL_2 : TSDODateTime = ( Date : 34567; HourOffset : 8; MinuteOffset : 9; );
|
|
|
+var
|
|
|
+ locObjA, locObjB : ISDODataObject;
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locSetting : TValueSetting;
|
|
|
+begin
|
|
|
+ locProp := FFactory.getType(s_uri,s_type_object_A).getProperty(s_date_prop);
|
|
|
+ locObjA := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ locObjB := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ FChangeSummary.beginLogging();
|
|
|
+
|
|
|
+ CheckEquals(PtrUInt(nil), PtrUInt(FChangeSummary.getOldValue(locObjA,locProp)));
|
|
|
+
|
|
|
+ locObjA.setDate(locProp,VAL_1);
|
|
|
+ FRecorder.recordChange(locObjA,locProp);
|
|
|
+ locSetting := FChangeSummary.getOldValue(locObjA,locProp);
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting));
|
|
|
+ CheckEquals(PtrUInt(locProp), PtrUInt(locSetting.getProperty()));
|
|
|
+
|
|
|
+ locObjB.setDate(locProp,VAL_2);
|
|
|
+ FRecorder.recordChange(locObjB,locProp);
|
|
|
+ locSetting := FChangeSummary.getOldValue(locObjB,locProp);
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting));
|
|
|
+ CheckEquals(PtrUInt(locProp), PtrUInt(locSetting.getProperty()));
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.getOldValue_Integer();
|
|
|
+const
|
|
|
+ VAL_1 : TSDOInteger = 123456;
|
|
|
+ VAL_2 : TSDOInteger = -987;
|
|
|
+ PROP_NAME = s_integer_prop;
|
|
|
+var
|
|
|
+ locObjA, locObjB : ISDODataObject;
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locSetting : TValueSetting;
|
|
|
+begin
|
|
|
+ locProp := FFactory.getType(s_uri,s_type_object_A).getProperty(PROP_NAME);
|
|
|
+ locObjA := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ locObjB := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ FChangeSummary.beginLogging();
|
|
|
+
|
|
|
+ CheckEquals(PtrUInt(nil), PtrUInt(FChangeSummary.getOldValue(locObjA,locProp)));
|
|
|
+
|
|
|
+ locObjA.setInteger(locProp,VAL_1);
|
|
|
+ FRecorder.recordChange(locObjA,locProp);
|
|
|
+ locSetting := FChangeSummary.getOldValue(locObjA,locProp);
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting));
|
|
|
+ CheckEquals(PtrUInt(locProp), PtrUInt(locSetting.getProperty()));
|
|
|
+
|
|
|
+ locObjB.setInteger(locProp,VAL_2);
|
|
|
+ FRecorder.recordChange(locObjB,locProp);
|
|
|
+ locSetting := FChangeSummary.getOldValue(locObjB,locProp);
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting));
|
|
|
+ CheckEquals(PtrUInt(locProp), PtrUInt(locSetting.getProperty()));
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.getOldValue_string();
|
|
|
+const
|
|
|
+ VAL_1 : TSDOString = 'Inoussa.O';
|
|
|
+ VAL_2 : TSDOString = 'SDO.AZERTY';
|
|
|
+ PROP_NAME = s_string_prop;
|
|
|
+var
|
|
|
+ locObjA, locObjB : ISDODataObject;
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locSetting : TValueSetting;
|
|
|
+begin
|
|
|
+ locProp := FFactory.getType(s_uri,s_type_object_A).getProperty(PROP_NAME);
|
|
|
+ locObjA := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ locObjB := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ FChangeSummary.beginLogging();
|
|
|
+
|
|
|
+ CheckEquals(PtrUInt(nil), PtrUInt(FChangeSummary.getOldValue(locObjA,locProp)));
|
|
|
+
|
|
|
+ locObjA.setString(locProp,VAL_1);
|
|
|
+ FRecorder.recordChange(locObjA,locProp);
|
|
|
+ locSetting := FChangeSummary.getOldValue(locObjA,locProp);
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting));
|
|
|
+ CheckEquals(PtrUInt(locProp), PtrUInt(locSetting.getProperty()));
|
|
|
+
|
|
|
+ locObjB.setString(locProp,VAL_2);
|
|
|
+ FRecorder.recordChange(locObjB,locProp);
|
|
|
+ locSetting := FChangeSummary.getOldValue(locObjB,locProp);
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting));
|
|
|
+ CheckEquals(PtrUInt(locProp), PtrUInt(locSetting.getProperty()));
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.undoChanges_simple_date();
|
|
|
+const
|
|
|
+ LOCAL_PROP_NAME = s_date_prop;
|
|
|
+ VAL_1 : TSDODateTime = ( Date : 39000; HourOffset : 5; MinuteOffset : 6; );
|
|
|
+ VAL_2 : TSDODateTime = ( Date : 34567; HourOffset : 8; MinuteOffset : 9; );
|
|
|
+var
|
|
|
+ locObjA : ISDODataObject;
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locSetting : TValueSetting;
|
|
|
+ buffer : TSDODateTime;
|
|
|
+ locCS : ISDOChangeSummary;
|
|
|
+begin
|
|
|
+ locProp := FFactoryX.getType(s_uri,s_type_object_A).getProperty(LOCAL_PROP_NAME);
|
|
|
+ locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
|
|
|
+ locObjA.setDate(locProp,VAL_1);
|
|
|
+ locSetting := nil;
|
|
|
+ try
|
|
|
+ buffer := locObjA.getDate(locProp);
|
|
|
+ locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
|
|
|
+
|
|
|
+ locCS := locObjA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locObjA.setDate(locProp,VAL_2);
|
|
|
+ locCS.endLogging();
|
|
|
+ locCS.undoChanges();
|
|
|
+ CheckEquals(0,locCS.getChangedDataObjects().size());
|
|
|
+ check_value(locObjA,locProp,locSetting);
|
|
|
+
|
|
|
+ FreeAndNil(locSetting);
|
|
|
+ buffer := locObjA.getDate(locProp);
|
|
|
+ locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
|
|
|
+
|
|
|
+ locCS := locObjA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locObjA.setDate(locProp,VAL_1);
|
|
|
+ locObjA.setDate(locProp,VAL_2);
|
|
|
+ locCS.endLogging();
|
|
|
+ locCS.undoChanges();
|
|
|
+ CheckEquals(0,locCS.getChangedDataObjects().size());
|
|
|
+ check_value(locObjA,locProp,locSetting);
|
|
|
+ finally
|
|
|
+ FreeAndNil(locSetting);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.undoChanges_simple_integer();
|
|
|
+const
|
|
|
+ LOCAL_PROP_NAME = s_integer_prop;
|
|
|
+var
|
|
|
+ locObjA : ISDODataObject;
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locSetting : TValueSetting;
|
|
|
+ buffer : TSDOInteger;
|
|
|
+ locCS : ISDOChangeSummary;
|
|
|
+begin
|
|
|
+ locProp := FFactoryX.getType(s_uri,s_type_object_A).getProperty(LOCAL_PROP_NAME);
|
|
|
+ locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
|
|
|
+ locObjA.setInteger(locProp,RandomRange(-978456,123456));
|
|
|
+ locSetting := nil;
|
|
|
+ try
|
|
|
+ buffer := locObjA.getInteger(locProp);
|
|
|
+ locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
|
|
|
+
|
|
|
+ locCS := locObjA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locObjA.setInteger(locProp,RandomRange(-978456,123456));
|
|
|
+ locCS.endLogging();
|
|
|
+ locCS.undoChanges();
|
|
|
+ CheckEquals(0,locCS.getChangedDataObjects().size());
|
|
|
+ check_value(locObjA,locProp,locSetting);
|
|
|
+
|
|
|
+ FreeAndNil(locSetting);
|
|
|
+ buffer := locObjA.getInteger(locProp);
|
|
|
+ locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
|
|
|
+
|
|
|
+ locCS := locObjA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locObjA.setInteger(locProp,RandomRange(-978456,123456));
|
|
|
+ locObjA.setInteger(locProp,RandomRange(-978456,123456));
|
|
|
+ locCS.endLogging();
|
|
|
+ locCS.undoChanges();
|
|
|
+ CheckEquals(0,locCS.getChangedDataObjects().size());
|
|
|
+ check_value(locObjA,locProp,locSetting);
|
|
|
+ finally
|
|
|
+ FreeAndNil(locSetting);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.undoChanges_simple_string();
|
|
|
+const
|
|
|
+ LOCAL_PROP_NAME = s_string_prop;
|
|
|
+var
|
|
|
+ locObjA : ISDODataObject;
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locSetting : TValueSetting;
|
|
|
+ buffer : TSDOString;
|
|
|
+ locCS : ISDOChangeSummary;
|
|
|
+begin
|
|
|
+ locProp := FFactoryX.getType(s_uri,s_type_object_A).getProperty(LOCAL_PROP_NAME);
|
|
|
+ locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
|
|
|
+ locObjA.setString(locProp,RandomString(RandomRange(0,1000)));
|
|
|
+ locSetting := nil;
|
|
|
+ try
|
|
|
+ buffer := locObjA.getString(locProp);
|
|
|
+ locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
|
|
|
+
|
|
|
+ locCS := locObjA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locObjA.setString(locProp,RandomString(RandomRange(0,1000)));
|
|
|
+ locCS.endLogging();
|
|
|
+ locCS.undoChanges();
|
|
|
+ CheckEquals(0,locCS.getChangedDataObjects().size());
|
|
|
+ check_value(locObjA,locProp,locSetting);
|
|
|
+
|
|
|
+ FreeAndNil(locSetting);
|
|
|
+ buffer := locObjA.getString(locProp);
|
|
|
+ locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
|
|
|
+
|
|
|
+ locCS := locObjA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locObjA.setString(locProp,RandomString(RandomRange(0,1000)));
|
|
|
+ locObjA.setString(locProp,RandomString(RandomRange(0,1000)));
|
|
|
+ locCS.endLogging();
|
|
|
+ locCS.undoChanges();
|
|
|
+ CheckEquals(0,locCS.getChangedDataObjects().size());
|
|
|
+ check_value(locObjA,locProp,locSetting);
|
|
|
+ finally
|
|
|
+ FreeAndNil(locSetting);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.CheckEquals(expected, actual: TSDODate; msg: string; const AStrict: Boolean);
|
|
|
+var
|
|
|
+ e, a : TDateTime;
|
|
|
+ e_y, e_m, e_d, e_h, e_mn, e_ss, e_ms : Word;
|
|
|
+ a_y, a_m, a_d, a_h, a_mn, a_ss, a_ms : Word;
|
|
|
+begin
|
|
|
+ if AStrict then begin
|
|
|
+ Check(CompareMem(@expected, @actual, SizeOf(TSDODate)), msg);
|
|
|
+ end else begin
|
|
|
+ e := NormalizeToUTC(expected);
|
|
|
+ a := NormalizeToUTC(actual);
|
|
|
+ DecodeDateTime(e, e_y, e_m, e_d, e_h, e_mn, e_ss, e_ms);
|
|
|
+ DecodeDateTime(a, a_y, a_m, a_d, a_h, a_mn, a_ss, a_ms);
|
|
|
+ CheckEquals(e_y,a_y,msg);
|
|
|
+ CheckEquals(e_m,a_m,msg);
|
|
|
+ CheckEquals(e_d,a_d,msg);
|
|
|
+ CheckEquals(e_h,a_h,msg);
|
|
|
+ CheckEquals(e_mn,a_mn,msg);
|
|
|
+ CheckEquals(e_ss,a_ss,msg);
|
|
|
+ CheckEquals(e_ms,a_ms,msg);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.undoChanges_simple_unset_date();
|
|
|
+const
|
|
|
+ LOCAL_PROP_NAME = s_date_prop;
|
|
|
+ VAL_1 : TSDODateTime = ( Date : 39000; HourOffset : 5; MinuteOffset : 6; );
|
|
|
+var
|
|
|
+ locObjA : ISDODataObject;
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locSetting : TValueSetting;
|
|
|
+ buffer : TSDODateTime;
|
|
|
+ locCS : ISDOChangeSummary;
|
|
|
+begin
|
|
|
+ locProp := FFactoryX.getType(s_uri,s_type_object_A).getProperty(LOCAL_PROP_NAME);
|
|
|
+ locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
|
|
|
+ locObjA.setDate(locProp,VAL_1);
|
|
|
+ locSetting := nil;
|
|
|
+ try
|
|
|
+ buffer := locObjA.getDate(locProp);
|
|
|
+ locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
|
|
|
+
|
|
|
+ locCS := locObjA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locObjA.unset(locProp);
|
|
|
+ locCS.endLogging();
|
|
|
+ locCS.undoChanges();
|
|
|
+ CheckEquals(0,locCS.getChangedDataObjects().size());
|
|
|
+ check_value(locObjA,locProp,locSetting);
|
|
|
+ finally
|
|
|
+ FreeAndNil(locSetting);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummary_Test.undoChanges_simple_setnull_date();
|
|
|
+const
|
|
|
+ LOCAL_PROP_NAME = s_date_prop;
|
|
|
+ VAL_1 : TSDODateTime = ( Date : 39000; HourOffset : 5; MinuteOffset : 6; );
|
|
|
+var
|
|
|
+ locObjA : ISDODataObject;
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locSetting : TValueSetting;
|
|
|
+ buffer : TSDODateTime;
|
|
|
+ locCS : ISDOChangeSummary;
|
|
|
+begin
|
|
|
+ locProp := FFactoryX.getType(s_uri,s_type_object_A).getProperty(LOCAL_PROP_NAME);
|
|
|
+ locObjA := FFactoryX.createNew(s_uri,s_type_object_A);
|
|
|
+ locObjA.setDate(locProp,VAL_1);
|
|
|
+ locSetting := nil;
|
|
|
+ try
|
|
|
+ buffer := locObjA.getDate(locProp);
|
|
|
+ locSetting := TValueSetting.Create(locObjA.isSet(locProp),locObjA.isNull(locProp),buffer,locProp,0);
|
|
|
+
|
|
|
+ locCS := locObjA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locObjA.setNull(locProp);
|
|
|
+ locCS.endLogging();
|
|
|
+ locCS.undoChanges();
|
|
|
+ CheckEquals(0,locCS.getChangedDataObjects().size());
|
|
|
+ check_value(locObjA,locProp,locSetting);
|
|
|
+ finally
|
|
|
+ FreeAndNil(locSetting);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+{ TSDODataObjectCS_Test }
|
|
|
+type
|
|
|
+ TValueState = record
|
|
|
+ IsSet : Boolean;
|
|
|
+ IsNull : Boolean;
|
|
|
+ Value : TValueBuffer;
|
|
|
+ end;
|
|
|
+
|
|
|
+procedure TSDODataObjectCS_Test.CheckEquals(expected, actual: TSDODate;
|
|
|
+ msg: string; const AStrict: Boolean);
|
|
|
+var
|
|
|
+ e, a : TDateTime;
|
|
|
+ e_y, e_m, e_d, e_h, e_mn, e_ss, e_ms : Word;
|
|
|
+ a_y, a_m, a_d, a_h, a_mn, a_ss, a_ms : Word;
|
|
|
+begin
|
|
|
+ if AStrict then begin
|
|
|
+ Check(CompareMem(@expected, @actual, SizeOf(TSDODate)), msg);
|
|
|
+ end else begin
|
|
|
+ e := NormalizeToUTC(expected);
|
|
|
+ a := NormalizeToUTC(actual);
|
|
|
+ DecodeDateTime(e, e_y, e_m, e_d, e_h, e_mn, e_ss, e_ms);
|
|
|
+ DecodeDateTime(a, a_y, a_m, a_d, a_h, a_mn, a_ss, a_ms);
|
|
|
+ CheckEquals(e_y,a_y,msg);
|
|
|
+ CheckEquals(e_m,a_m,msg);
|
|
|
+ CheckEquals(e_d,a_d,msg);
|
|
|
+ CheckEquals(e_h,a_h,msg);
|
|
|
+ CheckEquals(e_mn,a_mn,msg);
|
|
|
+ CheckEquals(e_ss,a_ss,msg);
|
|
|
+ CheckEquals(e_ms,a_ms,msg);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDODataObjectCS_Test.check_bool_logging(
|
|
|
+ const AObj : ISDODataObject;
|
|
|
+ const APropName : string
|
|
|
+);
|
|
|
+var
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locCS : ISDOChangeSummary;
|
|
|
+ locSetting : TValueSetting;
|
|
|
+ locNewValue : TSDOBoolean;
|
|
|
+ locOldState : TValueState;
|
|
|
+begin
|
|
|
+ locProp := AObj.getProperty(APropName);
|
|
|
+ locCS := AObj.getChangeSummary();
|
|
|
+ locNewValue := ( ( RandomRange(Low(TSDOByte),High(TSDOByte)) mod 2 ) = 0);
|
|
|
+
|
|
|
+ locOldState.Value.BooleanValue := AObj.getBoolean(locProp);
|
|
|
+ locOldState.IsSet := AObj.isSet(locProp);
|
|
|
+ locOldState.IsNull := AObj.isNull(locProp);
|
|
|
+ AObj.setBoolean(locProp,locNewValue);
|
|
|
+ locSetting := locCS.getOldValue(AObj,locProp);
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting), 'getOldValue()');
|
|
|
+ CheckEquals(locOldState.IsSet,locSetting.isSet,'isSet');
|
|
|
+ CheckEquals(locOldState.IsNull,locSetting.isNull,'ISNull');
|
|
|
+ CheckEquals(locOldState.Value.BooleanValue,locSetting.getBooleanValue(),'getBooleanValue');
|
|
|
+
|
|
|
+ locNewValue := ( ( RandomRange(Low(Byte),High(Byte)) mod 2 ) = 0);
|
|
|
+ AObj.setBoolean(locProp,locNewValue); // the recorder should keep the first recorded old values
|
|
|
+ locSetting := locCS.getOldValue(AObj,locProp);
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting), 'getOldValue()');
|
|
|
+ CheckEquals(locOldState.IsSet,locSetting.isSet,'isSet');
|
|
|
+ CheckEquals(locOldState.IsNull,locSetting.isNull,'ISNull');
|
|
|
+ CheckEquals(locOldState.Value.BooleanValue,locSetting.getBooleanValue(),'getBooleanValue');
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDODataObjectCS_Test.check_byte_logging(
|
|
|
+ const AObj : ISDODataObject;
|
|
|
+ const APropName : string
|
|
|
+);
|
|
|
+var
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locCS : ISDOChangeSummary;
|
|
|
+ locSetting : TValueSetting;
|
|
|
+ locNewValue : TSDOByte;
|
|
|
+ locOldState : TValueState;
|
|
|
+begin
|
|
|
+ locProp := AObj.getProperty(APropName);
|
|
|
+ locCS := AObj.getChangeSummary();
|
|
|
+ locNewValue := RandomRange(Low(TSDOByte),High(TSDOByte));
|
|
|
+
|
|
|
+ locOldState.Value.ByteValue := AObj.getByte(locProp);
|
|
|
+ locOldState.IsSet := AObj.isSet(locProp);
|
|
|
+ locOldState.IsNull := AObj.isNull(locProp);
|
|
|
+ AObj.setByte(locProp,locNewValue);
|
|
|
+ locSetting := locCS.getOldValue(AObj,locProp);
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting), 'getOldValue()');
|
|
|
+ CheckEquals(locOldState.IsSet,locSetting.isSet,'isSet');
|
|
|
+ CheckEquals(locOldState.IsNull,locSetting.isNull,'ISNull');
|
|
|
+ CheckEquals(locOldState.Value.ByteValue,locSetting.getByteValue(),'getByteValue');
|
|
|
+
|
|
|
+ locNewValue := RandomRange(Low(TSDOByte),High(TSDOByte));
|
|
|
+ AObj.setByte(locProp,locNewValue); // the recorder should keep the first recorded old values
|
|
|
+ locSetting := locCS.getOldValue(AObj,locProp);
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting), 'getOldValue()');
|
|
|
+ CheckEquals(locOldState.IsSet,locSetting.isSet,'isSet');
|
|
|
+ CheckEquals(locOldState.IsNull,locSetting.isNull,'ISNull');
|
|
|
+ CheckEquals(locOldState.Value.ByteValue,locSetting.getByteValue(),'getByteValue');
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDODataObjectCS_Test.check_date_logging(
|
|
|
+ const AObj : ISDODataObject;
|
|
|
+ const APropName : string
|
|
|
+);
|
|
|
+var
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locCS : ISDOChangeSummary;
|
|
|
+ locSetting : TValueSetting;
|
|
|
+ locNewValue : TSDODateTime;
|
|
|
+ locOldState : TValueState;
|
|
|
+begin
|
|
|
+ locProp := AObj.getProperty(APropName);
|
|
|
+ locCS := AObj.getChangeSummary();
|
|
|
+ locNewValue.Date := 39123.45;
|
|
|
+ locNewValue.HourOffset := 2;
|
|
|
+ locNewValue.MinuteOffset := 3;
|
|
|
+
|
|
|
+ locOldState.Value.DateValue := AObj.getDate(locProp);
|
|
|
+ locOldState.IsSet := AObj.isSet(locProp);
|
|
|
+ locOldState.IsNull := AObj.isNull(locProp);
|
|
|
+ AObj.setDate(locProp,locNewValue);
|
|
|
+ locSetting := locCS.getOldValue(AObj,locProp);
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting), 'getOldValue()');
|
|
|
+ CheckEquals(locOldState.IsSet,locSetting.isSet,'isSet');
|
|
|
+ CheckEquals(locOldState.IsNull,locSetting.isNull,'ISNull');
|
|
|
+ CheckEquals(locOldState.Value.DateValue,locSetting.getDateValue(),'getDateValue');
|
|
|
+
|
|
|
+ locNewValue.Date := 45000;
|
|
|
+ locNewValue.HourOffset := -5;
|
|
|
+ locNewValue.MinuteOffset := 0;
|
|
|
+ AObj.setDate(locProp,locNewValue); // the recorder should keep the first recorded old values
|
|
|
+ locSetting := locCS.getOldValue(AObj,locProp);
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting), 'getOldValue()');
|
|
|
+ CheckEquals(locOldState.IsSet,locSetting.isSet,'isSet');
|
|
|
+ CheckEquals(locOldState.IsNull,locSetting.isNull,'ISNull');
|
|
|
+ CheckEquals(locOldState.Value.DateValue,locSetting.getDateValue(),'getDateValue');
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDODataObjectCS_Test.check_int_logging(
|
|
|
+ const AObj : ISDODataObject;
|
|
|
+ const APropName : string
|
|
|
+);
|
|
|
+var
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locCS : ISDOChangeSummary;
|
|
|
+ locSetting : TValueSetting;
|
|
|
+ locNewValue : TSDOInteger;
|
|
|
+ locOldState : TValueState;
|
|
|
+begin
|
|
|
+ locProp := AObj.getProperty(APropName);
|
|
|
+ locCS := AObj.getChangeSummary();
|
|
|
+ locNewValue := RandomRange(-121076,121076);
|
|
|
+
|
|
|
+ locOldState.Value.IntegerValue := AObj.getInteger(locProp);
|
|
|
+ locOldState.IsSet := AObj.isSet(locProp);
|
|
|
+ locOldState.IsNull := AObj.isNull(locProp);
|
|
|
+ AObj.setInteger(locProp,locNewValue);
|
|
|
+ locSetting := locCS.getOldValue(AObj,locProp);
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting), 'getOldValue()');
|
|
|
+ CheckEquals(locOldState.IsSet,locSetting.isSet,'isSet');
|
|
|
+ CheckEquals(locOldState.IsNull,locSetting.isNull,'ISNull');
|
|
|
+ CheckEquals(locOldState.Value.IntegerValue,locSetting.getIntegerValue(),'getIntegerValue');
|
|
|
+
|
|
|
+ locNewValue := RandomRange(-121076,121076);
|
|
|
+ AObj.setInteger(locProp,locNewValue); // the recorder should keep the first recorded old values
|
|
|
+ locSetting := locCS.getOldValue(AObj,locProp);
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting), 'getOldValue()');
|
|
|
+ CheckEquals(locOldState.IsSet,locSetting.isSet,'isSet');
|
|
|
+ CheckEquals(locOldState.IsNull,locSetting.isNull,'ISNull');
|
|
|
+ CheckEquals(locOldState.Value.IntegerValue,locSetting.getIntegerValue(),'getIntegerValue');
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDODataObjectCS_Test.check_string_logging(
|
|
|
+ const AObj : ISDODataObject;
|
|
|
+ const APropName : string
|
|
|
+);
|
|
|
+var
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locCS : ISDOChangeSummary;
|
|
|
+ locSetting : TValueSetting;
|
|
|
+ locNewValue : TSDOString;
|
|
|
+ locOldState : TValueState;
|
|
|
+begin
|
|
|
+ locProp := AObj.getProperty(APropName);
|
|
|
+ locCS := AObj.getChangeSummary();
|
|
|
+ locNewValue := RandomString(RandomRange(10,1000));
|
|
|
+
|
|
|
+ New(locOldState.Value.StringValue);
|
|
|
+ try
|
|
|
+ locOldState.Value.StringValue^ := AObj.getString(locProp);
|
|
|
+ locOldState.IsSet := AObj.isSet(locProp);
|
|
|
+ locOldState.IsNull := AObj.isNull(locProp);
|
|
|
+ AObj.setString(locProp,locNewValue);
|
|
|
+ locSetting := locCS.getOldValue(AObj,locProp);
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting), 'getOldValue()');
|
|
|
+ CheckEquals(locOldState.IsSet,locSetting.isSet,'isSet');
|
|
|
+ CheckEquals(locOldState.IsNull,locSetting.isNull,'ISNull');
|
|
|
+ CheckEquals(locOldState.Value.StringValue^,locSetting.getStringValue(),'getStringValue');
|
|
|
+
|
|
|
+ locNewValue := RandomString(RandomRange(10,1000));
|
|
|
+ AObj.setString(locProp,locNewValue); // the recorder should keep the first recorded old values
|
|
|
+ locSetting := locCS.getOldValue(AObj,locProp);
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting), 'getOldValue()');
|
|
|
+ CheckEquals(locOldState.IsSet,locSetting.isSet,'isSet');
|
|
|
+ CheckEquals(locOldState.IsNull,locSetting.isNull,'ISNull');
|
|
|
+ CheckEquals(locOldState.Value.StringValue^,locSetting.getStringValue(),'getStringValue');
|
|
|
+ finally
|
|
|
+ Dispose(locOldState.Value.StringValue);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDODataObjectCS_Test.create_default_props();
|
|
|
+var
|
|
|
+ locObj : ISDODataObject;
|
|
|
+ locCS : ISDOChangeSummary;
|
|
|
+begin
|
|
|
+ locObj := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ locCS := locObj.getChangeSummary();
|
|
|
+
|
|
|
+ CheckNotEquals(PtrUInt(nil),PtrUInt(locCS), 'getChangeSummary()');
|
|
|
+ CheckEquals(False, locCS.isLogging());
|
|
|
+end;
|
|
|
+
|
|
|
+class function TSDODataObjectCS_Test.Create_Factory(): ISDODataFactory;
|
|
|
+var
|
|
|
+ locFactory : ISDODataFactory;
|
|
|
+
|
|
|
+ procedure Add_Objects(const AUri : string);
|
|
|
+ var
|
|
|
+ locObj : ISDOType;
|
|
|
+ begin
|
|
|
+ locFactory.AddType(AUri,s_type_object_C,[]);
|
|
|
+ locObj := locFactory.getType(AUri,s_type_object_C);
|
|
|
+ locFactory.addProperty(locObj,s_bool_prop,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType], []);
|
|
|
+ locFactory.addProperty(locObj,s_byte_prop,sdo_namespace,SDOTypeDefaultTypeNames[ByteType], []);
|
|
|
+{$IFDEF HAS_SDO_BYTES}
|
|
|
+ locFactory.addProperty(locObj,s_bytes_prop,sdo_namespace,SDOTypeDefaultTypeNames[BytesType], []);
|
|
|
+{$ENDIF HAS_SDO_BYTES}
|
|
|
+{$IFDEF HAS_SDO_CHAR}
|
|
|
+ locFactory.addProperty(locObj,s_char_prop,sdo_namespace,SDOTypeDefaultTypeNames[CharacterType], []);
|
|
|
+{$ENDIF HAS_SDO_CHAR}
|
|
|
+{$IFDEF HAS_SDO_CURRENCY}
|
|
|
+ locFactory.addProperty(locObj,s_currency_prop,sdo_namespace,SDOTypeDefaultTypeNames[CurrencyType], []);
|
|
|
+{$ENDIF HAS_SDO_CURRENCY}
|
|
|
+ locFactory.addProperty(locObj,s_date_prop,sdo_namespace,SDOTypeDefaultTypeNames[DateTimeType], []);
|
|
|
+{$IFDEF HAS_SDO_DOUBLE}
|
|
|
+ locFactory.addProperty(locObj,s_double_prop,sdo_namespace,SDOTypeDefaultTypeNames[DoubleType], []);
|
|
|
+{$ENDIF HAS_SDO_DOUBLE}
|
|
|
+{$IFDEF HAS_SDO_FLOAT}
|
|
|
+ locFactory.addProperty(locObj,s_float_prop,sdo_namespace,SDOTypeDefaultTypeNames[FloatType], []);
|
|
|
+{$ENDIF HAS_SDO_FLOAT}
|
|
|
+ locFactory.addProperty(locObj,s_integer_prop,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType], []);
|
|
|
+{$IFDEF HAS_SDO_LONG}
|
|
|
+ locFactory.addProperty(locObj,s_long_prop,sdo_namespace,SDOTypeDefaultTypeNames[LongType], []);
|
|
|
+{$ENDIF HAS_SDO_LONG}
|
|
|
+{$IFDEF HAS_SDO_SHORT}
|
|
|
+ locFactory.addProperty(locObj,s_short_prop,sdo_namespace,SDOTypeDefaultTypeNames[ShortType], []);
|
|
|
+{$ENDIF HAS_SDO_SHORT}
|
|
|
+ locFactory.addProperty(locObj,s_string_prop,sdo_namespace,SDOTypeDefaultTypeNames[StringType], []);
|
|
|
+
|
|
|
+ locFactory.AddType(AUri,s_type_object_B,[]);
|
|
|
+ locObj := locFactory.getType(AUri,s_type_object_B);
|
|
|
+ locFactory.addProperty(locObj,s_bool_prop,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType], []);
|
|
|
+ locFactory.addProperty(locObj,s_byte_prop,sdo_namespace,SDOTypeDefaultTypeNames[ByteType], []);
|
|
|
+{$IFDEF HAS_SDO_BYTES}
|
|
|
+ locFactory.addProperty(locObj,s_bytes_prop,sdo_namespace,SDOTypeDefaultTypeNames[BytesType], []);
|
|
|
+{$ENDIF HAS_SDO_BYTES}
|
|
|
+{$IFDEF HAS_SDO_CHAR}
|
|
|
+ locFactory.addProperty(locObj,s_char_prop,sdo_namespace,SDOTypeDefaultTypeNames[CharacterType], []);
|
|
|
+{$ENDIF HAS_SDO_CHAR}
|
|
|
+{$IFDEF HAS_SDO_CURRENCY}
|
|
|
+ locFactory.addProperty(locObj,s_currency_prop,sdo_namespace,SDOTypeDefaultTypeNames[CurrencyType], []);
|
|
|
+{$ENDIF HAS_SDO_CURRENCY}
|
|
|
+ locFactory.addProperty(locObj,s_date_prop,sdo_namespace,SDOTypeDefaultTypeNames[DateTimeType], []);
|
|
|
+{$IFDEF HAS_SDO_DOUBLE}
|
|
|
+ locFactory.addProperty(locObj,s_double_prop,sdo_namespace,SDOTypeDefaultTypeNames[DoubleType], []);
|
|
|
+{$ENDIF HAS_SDO_DOUBLE}
|
|
|
+{$IFDEF HAS_SDO_FLOAT}
|
|
|
+ locFactory.addProperty(locObj,s_float_prop,sdo_namespace,SDOTypeDefaultTypeNames[FloatType], []);
|
|
|
+{$ENDIF HAS_SDO_FLOAT}
|
|
|
+ locFactory.addProperty(locObj,s_integer_prop,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType], []);
|
|
|
+{$IFDEF HAS_SDO_LONG}
|
|
|
+ locFactory.addProperty(locObj,s_long_prop,sdo_namespace,SDOTypeDefaultTypeNames[LongType], []);
|
|
|
+{$ENDIF HAS_SDO_LONG}
|
|
|
+{$IFDEF HAS_SDO_SHORT}
|
|
|
+ locFactory.addProperty(locObj,s_short_prop,sdo_namespace,SDOTypeDefaultTypeNames[ShortType], []);
|
|
|
+{$ENDIF HAS_SDO_SHORT}
|
|
|
+ locFactory.addProperty(locObj,s_string_prop,sdo_namespace,SDOTypeDefaultTypeNames[StringType], []);
|
|
|
+ locFactory.addProperty(locObj,s_object_prop,s_uri,s_type_object_C,[pfIsContainment]);
|
|
|
+
|
|
|
+ locFactory.AddType(AUri,s_type_object_A,[]);
|
|
|
+ locObj := locFactory.getType(AUri,s_type_object_A);
|
|
|
+ locFactory.addProperty(locObj,s_bool_prop,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType], []);
|
|
|
+ locFactory.addProperty(locObj,s_bool_propList,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType],[pfIsMany]);
|
|
|
+ locFactory.addProperty(locObj,s_byte_prop,sdo_namespace,SDOTypeDefaultTypeNames[ByteType], []);
|
|
|
+ locFactory.addProperty(locObj,s_byte_propList,sdo_namespace,SDOTypeDefaultTypeNames[ByteType], [pfIsMany]);
|
|
|
+{$IFDEF HAS_SDO_BYTES}
|
|
|
+ locFactory.addProperty(locObj,s_bytes_prop,sdo_namespace,SDOTypeDefaultTypeNames[BytesType], []);
|
|
|
+ locFactory.addProperty(locObj,s_bytes_propList,sdo_namespace,SDOTypeDefaultTypeNames[BytesType],[pfIsMany]);
|
|
|
+{$ENDIF HAS_SDO_BYTES}
|
|
|
+{$IFDEF HAS_SDO_CHAR}
|
|
|
+ locFactory.addProperty(locObj,s_char_prop,sdo_namespace,SDOTypeDefaultTypeNames[CharacterType], []);
|
|
|
+ locFactory.addProperty(locObj,s_char_propList,sdo_namespace,SDOTypeDefaultTypeNames[CharacterType],[pfIsMany]);
|
|
|
+{$ENDIF HAS_SDO_CHAR}
|
|
|
+{$IFDEF HAS_SDO_CURRENCY}
|
|
|
+ locFactory.addProperty(locObj,s_currency_prop,sdo_namespace,SDOTypeDefaultTypeNames[CurrencyType], []);
|
|
|
+ locFactory.addProperty(locObj,s_currency_propList,sdo_namespace,SDOTypeDefaultTypeNames[CurrencyType],[pfIsMany]);
|
|
|
+{$ENDIF HAS_SDO_CURRENCY}
|
|
|
+ locFactory.addProperty(locObj,s_date_prop,sdo_namespace,SDOTypeDefaultTypeNames[DateTimeType], []);
|
|
|
+ locFactory.addProperty(locObj,s_date_propList,sdo_namespace,SDOTypeDefaultTypeNames[DateTimeType], [pfIsMany]);
|
|
|
+{$IFDEF HAS_SDO_DOUBLE}
|
|
|
+ locFactory.addProperty(locObj,s_double_prop,sdo_namespace,SDOTypeDefaultTypeNames[DoubleType], []);
|
|
|
+ locFactory.addProperty(locObj,s_double_propList,sdo_namespace,SDOTypeDefaultTypeNames[DoubleType],[pfIsMany]);
|
|
|
+{$ENDIF HAS_SDO_DOUBLE}
|
|
|
+{$IFDEF HAS_SDO_FLOAT}
|
|
|
+ locFactory.addProperty(locObj,s_float_prop,sdo_namespace,SDOTypeDefaultTypeNames[FloatType], []);
|
|
|
+ locFactory.addProperty(locObj,s_float_propList,sdo_namespace,SDOTypeDefaultTypeNames[FloatType],[pfIsMany]);
|
|
|
+{$ENDIF HAS_SDO_FLOAT}
|
|
|
+ locFactory.addProperty(locObj,s_integer_prop,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType], []);
|
|
|
+ locFactory.addProperty(locObj,s_integer_propList,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType],[pfIsMany]);
|
|
|
+{$IFDEF HAS_SDO_LONG}
|
|
|
+ locFactory.addProperty(locObj,s_long_prop,sdo_namespace,SDOTypeDefaultTypeNames[LongType], []);
|
|
|
+ locFactory.addProperty(locObj,s_long_propList,sdo_namespace,SDOTypeDefaultTypeNames[LongType],[pfIsMany]);
|
|
|
+{$ENDIF HAS_SDO_LONG}
|
|
|
+{$IFDEF HAS_SDO_SHORT}
|
|
|
+ locFactory.addProperty(locObj,s_short_prop,sdo_namespace,SDOTypeDefaultTypeNames[ShortType], []);
|
|
|
+ locFactory.addProperty(locObj,s_short_propList,sdo_namespace,SDOTypeDefaultTypeNames[ShortType],[pfIsMany]);
|
|
|
+{$ENDIF HAS_SDO_SHORT}
|
|
|
+ locFactory.addProperty(locObj,s_string_prop,sdo_namespace,SDOTypeDefaultTypeNames[StringType], []);
|
|
|
+ locFactory.addProperty(locObj,s_string_propList,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsMany]);
|
|
|
+ locFactory.addProperty(locObj,s_object_prop,s_uri,s_type_object_B,[pfIsContainment]);
|
|
|
+ locFactory.addProperty(locObj,s_object_ref_prop,s_uri,s_type_object_B,[]);
|
|
|
+ locFactory.addProperty(locObj,s_changesummary_prop,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly]);
|
|
|
+
|
|
|
+ end;
|
|
|
+begin
|
|
|
+ locFactory := TSDODataFactory.Create() as ISDODataFactory;
|
|
|
+ Add_Objects(s_uri);
|
|
|
+
|
|
|
+ Result := locFactory;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDODataObjectCS_Test.getChangeSummary();
|
|
|
+var
|
|
|
+ locA, locB, locC : ISDODataObject;
|
|
|
+begin
|
|
|
+ locA := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ locB := FFactory.createNew(s_uri,s_type_object_B);
|
|
|
+ locC := FFactory.createNew(s_uri,s_type_object_C);
|
|
|
+
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(locA.getChangeSummary()));
|
|
|
+ CheckEquals(PtrUInt(nil), PtrUInt(locB.getChangeSummary()));
|
|
|
+ CheckEquals(PtrUInt(nil), PtrUInt(locB.getChangeSummary()));
|
|
|
+
|
|
|
+ locA.setDataObject(s_object_prop,locB);
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(locA.getChangeSummary()));
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(locB.getChangeSummary()));
|
|
|
+ CheckEquals(PtrUInt(nil), PtrUInt(locC.getChangeSummary()));
|
|
|
+
|
|
|
+ locB.setDataObject(s_object_prop,locC);
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(locA.getChangeSummary()));
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(locB.getChangeSummary()));
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(locC.getChangeSummary()));
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDODataObjectCS_Test.logging_bool();
|
|
|
+var
|
|
|
+ locObj : ISDODataObject;
|
|
|
+begin
|
|
|
+ locObj := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ locObj.getChangeSummary().beginLogging();
|
|
|
+
|
|
|
+ check_bool_logging(locObj,s_bool_prop);
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDODataObjectCS_Test.logging_byte();
|
|
|
+var
|
|
|
+ locObj : ISDODataObject;
|
|
|
+begin
|
|
|
+ locObj := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ locObj.getChangeSummary().beginLogging();
|
|
|
+
|
|
|
+ check_byte_logging(locObj,s_byte_prop);
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDODataObjectCS_Test.logging_date();
|
|
|
+var
|
|
|
+ locObj : ISDODataObject;
|
|
|
+begin
|
|
|
+ locObj := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ locObj.getChangeSummary().beginLogging();
|
|
|
+
|
|
|
+ check_date_logging(locObj,s_date_prop);
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDODataObjectCS_Test.logging_int();
|
|
|
+var
|
|
|
+ locObj : ISDODataObject;
|
|
|
+begin
|
|
|
+ locObj := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ locObj.getChangeSummary().beginLogging();
|
|
|
+
|
|
|
+ check_int_logging(locObj,s_integer_prop);
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDODataObjectCS_Test.logging_string();
|
|
|
+var
|
|
|
+ locObj : ISDODataObject;
|
|
|
+begin
|
|
|
+ locObj := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ locObj.getChangeSummary().beginLogging();
|
|
|
+
|
|
|
+ check_string_logging(locObj,s_string_prop);
|
|
|
+end;
|
|
|
+
|
|
|
+{$IFDEF HAS_SDO_BYTES}
|
|
|
+procedure TSDODataObjectCS_Test.check_bytes_logging(
|
|
|
+ const AObj : ISDODataObject;
|
|
|
+ const APropName : string
|
|
|
+);
|
|
|
+var
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locCS : ISDOChangeSummary;
|
|
|
+ locSetting : TValueSetting;
|
|
|
+ locNewValue : TSDOBytes;
|
|
|
+ locOldState : TValueState;
|
|
|
+begin
|
|
|
+ locProp := AObj.getProperty(APropName);
|
|
|
+ locCS := AObj.getChangeSummary();
|
|
|
+ locNewValue := RandomBytes(100);
|
|
|
+
|
|
|
+ New(locOldState.Value.BytesValue);
|
|
|
+ try
|
|
|
+ locOldState.Value.BytesValue^ := AObj.getBytes(locProp);
|
|
|
+ locOldState.IsSet := AObj.isSet(locProp);
|
|
|
+ locOldState.IsNull := AObj.isNull(locProp);
|
|
|
+ AObj.setBytes(locProp,locNewValue);
|
|
|
+ locSetting := locCS.getOldValue(AObj,locProp);
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting), 'getOldValue()');
|
|
|
+ CheckEquals(locOldState.IsSet,locSetting.isSet,'isSet');
|
|
|
+ CheckEquals(locOldState.IsNull,locSetting.isNull,'ISNull');
|
|
|
+ CheckEquals(locOldState.Value.BytesValue^,locSetting.getBytesValue(),'getBytesValue');
|
|
|
+
|
|
|
+ locNewValue := RandomBytes(100);
|
|
|
+ AObj.setBytes(locProp,locNewValue); // the recorder should keep the first recorded old values
|
|
|
+ locSetting := locCS.getOldValue(AObj,locProp);
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting), 'getOldValue()');
|
|
|
+ CheckEquals(locOldState.IsSet,locSetting.isSet,'isSet');
|
|
|
+ CheckEquals(locOldState.IsNull,locSetting.isNull,'ISNull');
|
|
|
+ CheckEquals(locOldState.Value.BytesValue^,locSetting.getBytesValue(),'getBytesValue');
|
|
|
+ finally
|
|
|
+ Dispose(locOldState.Value.BytesValue);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDODataObjectCS_Test.logging_bytes();
|
|
|
+var
|
|
|
+ locObj : ISDODataObject;
|
|
|
+begin
|
|
|
+ locObj := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ locObj.getChangeSummary().beginLogging();
|
|
|
+
|
|
|
+ check_bytes_logging(locObj,s_bytes_prop);
|
|
|
+end;
|
|
|
+{$ENDIF HAS_SDO_BYTES}
|
|
|
+
|
|
|
+{$IFDEF HAS_SDO_CHAR}
|
|
|
+procedure TSDODataObjectCS_Test.check_char_logging(
|
|
|
+ const AObj : ISDODataObject;
|
|
|
+ const APropName : string
|
|
|
+);
|
|
|
+var
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locCS : ISDOChangeSummary;
|
|
|
+ locSetting : TValueSetting;
|
|
|
+ locNewValue : TSDOChar;
|
|
|
+ locOldState : TValueState;
|
|
|
+begin
|
|
|
+ locProp := AObj.getProperty(APropName);
|
|
|
+ locCS := AObj.getChangeSummary();
|
|
|
+ locNewValue := TSDOChar(RandomRange(Ord(Low(TSDOChar)),Ord(High(TSDOChar))));
|
|
|
+
|
|
|
+ locOldState.Value.CharValue := AObj.getCharacter(locProp);
|
|
|
+ locOldState.IsSet := AObj.isSet(locProp);
|
|
|
+ locOldState.IsNull := AObj.isNull(locProp);
|
|
|
+ AObj.setCharacter(locProp,locNewValue);
|
|
|
+ locSetting := locCS.getOldValue(AObj,locProp);
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting), 'getOldValue()');
|
|
|
+ CheckEquals(locOldState.IsSet,locSetting.isSet,'isSet');
|
|
|
+ CheckEquals(locOldState.IsNull,locSetting.isNull,'ISNull');
|
|
|
+ CheckEquals(locOldState.Value.CharValue,locSetting.getCharacterValue(),'getCharacterValue');
|
|
|
+
|
|
|
+ locNewValue := TSDOChar(RandomRange(Ord(Low(TSDOChar)),Ord(High(TSDOChar))));
|
|
|
+ AObj.setCharacter(locProp,locNewValue); // the recorder should keep the first recorded old values
|
|
|
+ locSetting := locCS.getOldValue(AObj,locProp);
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting), 'getOldValue()');
|
|
|
+ CheckEquals(locOldState.IsSet,locSetting.isSet,'isSet');
|
|
|
+ CheckEquals(locOldState.IsNull,locSetting.isNull,'ISNull');
|
|
|
+ CheckEquals(locOldState.Value.CharValue,locSetting.getCharacterValue(),'getCharacterValue');
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDODataObjectCS_Test.logging_char();
|
|
|
+var
|
|
|
+ locObj : ISDODataObject;
|
|
|
+begin
|
|
|
+ locObj := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ locObj.getChangeSummary().beginLogging();
|
|
|
+
|
|
|
+ check_char_logging(locObj,s_char_prop);
|
|
|
+end;
|
|
|
+{$ENDIF HAS_SDO_CHAR}
|
|
|
+
|
|
|
+{$IFDEF HAS_SDO_CURRENCY}
|
|
|
+procedure TSDODataObjectCS_Test.check_currency_logging(
|
|
|
+ const AObj : ISDODataObject;
|
|
|
+ const APropName : string
|
|
|
+);
|
|
|
+var
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locCS : ISDOChangeSummary;
|
|
|
+ locSetting : TValueSetting;
|
|
|
+ locNewValue : TSDOCurrency;
|
|
|
+ locOldState : TValueState;
|
|
|
+begin
|
|
|
+ locProp := AObj.getProperty(APropName);
|
|
|
+ locCS := AObj.getChangeSummary();
|
|
|
+ locNewValue := test_suite_utils.RandomRange(Low(Word),High(Word));
|
|
|
+
|
|
|
+ locOldState.Value.CurrencyValue := AObj.getCurrency(locProp);
|
|
|
+ locOldState.IsSet := AObj.isSet(locProp);
|
|
|
+ locOldState.IsNull := AObj.isNull(locProp);
|
|
|
+ AObj.setCurrency(locProp,locNewValue);
|
|
|
+ locSetting := locCS.getOldValue(AObj,locProp);
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting), 'getOldValue()');
|
|
|
+ CheckEquals(locOldState.IsSet,locSetting.isSet,'isSet');
|
|
|
+ CheckEquals(locOldState.IsNull,locSetting.isNull,'ISNull');
|
|
|
+ CheckEquals(locOldState.Value.CurrencyValue,locSetting.getCurrencyValue(),'getCurrencyValue');
|
|
|
+
|
|
|
+ locNewValue := test_suite_utils.RandomRange(Low(Word),High(Word));
|
|
|
+ AObj.setCurrency(locProp,locNewValue); // the recorder should keep the first recorded old values
|
|
|
+ locSetting := locCS.getOldValue(AObj,locProp);
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting), 'getOldValue()');
|
|
|
+ CheckEquals(locOldState.IsSet,locSetting.isSet,'isSet');
|
|
|
+ CheckEquals(locOldState.IsNull,locSetting.isNull,'ISNull');
|
|
|
+ CheckEquals(locOldState.Value.CurrencyValue,locSetting.getCurrencyValue(),'getCurrencyValue');
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDODataObjectCS_Test.logging_currency();
|
|
|
+var
|
|
|
+ locObj : ISDODataObject;
|
|
|
+begin
|
|
|
+ locObj := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ locObj.getChangeSummary().beginLogging();
|
|
|
+
|
|
|
+ check_currency_logging(locObj,s_currency_prop);
|
|
|
+end;
|
|
|
+{$ENDIF HAS_SDO_CURRENCY}
|
|
|
+
|
|
|
+{$IFDEF HAS_SDO_DOUBLE}
|
|
|
+procedure TSDODataObjectCS_Test.check_double_logging(
|
|
|
+ const AObj : ISDODataObject;
|
|
|
+ const APropName : string
|
|
|
+);
|
|
|
+var
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locCS : ISDOChangeSummary;
|
|
|
+ locSetting : TValueSetting;
|
|
|
+ locNewValue : TSDODouble;
|
|
|
+ locOldState : TValueState;
|
|
|
+begin
|
|
|
+ locProp := AObj.getProperty(APropName);
|
|
|
+ locCS := AObj.getChangeSummary();
|
|
|
+ locNewValue := test_suite_utils.RandomRange(Low(Word),High(Word));
|
|
|
+
|
|
|
+ locOldState.Value.DoubleValue := AObj.getDouble(locProp);
|
|
|
+ locOldState.IsSet := AObj.isSet(locProp);
|
|
|
+ locOldState.IsNull := AObj.isNull(locProp);
|
|
|
+ AObj.setDouble(locProp,locNewValue);
|
|
|
+ locSetting := locCS.getOldValue(AObj,locProp);
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting), 'getOldValue()');
|
|
|
+ CheckEquals(locOldState.IsSet,locSetting.isSet,'isSet');
|
|
|
+ CheckEquals(locOldState.IsNull,locSetting.isNull,'ISNull');
|
|
|
+ CheckEquals(locOldState.Value.DoubleValue,locSetting.getDoubleValue(),'getDoubleValue');
|
|
|
+
|
|
|
+ locNewValue := test_suite_utils.RandomRange(Low(Word),High(Word));
|
|
|
+ AObj.setDouble(locProp,locNewValue); // the recorder should keep the first recorded old values
|
|
|
+ locSetting := locCS.getOldValue(AObj,locProp);
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting), 'getOldValue()');
|
|
|
+ CheckEquals(locOldState.IsSet,locSetting.isSet,'isSet');
|
|
|
+ CheckEquals(locOldState.IsNull,locSetting.isNull,'ISNull');
|
|
|
+ CheckEquals(locOldState.Value.DoubleValue,locSetting.getDoubleValue(),'getDoubleValue');
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDODataObjectCS_Test.logging_double();
|
|
|
+var
|
|
|
+ locObj : ISDODataObject;
|
|
|
+begin
|
|
|
+ locObj := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ locObj.getChangeSummary().beginLogging();
|
|
|
+
|
|
|
+ check_double_logging(locObj,s_double_prop);
|
|
|
+end;
|
|
|
+{$ENDIF HAS_SDO_DOUBLE}
|
|
|
+
|
|
|
+{$IFDEF HAS_SDO_FLOAT}
|
|
|
+procedure TSDODataObjectCS_Test.check_float_logging(
|
|
|
+ const AObj : ISDODataObject;
|
|
|
+ const APropName : string
|
|
|
+);
|
|
|
+var
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locCS : ISDOChangeSummary;
|
|
|
+ locSetting : TValueSetting;
|
|
|
+ locNewValue : TSDOFloat;
|
|
|
+ locOldState : TValueState;
|
|
|
+begin
|
|
|
+ locProp := AObj.getProperty(APropName);
|
|
|
+ locCS := AObj.getChangeSummary();
|
|
|
+ locNewValue := test_suite_utils.RandomRange(Low(Word),High(Word));
|
|
|
+
|
|
|
+ locOldState.Value.FloatValue := AObj.getFloat(locProp);
|
|
|
+ locOldState.IsSet := AObj.isSet(locProp);
|
|
|
+ locOldState.IsNull := AObj.isNull(locProp);
|
|
|
+ AObj.setFloat(locProp,locNewValue);
|
|
|
+ locSetting := locCS.getOldValue(AObj,locProp);
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting), 'getOldValue()');
|
|
|
+ CheckEquals(locOldState.IsSet,locSetting.isSet,'isSet');
|
|
|
+ CheckEquals(locOldState.IsNull,locSetting.isNull,'ISNull');
|
|
|
+ CheckEquals(locOldState.Value.FloatValue,locSetting.getFloatValue(),'getFloatValue');
|
|
|
+
|
|
|
+ locNewValue := test_suite_utils.RandomRange(Low(Word),High(Word));
|
|
|
+ AObj.setFloat(locProp,locNewValue); // the recorder should keep the first recorded old values
|
|
|
+ locSetting := locCS.getOldValue(AObj,locProp);
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting), 'getOldValue()');
|
|
|
+ CheckEquals(locOldState.IsSet,locSetting.isSet,'isSet');
|
|
|
+ CheckEquals(locOldState.IsNull,locSetting.isNull,'ISNull');
|
|
|
+ CheckEquals(locOldState.Value.FloatValue,locSetting.getFloatValue(),'getFloatValue');
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDODataObjectCS_Test.logging_float();
|
|
|
+var
|
|
|
+ locObj : ISDODataObject;
|
|
|
+begin
|
|
|
+ locObj := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ locObj.getChangeSummary().beginLogging();
|
|
|
+
|
|
|
+ check_float_logging(locObj,s_float_prop);
|
|
|
+end;
|
|
|
+{$ENDIF HAS_SDO_FLOAT}
|
|
|
+
|
|
|
+{$IFDEF HAS_SDO_LONG}
|
|
|
+procedure TSDODataObjectCS_Test.check_long_logging(
|
|
|
+ const AObj : ISDODataObject;
|
|
|
+ const APropName : string
|
|
|
+);
|
|
|
+var
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locCS : ISDOChangeSummary;
|
|
|
+ locSetting : TValueSetting;
|
|
|
+ locNewValue : TSDOLong;
|
|
|
+ locOldState : TValueState;
|
|
|
+begin
|
|
|
+ locProp := AObj.getProperty(APropName);
|
|
|
+ locCS := AObj.getChangeSummary();
|
|
|
+ locNewValue := test_suite_utils.RandomRange(Low(TSDOLong),High(TSDOLong));
|
|
|
+
|
|
|
+ locOldState.Value.LongValue := AObj.getLong(locProp);
|
|
|
+ locOldState.IsSet := AObj.isSet(locProp);
|
|
|
+ locOldState.IsNull := AObj.isNull(locProp);
|
|
|
+ AObj.setLong(locProp,locNewValue);
|
|
|
+ locSetting := locCS.getOldValue(AObj,locProp);
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting), 'getOldValue()');
|
|
|
+ CheckEquals(locOldState.IsSet,locSetting.isSet,'isSet');
|
|
|
+ CheckEquals(locOldState.IsNull,locSetting.isNull,'ISNull');
|
|
|
+ CheckEquals(locOldState.Value.LongValue,locSetting.getLongValue(),'getLongValue');
|
|
|
+
|
|
|
+ locNewValue := test_suite_utils.RandomRange(Low(TSDOLong),High(TSDOLong));
|
|
|
+ AObj.setLong(locProp,locNewValue); // the recorder should keep the first recorded old values
|
|
|
+ locSetting := locCS.getOldValue(AObj,locProp);
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting), 'getOldValue()');
|
|
|
+ CheckEquals(locOldState.IsSet,locSetting.isSet,'isSet');
|
|
|
+ CheckEquals(locOldState.IsNull,locSetting.isNull,'ISNull');
|
|
|
+ CheckEquals(locOldState.Value.LongValue,locSetting.getLongValue(),'getLongValue');
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDODataObjectCS_Test.logging_long();
|
|
|
+var
|
|
|
+ locObj : ISDODataObject;
|
|
|
+begin
|
|
|
+ locObj := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ locObj.getChangeSummary().beginLogging();
|
|
|
+
|
|
|
+ check_long_logging(locObj,s_long_prop);
|
|
|
+end;
|
|
|
+{$ENDIF HAS_SDO_LONG}
|
|
|
+
|
|
|
+{$IFDEF HAS_SDO_SHORT}
|
|
|
+procedure TSDODataObjectCS_Test.check_short_logging(
|
|
|
+ const AObj : ISDODataObject;
|
|
|
+ const APropName : string
|
|
|
+);
|
|
|
+var
|
|
|
+ locProp : ISDOProperty;
|
|
|
+ locCS : ISDOChangeSummary;
|
|
|
+ locSetting : TValueSetting;
|
|
|
+ locNewValue : TSDOShort;
|
|
|
+ locOldState : TValueState;
|
|
|
+begin
|
|
|
+ locProp := AObj.getProperty(APropName);
|
|
|
+ locCS := AObj.getChangeSummary();
|
|
|
+ locNewValue := RandomRange(Low(TSDOShort),High(TSDOShort));
|
|
|
+
|
|
|
+ locOldState.Value.ShortValue := AObj.getShort(locProp);
|
|
|
+ locOldState.IsSet := AObj.isSet(locProp);
|
|
|
+ locOldState.IsNull := AObj.isNull(locProp);
|
|
|
+ AObj.setShort(locProp,locNewValue);
|
|
|
+ locSetting := locCS.getOldValue(AObj,locProp);
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting), 'getOldValue()');
|
|
|
+ CheckEquals(locOldState.IsSet,locSetting.isSet,'isSet');
|
|
|
+ CheckEquals(locOldState.IsNull,locSetting.isNull,'ISNull');
|
|
|
+ CheckEquals(locOldState.Value.ShortValue,locSetting.getShortValue(),'getShortValue');
|
|
|
+
|
|
|
+ locNewValue := RandomRange(Low(TSDOShort),High(TSDOShort));
|
|
|
+ AObj.setShort(locProp,locNewValue); // the recorder should keep the first recorded old values
|
|
|
+ locSetting := locCS.getOldValue(AObj,locProp);
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(locSetting), 'getOldValue()');
|
|
|
+ CheckEquals(locOldState.IsSet,locSetting.isSet,'isSet');
|
|
|
+ CheckEquals(locOldState.IsNull,locSetting.isNull,'ISNull');
|
|
|
+ CheckEquals(locOldState.Value.ShortValue,locSetting.getShortValue(),'getShortValue');
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDODataObjectCS_Test.logging_short();
|
|
|
+var
|
|
|
+ locObj : ISDODataObject;
|
|
|
+begin
|
|
|
+ locObj := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ locObj.getChangeSummary().beginLogging();
|
|
|
+
|
|
|
+ check_short_logging(locObj,s_short_prop);
|
|
|
+end;
|
|
|
+{$ENDIF HAS_SDO_SHORT}
|
|
|
+
|
|
|
+procedure TSDODataObjectCS_Test.SetUp();
|
|
|
+begin
|
|
|
+ inherited;
|
|
|
+ FFactory := Create_Factory();
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDODataObjectCS_Test.TearDown();
|
|
|
+begin
|
|
|
+ FFactory := nil;
|
|
|
+ inherited;
|
|
|
+end;
|
|
|
+
|
|
|
+{ TSDOChangeSummaryMultiValueProps_Test }
|
|
|
+
|
|
|
+procedure TSDOChangeSummaryMultiValueProps_Test.CheckEquals(expected,
|
|
|
+ actual: TSDODate; msg: string; const AStrict: Boolean);
|
|
|
+var
|
|
|
+ e, a : TDateTime;
|
|
|
+ e_y, e_m, e_d, e_h, e_mn, e_ss, e_ms : Word;
|
|
|
+ a_y, a_m, a_d, a_h, a_mn, a_ss, a_ms : Word;
|
|
|
+begin
|
|
|
+ if AStrict then begin
|
|
|
+ Check(CompareMem(@expected, @actual, SizeOf(TSDODate)), msg);
|
|
|
+ end else begin
|
|
|
+ e := NormalizeToUTC(expected);
|
|
|
+ a := NormalizeToUTC(actual);
|
|
|
+ DecodeDateTime(e, e_y, e_m, e_d, e_h, e_mn, e_ss, e_ms);
|
|
|
+ DecodeDateTime(a, a_y, a_m, a_d, a_h, a_mn, a_ss, a_ms);
|
|
|
+ CheckEquals(e_y,a_y,msg);
|
|
|
+ CheckEquals(e_m,a_m,msg);
|
|
|
+ CheckEquals(e_d,a_d,msg);
|
|
|
+ CheckEquals(e_h,a_h,msg);
|
|
|
+ CheckEquals(e_mn,a_mn,msg);
|
|
|
+ CheckEquals(e_ss,a_ss,msg);
|
|
|
+ CheckEquals(e_ms,a_ms,msg);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummaryMultiValueProps_Test.getChangedDataObjects_contained_delete_multiprop_1();
|
|
|
+var
|
|
|
+ locFac : ISDODataFactory;
|
|
|
+ locPL, locPJ0, locPJ1, locP1, locP2, locP3 : ISDODataObject;
|
|
|
+ locCS : ISDOChangeSummary;
|
|
|
+ i : PtrInt;
|
|
|
+ ls : ISDOChangedDataObjectList;
|
|
|
+begin
|
|
|
+ locFac := TSDODataFactory.Create() as ISDODataFactory;
|
|
|
+ locFac.AddType(s_uri,'ProjectList',[]);
|
|
|
+ locFac.AddType(s_uri,'ProjectType',[]);
|
|
|
+ locFac.AddType(s_uri,'Person',[]);
|
|
|
+ locFac.addProperty(s_uri,'ProjectList','Project',s_uri,'ProjectType',[pfIsContainment,pfIsMany]);
|
|
|
+ locFac.addProperty(s_uri,'ProjectList',s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly]);
|
|
|
+ locFac.addProperty(s_uri,'ProjectType','Member',s_uri,'Person',[pfIsContainment,pfIsMany]);
|
|
|
+ locFac.addProperty(s_uri,'Person','Manager',s_uri,'Person',[]);
|
|
|
+ locFac.addProperty(s_uri,'Person','Name',sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
|
|
|
+
|
|
|
+ locPL := locFac.createNew(s_uri,'ProjectList');
|
|
|
+ locCS := locPL.getChangeSummary();
|
|
|
+ locCS.endLogging();
|
|
|
+ locPJ0 := locPL.createDataObject('Project');
|
|
|
+ locPL.getList('Project').append(locPJ0);
|
|
|
+ locPJ1 := locPL.createDataObject('Project');
|
|
|
+ locPL.getList('Project').append(locPJ1);
|
|
|
+ locP1 := locPJ1.createDataObject('Member');
|
|
|
+ locPJ1.getList('Member').append(locP1);
|
|
|
+ locP1.setString('Name', 'P1 person');
|
|
|
+ locP2 := locPJ1.createDataObject('Member');
|
|
|
+ locPJ1.getList('Member').append(locP2);
|
|
|
+ locP2.setString('Name', 'P2 person');
|
|
|
+ locP2.setDataObject('Manager', locPJ1.getDataObject('Member[Name="P1 person"]'));
|
|
|
+ locP3 := locPJ1.createDataObject('Member');
|
|
|
+ locPJ1.getList('Member').append(locP3);
|
|
|
+ locP3.setString('Name', 'P3 person');
|
|
|
+ locP1.setDataObject('Manager', locPJ1.getDataObject('Member[Name="P3 person"]'));
|
|
|
+
|
|
|
+ locCS.beginLogging();
|
|
|
+ //locPJ2 := locPL
|
|
|
+ locPL.getList('Project').delete(1);
|
|
|
+
|
|
|
+ ls := locCS.getChangedDataObjects();
|
|
|
+ i := IndexOf(locP1,ls);
|
|
|
+ Check( ( i < 0 ) or ( Ord(ls.getType(i)) = Ord(ctDelete) ) );
|
|
|
+ Check(locCS.isDeleted(locPJ1));
|
|
|
+
|
|
|
+ i := IndexOf(locP2,ls);
|
|
|
+ Check( ( i < 0 ) or ( Ord(ls.getType(i)) = Ord(ctDelete) ) );
|
|
|
+ Check(locCS.isDeleted(locPJ1));
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummaryMultiValueProps_Test.getChangedDataObjects_contained_delete_multiprop_2;
|
|
|
+var
|
|
|
+ locFac : ISDODataFactory;
|
|
|
+ locA, locB, locC : ISDODataObject;
|
|
|
+ locCS : ISDOChangeSummary;
|
|
|
+ ls : ISDOChangedDataObjectList;
|
|
|
+begin
|
|
|
+ locFac := TSDODataFactory.Create() as ISDODataFactory;
|
|
|
+ locFac.AddType(s_uri,'a',[]);
|
|
|
+ locFac.AddType(s_uri,'b',[]);
|
|
|
+ locFac.AddType(s_uri,'c',[]);
|
|
|
+ locFac.addProperty(s_uri,'a','p_ab',s_uri,'b',[pfIsContainment]);
|
|
|
+ locFac.addProperty(s_uri,'b','p_bc',s_uri,'c',[pfIsContainment,pfIsMany]);
|
|
|
+ locFac.addProperty(s_uri,'a',s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly]);
|
|
|
+
|
|
|
+ locA := locFac.createNew(s_uri,'a');
|
|
|
+ locCS := locA.getChangeSummary();
|
|
|
+ locCS.endLogging();
|
|
|
+ locB := locA.createDataObject('p_ab');
|
|
|
+ locCS.beginLogging();
|
|
|
+ locC := locFac.createNew(s_uri,'c');
|
|
|
+ locB.getList('p_bc').append(locC);
|
|
|
+ locA.setDataObject('p_ab',nil);
|
|
|
+
|
|
|
+ ls := locCS.getChangedDataObjects();
|
|
|
+ CheckEquals(2, ls.size());
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummaryMultiValueProps_Test.getChangedDataObjects_contained_delete_multiprop_3();
|
|
|
+var
|
|
|
+ locFac : ISDODataFactory;
|
|
|
+ locA, locB, locC : ISDODataObject;
|
|
|
+ locCS : ISDOChangeSummary;
|
|
|
+ ls : ISDOChangedDataObjectList;
|
|
|
+begin
|
|
|
+ locFac := TSDODataFactory.Create() as ISDODataFactory;
|
|
|
+ locFac.AddType(s_uri,'a',[]);
|
|
|
+ locFac.AddType(s_uri,'b',[]);
|
|
|
+ locFac.AddType(s_uri,'c',[]);
|
|
|
+ locFac.addProperty(s_uri,'a','p_ab',s_uri,'b',[pfIsContainment,pfIsMany]);
|
|
|
+ locFac.addProperty(s_uri,'b','p_bc',s_uri,'c',[pfIsContainment,pfIsMany]);
|
|
|
+ locFac.addProperty(s_uri,'a',s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly]);
|
|
|
+
|
|
|
+ locA := locFac.createNew(s_uri,'a');
|
|
|
+ locCS := locA.getChangeSummary();
|
|
|
+ locCS.endLogging();
|
|
|
+ locB := locA.createDataObject('p_ab');
|
|
|
+ locA.getList('p_ab').append(locB);
|
|
|
+ locCS.beginLogging();
|
|
|
+ locC := locFac.createNew(s_uri,'c');
|
|
|
+ locB.getList('p_bc').append(locC);
|
|
|
+ locA.getList('p_ab').delete(0);
|
|
|
+
|
|
|
+ ls := locCS.getChangedDataObjects();
|
|
|
+ CheckEquals(2, ls.size());
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummaryMultiValueProps_Test.getOldValues_bool();
|
|
|
+const
|
|
|
+ LOCAL_PROP = s_bool_propList;
|
|
|
+
|
|
|
+ procedure check_empty_list(const AList : ISDOSettingList);
|
|
|
+ begin
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(AList));
|
|
|
+ CheckEquals(0, AList.size());
|
|
|
+ end;
|
|
|
+
|
|
|
+var
|
|
|
+ x : ISDODataObject;
|
|
|
+ cs : ISDOChangeSummary;
|
|
|
+ ls : ISDOSettingList;
|
|
|
+ vls : ISDODataObjectList;
|
|
|
+ vvals : array of TSDOBoolean;
|
|
|
+ vvals_length, i : PtrInt;
|
|
|
+ s : TValueSetting;
|
|
|
+begin
|
|
|
+ Randomize();
|
|
|
+ x := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ cs := x.getChangeSummary();
|
|
|
+ check_empty_list(cs.getOldValues(x));
|
|
|
+
|
|
|
+ vvals_length := RandomRange(1,100);
|
|
|
+ SetLength(vvals,vvals_length);
|
|
|
+ try
|
|
|
+ for i := 0 to Pred(vvals_length) do
|
|
|
+ vvals[i] := ( ( RandomRange(-1234,56789) mod 3 ) = 0 );
|
|
|
+ vls := x.getList(LOCAL_PROP);
|
|
|
+ for i := 0 to Pred(vvals_length) do
|
|
|
+ vls.append(vvals[i]);
|
|
|
+ check_empty_list(cs.getOldValues(x));
|
|
|
+
|
|
|
+ cs.beginLogging();
|
|
|
+ vls.append(( RandomRange(-1234,56789) mod 3 ) = 0);
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(( RandomRange(-1234,56789) mod 3 ) = 0);
|
|
|
+ vls.insert(RandomRange(0, ( vls.size() - 1 ) ), ( RandomRange(-1234,56789) mod 3 ) = 0);
|
|
|
+ vls.setBoolean(RandomRange(0, ( vls.size() - 1 ) ), ( RandomRange(-1234,56789) mod 3 ) = 0);
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(( RandomRange(-1234,56789) mod 3 ) = 0);
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ ls := cs.getOldValues(x);
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(ls));
|
|
|
+ CheckEquals(vvals_length, ls.size(), 'ls.size()');
|
|
|
+ for i := 0 to Pred(vvals_length) do begin
|
|
|
+ s := ls.getItem(i);
|
|
|
+ CheckEquals(PtrUInt(x.getProperty(LOCAL_PROP)), PtrUInt(s.getProperty()), Format('i = %d; getProperty',[i]));
|
|
|
+ CheckEquals(i, s.getIndex(), Format('i = %d; getIndex',[i]));
|
|
|
+ CheckEquals(True, s.isSet(), Format('i = %d; isSet',[i]));
|
|
|
+ CheckEquals(False, s.isNull(), Format('i = %d; isNull',[i]));
|
|
|
+ CheckEquals(vvals[i], s.getBooleanValue(), Format('i = %d; getBooleanValue',[i]));
|
|
|
+ end;
|
|
|
+ finally
|
|
|
+ SetLength(vvals,0);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummaryMultiValueProps_Test.getOldValues_byte;
|
|
|
+const
|
|
|
+ LOCAL_PROP = s_byte_propList;
|
|
|
+
|
|
|
+ procedure check_empty_list(const AList : ISDOSettingList);
|
|
|
+ begin
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(AList));
|
|
|
+ CheckEquals(0, AList.size());
|
|
|
+ end;
|
|
|
+
|
|
|
+var
|
|
|
+ x : ISDODataObject;
|
|
|
+ cs : ISDOChangeSummary;
|
|
|
+ ls : ISDOSettingList;
|
|
|
+ vls : ISDODataObjectList;
|
|
|
+ vvals : array of TSDOByte;
|
|
|
+ vvals_length, i : PtrInt;
|
|
|
+ s : TValueSetting;
|
|
|
+begin
|
|
|
+ Randomize();
|
|
|
+ x := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ cs := x.getChangeSummary();
|
|
|
+ check_empty_list(cs.getOldValues(x));
|
|
|
+
|
|
|
+ vvals_length := RandomRange(1,100);
|
|
|
+ SetLength(vvals,vvals_length);
|
|
|
+ try
|
|
|
+ for i := 0 to Pred(vvals_length) do
|
|
|
+ vvals[i] := RandomRange(Low(TSDOByte),High(TSDOByte));
|
|
|
+ vls := x.getList(LOCAL_PROP);
|
|
|
+ for i := 0 to Pred(vvals_length) do
|
|
|
+ vls.append(vvals[i]);
|
|
|
+ check_empty_list(cs.getOldValues(x));
|
|
|
+
|
|
|
+ cs.beginLogging();
|
|
|
+ vls.append(RandomRange(Low(TSDOByte),High(TSDOByte)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(RandomRange(Low(TSDOByte),High(TSDOByte)));
|
|
|
+ vls.insert(RandomRange(0, ( vls.size() - 1 ) ), RandomRange(Low(TSDOByte),High(TSDOByte)));
|
|
|
+ vls.setByte(RandomRange(0, ( vls.size() - 1 ) ), RandomRange(Low(TSDOByte),High(TSDOByte)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(RandomRange(Low(TSDOByte),High(TSDOByte)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ ls := cs.getOldValues(x);
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(ls));
|
|
|
+ CheckEquals(vvals_length, ls.size(), 'ls.size()');
|
|
|
+ for i := 0 to Pred(vvals_length) do begin
|
|
|
+ s := ls.getItem(i);
|
|
|
+ CheckEquals(PtrUInt(x.getProperty(LOCAL_PROP)), PtrUInt(s.getProperty()), Format('i = %d; getProperty',[i]));
|
|
|
+ CheckEquals(i, s.getIndex(), Format('i = %d; getIndex',[i]));
|
|
|
+ CheckEquals(True, s.isSet(), Format('i = %d; isSet',[i]));
|
|
|
+ CheckEquals(False, s.isNull(), Format('i = %d; isNull',[i]));
|
|
|
+ CheckEquals(vvals[i], s.getByteValue(), Format('i = %d; getByteValue',[i]));
|
|
|
+ end;
|
|
|
+ finally
|
|
|
+ SetLength(vvals,0);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummaryMultiValueProps_Test.getOldValues_date();
|
|
|
+const
|
|
|
+ LOCAL_PROP = s_date_propList;
|
|
|
+
|
|
|
+ procedure check_empty_list(const AList : ISDOSettingList);
|
|
|
+ begin
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(AList));
|
|
|
+ CheckEquals(0, AList.size());
|
|
|
+ end;
|
|
|
+
|
|
|
+var
|
|
|
+ x : ISDODataObject;
|
|
|
+ cs : ISDOChangeSummary;
|
|
|
+ ls : ISDOSettingList;
|
|
|
+ vls : ISDODataObjectList;
|
|
|
+ vvals : array of TSDODateTime;
|
|
|
+ vvals_length, i : PtrInt;
|
|
|
+ s : TValueSetting;
|
|
|
+begin
|
|
|
+ Randomize();
|
|
|
+ x := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ cs := x.getChangeSummary();
|
|
|
+ check_empty_list(cs.getOldValues(x));
|
|
|
+
|
|
|
+ vvals_length := RandomRange(1,100);
|
|
|
+ SetLength(vvals,vvals_length);
|
|
|
+ try
|
|
|
+ for i := 0 to Pred(vvals_length) do
|
|
|
+ vvals[i] := RandomDate();
|
|
|
+ vls := x.getList(LOCAL_PROP);
|
|
|
+ for i := 0 to Pred(vvals_length) do
|
|
|
+ vls.append(vvals[i]);
|
|
|
+ check_empty_list(cs.getOldValues(x));
|
|
|
+
|
|
|
+ cs.beginLogging();
|
|
|
+ vls.append(RandomDate());
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(RandomDate());
|
|
|
+ vls.insert(RandomRange(0, ( vls.size() - 1 ) ), RandomDate());
|
|
|
+ vls.setDate(RandomRange(0, ( vls.size() - 1 ) ), RandomDate());
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(RandomDate());
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ ls := cs.getOldValues(x);
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(ls));
|
|
|
+ CheckEquals(vvals_length, ls.size(), 'ls.size()');
|
|
|
+ for i := 0 to Pred(vvals_length) do begin
|
|
|
+ s := ls.getItem(i);
|
|
|
+ CheckEquals(PtrUInt(x.getProperty(LOCAL_PROP)), PtrUInt(s.getProperty()), Format('i = %d; getProperty',[i]));
|
|
|
+ CheckEquals(i, s.getIndex(), Format('i = %d; getIndex',[i]));
|
|
|
+ CheckEquals(True, s.isSet(), Format('i = %d; isSet',[i]));
|
|
|
+ CheckEquals(False, s.isNull(), Format('i = %d; isNull',[i]));
|
|
|
+ CheckEquals(vvals[i], s.getDateValue(), Format('i = %d; getDateValue',[i]));
|
|
|
+ end;
|
|
|
+ finally
|
|
|
+ SetLength(vvals,0);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummaryMultiValueProps_Test.getOldValues_integer;
|
|
|
+const
|
|
|
+ LOCAL_PROP = s_integer_propList;
|
|
|
+
|
|
|
+ procedure check_empty_list(const AList : ISDOSettingList);
|
|
|
+ begin
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(AList));
|
|
|
+ CheckEquals(0, AList.size());
|
|
|
+ end;
|
|
|
+
|
|
|
+var
|
|
|
+ x : ISDODataObject;
|
|
|
+ cs : ISDOChangeSummary;
|
|
|
+ ls : ISDOSettingList;
|
|
|
+ vls : ISDODataObjectList;
|
|
|
+ vvals : array of TSDOInteger;
|
|
|
+ vvals_length, i : PtrInt;
|
|
|
+ s : TValueSetting;
|
|
|
+begin
|
|
|
+ Randomize();
|
|
|
+ x := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ cs := x.getChangeSummary();
|
|
|
+ check_empty_list(cs.getOldValues(x));
|
|
|
+
|
|
|
+ vvals_length := RandomRange(1,100);
|
|
|
+ SetLength(vvals,vvals_length);
|
|
|
+ try
|
|
|
+ for i := 0 to Pred(vvals_length) do
|
|
|
+ vvals[i] := RandomRange(-1234,56789);
|
|
|
+ vls := x.getList(LOCAL_PROP);
|
|
|
+ for i := 0 to Pred(vvals_length) do
|
|
|
+ vls.append(vvals[i]);
|
|
|
+ check_empty_list(cs.getOldValues(x));
|
|
|
+
|
|
|
+ cs.beginLogging();
|
|
|
+ vls.append(RandomRange(-1234,56789));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(RandomRange(-1234,56789));
|
|
|
+ vls.insert(RandomRange(0, ( vls.size() - 1 ) ), RandomRange(-1234,56789));
|
|
|
+ vls.setInteger(RandomRange(0, ( vls.size() - 1 ) ), RandomRange(-1234,56789));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(RandomRange(-1234,56789));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ ls := cs.getOldValues(x);
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(ls));
|
|
|
+ CheckEquals(vvals_length, ls.size(), 'ls.size()');
|
|
|
+ for i := 0 to Pred(vvals_length) do begin
|
|
|
+ s := ls.getItem(i);
|
|
|
+ CheckEquals(PtrUInt(x.getProperty(LOCAL_PROP)), PtrUInt(s.getProperty()), Format('i = %d; getProperty',[i]));
|
|
|
+ CheckEquals(i, s.getIndex(), Format('i = %d; getIndex',[i]));
|
|
|
+ CheckEquals(True, s.isSet(), Format('i = %d; isSet',[i]));
|
|
|
+ CheckEquals(False, s.isNull(), Format('i = %d; isNull',[i]));
|
|
|
+ CheckEquals(vvals[i], s.getIntegerValue(), Format('i = %d; getIntegerValue',[i]));
|
|
|
+ end;
|
|
|
+ finally
|
|
|
+ SetLength(vvals,0);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummaryMultiValueProps_Test.getOldValues_objects();
|
|
|
+const
|
|
|
+ LOCAL_PROP = s_Employee;
|
|
|
+
|
|
|
+ function create_factory () : ISDODataFactory;
|
|
|
+ var
|
|
|
+ locFac : ISDODataFactory;
|
|
|
+ begin
|
|
|
+ locFac := TSDODataFactory.Create() as ISDODataFactory;
|
|
|
+ locFac.AddType(s_uri,s_EmployeeType,[]);
|
|
|
+ locFac.addProperty(s_uri, s_EmployeeType,'name',sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
|
|
|
+ locFac.addProperty(s_uri, s_EmployeeType,'SN',sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
|
|
|
+ locFac.AddType(s_uri,s_Department,[]);
|
|
|
+ locFac.addProperty(s_uri,s_Department,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
|
|
|
+ locFac.addProperty(s_uri,s_Department,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
|
|
|
+ locFac.addProperty(s_uri,s_Department,s_Employee,s_uri,s_EmployeeType,[pfIsMany,pfIsContainment]);
|
|
|
+ locFac.addProperty(s_uri,s_Department,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
|
|
|
+ Result := locFac;
|
|
|
+ end;
|
|
|
+
|
|
|
+ procedure check_empty_list(const AList : ISDOSettingList);
|
|
|
+ begin
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(AList));
|
|
|
+ CheckEquals(0, AList.size());
|
|
|
+ end;
|
|
|
+
|
|
|
+ function create_employee(
|
|
|
+ const AFac : ISDODataFactory;
|
|
|
+ const AName, ASN : TSDOString
|
|
|
+ ) : ISDODataObject;
|
|
|
+ begin
|
|
|
+ Result := AFac.createNew(s_uri, s_EmployeeType);
|
|
|
+ Result.setString(s_name, AName);
|
|
|
+ Result.setString(s_sn, ASN);
|
|
|
+ end;
|
|
|
+
|
|
|
+ procedure check_employee_equal(const A, B : ISDODataObject; const AMsgPrefix : string);
|
|
|
+ begin
|
|
|
+ Check(
|
|
|
+ ( ( A = nil ) and ( B = nil ) ) or
|
|
|
+ ( ( A <> nil ) and ( B <> nil ) ),
|
|
|
+ AMsgPrefix
|
|
|
+ );
|
|
|
+ if ( A <> nil ) then begin
|
|
|
+ CheckEquals(A.getString(s_name), B.getString(s_name), Format('%s %s',[AMsgPrefix, s_name]));
|
|
|
+ CheckEquals(A.getString(s_sn), B.getString(s_sn), Format('%s %s',[AMsgPrefix, s_sn]));
|
|
|
+ end;
|
|
|
+ end;
|
|
|
+
|
|
|
+var
|
|
|
+ locFac : ISDODataFactory;
|
|
|
+ x : ISDODataObject;
|
|
|
+ cs : ISDOChangeSummary;
|
|
|
+ ls : ISDOSettingList;
|
|
|
+ vls : ISDODataObjectList;
|
|
|
+ vvals : array of ISDODataObject;
|
|
|
+ vvals_length, i : PtrInt;
|
|
|
+ s : TValueSetting;
|
|
|
+begin
|
|
|
+ Randomize();
|
|
|
+ locFac := create_factory();
|
|
|
+ x := locFac.createNew(s_uri,s_Department);
|
|
|
+ cs := x.getChangeSummary();
|
|
|
+ check_empty_list(cs.getOldValues(x));
|
|
|
+
|
|
|
+ vvals_length := RandomRange(1,100);
|
|
|
+ SetLength(vvals,vvals_length);
|
|
|
+ try
|
|
|
+ for i := 0 to Pred(vvals_length) do
|
|
|
+ vvals[i] := create_employee(locFac, RandomString(RandomRange(0,100)), RandomString(RandomRange(0,100)));
|
|
|
+ vls := x.getList(LOCAL_PROP);
|
|
|
+ for i := 0 to Pred(vvals_length) do
|
|
|
+ vls.append(vvals[i]);
|
|
|
+ check_empty_list(cs.getOldValues(x));
|
|
|
+
|
|
|
+ cs.beginLogging();
|
|
|
+ vls.append(create_employee(locFac, 'sdo', '001'));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(create_employee(locFac, RandomString(RandomRange(0,100)), RandomString(RandomRange(0,100))));
|
|
|
+ vls.insert(RandomRange(0, ( vls.size() - 1 ) ), create_employee(locFac, RandomString(RandomRange(0,100)), RandomString(RandomRange(0,100))));
|
|
|
+ vls.setDataObject(RandomRange(0, ( vls.size() - 1 ) ), create_employee(locFac, RandomString(RandomRange(0,100)), RandomString(RandomRange(0,100))));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(create_employee(locFac, RandomString(RandomRange(0,100)), RandomString(RandomRange(0,100))));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.insert(RandomRange(0, ( vls.size() - 1 ) ), create_employee(locFac, RandomString(RandomRange(0,100)), RandomString(RandomRange(0,100))));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ ls := cs.getOldValues(x);
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(ls));
|
|
|
+ CheckEquals(vvals_length, ls.size(), 'ls.size()');
|
|
|
+ for i := 0 to Pred(vvals_length) do begin
|
|
|
+ s := ls.getItem(i);
|
|
|
+ CheckEquals(PtrUInt(x.getProperty(LOCAL_PROP)), PtrUInt(s.getProperty()), Format('i = %d; getProperty',[i]));
|
|
|
+ CheckEquals(i, s.getIndex(), Format('i = %d; getIndex',[i]));
|
|
|
+ CheckEquals(True, s.isSet(), Format('i = %d; isSet',[i]));
|
|
|
+ CheckEquals(False, s.isNull(), Format('i = %d; isNull',[i]));
|
|
|
+ check_employee_equal(vvals[i],s.getDataObjectValue(), Format('Object[%d]',[i]));
|
|
|
+ CheckEquals(True, TSDOEqualityHelper.equal(vvals[i],s.getDataObjectValue()), Format('i = %d; getDataObjectValue',[i]));
|
|
|
+ end;
|
|
|
+ finally
|
|
|
+ SetLength(vvals,0);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummaryMultiValueProps_Test.getOldValues_string();
|
|
|
+const
|
|
|
+ LOCAL_PROP = s_string_propList;
|
|
|
+
|
|
|
+ procedure check_empty_list(const AList : ISDOSettingList);
|
|
|
+ begin
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(AList));
|
|
|
+ CheckEquals(0, AList.size());
|
|
|
+ end;
|
|
|
+
|
|
|
+var
|
|
|
+ x : ISDODataObject;
|
|
|
+ cs : ISDOChangeSummary;
|
|
|
+ ls : ISDOSettingList;
|
|
|
+ vls : ISDODataObjectList;
|
|
|
+ vvals : array of TSDOString;
|
|
|
+ vvals_length, i : PtrInt;
|
|
|
+ s : TValueSetting;
|
|
|
+begin
|
|
|
+ Randomize();
|
|
|
+ x := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ cs := x.getChangeSummary();
|
|
|
+ check_empty_list(cs.getOldValues(x));
|
|
|
+
|
|
|
+ vvals_length := RandomRange(1,100);
|
|
|
+ SetLength(vvals,vvals_length);
|
|
|
+ try
|
|
|
+ for i := 0 to Pred(vvals_length) do
|
|
|
+ vvals[i] := RandomString(RandomRange(0,100));
|
|
|
+ vls := x.getList(LOCAL_PROP);
|
|
|
+ for i := 0 to Pred(vvals_length) do
|
|
|
+ vls.append(vvals[i]);
|
|
|
+ check_empty_list(cs.getOldValues(x));
|
|
|
+
|
|
|
+ cs.beginLogging();
|
|
|
+ vls.append(RandomString(RandomRange(0,100)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(RandomString(RandomRange(0,100)));
|
|
|
+ vls.insert(RandomRange(0, ( vls.size() - 1 ) ), RandomString(RandomRange(0,100)));
|
|
|
+ vls.setString(RandomRange(0, ( vls.size() - 1 ) ), RandomString(RandomRange(0,100)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(RandomString(RandomRange(0,100)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ ls := cs.getOldValues(x);
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(ls));
|
|
|
+ CheckEquals(vvals_length, ls.size(), 'ls.size()');
|
|
|
+ for i := 0 to Pred(vvals_length) do begin
|
|
|
+ s := ls.getItem(i);
|
|
|
+ CheckEquals(PtrUInt(x.getProperty(LOCAL_PROP)), PtrUInt(s.getProperty()), Format('i = %d; getProperty',[i]));
|
|
|
+ CheckEquals(i, s.getIndex(), Format('i = %d; getIndex',[i]));
|
|
|
+ CheckEquals(True, s.isSet(), Format('i = %d; isSet',[i]));
|
|
|
+ CheckEquals(False, s.isNull(), Format('i = %d; isNull',[i]));
|
|
|
+ CheckEquals(vvals[i], s.getStringValue(), Format('i = %d; getStringValue',[i]));
|
|
|
+ end;
|
|
|
+ finally
|
|
|
+ SetLength(vvals,0);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummaryMultiValueProps_Test.isDeleted();
|
|
|
+var
|
|
|
+ f : ISDODataFactory;
|
|
|
+ a, b0, b1, b2 : ISDODataObject;
|
|
|
+ ls : ISDODataObjectList;
|
|
|
+ cs : ISDOChangeSummary;
|
|
|
+begin
|
|
|
+ f := TSDODataFactory.Create();
|
|
|
+ f.AddType(s_uri,'a',[]);
|
|
|
+ f.AddType(s_uri,'b',[]);
|
|
|
+ f.addProperty(s_uri,'a','p_ab',s_uri,'b',[pfIsMany,pfIsContainment]);
|
|
|
+ f.addProperty(s_uri,'a',s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly]);
|
|
|
+
|
|
|
+ a := f.createNew(s_uri,'a');
|
|
|
+ ls := a.getList('p_ab');
|
|
|
+ cs := a.getChangeSummary();
|
|
|
+ cs.endLogging();
|
|
|
+ b0 := a.createDataObject('p_ab');
|
|
|
+ ls.append(b0);
|
|
|
+ cs.beginLogging();
|
|
|
+ b1 := a.createDataObject('p_ab');
|
|
|
+ ls.append(b1);
|
|
|
+ b2 := a.createDataObject('p_ab');
|
|
|
+ ls.append(b2);
|
|
|
+ ls.delete(1);
|
|
|
+ CheckEquals(False, cs.isDeleted(b0));
|
|
|
+ CheckEquals(False, cs.isDeleted(b1), 'Because it has been created when the cs where ON');
|
|
|
+ CheckEquals(False, cs.isDeleted(b2));
|
|
|
+ ls.delete(0);
|
|
|
+ CheckEquals(True, cs.isDeleted(b0));
|
|
|
+ CheckEquals(False, cs.isDeleted(b1), 'Because it has been created when the cs where ON');
|
|
|
+ CheckEquals(False, cs.isDeleted(b2));
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummaryMultiValueProps_Test.isDeleted_nested();
|
|
|
+var
|
|
|
+ f : ISDODataFactory;
|
|
|
+ a, b0, b1, b2 : ISDODataObject;
|
|
|
+ c01, c02 : ISDODataObject;
|
|
|
+ ls : ISDODataObjectList;
|
|
|
+ cs : ISDOChangeSummary;
|
|
|
+begin
|
|
|
+ f := TSDODataFactory.Create();
|
|
|
+ f.AddType(s_uri,'a',[]);
|
|
|
+ f.AddType(s_uri,'b',[]);
|
|
|
+ f.AddType(s_uri,'c',[]);
|
|
|
+ f.addProperty(s_uri,'b','p_bc',s_uri,'c',[pfIsMany,pfIsContainment]);
|
|
|
+ f.addProperty(s_uri,'a','p_ab',s_uri,'b',[pfIsMany,pfIsContainment]);
|
|
|
+ f.addProperty(s_uri,'a',s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly]);
|
|
|
+
|
|
|
+ a := f.createNew(s_uri,'a');
|
|
|
+ ls := a.getList('p_ab');
|
|
|
+ cs := a.getChangeSummary();
|
|
|
+ cs.endLogging();
|
|
|
+ b0 := a.createDataObject('p_ab');
|
|
|
+ ls.append(b0);
|
|
|
+ c01 := b0.createDataObject('p_bc'); b0.getList('p_bc').append(c01);
|
|
|
+ c02 := b0.createDataObject('p_bc'); b0.getList('p_bc').append(c02);
|
|
|
+ cs.beginLogging();
|
|
|
+ b1 := a.createDataObject('p_ab'); ls.append(b1);
|
|
|
+ b2 := a.createDataObject('p_ab'); ls.append(b2);
|
|
|
+
|
|
|
+ ls.delete(1);
|
|
|
+ CheckEquals(False, cs.isDeleted(b0));
|
|
|
+ CheckEquals(False, cs.isDeleted(b1), 'Because it has been created when the cs where ON');
|
|
|
+ CheckEquals(False, cs.isDeleted(b2));
|
|
|
+ ls.delete(0);
|
|
|
+ CheckEquals(True, cs.isDeleted(b0));
|
|
|
+ CheckEquals(False, cs.isDeleted(b1), 'Because it has been created when the cs where ON');
|
|
|
+ CheckEquals(False, cs.isDeleted(b2));
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummaryMultiValueProps_Test.SetUp();
|
|
|
+var
|
|
|
+ locFactory : ISDODataFactory;
|
|
|
+
|
|
|
+ procedure Add_ObjectA(const AUri : string);
|
|
|
+ var
|
|
|
+ locObj : ISDOType;
|
|
|
+ begin
|
|
|
+ locFactory.AddType(AUri,s_type_object_A,[]);
|
|
|
+ locObj := locFactory.getType(AUri,s_type_object_A);
|
|
|
+ locFactory.addProperty(locObj,s_bool_prop,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType], []);
|
|
|
+ locFactory.addProperty(locObj,s_bool_propList,sdo_namespace,SDOTypeDefaultTypeNames[BooleanType],[pfIsMany]);
|
|
|
+ locFactory.addProperty(locObj,s_byte_prop,sdo_namespace,SDOTypeDefaultTypeNames[ByteType], []);
|
|
|
+ locFactory.addProperty(locObj,s_byte_propList,sdo_namespace,SDOTypeDefaultTypeNames[ByteType],[pfIsMany]);
|
|
|
+{$IFDEF HAS_SDO_BYTES}
|
|
|
+ locFactory.addProperty(locObj,s_bytes_prop,sdo_namespace,SDOTypeDefaultTypeNames[BytesType], []);
|
|
|
+ locFactory.addProperty(locObj,s_bytes_propList,sdo_namespace,SDOTypeDefaultTypeNames[BytesType],[pfIsMany]);
|
|
|
+{$ENDIF HAS_SDO_BYTES}
|
|
|
+{$IFDEF HAS_SDO_CHAR}
|
|
|
+ locFactory.addProperty(locObj,s_char_prop,sdo_namespace,SDOTypeDefaultTypeNames[CharacterType], []);
|
|
|
+ locFactory.addProperty(locObj,s_char_propList,sdo_namespace,SDOTypeDefaultTypeNames[CharacterType],[pfIsMany]);
|
|
|
+{$ENDIF HAS_SDO_CHAR}
|
|
|
+{$IFDEF HAS_SDO_CURRENCY}
|
|
|
+ locFactory.addProperty(locObj,s_currency_prop,sdo_namespace,SDOTypeDefaultTypeNames[CurrencyType], []);
|
|
|
+ locFactory.addProperty(locObj,s_currency_propList,sdo_namespace,SDOTypeDefaultTypeNames[CurrencyType],[pfIsMany]);
|
|
|
+{$ENDIF HAS_SDO_CURRENCY}
|
|
|
+ locFactory.addProperty(locObj,s_date_prop,sdo_namespace,SDOTypeDefaultTypeNames[DateTimeType], []);
|
|
|
+ locFactory.addProperty(locObj,s_date_propList,sdo_namespace,SDOTypeDefaultTypeNames[DateTimeType],[pfIsMany]);
|
|
|
+{$IFDEF HAS_SDO_DOUBLE}
|
|
|
+ locFactory.addProperty(locObj,s_double_prop,sdo_namespace,SDOTypeDefaultTypeNames[DoubleType], []);
|
|
|
+ locFactory.addProperty(locObj,s_double_propList,sdo_namespace,SDOTypeDefaultTypeNames[DoubleType],[pfIsMany]);
|
|
|
+{$ENDIF HAS_SDO_DOUBLE}
|
|
|
+{$IFDEF HAS_SDO_FLOAT}
|
|
|
+ locFactory.addProperty(locObj,s_float_prop,sdo_namespace,SDOTypeDefaultTypeNames[FloatType], []);
|
|
|
+ locFactory.addProperty(locObj,s_float_propList,sdo_namespace,SDOTypeDefaultTypeNames[FloatType],[pfIsMany]);
|
|
|
+{$ENDIF HAS_SDO_FLOAT}
|
|
|
+ locFactory.addProperty(locObj,s_integer_prop,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType], []);
|
|
|
+ locFactory.addProperty(locObj,s_integer_propList,sdo_namespace,SDOTypeDefaultTypeNames[IntegerType],[pfIsMany]);
|
|
|
+{$IFDEF HAS_SDO_LONG}
|
|
|
+ locFactory.addProperty(locObj,s_long_prop,sdo_namespace,SDOTypeDefaultTypeNames[LongType], []);
|
|
|
+ locFactory.addProperty(locObj,s_long_propList,sdo_namespace,SDOTypeDefaultTypeNames[LongType],[pfIsMany]);
|
|
|
+{$ENDIF HAS_SDO_LONG}
|
|
|
+{$IFDEF HAS_SDO_SHORT}
|
|
|
+ locFactory.addProperty(locObj,s_short_prop,sdo_namespace,SDOTypeDefaultTypeNames[ShortType], []);
|
|
|
+ locFactory.addProperty(locObj,s_short_propList,sdo_namespace,SDOTypeDefaultTypeNames[ShortType],[pfIsMany]);
|
|
|
+{$ENDIF HAS_SDO_SHORT}
|
|
|
+ locFactory.addProperty(locObj,s_string_prop,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
|
|
|
+ locFactory.addProperty(locObj,s_string_propList,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsMany]);
|
|
|
+ locFactory.addProperty(locObj,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly]);
|
|
|
+ end;
|
|
|
+
|
|
|
+begin
|
|
|
+ locFactory := TSDODataFactory.Create() as ISDODataFactory;
|
|
|
+ Add_ObjectA(s_uri);
|
|
|
+ FFactory := locFactory;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummaryMultiValueProps_Test.TearDown();
|
|
|
+begin
|
|
|
+ FFactory := nil;
|
|
|
+ inherited;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummaryMultiValueProps_Test.undoChanges_bool();
|
|
|
+const
|
|
|
+ LOCAL_PROP = s_bool_propList;
|
|
|
+var
|
|
|
+ x : ISDODataObject;
|
|
|
+ cs : ISDOChangeSummary;
|
|
|
+ vls : ISDODataObjectList;
|
|
|
+ vvals : array of TSDOBoolean;
|
|
|
+ vvals_length, i : PtrInt;
|
|
|
+begin
|
|
|
+ Randomize();
|
|
|
+ x := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ cs := x.getChangeSummary();
|
|
|
+
|
|
|
+ vvals_length := RandomRange(1,100);
|
|
|
+ SetLength(vvals,vvals_length);
|
|
|
+ try
|
|
|
+ for i := 0 to Pred(vvals_length) do
|
|
|
+ vvals[i] := ( RandomRange(-1234,56789) mod 3 ) = 0;
|
|
|
+ vls := x.getList(LOCAL_PROP);
|
|
|
+ for i := 0 to Pred(vvals_length) do
|
|
|
+ vls.append(vvals[i]);
|
|
|
+
|
|
|
+ cs.beginLogging();
|
|
|
+ vls.append(( RandomRange(-1234,56789) mod 3 ) = 0);
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(( RandomRange(-1234,56789) mod 3 ) = 0);
|
|
|
+ vls.insert(RandomRange(0, ( vls.size() - 1 ) ), ( RandomRange(-1234,56789) mod 3 ) = 0);
|
|
|
+ vls.setBoolean(RandomRange(0, ( vls.size() - 1 ) ), ( RandomRange(-1234,56789) mod 3 ) = 0);
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(( RandomRange(-1234,56789) mod 3 ) = 0);
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ cs.undoChanges();
|
|
|
+ CheckEquals(0, cs.getChangedDataObjects().size, 'cs.getChangedDataObjects().size');
|
|
|
+ CheckEquals(vvals_length, vls.size(), 'vls.size()');
|
|
|
+ for i := 0 to Pred(vvals_length) do begin
|
|
|
+ CheckEquals(vvals[i], vls.getBoolean(i), Format('Index = %d',[i]));
|
|
|
+ end;
|
|
|
+ finally
|
|
|
+ SetLength(vvals,0);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummaryMultiValueProps_Test.undoChanges_bool_deleted;
|
|
|
+var
|
|
|
+ locFac : ISDODataFactory;
|
|
|
+ locA : ISDODataObject;
|
|
|
+ locCS : ISDOChangeSummary;
|
|
|
+begin
|
|
|
+ locFac := TSDODataFactory.Create() as ISDODataFactory;
|
|
|
+ locFac.AddType(s_uri,'a',[]);
|
|
|
+ locFac.addProperty(s_uri,'a','p_ab',sdo_namespace,SDOTypeDefaultTypeNames[BooleanType],[pfIsMany]);
|
|
|
+ locFac.addProperty(s_uri,'a',s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly]);
|
|
|
+
|
|
|
+ locA := locFac.createNew(s_uri,'a');
|
|
|
+ locA.getList('p_ab').append(True);
|
|
|
+ locCS := locA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locA.getList('p_ab').delete(0);
|
|
|
+ locCS.getOldValues(locA);
|
|
|
+
|
|
|
+ locA := locFac.createNew(s_uri,'a');
|
|
|
+ locA.getList('p_ab').append(True);
|
|
|
+ locA.getList('p_ab').append(False);
|
|
|
+ locCS := locA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locA.getList('p_ab').delete(1);
|
|
|
+ locCS.getOldValues(locA);
|
|
|
+
|
|
|
+ locA := locFac.createNew(s_uri,'a');
|
|
|
+ locA.getList('p_ab').append(True);
|
|
|
+ locA.getList('p_ab').append(False);
|
|
|
+ locA.getList('p_ab').append(False);
|
|
|
+ locA.getList('p_ab').append(True);
|
|
|
+ locCS := locA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locA.getList('p_ab').delete(3);
|
|
|
+ locCS.getOldValues(locA);
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummaryMultiValueProps_Test.undoChanges_byte();
|
|
|
+const
|
|
|
+ LOCAL_PROP = s_byte_propList;
|
|
|
+var
|
|
|
+ x : ISDODataObject;
|
|
|
+ cs : ISDOChangeSummary;
|
|
|
+ vls : ISDODataObjectList;
|
|
|
+ vvals : array of TSDOByte;
|
|
|
+ vvals_length, i : PtrInt;
|
|
|
+begin
|
|
|
+ Randomize();
|
|
|
+ x := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ cs := x.getChangeSummary();
|
|
|
+
|
|
|
+ vvals_length := RandomRange(1,100);
|
|
|
+ SetLength(vvals,vvals_length);
|
|
|
+ try
|
|
|
+ for i := 0 to Pred(vvals_length) do
|
|
|
+ vvals[i] := RandomRange(Low(TSDOByte),High(TSDOByte));
|
|
|
+ vls := x.getList(LOCAL_PROP);
|
|
|
+ for i := 0 to Pred(vvals_length) do
|
|
|
+ vls.append(vvals[i]);
|
|
|
+
|
|
|
+ cs.beginLogging();
|
|
|
+ vls.append(RandomRange(Low(TSDOByte),High(TSDOByte)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(RandomRange(Low(TSDOByte),High(TSDOByte)));
|
|
|
+ vls.insert(RandomRange(0, ( vls.size() - 1 ) ), RandomRange(Low(TSDOByte),High(TSDOByte)));
|
|
|
+ vls.setByte(RandomRange(0, ( vls.size() - 1 ) ), RandomRange(Low(TSDOByte),High(TSDOByte)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(RandomRange(Low(TSDOByte),High(TSDOByte)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ cs.undoChanges();
|
|
|
+ CheckEquals(0, cs.getChangedDataObjects().size, 'cs.getChangedDataObjects().size');
|
|
|
+ CheckEquals(vvals_length, vls.size(), 'vls.size()');
|
|
|
+ for i := 0 to Pred(vvals_length) do begin
|
|
|
+ CheckEquals(vvals[i], vls.getByte(i), Format('Index = %d',[i]));
|
|
|
+ end;
|
|
|
+ finally
|
|
|
+ SetLength(vvals,0);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummaryMultiValueProps_Test.undoChanges_byte_deleted();
|
|
|
+var
|
|
|
+ locFac : ISDODataFactory;
|
|
|
+ locA : ISDODataObject;
|
|
|
+ locCS : ISDOChangeSummary;
|
|
|
+begin
|
|
|
+ locFac := TSDODataFactory.Create() as ISDODataFactory;
|
|
|
+ locFac.AddType(s_uri,'a',[]);
|
|
|
+ locFac.addProperty(s_uri,'a','p_ab',sdo_namespace,SDOTypeDefaultTypeNames[ByteType],[pfIsMany]);
|
|
|
+ locFac.addProperty(s_uri,'a',s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly]);
|
|
|
+
|
|
|
+ locA := locFac.createNew(s_uri,'a');
|
|
|
+ locA.getList('p_ab').append(TSDOByte(123));
|
|
|
+ locCS := locA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locA.getList('p_ab').delete(0);
|
|
|
+ locCS.getOldValues(locA);
|
|
|
+
|
|
|
+ locA := locFac.createNew(s_uri,'a');
|
|
|
+ locA.getList('p_ab').append(TSDOByte(23));
|
|
|
+ locA.getList('p_ab').append(TSDOByte(45));
|
|
|
+ locCS := locA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locA.getList('p_ab').delete(1);
|
|
|
+ locCS.getOldValues(locA);
|
|
|
+
|
|
|
+ locA := locFac.createNew(s_uri,'a');
|
|
|
+ locA.getList('p_ab').append(TSDOByte(12));
|
|
|
+ locA.getList('p_ab').append(TSDOByte(23));
|
|
|
+ locA.getList('p_ab').append(TSDOByte(45));
|
|
|
+ locA.getList('p_ab').append(TSDOByte(67));
|
|
|
+ locCS := locA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locA.getList('p_ab').delete(3);
|
|
|
+ locCS.getOldValues(locA);
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummaryMultiValueProps_Test.undoChanges_date();
|
|
|
+const
|
|
|
+ LOCAL_PROP = s_date_propList;
|
|
|
+var
|
|
|
+ x : ISDODataObject;
|
|
|
+ cs : ISDOChangeSummary;
|
|
|
+ vls : ISDODataObjectList;
|
|
|
+ vvals : array of TSDODateTime;
|
|
|
+ vvals_length, i : PtrInt;
|
|
|
+begin
|
|
|
+ Randomize();
|
|
|
+ x := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ cs := x.getChangeSummary();
|
|
|
+
|
|
|
+ vvals_length := RandomRange(1,100);
|
|
|
+ SetLength(vvals,vvals_length);
|
|
|
+ try
|
|
|
+ for i := 0 to Pred(vvals_length) do
|
|
|
+ vvals[i] := RandomDate();
|
|
|
+ vls := x.getList(LOCAL_PROP);
|
|
|
+ for i := 0 to Pred(vvals_length) do
|
|
|
+ vls.append(vvals[i]);
|
|
|
+
|
|
|
+ cs.beginLogging();
|
|
|
+ vls.append(RandomDate());
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(RandomDate());
|
|
|
+ vls.insert(RandomRange(0, ( vls.size() - 1 ) ), RandomDate());
|
|
|
+ vls.setDate(RandomRange(0, ( vls.size() - 1 ) ), RandomDate());
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(RandomDate());
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ cs.undoChanges();
|
|
|
+ CheckEquals(0, cs.getChangedDataObjects().size, 'cs.getChangedDataObjects().size');
|
|
|
+ CheckEquals(vvals_length, vls.size(), 'vls.size()');
|
|
|
+ for i := 0 to Pred(vvals_length) do begin
|
|
|
+ CheckEquals(vvals[i], vls.getDate(i), Format('Index = %d',[i]));
|
|
|
+ end;
|
|
|
+ finally
|
|
|
+ SetLength(vvals,0);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummaryMultiValueProps_Test.undoChanges_date_deleted();
|
|
|
+var
|
|
|
+ locFac : ISDODataFactory;
|
|
|
+ locA : ISDODataObject;
|
|
|
+ locCS : ISDOChangeSummary;
|
|
|
+begin
|
|
|
+ locFac := TSDODataFactory.Create() as ISDODataFactory;
|
|
|
+ locFac.AddType(s_uri,'a',[]);
|
|
|
+ locFac.addProperty(s_uri,'a','p_ab',sdo_namespace,SDOTypeDefaultTypeNames[DateTimeType],[pfIsMany]);
|
|
|
+ locFac.addProperty(s_uri,'a',s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly]);
|
|
|
+
|
|
|
+ locA := locFac.createNew(s_uri,'a');
|
|
|
+ locA.getList('p_ab').append(RandomDate());
|
|
|
+ locCS := locA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locA.getList('p_ab').delete(0);
|
|
|
+ locCS.getOldValues(locA);
|
|
|
+
|
|
|
+ locA := locFac.createNew(s_uri,'a');
|
|
|
+ locA.getList('p_ab').append(RandomDate());
|
|
|
+ locA.getList('p_ab').append(RandomDate());
|
|
|
+ locCS := locA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locA.getList('p_ab').delete(1);
|
|
|
+ locCS.getOldValues(locA);
|
|
|
+
|
|
|
+ locA := locFac.createNew(s_uri,'a');
|
|
|
+ locA.getList('p_ab').append(RandomDate());
|
|
|
+ locA.getList('p_ab').append(RandomDate());
|
|
|
+ locA.getList('p_ab').append(RandomDate());
|
|
|
+ locA.getList('p_ab').append(RandomDate());
|
|
|
+ locCS := locA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locA.getList('p_ab').delete(3);
|
|
|
+ locCS.getOldValues(locA);
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummaryMultiValueProps_Test.undoChanges_integer();
|
|
|
+const
|
|
|
+ LOCAL_PROP = s_integer_propList;
|
|
|
+var
|
|
|
+ x : ISDODataObject;
|
|
|
+ cs : ISDOChangeSummary;
|
|
|
+ vls : ISDODataObjectList;
|
|
|
+ vvals : array of TSDOInteger;
|
|
|
+ vvals_length, i : PtrInt;
|
|
|
+begin
|
|
|
+ Randomize();
|
|
|
+ x := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ cs := x.getChangeSummary();
|
|
|
+
|
|
|
+ vvals_length := RandomRange(1,100);
|
|
|
+ SetLength(vvals,vvals_length);
|
|
|
+ try
|
|
|
+ for i := 0 to Pred(vvals_length) do
|
|
|
+ vvals[i] := RandomRange(-1234,56789);
|
|
|
+ vls := x.getList(LOCAL_PROP);
|
|
|
+ for i := 0 to Pred(vvals_length) do
|
|
|
+ vls.append(vvals[i]);
|
|
|
+
|
|
|
+ cs.beginLogging();
|
|
|
+ vls.append(RandomRange(-1234,56789));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(RandomRange(-1234,56789));
|
|
|
+ vls.insert(RandomRange(0, ( vls.size() - 1 ) ), RandomRange(-1234,56789));
|
|
|
+ vls.setInteger(RandomRange(0, ( vls.size() - 1 ) ), RandomRange(-1234,56789));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(RandomRange(-1234,56789));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ cs.undoChanges();
|
|
|
+ CheckEquals(0, cs.getChangedDataObjects().size, 'cs.getChangedDataObjects().size');
|
|
|
+ CheckEquals(vvals_length, vls.size(), 'vls.size()');
|
|
|
+ for i := 0 to Pred(vvals_length) do begin
|
|
|
+ CheckEquals(vvals[i], vls.getInteger(i), Format('Index = %d',[i]));
|
|
|
+ end;
|
|
|
+ finally
|
|
|
+ SetLength(vvals,0);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummaryMultiValueProps_Test.undoChanges_integer_deleted();
|
|
|
+var
|
|
|
+ locFac : ISDODataFactory;
|
|
|
+ locA : ISDODataObject;
|
|
|
+ locCS : ISDOChangeSummary;
|
|
|
+begin
|
|
|
+ locFac := TSDODataFactory.Create() as ISDODataFactory;
|
|
|
+ locFac.AddType(s_uri,'a',[]);
|
|
|
+ locFac.addProperty(s_uri,'a','p_ab',sdo_namespace,SDOTypeDefaultTypeNames[IntegerType],[pfIsMany]);
|
|
|
+ locFac.addProperty(s_uri,'a',s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly]);
|
|
|
+
|
|
|
+ locA := locFac.createNew(s_uri,'a');
|
|
|
+ locA.getList('p_ab').append(1210);
|
|
|
+ locCS := locA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locA.getList('p_ab').delete(0);
|
|
|
+ locCS.getOldValues(locA);
|
|
|
+
|
|
|
+ locA := locFac.createNew(s_uri,'a');
|
|
|
+ locA.getList('p_ab').append(23);
|
|
|
+ locA.getList('p_ab').append(45);
|
|
|
+ locCS := locA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locA.getList('p_ab').delete(1);
|
|
|
+ locCS.getOldValues(locA);
|
|
|
+
|
|
|
+ locA := locFac.createNew(s_uri,'a');
|
|
|
+ locA.getList('p_ab').append(12);
|
|
|
+ locA.getList('p_ab').append(23);
|
|
|
+ locA.getList('p_ab').append(45);
|
|
|
+ locA.getList('p_ab').append(67);
|
|
|
+ locCS := locA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locA.getList('p_ab').delete(3);
|
|
|
+ locCS.getOldValues(locA);
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummaryMultiValueProps_Test.undoChanges_nested_bool();
|
|
|
+var
|
|
|
+ f : ISDODataFactory;
|
|
|
+ x, y : ISDODataObject;
|
|
|
+ cs : ISDOChangeSummary;
|
|
|
+ vls : ISDODataObjectList;
|
|
|
+ vvals_a : array of TSDOBoolean;
|
|
|
+ vvals_a_length, i : PtrInt;
|
|
|
+ vvals_b : array of TSDOBoolean;
|
|
|
+ vvals_b_length : PtrInt;
|
|
|
+begin
|
|
|
+ Randomize();
|
|
|
+ f := TSDODataFactory.Create();
|
|
|
+ f.AddType(s_uri, 'a', []);
|
|
|
+ f.AddType(s_uri, 'b', []);
|
|
|
+ f.addProperty(s_uri, 'a', 'p_i', sdo_namespace, SDOTypeDefaultTypeNames[IntegerType], []);
|
|
|
+ f.addProperty(s_uri, 'a', 'p_li', sdo_namespace, SDOTypeDefaultTypeNames[BooleanType], [pfIsMany]);
|
|
|
+ f.addProperty(s_uri, 'a', 'p_ab', s_uri, 'b', [pfIsContainment]);
|
|
|
+ f.addProperty(s_uri, 'a', s_changesummary_prop, sdo_namespace, SDOTypeDefaultTypeNames[ChangeSummaryType], [pfIsReadOnly]);
|
|
|
+ f.addProperty(s_uri, 'b', 'p_b_li', sdo_namespace, SDOTypeDefaultTypeNames[BooleanType], [pfIsMany]);
|
|
|
+ x := f.createNew(s_uri,'a');
|
|
|
+ x.setInteger('p_i', RandomRange(-1234,56789));
|
|
|
+ y := x.createDataObject('p_ab');
|
|
|
+ cs := x.getChangeSummary();
|
|
|
+
|
|
|
+ vvals_a_length := RandomRange(1,100);
|
|
|
+ vvals_b_length := RandomRange(1,100);
|
|
|
+ SetLength(vvals_a,vvals_a_length);
|
|
|
+ try
|
|
|
+ for i := 0 to Pred(vvals_a_length) do
|
|
|
+ vvals_a[i] := ( RandomRange(-1234,56789) mod 3 ) = 0;
|
|
|
+ SetLength(vvals_b,vvals_b_length);
|
|
|
+ for i := 0 to Pred(vvals_b_length) do
|
|
|
+ vvals_b[i] := ( RandomRange(-1234,56789) mod 3 ) = 0;
|
|
|
+
|
|
|
+ vls := x.getList('p_li');
|
|
|
+ for i := 0 to Pred(vvals_a_length) do
|
|
|
+ vls.append(vvals_a[i]);
|
|
|
+ vls := y.getList('p_b_li');
|
|
|
+ for i := 0 to Pred(vvals_b_length) do
|
|
|
+ vls.append(vvals_b[i]);
|
|
|
+
|
|
|
+ cs.beginLogging();
|
|
|
+ vls := x.getList('p_li');
|
|
|
+ vls.append(( RandomRange(-1234,56789) mod 3 ) = 0);
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(( RandomRange(-1234,56789) mod 3 ) = 0);
|
|
|
+ vls.insert(RandomRange(0, ( vls.size() - 1 ) ), ( RandomRange(-1234,56789) mod 3 ) = 0);
|
|
|
+ vls.setBoolean(RandomRange(0, ( vls.size() - 1 ) ), ( RandomRange(-1234,56789) mod 3 ) = 0);
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(( RandomRange(-1234,56789) mod 3 ) = 0);
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls := y.getList('p_b_li');
|
|
|
+ vls.insert(RandomRange(0, ( vls.size() - 1 ) ), ( RandomRange(-1234,56789) mod 3 ) = 0);
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(( RandomRange(-1234,56789) mod 3 ) = 0);
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(( RandomRange(-1234,56789) mod 3 ) = 0);
|
|
|
+ vls.setBoolean(RandomRange(0, ( vls.size() - 1 ) ), ( RandomRange(-1234,56789) mod 3 ) = 0);
|
|
|
+ vls.append(( RandomRange(-1234,56789) mod 3 ) = 0);
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+
|
|
|
+ cs.undoChanges();
|
|
|
+ CheckEquals(0, cs.getChangedDataObjects().size, 'cs.getChangedDataObjects().size');
|
|
|
+ vls := x.getList('p_li');
|
|
|
+ CheckEquals(vvals_a_length, vls.size(), 'x, vls.size()');
|
|
|
+ for i := 0 to Pred(vvals_a_length) do begin
|
|
|
+ CheckEquals(vvals_a[i], vls.getBoolean(i), Format('x, Index = %d',[i]));
|
|
|
+ end;
|
|
|
+ vls := y.getList('p_b_li');
|
|
|
+ CheckEquals(vvals_b_length, vls.size(), 'y, vls.size()');
|
|
|
+ for i := 0 to Pred(vvals_b_length) do begin
|
|
|
+ CheckEquals(vvals_b[i], vls.getBoolean(i), Format('y, Index = %d',[i]));
|
|
|
+ end;
|
|
|
+
|
|
|
+ finally
|
|
|
+ SetLength(vvals_b,0);
|
|
|
+ SetLength(vvals_a,0);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummaryMultiValueProps_Test.undoChanges_nested_byte();
|
|
|
+const
|
|
|
+ PROP_TYPE = ByteType;
|
|
|
+var
|
|
|
+ f : ISDODataFactory;
|
|
|
+ x, y : ISDODataObject;
|
|
|
+ cs : ISDOChangeSummary;
|
|
|
+ vls : ISDODataObjectList;
|
|
|
+ vvals_a : array of TSDOByte;
|
|
|
+ vvals_a_length, i : PtrInt;
|
|
|
+ vvals_b : array of TSDOByte;
|
|
|
+ vvals_b_length : PtrInt;
|
|
|
+begin
|
|
|
+ Randomize();
|
|
|
+ f := TSDODataFactory.Create();
|
|
|
+ f.AddType(s_uri, 'a', []);
|
|
|
+ f.AddType(s_uri, 'b', []);
|
|
|
+ f.addProperty(s_uri, 'a', 'p_i', sdo_namespace, SDOTypeDefaultTypeNames[PROP_TYPE], []);
|
|
|
+ f.addProperty(s_uri, 'a', 'p_li', sdo_namespace, SDOTypeDefaultTypeNames[PROP_TYPE], [pfIsMany]);
|
|
|
+ f.addProperty(s_uri, 'a', 'p_ab', s_uri, 'b', [pfIsContainment]);
|
|
|
+ f.addProperty(s_uri, 'a', s_changesummary_prop, sdo_namespace, SDOTypeDefaultTypeNames[ChangeSummaryType], [pfIsReadOnly]);
|
|
|
+ f.addProperty(s_uri, 'b', 'p_b_li', sdo_namespace, SDOTypeDefaultTypeNames[PROP_TYPE], [pfIsMany]);
|
|
|
+ x := f.createNew(s_uri,'a');
|
|
|
+ x.setByte('p_i', RandomRange(Low(TSDOByte),High(TSDOByte)));
|
|
|
+ y := x.createDataObject('p_ab');
|
|
|
+ cs := x.getChangeSummary();
|
|
|
+
|
|
|
+ vvals_a_length := RandomRange(1,100);
|
|
|
+ vvals_b_length := RandomRange(1,100);
|
|
|
+ SetLength(vvals_a,vvals_a_length);
|
|
|
+ try
|
|
|
+ for i := 0 to Pred(vvals_a_length) do
|
|
|
+ vvals_a[i] := RandomRange(Low(TSDOByte),High(TSDOByte));
|
|
|
+ SetLength(vvals_b,vvals_b_length);
|
|
|
+ for i := 0 to Pred(vvals_b_length) do
|
|
|
+ vvals_b[i] := RandomRange(Low(TSDOByte),High(TSDOByte));
|
|
|
+
|
|
|
+ vls := x.getList('p_li');
|
|
|
+ for i := 0 to Pred(vvals_a_length) do
|
|
|
+ vls.append(vvals_a[i]);
|
|
|
+ vls := y.getList('p_b_li');
|
|
|
+ for i := 0 to Pred(vvals_b_length) do
|
|
|
+ vls.append(vvals_b[i]);
|
|
|
+
|
|
|
+ cs.beginLogging();
|
|
|
+ vls := x.getList('p_li');
|
|
|
+ vls.append(RandomRange(Low(TSDOByte),High(TSDOByte)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(RandomRange(Low(TSDOByte),High(TSDOByte)));
|
|
|
+ vls.insert(RandomRange(0, ( vls.size() - 1 ) ), RandomRange(Low(TSDOByte),High(TSDOByte)));
|
|
|
+ vls.setByte(RandomRange(0, ( vls.size() - 1 ) ), RandomRange(Low(TSDOByte),High(TSDOByte)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(RandomRange(Low(TSDOByte),High(TSDOByte)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls := y.getList('p_b_li');
|
|
|
+ vls.insert(RandomRange(0, ( vls.size() - 1 ) ), RandomRange(Low(TSDOByte),High(TSDOByte)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(RandomRange(Low(TSDOByte),High(TSDOByte)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(RandomRange(Low(TSDOByte),High(TSDOByte)));
|
|
|
+ vls.setByte(RandomRange(0, ( vls.size() - 1 ) ), RandomRange(Low(TSDOByte),High(TSDOByte)));
|
|
|
+ vls.append(RandomRange(Low(TSDOByte),High(TSDOByte)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+
|
|
|
+ cs.undoChanges();
|
|
|
+ CheckEquals(0, cs.getChangedDataObjects().size, 'cs.getChangedDataObjects().size');
|
|
|
+ vls := x.getList('p_li');
|
|
|
+ CheckEquals(vvals_a_length, vls.size(), 'x, vls.size()');
|
|
|
+ for i := 0 to Pred(vvals_a_length) do begin
|
|
|
+ CheckEquals(vvals_a[i], vls.getByte(i), Format('x, Index = %d',[i]));
|
|
|
+ end;
|
|
|
+ vls := y.getList('p_b_li');
|
|
|
+ CheckEquals(vvals_b_length, vls.size(), 'y, vls.size()');
|
|
|
+ for i := 0 to Pred(vvals_b_length) do begin
|
|
|
+ CheckEquals(vvals_b[i], vls.getByte(i), Format('y, Index = %d',[i]));
|
|
|
+ end;
|
|
|
+
|
|
|
+ finally
|
|
|
+ SetLength(vvals_b,0);
|
|
|
+ SetLength(vvals_a,0);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummaryMultiValueProps_Test.undoChanges_nested_date();
|
|
|
+var
|
|
|
+ f : ISDODataFactory;
|
|
|
+ x, y : ISDODataObject;
|
|
|
+ cs : ISDOChangeSummary;
|
|
|
+ vls : ISDODataObjectList;
|
|
|
+ vvals_a : array of TSDODateTime;
|
|
|
+ vvals_a_length, i : PtrInt;
|
|
|
+ vvals_b : array of TSDODateTime;
|
|
|
+ vvals_b_length : PtrInt;
|
|
|
+begin
|
|
|
+ Randomize();
|
|
|
+ f := TSDODataFactory.Create();
|
|
|
+ f.AddType(s_uri, 'a', []);
|
|
|
+ f.AddType(s_uri, 'b', []);
|
|
|
+ f.addProperty(s_uri, 'a', 'p_i', sdo_namespace, SDOTypeDefaultTypeNames[DateTimeType], []);
|
|
|
+ f.addProperty(s_uri, 'a', 'p_li', sdo_namespace, SDOTypeDefaultTypeNames[DateTimeType], [pfIsMany]);
|
|
|
+ f.addProperty(s_uri, 'a', 'p_ab', s_uri, 'b', [pfIsContainment]);
|
|
|
+ f.addProperty(s_uri, 'a', s_changesummary_prop, sdo_namespace, SDOTypeDefaultTypeNames[ChangeSummaryType], [pfIsReadOnly]);
|
|
|
+ f.addProperty(s_uri, 'b', 'p_b_li', sdo_namespace, SDOTypeDefaultTypeNames[DateTimeType], [pfIsMany]);
|
|
|
+ x := f.createNew(s_uri,'a');
|
|
|
+ x.setDate('p_i', RandomDate());
|
|
|
+ y := x.createDataObject('p_ab');
|
|
|
+ cs := x.getChangeSummary();
|
|
|
+
|
|
|
+ vvals_a_length := RandomRange(1,100);
|
|
|
+ vvals_b_length := RandomRange(1,100);
|
|
|
+ SetLength(vvals_a,vvals_a_length);
|
|
|
+ try
|
|
|
+ for i := 0 to Pred(vvals_a_length) do
|
|
|
+ vvals_a[i] := RandomDate();
|
|
|
+ SetLength(vvals_b,vvals_b_length);
|
|
|
+ for i := 0 to Pred(vvals_b_length) do
|
|
|
+ vvals_b[i] := RandomDate();
|
|
|
+
|
|
|
+ vls := x.getList('p_li');
|
|
|
+ for i := 0 to Pred(vvals_a_length) do
|
|
|
+ vls.append(vvals_a[i]);
|
|
|
+ vls := y.getList('p_b_li');
|
|
|
+ for i := 0 to Pred(vvals_b_length) do
|
|
|
+ vls.append(vvals_b[i]);
|
|
|
+
|
|
|
+ cs.beginLogging();
|
|
|
+ vls := x.getList('p_li');
|
|
|
+ vls.append(RandomDate());
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(RandomDate());
|
|
|
+ vls.insert(RandomRange(0, ( vls.size() - 1 ) ), RandomDate());
|
|
|
+ vls.setDate(RandomRange(0, ( vls.size() - 1 ) ), RandomDate());
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(RandomDate());
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls := y.getList('p_b_li');
|
|
|
+ vls.insert(RandomRange(0, ( vls.size() - 1 ) ), RandomDate());
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(RandomDate());
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(RandomDate());
|
|
|
+ vls.setDate(RandomRange(0, ( vls.size() - 1 ) ), RandomDate());
|
|
|
+ vls.append(RandomDate());
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+
|
|
|
+ cs.undoChanges();
|
|
|
+ CheckEquals(0, cs.getChangedDataObjects().size, 'cs.getChangedDataObjects().size');
|
|
|
+ vls := x.getList('p_li');
|
|
|
+ CheckEquals(vvals_a_length, vls.size(), 'x, vls.size()');
|
|
|
+ for i := 0 to Pred(vvals_a_length) do begin
|
|
|
+ CheckEquals(vvals_a[i], vls.getDate(i), Format('x, Index = %d',[i]));
|
|
|
+ end;
|
|
|
+ vls := y.getList('p_b_li');
|
|
|
+ CheckEquals(vvals_b_length, vls.size(), 'y, vls.size()');
|
|
|
+ for i := 0 to Pred(vvals_b_length) do begin
|
|
|
+ CheckEquals(vvals_b[i], vls.getDate(i), Format('y, Index = %d',[i]));
|
|
|
+ end;
|
|
|
+
|
|
|
+ finally
|
|
|
+ SetLength(vvals_b,0);
|
|
|
+ SetLength(vvals_a,0);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummaryMultiValueProps_Test.undoChanges_nested_integer();
|
|
|
+var
|
|
|
+ f : ISDODataFactory;
|
|
|
+ x, y : ISDODataObject;
|
|
|
+ cs : ISDOChangeSummary;
|
|
|
+ vls : ISDODataObjectList;
|
|
|
+ vvals_a : array of TSDOInteger;
|
|
|
+ vvals_a_length, i : PtrInt;
|
|
|
+ vvals_b : array of TSDOInteger;
|
|
|
+ vvals_b_length : PtrInt;
|
|
|
+begin
|
|
|
+ Randomize();
|
|
|
+ f := TSDODataFactory.Create();
|
|
|
+ f.AddType(s_uri, 'a', []);
|
|
|
+ f.AddType(s_uri, 'b', []);
|
|
|
+ f.addProperty(s_uri, 'a', 'p_i', sdo_namespace, SDOTypeDefaultTypeNames[IntegerType], []);
|
|
|
+ f.addProperty(s_uri, 'a', 'p_li', sdo_namespace, SDOTypeDefaultTypeNames[IntegerType], [pfIsMany]);
|
|
|
+ f.addProperty(s_uri, 'a', 'p_ab', s_uri, 'b', [pfIsContainment]);
|
|
|
+ f.addProperty(s_uri, 'a', s_changesummary_prop, sdo_namespace, SDOTypeDefaultTypeNames[ChangeSummaryType], [pfIsReadOnly]);
|
|
|
+ f.addProperty(s_uri, 'b', 'p_b_li', sdo_namespace, SDOTypeDefaultTypeNames[IntegerType], [pfIsMany]);
|
|
|
+ x := f.createNew(s_uri,'a');
|
|
|
+ x.setInteger('p_i', RandomRange(-1234,56789));
|
|
|
+ y := x.createDataObject('p_ab');
|
|
|
+ cs := x.getChangeSummary();
|
|
|
+
|
|
|
+ vvals_a_length := RandomRange(1,100);
|
|
|
+ vvals_b_length := RandomRange(1,100);
|
|
|
+ SetLength(vvals_a,vvals_a_length);
|
|
|
+ try
|
|
|
+ for i := 0 to Pred(vvals_a_length) do
|
|
|
+ vvals_a[i] := RandomRange(-1234,56789);
|
|
|
+ SetLength(vvals_b,vvals_b_length);
|
|
|
+ for i := 0 to Pred(vvals_b_length) do
|
|
|
+ vvals_b[i] := RandomRange(-1234,56789);
|
|
|
+
|
|
|
+ vls := x.getList('p_li');
|
|
|
+ for i := 0 to Pred(vvals_a_length) do
|
|
|
+ vls.append(vvals_a[i]);
|
|
|
+ vls := y.getList('p_b_li');
|
|
|
+ for i := 0 to Pred(vvals_b_length) do
|
|
|
+ vls.append(vvals_b[i]);
|
|
|
+
|
|
|
+ cs.beginLogging();
|
|
|
+ vls := x.getList('p_li');
|
|
|
+ vls.append(RandomRange(-1234,56789));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(RandomRange(-1234,56789));
|
|
|
+ vls.insert(RandomRange(0, ( vls.size() - 1 ) ), RandomRange(-1234,56789));
|
|
|
+ vls.setInteger(RandomRange(0, ( vls.size() - 1 ) ), RandomRange(-1234,56789));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(RandomRange(-1234,56789));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls := y.getList('p_b_li');
|
|
|
+ vls.insert(RandomRange(0, ( vls.size() - 1 ) ), RandomRange(-1234,56789));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(RandomRange(-1234,56789));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(RandomRange(-1234,56789));
|
|
|
+ vls.setInteger(RandomRange(0, ( vls.size() - 1 ) ), RandomRange(-1234,56789));
|
|
|
+ vls.append(RandomRange(-1234,56789));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+
|
|
|
+ cs.undoChanges();
|
|
|
+ CheckEquals(0, cs.getChangedDataObjects().size, 'cs.getChangedDataObjects().size');
|
|
|
+ vls := x.getList('p_li');
|
|
|
+ CheckEquals(vvals_a_length, vls.size(), 'x, vls.size()');
|
|
|
+ for i := 0 to Pred(vvals_a_length) do begin
|
|
|
+ CheckEquals(vvals_a[i], vls.getInteger(i), Format('x, Index = %d',[i]));
|
|
|
+ end;
|
|
|
+ vls := y.getList('p_b_li');
|
|
|
+ CheckEquals(vvals_b_length, vls.size(), 'y, vls.size()');
|
|
|
+ for i := 0 to Pred(vvals_b_length) do begin
|
|
|
+ CheckEquals(vvals_b[i], vls.getInteger(i), Format('y, Index = %d',[i]));
|
|
|
+ end;
|
|
|
+
|
|
|
+ finally
|
|
|
+ SetLength(vvals_b,0);
|
|
|
+ SetLength(vvals_a,0);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummaryMultiValueProps_Test.undoChanges_nested_object();
|
|
|
+
|
|
|
+ function create_e1(const AFac : ISDODataFactory) : ISDODataObject;
|
|
|
+ begin
|
|
|
+ Result := AFac.createNew(s_uri, 'e_1');
|
|
|
+ Result.setString('p_e1', RandomString(RandomRange(0,100)));
|
|
|
+ end;
|
|
|
+
|
|
|
+ function create_e2(const AFac : ISDODataFactory) : ISDODataObject;
|
|
|
+ begin
|
|
|
+ Result := AFac.createNew(s_uri, 'e_2');
|
|
|
+ Result.setString('p_e2', RandomString(RandomRange(0,100)));
|
|
|
+ end;
|
|
|
+
|
|
|
+ procedure check_e1_equal(const A, B : ISDODataObject; const AMsgPrefix : string);
|
|
|
+ begin
|
|
|
+ Check(
|
|
|
+ ( ( A = nil ) and ( B = nil ) ) or
|
|
|
+ ( ( A <> nil ) and ( B <> nil ) ),
|
|
|
+ AMsgPrefix
|
|
|
+ );
|
|
|
+ if ( A <> nil ) then begin
|
|
|
+ CheckEquals(True, TSDOEqualityHelper.equal(A.getDataObject('p_e1'), B.getDataObject('p_e1')), Format('%s %s',[AMsgPrefix, s_name]));
|
|
|
+ end;
|
|
|
+ end;
|
|
|
+
|
|
|
+ procedure check_e2_equal(const A, B : ISDODataObject; const AMsgPrefix : string);
|
|
|
+ begin
|
|
|
+ Check(
|
|
|
+ ( ( A = nil ) and ( B = nil ) ) or
|
|
|
+ ( ( A <> nil ) and ( B <> nil ) ),
|
|
|
+ AMsgPrefix
|
|
|
+ );
|
|
|
+ if ( A <> nil ) then begin
|
|
|
+ CheckEquals(True, TSDOEqualityHelper.equal(A.getDataObject('p_e2'), B.getDataObject('p_e2')), Format('%s %s',[AMsgPrefix, s_name]));
|
|
|
+ end;
|
|
|
+ end;
|
|
|
+
|
|
|
+var
|
|
|
+ f : ISDODataFactory;
|
|
|
+ x, y : ISDODataObject;
|
|
|
+ cs : ISDOChangeSummary;
|
|
|
+ vls : ISDODataObjectList;
|
|
|
+ vvals_a : array of ISDODataObject;
|
|
|
+ vvals_a_length, i : PtrInt;
|
|
|
+ vvals_b : array of ISDODataObject;
|
|
|
+ vvals_b_length : PtrInt;
|
|
|
+begin
|
|
|
+ Randomize();
|
|
|
+ f := TSDODataFactory.Create();
|
|
|
+ f.AddType(s_uri, 'e_1', []);
|
|
|
+ f.AddType(s_uri, 'e_2', []);
|
|
|
+ f.AddType(s_uri, 'a', []);
|
|
|
+ f.AddType(s_uri, 'b', []);
|
|
|
+ f.addProperty(s_uri, 'e_1', 'p_e1', sdo_namespace, SDOTypeDefaultTypeNames[StringType], []);
|
|
|
+ f.addProperty(s_uri, 'e_2', 'p_e2', sdo_namespace, SDOTypeDefaultTypeNames[StringType], []);
|
|
|
+ f.addProperty(s_uri, 'a', 'p_i', sdo_namespace, SDOTypeDefaultTypeNames[IntegerType], []);
|
|
|
+ f.addProperty(s_uri, 'a', 'p_li', s_uri, 'e_1', [pfIsMany,pfIsContainment]);
|
|
|
+ f.addProperty(s_uri, 'a', 'p_ab', s_uri, 'b', [pfIsContainment]);
|
|
|
+ f.addProperty(s_uri, 'a', s_changesummary_prop, sdo_namespace, SDOTypeDefaultTypeNames[ChangeSummaryType], [pfIsReadOnly]);
|
|
|
+ f.addProperty(s_uri, 'b', 'p_b_li', s_uri, 'e_2', [pfIsMany,pfIsContainment]);
|
|
|
+ x := f.createNew(s_uri,'a');
|
|
|
+ x.setInteger('p_i', RandomRange(-1234,56789));
|
|
|
+ y := x.createDataObject('p_ab');
|
|
|
+ cs := x.getChangeSummary();
|
|
|
+
|
|
|
+ vvals_a_length := RandomRange(1,100);
|
|
|
+ vvals_b_length := RandomRange(1,100);
|
|
|
+ SetLength(vvals_a,vvals_a_length);
|
|
|
+ try
|
|
|
+ for i := 0 to Pred(vvals_a_length) do
|
|
|
+ vvals_a[i] := create_e1(f);
|
|
|
+ SetLength(vvals_b,vvals_b_length);
|
|
|
+ for i := 0 to Pred(vvals_b_length) do
|
|
|
+ vvals_b[i] := create_e2(f);
|
|
|
+
|
|
|
+ vls := x.getList('p_li');
|
|
|
+ for i := 0 to Pred(vvals_a_length) do
|
|
|
+ vls.append(vvals_a[i]);
|
|
|
+ vls := y.getList('p_b_li');
|
|
|
+ for i := 0 to Pred(vvals_b_length) do
|
|
|
+ vls.append(vvals_b[i]);
|
|
|
+
|
|
|
+ cs.beginLogging();
|
|
|
+ vls := x.getList('p_li');
|
|
|
+ vls.append(create_e1(f));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(create_e1(f));
|
|
|
+ vls.insert(RandomRange(0, ( vls.size() - 1 ) ), create_e1(f));
|
|
|
+ vls.setDataObject(RandomRange(0, ( vls.size() - 1 ) ), create_e1(f));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(create_e1(f));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls := y.getList('p_b_li');
|
|
|
+ vls.insert(RandomRange(0, ( vls.size() - 1 ) ), create_e2(f));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(create_e2(f));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(create_e2(f));
|
|
|
+ vls.setDataObject(RandomRange(0, ( vls.size() - 1 ) ), create_e2(f));
|
|
|
+ vls.append(create_e2(f));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+
|
|
|
+ cs.undoChanges();
|
|
|
+ CheckEquals(0, cs.getChangedDataObjects().size, 'cs.getChangedDataObjects().size');
|
|
|
+ vls := x.getList('p_li');
|
|
|
+ CheckEquals(vvals_a_length, vls.size(), 'x, vls.size()');
|
|
|
+ for i := 0 to Pred(vvals_a_length) do begin
|
|
|
+ check_e1_equal(vvals_a[i], vls.getDataObject(i), Format('x, Index = %d',[i]));
|
|
|
+ end;
|
|
|
+ vls := y.getList('p_b_li');
|
|
|
+ CheckEquals(vvals_b_length, vls.size(), 'y, vls.size()');
|
|
|
+ for i := 0 to Pred(vvals_b_length) do begin
|
|
|
+ check_e2_equal(vvals_b[i], vls.getDataObject(i), Format('y, Index = %d',[i]));
|
|
|
+ end;
|
|
|
+
|
|
|
+ finally
|
|
|
+ SetLength(vvals_b,0);
|
|
|
+ SetLength(vvals_a,0);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummaryMultiValueProps_Test.undoChanges_nested_string();
|
|
|
+var
|
|
|
+ f : ISDODataFactory;
|
|
|
+ x, y : ISDODataObject;
|
|
|
+ cs : ISDOChangeSummary;
|
|
|
+ vls : ISDODataObjectList;
|
|
|
+ vvals_a : array of TSDOString;
|
|
|
+ vvals_a_length, i : PtrInt;
|
|
|
+ vvals_b : array of TSDOString;
|
|
|
+ vvals_b_length : PtrInt;
|
|
|
+begin
|
|
|
+ Randomize();
|
|
|
+ f := TSDODataFactory.Create();
|
|
|
+ f.AddType(s_uri, 'a', []);
|
|
|
+ f.AddType(s_uri, 'b', []);
|
|
|
+ f.addProperty(s_uri, 'a', 'p_i', sdo_namespace, SDOTypeDefaultTypeNames[IntegerType], []);
|
|
|
+ f.addProperty(s_uri, 'a', 'p_li', sdo_namespace, SDOTypeDefaultTypeNames[StringType], [pfIsMany]);
|
|
|
+ f.addProperty(s_uri, 'a', 'p_ab', s_uri, 'b', [pfIsContainment]);
|
|
|
+ f.addProperty(s_uri, 'a', s_changesummary_prop, sdo_namespace, SDOTypeDefaultTypeNames[ChangeSummaryType], [pfIsReadOnly]);
|
|
|
+ f.addProperty(s_uri, 'b', 'p_b_li', sdo_namespace, SDOTypeDefaultTypeNames[stringType], [pfIsMany]);
|
|
|
+ x := f.createNew(s_uri,'a');
|
|
|
+ x.setInteger('p_i', RandomRange(-1234,56789));
|
|
|
+ y := x.createDataObject('p_ab');
|
|
|
+ cs := x.getChangeSummary();
|
|
|
+
|
|
|
+ vvals_a_length := RandomRange(1,100);
|
|
|
+ vvals_b_length := RandomRange(1,100);
|
|
|
+ SetLength(vvals_a,vvals_a_length);
|
|
|
+ try
|
|
|
+ for i := 0 to Pred(vvals_a_length) do
|
|
|
+ vvals_a[i] := RandomString(RandomRange(0,100));
|
|
|
+ SetLength(vvals_b,vvals_b_length);
|
|
|
+ for i := 0 to Pred(vvals_b_length) do
|
|
|
+ vvals_b[i] := RandomString(RandomRange(0,100));
|
|
|
+
|
|
|
+ vls := x.getList('p_li');
|
|
|
+ for i := 0 to Pred(vvals_a_length) do
|
|
|
+ vls.append(vvals_a[i]);
|
|
|
+ vls := y.getList('p_b_li');
|
|
|
+ for i := 0 to Pred(vvals_b_length) do
|
|
|
+ vls.append(vvals_b[i]);
|
|
|
+
|
|
|
+ cs.beginLogging();
|
|
|
+ vls := x.getList('p_li');
|
|
|
+ vls.append(RandomString(RandomRange(0,100)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(RandomString(RandomRange(0,100)));
|
|
|
+ vls.insert(RandomRange(0, ( vls.size() - 1 ) ), RandomString(RandomRange(0,100)));
|
|
|
+ vls.setString(RandomRange(0, ( vls.size() - 1 ) ), RandomString(RandomRange(0,100)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(RandomString(RandomRange(0,100)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls := y.getList('p_b_li');
|
|
|
+ vls.insert(RandomRange(0, ( vls.size() - 1 ) ), RandomString(RandomRange(0,100)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(RandomString(RandomRange(0,100)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(RandomString(RandomRange(0,100)));
|
|
|
+ vls.setString(RandomRange(0, ( vls.size() - 1 ) ), RandomString(RandomRange(0,100)));
|
|
|
+ vls.append(RandomString(RandomRange(0,100)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+
|
|
|
+ cs.undoChanges();
|
|
|
+ CheckEquals(0, cs.getChangedDataObjects().size, 'cs.getChangedDataObjects().size');
|
|
|
+ vls := x.getList('p_li');
|
|
|
+ CheckEquals(vvals_a_length, vls.size(), 'x, vls.size()');
|
|
|
+ for i := 0 to Pred(vvals_a_length) do begin
|
|
|
+ CheckEquals(vvals_a[i], vls.getString(i), Format('x, Index = %d',[i]));
|
|
|
+ end;
|
|
|
+ vls := y.getList('p_b_li');
|
|
|
+ CheckEquals(vvals_b_length, vls.size(), 'y, vls.size()');
|
|
|
+ for i := 0 to Pred(vvals_b_length) do begin
|
|
|
+ CheckEquals(vvals_b[i], vls.getString(i), Format('y, Index = %d',[i]));
|
|
|
+ end;
|
|
|
+
|
|
|
+ finally
|
|
|
+ SetLength(vvals_b,0);
|
|
|
+ SetLength(vvals_a,0);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+{$IFDEF HAS_SDO_BYTES}
|
|
|
+procedure TSDOChangeSummaryMultiValueProps_Test.getOldValues_bytes();
|
|
|
+const
|
|
|
+ LOCAL_PROP = s_bytes_propList;
|
|
|
+
|
|
|
+ procedure check_empty_list(const AList : ISDOSettingList);
|
|
|
+ begin
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(AList));
|
|
|
+ CheckEquals(0, AList.size());
|
|
|
+ end;
|
|
|
+
|
|
|
+var
|
|
|
+ x : ISDODataObject;
|
|
|
+ cs : ISDOChangeSummary;
|
|
|
+ ls : ISDOSettingList;
|
|
|
+ vls : ISDODataObjectList;
|
|
|
+ vvals : array of TSDOBytes;
|
|
|
+ vvals_length, i : PtrInt;
|
|
|
+ s : TValueSetting;
|
|
|
+begin
|
|
|
+ Randomize();
|
|
|
+ x := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ cs := x.getChangeSummary();
|
|
|
+ check_empty_list(cs.getOldValues(x));
|
|
|
+
|
|
|
+ vvals_length := RandomRange(1,100);
|
|
|
+ SetLength(vvals,vvals_length);
|
|
|
+ try
|
|
|
+ for i := 0 to Pred(vvals_length) do
|
|
|
+ vvals[i] := RandomBytes(RandomRange(0,200));
|
|
|
+ vls := x.getList(LOCAL_PROP);
|
|
|
+ for i := 0 to Pred(vvals_length) do
|
|
|
+ vls.appendBytes(vvals[i]);
|
|
|
+ check_empty_list(cs.getOldValues(x));
|
|
|
+
|
|
|
+ cs.beginLogging();
|
|
|
+ vls.appendBytes(RandomBytes(RandomRange(0,200)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.appendBytes(RandomBytes(RandomRange(0,200)));
|
|
|
+ vls.insertBytes(RandomRange(0, ( vls.size() - 1 ) ), RandomBytes(RandomRange(0,200)));
|
|
|
+ vls.setBytes(RandomRange(0, ( vls.size() - 1 ) ), RandomBytes(RandomRange(0,200)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.appendBytes(RandomBytes(RandomRange(0,200)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ ls := cs.getOldValues(x);
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(ls));
|
|
|
+ CheckEquals(vvals_length, ls.size(), 'ls.size()');
|
|
|
+ for i := 0 to Pred(vvals_length) do begin
|
|
|
+ s := ls.getItem(i);
|
|
|
+ CheckEquals(PtrUInt(x.getProperty(LOCAL_PROP)), PtrUInt(s.getProperty()), Format('i = %d; getProperty',[i]));
|
|
|
+ CheckEquals(i, s.getIndex(), Format('i = %d; getIndex',[i]));
|
|
|
+ CheckEquals(True, s.isSet(), Format('i = %d; isSet',[i]));
|
|
|
+ CheckEquals(False, s.isNull(), Format('i = %d; isNull',[i]));
|
|
|
+ CheckEquals(vvals[i], s.getBytesValue(), Format('i = %d; getBytesValue',[i]));
|
|
|
+ end;
|
|
|
+ finally
|
|
|
+ SetLength(vvals,0);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummaryMultiValueProps_Test.undoChanges_bytes();
|
|
|
+const
|
|
|
+ LOCAL_PROP = s_bytes_propList;
|
|
|
+var
|
|
|
+ x : ISDODataObject;
|
|
|
+ cs : ISDOChangeSummary;
|
|
|
+ vls : ISDODataObjectList;
|
|
|
+ vvals : array of TSDOBytes;
|
|
|
+ vvals_length, i : PtrInt;
|
|
|
+begin
|
|
|
+ Randomize();
|
|
|
+ x := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ cs := x.getChangeSummary();
|
|
|
+
|
|
|
+ vvals_length := RandomRange(1,100);
|
|
|
+ SetLength(vvals,vvals_length);
|
|
|
+ try
|
|
|
+ for i := 0 to Pred(vvals_length) do
|
|
|
+ vvals[i] := RandomBytes(RandomRange(0,200));
|
|
|
+ vls := x.getList(LOCAL_PROP);
|
|
|
+ for i := 0 to Pred(vvals_length) do
|
|
|
+ vls.appendBytes(vvals[i]);
|
|
|
+
|
|
|
+ cs.beginLogging();
|
|
|
+ vls.appendBytes(RandomBytes(RandomRange(0,200)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.appendBytes(RandomBytes(RandomRange(0,200)));
|
|
|
+ vls.insertBytes(RandomRange(0, ( vls.size() - 1 ) ), RandomBytes(RandomRange(0,200)));
|
|
|
+ vls.setBytes(RandomRange(0, ( vls.size() - 1 ) ), RandomBytes(RandomRange(0,200)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.appendBytes(RandomBytes(RandomRange(0,200)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ cs.undoChanges();
|
|
|
+ CheckEquals(0, cs.getChangedDataObjects().size, 'cs.getChangedDataObjects().size');
|
|
|
+ CheckEquals(vvals_length, vls.size(), 'vls.size()');
|
|
|
+ for i := 0 to Pred(vvals_length) do begin
|
|
|
+ CheckEquals(vvals[i], vls.getBytes(i), Format('Index = %d',[i]));
|
|
|
+ end;
|
|
|
+ finally
|
|
|
+ SetLength(vvals,0);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummaryMultiValueProps_Test.undoChanges_bytes_deleted();
|
|
|
+var
|
|
|
+ locFac : ISDODataFactory;
|
|
|
+ locA : ISDODataObject;
|
|
|
+ locCS : ISDOChangeSummary;
|
|
|
+begin
|
|
|
+ locFac := TSDODataFactory.Create() as ISDODataFactory;
|
|
|
+ locFac.AddType(s_uri,'a',[]);
|
|
|
+ locFac.addProperty(s_uri,'a','p_ab',sdo_namespace,SDOTypeDefaultTypeNames[BytesType],[pfIsMany]);
|
|
|
+ locFac.addProperty(s_uri,'a',s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly]);
|
|
|
+
|
|
|
+ locA := locFac.createNew(s_uri,'a');
|
|
|
+ locA.getList('p_ab').appendBytes(RandomBytes(RandomRange(0,200)));
|
|
|
+ locCS := locA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locA.getList('p_ab').delete(0);
|
|
|
+ locCS.getOldValues(locA);
|
|
|
+
|
|
|
+ locA := locFac.createNew(s_uri,'a');
|
|
|
+ locA.getList('p_ab').appendBytes(RandomBytes(RandomRange(0,200)));
|
|
|
+ locA.getList('p_ab').appendBytes(RandomBytes(RandomRange(0,200)));
|
|
|
+ locCS := locA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locA.getList('p_ab').delete(1);
|
|
|
+ locCS.getOldValues(locA);
|
|
|
+
|
|
|
+ locA := locFac.createNew(s_uri,'a');
|
|
|
+ locA.getList('p_ab').appendBytes(RandomBytes(RandomRange(0,200)));
|
|
|
+ locA.getList('p_ab').appendBytes(RandomBytes(RandomRange(0,200)));
|
|
|
+ locA.getList('p_ab').appendBytes(RandomBytes(RandomRange(0,200)));
|
|
|
+ locA.getList('p_ab').appendBytes(RandomBytes(RandomRange(0,200)));
|
|
|
+ locCS := locA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locA.getList('p_ab').delete(3);
|
|
|
+ locCS.getOldValues(locA);
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummaryMultiValueProps_Test.undoChanges_nested_bytes();
|
|
|
+const
|
|
|
+ PROP_TYPE = BytesType;
|
|
|
+var
|
|
|
+ f : ISDODataFactory;
|
|
|
+ x, y : ISDODataObject;
|
|
|
+ cs : ISDOChangeSummary;
|
|
|
+ vls : ISDODataObjectList;
|
|
|
+ vvals_a : array of TSDOBytes;
|
|
|
+ vvals_a_length, i : PtrInt;
|
|
|
+ vvals_b : array of TSDOBytes;
|
|
|
+ vvals_b_length : PtrInt;
|
|
|
+begin
|
|
|
+ Randomize();
|
|
|
+ f := TSDODataFactory.Create();
|
|
|
+ f.AddType(s_uri, 'a', []);
|
|
|
+ f.AddType(s_uri, 'b', []);
|
|
|
+ f.addProperty(s_uri, 'a', 'p_i', sdo_namespace, SDOTypeDefaultTypeNames[PROP_TYPE], []);
|
|
|
+ f.addProperty(s_uri, 'a', 'p_li', sdo_namespace, SDOTypeDefaultTypeNames[PROP_TYPE], [pfIsMany]);
|
|
|
+ f.addProperty(s_uri, 'a', 'p_ab', s_uri, 'b', [pfIsContainment]);
|
|
|
+ f.addProperty(s_uri, 'a', s_changesummary_prop, sdo_namespace, SDOTypeDefaultTypeNames[ChangeSummaryType], [pfIsReadOnly]);
|
|
|
+ f.addProperty(s_uri, 'b', 'p_b_li', sdo_namespace, SDOTypeDefaultTypeNames[PROP_TYPE], [pfIsMany]);
|
|
|
+ x := f.createNew(s_uri,'a');
|
|
|
+ x.setBytes('p_i', RandomBytes(RandomRange(0,200)));
|
|
|
+ y := x.createDataObject('p_ab');
|
|
|
+ cs := x.getChangeSummary();
|
|
|
+
|
|
|
+ vvals_a_length := RandomRange(1,100);
|
|
|
+ vvals_b_length := RandomRange(1,100);
|
|
|
+ SetLength(vvals_a,vvals_a_length);
|
|
|
+ try
|
|
|
+ for i := 0 to Pred(vvals_a_length) do
|
|
|
+ vvals_a[i] := RandomBytes(RandomRange(0,200));
|
|
|
+ SetLength(vvals_b,vvals_b_length);
|
|
|
+ for i := 0 to Pred(vvals_b_length) do
|
|
|
+ vvals_b[i] := RandomBytes(RandomRange(0,200));
|
|
|
+
|
|
|
+ vls := x.getList('p_li');
|
|
|
+ for i := 0 to Pred(vvals_a_length) do
|
|
|
+ vls.appendBytes(vvals_a[i]);
|
|
|
+ vls := y.getList('p_b_li');
|
|
|
+ for i := 0 to Pred(vvals_b_length) do
|
|
|
+ vls.appendBytes(vvals_b[i]);
|
|
|
+
|
|
|
+ cs.beginLogging();
|
|
|
+ vls := x.getList('p_li');
|
|
|
+ vls.appendBytes(RandomBytes(RandomRange(0,200)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.appendBytes(RandomBytes(RandomRange(0,200)));
|
|
|
+ vls.insertBytes(RandomRange(0, ( vls.size() - 1 ) ), RandomBytes(RandomRange(0,200)));
|
|
|
+ vls.setBytes(RandomRange(0, ( vls.size() - 1 ) ), RandomBytes(RandomRange(0,200)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.appendBytes(RandomBytes(RandomRange(0,200)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls := y.getList('p_b_li');
|
|
|
+ vls.insertBytes(RandomRange(0, ( vls.size() - 1 ) ), RandomBytes(RandomRange(0,200)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.appendBytes(RandomBytes(RandomRange(0,200)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.appendBytes(RandomBytes(RandomRange(0,200)));
|
|
|
+ vls.setBytes(RandomRange(0, ( vls.size() - 1 ) ), RandomBytes(RandomRange(0,200)));
|
|
|
+ vls.appendBytes(RandomBytes(RandomRange(0,200)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+
|
|
|
+ cs.undoChanges();
|
|
|
+ CheckEquals(0, cs.getChangedDataObjects().size, 'cs.getChangedDataObjects().size');
|
|
|
+ vls := x.getList('p_li');
|
|
|
+ CheckEquals(vvals_a_length, vls.size(), 'x, vls.size()');
|
|
|
+ for i := 0 to Pred(vvals_a_length) do begin
|
|
|
+ CheckEquals(vvals_a[i], vls.getBytes(i), Format('x, Index = %d',[i]));
|
|
|
+ end;
|
|
|
+ vls := y.getList('p_b_li');
|
|
|
+ CheckEquals(vvals_b_length, vls.size(), 'y, vls.size()');
|
|
|
+ for i := 0 to Pred(vvals_b_length) do begin
|
|
|
+ CheckEquals(vvals_b[i], vls.getBytes(i), Format('y, Index = %d',[i]));
|
|
|
+ end;
|
|
|
+
|
|
|
+ finally
|
|
|
+ SetLength(vvals_b,0);
|
|
|
+ SetLength(vvals_a,0);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+{$ENDIF HAS_SDO_BYTES}
|
|
|
+
|
|
|
+{$IFDEF HAS_SDO_CHAR}
|
|
|
+procedure TSDOChangeSummaryMultiValueProps_Test.getOldValues_char();
|
|
|
+const
|
|
|
+ LOCAL_PROP = s_char_propList;
|
|
|
+
|
|
|
+ procedure check_empty_list(const AList : ISDOSettingList);
|
|
|
+ begin
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(AList));
|
|
|
+ CheckEquals(0, AList.size());
|
|
|
+ end;
|
|
|
+
|
|
|
+var
|
|
|
+ x : ISDODataObject;
|
|
|
+ cs : ISDOChangeSummary;
|
|
|
+ ls : ISDOSettingList;
|
|
|
+ vls : ISDODataObjectList;
|
|
|
+ vvals : array of TSDOChar;
|
|
|
+ vvals_length, i : PtrInt;
|
|
|
+ s : TValueSetting;
|
|
|
+begin
|
|
|
+ Randomize();
|
|
|
+ x := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ cs := x.getChangeSummary();
|
|
|
+ check_empty_list(cs.getOldValues(x));
|
|
|
+
|
|
|
+ vvals_length := RandomRange(1,100);
|
|
|
+ SetLength(vvals,vvals_length);
|
|
|
+ try
|
|
|
+ for i := 0 to Pred(vvals_length) do
|
|
|
+ vvals[i] := TSDOChar(RandomRange(Ord(Low(TSDOChar)),Ord(High(TSDOChar))));
|
|
|
+ vls := x.getList(LOCAL_PROP);
|
|
|
+ for i := 0 to Pred(vvals_length) do
|
|
|
+ vls.append(vvals[i]);
|
|
|
+ check_empty_list(cs.getOldValues(x));
|
|
|
+
|
|
|
+ cs.beginLogging();
|
|
|
+ vls.append(TSDOChar(RandomRange(Ord(Low(TSDOChar)),Ord(High(TSDOChar)))));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(TSDOChar(RandomRange(Ord(Low(TSDOChar)),Ord(High(TSDOChar)))));
|
|
|
+ vls.insert(RandomRange(0, ( vls.size() - 1 ) ), TSDOChar(RandomRange(Ord(Low(TSDOChar)),Ord(High(TSDOChar)))));
|
|
|
+ vls.setCharacter(RandomRange(0, ( vls.size() - 1 ) ), TSDOChar(RandomRange(Ord(Low(TSDOChar)),Ord(High(TSDOChar)))));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(TSDOChar(RandomRange(Ord(Low(TSDOChar)),Ord(High(TSDOChar)))));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ ls := cs.getOldValues(x);
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(ls));
|
|
|
+ CheckEquals(vvals_length, ls.size(), 'ls.size()');
|
|
|
+ for i := 0 to Pred(vvals_length) do begin
|
|
|
+ s := ls.getItem(i);
|
|
|
+ CheckEquals(PtrUInt(x.getProperty(LOCAL_PROP)), PtrUInt(s.getProperty()), Format('i = %d; getProperty',[i]));
|
|
|
+ CheckEquals(i, s.getIndex(), Format('i = %d; getIndex',[i]));
|
|
|
+ CheckEquals(True, s.isSet(), Format('i = %d; isSet',[i]));
|
|
|
+ CheckEquals(False, s.isNull(), Format('i = %d; isNull',[i]));
|
|
|
+ CheckEquals(vvals[i], s.getCharacterValue(), Format('i = %d; getCharacterValue',[i]));
|
|
|
+ end;
|
|
|
+ finally
|
|
|
+ SetLength(vvals,0);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummaryMultiValueProps_Test.undoChanges_char();
|
|
|
+const
|
|
|
+ LOCAL_PROP = s_char_propList;
|
|
|
+var
|
|
|
+ x : ISDODataObject;
|
|
|
+ cs : ISDOChangeSummary;
|
|
|
+ vls : ISDODataObjectList;
|
|
|
+ vvals : array of TSDOChar;
|
|
|
+ vvals_length, i : PtrInt;
|
|
|
+begin
|
|
|
+ Randomize();
|
|
|
+ x := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ cs := x.getChangeSummary();
|
|
|
+
|
|
|
+ vvals_length := RandomRange(1,100);
|
|
|
+ SetLength(vvals,vvals_length);
|
|
|
+ try
|
|
|
+ for i := 0 to Pred(vvals_length) do
|
|
|
+ vvals[i] := TSDOChar(RandomRange(Ord(Low(TSDOChar)),Ord(High(TSDOChar))));
|
|
|
+ vls := x.getList(LOCAL_PROP);
|
|
|
+ for i := 0 to Pred(vvals_length) do
|
|
|
+ vls.append(vvals[i]);
|
|
|
+
|
|
|
+ cs.beginLogging();
|
|
|
+ vls.append(TSDOChar(RandomRange(Ord(Low(TSDOChar)),Ord(High(TSDOChar)))));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(TSDOChar(RandomRange(Ord(Low(TSDOChar)),Ord(High(TSDOChar)))));
|
|
|
+ vls.insert(RandomRange(0, ( vls.size() - 1 ) ), TSDOChar(RandomRange(Ord(Low(TSDOChar)),Ord(High(TSDOChar)))));
|
|
|
+ vls.setCharacter(RandomRange(0, ( vls.size() - 1 ) ), TSDOChar(RandomRange(Ord(Low(TSDOChar)),Ord(High(TSDOChar)))));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(TSDOChar(RandomRange(Ord(Low(TSDOChar)),Ord(High(TSDOChar)))));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ cs.undoChanges();
|
|
|
+ CheckEquals(0, cs.getChangedDataObjects().size, 'cs.getChangedDataObjects().size');
|
|
|
+ CheckEquals(vvals_length, vls.size(), 'vls.size()');
|
|
|
+ for i := 0 to Pred(vvals_length) do begin
|
|
|
+ CheckEquals(vvals[i], vls.getCharacter(i), Format('Index = %d',[i]));
|
|
|
+ end;
|
|
|
+ finally
|
|
|
+ SetLength(vvals,0);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummaryMultiValueProps_Test.undoChanges_char_deleted();
|
|
|
+var
|
|
|
+ locFac : ISDODataFactory;
|
|
|
+ locA : ISDODataObject;
|
|
|
+ locCS : ISDOChangeSummary;
|
|
|
+begin
|
|
|
+ locFac := TSDODataFactory.Create() as ISDODataFactory;
|
|
|
+ locFac.AddType(s_uri,'a',[]);
|
|
|
+ locFac.addProperty(s_uri,'a','p_ab',sdo_namespace,SDOTypeDefaultTypeNames[CharacterType],[pfIsMany]);
|
|
|
+ locFac.addProperty(s_uri,'a',s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly]);
|
|
|
+
|
|
|
+ locA := locFac.createNew(s_uri,'a');
|
|
|
+ locA.getList('p_ab').append(TSDOChar('z'));
|
|
|
+ locCS := locA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locA.getList('p_ab').delete(0);
|
|
|
+ locCS.getOldValues(locA);
|
|
|
+
|
|
|
+ locA := locFac.createNew(s_uri,'a');
|
|
|
+ locA.getList('p_ab').append(TSDOChar('d'));
|
|
|
+ locA.getList('p_ab').append(TSDOChar('f'));
|
|
|
+ locCS := locA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locA.getList('p_ab').delete(1);
|
|
|
+ locCS.getOldValues(locA);
|
|
|
+
|
|
|
+ locA := locFac.createNew(s_uri,'a');
|
|
|
+ locA.getList('p_ab').append(TSDOChar('w'));
|
|
|
+ locA.getList('p_ab').append(TSDOChar(#0));
|
|
|
+ locA.getList('p_ab').append(TSDOChar('5'));
|
|
|
+ locA.getList('p_ab').append(TSDOChar('n'));
|
|
|
+ locCS := locA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locA.getList('p_ab').delete(3);
|
|
|
+ locCS.getOldValues(locA);
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummaryMultiValueProps_Test.undoChanges_nested_char();
|
|
|
+const
|
|
|
+ PROP_TYPE = CharacterType;
|
|
|
+var
|
|
|
+ f : ISDODataFactory;
|
|
|
+ x, y : ISDODataObject;
|
|
|
+ cs : ISDOChangeSummary;
|
|
|
+ vls : ISDODataObjectList;
|
|
|
+ vvals_a : array of TSDOChar;
|
|
|
+ vvals_a_length, i : PtrInt;
|
|
|
+ vvals_b : array of TSDOChar;
|
|
|
+ vvals_b_length : PtrInt;
|
|
|
+begin
|
|
|
+ Randomize();
|
|
|
+ f := TSDODataFactory.Create();
|
|
|
+ f.AddType(s_uri, 'a', []);
|
|
|
+ f.AddType(s_uri, 'b', []);
|
|
|
+ f.addProperty(s_uri, 'a', 'p_i', sdo_namespace, SDOTypeDefaultTypeNames[PROP_TYPE], []);
|
|
|
+ f.addProperty(s_uri, 'a', 'p_li', sdo_namespace, SDOTypeDefaultTypeNames[PROP_TYPE], [pfIsMany]);
|
|
|
+ f.addProperty(s_uri, 'a', 'p_ab', s_uri, 'b', [pfIsContainment]);
|
|
|
+ f.addProperty(s_uri, 'a', s_changesummary_prop, sdo_namespace, SDOTypeDefaultTypeNames[ChangeSummaryType], [pfIsReadOnly]);
|
|
|
+ f.addProperty(s_uri, 'b', 'p_b_li', sdo_namespace, SDOTypeDefaultTypeNames[PROP_TYPE], [pfIsMany]);
|
|
|
+ x := f.createNew(s_uri,'a');
|
|
|
+ x.setCharacter('p_i', TSDOChar(RandomRange(Ord(Low(TSDOChar)),Ord(High(TSDOChar)))));
|
|
|
+ y := x.createDataObject('p_ab');
|
|
|
+ cs := x.getChangeSummary();
|
|
|
+
|
|
|
+ vvals_a_length := RandomRange(1,100);
|
|
|
+ vvals_b_length := RandomRange(1,100);
|
|
|
+ SetLength(vvals_a,vvals_a_length);
|
|
|
+ try
|
|
|
+ for i := 0 to Pred(vvals_a_length) do
|
|
|
+ vvals_a[i] := TSDOChar(RandomRange(Ord(Low(TSDOChar)),Ord(High(TSDOChar))));
|
|
|
+ SetLength(vvals_b,vvals_b_length);
|
|
|
+ for i := 0 to Pred(vvals_b_length) do
|
|
|
+ vvals_b[i] := TSDOChar(RandomRange(Ord(Low(TSDOChar)),Ord(High(TSDOChar))));
|
|
|
+
|
|
|
+ vls := x.getList('p_li');
|
|
|
+ for i := 0 to Pred(vvals_a_length) do
|
|
|
+ vls.append(vvals_a[i]);
|
|
|
+ vls := y.getList('p_b_li');
|
|
|
+ for i := 0 to Pred(vvals_b_length) do
|
|
|
+ vls.append(vvals_b[i]);
|
|
|
+
|
|
|
+ cs.beginLogging();
|
|
|
+ vls := x.getList('p_li');
|
|
|
+ vls.append(TSDOChar(RandomRange(Ord(Low(TSDOChar)),Ord(High(TSDOChar)))));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(TSDOChar(RandomRange(Ord(Low(TSDOChar)),Ord(High(TSDOChar)))));
|
|
|
+ vls.insert(RandomRange(0, ( vls.size() - 1 ) ), TSDOChar(RandomRange(Ord(Low(TSDOChar)),Ord(High(TSDOChar)))));
|
|
|
+ vls.setCharacter(RandomRange(0, ( vls.size() - 1 ) ), TSDOChar(RandomRange(Ord(Low(TSDOChar)),Ord(High(TSDOChar)))));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(TSDOChar(RandomRange(Ord(Low(TSDOChar)),Ord(High(TSDOChar)))));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls := y.getList('p_b_li');
|
|
|
+ vls.insert(RandomRange(0, ( vls.size() - 1 ) ), TSDOChar(RandomRange(Ord(Low(TSDOChar)),Ord(High(TSDOChar)))));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(TSDOChar(RandomRange(Ord(Low(TSDOChar)),Ord(High(TSDOChar)))));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(TSDOChar(RandomRange(Ord(Low(TSDOChar)),Ord(High(TSDOChar)))));
|
|
|
+ vls.setCharacter(RandomRange(0, ( vls.size() - 1 ) ), TSDOChar(RandomRange(Ord(Low(TSDOChar)),Ord(High(TSDOChar)))));
|
|
|
+ vls.append(TSDOChar(RandomRange(Ord(Low(TSDOChar)),Ord(High(TSDOChar)))));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+
|
|
|
+ cs.undoChanges();
|
|
|
+ CheckEquals(0, cs.getChangedDataObjects().size, 'cs.getChangedDataObjects().size');
|
|
|
+ vls := x.getList('p_li');
|
|
|
+ CheckEquals(vvals_a_length, vls.size(), 'x, vls.size()');
|
|
|
+ for i := 0 to Pred(vvals_a_length) do begin
|
|
|
+ CheckEquals(vvals_a[i], vls.getCharacter(i), Format('x, Index = %d',[i]));
|
|
|
+ end;
|
|
|
+ vls := y.getList('p_b_li');
|
|
|
+ CheckEquals(vvals_b_length, vls.size(), 'y, vls.size()');
|
|
|
+ for i := 0 to Pred(vvals_b_length) do begin
|
|
|
+ CheckEquals(vvals_b[i], vls.getCharacter(i), Format('y, Index = %d',[i]));
|
|
|
+ end;
|
|
|
+
|
|
|
+ finally
|
|
|
+ SetLength(vvals_b,0);
|
|
|
+ SetLength(vvals_a,0);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+{$ENDIF HAS_SDO_CHAR}
|
|
|
+
|
|
|
+{$IFDEF HAS_SDO_CURRENCY}
|
|
|
+procedure TSDOChangeSummaryMultiValueProps_Test.getOldValues_currency;
|
|
|
+const
|
|
|
+ LOCAL_PROP = s_currency_propList;
|
|
|
+
|
|
|
+ procedure check_empty_list(const AList : ISDOSettingList);
|
|
|
+ begin
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(AList));
|
|
|
+ CheckEquals(0, AList.size());
|
|
|
+ end;
|
|
|
+
|
|
|
+var
|
|
|
+ x : ISDODataObject;
|
|
|
+ cs : ISDOChangeSummary;
|
|
|
+ ls : ISDOSettingList;
|
|
|
+ vls : ISDODataObjectList;
|
|
|
+ vvals : array of TSDOCurrency;
|
|
|
+ vvals_length, i : PtrInt;
|
|
|
+ s : TValueSetting;
|
|
|
+begin
|
|
|
+ Randomize();
|
|
|
+ x := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ cs := x.getChangeSummary();
|
|
|
+ check_empty_list(cs.getOldValues(x));
|
|
|
+
|
|
|
+ vvals_length := RandomRange(1,100);
|
|
|
+ SetLength(vvals,vvals_length);
|
|
|
+ try
|
|
|
+ for i := 0 to Pred(vvals_length) do
|
|
|
+ vvals[i] := test_suite_utils.RandomRange(Low(Word),High(Word));
|
|
|
+ vls := x.getList(LOCAL_PROP);
|
|
|
+ for i := 0 to Pred(vvals_length) do
|
|
|
+ vls.appendCurrency(vvals[i]);
|
|
|
+ check_empty_list(cs.getOldValues(x));
|
|
|
+
|
|
|
+ cs.beginLogging();
|
|
|
+ vls.appendCurrency(test_suite_utils.RandomRange(Low(Word),High(Word)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.appendCurrency(test_suite_utils.RandomRange(Low(Word),High(Word)));
|
|
|
+ vls.insertCurrency(RandomRange(0, ( vls.size() - 1 ) ), test_suite_utils.RandomRange(Low(Word),High(Word)));
|
|
|
+ vls.setCurrency(RandomRange(0, ( vls.size() - 1 ) ), test_suite_utils.RandomRange(Low(Word),High(Word)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.appendCurrency(test_suite_utils.RandomRange(Low(Word),High(Word)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ ls := cs.getOldValues(x);
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(ls));
|
|
|
+ CheckEquals(vvals_length, ls.size(), 'ls.size()');
|
|
|
+ for i := 0 to Pred(vvals_length) do begin
|
|
|
+ s := ls.getItem(i);
|
|
|
+ CheckEquals(PtrUInt(x.getProperty(LOCAL_PROP)), PtrUInt(s.getProperty()), Format('i = %d; getProperty',[i]));
|
|
|
+ CheckEquals(i, s.getIndex(), Format('i = %d; getIndex',[i]));
|
|
|
+ CheckEquals(True, s.isSet(), Format('i = %d; isSet',[i]));
|
|
|
+ CheckEquals(False, s.isNull(), Format('i = %d; isNull',[i]));
|
|
|
+ CheckEquals(vvals[i], s.getCurrencyValue(), Format('i = %d; getCurrencyValue',[i]));
|
|
|
+ end;
|
|
|
+ finally
|
|
|
+ SetLength(vvals,0);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummaryMultiValueProps_Test.undoChanges_currency();
|
|
|
+const
|
|
|
+ LOCAL_PROP = s_currency_propList;
|
|
|
+var
|
|
|
+ x : ISDODataObject;
|
|
|
+ cs : ISDOChangeSummary;
|
|
|
+ vls : ISDODataObjectList;
|
|
|
+ vvals : array of TSDOCurrency;
|
|
|
+ vvals_length, i : PtrInt;
|
|
|
+begin
|
|
|
+ Randomize();
|
|
|
+ x := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ cs := x.getChangeSummary();
|
|
|
+
|
|
|
+ vvals_length := RandomRange(1,100);
|
|
|
+ SetLength(vvals,vvals_length);
|
|
|
+ try
|
|
|
+ for i := 0 to Pred(vvals_length) do
|
|
|
+ vvals[i] := test_suite_utils.RandomRange(Low(Word),High(Word));
|
|
|
+ vls := x.getList(LOCAL_PROP);
|
|
|
+ for i := 0 to Pred(vvals_length) do
|
|
|
+ vls.appendCurrency(vvals[i]);
|
|
|
+
|
|
|
+ cs.beginLogging();
|
|
|
+ vls.appendCurrency(test_suite_utils.RandomRange(Low(Word),High(Word)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.appendCurrency(test_suite_utils.RandomRange(Low(Word),High(Word)));
|
|
|
+ vls.insertCurrency(RandomRange(0, ( vls.size() - 1 ) ), test_suite_utils.RandomRange(Low(Word),High(Word)));
|
|
|
+ vls.setCurrency(RandomRange(0, ( vls.size() - 1 ) ), test_suite_utils.RandomRange(Low(Word),High(Word)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.appendCurrency(test_suite_utils.RandomRange(Low(Word),High(Word)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ cs.undoChanges();
|
|
|
+ CheckEquals(0, cs.getChangedDataObjects().size, 'cs.getChangedDataObjects().size');
|
|
|
+ CheckEquals(vvals_length, vls.size(), 'vls.size()');
|
|
|
+ for i := 0 to Pred(vvals_length) do begin
|
|
|
+ CheckEquals(vvals[i], vls.getCurrency(i), Format('Index = %d',[i]));
|
|
|
+ end;
|
|
|
+ finally
|
|
|
+ SetLength(vvals,0);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummaryMultiValueProps_Test.undoChanges_currency_deleted();
|
|
|
+const
|
|
|
+ CURRENCY_CONT_ARRAY : array[0..6] of TSDOCurrency = (
|
|
|
+ 123963244, 23852215, -52245, 1252222, -11122123, -24245, 522552
|
|
|
+ );
|
|
|
+var
|
|
|
+ locFac : ISDODataFactory;
|
|
|
+ locA : ISDODataObject;
|
|
|
+ locCS : ISDOChangeSummary;
|
|
|
+begin
|
|
|
+ locFac := TSDODataFactory.Create() as ISDODataFactory;
|
|
|
+ locFac.AddType(s_uri,'a',[]);
|
|
|
+ locFac.addProperty(s_uri,'a','p_ab',sdo_namespace,SDOTypeDefaultTypeNames[CurrencyType],[pfIsMany]);
|
|
|
+ locFac.addProperty(s_uri,'a',s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly]);
|
|
|
+
|
|
|
+ locA := locFac.createNew(s_uri,'a');
|
|
|
+ locA.getList('p_ab').appendCurrency(CURRENCY_CONT_ARRAY[0]);
|
|
|
+ locCS := locA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locA.getList('p_ab').delete(0);
|
|
|
+ locCS.getOldValues(locA);
|
|
|
+
|
|
|
+ locA := locFac.createNew(s_uri,'a');
|
|
|
+ locA.getList('p_ab').appendCurrency(CURRENCY_CONT_ARRAY[1]);
|
|
|
+ locA.getList('p_ab').appendCurrency(CURRENCY_CONT_ARRAY[2]);
|
|
|
+ locCS := locA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locA.getList('p_ab').delete(1);
|
|
|
+ locCS.getOldValues(locA);
|
|
|
+
|
|
|
+ locA := locFac.createNew(s_uri,'a');
|
|
|
+ locA.getList('p_ab').appendCurrency(CURRENCY_CONT_ARRAY[3]);
|
|
|
+ locA.getList('p_ab').appendCurrency(CURRENCY_CONT_ARRAY[4]);
|
|
|
+ locA.getList('p_ab').appendCurrency(CURRENCY_CONT_ARRAY[5]);
|
|
|
+ locA.getList('p_ab').appendCurrency(CURRENCY_CONT_ARRAY[6]);
|
|
|
+ locCS := locA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locA.getList('p_ab').delete(3);
|
|
|
+ locCS.getOldValues(locA);
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummaryMultiValueProps_Test.undoChanges_nested_currency();
|
|
|
+const
|
|
|
+ PROP_TYPE = CurrencyType;
|
|
|
+var
|
|
|
+ f : ISDODataFactory;
|
|
|
+ x, y : ISDODataObject;
|
|
|
+ cs : ISDOChangeSummary;
|
|
|
+ vls : ISDODataObjectList;
|
|
|
+ vvals_a : array of TSDOCurrency;
|
|
|
+ vvals_a_length, i : PtrInt;
|
|
|
+ vvals_b : array of TSDOCurrency;
|
|
|
+ vvals_b_length : PtrInt;
|
|
|
+begin
|
|
|
+ Randomize();
|
|
|
+ f := TSDODataFactory.Create();
|
|
|
+ f.AddType(s_uri, 'a', []);
|
|
|
+ f.AddType(s_uri, 'b', []);
|
|
|
+ f.addProperty(s_uri, 'a', 'p_i', sdo_namespace, SDOTypeDefaultTypeNames[PROP_TYPE], []);
|
|
|
+ f.addProperty(s_uri, 'a', 'p_li', sdo_namespace, SDOTypeDefaultTypeNames[PROP_TYPE], [pfIsMany]);
|
|
|
+ f.addProperty(s_uri, 'a', 'p_ab', s_uri, 'b', [pfIsContainment]);
|
|
|
+ f.addProperty(s_uri, 'a', s_changesummary_prop, sdo_namespace, SDOTypeDefaultTypeNames[ChangeSummaryType], [pfIsReadOnly]);
|
|
|
+ f.addProperty(s_uri, 'b', 'p_b_li', sdo_namespace, SDOTypeDefaultTypeNames[PROP_TYPE], [pfIsMany]);
|
|
|
+ x := f.createNew(s_uri,'a');
|
|
|
+ x.setCurrency('p_i', test_suite_utils.RandomRange(Low(Word),High(Word)));
|
|
|
+ y := x.createDataObject('p_ab');
|
|
|
+ cs := x.getChangeSummary();
|
|
|
+
|
|
|
+ vvals_a_length := RandomRange(1,100);
|
|
|
+ vvals_b_length := RandomRange(1,100);
|
|
|
+ SetLength(vvals_a,vvals_a_length);
|
|
|
+ try
|
|
|
+ for i := 0 to Pred(vvals_a_length) do
|
|
|
+ vvals_a[i] := test_suite_utils.RandomRange(Low(Word),High(Word));
|
|
|
+ SetLength(vvals_b,vvals_b_length);
|
|
|
+ for i := 0 to Pred(vvals_b_length) do
|
|
|
+ vvals_b[i] := test_suite_utils.RandomRange(Low(Word),High(Word));
|
|
|
+
|
|
|
+ vls := x.getList('p_li');
|
|
|
+ for i := 0 to Pred(vvals_a_length) do
|
|
|
+ vls.appendCurrency(vvals_a[i]);
|
|
|
+ vls := y.getList('p_b_li');
|
|
|
+ for i := 0 to Pred(vvals_b_length) do
|
|
|
+ vls.appendCurrency(vvals_b[i]);
|
|
|
+
|
|
|
+ cs.beginLogging();
|
|
|
+ vls := x.getList('p_li');
|
|
|
+ vls.appendCurrency(test_suite_utils.RandomRange(Low(Word),High(Word)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.appendCurrency(test_suite_utils.RandomRange(Low(Word),High(Word)));
|
|
|
+ vls.insertCurrency(RandomRange(0, ( vls.size() - 1 ) ), test_suite_utils.RandomRange(Low(Word),High(Word)));
|
|
|
+ vls.setCurrency(RandomRange(0, ( vls.size() - 1 ) ), test_suite_utils.RandomRange(Low(Word),High(Word)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.appendCurrency(test_suite_utils.RandomRange(Low(Word),High(Word)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls := y.getList('p_b_li');
|
|
|
+ vls.insertCurrency(RandomRange(0, ( vls.size() - 1 ) ), test_suite_utils.RandomRange(Low(Word),High(Word)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.appendCurrency(test_suite_utils.RandomRange(Low(Word),High(Word)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.appendCurrency(test_suite_utils.RandomRange(Low(Word),High(Word)));
|
|
|
+ vls.setCurrency(RandomRange(0, ( vls.size() - 1 ) ), test_suite_utils.RandomRange(Low(Word),High(Word)));
|
|
|
+ vls.appendCurrency(test_suite_utils.RandomRange(Low(Word),High(Word)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+
|
|
|
+ cs.undoChanges();
|
|
|
+ CheckEquals(0, cs.getChangedDataObjects().size, 'cs.getChangedDataObjects().size');
|
|
|
+ vls := x.getList('p_li');
|
|
|
+ CheckEquals(vvals_a_length, vls.size(), 'x, vls.size()');
|
|
|
+ for i := 0 to Pred(vvals_a_length) do begin
|
|
|
+ CheckEquals(vvals_a[i], vls.getCurrency(i), Format('x, Index = %d',[i]));
|
|
|
+ end;
|
|
|
+ vls := y.getList('p_b_li');
|
|
|
+ CheckEquals(vvals_b_length, vls.size(), 'y, vls.size()');
|
|
|
+ for i := 0 to Pred(vvals_b_length) do begin
|
|
|
+ CheckEquals(vvals_b[i], vls.getCurrency(i), Format('y, Index = %d',[i]));
|
|
|
+ end;
|
|
|
+
|
|
|
+ finally
|
|
|
+ SetLength(vvals_b,0);
|
|
|
+ SetLength(vvals_a,0);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+{$ENDIF HAS_SDO_CURRENCY}
|
|
|
+
|
|
|
+{$IFDEF HAS_SDO_DOUBLE}
|
|
|
+procedure TSDOChangeSummaryMultiValueProps_Test.getOldValues_double;
|
|
|
+const
|
|
|
+ LOCAL_PROP = s_double_propList;
|
|
|
+
|
|
|
+ procedure check_empty_list(const AList : ISDOSettingList);
|
|
|
+ begin
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(AList));
|
|
|
+ CheckEquals(0, AList.size());
|
|
|
+ end;
|
|
|
+
|
|
|
+var
|
|
|
+ x : ISDODataObject;
|
|
|
+ cs : ISDOChangeSummary;
|
|
|
+ ls : ISDOSettingList;
|
|
|
+ vls : ISDODataObjectList;
|
|
|
+ vvals : array of TSDODouble;
|
|
|
+ vvals_length, i : PtrInt;
|
|
|
+ s : TValueSetting;
|
|
|
+begin
|
|
|
+ Randomize();
|
|
|
+ x := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ cs := x.getChangeSummary();
|
|
|
+ check_empty_list(cs.getOldValues(x));
|
|
|
+
|
|
|
+ vvals_length := RandomRange(1,100);
|
|
|
+ SetLength(vvals,vvals_length);
|
|
|
+ try
|
|
|
+ for i := 0 to Pred(vvals_length) do
|
|
|
+ vvals[i] := RandomDouble(Low(Word),High(Word));
|
|
|
+ vls := x.getList(LOCAL_PROP);
|
|
|
+ for i := 0 to Pred(vvals_length) do
|
|
|
+ vls.append(vvals[i]);
|
|
|
+ check_empty_list(cs.getOldValues(x));
|
|
|
+
|
|
|
+ cs.beginLogging();
|
|
|
+ vls.append(RandomDouble(Low(Word),High(Word)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(RandomDouble(Low(Word),High(Word)));
|
|
|
+ vls.insert(RandomRange(0, ( vls.size() - 1 ) ), RandomDouble(Low(Word),High(Word)));
|
|
|
+ vls.setDouble(RandomRange(0, ( vls.size() - 1 ) ), RandomDouble(Low(Word),High(Word)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(RandomDouble(Low(Word),High(Word)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ ls := cs.getOldValues(x);
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(ls));
|
|
|
+ CheckEquals(vvals_length, ls.size(), 'ls.size()');
|
|
|
+ for i := 0 to Pred(vvals_length) do begin
|
|
|
+ s := ls.getItem(i);
|
|
|
+ CheckEquals(PtrUInt(x.getProperty(LOCAL_PROP)), PtrUInt(s.getProperty()), Format('i = %d; getProperty',[i]));
|
|
|
+ CheckEquals(i, s.getIndex(), Format('i = %d; getIndex',[i]));
|
|
|
+ CheckEquals(True, s.isSet(), Format('i = %d; isSet',[i]));
|
|
|
+ CheckEquals(False, s.isNull(), Format('i = %d; isNull',[i]));
|
|
|
+ CheckEquals(vvals[i], s.getDoubleValue(), Format('i = %d; getDoubleValue',[i]));
|
|
|
+ end;
|
|
|
+ finally
|
|
|
+ SetLength(vvals,0);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummaryMultiValueProps_Test.undoChanges_double();
|
|
|
+const
|
|
|
+ LOCAL_PROP = s_double_propList;
|
|
|
+var
|
|
|
+ x : ISDODataObject;
|
|
|
+ cs : ISDOChangeSummary;
|
|
|
+ vls : ISDODataObjectList;
|
|
|
+ vvals : array of TSDODouble;
|
|
|
+ vvals_length, i : PtrInt;
|
|
|
+begin
|
|
|
+ Randomize();
|
|
|
+ x := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ cs := x.getChangeSummary();
|
|
|
+
|
|
|
+ vvals_length := RandomRange(1,100);
|
|
|
+ SetLength(vvals,vvals_length);
|
|
|
+ try
|
|
|
+ for i := 0 to Pred(vvals_length) do
|
|
|
+ vvals[i] := RandomDouble(Low(Word),High(Word));
|
|
|
+ vls := x.getList(LOCAL_PROP);
|
|
|
+ for i := 0 to Pred(vvals_length) do
|
|
|
+ vls.append(vvals[i]);
|
|
|
+
|
|
|
+ cs.beginLogging();
|
|
|
+ vls.append(RandomDouble(Low(Word),High(Word)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(RandomDouble(Low(Word),High(Word)));
|
|
|
+ vls.insert(RandomRange(0, ( vls.size() - 1 ) ), RandomDouble(Low(Word),High(Word)));
|
|
|
+ vls.setDouble(RandomRange(0, ( vls.size() - 1 ) ), RandomDouble(Low(Word),High(Word)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(RandomDouble(Low(Word),High(Word)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ cs.undoChanges();
|
|
|
+ CheckEquals(0, cs.getChangedDataObjects().size, 'cs.getChangedDataObjects().size');
|
|
|
+ CheckEquals(vvals_length, vls.size(), 'vls.size()');
|
|
|
+ for i := 0 to Pred(vvals_length) do begin
|
|
|
+ CheckEquals(vvals[i], vls.getDouble(i), Format('Index = %d',[i]));
|
|
|
+ end;
|
|
|
+ finally
|
|
|
+ SetLength(vvals,0);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummaryMultiValueProps_Test.undoChanges_double_deleted();
|
|
|
+const
|
|
|
+ DOUBLE_CONT_ARRAY : array[0..6] of TSDODouble = (
|
|
|
+ 123963244, 23852215, -52245, 1252222, -11122123, -24245, 522552
|
|
|
+ );
|
|
|
+var
|
|
|
+ locFac : ISDODataFactory;
|
|
|
+ locA : ISDODataObject;
|
|
|
+ locCS : ISDOChangeSummary;
|
|
|
+begin
|
|
|
+ locFac := TSDODataFactory.Create() as ISDODataFactory;
|
|
|
+ locFac.AddType(s_uri,'a',[]);
|
|
|
+ locFac.addProperty(s_uri,'a','p_ab',sdo_namespace,SDOTypeDefaultTypeNames[DoubleType],[pfIsMany]);
|
|
|
+ locFac.addProperty(s_uri,'a',s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly]);
|
|
|
+
|
|
|
+ locA := locFac.createNew(s_uri,'a');
|
|
|
+ locA.getList('p_ab').append(DOUBLE_CONT_ARRAY[0]);
|
|
|
+ locCS := locA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locA.getList('p_ab').delete(0);
|
|
|
+ locCS.getOldValues(locA);
|
|
|
+
|
|
|
+ locA := locFac.createNew(s_uri,'a');
|
|
|
+ locA.getList('p_ab').append(DOUBLE_CONT_ARRAY[1]);
|
|
|
+ locA.getList('p_ab').append(DOUBLE_CONT_ARRAY[2]);
|
|
|
+ locCS := locA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locA.getList('p_ab').delete(1);
|
|
|
+ locCS.getOldValues(locA);
|
|
|
+
|
|
|
+ locA := locFac.createNew(s_uri,'a');
|
|
|
+ locA.getList('p_ab').append(DOUBLE_CONT_ARRAY[3]);
|
|
|
+ locA.getList('p_ab').append(DOUBLE_CONT_ARRAY[4]);
|
|
|
+ locA.getList('p_ab').append(DOUBLE_CONT_ARRAY[5]);
|
|
|
+ locA.getList('p_ab').append(DOUBLE_CONT_ARRAY[6]);
|
|
|
+ locCS := locA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locA.getList('p_ab').delete(3);
|
|
|
+ locCS.getOldValues(locA);
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummaryMultiValueProps_Test.undoChanges_nested_double();
|
|
|
+const
|
|
|
+ PROP_TYPE = DoubleType;
|
|
|
+var
|
|
|
+ f : ISDODataFactory;
|
|
|
+ x, y : ISDODataObject;
|
|
|
+ cs : ISDOChangeSummary;
|
|
|
+ vls : ISDODataObjectList;
|
|
|
+ vvals_a : array of TSDODouble;
|
|
|
+ vvals_a_length, i : PtrInt;
|
|
|
+ vvals_b : array of TSDODouble;
|
|
|
+ vvals_b_length : PtrInt;
|
|
|
+begin
|
|
|
+ Randomize();
|
|
|
+ f := TSDODataFactory.Create();
|
|
|
+ f.AddType(s_uri, 'a', []);
|
|
|
+ f.AddType(s_uri, 'b', []);
|
|
|
+ f.addProperty(s_uri, 'a', 'p_i', sdo_namespace, SDOTypeDefaultTypeNames[PROP_TYPE], []);
|
|
|
+ f.addProperty(s_uri, 'a', 'p_li', sdo_namespace, SDOTypeDefaultTypeNames[PROP_TYPE], [pfIsMany]);
|
|
|
+ f.addProperty(s_uri, 'a', 'p_ab', s_uri, 'b', [pfIsContainment]);
|
|
|
+ f.addProperty(s_uri, 'a', s_changesummary_prop, sdo_namespace, SDOTypeDefaultTypeNames[ChangeSummaryType], [pfIsReadOnly]);
|
|
|
+ f.addProperty(s_uri, 'b', 'p_b_li', sdo_namespace, SDOTypeDefaultTypeNames[PROP_TYPE], [pfIsMany]);
|
|
|
+ x := f.createNew(s_uri,'a');
|
|
|
+ x.setDouble('p_i', RandomDouble(Low(Word),High(Word)));
|
|
|
+ y := x.createDataObject('p_ab');
|
|
|
+ cs := x.getChangeSummary();
|
|
|
+
|
|
|
+ vvals_a_length := RandomRange(1,100);
|
|
|
+ vvals_b_length := RandomRange(1,100);
|
|
|
+ SetLength(vvals_a,vvals_a_length);
|
|
|
+ try
|
|
|
+ for i := 0 to Pred(vvals_a_length) do
|
|
|
+ vvals_a[i] := RandomDouble(Low(Word),High(Word));
|
|
|
+ SetLength(vvals_b,vvals_b_length);
|
|
|
+ for i := 0 to Pred(vvals_b_length) do
|
|
|
+ vvals_b[i] := RandomDouble(Low(Word),High(Word));
|
|
|
+
|
|
|
+ vls := x.getList('p_li');
|
|
|
+ for i := 0 to Pred(vvals_a_length) do
|
|
|
+ vls.append(vvals_a[i]);
|
|
|
+ vls := y.getList('p_b_li');
|
|
|
+ for i := 0 to Pred(vvals_b_length) do
|
|
|
+ vls.append(vvals_b[i]);
|
|
|
+
|
|
|
+ cs.beginLogging();
|
|
|
+ vls := x.getList('p_li');
|
|
|
+ vls.append(RandomDouble(Low(Word),High(Word)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(RandomDouble(Low(Word),High(Word)));
|
|
|
+ vls.insert(RandomRange(0, ( vls.size() - 1 ) ), RandomDouble(Low(Word),High(Word)));
|
|
|
+ vls.setDouble(RandomRange(0, ( vls.size() - 1 ) ), RandomDouble(Low(Word),High(Word)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(RandomDouble(Low(Word),High(Word)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls := y.getList('p_b_li');
|
|
|
+ vls.insert(RandomRange(0, ( vls.size() - 1 ) ), RandomDouble(Low(Word),High(Word)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(RandomDouble(Low(Word),High(Word)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(RandomDouble(Low(Word),High(Word)));
|
|
|
+ vls.setDouble(RandomRange(0, ( vls.size() - 1 ) ), RandomDouble(Low(Word),High(Word)));
|
|
|
+ vls.append(RandomDouble(Low(Word),High(Word)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+
|
|
|
+ cs.undoChanges();
|
|
|
+ CheckEquals(0, cs.getChangedDataObjects().size, 'cs.getChangedDataObjects().size');
|
|
|
+ vls := x.getList('p_li');
|
|
|
+ CheckEquals(vvals_a_length, vls.size(), 'x, vls.size()');
|
|
|
+ for i := 0 to Pred(vvals_a_length) do begin
|
|
|
+ CheckEquals(vvals_a[i], vls.getDouble(i), Format('x, Index = %d',[i]));
|
|
|
+ end;
|
|
|
+ vls := y.getList('p_b_li');
|
|
|
+ CheckEquals(vvals_b_length, vls.size(), 'y, vls.size()');
|
|
|
+ for i := 0 to Pred(vvals_b_length) do begin
|
|
|
+ CheckEquals(vvals_b[i], vls.getDouble(i), Format('y, Index = %d',[i]));
|
|
|
+ end;
|
|
|
+
|
|
|
+ finally
|
|
|
+ SetLength(vvals_b,0);
|
|
|
+ SetLength(vvals_a,0);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+{$ENDIF HAS_SDO_DOUBLE}
|
|
|
+
|
|
|
+{$IFDEF HAS_SDO_FLOAT}
|
|
|
+procedure TSDOChangeSummaryMultiValueProps_Test.getOldValues_float;
|
|
|
+const
|
|
|
+ LOCAL_PROP = s_float_propList;
|
|
|
+
|
|
|
+ procedure check_empty_list(const AList : ISDOSettingList);
|
|
|
+ begin
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(AList));
|
|
|
+ CheckEquals(0, AList.size());
|
|
|
+ end;
|
|
|
+
|
|
|
+var
|
|
|
+ x : ISDODataObject;
|
|
|
+ cs : ISDOChangeSummary;
|
|
|
+ ls : ISDOSettingList;
|
|
|
+ vls : ISDODataObjectList;
|
|
|
+ vvals : array of TSDOFloat;
|
|
|
+ vvals_length, i : PtrInt;
|
|
|
+ s : TValueSetting;
|
|
|
+begin
|
|
|
+ Randomize();
|
|
|
+ x := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ cs := x.getChangeSummary();
|
|
|
+ check_empty_list(cs.getOldValues(x));
|
|
|
+
|
|
|
+ vvals_length := RandomRange(1,100);
|
|
|
+ SetLength(vvals,vvals_length);
|
|
|
+ try
|
|
|
+ for i := 0 to Pred(vvals_length) do
|
|
|
+ vvals[i] := RandomFloat(Low(Word),High(Word));
|
|
|
+ vls := x.getList(LOCAL_PROP);
|
|
|
+ for i := 0 to Pred(vvals_length) do
|
|
|
+ vls.append(vvals[i]);
|
|
|
+ check_empty_list(cs.getOldValues(x));
|
|
|
+
|
|
|
+ cs.beginLogging();
|
|
|
+ vls.append(RandomFloat(Low(Word),High(Word)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(RandomFloat(Low(Word),High(Word)));
|
|
|
+ vls.insert(RandomRange(0, ( vls.size() - 1 ) ), RandomFloat(Low(Word),High(Word)));
|
|
|
+ vls.setFloat(RandomRange(0, ( vls.size() - 1 ) ), RandomFloat(Low(Word),High(Word)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(RandomFloat(Low(Word),High(Word)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ ls := cs.getOldValues(x);
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(ls));
|
|
|
+ CheckEquals(vvals_length, ls.size(), 'ls.size()');
|
|
|
+ for i := 0 to Pred(vvals_length) do begin
|
|
|
+ s := ls.getItem(i);
|
|
|
+ CheckEquals(PtrUInt(x.getProperty(LOCAL_PROP)), PtrUInt(s.getProperty()), Format('i = %d; getProperty',[i]));
|
|
|
+ CheckEquals(i, s.getIndex(), Format('i = %d; getIndex',[i]));
|
|
|
+ CheckEquals(True, s.isSet(), Format('i = %d; isSet',[i]));
|
|
|
+ CheckEquals(False, s.isNull(), Format('i = %d; isNull',[i]));
|
|
|
+ CheckEquals(vvals[i], s.getFloatValue(), Format('i = %d; getFloatValue',[i]));
|
|
|
+ end;
|
|
|
+ finally
|
|
|
+ SetLength(vvals,0);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummaryMultiValueProps_Test.undoChanges_float();
|
|
|
+const
|
|
|
+ LOCAL_PROP = s_float_propList;
|
|
|
+var
|
|
|
+ x : ISDODataObject;
|
|
|
+ cs : ISDOChangeSummary;
|
|
|
+ vls : ISDODataObjectList;
|
|
|
+ vvals : array of TSDOFloat;
|
|
|
+ vvals_length, i : PtrInt;
|
|
|
+begin
|
|
|
+ Randomize();
|
|
|
+ x := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ cs := x.getChangeSummary();
|
|
|
+
|
|
|
+ vvals_length := RandomRange(1,100);
|
|
|
+ SetLength(vvals,vvals_length);
|
|
|
+ try
|
|
|
+ for i := 0 to Pred(vvals_length) do
|
|
|
+ vvals[i] := RandomFloat(Low(Word),High(Word));
|
|
|
+ vls := x.getList(LOCAL_PROP);
|
|
|
+ for i := 0 to Pred(vvals_length) do
|
|
|
+ vls.append(vvals[i]);
|
|
|
+
|
|
|
+ cs.beginLogging();
|
|
|
+ vls.append(RandomFloat(Low(Word),High(Word)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(RandomFloat(Low(Word),High(Word)));
|
|
|
+ vls.insert(RandomRange(0, ( vls.size() - 1 ) ), RandomFloat(Low(Word),High(Word)));
|
|
|
+ vls.setFloat(RandomRange(0, ( vls.size() - 1 ) ), RandomFloat(Low(Word),High(Word)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(RandomFloat(Low(Word),High(Word)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ cs.undoChanges();
|
|
|
+ CheckEquals(0, cs.getChangedDataObjects().size, 'cs.getChangedDataObjects().size');
|
|
|
+ CheckEquals(vvals_length, vls.size(), 'vls.size()');
|
|
|
+ for i := 0 to Pred(vvals_length) do begin
|
|
|
+ CheckEquals(vvals[i], vls.getFloat(i), Format('Index = %d',[i]));
|
|
|
+ end;
|
|
|
+ finally
|
|
|
+ SetLength(vvals,0);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummaryMultiValueProps_Test.undoChanges_float_deleted();
|
|
|
+const
|
|
|
+ FLOAT_CONT_ARRAY : array[0..6] of TSDOFloat = (
|
|
|
+ 123963244, 23852215, -52245, 1252222, -11122123, -24245, 522552
|
|
|
+ );
|
|
|
+var
|
|
|
+ locFac : ISDODataFactory;
|
|
|
+ locA : ISDODataObject;
|
|
|
+ locCS : ISDOChangeSummary;
|
|
|
+begin
|
|
|
+ locFac := TSDODataFactory.Create() as ISDODataFactory;
|
|
|
+ locFac.AddType(s_uri,'a',[]);
|
|
|
+ locFac.addProperty(s_uri,'a','p_ab',sdo_namespace,SDOTypeDefaultTypeNames[FloatType],[pfIsMany]);
|
|
|
+ locFac.addProperty(s_uri,'a',s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly]);
|
|
|
+
|
|
|
+ locA := locFac.createNew(s_uri,'a');
|
|
|
+ locA.getList('p_ab').append(FLOAT_CONT_ARRAY[0]);
|
|
|
+ locCS := locA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locA.getList('p_ab').delete(0);
|
|
|
+ locCS.getOldValues(locA);
|
|
|
+
|
|
|
+ locA := locFac.createNew(s_uri,'a');
|
|
|
+ locA.getList('p_ab').append(FLOAT_CONT_ARRAY[1]);
|
|
|
+ locA.getList('p_ab').append(FLOAT_CONT_ARRAY[2]);
|
|
|
+ locCS := locA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locA.getList('p_ab').delete(1);
|
|
|
+ locCS.getOldValues(locA);
|
|
|
+
|
|
|
+ locA := locFac.createNew(s_uri,'a');
|
|
|
+ locA.getList('p_ab').append(FLOAT_CONT_ARRAY[3]);
|
|
|
+ locA.getList('p_ab').append(FLOAT_CONT_ARRAY[4]);
|
|
|
+ locA.getList('p_ab').append(FLOAT_CONT_ARRAY[5]);
|
|
|
+ locA.getList('p_ab').append(FLOAT_CONT_ARRAY[6]);
|
|
|
+ locCS := locA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locA.getList('p_ab').delete(3);
|
|
|
+ locCS.getOldValues(locA);
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummaryMultiValueProps_Test.undoChanges_nested_float();
|
|
|
+const
|
|
|
+ PROP_TYPE = FloatType;
|
|
|
+var
|
|
|
+ f : ISDODataFactory;
|
|
|
+ x, y : ISDODataObject;
|
|
|
+ cs : ISDOChangeSummary;
|
|
|
+ vls : ISDODataObjectList;
|
|
|
+ vvals_a : array of TSDOFloat;
|
|
|
+ vvals_a_length, i : PtrInt;
|
|
|
+ vvals_b : array of TSDOFloat;
|
|
|
+ vvals_b_length : PtrInt;
|
|
|
+begin
|
|
|
+ Randomize();
|
|
|
+ f := TSDODataFactory.Create();
|
|
|
+ f.AddType(s_uri, 'a', []);
|
|
|
+ f.AddType(s_uri, 'b', []);
|
|
|
+ f.addProperty(s_uri, 'a', 'p_i', sdo_namespace, SDOTypeDefaultTypeNames[PROP_TYPE], []);
|
|
|
+ f.addProperty(s_uri, 'a', 'p_li', sdo_namespace, SDOTypeDefaultTypeNames[PROP_TYPE], [pfIsMany]);
|
|
|
+ f.addProperty(s_uri, 'a', 'p_ab', s_uri, 'b', [pfIsContainment]);
|
|
|
+ f.addProperty(s_uri, 'a', s_changesummary_prop, sdo_namespace, SDOTypeDefaultTypeNames[ChangeSummaryType], [pfIsReadOnly]);
|
|
|
+ f.addProperty(s_uri, 'b', 'p_b_li', sdo_namespace, SDOTypeDefaultTypeNames[PROP_TYPE], [pfIsMany]);
|
|
|
+ x := f.createNew(s_uri,'a');
|
|
|
+ x.setFloat('p_i', RandomFloat(Low(Word),High(Word)));
|
|
|
+ y := x.createDataObject('p_ab');
|
|
|
+ cs := x.getChangeSummary();
|
|
|
+
|
|
|
+ vvals_a_length := RandomRange(1,100);
|
|
|
+ vvals_b_length := RandomRange(1,100);
|
|
|
+ SetLength(vvals_a,vvals_a_length);
|
|
|
+ try
|
|
|
+ for i := 0 to Pred(vvals_a_length) do
|
|
|
+ vvals_a[i] := RandomFloat(Low(Word),High(Word));
|
|
|
+ SetLength(vvals_b,vvals_b_length);
|
|
|
+ for i := 0 to Pred(vvals_b_length) do
|
|
|
+ vvals_b[i] := RandomFloat(Low(Word),High(Word));
|
|
|
+
|
|
|
+ vls := x.getList('p_li');
|
|
|
+ for i := 0 to Pred(vvals_a_length) do
|
|
|
+ vls.append(vvals_a[i]);
|
|
|
+ vls := y.getList('p_b_li');
|
|
|
+ for i := 0 to Pred(vvals_b_length) do
|
|
|
+ vls.append(vvals_b[i]);
|
|
|
+
|
|
|
+ cs.beginLogging();
|
|
|
+ vls := x.getList('p_li');
|
|
|
+ vls.append(RandomFloat(Low(Word),High(Word)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(RandomFloat(Low(Word),High(Word)));
|
|
|
+ vls.insert(RandomRange(0, ( vls.size() - 1 ) ), RandomFloat(Low(Word),High(Word)));
|
|
|
+ vls.setFloat(RandomRange(0, ( vls.size() - 1 ) ), RandomFloat(Low(Word),High(Word)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(RandomFloat(Low(Word),High(Word)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls := y.getList('p_b_li');
|
|
|
+ vls.insert(RandomRange(0, ( vls.size() - 1 ) ), RandomFloat(Low(Word),High(Word)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(RandomFloat(Low(Word),High(Word)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(RandomFloat(Low(Word),High(Word)));
|
|
|
+ vls.setFloat(RandomRange(0, ( vls.size() - 1 ) ), RandomFloat(Low(Word),High(Word)));
|
|
|
+ vls.append(RandomFloat(Low(Word),High(Word)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+
|
|
|
+ cs.undoChanges();
|
|
|
+ CheckEquals(0, cs.getChangedDataObjects().size, 'cs.getChangedDataObjects().size');
|
|
|
+ vls := x.getList('p_li');
|
|
|
+ CheckEquals(vvals_a_length, vls.size(), 'x, vls.size()');
|
|
|
+ for i := 0 to Pred(vvals_a_length) do begin
|
|
|
+ CheckEquals(vvals_a[i], vls.getFloat(i), Format('x, Index = %d',[i]));
|
|
|
+ end;
|
|
|
+ vls := y.getList('p_b_li');
|
|
|
+ CheckEquals(vvals_b_length, vls.size(), 'y, vls.size()');
|
|
|
+ for i := 0 to Pred(vvals_b_length) do begin
|
|
|
+ CheckEquals(vvals_b[i], vls.getFloat(i), Format('y, Index = %d',[i]));
|
|
|
+ end;
|
|
|
+
|
|
|
+ finally
|
|
|
+ SetLength(vvals_b,0);
|
|
|
+ SetLength(vvals_a,0);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+{$ENDIF HAS_SDO_FLOAT}
|
|
|
+
|
|
|
+{$IFDEF HAS_SDO_LONG}
|
|
|
+procedure TSDOChangeSummaryMultiValueProps_Test.getOldValues_long;
|
|
|
+const
|
|
|
+ LOCAL_PROP = s_long_propList;
|
|
|
+
|
|
|
+ procedure check_empty_list(const AList : ISDOSettingList);
|
|
|
+ begin
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(AList));
|
|
|
+ CheckEquals(0, AList.size());
|
|
|
+ end;
|
|
|
+
|
|
|
+var
|
|
|
+ x : ISDODataObject;
|
|
|
+ cs : ISDOChangeSummary;
|
|
|
+ ls : ISDOSettingList;
|
|
|
+ vls : ISDODataObjectList;
|
|
|
+ vvals : array of TSDOLong;
|
|
|
+ vvals_length, i : PtrInt;
|
|
|
+ s : TValueSetting;
|
|
|
+begin
|
|
|
+ Randomize();
|
|
|
+ x := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ cs := x.getChangeSummary();
|
|
|
+ check_empty_list(cs.getOldValues(x));
|
|
|
+
|
|
|
+ vvals_length := RandomRange(1,100);
|
|
|
+ SetLength(vvals,vvals_length);
|
|
|
+ try
|
|
|
+ for i := 0 to Pred(vvals_length) do
|
|
|
+ vvals[i] := test_suite_utils.RandomRange(Low(TSDOLong),High(TSDOLong));
|
|
|
+ vls := x.getList(LOCAL_PROP);
|
|
|
+ for i := 0 to Pred(vvals_length) do
|
|
|
+ vls.append(vvals[i]);
|
|
|
+ check_empty_list(cs.getOldValues(x));
|
|
|
+
|
|
|
+ cs.beginLogging();
|
|
|
+ vls.append(test_suite_utils.RandomRange(Low(TSDOLong),High(TSDOLong)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(test_suite_utils.RandomRange(Low(TSDOLong),High(TSDOLong)));
|
|
|
+ vls.insert(RandomRange(0, ( vls.size() - 1 ) ), test_suite_utils.RandomRange(Low(TSDOLong),High(TSDOLong)));
|
|
|
+ vls.setLong(RandomRange(0, ( vls.size() - 1 ) ), test_suite_utils.RandomRange(Low(TSDOLong),High(TSDOLong)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(test_suite_utils.RandomRange(Low(TSDOLong),High(TSDOLong)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ ls := cs.getOldValues(x);
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(ls));
|
|
|
+ CheckEquals(vvals_length, ls.size(), 'ls.size()');
|
|
|
+ for i := 0 to Pred(vvals_length) do begin
|
|
|
+ s := ls.getItem(i);
|
|
|
+ CheckEquals(PtrUInt(x.getProperty(LOCAL_PROP)), PtrUInt(s.getProperty()), Format('i = %d; getProperty',[i]));
|
|
|
+ CheckEquals(i, s.getIndex(), Format('i = %d; getIndex',[i]));
|
|
|
+ CheckEquals(True, s.isSet(), Format('i = %d; isSet',[i]));
|
|
|
+ CheckEquals(False, s.isNull(), Format('i = %d; isNull',[i]));
|
|
|
+ CheckEquals(vvals[i], s.getLongValue(), Format('i = %d; getLongValue',[i]));
|
|
|
+ end;
|
|
|
+ finally
|
|
|
+ SetLength(vvals,0);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummaryMultiValueProps_Test.undoChanges_long();
|
|
|
+const
|
|
|
+ LOCAL_PROP = s_long_propList;
|
|
|
+var
|
|
|
+ x : ISDODataObject;
|
|
|
+ cs : ISDOChangeSummary;
|
|
|
+ vls : ISDODataObjectList;
|
|
|
+ vvals : array of TSDOLong;
|
|
|
+ vvals_length, i : PtrInt;
|
|
|
+begin
|
|
|
+ Randomize();
|
|
|
+ x := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ cs := x.getChangeSummary();
|
|
|
+
|
|
|
+ vvals_length := RandomRange(1,100);
|
|
|
+ SetLength(vvals,vvals_length);
|
|
|
+ try
|
|
|
+ for i := 0 to Pred(vvals_length) do
|
|
|
+ vvals[i] := test_suite_utils.RandomRange(Low(TSDOLong),High(TSDOLong));
|
|
|
+ vls := x.getList(LOCAL_PROP);
|
|
|
+ for i := 0 to Pred(vvals_length) do
|
|
|
+ vls.append(vvals[i]);
|
|
|
+
|
|
|
+ cs.beginLogging();
|
|
|
+ vls.append(test_suite_utils.RandomRange(Low(TSDOLong),High(TSDOLong)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(test_suite_utils.RandomRange(Low(TSDOLong),High(TSDOLong)));
|
|
|
+ vls.insert(RandomRange(0, ( vls.size() - 1 ) ), test_suite_utils.RandomRange(Low(TSDOLong),High(TSDOLong)));
|
|
|
+ vls.setLong(RandomRange(0, ( vls.size() - 1 ) ), test_suite_utils.RandomRange(Low(TSDOLong),High(TSDOLong)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(test_suite_utils.RandomRange(Low(TSDOLong),High(TSDOLong)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ cs.undoChanges();
|
|
|
+ CheckEquals(0, cs.getChangedDataObjects().size, 'cs.getChangedDataObjects().size');
|
|
|
+ CheckEquals(vvals_length, vls.size(), 'vls.size()');
|
|
|
+ for i := 0 to Pred(vvals_length) do begin
|
|
|
+ CheckEquals(vvals[i], vls.getLong(i), Format('Index = %d',[i]));
|
|
|
+ end;
|
|
|
+ finally
|
|
|
+ SetLength(vvals,0);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummaryMultiValueProps_Test.undoChanges_long_deleted();
|
|
|
+var
|
|
|
+ locFac : ISDODataFactory;
|
|
|
+ locA : ISDODataObject;
|
|
|
+ locCS : ISDOChangeSummary;
|
|
|
+begin
|
|
|
+ locFac := TSDODataFactory.Create() as ISDODataFactory;
|
|
|
+ locFac.AddType(s_uri,'a',[]);
|
|
|
+ locFac.addProperty(s_uri,'a','p_ab',sdo_namespace,SDOTypeDefaultTypeNames[LongType],[pfIsMany]);
|
|
|
+ locFac.addProperty(s_uri,'a',s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly]);
|
|
|
+
|
|
|
+ locA := locFac.createNew(s_uri,'a');
|
|
|
+ locA.getList('p_ab').append(TSDOLong(123963244));
|
|
|
+ locCS := locA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locA.getList('p_ab').delete(0);
|
|
|
+ locCS.getOldValues(locA);
|
|
|
+
|
|
|
+ locA := locFac.createNew(s_uri,'a');
|
|
|
+ locA.getList('p_ab').append(TSDOLong(23852215));
|
|
|
+ locA.getList('p_ab').append(TSDOLong(-52245));
|
|
|
+ locCS := locA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locA.getList('p_ab').delete(1);
|
|
|
+ locCS.getOldValues(locA);
|
|
|
+
|
|
|
+ locA := locFac.createNew(s_uri,'a');
|
|
|
+ locA.getList('p_ab').append(TSDOLong(1252222));
|
|
|
+ locA.getList('p_ab').append(TSDOLong(-11122123));
|
|
|
+ locA.getList('p_ab').append(TSDOLong(-24245));
|
|
|
+ locA.getList('p_ab').append(TSDOLong(522552));
|
|
|
+ locCS := locA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locA.getList('p_ab').delete(3);
|
|
|
+ locCS.getOldValues(locA);
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummaryMultiValueProps_Test.undoChanges_nested_long();
|
|
|
+const
|
|
|
+ PROP_TYPE = LongType;
|
|
|
+var
|
|
|
+ f : ISDODataFactory;
|
|
|
+ x, y : ISDODataObject;
|
|
|
+ cs : ISDOChangeSummary;
|
|
|
+ vls : ISDODataObjectList;
|
|
|
+ vvals_a : array of TSDOLong;
|
|
|
+ vvals_a_length, i : PtrInt;
|
|
|
+ vvals_b : array of TSDOLong;
|
|
|
+ vvals_b_length : PtrInt;
|
|
|
+begin
|
|
|
+ Randomize();
|
|
|
+ f := TSDODataFactory.Create();
|
|
|
+ f.AddType(s_uri, 'a', []);
|
|
|
+ f.AddType(s_uri, 'b', []);
|
|
|
+ f.addProperty(s_uri, 'a', 'p_i', sdo_namespace, SDOTypeDefaultTypeNames[PROP_TYPE], []);
|
|
|
+ f.addProperty(s_uri, 'a', 'p_li', sdo_namespace, SDOTypeDefaultTypeNames[PROP_TYPE], [pfIsMany]);
|
|
|
+ f.addProperty(s_uri, 'a', 'p_ab', s_uri, 'b', [pfIsContainment]);
|
|
|
+ f.addProperty(s_uri, 'a', s_changesummary_prop, sdo_namespace, SDOTypeDefaultTypeNames[ChangeSummaryType], [pfIsReadOnly]);
|
|
|
+ f.addProperty(s_uri, 'b', 'p_b_li', sdo_namespace, SDOTypeDefaultTypeNames[PROP_TYPE], [pfIsMany]);
|
|
|
+ x := f.createNew(s_uri,'a');
|
|
|
+ x.setLong('p_i', test_suite_utils.RandomRange(Low(TSDOLong),High(TSDOLong)));
|
|
|
+ y := x.createDataObject('p_ab');
|
|
|
+ cs := x.getChangeSummary();
|
|
|
+
|
|
|
+ vvals_a_length := RandomRange(1,100);
|
|
|
+ vvals_b_length := RandomRange(1,100);
|
|
|
+ SetLength(vvals_a,vvals_a_length);
|
|
|
+ try
|
|
|
+ for i := 0 to Pred(vvals_a_length) do
|
|
|
+ vvals_a[i] := test_suite_utils.RandomRange(Low(TSDOLong),High(TSDOLong));
|
|
|
+ SetLength(vvals_b,vvals_b_length);
|
|
|
+ for i := 0 to Pred(vvals_b_length) do
|
|
|
+ vvals_b[i] := test_suite_utils.RandomRange(Low(TSDOLong),High(TSDOLong));
|
|
|
+
|
|
|
+ vls := x.getList('p_li');
|
|
|
+ for i := 0 to Pred(vvals_a_length) do
|
|
|
+ vls.append(vvals_a[i]);
|
|
|
+ vls := y.getList('p_b_li');
|
|
|
+ for i := 0 to Pred(vvals_b_length) do
|
|
|
+ vls.append(vvals_b[i]);
|
|
|
+
|
|
|
+ cs.beginLogging();
|
|
|
+ vls := x.getList('p_li');
|
|
|
+ vls.append(test_suite_utils.RandomRange(Low(TSDOLong),High(TSDOLong)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(test_suite_utils.RandomRange(Low(TSDOLong),High(TSDOLong)));
|
|
|
+ vls.insert(RandomRange(0, ( vls.size() - 1 ) ), test_suite_utils.RandomRange(Low(TSDOLong),High(TSDOLong)));
|
|
|
+ vls.setLong(RandomRange(0, ( vls.size() - 1 ) ), test_suite_utils.RandomRange(Low(TSDOLong),High(TSDOLong)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(test_suite_utils.RandomRange(Low(TSDOLong),High(TSDOLong)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls := y.getList('p_b_li');
|
|
|
+ vls.insert(RandomRange(0, ( vls.size() - 1 ) ), test_suite_utils.RandomRange(Low(TSDOLong),High(TSDOLong)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(test_suite_utils.RandomRange(Low(TSDOLong),High(TSDOLong)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(test_suite_utils.RandomRange(Low(TSDOLong),High(TSDOLong)));
|
|
|
+ vls.setLong(RandomRange(0, ( vls.size() - 1 ) ), test_suite_utils.RandomRange(Low(TSDOLong),High(TSDOLong)));
|
|
|
+ vls.append(test_suite_utils.RandomRange(Low(TSDOLong),High(TSDOLong)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+
|
|
|
+ cs.undoChanges();
|
|
|
+ CheckEquals(0, cs.getChangedDataObjects().size, 'cs.getChangedDataObjects().size');
|
|
|
+ vls := x.getList('p_li');
|
|
|
+ CheckEquals(vvals_a_length, vls.size(), 'x, vls.size()');
|
|
|
+ for i := 0 to Pred(vvals_a_length) do begin
|
|
|
+ CheckEquals(vvals_a[i], vls.getLong(i), Format('x, Index = %d',[i]));
|
|
|
+ end;
|
|
|
+ vls := y.getList('p_b_li');
|
|
|
+ CheckEquals(vvals_b_length, vls.size(), 'y, vls.size()');
|
|
|
+ for i := 0 to Pred(vvals_b_length) do begin
|
|
|
+ CheckEquals(vvals_b[i], vls.getLong(i), Format('y, Index = %d',[i]));
|
|
|
+ end;
|
|
|
+
|
|
|
+ finally
|
|
|
+ SetLength(vvals_b,0);
|
|
|
+ SetLength(vvals_a,0);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+{$ENDIF HAS_SDO_LONG}
|
|
|
+
|
|
|
+{$IFDEF HAS_SDO_SHORT}
|
|
|
+procedure TSDOChangeSummaryMultiValueProps_Test.getOldValues_short;
|
|
|
+const
|
|
|
+ LOCAL_PROP = s_short_propList;
|
|
|
+
|
|
|
+ procedure check_empty_list(const AList : ISDOSettingList);
|
|
|
+ begin
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(AList));
|
|
|
+ CheckEquals(0, AList.size());
|
|
|
+ end;
|
|
|
+
|
|
|
+var
|
|
|
+ x : ISDODataObject;
|
|
|
+ cs : ISDOChangeSummary;
|
|
|
+ ls : ISDOSettingList;
|
|
|
+ vls : ISDODataObjectList;
|
|
|
+ vvals : array of TSDOShort;
|
|
|
+ vvals_length, i : PtrInt;
|
|
|
+ s : TValueSetting;
|
|
|
+begin
|
|
|
+ Randomize();
|
|
|
+ x := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ cs := x.getChangeSummary();
|
|
|
+ check_empty_list(cs.getOldValues(x));
|
|
|
+
|
|
|
+ vvals_length := RandomRange(1,100);
|
|
|
+ SetLength(vvals,vvals_length);
|
|
|
+ try
|
|
|
+ for i := 0 to Pred(vvals_length) do
|
|
|
+ vvals[i] := RandomRange(Low(TSDOShort),High(TSDOShort));
|
|
|
+ vls := x.getList(LOCAL_PROP);
|
|
|
+ for i := 0 to Pred(vvals_length) do
|
|
|
+ vls.append(vvals[i]);
|
|
|
+ check_empty_list(cs.getOldValues(x));
|
|
|
+
|
|
|
+ cs.beginLogging();
|
|
|
+ vls.append(RandomRange(Low(TSDOShort),High(TSDOShort)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(RandomRange(Low(TSDOShort),High(TSDOShort)));
|
|
|
+ vls.insert(RandomRange(0, ( vls.size() - 1 ) ), RandomRange(Low(TSDOShort),High(TSDOShort)));
|
|
|
+ vls.setShort(RandomRange(0, ( vls.size() - 1 ) ), RandomRange(Low(TSDOShort),High(TSDOShort)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(RandomRange(Low(TSDOShort),High(TSDOShort)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ ls := cs.getOldValues(x);
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(ls));
|
|
|
+ CheckEquals(vvals_length, ls.size(), 'ls.size()');
|
|
|
+ for i := 0 to Pred(vvals_length) do begin
|
|
|
+ s := ls.getItem(i);
|
|
|
+ CheckEquals(PtrUInt(x.getProperty(LOCAL_PROP)), PtrUInt(s.getProperty()), Format('i = %d; getProperty',[i]));
|
|
|
+ CheckEquals(i, s.getIndex(), Format('i = %d; getIndex',[i]));
|
|
|
+ CheckEquals(True, s.isSet(), Format('i = %d; isSet',[i]));
|
|
|
+ CheckEquals(False, s.isNull(), Format('i = %d; isNull',[i]));
|
|
|
+ CheckEquals(vvals[i], s.getShortValue(), Format('i = %d; getShortValue',[i]));
|
|
|
+ end;
|
|
|
+ finally
|
|
|
+ SetLength(vvals,0);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummaryMultiValueProps_Test.undoChanges_short();
|
|
|
+const
|
|
|
+ LOCAL_PROP = s_short_propList;
|
|
|
+var
|
|
|
+ x : ISDODataObject;
|
|
|
+ cs : ISDOChangeSummary;
|
|
|
+ vls : ISDODataObjectList;
|
|
|
+ vvals : array of TSDOShort;
|
|
|
+ vvals_length, i : PtrInt;
|
|
|
+begin
|
|
|
+ Randomize();
|
|
|
+ x := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ cs := x.getChangeSummary();
|
|
|
+
|
|
|
+ vvals_length := RandomRange(1,100);
|
|
|
+ SetLength(vvals,vvals_length);
|
|
|
+ try
|
|
|
+ for i := 0 to Pred(vvals_length) do
|
|
|
+ vvals[i] := RandomRange(Low(TSDOShort),High(TSDOShort));
|
|
|
+ vls := x.getList(LOCAL_PROP);
|
|
|
+ for i := 0 to Pred(vvals_length) do
|
|
|
+ vls.append(vvals[i]);
|
|
|
+
|
|
|
+ cs.beginLogging();
|
|
|
+ vls.append(RandomRange(Low(TSDOShort),High(TSDOShort)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(RandomRange(Low(TSDOShort),High(TSDOShort)));
|
|
|
+ vls.insert(RandomRange(0, ( vls.size() - 1 ) ), RandomRange(Low(TSDOShort),High(TSDOShort)));
|
|
|
+ vls.setShort(RandomRange(0, ( vls.size() - 1 ) ), RandomRange(Low(TSDOShort),High(TSDOShort)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(RandomRange(Low(TSDOShort),High(TSDOShort)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ cs.undoChanges();
|
|
|
+ CheckEquals(0, cs.getChangedDataObjects().size, 'cs.getChangedDataObjects().size');
|
|
|
+ CheckEquals(vvals_length, vls.size(), 'vls.size()');
|
|
|
+ for i := 0 to Pred(vvals_length) do begin
|
|
|
+ CheckEquals(vvals[i], vls.getShort(i), Format('Index = %d',[i]));
|
|
|
+ end;
|
|
|
+ finally
|
|
|
+ SetLength(vvals,0);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummaryMultiValueProps_Test.undoChanges_short_deleted();
|
|
|
+var
|
|
|
+ locFac : ISDODataFactory;
|
|
|
+ locA : ISDODataObject;
|
|
|
+ locCS : ISDOChangeSummary;
|
|
|
+begin
|
|
|
+ locFac := TSDODataFactory.Create() as ISDODataFactory;
|
|
|
+ locFac.AddType(s_uri,'a',[]);
|
|
|
+ locFac.addProperty(s_uri,'a','p_ab',sdo_namespace,SDOTypeDefaultTypeNames[ShortType],[pfIsMany]);
|
|
|
+ locFac.addProperty(s_uri,'a',s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly]);
|
|
|
+
|
|
|
+ locA := locFac.createNew(s_uri,'a');
|
|
|
+ locA.getList('p_ab').append(TSDOShort(1239));
|
|
|
+ locCS := locA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locA.getList('p_ab').delete(0);
|
|
|
+ locCS.getOldValues(locA);
|
|
|
+
|
|
|
+ locA := locFac.createNew(s_uri,'a');
|
|
|
+ locA.getList('p_ab').append(TSDOShort(2385));
|
|
|
+ locA.getList('p_ab').append(TSDOShort(-5225));
|
|
|
+ locCS := locA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locA.getList('p_ab').delete(1);
|
|
|
+ locCS.getOldValues(locA);
|
|
|
+
|
|
|
+ locA := locFac.createNew(s_uri,'a');
|
|
|
+ locA.getList('p_ab').append(TSDOShort(125));
|
|
|
+ locA.getList('p_ab').append(TSDOShort(-1113));
|
|
|
+ locA.getList('p_ab').append(TSDOShort(-245));
|
|
|
+ locA.getList('p_ab').append(TSDOShort(5222));
|
|
|
+ locCS := locA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locA.getList('p_ab').delete(3);
|
|
|
+ locCS.getOldValues(locA);
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummaryMultiValueProps_Test.undoChanges_nested_short();
|
|
|
+const
|
|
|
+ PROP_TYPE = ShortType;
|
|
|
+var
|
|
|
+ f : ISDODataFactory;
|
|
|
+ x, y : ISDODataObject;
|
|
|
+ cs : ISDOChangeSummary;
|
|
|
+ vls : ISDODataObjectList;
|
|
|
+ vvals_a : array of TSDOShort;
|
|
|
+ vvals_a_length, i : PtrInt;
|
|
|
+ vvals_b : array of TSDOShort;
|
|
|
+ vvals_b_length : PtrInt;
|
|
|
+begin
|
|
|
+ Randomize();
|
|
|
+ f := TSDODataFactory.Create();
|
|
|
+ f.AddType(s_uri, 'a', []);
|
|
|
+ f.AddType(s_uri, 'b', []);
|
|
|
+ f.addProperty(s_uri, 'a', 'p_i', sdo_namespace, SDOTypeDefaultTypeNames[PROP_TYPE], []);
|
|
|
+ f.addProperty(s_uri, 'a', 'p_li', sdo_namespace, SDOTypeDefaultTypeNames[PROP_TYPE], [pfIsMany]);
|
|
|
+ f.addProperty(s_uri, 'a', 'p_ab', s_uri, 'b', [pfIsContainment]);
|
|
|
+ f.addProperty(s_uri, 'a', s_changesummary_prop, sdo_namespace, SDOTypeDefaultTypeNames[ChangeSummaryType], [pfIsReadOnly]);
|
|
|
+ f.addProperty(s_uri, 'b', 'p_b_li', sdo_namespace, SDOTypeDefaultTypeNames[PROP_TYPE], [pfIsMany]);
|
|
|
+ x := f.createNew(s_uri,'a');
|
|
|
+ x.setShort('p_i', RandomRange(Low(TSDOShort),High(TSDOShort)));
|
|
|
+ y := x.createDataObject('p_ab');
|
|
|
+ cs := x.getChangeSummary();
|
|
|
+
|
|
|
+ vvals_a_length := RandomRange(1,100);
|
|
|
+ vvals_b_length := RandomRange(1,100);
|
|
|
+ SetLength(vvals_a,vvals_a_length);
|
|
|
+ try
|
|
|
+ for i := 0 to Pred(vvals_a_length) do
|
|
|
+ vvals_a[i] := RandomRange(Low(TSDOShort),High(TSDOShort));
|
|
|
+ SetLength(vvals_b,vvals_b_length);
|
|
|
+ for i := 0 to Pred(vvals_b_length) do
|
|
|
+ vvals_b[i] := RandomRange(Low(TSDOShort),High(TSDOShort));
|
|
|
+
|
|
|
+ vls := x.getList('p_li');
|
|
|
+ for i := 0 to Pred(vvals_a_length) do
|
|
|
+ vls.append(vvals_a[i]);
|
|
|
+ vls := y.getList('p_b_li');
|
|
|
+ for i := 0 to Pred(vvals_b_length) do
|
|
|
+ vls.append(vvals_b[i]);
|
|
|
+
|
|
|
+ cs.beginLogging();
|
|
|
+ vls := x.getList('p_li');
|
|
|
+ vls.append(RandomRange(Low(TSDOShort),High(TSDOShort)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(RandomRange(Low(TSDOShort),High(TSDOShort)));
|
|
|
+ vls.insert(RandomRange(0, ( vls.size() - 1 ) ), RandomRange(Low(TSDOShort),High(TSDOShort)));
|
|
|
+ vls.setShort(RandomRange(0, ( vls.size() - 1 ) ), RandomRange(Low(TSDOShort),High(TSDOShort)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(RandomRange(Low(TSDOShort),High(TSDOShort)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls := y.getList('p_b_li');
|
|
|
+ vls.insert(RandomRange(0, ( vls.size() - 1 ) ), RandomRange(Low(TSDOShort),High(TSDOShort)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(RandomRange(Low(TSDOShort),High(TSDOShort)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(RandomRange(Low(TSDOShort),High(TSDOShort)));
|
|
|
+ vls.setShort(RandomRange(0, ( vls.size() - 1 ) ), RandomRange(Low(TSDOShort),High(TSDOShort)));
|
|
|
+ vls.append(RandomRange(Low(TSDOShort),High(TSDOShort)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+
|
|
|
+ cs.undoChanges();
|
|
|
+ CheckEquals(0, cs.getChangedDataObjects().size, 'cs.getChangedDataObjects().size');
|
|
|
+ vls := x.getList('p_li');
|
|
|
+ CheckEquals(vvals_a_length, vls.size(), 'x, vls.size()');
|
|
|
+ for i := 0 to Pred(vvals_a_length) do begin
|
|
|
+ CheckEquals(vvals_a[i], vls.getShort(i), Format('x, Index = %d',[i]));
|
|
|
+ end;
|
|
|
+ vls := y.getList('p_b_li');
|
|
|
+ CheckEquals(vvals_b_length, vls.size(), 'y, vls.size()');
|
|
|
+ for i := 0 to Pred(vvals_b_length) do begin
|
|
|
+ CheckEquals(vvals_b[i], vls.getShort(i), Format('y, Index = %d',[i]));
|
|
|
+ end;
|
|
|
+
|
|
|
+ finally
|
|
|
+ SetLength(vvals_b,0);
|
|
|
+ SetLength(vvals_a,0);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+{$ENDIF HAS_SDO_SHORT}
|
|
|
+
|
|
|
+procedure TSDOChangeSummaryMultiValueProps_Test.undoChanges_object;
|
|
|
+const
|
|
|
+ LOCAL_PROP = s_Employee;
|
|
|
+
|
|
|
+ function create_factory () : ISDODataFactory;
|
|
|
+ var
|
|
|
+ locFac : ISDODataFactory;
|
|
|
+ begin
|
|
|
+ locFac := TSDODataFactory.Create() as ISDODataFactory;
|
|
|
+ locFac.AddType(s_uri,s_EmployeeType,[]);
|
|
|
+ locFac.addProperty(s_uri, s_EmployeeType,'name',sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
|
|
|
+ locFac.addProperty(s_uri, s_EmployeeType,'SN',sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
|
|
|
+ locFac.AddType(s_uri,s_Department,[]);
|
|
|
+ locFac.addProperty(s_uri,s_Department,s_name,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
|
|
|
+ locFac.addProperty(s_uri,s_Department,s_location,sdo_namespace,SDOTypeDefaultTypeNames[StringType],[]);
|
|
|
+ locFac.addProperty(s_uri,s_Department,s_Employee,s_uri,s_EmployeeType,[pfIsMany,pfIsContainment]);
|
|
|
+ locFac.addProperty(s_uri,s_Department,s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly,pfIsNotNullable]);
|
|
|
+ Result := locFac;
|
|
|
+ end;
|
|
|
+
|
|
|
+ procedure check_empty_list(const AList : ISDOSettingList);
|
|
|
+ begin
|
|
|
+ CheckNotEquals(PtrUInt(nil), PtrUInt(AList));
|
|
|
+ CheckEquals(0, AList.size());
|
|
|
+ end;
|
|
|
+
|
|
|
+ function create_employee(
|
|
|
+ const AFac : ISDODataFactory;
|
|
|
+ const AName, ASN : TSDOString
|
|
|
+ ) : ISDODataObject;
|
|
|
+ begin
|
|
|
+ Result := AFac.createNew(s_uri, s_EmployeeType);
|
|
|
+ Result.setString(s_name, AName);
|
|
|
+ Result.setString(s_sn, ASN);
|
|
|
+ end;
|
|
|
+
|
|
|
+ procedure check_employee_equal(const A, B : ISDODataObject; const AMsgPrefix : string);
|
|
|
+ begin
|
|
|
+ Check(
|
|
|
+ ( ( A = nil ) and ( B = nil ) ) or
|
|
|
+ ( ( A <> nil ) and ( B <> nil ) ),
|
|
|
+ AMsgPrefix
|
|
|
+ );
|
|
|
+ if ( A <> nil ) then begin
|
|
|
+ CheckEquals(A.getString(s_name), B.getString(s_name), Format('%s %s',[AMsgPrefix, s_name]));
|
|
|
+ CheckEquals(A.getString(s_sn), B.getString(s_sn), Format('%s %s',[AMsgPrefix, s_sn]));
|
|
|
+ end;
|
|
|
+ end;
|
|
|
+
|
|
|
+var
|
|
|
+ locFac : ISDODataFactory;
|
|
|
+ x : ISDODataObject;
|
|
|
+ cs : ISDOChangeSummary;
|
|
|
+ vls : ISDODataObjectList;
|
|
|
+ vvals : array of ISDODataObject;
|
|
|
+ vvals_length, i : PtrInt;
|
|
|
+begin
|
|
|
+ Randomize();
|
|
|
+ locFac := create_factory();
|
|
|
+ x := locFac.createNew(s_uri,s_Department);
|
|
|
+ cs := x.getChangeSummary();
|
|
|
+ check_empty_list(cs.getOldValues(x));
|
|
|
+
|
|
|
+ vvals_length := RandomRange(1,100);
|
|
|
+ SetLength(vvals,vvals_length);
|
|
|
+ try
|
|
|
+ for i := 0 to Pred(vvals_length) do
|
|
|
+ vvals[i] := create_employee(locFac, RandomString(RandomRange(0,100)), RandomString(RandomRange(0,100)));
|
|
|
+ vls := x.getList(LOCAL_PROP);
|
|
|
+ for i := 0 to Pred(vvals_length) do
|
|
|
+ vls.append(vvals[i]);
|
|
|
+ check_empty_list(cs.getOldValues(x));
|
|
|
+
|
|
|
+ cs.beginLogging();
|
|
|
+ vls.append(create_employee(locFac, 'sdo', '001'));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(create_employee(locFac, RandomString(RandomRange(0,100)), RandomString(RandomRange(0,100))));
|
|
|
+ vls.insert(RandomRange(0, ( vls.size() - 1 ) ), create_employee(locFac, RandomString(RandomRange(0,100)), RandomString(RandomRange(0,100))));
|
|
|
+ vls.setDataObject(RandomRange(0, ( vls.size() - 1 ) ), create_employee(locFac, RandomString(RandomRange(0,100)), RandomString(RandomRange(0,100))));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(create_employee(locFac, RandomString(RandomRange(0,100)), RandomString(RandomRange(0,100))));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.insert(RandomRange(0, ( vls.size() - 1 ) ), create_employee(locFac, RandomString(RandomRange(0,100)), RandomString(RandomRange(0,100))));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ cs.undoChanges();
|
|
|
+ CheckEquals(0, cs.getChangedDataObjects().size, 'cs.getChangedDataObjects().size');
|
|
|
+ CheckEquals(vvals_length, vls.size(), 'vls.size()');
|
|
|
+ for i := 0 to Pred(vvals_length) do begin
|
|
|
+ check_employee_equal(vvals[i],vls.getDataObject(i), Format('Object[%d]',[i]));
|
|
|
+ end;
|
|
|
+ finally
|
|
|
+ SetLength(vvals,0);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummaryMultiValueProps_Test.undoChanges_object_deleted;
|
|
|
+var
|
|
|
+ locFac : ISDODataFactory;
|
|
|
+ locA : ISDODataObject;
|
|
|
+ locCS : ISDOChangeSummary;
|
|
|
+begin
|
|
|
+ locFac := TSDODataFactory.Create() as ISDODataFactory;
|
|
|
+ locFac.AddType(s_uri,'a',[]);
|
|
|
+ locFac.AddType(s_uri,'b',[]);
|
|
|
+ locFac.addProperty(s_uri,'a','p_ab',s_uri,'b',[pfIsContainment,pfIsMany]);
|
|
|
+ locFac.addProperty(s_uri,'a',s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly]);
|
|
|
+
|
|
|
+ locA := locFac.createNew(s_uri,'a');
|
|
|
+ locA.getList('p_ab').append(locA.createDataObject('p_ab'));
|
|
|
+ locCS := locA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locA.getList('p_ab').delete(0);
|
|
|
+ locCS.getOldValues(locA);
|
|
|
+
|
|
|
+ locA := locFac.createNew(s_uri,'a');
|
|
|
+ locA.getList('p_ab').append(locA.createDataObject('p_ab'));
|
|
|
+ locA.getList('p_ab').append(locA.createDataObject('p_ab'));
|
|
|
+ locCS := locA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locA.getList('p_ab').delete(1);
|
|
|
+ locCS.getOldValues(locA);
|
|
|
+
|
|
|
+ locA := locFac.createNew(s_uri,'a');
|
|
|
+ locA.getList('p_ab').append(locA.createDataObject('p_ab'));
|
|
|
+ locA.getList('p_ab').append(locA.createDataObject('p_ab'));
|
|
|
+ locA.getList('p_ab').append(locA.createDataObject('p_ab'));
|
|
|
+ locA.getList('p_ab').append(locA.createDataObject('p_ab'));
|
|
|
+ locCS := locA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locA.getList('p_ab').delete(3);
|
|
|
+ locCS.getOldValues(locA);
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummaryMultiValueProps_Test.undoChanges_string();
|
|
|
+const
|
|
|
+ LOCAL_PROP = s_string_propList;
|
|
|
+var
|
|
|
+ x : ISDODataObject;
|
|
|
+ cs : ISDOChangeSummary;
|
|
|
+ vls : ISDODataObjectList;
|
|
|
+ vvals : array of TSDOString;
|
|
|
+ vvals_length, i : PtrInt;
|
|
|
+begin
|
|
|
+ Randomize();
|
|
|
+ x := FFactory.createNew(s_uri,s_type_object_A);
|
|
|
+ cs := x.getChangeSummary();
|
|
|
+
|
|
|
+ vvals_length := RandomRange(1,100);
|
|
|
+ SetLength(vvals,vvals_length);
|
|
|
+ try
|
|
|
+ for i := 0 to Pred(vvals_length) do
|
|
|
+ vvals[i] := RandomString(RandomRange(0,100));
|
|
|
+ vls := x.getList(LOCAL_PROP);
|
|
|
+ for i := 0 to Pred(vvals_length) do
|
|
|
+ vls.append(vvals[i]);
|
|
|
+
|
|
|
+ cs.beginLogging();
|
|
|
+ vls.append(RandomString(RandomRange(0,100)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(RandomString(RandomRange(0,100)));
|
|
|
+ vls.insert(RandomRange(0, ( vls.size() - 1 ) ), RandomString(RandomRange(0,100)));
|
|
|
+ vls.setString(RandomRange(0, ( vls.size() - 1 ) ), RandomString(RandomRange(0,100)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.append(RandomString(RandomRange(0,100)));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ vls.delete(RandomRange(0, ( vls.size() - 1 ) ));
|
|
|
+ cs.undoChanges();
|
|
|
+ CheckEquals(0, cs.getChangedDataObjects().size, 'cs.getChangedDataObjects().size');
|
|
|
+ CheckEquals(vvals_length, vls.size(), 'vls.size()');
|
|
|
+ for i := 0 to Pred(vvals_length) do begin
|
|
|
+ CheckEquals(vvals[i], vls.getString(i), Format('Index = %d',[i]));
|
|
|
+ end;
|
|
|
+ finally
|
|
|
+ SetLength(vvals,0);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TSDOChangeSummaryMultiValueProps_Test.undoChanges_string_deleted;
|
|
|
+var
|
|
|
+ locFac : ISDODataFactory;
|
|
|
+ locA : ISDODataObject;
|
|
|
+ locCS : ISDOChangeSummary;
|
|
|
+begin
|
|
|
+ locFac := TSDODataFactory.Create() as ISDODataFactory;
|
|
|
+ locFac.AddType(s_uri,'a',[]);
|
|
|
+ locFac.addProperty(s_uri,'a','p_ab',sdo_namespace,SDOTypeDefaultTypeNames[StringType],[pfIsMany]);
|
|
|
+ locFac.addProperty(s_uri,'a',s_changeSummary,sdo_namespace,SDOTypeDefaultTypeNames[ChangeSummaryType],[pfIsReadOnly]);
|
|
|
+
|
|
|
+ locA := locFac.createNew(s_uri,'a');
|
|
|
+ locA.getList('p_ab').append('azerty');
|
|
|
+ locCS := locA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locA.getList('p_ab').delete(0);
|
|
|
+ locCS.getOldValues(locA);
|
|
|
+
|
|
|
+ locA := locFac.createNew(s_uri,'a');
|
|
|
+ locA.getList('p_ab').append('sdo');
|
|
|
+ locA.getList('p_ab').append('fpc');
|
|
|
+ locCS := locA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locA.getList('p_ab').delete(1);
|
|
|
+ locCS.getOldValues(locA);
|
|
|
+
|
|
|
+ locA := locFac.createNew(s_uri,'a');
|
|
|
+ locA.getList('p_ab').append('Delphi');
|
|
|
+ locA.getList('p_ab').append('Lazarus');
|
|
|
+ locA.getList('p_ab').append('WST');
|
|
|
+ locA.getList('p_ab').append('OI');
|
|
|
+ locCS := locA.getChangeSummary();
|
|
|
+ locCS.beginLogging();
|
|
|
+ locA.getList('p_ab').delete(3);
|
|
|
+ locCS.getOldValues(locA);
|
|
|
+end;
|
|
|
+
|
|
|
+initialization
|
|
|
+ RegisterTest('ChangeSummary',TValueSetting_Test.Suite);
|
|
|
+ RegisterTest('ChangeSummary',TSDOSettingList_Test.Suite);
|
|
|
+ //RegisterTest('ChangeSummary', TDicho_Test.Suite);
|
|
|
+ RegisterTest('ChangeSummary', TSDOChangedDataObjectList_Test.Suite);
|
|
|
+ RegisterTest('ChangeSummary', TChangeRecorder_Test.Suite);
|
|
|
+ RegisterTest('ChangeSummary', TSDOChangeSummary_Test.Suite);
|
|
|
+ RegisterTest('ChangeSummary', TSDODataObjectCS_Test.Suite);
|
|
|
+ RegisterTest('ChangeSummary', TSDOChangeSummaryMultiValueProps_Test.Suite);
|
|
|
+
|
|
|
+end.
|