codetools: test AddProcModifier

git-svn-id: trunk@57918 -
This commit is contained in:
mattias 2018-05-13 11:33:13 +00:00
parent c7d41c8b0d
commit 62b1cabdb9
2 changed files with 72 additions and 0 deletions

1
.gitattributes vendored
View File

@ -965,6 +965,7 @@ components/codetools/tests/runtestscodetools.lpi svneol=native#text/plain
components/codetools/tests/runtestscodetools.lpr svneol=native#text/plain
components/codetools/tests/testbasiccodetools.pas svneol=native#text/plain
components/codetools/tests/testcfgscript.pas svneol=native#text/plain
components/codetools/tests/testchangedeclaration.pas svneol=native#text/plain
components/codetools/tests/testcodecompletion.pas svneol=native#text/plain
components/codetools/tests/testcompleteblock.pas svneol=native#text/plain
components/codetools/tests/testcompreaderwriterpas.pas svneol=native#text/plain

View File

@ -0,0 +1,71 @@
unit TestChangeDeclaration;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, CodeToolManager, CodeCache, PascalParserTool,
LazLogger, LazFileUtils, fpcunit, testregistry,
TestFinddeclaration, TestStdCodetools;
type
TTestChangeDeclaration = class(TCustomTestCTStdCodetools)
published
procedure TestCTAddProcedureModifier;
end;
implementation
procedure TTestChangeDeclaration.TestCTAddProcedureModifier;
procedure Test(ProcCode, aModifier, Expected: string);
var
Code: TCodeBuffer;
Src, ProcHead: String;
begin
Src:='unit TestChangeDeclaration;'+sLineBreak
+'interface'+sLineBreak
+ProcCode+sLineBreak
+'implementation'+sLineBreak
+'end.';
Code:=CodeToolBoss.CreateFile('TestChangeDeclaration.pas');
Code.Source:=Src;
if not CodeToolBoss.AddProcModifier(Code,3,3,aModifier) then
begin
Fail('AddProcModifier failed: '+CodeToolBoss.ErrorMessage);
end else begin
if not CodeToolBoss.ExtractProcedureHeader(Code,3,3,
[phpWithStart,phpWithResultType,phpWithOfObject,phpWithProcModifiers,phpWithComments,phpDoNotAddSemicolon],
ProcHead)
then
Fail('ExtractProcedureHeader failed: '+CodeToolBoss.ErrorMessage);
if ProcHead<>Expected then begin
writeln('Test ProcCode="',ProcCode,'"');
Src:=Code.Source;
writeln('SrcSTART:======================');
writeln(Src);
writeln('SrcEND:========================');
AssertEquals('ProcHead',Expected,ProcHead);
end;
end;
end;
begin
// remove first unit
Test('procedure DoIt;','overload','procedure DoIt; overload;');
Test('procedure DoIt ;','overload','procedure DoIt; overload ;');
Test('procedure DoIt ; ;','overload','procedure DoIt; overload ;');
Test('procedure DoIt; overload;','overload','procedure DoIt; overload;');
Test('procedure DoIt; {$IFDEF FPC}overload{$ENDIF};','overload','procedure DoIt; {$IFDEF FPC}overload{$ENDIF};');
Test('procedure DoIt; procedure Bla;','overload','procedure DoIt; overload;');
Test(' procedure DoIt;'+sLineBreak+' procedure Bla;',
'overload','procedure DoIt; overload;');
Test(' procedure DoIt; external name ''doit'';'+sLineBreak+' procedure Bla;',
'overload','procedure DoIt; external name ''doit''; overload;');
end;
initialization
RegisterTests([TTestChangeDeclaration]);
end.