forked from FortuneN/FineCodeCoverage
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCoverageToolOutputManager.cs
More file actions
74 lines (67 loc) · 2.75 KB
/
CoverageToolOutputManager.cs
File metadata and controls
74 lines (67 loc) · 2.75 KB
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
using System;
using System.Collections.Generic;
using System.ComponentModel.Composition;
using System.IO;
using System.Linq;
using FineCodeCoverage.Core.Utilities;
using FineCodeCoverage.Engine.Model;
using FineCodeCoverage.Output;
using SharedProject.Core.CoverageToolOutput;
namespace FineCodeCoverage.Engine
{
[Export(typeof(ICoverageToolOutputManager))]
internal class CoverageToolOutputManager : ICoverageToolOutputManager
{
private readonly ILogger logger;
private readonly IEventAggregator eventAggregator;
private readonly IFileUtil fileUtil;
private string outputFolderForAllProjects;
private List<ICoverageProject> coverageProjects;
private readonly IOrderedEnumerable<Lazy<ICoverageToolOutputFolderProvider, IOrderMetadata>> outputFolderProviders;
[ImportingConstructor]
public CoverageToolOutputManager(
IFileUtil fileUtil,
ILogger logger,[ImportMany] IEnumerable<Lazy<ICoverageToolOutputFolderProvider, IOrderMetadata>> outputFolderProviders,
IEventAggregator eventAggregator
)
{
this.logger = logger;
this.eventAggregator = eventAggregator;
this.fileUtil = fileUtil;
this.outputFolderProviders = outputFolderProviders.OrderBy(p => p.Metadata.Order);
}
public void SetProjectCoverageOutputFolder(List<ICoverageProject> coverageProjects)
{
eventAggregator.SendMessage(new OutdatedOutputMessage());
this.coverageProjects = coverageProjects;
DetermineOutputFolderForAllProjects();
if (outputFolderForAllProjects == null)
{
foreach(var coverageProject in coverageProjects)
{
coverageProject.CoverageOutputFolder = coverageProject.DefaultCoverageOutputFolder;
}
}
else
{
fileUtil.TryEmptyDirectory(outputFolderForAllProjects);
foreach (var coverageProject in coverageProjects)
{
coverageProject.CoverageOutputFolder = Path.Combine(outputFolderForAllProjects, coverageProject.ProjectName);
}
}
}
private void DetermineOutputFolderForAllProjects()
{
outputFolderForAllProjects = outputFolderProviders.SelectFirstNonNull(p => p.Value.Provide(coverageProjects));
if(outputFolderForAllProjects != null)
{
logger.Log($"FCC output in {outputFolderForAllProjects}");
}
}
public string GetReportOutputFolder()
{
return outputFolderForAllProjects ?? coverageProjects[0].CoverageOutputFolder;
}
}
}