diff --git a/.gitattributes b/.gitattributes index 17fcaa6368..3d325ec776 100644 --- a/.gitattributes +++ b/.gitattributes @@ -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 diff --git a/components/codetools/tests/testchangedeclaration.pas b/components/codetools/tests/testchangedeclaration.pas new file mode 100644 index 0000000000..5c3f16d398 --- /dev/null +++ b/components/codetools/tests/testchangedeclaration.pas @@ -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. +