forked from FortuneN/FineCodeCoverage
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathProjectRunSettingsGenerator.cs
88 lines (77 loc) · 3.47 KB
/
ProjectRunSettingsGenerator.cs
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
using System;
using System.Collections.Generic;
using System.ComponentModel.Composition;
using System.IO;
using Task = System.Threading.Tasks.Task;
using FineCodeCoverage.Engine.Model;
using System.Linq;
using FineCodeCoverage.Core.Utilities;
using System.Xml.Linq;
using FineCodeCoverage.Output;
namespace FineCodeCoverage.Engine.MsTestPlatform.CodeCoverage
{
[Export(typeof(IProjectRunSettingsGenerator))]
internal class ProjectRunSettingsGenerator : IProjectRunSettingsGenerator
{
private readonly IFileUtil fileUtil;
private readonly IVsRunSettingsWriter vsRunSettingsWriter;
private readonly ILogger logger;
private const string fccGeneratedRunSettingsSuffix = "fcc-mscodecoverage-generated";
[ImportingConstructor]
public ProjectRunSettingsGenerator(
IFileUtil fileUtil,
IVsRunSettingsWriter vsRunSettingsWriter,
ILogger logger
)
{
this.fileUtil = fileUtil;
this.vsRunSettingsWriter = vsRunSettingsWriter;
this.logger = logger;
}
public Task RemoveGeneratedProjectSettingsAsync(IEnumerable<ICoverageProject> coverageProjects)
{
return Task.WhenAll(
coverageProjects
.Where(coverageProject => IsGeneratedRunSettings(coverageProject.RunSettingsFile))
.Select(coverageProjectForRemoval => vsRunSettingsWriter.RemoveRunSettingsFilePathAsync(coverageProjectForRemoval.Id))
);
}
public Task WriteProjectsRunSettingsAsync(IEnumerable<ICoverageProjectRunSettings> coverageProjectsRunSettings)
{
return Task.WhenAll(
coverageProjectsRunSettings.Select(coverageProjectRunSettings =>
{
var coverageProject = coverageProjectRunSettings.CoverageProject;
var projectRunSettingsFilePath = GeneratedProjectRunSettingsFilePath(coverageProject);
return WriteProjectRunSettingsAsync(coverageProject.Id, coverageProject.ProjectName, projectRunSettingsFilePath, coverageProjectRunSettings.RunSettings);
})
);
}
internal static string GeneratedProjectRunSettingsFilePath(ICoverageProject coverageProject)
{
return Path.Combine(coverageProject.CoverageOutputFolder, $"{coverageProject.ProjectName}-{fccGeneratedRunSettingsSuffix}.runsettings");
}
private async Task WriteProjectRunSettingsAsync(Guid projectGuid,string projectName, string projectRunSettingsFilePath, string projectRunSettings)
{
var ok = await vsRunSettingsWriter.WriteRunSettingsFilePathAsync(projectGuid, projectRunSettingsFilePath);
if (ok)
{
projectRunSettings = XDocument.Parse(projectRunSettings).FormatXml();
fileUtil.WriteAllText(projectRunSettingsFilePath, projectRunSettings);
logger.Log($"runsettings written to {projectRunSettingsFilePath}", projectRunSettings);
}
else
{
logger.Log($"Issue writing runsettings for {projectName}");
}
}
private static bool IsGeneratedRunSettings(string runSettingsFile)
{
if (runSettingsFile == null)
{
return false;
}
return Path.GetFileNameWithoutExtension(runSettingsFile).EndsWith(fccGeneratedRunSettingsSuffix);
}
}
}