diff --git a/README.markdown b/README.markdown index aee26ed..dac3b69 100644 --- a/README.markdown +++ b/README.markdown @@ -95,6 +95,7 @@ unfinished form on my harddrive for more than a year. Finally it slipped out. -mns name dll_or_exe [dll_or_exe_2]Create a separate namespace with the given name for the listed dll:s. All modules loaded in those module(s) will be namespaced. -lcl LineCountLimitCount number of times a line is executed up to the specified limit -tecPassthrough the exitcode of the application inspected + -twdUse the application's path as working directory ## License diff --git a/Source/CoverageConfiguration.pas b/Source/CoverageConfiguration.pas index 92e05fa..c9a84a6 100644 --- a/Source/CoverageConfiguration.pas +++ b/Source/CoverageConfiguration.pas @@ -46,6 +46,7 @@ TCoverageConfiguration = class(TInterfacedObject, ICoverageConfiguration) FXmlMergeGenerics: Boolean; FHtmlOutput: Boolean; FTestExeExitCode: Boolean; + FUseTestExePathAsWorkingDir: Boolean; FExcludeSourceMaskLst: TStrings; FLoadingFromDProj: Boolean; FModuleNameSpaces: TModuleNameSpaceList; @@ -112,6 +113,7 @@ TCoverageConfiguration = class(TInterfacedObject, ICoverageConfiguration) function XmlMergeGenerics: Boolean; function HtmlOutput: Boolean; function TestExeExitCode: Boolean; + function UseTestExePathAsWorkingDir: Boolean; function LineCountLimit: Integer; function ModuleNameSpace(const AModuleName: string): TModuleNameSpace; @@ -362,6 +364,11 @@ function TCoverageConfiguration.TestExeExitCode: Boolean; Result := FTestExeExitCode; end; +function TCoverageConfiguration.UseTestExePathAsWorkingDir: Boolean; +begin + Result := FUseTestExePathAsWorkingDir; +end; + function TCoverageConfiguration.IsPathInExclusionList(const APath: TFileName): Boolean; var Mask: string; @@ -396,6 +403,7 @@ procedure TCoverageConfiguration.ParseBooleanSwitches; FHtmlOutput := IsSet(I_CoverageConfiguration.cPARAMETER_HTML_OUTPUT); uConsoleOutput.G_Verbose_Output := IsSet(I_CoverageConfiguration.cPARAMETER_VERBOSE); FTestExeExitCode := IsSet(I_CoverageConfiguration.cPARAMETER_TESTEXE_EXIT_CODE); + FUseTestExePathAsWorkingDir := IsSet(I_CoverageConfiguration.cPARAMETER_USE_TESTEXE_WORKING_DIR); end; procedure TCoverageConfiguration.ExcludeSourcePaths; @@ -572,7 +580,8 @@ procedure TCoverageConfiguration.ParseSwitch(var AParameter: Integer); or (SwitchItem = I_CoverageConfiguration.cPARAMETER_XML_LINES_MERGE_GENERICS) or (SwitchItem = I_CoverageConfiguration.cPARAMETER_HTML_OUTPUT) or (SwitchItem = I_CoverageConfiguration.cPARAMETER_VERBOSE) - or (SwitchItem = I_CoverageConfiguration.cPARAMETER_TESTEXE_EXIT_CODE) then + or (SwitchItem = I_CoverageConfiguration.cPARAMETER_TESTEXE_EXIT_CODE) + or (SwitchItem = I_CoverageConfiguration.cPARAMETER_USE_TESTEXE_WORKING_DIR) then begin // do nothing, because its already parsed end diff --git a/Source/Debugger.pas b/Source/Debugger.pas index abdc212..083c915 100644 --- a/Source/Debugger.pas +++ b/Source/Debugger.pas @@ -266,7 +266,9 @@ procedure TDebugger.PrintUsage; ConsoleOutput(I_CoverageConfiguration.cPARAMETER_LINE_COUNT + ' [number] -- Count number of times a line is executed up to the specified limit (default 0 - disabled)'); ConsoleOutput(I_CoverageConfiguration.cPARAMETER_TESTEXE_EXIT_CODE + - ' [number] -- Passthrough the exitcode of the application'); + ' -- Passthrough the exitcode of the application'); + ConsoleOutput(I_CoverageConfiguration.cPARAMETER_USE_TESTEXE_WORKING_DIR + + ' -- Use the application''s path as working directory'); end; @@ -387,6 +389,7 @@ function TDebugger.StartProcessToDebug: Boolean; StartInfo: TStartupInfo; ProcInfo: TProcessInformation; Parameters: string; + WorkingDir: PChar; begin Parameters := FCoverageConfiguration.ApplicationParameters; FLogManager.Log( @@ -402,6 +405,12 @@ function TDebugger.StartProcessToDebug: Boolean; StartInfo.hStdOutput := GetStdHandle(STD_OUTPUT_HANDLE); StartInfo.hStdError := GetStdHandle(STD_ERROR_HANDLE); + WorkingDir := nil; + if FCoverageConfiguration.UseTestExePathAsWorkingDir then + begin + WorkingDir := PChar(ExtractFilePath(FCoverageConfiguration.ExeFileName)); + end; + Parameters := '"' + FCoverageConfiguration.ExeFileName + '" ' + Parameters; Result := CreateProcess( nil, @@ -411,7 +420,7 @@ function TDebugger.StartProcessToDebug: Boolean; True, CREATE_NEW_PROCESS_GROUP + NORMAL_PRIORITY_CLASS + DEBUG_PROCESS, nil, - nil, + WorkingDir, StartInfo, ProcInfo ); diff --git a/Source/I_CoverageConfiguration.pas b/Source/I_CoverageConfiguration.pas index 658aceb..67a6d5e 100644 --- a/Source/I_CoverageConfiguration.pas +++ b/Source/I_CoverageConfiguration.pas @@ -40,6 +40,7 @@ interface function XmlMergeGenerics: Boolean; function HtmlOutput: Boolean; function TestExeExitCode: Boolean; + function UseTestExePathAsWorkingDir: Boolean; function ModuleNameSpace(const AModuleName: string): TModuleNameSpace; function UnitNameSpace(const AModuleName: string): TUnitNameSpace; function LineCountLimit: Integer; @@ -74,6 +75,7 @@ interface cPARAMETER_UNIT_NAMESPACE = '-uns'; cPARAMETER_EMMA_SEPARATE_META = '-meta'; cPARAMETER_TESTEXE_EXIT_CODE = '-tec'; + cPARAMETER_USE_TESTEXE_WORKING_DIR = '-twd'; cPARAMETER_LINE_COUNT = '-lcl'; cIGNORE_UNIT_PREFIX = '!';