forked from FortuneN/FineCodeCoverage
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCoverageToolOutputManager_Tests.cs
More file actions
159 lines (135 loc) · 7.54 KB
/
CoverageToolOutputManager_Tests.cs
File metadata and controls
159 lines (135 loc) · 7.54 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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
using System;
using System.Collections.Generic;
using System.IO;
using AutoMoq;
using FineCodeCoverage.Core.Utilities;
using FineCodeCoverage.Engine;
using FineCodeCoverage.Engine.Model;
using FineCodeCoverage.Output;
using Moq;
using NUnit.Framework;
using SharedProject.Core.CoverageToolOutput;
namespace FineCodeCoverageTests
{
class CoverageToolOutputManager_Tests
{
private AutoMoqer mocker;
private Mock<ICoverageProject> mockProject1;
private Mock<ICoverageProject> mockProject2;
private List<ICoverageProject> coverageProjects;
private List<int> callOrder;
private const string DefaultCoverageFolder = "defaultFolder";
[SetUp]
public void SetUp()
{
mocker = new AutoMoqer();
mockProject1 = new Mock<ICoverageProject>();
mockProject1.Setup(p => p.FCCOutputFolder).Returns("p1output");
mockProject1.Setup(p => p.ProjectName).Returns("project1");
mockProject1.SetupProperty(p => p.CoverageOutputFolder);
mockProject1.Setup(p => p.DefaultCoverageOutputFolder).Returns(DefaultCoverageFolder);
mockProject2 = new Mock<ICoverageProject>();
mockProject2.Setup(p => p.FCCOutputFolder).Returns("p2output");
mockProject2.Setup(p => p.ProjectName).Returns("project2");
mockProject2.Setup(p => p.DefaultCoverageOutputFolder).Returns(DefaultCoverageFolder);
coverageProjects = new List<ICoverageProject> { mockProject1.Object, mockProject2.Object };
}
private void SetUpProviders(bool provider1First,string provider1Provides, string provider2Provides)
{
callOrder = new List<int>();
var mockOrderMetadata1 = new Mock<IOrderMetadata>();
mockOrderMetadata1.Setup(o => o.Order).Returns(provider1First? 1 : 2);
var mockOrderMetadata2 = new Mock<IOrderMetadata>();
mockOrderMetadata2.Setup(o => o.Order).Returns(provider1First ? 2 : 1);
var mockCoverageToolOutputFolderProvider1 = new Mock<ICoverageToolOutputFolderProvider>();
mockCoverageToolOutputFolderProvider1.Setup(p => p.Provide(coverageProjects)).Returns(provider1Provides).Callback(() => callOrder.Add(1));
var mockCoverageToolOutputFolderProvider2 = new Mock<ICoverageToolOutputFolderProvider>();
mockCoverageToolOutputFolderProvider2.Setup(p => p.Provide(coverageProjects)).Returns(provider2Provides).Callback(() => callOrder.Add(2));
List<Lazy<ICoverageToolOutputFolderProvider, IOrderMetadata>> lazyOrderedProviders = new List<Lazy<ICoverageToolOutputFolderProvider, IOrderMetadata>>
{
new Lazy<ICoverageToolOutputFolderProvider, IOrderMetadata>(()=>mockCoverageToolOutputFolderProvider1.Object,mockOrderMetadata1.Object),
new Lazy<ICoverageToolOutputFolderProvider, IOrderMetadata>(()=>mockCoverageToolOutputFolderProvider2.Object,mockOrderMetadata2.Object)
};
mocker.SetInstance<IEnumerable<Lazy<ICoverageToolOutputFolderProvider, IOrderMetadata>>>(lazyOrderedProviders);
}
[TestCase(true,1, 2)]
[TestCase(false, 2, 1)]
public void Should_Use_Providers_In_Order_When_Determining_CoverageProject_Output_Folder(bool provider1First, int expectedFirst, int expectedSecond)
{
SetUpProviders(provider1First, null, null);
var coverageToolOutputManager = mocker.Create<CoverageToolOutputManager>();
coverageToolOutputManager.SetProjectCoverageOutputFolder(coverageProjects);
Assert.AreEqual(callOrder, new List<int> { expectedFirst, expectedSecond });
}
[Test]
public void Should_Stop_Asking_Providers_When_One_Provides_Value()
{
SetUpProviders(true, "_", "_");
var coverageToolOutputManager = mocker.Create<CoverageToolOutputManager>();
coverageToolOutputManager.SetProjectCoverageOutputFolder(coverageProjects);
Assert.AreEqual(callOrder, new List<int> { 1 });
}
[Test]
public void Should_Try_Empty_Provided_Output_Folder()
{
SetUpProviders(true, "Provided", "_");
var coverageToolOutputManager = mocker.Create<CoverageToolOutputManager>();
coverageToolOutputManager.SetProjectCoverageOutputFolder(coverageProjects);
mocker.Verify<IFileUtil>(f => f.TryEmptyDirectory("Provided"));
}
[Test]
public void Should_Log_When_Provided()
{
SetUpProviders(true, "Provided", "_");
var coverageToolOutputManager = mocker.Create<CoverageToolOutputManager>();
coverageToolOutputManager.SetProjectCoverageOutputFolder(coverageProjects);
mocker.Verify<ILogger>(l => l.Log("FCC output in Provided"));
}
[Test]
public void Should_Raise_The_OutdatedOutputMessge()
{
SetUpProviders(true, "Provided", "_");
var coverageToolOutputManager = mocker.Create<CoverageToolOutputManager>();
coverageToolOutputManager.SetProjectCoverageOutputFolder(coverageProjects);
mocker.Verify<IEventAggregator>(eventAggregator => eventAggregator.SendMessage(It.IsAny<OutdatedOutputMessage>(), null));
}
[Test]
public void Should_Set_CoverageOutputFolder_To_ProjectName_Sub_Folder_Of_Provided()
{
SetUpProviders(true, "Provided", "_");
var coverageToolOutputManager = mocker.Create<CoverageToolOutputManager>();
coverageToolOutputManager.SetProjectCoverageOutputFolder(coverageProjects);
var expectedProject1OutputFolder = Path.Combine("Provided", mockProject1.Object.ProjectName);
var expectedProject2OutputFolder = Path.Combine("Provided", mockProject2.Object.ProjectName);
mockProject1.VerifySet(p => p.CoverageOutputFolder = expectedProject1OutputFolder);
mockProject2.VerifySet(p => p.CoverageOutputFolder = expectedProject2OutputFolder);
}
[Test]
public void Should_Set_CoverageOutputFolder_To_Default_For_All_When_Not_Provided()
{
SetUpProviders(true, null, null);
var coverageToolOutputManager = mocker.Create<CoverageToolOutputManager>();
coverageToolOutputManager.SetProjectCoverageOutputFolder(coverageProjects);
mockProject1.VerifySet(p => p.CoverageOutputFolder = DefaultCoverageFolder);
mockProject2.VerifySet(p => p.CoverageOutputFolder = DefaultCoverageFolder);
}
[Test]
public void Should_Output_Reports_To_First_Project_CoverageOutputFolder_When_Not_Provided()
{
SetUpProviders(true, null, null);
var coverageToolOutputManager = mocker.Create<CoverageToolOutputManager>();
coverageToolOutputManager.SetProjectCoverageOutputFolder(coverageProjects);
var firstProjectOutputFolder = mockProject1.Object.CoverageOutputFolder;
Assert.AreEqual(coverageToolOutputManager.GetReportOutputFolder(), firstProjectOutputFolder);
}
[Test]
public void Should_Output_Reports_To_Provided_When_Provided()
{
SetUpProviders(true, "Provided", null);
var coverageToolOutputManager = mocker.Create<CoverageToolOutputManager>();
coverageToolOutputManager.SetProjectCoverageOutputFolder(coverageProjects);
var outputFolder = coverageToolOutputManager.GetReportOutputFolder();
Assert.AreEqual(outputFolder, "Provided");
}
}
}