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:
inoussa
2011-08-15 02:10:42 +00:00
parent d8ff486769
commit adcb4e3979
7 changed files with 655 additions and 97 deletions

View File

@ -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.

View File

@ -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(

View 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.

View File

@ -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>

View File

@ -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';

View File

@ -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>

View File

@ -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;