forked from OpenCppCoverage/OpenCppCoverage
-
Notifications
You must be signed in to change notification settings - Fork 0
/
StartInfo.cpp
106 lines (90 loc) · 3.13 KB
/
StartInfo.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
// OpenCppCoverage is an open source code coverage for C++.
// Copyright (C) 2014 OpenCppCoverage
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "stdafx.h"
#include "StartInfo.hpp"
#include <filesystem>
#include "Tools/Tool.hpp"
#include "CppCoverageException.hpp"
namespace fs = std::filesystem;
namespace CppCoverage
{
namespace
{
//-------------------------------------------------------------------------
void CheckPathExists(const std::string& context, const fs::path& path)
{
if (!Tools::FileExists(path))
throw std::runtime_error(context + " \"" + path.string() + "\" does not exist");
}
}
//-------------------------------------------------------------------------
StartInfo::StartInfo(const fs::path& path)
: path_(path)
{
AddArgument(path.wstring());
}
//-------------------------------------------------------------------------
StartInfo::StartInfo(StartInfo&& startInfo)
: path_{ std::move(startInfo.path_) }
, arguments_( std::move(startInfo.arguments_) )
, workingDirectory_{ std::move(startInfo.workingDirectory_) }
{
}
//-------------------------------------------------------------------------
void StartInfo::SetWorkingDirectory(const fs::path& workingDirectory)
{
CheckPathExists("Working directory", workingDirectory);
workingDirectory_ = workingDirectory;
}
//-------------------------------------------------------------------------
void StartInfo::AddArgument(const std::wstring& argument)
{
arguments_.push_back(argument);
}
//-------------------------------------------------------------------------
const std::filesystem::path& StartInfo::GetPath() const
{
return path_;
}
//-------------------------------------------------------------------------
const std::vector<std::wstring>& StartInfo::GetArguments() const
{
return arguments_;
}
//-------------------------------------------------------------------------
const fs::path* StartInfo::GetWorkingDirectory() const
{
if (workingDirectory_)
return &workingDirectory_.get();
return nullptr;
}
//-------------------------------------------------------------------------
std::wostream& operator<<(std::wostream& ostr, const StartInfo& startInfo)
{
ostr << L"Path:" << startInfo.path_ << std::endl;
ostr << L"Arguments:";
const auto& arguments = startInfo.arguments_;
for (size_t i = 1; i < arguments.size(); ++i)
ostr << arguments[i] << " ";
ostr << std::endl;
ostr << L"Working directory: ";
if (startInfo.workingDirectory_)
ostr << *startInfo.workingDirectory_;
else
ostr << L"not set.";
return ostr;
}
}