diff --git a/wst/trunk/library_protocol.pas b/wst/trunk/library_protocol.pas index eddbdc445..e2d815d3a 100644 --- a/wst/trunk/library_protocol.pas +++ b/wst/trunk/library_protocol.pas @@ -20,7 +20,7 @@ interface uses Classes, SysUtils, service_intf, imp_utils, base_service_intf, library_base_intf, - library_imp_utils; + library_imp_utils, wst_types; const sTRANSPORT_NAME = 'LIB'; @@ -105,11 +105,11 @@ procedure TLIBTransport.SendAndReceive(ARequest, AResponse: TStream); Var wrtr : IDataStore; buffStream : TMemoryStream; - strBuff : string; + strBuff : TBinaryString; intfBuffer : IwstStream; bl : LongInt; {$IFDEF WST_DBG} - s : string; + s : TBinaryString; i : Int64; {$ENDIF WST_DBG} begin @@ -118,9 +118,9 @@ begin try wrtr := CreateBinaryWriter(buffStream); wrtr.WriteInt32S(0); - wrtr.WriteStr(Target); - wrtr.WriteStr(ContentType); - wrtr.WriteStr(Self.Format); + wrtr.WriteAnsiStr(Target); + wrtr.WriteAnsiStr(ContentType); + wrtr.WriteAnsiStr(Self.Format); SetLength(strBuff,ARequest.Size); ARequest.Position := 0; ARequest.Read(strBuff[1],Length(strBuff)); @@ -128,7 +128,7 @@ begin if IsConsole then WriteLn(strBuff); {$ENDIF WST_DBG} - wrtr.WriteStr(strBuff); + wrtr.WriteAnsiStr(strBuff); buffStream.Position := 0; wrtr.WriteInt32S(buffStream.Size-4); diff --git a/wst/trunk/library_server_intf.pas b/wst/trunk/library_server_intf.pas index 30affaa63..6fa12ff41 100644 --- a/wst/trunk/library_server_intf.pas +++ b/wst/trunk/library_server_intf.pas @@ -17,10 +17,7 @@ interface uses Classes, SysUtils, - library_base_intf; - -{$INCLUDE wst.inc} -{$INCLUDE wst_delphi.inc} + library_base_intf, wst_types; function wstHandleRequest( ARequestBuffer : IwstStream; @@ -42,7 +39,7 @@ function wstHandleRequest( j,m : Integer; begin m := AErrorBufferLen; - j := Length(AMsg); + j := Length(AMsg) * SizeOf(Char); if ( j > 0 ) then begin if ( j > m ) then j := m; @@ -54,7 +51,7 @@ function wstHandleRequest( end; Var - buff, trgt,ctntyp, frmt : string; + buff, trgt,ctntyp, frmt : TBinaryString; rqst : IRequestBuffer; rdr : IDataStoreReader; inStream, bufStream : TMemoryStream; @@ -82,10 +79,10 @@ begin rdr := CreateBinaryReader(bufStream); if ( rdr.ReadInt32S() <> ( bs - 4 ) ) then wstCheck(RET_FALSE,'Invalid buffer.'); - trgt := rdr.ReadStr(); - ctntyp := rdr.ReadStr(); - frmt := rdr.ReadStr(); - buff := rdr.ReadStr(); + trgt := rdr.ReadAnsiStr(); + ctntyp := rdr.ReadAnsiStr(); + frmt := rdr.ReadAnsiStr(); + buff := rdr.ReadAnsiStr(); rdr := nil; bufStream.Size := 0; bufStream.Position := 0; diff --git a/wst/trunk/metadata_repository.pas b/wst/trunk/metadata_repository.pas index fccc70175..0c0774349 100644 --- a/wst/trunk/metadata_repository.pas +++ b/wst/trunk/metadata_repository.pas @@ -320,8 +320,8 @@ var procedure LoadParam(APrm : POperationParam); begin - APrm^.Name := rdr.ReadStr(); - APrm^.TypeName := rdr.ReadStr(); + APrm^.Name := rdr.ReadAnsiStr(); + APrm^.TypeName := rdr.ReadAnsiStr(); APrm^.Modifier := TOperationParamFlag(rdr.ReadEnum()); end; @@ -329,7 +329,7 @@ var ii, cc : LongInt; pp : POperationParam; begin - AOperation^.Name := rdr.ReadStr(); + AOperation^.Name := rdr.ReadAnsiStr(); AOperation^.Properties := nil; cc := rdr.ReadInt8U(); if ( cc > 0 ) then begin @@ -349,7 +349,7 @@ var j, k : LongInt; po : PServiceOperation; begin - AService^.Name := rdr.ReadStr(); + AService^.Name := rdr.ReadAnsiStr(); AService^.Properties := nil; k := rdr.ReadInt8U(); if ( k > 0 ) then begin @@ -372,14 +372,14 @@ var begin ARepository := nil; rdr := CreateBinaryReader(AStream); - buf := rdr.ReadStr(); + buf := rdr.ReadAnsiStr(); if ( sWST_SIGNATURE <> buf ) then raise EMetadataException.CreateFmt('Invalid Metadata signature : "%s"',[buf]); c := SizeOf(TServiceRepository); ARepository := wst_GetMem(c); try FillChar(ARepository^,c,#0); - ARepository^.Name := rdr.ReadStr(); + ARepository^.Name := rdr.ReadAnsiStr(); c := rdr.ReadInt8U(); if ( c > 0 ) then begin ARepository^.Services := wst_GetMem( c * SizeOf(TService) ); diff --git a/wst/trunk/object_serializer.pas b/wst/trunk/object_serializer.pas index f00d9279b..a0661ce82 100644 --- a/wst/trunk/object_serializer.pas +++ b/wst/trunk/object_serializer.pas @@ -346,6 +346,38 @@ begin SetStrProp(AObject,APropInfo.PropInfo,locData); end; +{$IFDEF WST_UNICODESTRING} +procedure UnicodeStringReader( + AObject : TObject; + APropInfo : TPropSerializationInfo; + AStore : IFormatterBase +); +var + locName : string; + locData : UnicodeString; +begin + locData := ''; + locName := APropInfo.ExternalName; + AStore.Get(APropInfo.PropInfo^.PropType{$IFDEF WST_DELPHI}^{$ENDIF},locName,locData); + SetUnicodeStrProp(AObject,APropInfo.PropInfo,locData); +end; +{$ENDIF WST_UNICODESTRING} + +procedure WideStringReader( + AObject : TObject; + APropInfo : TPropSerializationInfo; + AStore : IFormatterBase +); +var + locName : string; + locData : WideString; +begin + locData := ''; + locName := APropInfo.ExternalName; + AStore.Get(APropInfo.PropInfo^.PropType{$IFDEF WST_DELPHI}^{$ENDIF},locName,locData); + SetWideStrProp(AObject,APropInfo.PropInfo,locData); +end; + // Qualified readers {$IFDEF HAS_TKBOOL} procedure BoolReaderQualifier( @@ -524,6 +556,38 @@ begin SetStrProp(AObject,APropInfo.PropInfo,locData); end; +{$IFDEF WST_UNICODESTRING} +procedure UnicodeStringReaderQualified( + AObject : TObject; + APropInfo : TPropSerializationInfo; + AStore : IFormatterBase +); +var + locName : string; + locData : UnicodeString; +begin + locData := ''; + locName := APropInfo.ExternalName; + AStore.Get(APropInfo.PropInfo^.PropType{$IFDEF WST_DELPHI}^{$ENDIF},APropInfo.NameSpace,locName,locData); + SetUnicodeStrProp(AObject,APropInfo.PropInfo,locData); +end; +{$ENDIF WST_UNICODESTRING} + +procedure WideStringReaderQualified( + AObject : TObject; + APropInfo : TPropSerializationInfo; + AStore : IFormatterBase +); +var + locName : string; + locData : WideString; +begin + locData := ''; + locName := APropInfo.ExternalName; + AStore.Get(APropInfo.PropInfo^.PropType{$IFDEF WST_DELPHI}^{$ENDIF},APropInfo.NameSpace,locName,locData); + SetWideStrProp(AObject,APropInfo.PropInfo,locData); +end; + // Simple Writers {$IFDEF HAS_TKBOOL} procedure BoolWriter( @@ -687,6 +751,35 @@ begin AStore.Put(locName,APropInfo.PropInfo^.PropType{$IFDEF WST_DELPHI}^{$ENDIF},locData); end; +{$IFDEF WST_UNICODESTRING} +procedure UnicodeStringWriter( + AObject : TObject; + APropInfo : TPropSerializationInfo; + AStore : IFormatterBase +); +var + locName : string; + locData : UnicodeString; +begin + locName := APropInfo.ExternalName; + locData := GetUnicodeStrProp(AObject,APropInfo.PropInfo); + AStore.Put(locName,APropInfo.PropInfo^.PropType{$IFDEF WST_DELPHI}^{$ENDIF},locData); +end; +{$ENDIF WST_UNICODESTRING} + +procedure WideStringWriter( + AObject : TObject; + APropInfo : TPropSerializationInfo; + AStore : IFormatterBase +); +var + locName : string; + locData : WideString; +begin + locName := APropInfo.ExternalName; + locData := GetWideStrProp(AObject,APropInfo.PropInfo); + AStore.Put(locName,APropInfo.PropInfo^.PropType{$IFDEF WST_DELPHI}^{$ENDIF},locData); +end; // Qualified writers {$IFDEF HAS_TKBOOL} @@ -851,6 +944,35 @@ begin AStore.Put(APropInfo.NameSpace,locName,APropInfo.PropInfo^.PropType{$IFDEF WST_DELPHI}^{$ENDIF},locData); end; +{$IFDEF WST_UNICODESTRING} +procedure UnicodeStringWriterQualified( + AObject : TObject; + APropInfo : TPropSerializationInfo; + AStore : IFormatterBase +); +var + locName : string; + locData : UnicodeString; +begin + locName := APropInfo.ExternalName; + locData := GetUnicodeStrProp(AObject,APropInfo.PropInfo); + AStore.Put(APropInfo.NameSpace,locName,APropInfo.PropInfo^.PropType{$IFDEF WST_DELPHI}^{$ENDIF},locData); +end; +{$ENDIF WST_UNICODESTRING} + +procedure WideStringWriterQualified( + AObject : TObject; + APropInfo : TPropSerializationInfo; + AStore : IFormatterBase +); +var + locName : string; + locData : WideString; +begin + locName := APropInfo.ExternalName; + locData := GetWideStrProp(AObject,APropInfo.PropInfo); + AStore.Put(APropInfo.NameSpace,locName,APropInfo.PropInfo^.PropType{$IFDEF WST_DELPHI}^{$ENDIF},locData); +end; type @@ -863,54 +985,68 @@ var {$IFDEF FPC} ReaderWriterInfoMap : array[0..1] of array[TTypeKind] of TReaderWriterInfo = ( ( // Readers - ( Simple : {$IFDEF FPC}@{$ENDIF}ErrorProc; Qualified : {$IFDEF FPC}@{$ENDIF}ErrorProc ;) , //tkUnknown - ( Simple : {$IFDEF FPC}@{$ENDIF}IntEnumReader; Qualified : {$IFDEF FPC}@{$ENDIF}IntEnumReaderQualified ;) , //tkInteger - ( Simple : {$IFDEF FPC}@{$ENDIF}ErrorProc; Qualified : {$IFDEF FPC}@{$ENDIF}ErrorProc ;) , //tkChar - ( Simple : {$IFDEF FPC}@{$ENDIF}IntEnumReader; Qualified : {$IFDEF FPC}@{$ENDIF}IntEnumReaderQualified ;) , //tkEnumeration - ( Simple : {$IFDEF FPC}@{$ENDIF}FloatReader; Qualified : {$IFDEF FPC}@{$ENDIF}FloatReaderQualified ;) , //tkFloat - ( Simple : {$IFDEF FPC}@{$ENDIF}ErrorProc; Qualified : {$IFDEF FPC}@{$ENDIF}ErrorProc ;) , //tkSet - ( Simple : {$IFDEF FPC}@{$ENDIF}ErrorProc; Qualified : {$IFDEF FPC}@{$ENDIF}ErrorProc ;) , //tkMethod - ( Simple : {$IFDEF FPC}@{$ENDIF}StringReader; Qualified : {$IFDEF FPC}@{$ENDIF}StringReaderQualified ;) , //tkSString - ( Simple : {$IFDEF FPC}@{$ENDIF}StringReader; Qualified : {$IFDEF FPC}@{$ENDIF}StringReaderQualified ;) , //tkLString - ( Simple : {$IFDEF FPC}@{$ENDIF}StringReader; Qualified : {$IFDEF FPC}@{$ENDIF}StringReaderQualified ;) , //tkAString - ( Simple : {$IFDEF FPC}@{$ENDIF}ErrorProc; Qualified : {$IFDEF FPC}@{$ENDIF}ErrorProc ;) , //tkWString - ( Simple : {$IFDEF FPC}@{$ENDIF}ErrorProc; Qualified : {$IFDEF FPC}@{$ENDIF}ErrorProc ;) , //tkVariant - ( Simple : {$IFDEF FPC}@{$ENDIF}ErrorProc; Qualified : {$IFDEF FPC}@{$ENDIF}ErrorProc ;) , //tkArray - ( Simple : {$IFDEF FPC}@{$ENDIF}ErrorProc; Qualified : {$IFDEF FPC}@{$ENDIF}ErrorProc ;) , //tkRecord - ( Simple : {$IFDEF FPC}@{$ENDIF}ErrorProc; Qualified : {$IFDEF FPC}@{$ENDIF}ErrorProc ;) , //tkInterface - ( Simple : {$IFDEF FPC}@{$ENDIF}ClassReader; Qualified : {$IFDEF FPC}@{$ENDIF}ClassReaderQualified ;) , //tkClass - ( Simple : {$IFDEF FPC}@{$ENDIF}ErrorProc; Qualified : {$IFDEF FPC}@{$ENDIF}ErrorProc ;) , //tkObject - ( Simple : {$IFDEF FPC}@{$ENDIF}ErrorProc; Qualified : {$IFDEF FPC}@{$ENDIF}ErrorProc ;) , //tkWChar - ( Simple : {$IFDEF FPC}@{$ENDIF}BoolReader; Qualified : {$IFDEF FPC}@{$ENDIF}BoolReaderQualifier ;) , //tkBool - ( Simple : {$IFDEF FPC}@{$ENDIF}Int64Reader; Qualified : {$IFDEF FPC}@{$ENDIF}Int64ReaderQualified ;) , //tkInt64 - ( Simple : {$IFDEF FPC}@{$ENDIF}Int64Reader; Qualified : {$IFDEF FPC}@{$ENDIF}Int64ReaderQualified ;) , //tkQWord - ( Simple : {$IFDEF FPC}@{$ENDIF}ErrorProc; Qualified : {$IFDEF FPC}@{$ENDIF}ErrorProc ;) , //tkDynArray - ( Simple : {$IFDEF FPC}@{$ENDIF}ErrorProc; Qualified : {$IFDEF FPC}@{$ENDIF}ErrorProc ;) //tkInterfaceRaw + ( Simple : @ErrorProc; Qualified : @ErrorProc ;) , //tkUnknown + ( Simple : @IntEnumReader; Qualified : @IntEnumReaderQualified ;) , //tkInteger + ( Simple : @ErrorProc; Qualified : @ErrorProc ;) , //tkChar + ( Simple : @IntEnumReader; Qualified : @IntEnumReaderQualified ;) , //tkEnumeration + ( Simple : @FloatReader; Qualified : @FloatReaderQualified ;) , //tkFloat + ( Simple : @ErrorProc; Qualified : @ErrorProc ;) , //tkSet + ( Simple : @ErrorProc; Qualified : @ErrorProc ;) , //tkMethod + ( Simple : @StringReader; Qualified : @StringReaderQualified ;) , //tkSString + ( Simple : @StringReader; Qualified : @StringReaderQualified ;) , //tkLString + ( Simple : @StringReader; Qualified : @StringReaderQualified ;) , //tkAString + ( Simple : @WideStringReader; Qualified : @WideStringReaderQualified ;) , //tkWString + ( Simple : @ErrorProc; Qualified : @ErrorProc ;) , //tkVariant + ( Simple : @ErrorProc; Qualified : @ErrorProc ;) , //tkArray + ( Simple : @ErrorProc; Qualified : @ErrorProc ;) , //tkRecord + ( Simple : @ErrorProc; Qualified : @ErrorProc ;) , //tkInterface + ( Simple : @ClassReader; Qualified : @ClassReaderQualified ;) , //tkClass + ( Simple : @ErrorProc; Qualified : @ErrorProc ;) , //tkObject + ( Simple : @ErrorProc; Qualified : @ErrorProc ;) , //tkWChar + ( Simple : @BoolReader; Qualified : @BoolReaderQualifier ;) , //tkBool + ( Simple : @Int64Reader; Qualified : @Int64ReaderQualified ;) , //tkInt64 + ( Simple : @Int64Reader; Qualified : @Int64ReaderQualified ;) , //tkQWord + ( Simple : @ErrorProc; Qualified : @ErrorProc ;) , //tkDynArray + ( Simple : @ErrorProc; Qualified : @ErrorProc ;) //tkInterfaceRaw +{$IFDEF WST_TKPROCVAR} + ,( Simple : @ErrorProc; Qualified : @ErrorProc ;) //tkProcVar +{$ENDIF WST_TKPROCVAR} +{$IFDEF WST_UNICODESTRING} + ,( Simple : @UnicodeStringReader; Qualified : @UnicodeStringReaderQualified ;) //tkUString + ,( Simple : @ErrorProc; Qualified : @ErrorProc ;) //tkUChar +{$ENDIF WST_UNICODESTRING} ), ( // Writers - ( Simple : {$IFDEF FPC}@{$ENDIF}ErrorProc; Qualified : {$IFDEF FPC}@{$ENDIF}ErrorProc ;) , //tkUnknown - ( Simple : {$IFDEF FPC}@{$ENDIF}IntEnumWriter; Qualified : {$IFDEF FPC}@{$ENDIF}IntEnumWriterQualified ;) , //tkInteger - ( Simple : {$IFDEF FPC}@{$ENDIF}ErrorProc; Qualified : {$IFDEF FPC}@{$ENDIF}ErrorProc ;) , //tkChar - ( Simple : {$IFDEF FPC}@{$ENDIF}IntEnumWriter; Qualified : {$IFDEF FPC}@{$ENDIF}IntEnumWriterQualified ;) , //tkEnumeration - ( Simple : {$IFDEF FPC}@{$ENDIF}FloatWriter; Qualified : {$IFDEF FPC}@{$ENDIF}FloatWriterQualified ;) , //tkFloat - ( Simple : {$IFDEF FPC}@{$ENDIF}ErrorProc; Qualified : {$IFDEF FPC}@{$ENDIF}ErrorProc ;) , //tkSet - ( Simple : {$IFDEF FPC}@{$ENDIF}ErrorProc; Qualified : {$IFDEF FPC}@{$ENDIF}ErrorProc ;) , //tkMethod - ( Simple : {$IFDEF FPC}@{$ENDIF}StringWriter; Qualified : {$IFDEF FPC}@{$ENDIF}StringWriterQualified ;) , //tkSString - ( Simple : {$IFDEF FPC}@{$ENDIF}StringWriter; Qualified : {$IFDEF FPC}@{$ENDIF}StringWriterQualified ;) , //tkLString - ( Simple : {$IFDEF FPC}@{$ENDIF}StringWriter; Qualified : {$IFDEF FPC}@{$ENDIF}StringWriterQualified ;) , //tkAString - ( Simple : {$IFDEF FPC}@{$ENDIF}ErrorProc; Qualified : {$IFDEF FPC}@{$ENDIF}ErrorProc ;) , //tkWString - ( Simple : {$IFDEF FPC}@{$ENDIF}ErrorProc; Qualified : {$IFDEF FPC}@{$ENDIF}ErrorProc ;) , //tkVariant - ( Simple : {$IFDEF FPC}@{$ENDIF}ErrorProc; Qualified : {$IFDEF FPC}@{$ENDIF}ErrorProc ;) , //tkArray - ( Simple : {$IFDEF FPC}@{$ENDIF}ErrorProc; Qualified : {$IFDEF FPC}@{$ENDIF}ErrorProc ;) , //tkRecord - ( Simple : {$IFDEF FPC}@{$ENDIF}ErrorProc; Qualified : {$IFDEF FPC}@{$ENDIF}ErrorProc ;) , //tkInterface - ( Simple : {$IFDEF FPC}@{$ENDIF}ClassWriter; Qualified : {$IFDEF FPC}@{$ENDIF}ClassWriterQualified ;) , //tkClass - ( Simple : {$IFDEF FPC}@{$ENDIF}ErrorProc; Qualified : {$IFDEF FPC}@{$ENDIF}ErrorProc ;) , //tkObject - ( Simple : {$IFDEF FPC}@{$ENDIF}ErrorProc; Qualified : {$IFDEF FPC}@{$ENDIF}ErrorProc ;) , //tkWChar - ( Simple : {$IFDEF FPC}@{$ENDIF}BoolWriter; Qualified : {$IFDEF FPC}@{$ENDIF}BoolWriterQualified ;) , //tkBool - ( Simple : {$IFDEF FPC}@{$ENDIF}Int64Writer; Qualified : {$IFDEF FPC}@{$ENDIF}Int64WriterQualified ;) , //tkInt64 - ( Simple : {$IFDEF FPC}@{$ENDIF}Int64Writer; Qualified : {$IFDEF FPC}@{$ENDIF}Int64WriterQualified ;) , //tkQWord - ( Simple : {$IFDEF FPC}@{$ENDIF}ErrorProc; Qualified : {$IFDEF FPC}@{$ENDIF}ErrorProc ;) , //tkDynArray - ( Simple : {$IFDEF FPC}@{$ENDIF}ErrorProc; Qualified : {$IFDEF FPC}@{$ENDIF}ErrorProc ;) //tkInterfaceRaw + ( Simple : @ErrorProc; Qualified : @ErrorProc ;) , //tkUnknown + ( Simple : @IntEnumWriter; Qualified : @IntEnumWriterQualified ;) , //tkInteger + ( Simple : @ErrorProc; Qualified : @ErrorProc ;) , //tkChar + ( Simple : @IntEnumWriter; Qualified : @IntEnumWriterQualified ;) , //tkEnumeration + ( Simple : @FloatWriter; Qualified : @FloatWriterQualified ;) , //tkFloat + ( Simple : @ErrorProc; Qualified : @ErrorProc ;) , //tkSet + ( Simple : @ErrorProc; Qualified : @ErrorProc ;) , //tkMethod + ( Simple : @StringWriter; Qualified : @StringWriterQualified ;) , //tkSString + ( Simple : @StringWriter; Qualified : @StringWriterQualified ;) , //tkLString + ( Simple : @StringWriter; Qualified : @StringWriterQualified ;) , //tkAString + ( Simple : @WideStringWriter; Qualified : @WideStringWriterQualified ;) , //tkWString + ( Simple : @ErrorProc; Qualified : @ErrorProc ;) , //tkVariant + ( Simple : @ErrorProc; Qualified : @ErrorProc ;) , //tkArray + ( Simple : @ErrorProc; Qualified : @ErrorProc ;) , //tkRecord + ( Simple : @ErrorProc; Qualified : @ErrorProc ;) , //tkInterface + ( Simple : @ClassWriter; Qualified : @ClassWriterQualified ;) , //tkClass + ( Simple : @ErrorProc; Qualified : @ErrorProc ;) , //tkObject + ( Simple : @ErrorProc; Qualified : @ErrorProc ;) , //tkWChar + ( Simple : @BoolWriter; Qualified : @BoolWriterQualified ;) , //tkBool + ( Simple : @Int64Writer; Qualified : @Int64WriterQualified ;) , //tkInt64 + ( Simple : @Int64Writer; Qualified : @Int64WriterQualified ;) , //tkQWord + ( Simple : @ErrorProc; Qualified : @ErrorProc ;) , //tkDynArray + ( Simple : @ErrorProc; Qualified : @ErrorProc ;) //tkInterfaceRaw +{$IFDEF WST_TKPROCVAR} + ,( Simple : @ErrorProc; Qualified : @ErrorProc ;) //tkProcVar +{$ENDIF WST_TKPROCVAR} +{$IFDEF WST_UNICODESTRING} + ,( Simple : @UnicodeStringWriter; Qualified : @UnicodeStringWriterQualified ;) //tkUString + ,( Simple : @ErrorProc; Qualified : @ErrorProc ;) //tkUChar +{$ENDIF WST_UNICODESTRING} ) ); {$ENDIF FPC} @@ -929,7 +1065,7 @@ var ( Simple : ErrorProc; Qualified : ErrorProc ;) , //tkMethod ( Simple : ErrorProc; Qualified : ErrorProc ;) , //tkWChar ( Simple : StringReader; Qualified : StringReaderQualified ;) , //tkLString - ( Simple : ErrorProc; Qualified : ErrorProc ;) , //tkWString + ( Simple : WideStringReader; Qualified : WideStringReaderQualified ;) , //tkWString ( Simple : ErrorProc; Qualified : ErrorProc ;) , //tkVariant ( Simple : ErrorProc; Qualified : ErrorProc ;) , //tkArray ( Simple : ErrorProc; Qualified : ErrorProc ;) , //tkRecord @@ -949,7 +1085,7 @@ var ( Simple : ErrorProc; Qualified : ErrorProc ;) , //tkMethod ( Simple : ErrorProc; Qualified : ErrorProc ;) , //tkWChar ( Simple : StringWriter; Qualified : StringWriterQualified ;) , //tkLString - ( Simple : ErrorProc; Qualified : ErrorProc ;) , //tkWString + ( Simple : WideStringWriter; Qualified : WideStringWriterQualified ;) , //tkWString ( Simple : ErrorProc; Qualified : ErrorProc ;) , //tkVariant ( Simple : ErrorProc; Qualified : ErrorProc ;) , //tkArray ( Simple : ErrorProc; Qualified : ErrorProc ;) , //tkRecord diff --git a/wst/trunk/same_process_protocol.pas b/wst/trunk/same_process_protocol.pas index c99755d30..d60f42d30 100644 --- a/wst/trunk/same_process_protocol.pas +++ b/wst/trunk/same_process_protocol.pas @@ -18,7 +18,7 @@ interface uses Classes, SysUtils, service_intf, imp_utils, - server_service_intf, server_service_imputils, base_service_intf; + server_service_intf, server_service_imputils, base_service_intf, wst_types; Const sTRANSPORT_NAME = 'SAME_PROCESS'; @@ -73,7 +73,7 @@ procedure TInProcessTransport.SendAndReceive(ARequest, AResponse: TStream); Var bffr : IRequestBuffer; {$IFDEF WST_DBG} - s : string; + s : TBinaryString; i : Int64; {$ENDIF WST_DBG} begin diff --git a/wst/trunk/synapse_http_protocol.pas b/wst/trunk/synapse_http_protocol.pas index 836ccd6d1..90277aaa7 100644 --- a/wst/trunk/synapse_http_protocol.pas +++ b/wst/trunk/synapse_http_protocol.pas @@ -163,7 +163,7 @@ procedure THTTPTransport.SendAndReceive(ARequest, AResponse: TStream); end; var - s : string; + s : TBinaryString; {$ENDIF} begin FConnection.Document.Size := 0; diff --git a/wst/trunk/synapse_tcp_protocol.pas b/wst/trunk/synapse_tcp_protocol.pas index 82c70d402..5c6a37838 100644 --- a/wst/trunk/synapse_tcp_protocol.pas +++ b/wst/trunk/synapse_tcp_protocol.pas @@ -119,13 +119,13 @@ begin Try wrtr := CreateBinaryWriter(buffStream); wrtr.WriteInt32S(0); - wrtr.WriteStr(Target); - wrtr.WriteStr(ContentType); - wrtr.WriteStr(Self.Format); + wrtr.WriteAnsiStr(Target); + wrtr.WriteAnsiStr(ContentType); + wrtr.WriteAnsiStr(Self.Format); SetLength(strBuff,ARequest.Size); ARequest.Position := 0; ARequest.Read(strBuff[1],Length(strBuff)); - wrtr.WriteStr(strBuff); + wrtr.WriteAnsiStr(strBuff); buffStream.Position := 0; wrtr.WriteInt32S(buffStream.Size-4); diff --git a/wst/trunk/tests/test_suite/test_suite_utils.pas b/wst/trunk/tests/test_suite/test_suite_utils.pas index dc407eed4..07bc5e9d6 100644 --- a/wst/trunk/tests/test_suite/test_suite_utils.pas +++ b/wst/trunk/tests/test_suite/test_suite_utils.pas @@ -27,6 +27,7 @@ const function CompareNodes(const A,B : TDOMNode) : Boolean;overload; function wstExpandLocalFileName(const AFileName : string) : string; + function DumpMemory(AMem : Pointer; const ALength : PtrInt) : ansistring; implementation @@ -35,6 +36,17 @@ begin Result := AFileName; end; +function DumpMemory(AMem : Pointer; const ALength : PtrInt) : ansistring; +var + i : PtrInt; +begin + Result := ''; + for i := 0 to Pred(ALength) do begin + Result := Result + '[' + IntToStr(Ord(PAnsiChar(AMem)^)) + ']'; + Inc(PAnsiChar(AMem)); + end; +end; + function CompareNodes(const A,B : TDOMNode) : Boolean;overload; var ca, cb : TDOMNode; diff --git a/wst/trunk/tests/test_suite/testformatter_unit.pas b/wst/trunk/tests/test_suite/testformatter_unit.pas index 4e4ed484b..d86ad0381 100644 --- a/wst/trunk/tests/test_suite/testformatter_unit.pas +++ b/wst/trunk/tests/test_suite/testformatter_unit.pas @@ -41,11 +41,19 @@ type FVal_Bool: Boolean; FVal_Enum: TTestEnum; FVal_String: string; +{$IFDEF WST_UNICODESTRING} + FVal_UnicodeString: UnicodeString; +{$ENDIF WST_UNICODESTRING} + FVal_WideString: WideString; Published property Val_32S : LongInt Read FVal_32S Write FVal_32S; property Val_Enum : TTestEnum Read FVal_Enum Write FVal_Enum; property Val_Bool : Boolean Read FVal_Bool Write FVal_Bool; property Val_String : string Read FVal_String Write FVal_String; + property Val_WideString : WideString Read FVal_WideString Write FVal_WideString; +{$IFDEF WST_UNICODESTRING} + property Val_UnicodeString : UnicodeString Read FVal_UnicodeString Write FVal_UnicodeString; +{$ENDIF WST_UNICODESTRING} End; { TClass_B } @@ -58,6 +66,11 @@ type FVal_Bool: Boolean; FVal_Enum: TTestEnum; FVal_String: string; +{$IFDEF WST_UNICODESTRING} + FVal_UnicodeString: UnicodeString; +{$ENDIF WST_UNICODESTRING} + FVal_WideString: WideString; + private procedure SetObjProp(const AValue: TClass_A); Public constructor Create();override; @@ -67,6 +80,10 @@ type property Val_Enum : TTestEnum Read FVal_Enum Write FVal_Enum; property Val_Bool : Boolean Read FVal_Bool Write FVal_Bool; property Val_String : string Read FVal_String Write FVal_String; + property Val_WideString : WideString Read FVal_WideString Write FVal_WideString; +{$IFDEF WST_UNICODESTRING} + property Val_UnicodeString : UnicodeString Read FVal_UnicodeString Write FVal_UnicodeString; +{$ENDIF WST_UNICODESTRING} property ObjProp : TClass_A Read FObjProp Write SetObjProp stored True; property NonStored : Integer Read FNonStored Write FNonStored stored false; End; @@ -216,7 +233,31 @@ type property IntSimpleAtt_Exemple : Integer read FIntSimpleAtt_Exemple write FIntSimpleAtt_Exemple; property BoolSimpleAtt_Exemple : Boolean read FBoolSimpleAtt_Exemple write FBoolSimpleAtt_Exemple; end; + + T_ComplexWideStringContent = class(TComplexWideStringContentRemotable) + private + FBoolSimpleAtt_Exemple: Boolean; + FIntSimpleAtt_Exemple: Integer; + FStrSimpleAtt_Exemple: string; + published + property StrSimpleAtt_Exemple : string read FStrSimpleAtt_Exemple write FStrSimpleAtt_Exemple; + property IntSimpleAtt_Exemple : Integer read FIntSimpleAtt_Exemple write FIntSimpleAtt_Exemple; + property BoolSimpleAtt_Exemple : Boolean read FBoolSimpleAtt_Exemple write FBoolSimpleAtt_Exemple; + end; +{$IFDEF WST_UNICODESTRING} + T_ComplexUnicodeStringContent = class(TComplexUnicodeStringContentRemotable) + private + FBoolSimpleAtt_Exemple: Boolean; + FIntSimpleAtt_Exemple: Integer; + FStrSimpleAtt_Exemple: string; + published + property StrSimpleAtt_Exemple : string read FStrSimpleAtt_Exemple write FStrSimpleAtt_Exemple; + property IntSimpleAtt_Exemple : Integer read FIntSimpleAtt_Exemple write FIntSimpleAtt_Exemple; + property BoolSimpleAtt_Exemple : Boolean read FBoolSimpleAtt_Exemple write FBoolSimpleAtt_Exemple; + end; +{$ENDIF WST_UNICODESTRING} + { TClass_CplxSimpleContent } TClass_CplxSimpleContent = class(TBaseComplexRemotable) @@ -233,6 +274,10 @@ type FVal_CplxInt8S: T_ComplexInt8SContent; FVal_CplxInt8U: T_ComplexInt8UContent; FVal_CplxString: T_ComplexStringContent; +{$IFDEF WST_UNICODESTRING} + FVal_CplxUnicodeString: T_ComplexUnicodeStringContent; +{$ENDIF WST_UNICODESTRING} + FVal_CplxWideString: T_ComplexWideStringContent; public constructor Create();override; destructor Destroy();override; @@ -252,6 +297,10 @@ type property Val_CplxExtended : T_ComplexFloatExtendedContent read FVal_CplxExtended write FVal_CplxExtended; property Val_CplxDouble : T_ComplexFloatDoubleContent read FVal_CplxDouble write FVal_CplxDouble; property Val_CplxString : T_ComplexStringContent read FVal_CplxString write FVal_CplxString; + property Val_CplxWideString : T_ComplexWideStringContent read FVal_CplxWideString write FVal_CplxWideString; +{$IFDEF WST_UNICODESTRING} + property Val_CplxUnicodeString : T_ComplexUnicodeStringContent read FVal_CplxUnicodeString write FVal_CplxUnicodeString; +{$ENDIF WST_UNICODESTRING} property Elt_Exemple : string read FElt_Exemple write FElt_Exemple; end; @@ -322,17 +371,32 @@ type procedure Test_Int_8; procedure Test_Int_8_ScopeData; procedure Test_Int_16; + procedure Test_Int_16_ScopeData; procedure Test_Int_32; + procedure Test_Int_32_ScopeData; procedure Test_Int_64; + procedure Test_Int_64_ScopeData; procedure Test_Single_4; + procedure Test_Single_4_ScopeData; procedure Test_Double_8; + procedure Test_Double_8_ScopeData; procedure Test_Currency_8; + procedure Test_Currency_8_ScopeData; procedure Test_Extended_10; + procedure Test_Extended_10_ScopeData; - procedure Test_String; + procedure Test_AnsiString; + procedure Test_AnsiString_ScopeData; +{$IFDEF WST_UNICODESTRING} + procedure Test_UnicodeString; +{$ENDIF WST_UNICODESTRING} + procedure Test_WideString; + procedure Test_WideString_ScopeData; procedure Test_Bool; + procedure Test_Bool_ScopeData; procedure Test_Enum; + procedure Test_Enum_ScopeData; end; { TTestFormatter } @@ -355,6 +419,10 @@ type procedure Test_CplxFloatExtendedSimpleContent_WithClass; procedure Test_CplxStringSimpleContent_WithClass; + procedure Test_CplxWideStringSimpleContent_WithClass; +{$IFDEF WST_UNICODESTRING} + procedure Test_CplxUnicodeStringSimpleContent_WithClass; +{$ENDIF WST_UNICODESTRING} procedure Test_Object(); procedure Test_Object_Nil(); @@ -621,7 +689,7 @@ begin dtDouble : ok := ( A^.DoubleData = A^.DoubleData ); dtExtended : ok := ( A^.ExtendedData = A^.ExtendedData ); dtCurrency : ok := ( A^.CurrencyData = A^.CurrencyData ); - dtString : ok := ( A^.StrData = A^.StrData ); + dtAnsiString : ok := ( A^.AnsiStrData = A^.AnsiStrData ); dtObject : ok := CompareObjectBuffers(A^.ObjectData,B^.ObjectData); dtArray : ok := CompareObjectBuffers(A^.ArrayData,B^.ArrayData); end; @@ -696,7 +764,7 @@ end; procedure TTestFormatterSimpleType.Test_Int_8_ScopeData; const VAL_1 = 12; VAL_2 = -10; -Var +var f : IFormatterBase; s : TMemoryStream; x : string; @@ -788,6 +856,58 @@ begin End; end; +procedure TTestFormatterSimpleType.Test_Int_16_ScopeData; +const VAL_1 = 1210; VAL_2 : SmallInt = -1012; +Var + f : IFormatterBase; + s : TMemoryStream; + x : string; + intVal_U : WOrd; intVal_S : SmallInt; +begin + s := Nil; + Try + intVal_U := VAL_1; + f := CreateFormatter(TypeInfo(TClass_Int)); + f.BeginObject('Root',TypeInfo(TClass_Int)); + f.PutScopeInnerValue(TypeInfo(Word),intVal_U); + f.EndScope(); + + s := TMemoryStream.Create(); + f.SaveToStream(s); + intVal_U := 0; + + f := CreateFormatter(TypeInfo(TClass_Int)); + s.Position := 0; + f.LoadFromStream(s); + x := 'Root'; + f.BeginObjectRead(x,TypeInfo(TClass_Int)); + f.GetScopeInnerValue(TypeInfo(Word),intVal_U); + f.EndScopeRead(); + CheckEquals(VAL_1,intVal_U); + /// + intVal_S := VAL_2; + f := CreateFormatter(TypeInfo(TClass_Int)); + f.BeginObject('Root',TypeInfo(TClass_Int)); + f.PutScopeInnerValue(TypeInfo(SmallInt),intVal_S); + f.EndScope(); + + s := TMemoryStream.Create(); + f.SaveToStream(s); + intVal_S := 0; + + f := CreateFormatter(TypeInfo(TClass_Int)); + s.Position := 0; + f.LoadFromStream(s); + x := 'Root'; + f.BeginObjectRead(x,TypeInfo(TClass_Int)); + f.GetScopeInnerValue(TypeInfo(SmallInt),intVal_S); + f.EndScopeRead(); + CheckEquals(VAL_2,intVal_S); + Finally + s.Free(); + End; +end; + procedure TTestFormatterSimpleType.Test_Int_32; const VAL_1 = 121076; VAL_2 : LongInt = -101276; Var @@ -830,6 +950,58 @@ begin End; end; +procedure TTestFormatterSimpleType.Test_Int_32_ScopeData; +const VAL_1 = 121076; VAL_2 : LongInt = -101276; +var + f : IFormatterBase; + s : TMemoryStream; + x : string; + intVal_U : LongWord; intVal_S : LongInt; +begin + s := Nil; + Try + intVal_U := VAL_1; + f := CreateFormatter(TypeInfo(TClass_Int)); + f.BeginObject('Root',TypeInfo(TClass_Int)); + f.PutScopeInnerValue(TypeInfo(LongWord),intVal_U); + f.EndScope(); + + s := TMemoryStream.Create(); + f.SaveToStream(s); + intVal_U := 0; + + f := CreateFormatter(TypeInfo(TClass_Int)); + s.Position := 0; + f.LoadFromStream(s); + x := 'Root'; + f.BeginObjectRead(x,TypeInfo(TClass_Int)); + f.GetScopeInnerValue(TypeInfo(LongWord),intVal_U); + f.EndScopeRead(); + CheckEquals(VAL_1,intVal_U); + /// + intVal_S := VAL_2; + f := CreateFormatter(TypeInfo(TClass_Int)); + f.BeginObject('Root',TypeInfo(TClass_Int)); + f.PutScopeInnerValue(TypeInfo(LongInt),intVal_S); + f.EndScope(); + + s := TMemoryStream.Create(); + f.SaveToStream(s); + intVal_S := 0; + + f := CreateFormatter(TypeInfo(TClass_Int)); + s.Position := 0; + f.LoadFromStream(s); + x := 'Root'; + f.BeginObjectRead(x,TypeInfo(TClass_Int)); + f.GetScopeInnerValue(TypeInfo(LongInt),intVal_S); + f.EndScopeRead(); + CheckEquals(VAL_2,intVal_S); + Finally + s.Free(); + End; +end; + procedure TTestFormatterSimpleType.Test_Int_64; const VAL_1 = 121076; VAL_2 : Int64 = -101276; Var @@ -872,9 +1044,61 @@ begin End; end; +procedure TTestFormatterSimpleType.Test_Int_64_ScopeData; +const VAL_1 = 121076; VAL_2 : Int64 = -101276; +var + f : IFormatterBase; + s : TMemoryStream; + x : string; + intVal_U : QWord; intVal_S : Int64; +begin + s := Nil; + Try + intVal_U := VAL_1; + f := CreateFormatter(TypeInfo(TClass_Int)); + f.BeginObject('Root',TypeInfo(TClass_Int)); + f.PutScopeInnerValue(TypeInfo(QWord),intVal_U); + f.EndScope(); + + s := TMemoryStream.Create(); + f.SaveToStream(s); + intVal_U := 0; + + f := CreateFormatter(TypeInfo(TClass_Int)); + s.Position := 0; + f.LoadFromStream(s); + x := 'Root'; + f.BeginObjectRead(x,TypeInfo(TClass_Int)); + f.GetScopeInnerValue(TypeInfo(QWord),intVal_U); + f.EndScopeRead(); + CheckEquals(VAL_1,intVal_U); + /// + intVal_S := VAL_2; + f := CreateFormatter(TypeInfo(TClass_Int)); + f.BeginObject('Root',TypeInfo(TClass_Int)); + f.PutScopeInnerValue(TypeInfo(Int64),intVal_S); + f.EndScope(); + + s := TMemoryStream.Create(); + f.SaveToStream(s); + intVal_S := 0; + + f := CreateFormatter(TypeInfo(TClass_Int)); + s.Position := 0; + f.LoadFromStream(s); + x := 'Root'; + f.BeginObjectRead(x,TypeInfo(TClass_Int)); + f.GetScopeInnerValue(TypeInfo(Int64),intVal_S); + f.EndScopeRead(); + CheckEquals(VAL_2,intVal_S); + Finally + s.Free(); + End; +end; + procedure TTestFormatterSimpleType.Test_Single_4; const VAL_1 : single = 12.10; -Var +var f : IFormatterBase; s : TMemoryStream; x : string; @@ -908,6 +1132,42 @@ begin End; end; +procedure TTestFormatterSimpleType.Test_Single_4_ScopeData; +const VAL_1 : single = 12.10; +var + f : IFormatterBase; + s : TMemoryStream; + x : string; + tmpVal : Single; +begin + s := Nil; + Try + tmpVal := VAL_1; + f := CreateFormatter(TypeInfo(TClass_Float)); + + f.BeginObject('Root',TypeInfo(TClass_Float)); + f.PutScopeInnerValue(TypeInfo(Single),tmpVal); + f.EndScope(); + + s := TMemoryStream.Create(); + f.SaveToStream(s);s.SaveToFile(ClassName + '.Test_Single_4.xml'); + tmpVal := 0; + + f := CreateFormatter(TypeInfo(TClass_Float)); + s.Position := 0; + f.LoadFromStream(s); + x := 'Root'; + f.BeginObjectRead(x,TypeInfo(TClass_Float)); + x := 'tmpVal'; + f.GetScopeInnerValue(TypeInfo(Single),tmpVal); + f.EndScopeRead(); + + CheckEquals(VAL_1,tmpVal);//,0.00001); + Finally + s.Free(); + End; +end; + procedure TTestFormatterSimpleType.Test_Double_8; const VAL_1 : Double = 12.10; Var @@ -944,6 +1204,42 @@ begin End; end; +procedure TTestFormatterSimpleType.Test_Double_8_ScopeData; +const VAL_1 : Double = 12.10; +Var + f : IFormatterBase; + s : TMemoryStream; + x : string; + tmpVal : Double; +begin + s := Nil; + Try + tmpVal := VAL_1; + f := CreateFormatter(TypeInfo(TClass_Float)); + + f.BeginObject('Root',TypeInfo(TClass_Float)); + f.PutScopeInnerValue(TypeInfo(Double),tmpVal); + f.EndScope(); + + s := TMemoryStream.Create(); + f.SaveToStream(s);s.SaveToFile(ClassName + '.Test_Double_8.xml'); + tmpVal := 0; + + f := CreateFormatter(TypeInfo(TClass_Float)); + s.Position := 0; + f.LoadFromStream(s); + x := 'Root'; + f.BeginObjectRead(x,TypeInfo(TClass_Float)); + x := 'tmpVal'; + f.GetScopeInnerValue(TypeInfo(Double),tmpVal); + f.EndScopeRead(); + + CheckEquals(VAL_1,tmpVal); + Finally + s.Free(); + End; +end; + procedure TTestFormatterSimpleType.Test_Currency_8; const VAL_1 : Currency = 12.10; Var @@ -980,6 +1276,42 @@ begin End; end; +procedure TTestFormatterSimpleType.Test_Currency_8_ScopeData; +const VAL_1 : Currency = 12.10; +Var + f : IFormatterBase; + s : TMemoryStream; + x : string; + tmpVal : Currency; +begin + s := Nil; + Try + tmpVal := VAL_1; + f := CreateFormatter(TypeInfo(TClass_Float)); + + f.BeginObject('Root',TypeInfo(TClass_Float)); + f.PutScopeInnerValue(TypeInfo(Currency),tmpVal); + f.EndScope(); + + s := TMemoryStream.Create(); + f.SaveToStream(s);s.SaveToFile(ClassName + '.Test_Currency_8.xml'); + tmpVal := 0; + + f := CreateFormatter(TypeInfo(TClass_Float)); + s.Position := 0; + f.LoadFromStream(s); + x := 'Root'; + f.BeginObjectRead(x,TypeInfo(TClass_Float)); + x := 'tmpVal'; + f.GetScopeInnerValue(TypeInfo(Currency),tmpVal); + f.EndScopeRead(); + + CheckEquals(VAL_1,tmpVal); + Finally + s.Free(); + End; +end; + procedure TTestFormatterSimpleType.Test_Extended_10; const VAL_1 : Extended = 12.10; Var @@ -1016,29 +1348,65 @@ begin End; end; -procedure TTestFormatterSimpleType.Test_String; +procedure TTestFormatterSimpleType.Test_Extended_10_ScopeData; +const VAL_1 : Extended = 12.10; +Var + f : IFormatterBase; + s : TMemoryStream; + x : string; + tmpVal : Extended; +begin + s := Nil; + Try + tmpVal := VAL_1; + f := CreateFormatter(TypeInfo(TClass_Float)); + + f.BeginObject('Root',TypeInfo(TClass_Float)); + f.PutScopeInnerValue(TypeInfo(Extended),tmpVal); + f.EndScope(); + + s := TMemoryStream.Create(); + f.SaveToStream(s);s.SaveToFile(ClassName + '.Test_Extended_10.xml'); + tmpVal := 0; + + f := CreateFormatter(TypeInfo(TClass_Float)); + s.Position := 0; + f.LoadFromStream(s); + x := 'Root'; + f.BeginObjectRead(x,TypeInfo(TClass_Float)); + x := 'tmpVal'; + f.GetScopeInnerValue(TypeInfo(Extended),tmpVal); + f.EndScopeRead(); + + CheckEquals(VAL_1,tmpVal); + Finally + s.Free(); + End; +end; + +procedure TTestFormatterSimpleType.Test_AnsiString; const VAL_1 = 'AzErTy'; VAL_2 = 'QwErTy'; Var f : IFormatterBase; s : TMemoryStream; x : string; - intVal_1 : string; intVal_3 : string; + locVal_1 : ansistring; locVal_3 : ansistring; begin s := Nil; Try - intVal_1 := VAL_1; - intVal_3 := VAL_2; + locVal_1 := VAL_1; + locVal_3 := VAL_2; f := CreateFormatter(TypeInfo(TClass_Int)); f.BeginObject('Root',TypeInfo(TClass_Int)); - f.Put('intVal_1',TypeInfo(string),intVal_1); - f.Put('intVal_3',TypeInfo(string),intVal_3); + f.Put('intVal_1',TypeInfo(ansistring),locVal_1); + f.Put('intVal_3',TypeInfo(ansistring),locVal_3); f.EndScope(); s := TMemoryStream.Create(); f.SaveToStream(s); - intVal_1 := ''; - intVal_3 := 'yyyyyyyy'; + locVal_1 := ''; + locVal_3 := 'yyyyyyyy'; f := CreateFormatter(TypeInfo(TClass_Int)); s.Position := 0; @@ -1046,13 +1414,169 @@ begin x := 'Root'; f.BeginObjectRead(x,TypeInfo(TClass_Int)); x := 'intVal_1'; - f.Get(TypeInfo(string),x,intVal_1); + f.Get(TypeInfo(ansistring),x,locVal_1); x := 'intVal_3'; - f.Get(TypeInfo(string),x,intVal_3); + f.Get(TypeInfo(ansistring),x,locVal_3); f.EndScopeRead(); - CheckEquals(VAL_1,intVal_1); - CheckEquals(VAL_2,intVal_3); + CheckEquals(VAL_1,locVal_1); + CheckEquals(VAL_2,locVal_3); + Finally + s.Free(); + End; +end; + +procedure TTestFormatterSimpleType.Test_AnsiString_ScopeData; +const VAL_1 = 'AzErTy1234'; +Var + f : IFormatterBase; + s : TMemoryStream; + x : string; + locVal_1 : ansistring; +begin + s := Nil; + Try + locVal_1 := VAL_1; + f := CreateFormatter(TypeInfo(TClass_Int)); + + f.BeginObject('Root',TypeInfo(TClass_Int)); + f.PutScopeInnerValue(TypeInfo(ansistring),locVal_1); + f.EndScope(); + + s := TMemoryStream.Create(); + f.SaveToStream(s); + locVal_1 := ''; + + f := CreateFormatter(TypeInfo(TClass_Int)); + s.Position := 0; + f.LoadFromStream(s); + x := 'Root'; + f.BeginObjectRead(x,TypeInfo(TClass_Int)); + f.GetScopeInnerValue(TypeInfo(ansistring),locVal_1); + f.EndScopeRead(); + + CheckEquals(VAL_1,locVal_1); + Finally + s.Free(); + End; +end; + +{$IFDEF WST_UNICODESTRING} +procedure TTestFormatterSimpleType.Test_UnicodeString; +//var VAL_1 : UnicodeString = 'AzErTy123'; VAL_2 : UnicodeString = 'QwErTy85'; +Var + f : IFormatterBase; + s : TMemoryStream; + x : string; VAL_1, VAL_2 : UnicodeString; + locVal_1 : UnicodeString; locVal_3 : UnicodeString; +begin + VAL_1 := WideString('AzErTy123'); VAL_2 := 'QwErTy85'; + s := Nil; + Try + locVal_1 := VAL_1; + locVal_3 := VAL_2; + f := CreateFormatter(TypeInfo(TClass_Int)); + + f.BeginObject('Root',TypeInfo(TClass_Int)); + f.Put('intVal_1',TypeInfo(UnicodeString),locVal_1); + f.Put('intVal_3',TypeInfo(UnicodeString),locVal_3); + f.EndScope(); + + s := TMemoryStream.Create(); + f.SaveToStream(s); s.SaveToFile(Self.ClassName + '.' + 'Test_UnicodeString.xml'); + locVal_1 := ''; + locVal_3 := 'yyyyyyyy'; + + f := CreateFormatter(TypeInfo(TClass_Int)); + s.Position := 0; + f.LoadFromStream(s); + x := 'Root'; + f.BeginObjectRead(x,TypeInfo(TClass_Int)); + x := 'intVal_1'; + f.Get(TypeInfo(UnicodeString),x,locVal_1); + x := 'intVal_3'; + f.Get(TypeInfo(UnicodeString),x,locVal_3); + f.EndScopeRead(); + Check(VAL_1 = locVal_1, 'Expected : "'+VAL_1+'", actual : "'+locVal_1+'"'); + Check(VAL_2 = locVal_3, Format('Expected : "%s", actual : "%s"',[VAL_2,locVal_3])); + Finally + s.Free(); + End; +end; +{$ENDIF WST_UNICODESTRING} + +procedure TTestFormatterSimpleType.Test_WideString; +const VAL_1 : WideString = 'AzErTy123'; VAL_2 : WideString = 'QwErTy85'; +Var + f : IFormatterBase; + s : TMemoryStream; + x : string; + locVal_1 : WideString; locVal_3 : WideString; +begin + s := Nil; + Try + locVal_1 := VAL_1; + locVal_3 := VAL_2; + f := CreateFormatter(TypeInfo(TClass_Int)); + + f.BeginObject('Root',TypeInfo(TClass_Int)); + f.Put('intVal_1',TypeInfo(WideString),locVal_1); + f.Put('intVal_3',TypeInfo(WideString),locVal_3); + f.EndScope(); + + s := TMemoryStream.Create(); + f.SaveToStream(s); s.SaveToFile(Self.ClassName + '.' + 'Test_WideString.xml'); + locVal_1 := ''; + locVal_3 := 'yyyyyyyy'; + + f := CreateFormatter(TypeInfo(TClass_Int)); + s.Position := 0; + f.LoadFromStream(s); + x := 'Root'; + f.BeginObjectRead(x,TypeInfo(TClass_Int)); + x := 'intVal_1'; + f.Get(TypeInfo(WideString),x,locVal_1); + x := 'intVal_3'; + f.Get(TypeInfo(WideString),x,locVal_3); + f.EndScopeRead(); + + Check(VAL_1 = locVal_1); + Check(VAL_2 = locVal_3); + Finally + s.Free(); + End; +end; + +procedure TTestFormatterSimpleType.Test_WideString_ScopeData; +const VAL_1 = 'AzErTy1234'; +Var + f : IFormatterBase; + s : TMemoryStream; + x : string; + locVal_1 : widestring; +begin + s := Nil; + Try + locVal_1 := VAL_1; + f := CreateFormatter(TypeInfo(TClass_Int)); + + f.BeginObject('Root',TypeInfo(TClass_Int)); + f.PutScopeInnerValue(TypeInfo(widestring),locVal_1); + f.EndScope(); + + s := TMemoryStream.Create(); + f.SaveToStream(s); + locVal_1 := ''; + + f := CreateFormatter(TypeInfo(TClass_Int)); + s.Position := 0; + f.LoadFromStream(s); + x := 'Root'; + f.BeginObjectRead(x,TypeInfo(TClass_Int)); + f.GetScopeInnerValue(TypeInfo(widestring),locVal_1); + f.EndScopeRead(); + + CheckEquals(VAL_1,locVal_1); Finally s.Free(); End; @@ -1100,6 +1624,62 @@ begin End; end; +procedure TTestFormatterSimpleType.Test_Bool_ScopeData; +const VAL_1 = True; VAL_2 = False; +Var + f : IFormatterBase; + s : TMemoryStream; + x : string; + locVal_1 : Boolean; +begin + s := Nil; + Try + locVal_1 := VAL_1; + f := CreateFormatter(TypeInfo(TClass_Int)); + + f.BeginObject('Root',TypeInfo(TClass_Int)); + f.PutScopeInnerValue(TypeInfo(Boolean),locVal_1); + f.EndScope(); + + s := TMemoryStream.Create(); + f.SaveToStream(s); + locVal_1 := not locVal_1; + + f := CreateFormatter(TypeInfo(TClass_Int)); + s.Position := 0; + f.LoadFromStream(s); + x := 'Root'; + f.BeginObjectRead(x,TypeInfo(TClass_Int)); + f.GetScopeInnerValue(TypeInfo(Boolean),locVal_1); + f.EndScopeRead(); + + CheckEquals(VAL_1,locVal_1); + //----------- + locVal_1 := VAL_2; + f := CreateFormatter(TypeInfo(TClass_Int)); + + f.BeginObject('Root',TypeInfo(TClass_Int)); + f.PutScopeInnerValue(TypeInfo(Boolean),locVal_1); + f.EndScope(); + + s := TMemoryStream.Create(); + f.SaveToStream(s); + locVal_1 := not locVal_1; + + f := CreateFormatter(TypeInfo(TClass_Int)); + s.Position := 0; + f.LoadFromStream(s); + x := 'Root'; + f.BeginObjectRead(x,TypeInfo(TClass_Int)); + f.GetScopeInnerValue(TypeInfo(Boolean),locVal_1); + f.EndScopeRead(); + + CheckEquals(VAL_2,locVal_1); + Finally + s.Free(); + End; +end; + procedure TTestFormatterSimpleType.Test_Enum; const VAL_1 = teTwo; VAL_2 = teFour; Var @@ -1142,6 +1722,41 @@ begin End; end; +procedure TTestFormatterSimpleType.Test_Enum_ScopeData; +const VAL_1 = teTwo; +Var + f : IFormatterBase; + s : TMemoryStream; + x : string; + intVal_1 : TTestEnum; +begin + s := Nil; + Try + intVal_1 := VAL_1; + f := CreateFormatter(TypeInfo(TClass_Int)); + + f.BeginObject('Root',TypeInfo(TClass_Enum)); + f.PutScopeInnerValue(TypeInfo(TTestEnum),intVal_1); + f.EndScope(); + + s := TMemoryStream.Create(); + f.SaveToStream(s); + intVal_1 := teOne; + + f := CreateFormatter(TypeInfo(TClass_Int)); + s.Position := 0; + f.LoadFromStream(s); + x := 'Root'; + f.BeginObjectRead(x,TypeInfo(TClass_Int)); + f.GetScopeInnerValue(TypeInfo(TTestEnum),intVal_1); + f.EndScopeRead(); + + CheckEquals(Ord(VAL_1),Ord(intVal_1)); + Finally + s.Free(); + End; +end; + class function TTestFormatter.SupportNamedArrayItem() : Boolean; begin Result := False; @@ -1736,6 +2351,134 @@ begin end; end; +procedure TTestFormatter.Test_CplxWideStringSimpleContent_WithClass; +const VAL_S = 'web services toolkit'; + VAL_STR_S = 'Test Attribute S'; +var + f : IFormatterBase; + s : TMemoryStream; + a : TClass_CplxSimpleContent; + ns : TComplexWideStringContentRemotable; + x : string; +begin + if not Support_ComplextType_with_SimpleContent() then + Exit; + + s := nil; + ns := TComplexWideStringContentRemotable.Create(); + a := TClass_CplxSimpleContent.Create(); + try + a.Val_CplxWideString := T_ComplexWideStringContent.Create(); + a.Val_CplxWideString.Value := VAL_S; + a.Val_CplxInt32S.Free(); + a.Val_CplxInt32S := nil; + a.Val_CplxInt32U.Free(); + a.Val_CplxInt32U := nil; + + ns.Value := VAL_STR_S; + + f := CreateFormatter(TypeInfo(TClass_Int)); + + f.BeginObject('Root',TypeInfo(TClass_Int)); + f.Put('o1',TypeInfo(TClass_CplxSimpleContent),a); + f.Put('ns',TypeInfo(TComplexWideStringContentRemotable),ns); + f.EndScope(); + + s := TMemoryStream.Create(); + f.SaveToStream(s); s.SaveToFile(ClassName + '.txt'); + FreeAndNil(a); + + a := TClass_CplxSimpleContent.Create(); + a.Val_CplxInt32S.Free(); + a.Val_CplxInt32S := nil; + a.Val_CplxInt32U.Free(); + a.Val_CplxInt32U := nil; + a.Val_CplxWideString := T_ComplexWideStringContent.Create(); + f := CreateFormatter(TypeInfo(TClass_Int)); + s.Position := 0; + f.LoadFromStream(s); + x := 'Root'; + f.BeginObjectRead(x,TypeInfo(TClass_Int)); + x := 'o1'; + f.Get(TypeInfo(TClass_CplxSimpleContent),x,a); + x := 'ns'; + f.Get(TypeInfo(TComplexWideStringContentRemotable),x,ns); + f.EndScopeRead(); + + CheckEquals(VAL_S,a.Val_CplxWideString.Value,'VAL_S <> a.Val_CplxWideString.Value'); + CheckEquals(VAL_STR_S,ns.Value,'VAL_STR_S <> ns.Value'); + finally + FreeAndNil(ns); + a.Free(); + s.Free(); + end; +end; + +{$IFDEF WST_UNICODESTRING} +procedure TTestFormatter.Test_CplxUnicodeStringSimpleContent_WithClass; +const VAL_S = 'web services toolkit'; + VAL_STR_S = 'Test Attribute S'; +var + f : IFormatterBase; + s : TMemoryStream; + a : TClass_CplxSimpleContent; + ns : TComplexUnicodeStringContentRemotable; + x : string; +begin + if not Support_ComplextType_with_SimpleContent() then + Exit; + + s := nil; + ns := TComplexUnicodeStringContentRemotable.Create(); + a := TClass_CplxSimpleContent.Create(); + try + a.Val_CplxUnicodeString := T_ComplexUnicodeStringContent.Create(); + a.Val_CplxUnicodeString.Value := VAL_S; + a.Val_CplxInt32S.Free(); + a.Val_CplxInt32S := nil; + a.Val_CplxInt32U.Free(); + a.Val_CplxInt32U := nil; + + ns.Value := VAL_STR_S; + + f := CreateFormatter(TypeInfo(TClass_Int)); + + f.BeginObject('Root',TypeInfo(TClass_Int)); + f.Put('o1',TypeInfo(TClass_CplxSimpleContent),a); + f.Put('ns',TypeInfo(TComplexUnicodeStringContentRemotable),ns); + f.EndScope(); + + s := TMemoryStream.Create(); + f.SaveToStream(s); s.SaveToFile(ClassName + '.txt'); + FreeAndNil(a); + + a := TClass_CplxSimpleContent.Create(); + a.Val_CplxInt32S.Free(); + a.Val_CplxInt32S := nil; + a.Val_CplxInt32U.Free(); + a.Val_CplxInt32U := nil; + a.Val_CplxUnicodeString := T_ComplexUnicodeStringContent.Create(); + f := CreateFormatter(TypeInfo(TClass_Int)); + s.Position := 0; + f.LoadFromStream(s); + x := 'Root'; + f.BeginObjectRead(x,TypeInfo(TClass_Int)); + x := 'o1'; + f.Get(TypeInfo(TClass_CplxSimpleContent),x,a); + x := 'ns'; + f.Get(TypeInfo(TComplexUnicodeStringContentRemotable),x,ns); + f.EndScopeRead(); + + CheckEquals(VAL_S,a.Val_CplxUnicodeString.Value,'VAL_S <> a.Val_CplxUnicodeString.Value'); + CheckEquals(VAL_STR_S,ns.Value,'VAL_STR_S <> ns.Value'); + finally + FreeAndNil(ns); + a.Free(); + s.Free(); + end; +end; +{$ENDIF WST_UNICODESTRING} + procedure TTestFormatter.Test_Object(); Var f : IFormatterBase; @@ -1749,7 +2492,15 @@ begin a.Val_Bool := False; a.Val_Enum := teThree; a.Val_String := '123'; + a.Val_WideString := 'wide123'; +{$IFDEF WST_UNICODESTRING} + a.Val_UnicodeString := 'unicode123'; +{$ENDIF WST_UNICODESTRING} a.ObjProp.Val_String := '456'; + a.ObjProp.Val_WideString := 'wide456'; +{$IFDEF WST_UNICODESTRING} + a.ObjProp.Val_UnicodeString := 'unicode456'; +{$ENDIF WST_UNICODESTRING} a.ObjProp.Val_Enum := teFour; a.ObjProp.Val_Bool := True; a.ObjProp.Val_32S := 121076; @@ -1778,10 +2529,18 @@ begin CheckEquals(False,a.Val_Bool); CheckEquals(Ord(teThree),Ord(a.Val_Enum)); CheckEquals('123',a.Val_String); + CheckEquals('wide123',a.Val_WideString); +{$IFDEF WST_UNICODESTRING} + CheckEquals('unicode123',a.Val_UnicodeString); +{$ENDIF WST_UNICODESTRING} CheckEquals(True,a.ObjProp.Val_Bool); CheckEquals(Ord(teFour),Ord(a.ObjProp.Val_Enum)); CheckEquals('456',a.ObjProp.Val_String); + CheckEquals('wide456',a.ObjProp.Val_WideString); +{$IFDEF WST_UNICODESTRING} + CheckEquals('unicode456',a.ObjProp.Val_UnicodeString); +{$ENDIF WST_UNICODESTRING} CheckEquals(121076,a.ObjProp.Val_32S); CheckEquals(0,a.NonStored); @@ -2895,7 +3654,7 @@ begin Check( ls.IndexOf('intv') >= 0 ); x := 'a'; f.BeginObjectRead(x,TypeInfo(TClass_A)); - CheckEquals(4, f.GetScopeItemNames(ls), 'GetScopeItemNames.Count(a)'); + CheckEquals(5{$IFDEF WST_UNICODESTRING}+1{$ENDIF}, f.GetScopeItemNames(ls), 'GetScopeItemNames.Count(a)'); Check( ls.IndexOf('Val_Bool') >= 0 ); Check( ls.IndexOf('Val_Enum') >= 0 ); Check( ls.IndexOf('Val_String') >= 0 ); @@ -2904,7 +3663,7 @@ begin x := 'b'; f.BeginObjectRead(x,TypeInfo(TClass_A)); - CheckEquals(4, f.GetScopeItemNames(ls), 'GetScopeItemNames.Count(b)'); + CheckEquals(5{$IFDEF WST_UNICODESTRING}+1{$ENDIF}, f.GetScopeItemNames(ls), 'GetScopeItemNames.Count(b)'); Check( ls.IndexOf('Val_Bool') >= 0 ); Check( ls.IndexOf('Val_Enum') >= 0 ); Check( ls.IndexOf('Val_String') >= 0 ); @@ -2952,11 +3711,11 @@ var locBuffer : string; begin a := CreateObjBuffer(dtObject,'a',nil); - CreateObjBuffer(dtString,'aa',a)^.StrData^.Data := 'val_aa'; + CreateObjBuffer(dtAnsiString,'aa',a)^.AnsiStrData^.Data := 'val_aa'; tmp := CreateObjBuffer(dtObject,'b',a); tmp := CreateObjBuffer(dtObject,'c',tmp); CreateObjBuffer(dtInt32U,'i',tmp)^.Int32S := 1210; - CreateObjBuffer(dtString,'s',tmp)^.StrData^.Data := 's string sample'; + CreateObjBuffer(dtAnsiString,'s',tmp)^.AnsiStrData^.Data := 's string sample'; b := nil; strm := TStringStream.Create(''); try @@ -4156,14 +4915,14 @@ begin tmpNode := loc_FindObj(faultNode,'faultcode'); Check(Assigned(tmpNode),'faultcode'); - CheckEquals(Ord(dtString), Ord(tmpNode^.DataType),'faultcode.DataType'); - excpt_code := tmpNode^.StrData^.Data; + CheckEquals(Ord(dtAnsiString), Ord(tmpNode^.DataType),'faultcode.DataType'); + excpt_code := tmpNode^.AnsiStrData^.Data; CheckEquals(VAL_CODE,excpt_code,'faultCode'); tmpNode := loc_FindObj(faultNode,'faultstring'); Check(Assigned(tmpNode),'faultstring'); - CheckEquals(Ord(dtString), Ord(tmpNode^.DataType),'faultstring.DataType'); - excpt_msg := tmpNode^.StrData^.Data; + CheckEquals(Ord(dtAnsiString), Ord(tmpNode^.DataType),'faultstring.DataType'); + excpt_msg := tmpNode^.AnsiStrData^.Data; CheckEquals(VAL_MSG,excpt_msg,'faultString'); finally FreeAndNil(strm); @@ -4187,8 +4946,8 @@ begin try bodyNode := CreateObjBuffer(dtObject,'Body',root); faultNode := CreateObjBuffer(dtObject,'Fault',bodyNode); - CreateObjBuffer(dtString,'faultCode',faultNode)^.StrData^.Data := VAL_CODE; - CreateObjBuffer(dtString,'faultString',faultNode)^.StrData^.Data := VAL_MSG; + CreateObjBuffer(dtAnsiString,'faultCode',faultNode)^.AnsiStrData^.Data := VAL_CODE; + CreateObjBuffer(dtAnsiString,'faultString',faultNode)^.AnsiStrData^.Data := VAL_MSG; f := CreateFormatterClient(); strm := TMemoryStream.Create(); try diff --git a/wst/trunk/tests/test_suite/wst_test_suite.lpi b/wst/trunk/tests/test_suite/wst_test_suite.lpi index 8e90c0678..29b627831 100644 --- a/wst/trunk/tests/test_suite/wst_test_suite.lpi +++ b/wst/trunk/tests/test_suite/wst_test_suite.lpi @@ -21,11 +21,6 @@ - - - - - @@ -225,7 +220,7 @@ - + @@ -246,7 +241,6 @@ - diff --git a/wst/trunk/tests/test_suite/wst_test_suite_gui.lpi b/wst/trunk/tests/test_suite/wst_test_suite_gui.lpi index b77d35c92..54dbd1b8b 100644 --- a/wst/trunk/tests/test_suite/wst_test_suite_gui.lpi +++ b/wst/trunk/tests/test_suite/wst_test_suite_gui.lpi @@ -128,7 +128,7 @@ - + @@ -143,7 +143,6 @@ - diff --git a/wst/trunk/ws_helper/metadata_generator.pas b/wst/trunk/ws_helper/metadata_generator.pas index 000416d38..561b7447e 100644 --- a/wst/trunk/ws_helper/metadata_generator.pas +++ b/wst/trunk/ws_helper/metadata_generator.pas @@ -58,8 +58,8 @@ var typeList : TList; elt : TPasElement; begin - FStream.WriteStr(sWST_META); - FStream.WriteStr(FSymbolTable.CurrentModule.Name); + FStream.WriteAnsiStr(sWST_META); + FStream.WriteAnsiStr(FSymbolTable.CurrentModule.Name); k := 0; typeList := FSymbolTable.CurrentModule.InterfaceSection.Declarations; c := typeList.Count; @@ -77,15 +77,15 @@ procedure TMetadataGenerator.GenerateIntfMetadata(AIntf: TPasClassType); procedure WriteParam(APrm : TPasArgument); begin - FStream.WriteStr(APrm.Name); - FStream.WriteStr(APrm.ArgType.Name); + FStream.WriteAnsiStr(APrm.Name); + FStream.WriteAnsiStr(APrm.ArgType.Name); FStream.WriteEnum(Ord(APrm.Access)); end; procedure WriteResult(ARes : TPasResultElement); begin - FStream.WriteStr(ARes.Name); - FStream.WriteStr(ARes.ResultType.Name); + FStream.WriteAnsiStr(ARes.Name); + FStream.WriteAnsiStr(ARes.ResultType.Name); FStream.WriteEnum(Ord(argOut)); end; @@ -95,7 +95,7 @@ procedure TMetadataGenerator.GenerateIntfMetadata(AIntf: TPasClassType); begin argLst := AMeth.ProcType.Args; k := argLst.Count; - FStream.WriteStr(AMeth.Name); + FStream.WriteAnsiStr(AMeth.Name); if AMeth.InheritsFrom(TPasFunction) then begin FStream.WriteInt8U(k + 1); end else begin @@ -114,7 +114,7 @@ var mbrs : TList; elt : TPasElement; begin - FStream.WriteStr(AIntf.Name); + FStream.WriteAnsiStr(AIntf.Name); c := GetElementCount(AIntf.Members,TPasProcedure); FStream.WriteInt8U(c); mbrs := AIntf.Members; diff --git a/wst/trunk/wst_global.inc b/wst/trunk/wst_global.inc index 7541c7581..36e5c6c32 100644 --- a/wst/trunk/wst_global.inc +++ b/wst/trunk/wst_global.inc @@ -1,5 +1,7 @@ {$DEFINE USE_SERIALIZE} {$UNDEF TRemotableTypeInitializer_Initialize} +{$UNDEF WST_TKPROCVAR} +{$UNDEF WST_UNICODESTRING} {$WARNINGS OFF} @@ -10,8 +12,14 @@ {$UNDEF WST_INTF_DOM} //{$DEFINE USE_INLINE} {$IF Defined(FPC_VERSION) and (FPC_VERSION = 2) } - {$IF Defined(FPC_RELEASE) and (FPC_RELEASE > 0) } - {$define FPC_211} + {$IF Defined(FPC_RELEASE) } + {$IF Defined(FPC_VERSION) and (FPC_RELEASE > 0) } + {$define FPC_211} + {$IF Defined(FPC_VERSION) and (FPC_RELEASE > 2) } + {$DEFINE WST_TKPROCVAR} + {$DEFINE WST_UNICODESTRING} + {$IFEND} + {$IFEND} {$IFEND} {$IFEND} {$IF Defined(FPC_211)}