From bbdfc1917306f7ebdaa5f7600d343cedec7f472a Mon Sep 17 00:00:00 2001 From: Oluwatoni Solarin-Sodara Date: Mon, 5 Feb 2018 10:54:17 +0100 Subject: [PATCH] restore original uninstrumented modules after coverage is run --- src/coverlet.core/Coverage.cs | 2 ++ src/coverlet.core/Helpers/InstrumentationHelper.cs | 11 +++++++++++ src/coverlet.core/Instrumentation/Instrumenter.cs | 11 ++++++++++- .../Instrumentation/InstrumenterResult.cs | 2 ++ 4 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/coverlet.core/Coverage.cs b/src/coverlet.core/Coverage.cs index de63cdd..e729b7e 100644 --- a/src/coverlet.core/Coverage.cs +++ b/src/coverlet.core/Coverage.cs @@ -53,6 +53,8 @@ namespace Coverlet.Core data.Add(instrumenterResult.Module, documents); } + InstrumentationHelper.RestoreOriginalModules(_results); + return new CoverageResult { Identifier = _identifier, diff --git a/src/coverlet.core/Helpers/InstrumentationHelper.cs b/src/coverlet.core/Helpers/InstrumentationHelper.cs index 62e5f4e..2c3c8d5 100644 --- a/src/coverlet.core/Helpers/InstrumentationHelper.cs +++ b/src/coverlet.core/Helpers/InstrumentationHelper.cs @@ -3,6 +3,8 @@ using System.IO; using System.Linq; using System.Reflection.PortableExecutable; +using Coverlet.Core.Instrumentation; + namespace Coverlet.Core.Helpers { internal static class InstrumentationHelper @@ -32,5 +34,14 @@ namespace Coverlet.Core.Helpers return false; } } + + public static void RestoreOriginalModules(IEnumerable results) + { + foreach (var result in results) + { + File.Copy(result.OriginalModuleTempPath, result.OriginalModulePath, true); + File.Delete(result.OriginalModuleTempPath); + } + } } } \ No newline at end of file diff --git a/src/coverlet.core/Instrumentation/Instrumenter.cs b/src/coverlet.core/Instrumentation/Instrumenter.cs index 90fd06f..f2943d8 100644 --- a/src/coverlet.core/Instrumentation/Instrumenter.cs +++ b/src/coverlet.core/Instrumentation/Instrumenter.cs @@ -27,10 +27,19 @@ namespace Coverlet.Core.Instrumentation Path.GetFileNameWithoutExtension(_module) + "_" + _identifier ); + string originalModuleTempPath = Path.Combine( + Path.GetTempPath(), + Path.GetFileNameWithoutExtension(_module) + "_" + _identifier + ".dll" + ); + + File.Copy(_module, originalModuleTempPath); + _result = new InstrumenterResult { Module = Path.GetFileNameWithoutExtension(_module), - ReportPath = reportPath + ReportPath = reportPath, + OriginalModulePath = _module, + OriginalModuleTempPath = originalModuleTempPath }; InstrumentModule(); diff --git a/src/coverlet.core/Instrumentation/InstrumenterResult.cs b/src/coverlet.core/Instrumentation/InstrumenterResult.cs index f8078d0..9062fbe 100644 --- a/src/coverlet.core/Instrumentation/InstrumenterResult.cs +++ b/src/coverlet.core/Instrumentation/InstrumenterResult.cs @@ -21,6 +21,8 @@ namespace Coverlet.Core.Instrumentation public InstrumenterResult() => Documents = new List(); public string Module; public string ReportPath; + public string OriginalModulePath; + public string OriginalModuleTempPath; public List Documents { get; private set; } } } \ No newline at end of file