You've already forked lazarus-ccr
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@5938 8e941d3f-bd1b-0410-a28a-d453659cc2b4
204 lines
6.4 KiB
ObjectPascal
204 lines
6.4 KiB
ObjectPascal
{
|
|
This file is part of the Web Service Toolkit
|
|
Copyright (c) 2006 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 testmetadata_unit;
|
|
|
|
interface
|
|
|
|
uses
|
|
Classes, SysUtils,
|
|
{$IFDEF FPC}
|
|
fpcunit, testutils, testregistry, DOM, XMLWrite, wst_fpc_xml,
|
|
{$ELSE}
|
|
TestFrameWork, xmldom, wst_delphi_xml,
|
|
{$ENDIF}
|
|
test_suite_utils, metadata_generator, binary_streamer, metadata_repository,
|
|
pastree, PScanner, pascal_parser_intf, metadata_wsdl;
|
|
|
|
type
|
|
|
|
{ TTestMetadata }
|
|
|
|
TTestMetadata= class(TWstBaseTest)
|
|
protected
|
|
function CreateSymbolTable():TwstPasTreeContainer;
|
|
published
|
|
procedure test_Metadata();
|
|
end;
|
|
|
|
|
|
implementation
|
|
|
|
{ TTestMetadata }
|
|
|
|
function TTestMetadata.CreateSymbolTable(): TwstPasTreeContainer;
|
|
|
|
function CreateProc(
|
|
const AName : string;
|
|
AClass : TPasClassType;
|
|
AContainer : TwstPasTreeContainer
|
|
) : TPasProcedure ;
|
|
begin
|
|
Result := TPasProcedure(AContainer.CreateElement(TPasProcedure,AName,AContainer.CurrentModule.InterfaceSection,visDefault,'',0));
|
|
Result.ProcType := TPasProcedureType(AContainer.CreateElement(TPasProcedureType,'',Result,visDefault,'',0));
|
|
AClass.Members.Add(Result);
|
|
end;
|
|
|
|
function CreateFunc(
|
|
const AName, AResultTypeName : string;
|
|
AClass : TPasClassType;
|
|
AContainer : TwstPasTreeContainer
|
|
) : TPasFunction ;
|
|
begin
|
|
Result := TPasFunction(AContainer.CreateElement(TPasFunction,AName,AContainer.CurrentModule.InterfaceSection,visDefault,'',0));
|
|
{$IFDEF WST_TPASSOURCEPOS}
|
|
Result.ProcType := AContainer.CreateFunctionType('','result',Result,True,Default(TPasSourcePos));
|
|
{$ELSE WST_TPASSOURCEPOS}
|
|
Result.ProcType := AContainer.CreateFunctionType('','result',Result,True,'',0);
|
|
{$ENDIF WST_TPASSOURCEPOS}
|
|
AClass.Members.Add(Result);
|
|
TPasFunctionType(Result.ProcType).ResultEl.ResultType := AContainer.FindElement(AResultTypeName) as TPasType;
|
|
TPasFunctionType(Result.ProcType).ResultEl.ResultType.AddRef();
|
|
end;
|
|
|
|
function CreateParam(
|
|
const AName, ATypeName : string;
|
|
const AAccess : TArgumentAccess;
|
|
AProc : TPasProcedure;
|
|
AContainer : TwstPasTreeContainer
|
|
) : TPasArgument ;
|
|
begin
|
|
Result := TPasArgument(AContainer.CreateElement(TPasArgument,AName,AProc.ProcType,visDefault,'',0));
|
|
Result.ArgType := AContainer.FindElement(ATypeName) as TPasType;
|
|
Result.ArgType.AddRef();
|
|
Result.Access := AAccess;
|
|
AProc.ProcType.Args.Add(Result);
|
|
end;
|
|
|
|
var
|
|
inft : TPasClassType;
|
|
sct : TInterfaceSection;
|
|
locProc : TPasProcedure;
|
|
begin
|
|
Result := TwstPasTreeContainer.Create();
|
|
CreateWstInterfaceSymbolTable(Result);
|
|
Result.Package.Modules.Add(Result.CreateElement(TPasModule,'test_unit_name',Result.Package,visDefault,'',0));
|
|
sct := TInterfaceSection(Result.CreateElement(TInterfaceSection,'',Result.CurrentModule,visDefault,'',0));
|
|
Result.CurrentModule.InterfaceSection := sct;
|
|
|
|
inft := TPasClassType(Result.CreateElement(TPasClassType,'service_1',sct,visDefault,'',0));
|
|
inft.ObjKind := okInterface;
|
|
sct.Declarations.Add(inft);
|
|
sct.Types.Add(inft);
|
|
CreateProc('void_operation_proc',inft,Result);
|
|
CreateFunc('void_operation_func','integer',inft,Result);
|
|
|
|
inft := TPasClassType(Result.CreateElement(TPasClassType,'service_2',sct,visDefault,'',0));
|
|
inft.ObjKind := okInterface;
|
|
sct.Declarations.Add(inft);
|
|
sct.Types.Add(inft);
|
|
locProc := CreateProc('dis_proc',inft,Result);
|
|
CreateParam('d','double',argDefault,locProc,Result);
|
|
CreateParam('i','integer',argConst,locProc,Result);
|
|
CreateParam('s','string',argOut,locProc,Result);
|
|
locProc := CreateFunc('sid_func','double',inft,Result);
|
|
CreateParam('s','string',argConst,locProc,Result);
|
|
CreateParam('i','integer',argVar,locProc,Result);
|
|
end;
|
|
|
|
procedure PrintWSDL(ARep : PServiceRepository);
|
|
var
|
|
locDoc : TXMLDocument;
|
|
strm : TMemoryStream;
|
|
s : string;
|
|
begin
|
|
strm := nil;;
|
|
locDoc := CreateDoc();// TXMLDocument.Create();
|
|
try
|
|
GenerateWSDL(ARep,locDoc);
|
|
strm := TMemoryStream.Create();
|
|
WriteXMLFile(locDoc,strm);
|
|
SetLength(s,strm.Size);
|
|
Move(strm.Memory^,s[1],strm.Size);
|
|
WriteLn('*******************************************************');
|
|
WriteLn(s);
|
|
WriteLn('*******************************************************');
|
|
finally
|
|
ReleaseDomNode(locDoc);
|
|
strm.Free();
|
|
end;
|
|
end;
|
|
|
|
procedure TTestMetadata.test_Metadata();
|
|
var
|
|
st : TwstPasTreeContainer;
|
|
mg : TMetadataGenerator;
|
|
wtr : IDataStore;
|
|
strm : TMemoryStream;
|
|
|
|
rp : PServiceRepository;
|
|
ps : PService;
|
|
po : PServiceOperation;
|
|
pop : POperationParam;
|
|
begin
|
|
strm := nil;
|
|
mg := nil;
|
|
rp := nil;
|
|
st := CreateSymbolTable();
|
|
try
|
|
strm := TMemoryStream.Create();
|
|
wtr := CreateBinaryWriter(strm);
|
|
mg := TMetadataGenerator.Create(st,wtr);
|
|
mg.Execute();
|
|
wtr := nil;
|
|
strm.Position := 0;
|
|
|
|
Check(strm.Size>10);
|
|
CheckEquals(2,LoadRepositoryData(strm,rp),'symbol count');
|
|
CheckEquals('test_unit_name',rp^.Name,'unit name');
|
|
CheckEquals(2,rp^.ServicesCount,'services count');
|
|
Check( rp^.Services <> nil , 'services pointer');
|
|
|
|
ps := rp^.Services;
|
|
CheckEquals('service_1',ps^.Name,'service name');
|
|
CheckEquals(2,ps^.OperationsCount,'operations count');
|
|
Check(ps^.Operations <> nil, 'operations pointer');
|
|
po := ps^.Operations;
|
|
CheckEquals('void_operation_proc',po^.Name, 'operation name');
|
|
CheckEquals(0,po^.ParamsCount,'params count');
|
|
Check( po^.Params = nil ,'params pointer');
|
|
Inc(po);
|
|
CheckEquals('void_operation_func',po^.Name, 'operation name');
|
|
CheckEquals(1,po^.ParamsCount, 'params count');
|
|
Check( po^.Params <> nil, 'params pointer');
|
|
pop := po^.Params;
|
|
CheckEquals('result',pop^.Name,'param name');
|
|
CheckEquals('integer',pop^.TypeName,'param type name');
|
|
CheckEquals(ord(argOut),ord(pop^.Modifier),'param modifier');
|
|
|
|
rp^.NameSpace := 'http://test_name_space/';
|
|
//PrintWSDL(rp);
|
|
finally
|
|
mg.Free();
|
|
st.Free();
|
|
strm.Free();
|
|
ClearRepositoryData(rp);
|
|
end;
|
|
end;
|
|
|
|
initialization
|
|
RegisterTest('Metadata', TTestMetadata.Suite);
|
|
|
|
end.
|