diff --git a/Coverage-x86/Coverage-x86.vcxproj b/Coverage-x86/Coverage-x86.vcxproj
index f57dc5f..a7a6fbd 100644
--- a/Coverage-x86/Coverage-x86.vcxproj
+++ b/Coverage-x86/Coverage-x86.vcxproj
@@ -54,6 +54,7 @@
+
@@ -127,37 +128,6 @@
dbghelp.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/Coverage-x86/Coverage-x86.vcxproj.filters b/Coverage-x86/Coverage-x86.vcxproj.filters
index a1bdd45..d56ba3c 100644
--- a/Coverage-x86/Coverage-x86.vcxproj.filters
+++ b/Coverage-x86/Coverage-x86.vcxproj.filters
@@ -5,53 +5,5 @@
{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}
rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms
-
- {701ca765-1c95-4bb0-b030-4ba6c4a3640b}
-
-
-
-
-
-
-
-
-
-
-
- Disassembler
-
-
- Disassembler
-
-
- Disassembler
-
-
-
-
-
-
-
-
-
-
-
-
- Disassembler
-
-
- Disassembler
-
-
-
-
-
-
- Disassembler
-
-
- Disassembler
-
-
\ No newline at end of file
diff --git a/Coverage/Coverage.vcxproj b/Coverage/Coverage.vcxproj
index b6c5b92..e64799f 100644
--- a/Coverage/Coverage.vcxproj
+++ b/Coverage/Coverage.vcxproj
@@ -55,6 +55,7 @@
+
@@ -136,41 +137,6 @@
dbghelp.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/Coverage/Coverage.vcxproj.filters b/Coverage/Coverage.vcxproj.filters
index 0b2b5a3..d56ba3c 100644
--- a/Coverage/Coverage.vcxproj.filters
+++ b/Coverage/Coverage.vcxproj.filters
@@ -5,57 +5,5 @@
{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}
rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms
-
- {61466815-0264-4d18-81fc-e6f4620e6882}
-
-
-
-
-
- Disassembler
-
-
- Disassembler
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Disassembler
-
-
- Disassembler
-
-
- Disassembler
-
-
-
-
-
-
-
-
-
-
-
- Disassembler
-
-
- Disassembler
-
-
\ No newline at end of file
diff --git a/Coverage/CoverageRunner.h b/Coverage/CoverageRunner.h
index 51b973a..0115e35 100644
--- a/Coverage/CoverageRunner.h
+++ b/Coverage/CoverageRunner.h
@@ -992,7 +992,10 @@ struct CoverageRunner
}
// Write report of current execution
- coverageContext.WriteReport(options.ExportFormat, mergedInfo, outputFile);
+ {
+ std::ofstream ofs(outputFile);
+ coverageContext.WriteReport(options.ExportFormat, mergedInfo, ofs);
+ }
if (options.isAtLeastLevel(VerboseLevel::Info))
{
diff --git a/Coverage/FileCallbackInfo.h b/Coverage/FileCallbackInfo.h
index 2929d21..61a6cec 100644
--- a/Coverage/FileCallbackInfo.h
+++ b/Coverage/FileCallbackInfo.h
@@ -49,11 +49,14 @@ struct FileCallbackInfo
std::string filename;
std::string sourcePath;
- std::unordered_map> lineData;
+ using MergedProfileInfoMap = std::unordered_map>>;
+ using FileInfoMap = std::unordered_map>;
+
+ FileInfoMap lineData;
void Filter(RuntimeNotifications& notifications)
{
- std::unordered_map> newLineData;
+ FileInfoMap newLineData;
for (auto& it : lineData)
{
if (!notifications.IgnoreFile(it.first))
@@ -110,7 +113,10 @@ struct FileCallbackInfo
auto it = lineData.find(filename);
if (it == lineData.end())
{
- auto newLineData = new FileInfo(filename);
+ std::ifstream ifs(filename);
+ auto newLineData = new FileInfo(ifs);
+ ifs.close();
+
lineData[filename] = std::unique_ptr(newLineData);
return newLineData->LineInfo(size_t(lineNumber));
@@ -121,24 +127,21 @@ struct FileCallbackInfo
}
}
- void WriteReport(RuntimeOptions::ExportFormatType exportFormat, std::unordered_map>>& mergedProfileInfo, const std::string& filename)
+ void WriteReport(RuntimeOptions::ExportFormatType exportFormat, const MergedProfileInfoMap& mergedProfileInfo, std::ostream& stream)
{
switch (exportFormat)
{
- case RuntimeOptions::Clover: WriteClover(filename); break;
- case RuntimeOptions::Cobertura: WriteCobertura(filename); break;
- case RuntimeOptions::NativeV2: WriteNativeV2(filename, mergedProfileInfo); break;
- default: WriteNative(filename, mergedProfileInfo); break;
+ case RuntimeOptions::Clover: WriteClover(stream); break;
+ case RuntimeOptions::Cobertura: WriteCobertura(stream); break;
+ case RuntimeOptions::NativeV2: WriteNativeV2(stream); break;
+ default: WriteNative(stream, mergedProfileInfo); break;
}
}
private:
- void WriteClover(const std::string& filename)
+ void WriteClover(std::ostream& stream)
{
- std::string reportFilename = filename;
- std::ofstream ofs(reportFilename);
-
size_t totalFiles = 0;
size_t coveredFiles = 0;
size_t totalLines = 0;
@@ -163,19 +166,19 @@ struct FileCallbackInfo
}
time_t t = time(0); // get time now
- ofs << "" << std::endl;
- ofs << "" << std::endl;
- ofs << "" << std::endl;
- ofs << "" << std::endl;
- ofs << "" << std::endl;
+ stream << "" << std::endl;
+ stream << "" << std::endl;
+ stream << "" << std::endl;
+ stream << "" << std::endl;
+ stream << "" << std::endl;
for (auto& it : lineData)
{
auto ptr = it.second.get();
- ofs << "" << std::endl;
+ stream << "" << std::endl;
for (size_t i = 0; i < ptr->numberLines; ++i)
{
@@ -183,28 +186,25 @@ struct FileCallbackInfo
{
if (ptr->lines[i].HitCount == ptr->lines[i].DebugCount)
{
- ofs << "" << std::endl;
+ stream << "" << std::endl;
}
else
{
- ofs << "" << std::endl;
+ stream << "" << std::endl;
}
}
}
- ofs << "" << std::endl;
+ stream << "" << std::endl;
}
- ofs << "" << std::endl;
- ofs << "" << std::endl;
- ofs << "" << std::endl;
+ stream << "" << std::endl;
+ stream << "" << std::endl;
+ stream << "" << std::endl;
}
- void WriteCobertura(const std::string& filename)
+ void WriteCobertura(std::ostream& stream)
{
- std::string reportFilename = filename;
- std::ofstream ofs(reportFilename);
-
std::unordered_set sourceList;
double total = 0;
@@ -228,12 +228,12 @@ struct FileCallbackInfo
double lineRate = covered / total;
- ofs << "" << std::endl;
- ofs << "" << std::endl;
- ofs << "\t" << "" << std::endl;
+ stream << "" << std::endl;
+ stream << "" << std::endl;
+ stream << "\t" << "" << std::endl;
- ofs << "\t\t" << "" << std::endl;
- ofs << "\t\t\t" << "" << std::endl;
+ stream << "\t\t" << "" << std::endl;
+ stream << "\t\t\t" << "" << std::endl;
for (auto& it : lineData)
{
auto ptr = it.second.get();
@@ -261,8 +261,8 @@ struct FileCallbackInfo
double lineRate = covered / total;
- ofs << "\t\t\t\t" << "" << std::endl;
- ofs << "\t\t\t\t\t" << "" << std::endl;
+ stream << "\t\t\t\t" << "" << std::endl;
+ stream << "\t\t\t\t\t" << "" << std::endl;
for (size_t i = 0; i < ptr->numberLines; ++i)
{
@@ -270,38 +270,36 @@ struct FileCallbackInfo
{
if (ptr->lines[i].HitCount == ptr->lines[i].DebugCount)
{
- ofs << "\t\t\t\t\t\t" << "" << std::endl;
+ stream << "\t\t\t\t\t\t" << "" << std::endl;
}
else
{
- ofs << "\t\t\t\t\t\t" << "" << std::endl;
+ stream << "\t\t\t\t\t\t" << "" << std::endl;
}
}
}
- ofs << "\t\t\t\t\t" << "" << std::endl;
- ofs << "\t\t\t\t" << "" << std::endl;
+ stream << "\t\t\t\t\t" << "" << std::endl;
+ stream << "\t\t\t\t" << "" << std::endl;
}
- ofs << "\t\t\t" << "" << std::endl;
- ofs << "\t\t" << "" << std::endl;
- ofs << "\t" << "" << std::endl;
- ofs << "\t" << std::endl;
+ stream << "\t\t\t" << "" << std::endl;
+ stream << "\t\t" << "" << std::endl;
+ stream << "\t" << "" << std::endl;
+ stream << "\t" << std::endl;
for (const auto& source : sourceList)
{
- ofs << "\t\t" << source << ":" << std::endl;
+ stream << "\t\t" << source << ":" << std::endl;
}
- ofs << "\t" << std::endl;
- ofs << "" << std::endl;
+ stream << "\t" << std::endl;
+ stream << "" << std::endl;
}
- void WriteNative(const std::string& filename, std::unordered_map>>& mergedProfileInfo)
+ void WriteNative(std::ostream& stream, const MergedProfileInfoMap& mergedProfileInfo)
{
- std::ofstream ofs(filename);
-
for (auto& it : lineData)
{
- ofs << "FILE: " << it.first << std::endl;
+ stream << "FILE: " << it.first << std::endl;
auto ptr = it.second.get();
std::string result;
@@ -333,27 +331,27 @@ struct FileCallbackInfo
result.push_back(state);
}
- ofs << "RES: " << result << std::endl;
+ stream << "RES: " << result << std::endl;
auto profInfo = mergedProfileInfo.find(it.first);
if (profInfo == mergedProfileInfo.end())
{
- ofs << "PROF: " << std::endl;
+ stream << "PROF: " << std::endl;
}
else
{
- ofs << "PROF: ";
+ stream << "PROF: ";
for (auto& it : *(profInfo->second.get()))
{
- ofs << int(it.Deep) << ',' << int(it.Shallow) << ',';
+ stream << int(it.Deep) << ',' << int(it.Shallow) << ',';
}
- ofs << std::endl;
+ stream << std::endl;
}
}
}
- void WriteNativeV2(const std::string& filename, std::unordered_map>>& mergedProfileInfo)
+ void WriteNativeV2(std::ostream& stream)
{
const auto encodeCoverage = [](const FileInfo& info) -> FileCoverageV2
{
@@ -372,11 +370,9 @@ struct FileCallbackInfo
return coverage;
};
- std::ofstream ofs(filename);
-
MD5 md5;
- FileCoverageV2::writeHeader(ofs);
+ FileCoverageV2::writeHeader(stream);
std::vector filepaths;
filepaths.reserve(lineData.size());
@@ -408,19 +404,19 @@ struct FileCallbackInfo
if (!dirPartAdded && !dirPath.empty())
{
dirPartAdded = true;
- FileCoverageV2::openDirectory(ofs, dirPath);
+ FileCoverageV2::openDirectory(stream, dirPath);
}
auto coverage = encodeCoverage(*it.second.get());
coverage.md5Code = md5.encode(it.first);
- coverage.write(filepath, ofs);
+ coverage.write(filepath, stream);
filepaths.erase(std::remove(filepaths.begin(), filepaths.end(), it.first), filepaths.end());
}
if (dirPartAdded && !dirPath.empty())
{
- FileCoverageV2::closeDirectory(ofs);
+ FileCoverageV2::closeDirectory(stream);
}
}
@@ -441,7 +437,6 @@ struct FileCallbackInfo
}
}
- FileCoverageV2::writeFooter(ofs);
- ofs.close();
+ FileCoverageV2::writeFooter(stream);
}
};
diff --git a/Coverage/FileInfo.cpp b/Coverage/FileInfo.cpp
index b3676c0..ea88c48 100644
--- a/Coverage/FileInfo.cpp
+++ b/Coverage/FileInfo.cpp
@@ -5,10 +5,8 @@
#include
#include
-FileInfo::FileInfo(const std::string& filename)
+FileInfo::FileInfo(std::istream& ifs)
{
- std::ifstream ifs(filename);
-
bool current = true;
std::string line;
diff --git a/Coverage/FileInfo.h b/Coverage/FileInfo.h
index a26b77a..a9ecb12 100644
--- a/Coverage/FileInfo.h
+++ b/Coverage/FileInfo.h
@@ -38,7 +38,7 @@ struct FileInfo
LineType GetLineType(const std::string& line);
public:
- FileInfo(const std::string& filename);
+ FileInfo(std::istream& ifs);
std::vector relevant;
std::vector lines;
diff --git a/Coverage/ModuleInfo.h b/Coverage/ModuleInfo.h
deleted file mode 100644
index 6f70f09..0000000
--- a/Coverage/ModuleInfo.h
+++ /dev/null
@@ -1 +0,0 @@
-#pragma once
diff --git a/Coverage/Shared/Shared.vcxitems b/Coverage/Shared/Shared.vcxitems
new file mode 100644
index 0000000..607a897
--- /dev/null
+++ b/Coverage/Shared/Shared.vcxitems
@@ -0,0 +1,51 @@
+
+
+
+ $(MSBuildAllProjects);$(MSBuildThisFileFullPath)
+ true
+ {9d16d9c8-4c07-40cc-96dc-f0fefc8c33b3}
+
+
+
+ %(AdditionalIncludeDirectories);$(MSBuildThisFileDirectory)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Coverage/Shared/Shared.vcxitems.filters b/Coverage/Shared/Shared.vcxitems.filters
new file mode 100644
index 0000000..d3178d8
--- /dev/null
+++ b/Coverage/Shared/Shared.vcxitems.filters
@@ -0,0 +1,57 @@
+
+
+
+
+
+
+
+ Disassembler
+
+
+ Disassembler
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Disassembler
+
+
+ Disassembler
+
+
+ Disassembler
+
+
+
+
+
+ Disassembler
+
+
+ Disassembler
+
+
+
+
+ {a848a8d1-9837-4608-923e-a1169637de43}
+
+
+
\ No newline at end of file
diff --git a/Coverage/Test/Test.vcxproj b/Coverage/Test/Test.vcxproj
index ea20e49..06f1537 100644
--- a/Coverage/Test/Test.vcxproj
+++ b/Coverage/Test/Test.vcxproj
@@ -29,7 +29,7 @@
DynamicLibrary
true
v143
- Unicode
+ MultiByte
false
@@ -37,14 +37,14 @@
false
v143
true
- Unicode
+ MultiByte
false
DynamicLibrary
true
v143
- Unicode
+ MultiByte
false
@@ -52,13 +52,14 @@
false
v143
true
- Unicode
+ MultiByte
false
+
@@ -90,9 +91,10 @@
NotUsing
Level3
Disabled
- $(VCInstallDir)UnitTest\include;%(AdditionalIncludeDirectories)
+ $(VCInstallDir)UnitTest\include;..;%(AdditionalIncludeDirectories)
WIN32;_DEBUG;%(PreprocessorDefinitions)
true
+ stdcpp20
Windows
@@ -127,9 +129,10 @@
MaxSpeed
true
true
- $(VCInstallDir)UnitTest\include;%(AdditionalIncludeDirectories)
+ $(VCInstallDir)UnitTest\include;..;%(AdditionalIncludeDirectories)
WIN32;NDEBUG;%(PreprocessorDefinitions)
true
+ stdcpp20
Windows
@@ -162,14 +165,11 @@
-
-
-
-
+
diff --git a/Coverage/Test/nativeV2.cpp b/Coverage/Test/nativeV2.cpp
index 795a963..f1a90b3 100644
--- a/Coverage/Test/nativeV2.cpp
+++ b/Coverage/Test/nativeV2.cpp
@@ -52,7 +52,8 @@ namespace TestFormat
Assert::AreEqual(reference, merge._code);
Assert::AreEqual(coverage._nbLinesFile, merge._nbLinesFile);
Assert::AreEqual(coverage._nbLinesCode, merge._nbLinesCode);
- Assert::AreEqual(5ull, merge._nbLinesCovered);
+ const size_t EXPECT_LINES_COVERED = 5;
+ Assert::AreEqual(EXPECT_LINES_COVERED, merge._nbLinesCovered);
// Write data
const std::string filename("demo");
@@ -77,7 +78,8 @@ namespace TestFormat
options.ExportFormat = RuntimeOptions::ExportFormatType::NativeV2;
MergeRunnerV2 runner(options);
auto dict = runner.createDictionary(filename, ss);
- Assert::AreEqual(1ull, dict.size());
+ const size_t EXPECT_DICT_SIZE = 1;
+ Assert::AreEqual(EXPECT_DICT_SIZE, dict.size());
// Check dictionary
const auto& saved = dict[dirName][filename];
diff --git a/Coverage/Test/writeReportTest.cpp b/Coverage/Test/writeReportTest.cpp
new file mode 100644
index 0000000..581f42a
--- /dev/null
+++ b/Coverage/Test/writeReportTest.cpp
@@ -0,0 +1,147 @@
+#include "CppUnitTest.h"
+#include
+#include
+
+#include "FileCallbackInfo.h"
+
+#ifndef NOMINMAX
+# define NOMINMAX
+# include
+#endif
+
+#pragma warning(disable: 4091)
+#include
+#pragma warning(default: 4091)
+
+using namespace Microsoft::VisualStudio::CppUnitTestFramework;
+
+namespace TestFormat
+{
+ TEST_CLASS(TestWriteReport)
+ {
+ public:
+
+ TEST_CLASS_INITIALIZE(Init)
+ {
+ auto& options = RuntimeOptions::Instance();
+ options.CodePaths.push_back("C:\\proj\\src\\");
+ options.CodePaths.push_back("C:\\proj\\empty\\");
+ options.CodePaths.push_back("C:\\proj\\lib\\");
+
+ options.PackageName = "MyPackage.exe";
+ }
+
+ TEST_CLASS_CLEANUP(CleanUp)
+ {
+ auto& options = RuntimeOptions::Instance();
+ options.CodePaths.clear();
+ options.PackageName.clear();
+ }
+
+ void WriteReport(const std::string& expectReport, RuntimeOptions::ExportFormatType exportFormat, const FileCallbackInfo::MergedProfileInfoMap& mergedProfileData)
+ {
+ auto createFileLineInfoArray = [](const std::vector>& lineInfo) -> std::vector
+ {
+ std::vector arrayFileLineInfo;
+ arrayFileLineInfo.resize(lineInfo.size());
+ for (unsigned i = 0; i < lineInfo.size(); i++)
+ {
+ arrayFileLineInfo[i].DebugCount = std::get<0>(lineInfo.at(i));
+ arrayFileLineInfo[i].HitCount = std::get<1>(lineInfo.at(i));
+ }
+ return arrayFileLineInfo;
+ };
+
+ auto addFile = [](FileCallbackInfo& fileCallbackInfo, const std::string filename, const std::vector& lines)
+ {
+ std::istringstream iss{};
+ auto fileInfo = new FileInfo(iss);
+ fileInfo->relevant.assign(lines.size(), true);
+ fileInfo->numberLines = lines.size();
+ fileInfo->lines = lines;
+
+ fileCallbackInfo.lineData[filename] = std::unique_ptr(fileInfo);
+ };
+
+ FileCallbackInfo fileCallbackInfo("report.txt");
+
+ addFile(fileCallbackInfo, "C:\\proj\\src\\srcFile.cpp", createFileLineInfoArray({ {4, 4}, {4, 2}, {0, 0}, {4, 0}, {4, 2} }));
+ addFile(fileCallbackInfo, "C:\\proj\\src\\srcFile.h", createFileLineInfoArray({ {6, 6}, {3, 3} }));
+ addFile(fileCallbackInfo, "C:\\proj\\lib\\libFile.cpp", createFileLineInfoArray({ {7, 0}, {4, 0}, {2, 0} }));
+ addFile(fileCallbackInfo, "C:\\proj\\lib\\libFile.h", createFileLineInfoArray({ {18, 12}, {14, 7}, {3, 0} }));
+
+ std::stringstream ss;
+ fileCallbackInfo.WriteReport(exportFormat, mergedProfileData, ss);
+
+ Assert::AreEqual(expectReport, ss.str());
+ }
+
+ TEST_METHOD(WriteReportNativeWithoutProfileData)
+ {
+ const std::string expectReport =
+ "FILE: C:\\proj\\src\\srcFile.cpp\n" \
+ "RES: cp_up\n" \
+ "PROF: \n" \
+ "FILE: C:\\proj\\src\\srcFile.h\n" \
+ "RES: cc\n" \
+ "PROF: \n" \
+ "FILE: C:\\proj\\lib\\libFile.cpp\n" \
+ "RES: uuu\n" \
+ "PROF: \n" \
+ "FILE: C:\\proj\\lib\\libFile.h\n" \
+ "RES: ppu\n" \
+ "PROF: \n";
+
+ FileCallbackInfo::MergedProfileInfoMap mergedProfileData;
+ WriteReport(expectReport, RuntimeOptions::ExportFormatType::Native, mergedProfileData);
+ }
+
+ TEST_METHOD(WriteReportCobertura)
+ {
+ const std::string expectReport =
+ R"()""\n" \
+ R"()""\n" \
+ R"( )""\n" \
+ R"( )""\n" \
+ R"( )""\n" \
+ R"( )""\n" \
+ R"( )""\n" \
+ R"( )""\n" \
+ R"( )""\n" \
+ R"( )""\n" \
+ R"( )""\n" \
+ R"( )""\n" \
+ R"( )""\n" \
+ R"( )""\n" \
+ R"( )""\n" \
+ R"( )""\n" \
+ R"( )""\n" \
+ R"( )""\n" \
+ R"( )""\n" \
+ R"( )""\n" \
+ R"( )""\n" \
+ R"( )""\n" \
+ R"( )""\n" \
+ R"( )""\n" \
+ R"( )""\n" \
+ R"( )""\n" \
+ R"( )""\n" \
+ R"( )""\n" \
+ R"( )""\n" \
+ R"( )""\n" \
+ R"( )""\n" \
+ R"( )""\n" \
+ R"( )""\n" \
+ R"( )""\n" \
+ R"( )""\n" \
+ R"( )""\n" \
+ R"( )""\n" \
+ R"( C:)""\n" \
+ R"( )""\n" \
+ R"()""\n";
+
+ FileCallbackInfo::MergedProfileInfoMap mergedProfileData; // it doesn't matter, can be empty
+ WriteReport(expectReport, RuntimeOptions::ExportFormatType::Cobertura, mergedProfileData);
+ }
+ };
+}
\ No newline at end of file
diff --git a/Library/Library.vcxproj b/Library/Library.vcxproj
index bf815ef..ee70a96 100644
--- a/Library/Library.vcxproj
+++ b/Library/Library.vcxproj
@@ -85,6 +85,7 @@
Level3
Disabled
true
+ stdcpp20
@@ -107,6 +108,7 @@
true
true
true
+ stdcpp20
true
diff --git a/MinimumTest/MinimumTest.vcxproj b/MinimumTest/MinimumTest.vcxproj
index 15f9218..4c2efc5 100644
--- a/MinimumTest/MinimumTest.vcxproj
+++ b/MinimumTest/MinimumTest.vcxproj
@@ -93,6 +93,7 @@
$(VCInstallDir)UnitTest\include;%(AdditionalIncludeDirectories)
WIN32;_DEBUG;%(PreprocessorDefinitions)
true
+ stdcpp20
Windows
@@ -130,6 +131,7 @@
$(VCInstallDir)UnitTest\include;%(AdditionalIncludeDirectories)
WIN32;NDEBUG;%(PreprocessorDefinitions)
true
+ stdcpp20
Windows
diff --git a/MinimumTestApp/MinimumTestApp.vcxproj b/MinimumTestApp/MinimumTestApp.vcxproj
index 1852470..ae78c8b 100644
--- a/MinimumTestApp/MinimumTestApp.vcxproj
+++ b/MinimumTestApp/MinimumTestApp.vcxproj
@@ -74,6 +74,7 @@
Level3
Disabled
true
+ stdcpp20
@@ -95,6 +96,7 @@
true
true
true
+ stdcpp20
true
diff --git a/OpenCPPCoverage.sln b/OpenCPPCoverage.sln
index 6c14cf9..1046a90 100644
--- a/OpenCPPCoverage.sln
+++ b/OpenCPPCoverage.sln
@@ -36,7 +36,15 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Test", "Coverage\Test\Test.vcxproj", "{CC47FB0B-0F7B-4C92-A0EF-07C922A28D87}"
EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Shared", "Coverage\Shared\Shared.vcxitems", "{9D16D9C8-4C07-40CC-96DC-F0FEFC8C33B3}"
+EndProject
Global
+ GlobalSection(SharedMSBuildProjectFiles) = preSolution
+ Coverage\Shared\Shared.vcxitems*{70397440-c4f5-4091-8dbe-f2ffe6107d2d}*SharedItemsImports = 4
+ Coverage\Shared\Shared.vcxitems*{9d16d9c8-4c07-40cc-96dc-f0fefc8c33b3}*SharedItemsImports = 9
+ Coverage\Shared\Shared.vcxitems*{bab94fd2-1956-45b8-8d2f-904519d7ffa4}*SharedItemsImports = 4
+ Coverage\Shared\Shared.vcxitems*{cc47fb0b-0f7b-4c92-a0ef-07c922a28d87}*SharedItemsImports = 4
+ EndGlobalSection
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Debug|x64 = Debug|x64
@@ -137,6 +145,7 @@ Global
{BAB94FD2-1956-45B8-8D2F-904519D7FFA4} = {8A6341B3-9141-4255-8C2B-38343873451F}
{BF2ED12B-E0FC-4FD1-8F95-CEC239453846} = {7A7E6ED9-8154-4643-A506-1E1714A42F13}
{CC47FB0B-0F7B-4C92-A0EF-07C922A28D87} = {8A6341B3-9141-4255-8C2B-38343873451F}
+ {9D16D9C8-4C07-40CC-96DC-F0FEFC8C33B3} = {8A6341B3-9141-4255-8C2B-38343873451F}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {B6F6F243-9A1D-4173-BE73-D10A344BA683}