From c4849d75837a525880e9b6572b8ab85132e5771e Mon Sep 17 00:00:00 2001 From: inoussa Date: Sat, 3 Jan 2015 13:35:44 +0000 Subject: [PATCH] Test for "record" marshaling. git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@3862 8e941d3f-bd1b-0410-a28a-d453659cc2b4 --- .../tests/record/client/record_client.lpi | 185 ++---------- .../tests/record/client/record_client.pas | 26 +- wst/trunk/tests/record/record_sample.WSDL | 70 ++++- wst/trunk/tests/record/record_sample.pas | 141 +++++++-- .../tests/record/record_sample_binder.pas | 65 ++++- wst/trunk/tests/record/record_sample_imp.pas | 11 +- .../tests/record/record_sample_proxy.pas | 70 ++++- .../tests/record/server/record_server.lpi | 200 ++----------- .../tests/record/server/record_server.pas | 4 +- wst/trunk/tests/record/test/test_record.lpi | 271 ++---------------- wst/trunk/tests/record/test/test_record.pas | 3 +- 11 files changed, 382 insertions(+), 664 deletions(-) diff --git a/wst/trunk/tests/record/client/record_client.lpi b/wst/trunk/tests/record/client/record_client.lpi index cdefb29aa..f6fc4e6bd 100644 --- a/wst/trunk/tests/record/client/record_client.lpi +++ b/wst/trunk/tests/record/client/record_client.lpi @@ -1,24 +1,26 @@ - + + - + + - - - - + + + + @@ -31,185 +33,40 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - + + + + - - + + - - - - + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/wst/trunk/tests/record/client/record_client.pas b/wst/trunk/tests/record/client/record_client.pas index 66ebc31bd..a04bbd734 100644 --- a/wst/trunk/tests/record/client/record_client.pas +++ b/wst/trunk/tests/record/client/record_client.pas @@ -5,8 +5,7 @@ program record_client; uses Classes, SysUtils, {$IFDEF WINDOWS}ActiveX,{$ENDIF} soap_formatter, - synapse_http_protocol, - //indy_http_protocol, + fpc_http_protocol, metadata_repository, record_sample, record_sample_proxy; @@ -52,14 +51,13 @@ var locService : RecordService; A : RecordA; B : RecordB; - C : RecordC; + D, C : RecordC; begin {$IFDEF WINDOWS} CoInitialize(nil); try {$ENDIF} - SYNAPSE_RegisterHTTP_Transport(); - //INDY_RegisterHTTP_Transport(); + FPC_RegisterHTTP_Transport(); WriteLn('Web Services Toolkit Record sample'); WriteLn('This sample demonstrates the Object Pascal "Record" support by WST'); WriteLn(); @@ -86,16 +84,16 @@ begin WriteLn(' comment : ',B.comment); WriteLn(); WriteLn; - C := locService.AddRec(A,B,C); + D := locService.AddRec(A,B,C); WriteLn; - WriteLn('Response ( C ) : '); - WriteLn(' intField : ',C.intField); - WriteLn(' RecordField.intField : ',C.RecordField.intField); - WriteLn(' RecordField.singleField : ',C.RecordField.singleField); - WriteLn(' RecordField.singleField : ',C.RecordField.comment); - WriteLn(' RecordField.RecordField.fieldA : ',C.RecordField.RecordField.fieldA); - WriteLn(' RecordField.RecordField.fieldB : ',C.RecordField.RecordField.fieldB); - WriteLn(' RecordField.RecordField.comment : ',C.RecordField.RecordField.comment); + WriteLn('Response ( D ) : '); + WriteLn(' intField : ',D.intField); + WriteLn(' RecordField.intField : ',D.RecordField.intField); + WriteLn(' RecordField.singleField : ',D.RecordField.singleField); + WriteLn(' RecordField.singleField : ',D.RecordField.comment); + WriteLn(' RecordField.RecordField.fieldA : ',D.RecordField.RecordField.fieldA); + WriteLn(' RecordField.RecordField.fieldB : ',D.RecordField.RecordField.fieldB); + WriteLn(' RecordField.RecordField.comment : ',D.RecordField.RecordField.comment); WriteLn(); if ( UpperCase(ReadEntryStr('Continue ( Y/N ) :'))[1] <> 'Y' ) then diff --git a/wst/trunk/tests/record/record_sample.WSDL b/wst/trunk/tests/record/record_sample.WSDL index b71cb86ce..1acc0a194 100644 --- a/wst/trunk/tests/record/record_sample.WSDL +++ b/wst/trunk/tests/record/record_sample.WSDL @@ -1,33 +1,81 @@ - + - - + + - - + + + + + + + + + + + + + + + + + - - + + + + + + + + + + + + + + - + + + + + + + - - + + + + + + + + + + + + + + + - + + + diff --git a/wst/trunk/tests/record/record_sample.pas b/wst/trunk/tests/record/record_sample.pas index 8fef55571..04a202240 100644 --- a/wst/trunk/tests/record/record_sample.pas +++ b/wst/trunk/tests/record/record_sample.pas @@ -2,15 +2,13 @@ This unit has been produced by ws_helper. Input unit name : "record_sample". This unit name : "record_sample". - Date : "26/08/2007 01:12:11". + Date : "02/01/2015 23:42:08". } unit record_sample; {$IFDEF FPC} {$mode objfpc} {$H+} {$ENDIF} -{$IFNDEF FPC} - {$DEFINE WST_RECORD_RTTI} -{$ENDIF} +{$DEFINE WST_RECORD_RTTI} interface uses SysUtils, Classes, TypInfo, base_service_intf, service_intf; @@ -21,22 +19,35 @@ const type - TRecordClass = class; - TRecordClass = class(TBaseComplexRemotable) - private - FfieldA : integer; - FfieldB : Single; - published - property fieldA : integer read FfieldA write FfieldA; - property fieldB : Single read FfieldB write FfieldB; + RecordA = record + fieldA : integer; + fieldB : Single; + comment : UnicodeString; + end; + + RecordB = record + singleField : Single; + intField : integer; + comment : UnicodeString; + RecordField : RecordA; + end; + + RecordC = record + intField : integer; + RecordField : RecordB; end; RecordService = interface(IInvokable) - ['{E42B7653-4B50-4956-88B4-FBCEC57B667A}'] + ['{4CB555BD-B523-49BD-8861-496497B081DD}'] function Add( - const AValue : TRecordClass - ):Int64; + const AValue : RecordA + ):RecordB; + function AddRec( + const AA : RecordA; + const AB : RecordB; + const AC : RecordC + ):RecordC; end; procedure Register_record_sample_ServiceMetadata(); @@ -84,12 +95,108 @@ begin 'FORMAT_OutputEncodingStyle', 'literal' ); + mm.SetOperationCustomData( + sUNIT_NAME, + 'RecordService', + 'AddRec', + '_E_N_', + 'AddRec' + ); + mm.SetOperationCustomData( + sUNIT_NAME, + 'RecordService', + 'AddRec', + 'FORMAT_Input_EncodingStyle', + 'literal' + ); + mm.SetOperationCustomData( + sUNIT_NAME, + 'RecordService', + 'AddRec', + 'FORMAT_OutputEncodingStyle', + 'literal' + ); end; -initialization - GetTypeRegistry().Register(sNAME_SPACE,TypeInfo(TRecordClass),'TRecordClass'); +{$IFDEF WST_RECORD_RTTI} +function __RecordA_TYPEINFO_FUNC__() : PTypeInfo; +var + p : ^RecordA; + r : RecordA; +begin + p := @r; + Result := MakeRawTypeInfo( + 'RecordA', + SizeOf(RecordA), + [ PtrUInt(@(p^.fieldA)) - PtrUInt(p), PtrUInt(@(p^.fieldB)) - PtrUInt(p), PtrUInt(@(p^.comment)) - PtrUInt(p) ], + [ TypeInfo(integer), TypeInfo(Single), TypeInfo(UnicodeString) ] + ); +end; +{$ENDIF WST_RECORD_RTTI} + +{$IFDEF WST_RECORD_RTTI} +function __RecordB_TYPEINFO_FUNC__() : PTypeInfo; +var + p : ^RecordB; + r : RecordB; +begin + p := @r; + Result := MakeRawTypeInfo( + 'RecordB', + SizeOf(RecordB), + [ PtrUInt(@(p^.singleField)) - PtrUInt(p), PtrUInt(@(p^.intField)) - PtrUInt(p), PtrUInt(@(p^.comment)) - PtrUInt(p), PtrUInt(@(p^.RecordField)) - PtrUInt(p) ], + [ TypeInfo(Single), TypeInfo(integer), TypeInfo(UnicodeString), TypeInfo(RecordA) ] + ); +end; +{$ENDIF WST_RECORD_RTTI} + +{$IFDEF WST_RECORD_RTTI} +function __RecordC_TYPEINFO_FUNC__() : PTypeInfo; +var + p : ^RecordC; + r : RecordC; +begin + p := @r; + Result := MakeRawTypeInfo( + 'RecordC', + SizeOf(RecordC), + [ PtrUInt(@(p^.intField)) - PtrUInt(p), PtrUInt(@(p^.RecordField)) - PtrUInt(p) ], + [ TypeInfo(integer), TypeInfo(RecordB) ] + ); +end; +{$ENDIF WST_RECORD_RTTI} +var + typeRegistryInstance : TTypeRegistry = nil; +initialization + typeRegistryInstance := GetTypeRegistry(); + + + + typeRegistryInstance.Register(sNAME_SPACE,TypeInfo(RecordA),'RecordA').RegisterExternalPropertyName('__FIELDS__','fieldA;fieldB;comment'); +{$IFNDEF WST_RECORD_RTTI} + typeRegistryInstance.ItemByTypeInfo[TypeInfo(RecordA)].RegisterObject(FIELDS_STRING,TRecordRttiDataObject.Create(MakeRecordTypeInfo(TypeInfo(RecordA)),GetTypeRegistry().ItemByTypeInfo[TypeInfo(RecordA)].GetExternalPropertyName('__FIELDS__'))); +{$ENDIF WST_RECORD_RTTI} +{$IFDEF WST_RECORD_RTTI} + typeRegistryInstance.ItemByTypeInfo[TypeInfo(RecordA)].RegisterObject(FIELDS_STRING,TRecordRttiDataObject.Create(MakeRecordTypeInfo(__RecordA_TYPEINFO_FUNC__()),GetTypeRegistry().ItemByTypeInfo[TypeInfo(RecordA)].GetExternalPropertyName('__FIELDS__'))); +{$ENDIF WST_RECORD_RTTI} + + typeRegistryInstance.Register(sNAME_SPACE,TypeInfo(RecordB),'RecordB').RegisterExternalPropertyName('__FIELDS__','singleField;intField;comment;RecordField'); +{$IFNDEF WST_RECORD_RTTI} + typeRegistryInstance.ItemByTypeInfo[TypeInfo(RecordB)].RegisterObject(FIELDS_STRING,TRecordRttiDataObject.Create(MakeRecordTypeInfo(TypeInfo(RecordB)),GetTypeRegistry().ItemByTypeInfo[TypeInfo(RecordB)].GetExternalPropertyName('__FIELDS__'))); +{$ENDIF WST_RECORD_RTTI} +{$IFDEF WST_RECORD_RTTI} + typeRegistryInstance.ItemByTypeInfo[TypeInfo(RecordB)].RegisterObject(FIELDS_STRING,TRecordRttiDataObject.Create(MakeRecordTypeInfo(__RecordB_TYPEINFO_FUNC__()),GetTypeRegistry().ItemByTypeInfo[TypeInfo(RecordB)].GetExternalPropertyName('__FIELDS__'))); +{$ENDIF WST_RECORD_RTTI} + + typeRegistryInstance.Register(sNAME_SPACE,TypeInfo(RecordC),'RecordC').RegisterExternalPropertyName('__FIELDS__','intField;RecordField'); +{$IFNDEF WST_RECORD_RTTI} + typeRegistryInstance.ItemByTypeInfo[TypeInfo(RecordC)].RegisterObject(FIELDS_STRING,TRecordRttiDataObject.Create(MakeRecordTypeInfo(TypeInfo(RecordC)),GetTypeRegistry().ItemByTypeInfo[TypeInfo(RecordC)].GetExternalPropertyName('__FIELDS__'))); +{$ENDIF WST_RECORD_RTTI} +{$IFDEF WST_RECORD_RTTI} + typeRegistryInstance.ItemByTypeInfo[TypeInfo(RecordC)].RegisterObject(FIELDS_STRING,TRecordRttiDataObject.Create(MakeRecordTypeInfo(__RecordC_TYPEINFO_FUNC__()),GetTypeRegistry().ItemByTypeInfo[TypeInfo(RecordC)].GetExternalPropertyName('__FIELDS__'))); +{$ENDIF WST_RECORD_RTTI} End. diff --git a/wst/trunk/tests/record/record_sample_binder.pas b/wst/trunk/tests/record/record_sample_binder.pas index 482fa0897..3132a0a66 100644 --- a/wst/trunk/tests/record/record_sample_binder.pas +++ b/wst/trunk/tests/record/record_sample_binder.pas @@ -2,7 +2,7 @@ This unit has been produced by ws_helper. Input unit name : "record_sample". This unit name : "record_sample_binder". - Date : "26/08/2007 01:12:11". + Date : "02/01/2015 23:42:08". } unit record_sample_binder; {$IFDEF FPC} {$mode objfpc}{$H+} {$ENDIF} @@ -10,16 +10,17 @@ interface uses SysUtils, Classes, base_service_intf, server_service_intf, record_sample; + type - - TRecordService_ServiceBinder = class(TBaseServiceBinder) protected procedure AddHandler(AFormatter : IFormatterResponse; AContext : ICallContext); + procedure AddRecHandler(AFormatter : IFormatterResponse; AContext : ICallContext); public constructor Create(); end; +type TRecordService_ServiceBinderFactory = class(TInterfacedObject,IItemFactory) private FInstance : IInterface; @@ -43,17 +44,14 @@ var hasObjCntrl : Boolean; tmpObj : RecordService; callCtx : ICallContext; - strPrmName : string; + locStrPrmName : string; procName,trgName : string; - AValue : TRecordClass; - returnVal : Int64; + AValue : RecordA; + returnVal : RecordB; begin callCtx := AContext; - Fillchar(AValue,SizeOf(TRecordClass),#0); - strPrmName := 'AValue'; AFormatter.Get(TypeInfo(TRecordClass),strPrmName,AValue); - if Assigned(Pointer(AValue)) then - callCtx.AddObjectToFree(TObject(AValue)); + locStrPrmName := 'AValue'; AFormatter.Get(TypeInfo(RecordA),locStrPrmName,AValue); tmpObj := Self.GetFactory().CreateInstance() as RecordService; if Supports(tmpObj,ICallControl,cllCntrl) then @@ -68,7 +66,51 @@ begin trgName := AFormatter.GetCallTarget(); AFormatter.Clear(); AFormatter.BeginCallResponse(procName,trgName); - AFormatter.Put('result',TypeInfo(Int64),returnVal); + AFormatter.Put('result',TypeInfo(RecordB),returnVal); + AFormatter.EndCallResponse(); + + callCtx := nil; + finally + if hasObjCntrl then + objCntrl.Deactivate(); + Self.GetFactory().ReleaseInstance(tmpObj); + end; +end; + +procedure TRecordService_ServiceBinder.AddRecHandler(AFormatter : IFormatterResponse; AContext : ICallContext); +var + cllCntrl : ICallControl; + objCntrl : IObjectControl; + hasObjCntrl : Boolean; + tmpObj : RecordService; + callCtx : ICallContext; + locStrPrmName : string; + procName,trgName : string; + AA : RecordA; + AB : RecordB; + AC : RecordC; + returnVal : RecordC; +begin + callCtx := AContext; + + locStrPrmName := 'AA'; AFormatter.Get(TypeInfo(RecordA),locStrPrmName,AA); + locStrPrmName := 'AB'; AFormatter.Get(TypeInfo(RecordB),locStrPrmName,AB); + locStrPrmName := 'AC'; AFormatter.Get(TypeInfo(RecordC),locStrPrmName,AC); + + tmpObj := Self.GetFactory().CreateInstance() as RecordService; + if Supports(tmpObj,ICallControl,cllCntrl) then + cllCntrl.SetCallContext(callCtx); + hasObjCntrl := Supports(tmpObj,IObjectControl,objCntrl); + if hasObjCntrl then + objCntrl.Activate(); + try + returnVal := tmpObj.AddRec(AA,AB,AC); + + procName := AFormatter.GetCallProcedureName(); + trgName := AFormatter.GetCallTarget(); + AFormatter.Clear(); + AFormatter.BeginCallResponse(procName,trgName); + AFormatter.Put('result',TypeInfo(RecordC),returnVal); AFormatter.EndCallResponse(); callCtx := nil; @@ -84,6 +126,7 @@ constructor TRecordService_ServiceBinder.Create(); begin inherited Create(GetServiceImplementationRegistry().FindFactory('RecordService')); RegisterVerbHandler('Add',{$IFDEF FPC}@{$ENDIF}AddHandler); + RegisterVerbHandler('AddRec',{$IFDEF FPC}@{$ENDIF}AddRecHandler); end; diff --git a/wst/trunk/tests/record/record_sample_imp.pas b/wst/trunk/tests/record/record_sample_imp.pas index 9e6066421..ae1414c70 100644 --- a/wst/trunk/tests/record/record_sample_imp.pas +++ b/wst/trunk/tests/record/record_sample_imp.pas @@ -48,13 +48,16 @@ function TRecordService_ServiceImp.AddRec( const AB : RecordB; const AC : RecordC ):RecordC; +var + h,m,s,ms : Word; Begin - Result.RecordField.intField := 1234; - Result.RecordField.RecordField.fieldA := 0; - Result.RecordField.RecordField.fieldB := 0; + DecodeTime(Now(),h,m,s,ms); + Result.RecordField.intField := h; + Result.RecordField.RecordField.fieldA := m; + Result.RecordField.RecordField.fieldB := s; Result.intField := Trunc(AA.fieldA + AA.fieldB); Result.RecordField.singleField := AB.singleField + AB.intField; - Result.RecordField.comment := 'Computed in AddRec().'; + Result.RecordField.RecordField.comment := 'Computed in AddRec().'; End; diff --git a/wst/trunk/tests/record/record_sample_proxy.pas b/wst/trunk/tests/record/record_sample_proxy.pas index 052f91c70..f42f5fcb2 100644 --- a/wst/trunk/tests/record/record_sample_proxy.pas +++ b/wst/trunk/tests/record/record_sample_proxy.pas @@ -2,7 +2,7 @@ This unit has been produced by ws_helper. Input unit name : "record_sample". This unit name : "record_sample_proxy". - Date : "26/08/2007 01:12:11". + Date : "02/01/2015 23:42:08". } Unit record_sample_proxy; @@ -18,19 +18,29 @@ Type Protected class function GetServiceType() : PTypeInfo;override; function Add( - const AValue : TRecordClass - ):Int64; + const AValue : RecordA + ):RecordB; + function AddRec( + const AA : RecordA; + const AB : RecordB; + const AC : RecordC + ):RecordC; End; - Function wst_CreateInstance_RecordService(const AFormat : string = 'SOAP:'; const ATransport : string = 'HTTP:'):RecordService; + Function wst_CreateInstance_RecordService(const AFormat : string = 'SOAP:'; const ATransport : string = 'HTTP:'; const AAddress : string = ''):RecordService; Implementation uses wst_resources_imp, metadata_repository; -Function wst_CreateInstance_RecordService(const AFormat : string; const ATransport : string):RecordService; +Function wst_CreateInstance_RecordService(const AFormat : string; const ATransport : string; const AAddress : string):RecordService; +Var + locAdr : string; Begin - Result := TRecordService_Proxy.Create('RecordService',AFormat+GetServiceDefaultFormatProperties(TypeInfo(RecordService)),ATransport + 'address=' + GetServiceDefaultAddress(TypeInfo(RecordService))); + locAdr := AAddress; + if ( locAdr = '' ) then + locAdr := GetServiceDefaultAddress(TypeInfo(RecordService)); + Result := TRecordService_Proxy.Create('RecordService',AFormat+GetServiceDefaultFormatProperties(TypeInfo(RecordService)),ATransport + 'address=' + locAdr); End; { TRecordService_Proxy implementation } @@ -41,23 +51,55 @@ begin end; function TRecordService_Proxy.Add( - const AValue : TRecordClass -):Int64; + const AValue : RecordA +):RecordB; Var locSerializer : IFormatterClient; - strPrmName : string; + locCallContext : ICallContext; + locStrPrmName : string; Begin + locCallContext := Self as ICallContext; locSerializer := GetSerializer(); Try - locSerializer.BeginCall('Add', GetTarget(),(Self as ICallContext)); - locSerializer.Put('AValue', TypeInfo(TRecordClass), AValue); + locSerializer.BeginCall('Add', GetTarget(),locCallContext); + locSerializer.Put('AValue', TypeInfo(RecordA), AValue); locSerializer.EndCall(); MakeCall(); - locSerializer.BeginCallRead((Self as ICallContext)); - strPrmName := 'result'; - locSerializer.Get(TypeInfo(Int64), strPrmName, Result); + locSerializer.BeginCallRead(locCallContext); + locStrPrmName := 'result'; + locSerializer.Get(TypeInfo(RecordB), locStrPrmName, Result); + + Finally + locSerializer.Clear(); + End; +End; + +function TRecordService_Proxy.AddRec( + const AA : RecordA; + const AB : RecordB; + const AC : RecordC +):RecordC; +Var + locSerializer : IFormatterClient; + locCallContext : ICallContext; + locStrPrmName : string; +Begin + locCallContext := Self as ICallContext; + locSerializer := GetSerializer(); + Try + locSerializer.BeginCall('AddRec', GetTarget(),locCallContext); + locSerializer.Put('AA', TypeInfo(RecordA), AA); + locSerializer.Put('AB', TypeInfo(RecordB), AB); + locSerializer.Put('AC', TypeInfo(RecordC), AC); + locSerializer.EndCall(); + + MakeCall(); + + locSerializer.BeginCallRead(locCallContext); + locStrPrmName := 'result'; + locSerializer.Get(TypeInfo(RecordC), locStrPrmName, Result); Finally locSerializer.Clear(); diff --git a/wst/trunk/tests/record/server/record_server.lpi b/wst/trunk/tests/record/server/record_server.lpi index e0bbee6c5..d8880526a 100644 --- a/wst/trunk/tests/record/server/record_server.lpi +++ b/wst/trunk/tests/record/server/record_server.lpi @@ -1,24 +1,26 @@ - + + - + + - - - - + + + + @@ -31,203 +33,57 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - + - - + + + + - - + + - - - - + + + + + +-dUseCThreads"/> - - - - - - - - - - - - - - - - - - diff --git a/wst/trunk/tests/record/server/record_server.pas b/wst/trunk/tests/record/server/record_server.pas index 3cf0387e8..93f5c4826 100644 --- a/wst/trunk/tests/record/server/record_server.pas +++ b/wst/trunk/tests/record/server/record_server.pas @@ -7,7 +7,7 @@ uses cthreads, {$ENDIF}{$ENDIF} Classes, SysUtils, - indy_http_server, metadata_service, server_listener, + fpc_http_server, metadata_service, server_listener, server_service_soap, server_binary_formatter, server_service_xmlrpc, config_objects, record_sample, record_sample_binder, record_sample_imp, record_rtti; @@ -24,7 +24,7 @@ begin //wst_CreateDefaultFile(wst_GetConfigFileName(),nil); - AppObject := TwstIndyHttpListener.Create('127.0.0.1',20000); + AppObject := TwstFPHttpListener.Create('127.0.0.1',20000); try WriteLn('"Web Service Toolkit" HTTP Server sample listening at:'); WriteLn(''); diff --git a/wst/trunk/tests/record/test/test_record.lpi b/wst/trunk/tests/record/test/test_record.lpi index 66ff8fe50..4935ff5f4 100644 --- a/wst/trunk/tests/record/test/test_record.lpi +++ b/wst/trunk/tests/record/test/test_record.lpi @@ -1,23 +1,26 @@ - + + - + + - - - + + + + @@ -30,269 +33,31 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + - - - - - - + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/wst/trunk/tests/record/test/test_record.pas b/wst/trunk/tests/record/test/test_record.pas index 574729194..648153bbe 100644 --- a/wst/trunk/tests/record/test/test_record.pas +++ b/wst/trunk/tests/record/test/test_record.pas @@ -3,8 +3,7 @@ program test_record; {$mode objfpc}{$H+} uses - Classes, SysUtils - ,TypInfo, record_rtti; + Classes, SysUtils, TypInfo, record_rtti; type