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 LineCountLimit | Count number of times a line is executed up to the specified limit |
-tec | Passthrough the exitcode of the application inspected |
+ -twd | Use 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 = '!';