Integrate tests for #1394 into our test suite

This commit is contained in:
Martin Hořeňovský 2019-01-15 23:13:16 +01:00
parent d084162b2f
commit 8989c9b560
No known key found for this signature in database
GPG key ID: DE48307B8B0D381A
6 changed files with 72 additions and 47 deletions

View file

@ -9,6 +9,38 @@
#include <string>
#include <vector>
std::string escape_arg(const std::string& arg) {
if (arg.empty() == false &&
arg.find_first_of(" \t\n\v\"") == arg.npos) {
return arg;
}
std::string escaped;
escaped.push_back('"');
for (auto it = arg.begin(); ; ++it) {
int num_backslashes = 0;
while (it != arg.end() && *it == '\\') {
++it;
++num_backslashes;
}
if (it == arg.end()) {
escaped.append(num_backslashes * 2, '\\');
break;
} else if (*it == '"') {
escaped.append(num_backslashes * 2 + 1, '\\');
escaped.push_back(*it);
} else {
escaped.append(num_backslashes, '\\');
escaped.push_back(*it);
}
}
escaped.push_back('"');
return escaped;
}
void create_empty_file(std::string const& path) {
std::ofstream ofs(path);
@ -60,8 +92,9 @@ std::string windowsify_path(std::string path) {
void exec_cmd(std::string const& cmd, int log_num, std::string const& path) {
std::array<char, 128> buffer;
#if defined(_WIN32)
// cmd has already been escaped outside this function.
auto real_cmd = "OpenCppCoverage --export_type binary:cov-report" + std::to_string(log_num)
+ ".bin --quiet " + "--sources " + path + " --cover_children -- " + cmd;
+ ".bin --quiet " + "--sources " + escape_arg(path) + " --cover_children -- " + cmd;
std::cout << "=== Marker ===: Cmd: " << real_cmd << '\n';
std::shared_ptr<FILE> pipe(_popen(real_cmd.c_str(), "r"), _pclose);
#else // Just for testing, in the real world we will always work under WIN32
@ -91,9 +124,9 @@ int main(int argc, char** argv) {
assert(sep - begin(args) == 2 && "Structure differs from expected!");
auto num = parse_log_file_arg(args[1]);
auto cmdline = std::accumulate(++sep, end(args), std::string{}, [] (const std::string& lhs, const std::string& rhs) {
return lhs + ' ' + rhs;
return lhs + ' ' + escape_arg(rhs);
});
try {