You've already forked lazarus-ccr
Complete DataFilter Implementation + tests
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@1798 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
@ -275,29 +275,8 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
function TBaseTransport.GetFilterString: string;
|
function TBaseTransport.GetFilterString: string;
|
||||||
var
|
|
||||||
locPM : IPropertyManager;
|
|
||||||
ls : TStringList;
|
|
||||||
locRes, s : string;
|
|
||||||
i : Integer;
|
|
||||||
begin
|
begin
|
||||||
locRes := '';
|
Result := GenerateFilterString(FFilter);
|
||||||
if ( FFilter <> nil ) then begin
|
|
||||||
locRes := FFilter.GetName();
|
|
||||||
locPM := FFilter.GetPropertyManager();
|
|
||||||
ls := TStringList.Create();
|
|
||||||
try
|
|
||||||
if ( locPM.GetPropertyNames(ls) > 0 ) then begin
|
|
||||||
for i := 0 to Pred(ls.Count) do begin
|
|
||||||
s := ls[i];
|
|
||||||
locRes := Format('%s,%s>%s',[locRes,s,locPM.GetProperty(s)]);
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
finally
|
|
||||||
ls.Free();
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
Result := locRes;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TBaseTransport.GetTransportName() : string;
|
function TBaseTransport.GetTransportName() : string;
|
||||||
@ -316,32 +295,8 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TBaseTransport.SetFilterString(const Value: string);
|
procedure TBaseTransport.SetFilterString(const Value: string);
|
||||||
var
|
|
||||||
locBuffer, locName, locValue : string;
|
|
||||||
locPM : IPropertyManager;
|
|
||||||
locFilterManager : IDataFilterRegistry;
|
|
||||||
locFilter : IDataFilter;
|
|
||||||
begin
|
begin
|
||||||
locBuffer := Value;
|
FFilter := ParseDataFilterString(Value);
|
||||||
if IsStrEmpty(locBuffer) then begin
|
|
||||||
FFilter := nil;
|
|
||||||
Exit;
|
|
||||||
end;
|
|
||||||
|
|
||||||
//The filter name
|
|
||||||
locName := Trim(GetToken(locBuffer,','));
|
|
||||||
locFilterManager := GetDataFilterRegistry();
|
|
||||||
if not locFilterManager.Find(locName,locFilter) then
|
|
||||||
raise ETransportExecption.CreateFmt(SERR_DataFilterNotFound,[locName]);
|
|
||||||
locPM := locFilter.GetPropertyManager();
|
|
||||||
while True do begin
|
|
||||||
locName := GetToken(locBuffer,'>');
|
|
||||||
if IsStrEmpty(locName) then
|
|
||||||
Break;
|
|
||||||
locValue := GetToken(locBuffer,',');
|
|
||||||
locPM.SetProperty(locName,locValue);
|
|
||||||
end;
|
|
||||||
FFilter := locFilter;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
end.
|
end.
|
||||||
|
@ -30,6 +30,8 @@ type
|
|||||||
function GetName() : string;
|
function GetName() : string;
|
||||||
function ExecuteInput(const AData; const ASize : Integer) : TByteDynArray;
|
function ExecuteInput(const AData; const ASize : Integer) : TByteDynArray;
|
||||||
function ExecuteOutput(const AData; const ASize : Integer) : TByteDynArray;
|
function ExecuteOutput(const AData; const ASize : Integer) : TByteDynArray;
|
||||||
|
function GetNext() : IDataFilter;
|
||||||
|
procedure SetNext(AItem: IDataFilter);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
IDataFilterRegistry = interface
|
IDataFilterRegistry = interface
|
||||||
@ -44,12 +46,31 @@ type
|
|||||||
);
|
);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function GetDataFilterRegistry():IDataFilterRegistry;
|
{$TYPEINFO ON}
|
||||||
|
|
||||||
implementation
|
{ TBaseFilter }
|
||||||
|
|
||||||
|
TBaseFilter = class(TSimpleFactoryItem,IDataFilter)
|
||||||
|
private
|
||||||
|
FPropertyManager : IPropertyManager;
|
||||||
|
FNext : IDataFilter;
|
||||||
|
protected
|
||||||
|
function DoExecuteInput(const AData; const ASize : Integer) : TByteDynArray;virtual;abstract;
|
||||||
|
function DoExecuteOutput(const AData; const ASize : Integer) : TByteDynArray;virtual;abstract;
|
||||||
|
protected
|
||||||
|
function GetPropertyManager() : IPropertyManager;
|
||||||
|
function GetName() : string;virtual;abstract;
|
||||||
|
function ExecuteInput(const AData; const ASize : Integer) : TByteDynArray;
|
||||||
|
function ExecuteOutput(const AData; const ASize : Integer) : TByteDynArray;
|
||||||
|
function GetNext() : IDataFilter;
|
||||||
|
procedure SetNext(AItem: IDataFilter);
|
||||||
|
public
|
||||||
|
constructor Create(); override;
|
||||||
|
end;
|
||||||
|
{$TYPEINFO OFF}
|
||||||
|
|
||||||
type
|
|
||||||
{ TDataFilterRegistry }
|
{ TDataFilterRegistry }
|
||||||
|
|
||||||
TDataFilterRegistry = class(TBaseFactoryRegistry,IInterface,IDataFilterRegistry)
|
TDataFilterRegistry = class(TBaseFactoryRegistry,IInterface,IDataFilterRegistry)
|
||||||
protected
|
protected
|
||||||
function Find(
|
function Find(
|
||||||
@ -58,6 +79,18 @@ type
|
|||||||
):Boolean;
|
):Boolean;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function GetDataFilterRegistry():IDataFilterRegistry;
|
||||||
|
function ParseDataFilterString(AValue : string) : IDataFilter; overload;
|
||||||
|
function ParseDataFilterString(
|
||||||
|
AValue : string;
|
||||||
|
AFilterReg : IDataFilterRegistry
|
||||||
|
) : IDataFilter;overload;
|
||||||
|
function GenerateFilterString(AFilter : IDataFilter) : string;
|
||||||
|
|
||||||
|
implementation
|
||||||
|
uses
|
||||||
|
classes,
|
||||||
|
wst_consts, imp_utils;
|
||||||
|
|
||||||
var
|
var
|
||||||
DataFilterRegistryInst : IDataFilterRegistry = nil;
|
DataFilterRegistryInst : IDataFilterRegistry = nil;
|
||||||
@ -68,6 +101,146 @@ begin
|
|||||||
Result := DataFilterRegistryInst;
|
Result := DataFilterRegistryInst;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
function ParseDataFilterString(AValue : string; AFilterReg : IDataFilterRegistry) : IDataFilter;
|
||||||
|
var
|
||||||
|
locAll, locBuffer, locName, locValue : string;
|
||||||
|
locPM : IPropertyManager;
|
||||||
|
locFilterManager : IDataFilterRegistry;
|
||||||
|
locHeader, locLast, locFilter : IDataFilter;
|
||||||
|
begin
|
||||||
|
locAll := Trim(AValue);
|
||||||
|
if IsStrEmpty(locAll) then begin
|
||||||
|
Result := nil;
|
||||||
|
Exit;
|
||||||
|
end;
|
||||||
|
|
||||||
|
if (AFilterReg = nil) then
|
||||||
|
locFilterManager := GetDataFilterRegistry()
|
||||||
|
else
|
||||||
|
locFilterManager := AFilterReg;
|
||||||
|
locHeader := nil;
|
||||||
|
locLast := nil;
|
||||||
|
while True do begin
|
||||||
|
locBuffer := Trim(GetToken(locAll,'&'));
|
||||||
|
if IsStrEmpty(locBuffer) then
|
||||||
|
Break;
|
||||||
|
//The filter name
|
||||||
|
locName := Trim(GetToken(locBuffer,','));
|
||||||
|
if not locFilterManager.Find(locName,locFilter) then
|
||||||
|
raise ETransportExecption.CreateFmt(SERR_DataFilterNotFound,[locName]);
|
||||||
|
locPM := locFilter.GetPropertyManager();
|
||||||
|
while True do begin
|
||||||
|
locName := GetToken(locBuffer,'>');
|
||||||
|
if IsStrEmpty(locName) then
|
||||||
|
Break;
|
||||||
|
locValue := GetToken(locBuffer,',');
|
||||||
|
locPM.SetProperty(locName,locValue);
|
||||||
|
end;
|
||||||
|
if (locHeader = nil) then begin
|
||||||
|
locHeader := locFilter;
|
||||||
|
locLast := locFilter;
|
||||||
|
end else begin
|
||||||
|
locLast.SetNext(locFilter);
|
||||||
|
end;
|
||||||
|
locLast := locFilter;
|
||||||
|
end;
|
||||||
|
Result := locHeader;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
function GenerateFilterString(AFilter : IDataFilter) : string;
|
||||||
|
var
|
||||||
|
locFilter : IDataFilter;
|
||||||
|
locPM : IPropertyManager;
|
||||||
|
ls : TStringList;
|
||||||
|
locResAll, locResLine, s : string;
|
||||||
|
i : Integer;
|
||||||
|
begin
|
||||||
|
locResAll := '';
|
||||||
|
if ( AFilter <> nil ) then begin
|
||||||
|
ls := TStringList.Create();
|
||||||
|
try
|
||||||
|
locFilter := AFilter;
|
||||||
|
while (locFilter <> nil) do begin
|
||||||
|
locResLine := locFilter.GetName();
|
||||||
|
locPM := locFilter.GetPropertyManager();
|
||||||
|
ls.Clear();
|
||||||
|
if ( locPM.GetPropertyNames(ls) > 0 ) then begin
|
||||||
|
for i := 0 to Pred(ls.Count) do begin
|
||||||
|
s := ls[i];
|
||||||
|
locResLine := Format('%s,%s>%s',[locResLine,s,locPM.GetProperty(s)]);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
if (locResAll = '') then
|
||||||
|
locResAll := locResLine
|
||||||
|
else
|
||||||
|
locResAll := locResAll + '&' + locResLine;
|
||||||
|
locFilter := locFilter.GetNext();
|
||||||
|
end;
|
||||||
|
finally
|
||||||
|
ls.Free();
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
Result := locResAll;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function ParseDataFilterString(AValue : string) : IDataFilter;
|
||||||
|
begin
|
||||||
|
Result := ParseDataFilterString(AValue,GetDataFilterRegistry());
|
||||||
|
end;
|
||||||
|
|
||||||
|
{ TBaseFilter }
|
||||||
|
|
||||||
|
function TBaseFilter.GetPropertyManager() : IPropertyManager;
|
||||||
|
begin
|
||||||
|
Result := FPropertyManager;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TBaseFilter.ExecuteInput(const AData; const ASize : Integer) : TByteDynArray;
|
||||||
|
var
|
||||||
|
n : IDataFilter;
|
||||||
|
r : TByteDynArray;
|
||||||
|
begin
|
||||||
|
Result := DoExecuteInput(AData,ASize);
|
||||||
|
n := GetNext();
|
||||||
|
if (n <> nil) then begin
|
||||||
|
r := Result;
|
||||||
|
Result := n.ExecuteInput(r[Low(r)],Length(r));
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TBaseFilter.ExecuteOutput(const AData; const ASize : Integer) : TByteDynArray;
|
||||||
|
var
|
||||||
|
n : IDataFilter;
|
||||||
|
r : TByteDynArray;
|
||||||
|
begin
|
||||||
|
n := GetNext();
|
||||||
|
if (n = nil) then begin
|
||||||
|
Result := DoExecuteOutput(AData,ASize);
|
||||||
|
end else begin
|
||||||
|
r := n.ExecuteOutput(AData,ASize);
|
||||||
|
Result := DoExecuteOutput(r[Low(r)],Length(r));
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TBaseFilter.GetNext() : IDataFilter;
|
||||||
|
begin
|
||||||
|
Result := FNext;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TBaseFilter.SetNext(AItem : IDataFilter);
|
||||||
|
begin
|
||||||
|
if (FNext <> AItem) then
|
||||||
|
FNext := AItem;
|
||||||
|
end;
|
||||||
|
|
||||||
|
constructor TBaseFilter.Create();
|
||||||
|
begin
|
||||||
|
inherited;
|
||||||
|
FPropertyManager := TPublishedPropertyManager.Create(Self);
|
||||||
|
end;
|
||||||
|
|
||||||
{ TDataFilterRegistry }
|
{ TDataFilterRegistry }
|
||||||
|
|
||||||
function TDataFilterRegistry.Find(
|
function TDataFilterRegistry.Find(
|
||||||
|
407
wst/trunk/tests/test_suite/test_filter.pas
Normal file
407
wst/trunk/tests/test_suite/test_filter.pas
Normal file
@ -0,0 +1,407 @@
|
|||||||
|
{ This file is part of the Web Service Toolkit
|
||||||
|
Copyright (c) 2011 by Inoussa OUEDRAOGO
|
||||||
|
|
||||||
|
This file is provide under modified LGPL licence
|
||||||
|
( the files COPYING.modifiedLGPL and COPYING.LGPL).
|
||||||
|
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
}
|
||||||
|
{$INCLUDE wst_global.inc}
|
||||||
|
|
||||||
|
unit test_filter;
|
||||||
|
|
||||||
|
interface
|
||||||
|
uses {$define fpc}
|
||||||
|
SysUtils,
|
||||||
|
{$IFDEF FPC}
|
||||||
|
fpcunit, testregistry,
|
||||||
|
{$ELSE}
|
||||||
|
TestFrameWork,
|
||||||
|
{$ENDIF}
|
||||||
|
wst_types, filter_intf;
|
||||||
|
|
||||||
|
type
|
||||||
|
|
||||||
|
{ TTest_DataFilter }
|
||||||
|
|
||||||
|
TTest_DataFilter = class(TTestCase)
|
||||||
|
protected
|
||||||
|
procedure DoFilter(AFilter : IDataFilter);
|
||||||
|
function CreateRegistry() : IDataFilterRegistry;
|
||||||
|
published
|
||||||
|
procedure one_filter();
|
||||||
|
procedure two_filter();
|
||||||
|
procedure three_filter();
|
||||||
|
|
||||||
|
procedure ParseDataFilterString_empty();
|
||||||
|
procedure ParseDataFilterString_one();
|
||||||
|
procedure ParseDataFilterString_two();
|
||||||
|
procedure ParseDataFilterString_three();
|
||||||
|
|
||||||
|
procedure GetFilterString_empty();
|
||||||
|
procedure GetFilterString_one();
|
||||||
|
procedure GetFilterString_two();
|
||||||
|
procedure GetFilterString_three();
|
||||||
|
end;
|
||||||
|
|
||||||
|
{ THexDataFilter }
|
||||||
|
|
||||||
|
THexDataFilter = class(TBaseFilter,IDataFilter)
|
||||||
|
protected
|
||||||
|
function GetName() : string;override;
|
||||||
|
function DoExecuteInput(const AData; const ASize : Integer) : TByteDynArray;override;
|
||||||
|
function DoExecuteOutput(const AData; const ASize : Integer) : TByteDynArray;override;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{ TMod256DataFilter }
|
||||||
|
|
||||||
|
TMod256DataFilter = class(TBaseFilter,IDataFilter)
|
||||||
|
protected
|
||||||
|
function GetName() : string;override;
|
||||||
|
function DoExecuteInput(const AData; const ASize : Integer) : TByteDynArray;override;
|
||||||
|
function DoExecuteOutput(const AData; const ASize : Integer) : TByteDynArray;override;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{ TXorDataFilter }
|
||||||
|
|
||||||
|
TXorDataFilter = class(TBaseFilter,IDataFilter)
|
||||||
|
private
|
||||||
|
FXorConstant : Byte;
|
||||||
|
protected
|
||||||
|
function GetName() : string;override;
|
||||||
|
function ExecuteXor(const AData; const ASize : Integer) : TByteDynArray;
|
||||||
|
function DoExecuteInput(const AData; const ASize : Integer) : TByteDynArray;override;
|
||||||
|
function DoExecuteOutput(const AData; const ASize : Integer) : TByteDynArray;override;
|
||||||
|
published
|
||||||
|
property XorConstant : Byte read FXorConstant write FXorConstant;
|
||||||
|
end;
|
||||||
|
|
||||||
|
implementation
|
||||||
|
uses
|
||||||
|
Classes,
|
||||||
|
wst_consts, basex_encode, imp_utils, base_service_intf;
|
||||||
|
|
||||||
|
|
||||||
|
{ TXorDataFilter }
|
||||||
|
|
||||||
|
function TXorDataFilter.GetName() : string;
|
||||||
|
begin
|
||||||
|
Result := 'xor';
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TXorDataFilter.ExecuteXor(const AData; const ASize : Integer) : TByteDynArray;
|
||||||
|
var
|
||||||
|
i : Integer;
|
||||||
|
pd, pr : PByte;
|
||||||
|
begin
|
||||||
|
SetLength(Result,ASize);
|
||||||
|
pd := PByte(@AData);
|
||||||
|
pr := @Result[Low(Result)];
|
||||||
|
for i := 1 to ASize do begin
|
||||||
|
pr^ := pd^ xor XorConstant;
|
||||||
|
Inc(pr);
|
||||||
|
Inc(pd);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TXorDataFilter.DoExecuteInput(const AData; const ASize : Integer) : TByteDynArray;
|
||||||
|
begin
|
||||||
|
Result := ExecuteXor(AData,ASize);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TXorDataFilter.DoExecuteOutput(const AData; const ASize : Integer) : TByteDynArray;
|
||||||
|
begin
|
||||||
|
Result := ExecuteXor(AData,ASize);
|
||||||
|
end;
|
||||||
|
|
||||||
|
{ TTest_DataFilter }
|
||||||
|
|
||||||
|
procedure TTest_DataFilter.DoFilter(AFilter : IDataFilter);
|
||||||
|
var
|
||||||
|
f : IDataFilter;
|
||||||
|
inBuffer, outBuffer, calcBuffer : TByteDynArray;
|
||||||
|
s, s2 : ansistring;
|
||||||
|
begin
|
||||||
|
s := 'abcdefghijklmnopqrtsuvwxyz0123456789.,;:+/*-=';
|
||||||
|
SetLength(inBuffer,Length(s));
|
||||||
|
Move(s[1],inBuffer[0],Length(inBuffer));
|
||||||
|
|
||||||
|
f := AFilter;
|
||||||
|
outBuffer := f.ExecuteInput(inBuffer[0],Length(inBuffer));
|
||||||
|
Check(Length(outBuffer) > 0);
|
||||||
|
calcBuffer := f.ExecuteOutput(outBuffer[0],Length(outBuffer));
|
||||||
|
Check(Length(calcBuffer) > 0);
|
||||||
|
SetLength(s2,Length(calcBuffer));
|
||||||
|
Move(calcBuffer[0],s2[1],Length(calcBuffer));
|
||||||
|
CheckEquals(s,s2);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TTest_DataFilter.CreateRegistry() : IDataFilterRegistry;
|
||||||
|
begin
|
||||||
|
Result := TDataFilterRegistry.Create() as IDataFilterRegistry;
|
||||||
|
Result.Register('xor',TSimpleItemFactory.Create(TXorDataFilter) as IItemFactory);
|
||||||
|
Result.Register('mod256',TSimpleItemFactory.Create(TMod256DataFilter) as IItemFactory);
|
||||||
|
Result.Register('hex',TSimpleItemFactory.Create(THexDataFilter) as IItemFactory);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TTest_DataFilter.one_filter();
|
||||||
|
begin
|
||||||
|
DoFilter(THexDataFilter.Create() as IDataFilter);
|
||||||
|
DoFilter(TMod256DataFilter.Create() as IDataFilter);
|
||||||
|
DoFilter(TXorDataFilter.Create() as IDataFilter);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TTest_DataFilter.two_filter();
|
||||||
|
var
|
||||||
|
f : IDataFilter;
|
||||||
|
begin
|
||||||
|
f := THexDataFilter.Create() as IDataFilter;
|
||||||
|
f.SetNext(TMod256DataFilter.Create() as IDataFilter);
|
||||||
|
DoFilter(f);
|
||||||
|
|
||||||
|
f := TXorDataFilter.Create() as IDataFilter;
|
||||||
|
f.SetNext(THexDataFilter.Create() as IDataFilter);
|
||||||
|
DoFilter(f);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TTest_DataFilter.three_filter();
|
||||||
|
var
|
||||||
|
f : IDataFilter;
|
||||||
|
begin
|
||||||
|
f := THexDataFilter.Create() as IDataFilter;
|
||||||
|
f.SetNext(TMod256DataFilter.Create() as IDataFilter);
|
||||||
|
f.GetNext().SetNext(TXorDataFilter.Create() as IDataFilter);
|
||||||
|
DoFilter(f);
|
||||||
|
|
||||||
|
f := TXorDataFilter.Create() as IDataFilter;
|
||||||
|
f.SetNext(THexDataFilter.Create() as IDataFilter);
|
||||||
|
f.GetNext().SetNext(TMod256DataFilter.Create() as IDataFilter);
|
||||||
|
DoFilter(f);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TTest_DataFilter.ParseDataFilterString_empty();
|
||||||
|
var
|
||||||
|
fr : IDataFilterRegistry;
|
||||||
|
f : IDataFilter;
|
||||||
|
begin
|
||||||
|
fr := CreateRegistry();
|
||||||
|
f := ParseDataFilterString('',fr);
|
||||||
|
CheckNull(f);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TTest_DataFilter.ParseDataFilterString_one();
|
||||||
|
var
|
||||||
|
fr : IDataFilterRegistry;
|
||||||
|
f : IDataFilter;
|
||||||
|
begin
|
||||||
|
fr := CreateRegistry();
|
||||||
|
|
||||||
|
f := ParseDataFilterString('hex',fr);
|
||||||
|
CheckNotNull(f);
|
||||||
|
CheckNull(f.GetNext());
|
||||||
|
CheckEquals('hex',f.GetName());
|
||||||
|
|
||||||
|
f := ParseDataFilterString('xor,XorConstant>17',fr);
|
||||||
|
CheckNotNull(f);
|
||||||
|
CheckNull(f.GetNext());
|
||||||
|
CheckEquals('xor',f.GetName());
|
||||||
|
CheckEquals('17',f.GetPropertyManager().GetProperty('XorConstant'))
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TTest_DataFilter.ParseDataFilterString_two();
|
||||||
|
var
|
||||||
|
fr : IDataFilterRegistry;
|
||||||
|
f : IDataFilter;
|
||||||
|
begin
|
||||||
|
fr := CreateRegistry();
|
||||||
|
|
||||||
|
f := ParseDataFilterString('hex&mod256',fr);
|
||||||
|
CheckNotNull(f);
|
||||||
|
CheckEquals('hex',f.GetName());
|
||||||
|
CheckNotNull(f.GetNext());
|
||||||
|
CheckEquals('mod256',f.GetNext().GetName());
|
||||||
|
CheckNull(f.GetNext().GetNext());
|
||||||
|
|
||||||
|
f := ParseDataFilterString('xor,XorConstant>17&hex',fr);
|
||||||
|
CheckNotNull(f);
|
||||||
|
CheckEquals('xor',f.GetName());
|
||||||
|
CheckEquals('17',f.GetPropertyManager().GetProperty('XorConstant'));
|
||||||
|
CheckNotNull(f.GetNext());
|
||||||
|
CheckEquals('hex',f.GetNext().GetName());
|
||||||
|
CheckNull(f.GetNext().GetNext());
|
||||||
|
|
||||||
|
f := ParseDataFilterString('hex&xor,XorConstant>17',fr);
|
||||||
|
CheckNotNull(f);
|
||||||
|
CheckEquals('hex',f.GetName());
|
||||||
|
CheckNotNull(f.GetNext());
|
||||||
|
CheckEquals('xor',f.GetNext().GetName());
|
||||||
|
CheckEquals('17',f.GetNext().GetPropertyManager().GetProperty('XorConstant'));
|
||||||
|
CheckNull(f.GetNext().GetNext());
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TTest_DataFilter.ParseDataFilterString_three();
|
||||||
|
var
|
||||||
|
fr : IDataFilterRegistry;
|
||||||
|
f : IDataFilter;
|
||||||
|
begin
|
||||||
|
fr := CreateRegistry();
|
||||||
|
|
||||||
|
f := ParseDataFilterString('hex&mod256&xor,XorConstant>17',fr);
|
||||||
|
CheckNotNull(f);
|
||||||
|
CheckEquals('hex',f.GetName());
|
||||||
|
CheckNotNull(f.GetNext());
|
||||||
|
CheckEquals('mod256',f.GetNext().GetName());
|
||||||
|
CheckNotNull(f.GetNext().GetNext());
|
||||||
|
CheckEquals('xor',f.GetNext().GetNext().GetName());
|
||||||
|
CheckEquals('17',f.GetNext().GetNext().GetPropertyManager().GetProperty('XorConstant'));
|
||||||
|
CheckNull(f.GetNext().GetNext().GetNext());
|
||||||
|
|
||||||
|
f := ParseDataFilterString('xor,XorConstant>17&hex&mod256',fr);
|
||||||
|
CheckNotNull(f);
|
||||||
|
CheckEquals('xor',f.GetName());
|
||||||
|
CheckEquals('17',f.GetPropertyManager().GetProperty('XorConstant'));
|
||||||
|
CheckNotNull(f.GetNext());
|
||||||
|
CheckEquals('hex',f.GetNext().GetName());
|
||||||
|
CheckNotNull(f.GetNext().GetNext());
|
||||||
|
CheckEquals('mod256',f.GetNext().GetNext().GetName());
|
||||||
|
CheckNull(f.GetNext().GetNext().GetNext());
|
||||||
|
|
||||||
|
f := ParseDataFilterString('hex&xor,XorConstant>17&mod256',fr);
|
||||||
|
CheckNotNull(f);
|
||||||
|
CheckEquals('hex',f.GetName());
|
||||||
|
CheckNotNull(f.GetNext());
|
||||||
|
CheckEquals('xor',f.GetNext().GetName());
|
||||||
|
CheckEquals('17',f.GetNext().GetPropertyManager().GetProperty('XorConstant'));
|
||||||
|
CheckNotNull(f.GetNext().GetNext());
|
||||||
|
CheckEquals('mod256',f.GetNext().GetNext().GetName());
|
||||||
|
CheckNull(f.GetNext().GetNext().GetNext());
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TTest_DataFilter.GetFilterString_empty();
|
||||||
|
begin
|
||||||
|
CheckEquals('',GenerateFilterString(nil));
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TTest_DataFilter.GetFilterString_one();
|
||||||
|
var
|
||||||
|
f : IDataFilter;
|
||||||
|
begin
|
||||||
|
f := THexDataFilter.Create() as IDataFilter;
|
||||||
|
CheckEquals('hex',GenerateFilterString(f));
|
||||||
|
|
||||||
|
f := TXorDataFilter.Create() as IDataFilter;
|
||||||
|
f.GetPropertyManager().SetProperty('XorConstant','37');
|
||||||
|
CheckEquals('xor,XorConstant>37',GenerateFilterString(f));
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TTest_DataFilter.GetFilterString_two();
|
||||||
|
var
|
||||||
|
f : IDataFilter;
|
||||||
|
begin
|
||||||
|
f := THexDataFilter.Create() as IDataFilter;
|
||||||
|
f.SetNext(TMod256DataFilter.Create() as IDataFilter);
|
||||||
|
CheckEquals('hex&mod256',GenerateFilterString(f));
|
||||||
|
|
||||||
|
f := TXorDataFilter.Create() as IDataFilter;
|
||||||
|
f.GetPropertyManager().SetProperty('XorConstant','37');
|
||||||
|
f.SetNext(THexDataFilter.Create() as IDataFilter);
|
||||||
|
CheckEquals('xor,XorConstant>37&hex',GenerateFilterString(f));
|
||||||
|
|
||||||
|
f := THexDataFilter.Create() as IDataFilter;
|
||||||
|
f.SetNext(TXorDataFilter.Create() as IDataFilter);
|
||||||
|
f.GetNext().GetPropertyManager().SetProperty('XorConstant','37');
|
||||||
|
CheckEquals('hex&xor,XorConstant>37',GenerateFilterString(f));
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TTest_DataFilter.GetFilterString_three();
|
||||||
|
var
|
||||||
|
f : IDataFilter;
|
||||||
|
begin
|
||||||
|
f := THexDataFilter.Create() as IDataFilter;
|
||||||
|
f.SetNext(TMod256DataFilter.Create() as IDataFilter);
|
||||||
|
f.GetNext().SetNext(TXorDataFilter.Create() as IDataFilter);
|
||||||
|
f.GetNext().GetNext().GetPropertyManager().SetProperty('XorConstant','37');
|
||||||
|
CheckEquals('hex&mod256&xor,XorConstant>37',GenerateFilterString(f));
|
||||||
|
|
||||||
|
f := TXorDataFilter.Create() as IDataFilter;
|
||||||
|
f.GetPropertyManager().SetProperty('XorConstant','37');
|
||||||
|
f.SetNext(THexDataFilter.Create() as IDataFilter);
|
||||||
|
f.GetNext().SetNext(TMod256DataFilter.Create() as IDataFilter);
|
||||||
|
CheckEquals('xor,XorConstant>37&hex&mod256',GenerateFilterString(f));
|
||||||
|
|
||||||
|
f := THexDataFilter.Create() as IDataFilter;
|
||||||
|
f.SetNext(TXorDataFilter.Create() as IDataFilter);
|
||||||
|
f.GetNext().GetPropertyManager().SetProperty('XorConstant','37');
|
||||||
|
f.GetNext().SetNext(TMod256DataFilter.Create() as IDataFilter);
|
||||||
|
CheckEquals('hex&xor,XorConstant>37&mod256',GenerateFilterString(f));
|
||||||
|
end;
|
||||||
|
|
||||||
|
{ TMod256DataFilter }
|
||||||
|
|
||||||
|
function TMod256DataFilter.GetName() : string;
|
||||||
|
begin
|
||||||
|
Result := 'mod256';
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TMod256DataFilter.DoExecuteInput(const AData; const ASize : Integer) : TByteDynArray;
|
||||||
|
begin
|
||||||
|
SetLength(Result,ASize + 1);
|
||||||
|
Move(AData,Result[0],ASize);
|
||||||
|
Result[ASize] := ASize mod 256;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TMod256DataFilter.DoExecuteOutput(const AData; const ASize : Integer) : TByteDynArray;
|
||||||
|
var
|
||||||
|
m : Byte;
|
||||||
|
begin
|
||||||
|
if (ASize < 1) then
|
||||||
|
raise Exception.Create(SERR_InvalidEncodedData);
|
||||||
|
m := PByteArray(@AData)^[ASize - 1];
|
||||||
|
if (m <> ((ASize - 1) mod 256) ) then
|
||||||
|
raise Exception.Create(SERR_InvalidEncodedData);
|
||||||
|
|
||||||
|
SetLength(Result,ASize - 1);
|
||||||
|
Move(AData,Result[0],ASize-1);
|
||||||
|
end;
|
||||||
|
|
||||||
|
{ THexDataFilter }
|
||||||
|
|
||||||
|
function THexDataFilter.GetName() : string;
|
||||||
|
begin
|
||||||
|
Result := 'hex';
|
||||||
|
end;
|
||||||
|
|
||||||
|
function THexDataFilter.DoExecuteInput(const AData; const ASize : Integer) : TByteDynArray;
|
||||||
|
begin
|
||||||
|
if (ASize < 1) then begin
|
||||||
|
Result := nil;
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
|
||||||
|
SetLength(Result,(2*ASize));
|
||||||
|
Base16Encode(AData,ASize,PAnsiChar(@Result[0]));
|
||||||
|
end;
|
||||||
|
|
||||||
|
function THexDataFilter.DoExecuteOutput(const AData; const ASize : Integer) : TByteDynArray;
|
||||||
|
var
|
||||||
|
i : Integer;
|
||||||
|
begin
|
||||||
|
if (ASize < 1) then begin
|
||||||
|
Result := nil;
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
|
||||||
|
SetLength(Result, (ASize div 2));
|
||||||
|
i := Base16Decode(PAnsiChar(@AData),Result[0],Length(Result));
|
||||||
|
if (i <> Length(Result)) then
|
||||||
|
SetLength(Result,i);
|
||||||
|
end;
|
||||||
|
|
||||||
|
initialization
|
||||||
|
RegisterTest('DataFilter',TTest_DataFilter.Suite);
|
||||||
|
|
||||||
|
end.
|
||||||
|
|
@ -1,16 +1,18 @@
|
|||||||
<?xml version="1.0"?>
|
<?xml version="1.0"?>
|
||||||
<CONFIG>
|
<CONFIG>
|
||||||
<ProjectOptions>
|
<ProjectOptions>
|
||||||
|
<Version Value="9"/>
|
||||||
<PathDelim Value="\"/>
|
<PathDelim Value="\"/>
|
||||||
<Version Value="7"/>
|
|
||||||
<General>
|
<General>
|
||||||
<Flags>
|
<Flags>
|
||||||
<LRSInOutputDirectory Value="False"/>
|
<LRSInOutputDirectory Value="False"/>
|
||||||
</Flags>
|
</Flags>
|
||||||
<SessionStorage Value="InProjectDir"/>
|
<SessionStorage Value="InProjectDir"/>
|
||||||
<MainUnit Value="0"/>
|
<MainUnit Value="0"/>
|
||||||
<TargetFileExt Value=".exe"/>
|
|
||||||
</General>
|
</General>
|
||||||
|
<BuildModes Count="1">
|
||||||
|
<Item1 Name="default" Default="True"/>
|
||||||
|
</BuildModes>
|
||||||
<PublishOptions>
|
<PublishOptions>
|
||||||
<Version Value="2"/>
|
<Version Value="2"/>
|
||||||
<DestinationDirectory Value="$(TestDir)\publishedproject\"/>
|
<DestinationDirectory Value="$(TestDir)\publishedproject\"/>
|
||||||
@ -20,11 +22,11 @@
|
|||||||
<RunParams>
|
<RunParams>
|
||||||
<local>
|
<local>
|
||||||
<FormatVersion Value="1"/>
|
<FormatVersion Value="1"/>
|
||||||
<CommandLineParams Value="--suite=TTest_XsdParser"/>
|
<CommandLineParams Value="--suite=DataFilter"/>
|
||||||
<LaunchingApplication PathPlusParams="\usr\X11R6\bin\xterm -T 'Lazarus Run Output' -e $(LazarusDir)\tools\runwait.sh $(TargetCmdLine)"/>
|
<LaunchingApplication PathPlusParams="\usr\X11R6\bin\xterm -T 'Lazarus Run Output' -e $(LazarusDir)\tools\runwait.sh $(TargetCmdLine)"/>
|
||||||
</local>
|
</local>
|
||||||
</RunParams>
|
</RunParams>
|
||||||
<Units Count="39">
|
<Units Count="42">
|
||||||
<Unit0>
|
<Unit0>
|
||||||
<Filename Value="wst_test_suite.lpr"/>
|
<Filename Value="wst_test_suite.lpr"/>
|
||||||
<IsPartOfProject Value="True"/>
|
<IsPartOfProject Value="True"/>
|
||||||
@ -220,20 +222,35 @@
|
|||||||
<IsPartOfProject Value="True"/>
|
<IsPartOfProject Value="True"/>
|
||||||
<UnitName Value="test_date_utils"/>
|
<UnitName Value="test_date_utils"/>
|
||||||
</Unit38>
|
</Unit38>
|
||||||
|
<Unit39>
|
||||||
|
<Filename Value="test_filter.pas"/>
|
||||||
|
<IsPartOfProject Value="True"/>
|
||||||
|
<UnitName Value="test_filter"/>
|
||||||
|
</Unit39>
|
||||||
|
<Unit40>
|
||||||
|
<Filename Value="..\..\filter_intf.pas"/>
|
||||||
|
<IsPartOfProject Value="True"/>
|
||||||
|
<UnitName Value="filter_intf"/>
|
||||||
|
</Unit40>
|
||||||
|
<Unit41>
|
||||||
|
<Filename Value="..\..\same_process_protocol.pas"/>
|
||||||
|
<IsPartOfProject Value="True"/>
|
||||||
|
<UnitName Value="same_process_protocol"/>
|
||||||
|
</Unit41>
|
||||||
</Units>
|
</Units>
|
||||||
</ProjectOptions>
|
</ProjectOptions>
|
||||||
<CompilerOptions>
|
<CompilerOptions>
|
||||||
<Version Value="8"/>
|
<Version Value="9"/>
|
||||||
<PathDelim Value="\"/>
|
<PathDelim Value="\"/>
|
||||||
<SearchPaths>
|
<SearchPaths>
|
||||||
<IncludeFiles Value="..\..\"/>
|
<IncludeFiles Value="..\.."/>
|
||||||
<OtherUnitFiles Value="..\..\;..\..\ws_helper\;..\..\wst_rtti_filter\;..\..\fcl-json\src\"/>
|
<Libraries Value="..\.."/>
|
||||||
|
<OtherUnitFiles Value="..\..;..\..\ws_helper;..\..\wst_rtti_filter;..\..\fcl-json\src"/>
|
||||||
<UnitOutputDirectory Value="obj"/>
|
<UnitOutputDirectory Value="obj"/>
|
||||||
</SearchPaths>
|
</SearchPaths>
|
||||||
<Parsing>
|
<Parsing>
|
||||||
<SyntaxOptions>
|
<SyntaxOptions>
|
||||||
<IncludeAssertionCode Value="True"/>
|
<IncludeAssertionCode Value="True"/>
|
||||||
<UseAnsiStrings Value="True"/>
|
|
||||||
</SyntaxOptions>
|
</SyntaxOptions>
|
||||||
</Parsing>
|
</Parsing>
|
||||||
<CodeGeneration>
|
<CodeGeneration>
|
||||||
@ -247,8 +264,10 @@
|
|||||||
</Debugging>
|
</Debugging>
|
||||||
</Linking>
|
</Linking>
|
||||||
<Other>
|
<Other>
|
||||||
<CustomOptions Value="-Xi -FE.
|
<CompilerMessages>
|
||||||
"/>
|
<UseMsgFile Value="True"/>
|
||||||
|
</CompilerMessages>
|
||||||
|
<CustomOptions Value="-Xi"/>
|
||||||
<CompilerPath Value="$(CompPath)"/>
|
<CompilerPath Value="$(CompPath)"/>
|
||||||
</Other>
|
</Other>
|
||||||
</CompilerOptions>
|
</CompilerOptions>
|
||||||
|
@ -9,17 +9,17 @@ uses
|
|||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
|
|
||||||
custapp, classes, sysutils, fpcunit, testreport, testregistry,
|
custapp, classes, sysutils, fpcunit, testreport, testregistry,
|
||||||
TestFormatter_unit, testmetadata_unit,
|
TestFormatter_unit, testmetadata_unit, server_service_soap, soap_formatter,
|
||||||
server_service_soap, soap_formatter, base_binary_formatter,
|
base_binary_formatter, base_service_intf, base_soap_formatter,
|
||||||
base_service_intf, base_soap_formatter, binary_formatter, binary_streamer,
|
binary_formatter, binary_streamer, server_binary_formatter,
|
||||||
server_binary_formatter, metadata_repository,
|
metadata_repository, metadata_generator, server_service_intf, metadata_wsdl,
|
||||||
metadata_generator, server_service_intf, metadata_wsdl, base_xmlrpc_formatter, wst_fpc_xml, test_utilities,
|
base_xmlrpc_formatter, wst_fpc_xml, test_utilities, server_service_xmlrpc,
|
||||||
server_service_xmlrpc, test_parsers, wsdl_generator, xsd_generator,
|
test_parsers, wsdl_generator, xsd_generator, xsd_consts, base_json_formatter,
|
||||||
xsd_consts, base_json_formatter, wsdl_parser, test_support, basex_encode,
|
wsdl_parser, test_support, basex_encode, test_basex_encode, json_formatter,
|
||||||
test_basex_encode, json_formatter, server_service_json, test_json,
|
server_service_json, filter_intf, same_process_protocol, test_json,
|
||||||
test_suite_utils, test_generators, test_std_cursors, test_rtti_filter,
|
test_suite_utils, test_generators, test_std_cursors, test_rtti_filter,
|
||||||
test_wst_cursors, test_registry, test_soap_specific, test_generators_runtime,
|
test_wst_cursors, test_registry, test_soap_specific, test_generators_runtime,
|
||||||
test_date_utils;
|
test_date_utils, test_filter;
|
||||||
|
|
||||||
Const
|
Const
|
||||||
ShortOpts = 'alh';
|
ShortOpts = 'alh';
|
||||||
|
@ -1,19 +1,21 @@
|
|||||||
<?xml version="1.0"?>
|
<?xml version="1.0"?>
|
||||||
<CONFIG>
|
<CONFIG>
|
||||||
<ProjectOptions>
|
<ProjectOptions>
|
||||||
|
<Version Value="9"/>
|
||||||
<PathDelim Value="\"/>
|
<PathDelim Value="\"/>
|
||||||
<Version Value="7"/>
|
|
||||||
<General>
|
<General>
|
||||||
<Flags>
|
<Flags>
|
||||||
<LRSInOutputDirectory Value="False"/>
|
<LRSInOutputDirectory Value="False"/>
|
||||||
</Flags>
|
</Flags>
|
||||||
<SessionStorage Value="InProjectDir"/>
|
<SessionStorage Value="InProjectDir"/>
|
||||||
<MainUnit Value="0"/>
|
<MainUnit Value="0"/>
|
||||||
<TargetFileExt Value=".exe"/>
|
|
||||||
</General>
|
</General>
|
||||||
<VersionInfo>
|
<VersionInfo>
|
||||||
<ProjectVersion Value=""/>
|
<StringTable ProductVersion=""/>
|
||||||
</VersionInfo>
|
</VersionInfo>
|
||||||
|
<BuildModes Count="1">
|
||||||
|
<Item1 Name="default" Default="True"/>
|
||||||
|
</BuildModes>
|
||||||
<PublishOptions>
|
<PublishOptions>
|
||||||
<Version Value="2"/>
|
<Version Value="2"/>
|
||||||
<DestinationDirectory Value="$(TestDir)\publishedproject\"/>
|
<DestinationDirectory Value="$(TestDir)\publishedproject\"/>
|
||||||
@ -37,7 +39,7 @@
|
|||||||
<PackageName Value="fpcunittestrunner"/>
|
<PackageName Value="fpcunittestrunner"/>
|
||||||
</Item3>
|
</Item3>
|
||||||
</RequiredPackages>
|
</RequiredPackages>
|
||||||
<Units Count="23">
|
<Units Count="24">
|
||||||
<Unit0>
|
<Unit0>
|
||||||
<Filename Value="wst_test_suite_gui.lpr"/>
|
<Filename Value="wst_test_suite_gui.lpr"/>
|
||||||
<IsPartOfProject Value="True"/>
|
<IsPartOfProject Value="True"/>
|
||||||
@ -152,22 +154,28 @@
|
|||||||
<Filename Value="wst_tests_defines.inc"/>
|
<Filename Value="wst_tests_defines.inc"/>
|
||||||
<IsPartOfProject Value="True"/>
|
<IsPartOfProject Value="True"/>
|
||||||
</Unit22>
|
</Unit22>
|
||||||
|
<Unit23>
|
||||||
|
<Filename Value="test_filter.pas"/>
|
||||||
|
<IsPartOfProject Value="True"/>
|
||||||
|
<UnitName Value="test_filter"/>
|
||||||
|
</Unit23>
|
||||||
</Units>
|
</Units>
|
||||||
</ProjectOptions>
|
</ProjectOptions>
|
||||||
<CompilerOptions>
|
<CompilerOptions>
|
||||||
<Version Value="8"/>
|
<Version Value="9"/>
|
||||||
<PathDelim Value="\"/>
|
<PathDelim Value="\"/>
|
||||||
<Target>
|
<Target>
|
||||||
<Filename Value="wst_test_suite_gui"/>
|
<Filename Value="wst_test_suite_gui"/>
|
||||||
</Target>
|
</Target>
|
||||||
<SearchPaths>
|
<SearchPaths>
|
||||||
<IncludeFiles Value="..\..\"/>
|
<IncludeFiles Value="..\.."/>
|
||||||
<OtherUnitFiles Value="..\..\;..\..\ws_helper\;..\..\wst_rtti_filter\;..\..\fcl-json\src\"/>
|
<OtherUnitFiles Value="..\..;..\..\ws_helper;..\..\wst_rtti_filter;..\..\fcl-json\src"/>
|
||||||
<UnitOutputDirectory Value="obj"/>
|
<UnitOutputDirectory Value="obj"/>
|
||||||
</SearchPaths>
|
</SearchPaths>
|
||||||
<Parsing>
|
<Parsing>
|
||||||
<SyntaxOptions>
|
<SyntaxOptions>
|
||||||
<CStyleOperator Value="False"/>
|
<CStyleOperator Value="False"/>
|
||||||
|
<UseAnsiStrings Value="False"/>
|
||||||
</SyntaxOptions>
|
</SyntaxOptions>
|
||||||
</Parsing>
|
</Parsing>
|
||||||
<CodeGeneration>
|
<CodeGeneration>
|
||||||
@ -187,8 +195,6 @@
|
|||||||
</Options>
|
</Options>
|
||||||
</Linking>
|
</Linking>
|
||||||
<Other>
|
<Other>
|
||||||
<CustomOptions Value="
|
|
||||||
"/>
|
|
||||||
<CompilerPath Value="$(CompPath)"/>
|
<CompilerPath Value="$(CompPath)"/>
|
||||||
</Other>
|
</Other>
|
||||||
</CompilerOptions>
|
</CompilerOptions>
|
||||||
|
@ -6,20 +6,18 @@ uses
|
|||||||
{$IFDEF UNIX}
|
{$IFDEF UNIX}
|
||||||
cthreads, cwstring,
|
cthreads, cwstring,
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
Interfaces, Forms, GuiTestRunner,
|
Interfaces, Forms, GuiTestRunner, TestFormatter_unit, testmetadata_unit,
|
||||||
TestFormatter_unit, testmetadata_unit,
|
server_service_soap, soap_formatter, base_binary_formatter, base_service_intf,
|
||||||
server_service_soap, soap_formatter, base_binary_formatter,
|
base_soap_formatter, binary_formatter, binary_streamer,
|
||||||
base_service_intf, base_soap_formatter, binary_formatter, binary_streamer,
|
server_binary_formatter, metadata_repository, metadata_generator,
|
||||||
server_binary_formatter, metadata_repository,
|
server_service_intf, metadata_wsdl, base_xmlrpc_formatter, wst_fpc_xml,
|
||||||
metadata_generator, server_service_intf, metadata_wsdl,
|
test_utilities, server_service_xmlrpc, test_parsers, wsdl_generator,
|
||||||
base_xmlrpc_formatter, wst_fpc_xml, test_utilities,
|
xsd_generator, xsd_consts, base_json_formatter, wsdl_parser, test_support,
|
||||||
server_service_xmlrpc, test_parsers, wsdl_generator, xsd_generator,
|
basex_encode, test_basex_encode, json_formatter, server_service_json,
|
||||||
xsd_consts, base_json_formatter, wsdl_parser, test_support, basex_encode,
|
test_json, test_suite_utils, test_generators, fpcunittestrunner,
|
||||||
test_basex_encode, json_formatter, server_service_json, test_json,
|
test_std_cursors, test_rtti_filter, rtti_filters, wst_cursors,
|
||||||
test_suite_utils, test_generators, fpcunittestrunner, test_std_cursors,
|
test_wst_cursors, test_registry, test_soap_specific, test_generators_runtime,
|
||||||
test_rtti_filter, rtti_filters, wst_cursors, test_wst_cursors, test_registry, test_soap_specific,
|
test_date_utils, config_objects, test_support_client, test_filter, wst_consts;
|
||||||
test_generators_runtime, test_date_utils, config_objects, test_support_client,
|
|
||||||
wst_consts;
|
|
||||||
|
|
||||||
begin
|
begin
|
||||||
Application.Initialize;
|
Application.Initialize;
|
||||||
|
Reference in New Issue
Block a user