codetools: tests for defines

git-svn-id: trunk@29843 -
This commit is contained in:
mattias 2011-03-14 16:47:40 +00:00
parent 9d9e320412
commit 621494e9f4
3 changed files with 74 additions and 5 deletions

View File

@ -576,13 +576,15 @@ var
if MacroNode<>nil then begin
// macro found
MacroItem:=PStringToStringTreeItem(MacroNode.Data);
debugln(['Append MacroName=',MacroItem^.Name,' ',GetIdentifier(@Src[AtomStart])]);
MacroValue:=MacroItem^.Value;
//debugln(['Append MacroName=',MacroItem^.Name,' Src=',GetIdentifier(@Src[AtomStart]),' Value=',dbgstr(MacroValue)]);
// write source in front of macro
if AtomStart>FromPos then begin
//debugln(['Append source in front of macro=',dbgstr(copy(Src,FromPos,AtomStart-FromPos))]);
AddLink(StrStream.Position+1,Code,FromPos);
StrStream.Write(Code.Source[FromPos],AtomStart-FromPos);
FromPos:=p;
StrStream.Write(Src[FromPos],AtomStart-FromPos);
end;
FromPos:=p;
if System.Pos('(',MacroItem^.Name)>0
then begin
// a macro function
@ -614,11 +616,11 @@ var
until false;
FromPos:=p;
end;
MacroValue:=MacroItem^.Value;
//debugln(['Append Macro found: ',MacroItem^.Name]);
if MacroValue<>'' then begin
// write macro value
AddLink(StrStream.Position+1,nil,0);
//debugln(['Append macrovalue=',dbgstr(MacroValue)]);
StrStream.Write(MacroValue[1],length(MacroValue));
end;
end;
@ -626,6 +628,7 @@ var
end;
if FromPos<EndPos then begin
AddLink(StrStream.Position+1,Code,FromPos);
//debugln(['Append source after macro=',dbgstr(copy(Src,FromPos,EndPos-FromPos))]);
StrStream.Write(Src[FromPos],EndPos-FromPos);
end;
end;

View File

@ -2,6 +2,8 @@
Test with:
./runtests --format=plain --suite=TTestCodetoolsH2Pas
./runtests --format=plain --suite=TestCTH2PMergeHeaderFiles
./runtests --format=plain --suite=TestCTH2PReplaceMacros
./runtests --format=plain --suite=TestCTH2PConvertSimpleTypes
}
unit TestCTH2Pas;
@ -23,6 +25,8 @@ type
protected
published
procedure TestCTH2PMergeHeaderFiles;
procedure TestCTH2PReplaceMacros;
procedure TestCTH2PConvertSimpleTypes;
end;
implementation
@ -66,6 +70,66 @@ begin
end;
end;
procedure TTestCodetoolsH2Pas.TestCTH2PReplaceMacros;
var
Header1: TCodeBuffer;
Buffers: TFPList;
Merger: TCHeaderFileMerger;
procedure Check(Msg, Src, ExpectedSrc: string);
var
NewSrc: String;
begin
Header1.Source:=Src;
Merger.Merge(Buffers,[]);
NewSrc:=Trim(Merger.CombinedSource.Source);
AssertEquals(Msg,dbgstr(ExpectedSrc),dbgstr(NewSrc));
end;
begin
Header1:=CodeToolBoss.CreateFile('header1.h');
Merger:=TCHeaderFileMerger.Create;
Buffers:=TFPList.Create;
try
Buffers.Add(Header1);
// undefine
Merger.Macros['remove1']:='';
Check('undefine remove1','remove1','');
// define
Merger.Macros['macro1']:='newvalue';
Check('define macro1','macro1','newvalue');
// define macro function
Merger.Macros['macrofunc1()']:='newvalue';
Check('define macrofunc1','macrofunc1(param)','newvalue');
// do not replace #define
Merger.Macros['macro1']:='newvalue';
Check('do not replace macros in #define','#define macro1','#define macro1');
Check('do not replace macros in #undef','#undef macro1','#undef macro1');
Check('do not replace macros in #ifdef','#ifdef macro1','#ifdef macro1');
Check('do not replace macros in #ifndef','#ifndef macro1','#ifndef macro1');
finally
Buffers.Free;
Merger.Free;
end;
end;
procedure TTestCodetoolsH2Pas.TestCTH2PConvertSimpleTypes;
var
Tool: TH2PasTool;
Header1: TCodeBuffer;
PasCode: TCodeBuffer;
begin
Tool:=TH2PasTool.Create;
try
Header1:=CodeToolBoss.CreateFile('header1.h');
PasCode:=CodeToolBoss.CreateFile('header1.pas');
finally
Tool.Free;
end;
end;
initialization
AddToCodetoolsTestSuite(TTestCodetoolsH2Pas);

View File

@ -24,7 +24,9 @@ uses
Classes, consoletestrunner,
testglobals, testunits, dom,
{Unit needed to set the LCL version and widget set name}
LCLVersion, InterfaceBase, Interfaces, TestCTXMLFixFragments, TestCTH2Pas;
LCLVersion, InterfaceBase, Interfaces,
// testing codetools
TestCTXMLFixFragments, TestCTRangeScan, TestCTH2Pas;
type