Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

IsRebuildAll and Form showing monthly totals #16

Open
wants to merge 54 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
54 commits
Select commit Hold shift + click to select a range
02de115
Adding a menu item that displays a form and check that it works.
Jan 21, 2016
72ece46
Add a simple test to get the total build time for a single solution b…
Jan 21, 2016
a2e9c83
Add tests for calculating build time per solution and per solution month
Jan 26, 2016
3862060
Write build times out to the ressoftware database
Jan 28, 2016
5d126da
Updating version number
Jan 29, 2016
e4391cc
Add tests / functionality to provide a list of available solutionmonths
Jan 29, 2016
b24df79
Add test and code for availablesolutions
Feb 5, 2016
e206a58
Start adding form to show breakdown of buildtime for solution by mont…
Mar 2, 2016
ce87379
move ui code in to window and calculation ish code in to calculator
Mar 2, 2016
7aab5c0
Making the UI look a bit more acceptable
Mar 2, 2016
a4325fa
Formatting months as MMM
Mar 3, 2016
18822bf
£Fix conflict by preferring version 1.5
Mar 3, 2016
36ae187
Removing RES specific code
Mar 4, 2016
81621f3
Adding an IsRebuildAll flag to output
Apr 6, 2016
5e86c32
Setting isrebuildall flag at end of build so that the buildbegin even…
Apr 25, 2016
aa2d69b
Fixing up test compilation error
Apr 25, 2016
c9ed0ba
Fixing up tests
Apr 25, 2016
3d40fe5
Merge remote-tracking branch 'origin/VS2015'
Apr 26, 2016
0b51b7a
changing name of button on ui and setting a min size for forn
Apr 26, 2016
c9d201b
Removing res specific code
May 10, 2016
d7ff3a2
Remove backup directory
May 10, 2016
65b9c9f
Remove comment about mutability
May 16, 2016
7c51116
Upgrade to work with Visual Studio 2017
Jul 4, 2017
03b1c9b
Upgrade to work with Visual Studio 2017
Jul 4, 2017
722b0ee
Update README.markdown
ceddlyburge Jul 4, 2017
5ae85de
log to kl-sql-005
Oct 11, 2017
f104e6f
Removed references causing compile error.
edespong Dec 19, 2017
b944a5b
Remove envdte projects, fixes #1
ceddlyburge Dec 21, 2017
0cae2e4
Comment out office specific database saving code
ceddlyburge Dec 21, 2017
53c86bf
Added options page with output file path
edespong Dec 21, 2017
afa22a1
Write to output when changing settings
edespong Dec 21, 2017
16f8d4d
Merged with master
edespong Dec 21, 2017
4d3ddfb
Merge branch 'master' into Settings
edespong Dec 21, 2017
4c13618
Allow location of json file to be set in an environment variable #2
ceddlyburge Dec 22, 2017
91cb48c
Ignore visual studio nuser settings
Dec 22, 2017
87f4214
Add appveyor configuration
Dec 22, 2017
2496622
Fix build target
Dec 22, 2017
4c5a226
Remove pack msbuild argument
Dec 22, 2017
2b7c877
Use nunit 2 console runner
Dec 22, 2017
2cd2f6d
Fix test dll path
Dec 22, 2017
7879a9f
Update readme
Dec 22, 2017
0964af1
Attempt to add coverage
Dec 22, 2017
cab28a2
Fix nunit command line
Dec 22, 2017
40bbcc5
Add coverage.xml as artifact to debug
Dec 22, 2017
dcfbc39
Build in debuf configuration to allow coverage to work
Dec 22, 2017
c1c078e
Merge branch 'master' into Settings
ceddlyburge Dec 22, 2017
d0d2d4c
Merge branch 'master' into Settings
ceddlyburge Dec 22, 2017
0eb4293
Merge pull request #3 from edespong/Settings
ceddlyburge Dec 22, 2017
acef4f2
Support Visual Studio 2019
May 1, 2019
e59d539
Upgrade to nunit 3
May 1, 2019
b48918c
Use nunit3 during build
May 1, 2019
c2f4052
Update nunit 3 test runner in build script
May 1, 2019
104c9d2
Fix problem saving to database
May 2, 2019
bf8ebe8
Add visual studio support to readme
ceddlyburge May 21, 2019
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -28,4 +28,6 @@ _ReSharper*/
*.IntegrationTests/App.config
*.bin
/packages
/Solution Items
/Solution Items
/backup
/.vs
28 changes: 24 additions & 4 deletions BuildMonitor.UnitTests/BuildMonitor.UnitTests.csproj
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\packages\NUnit3TestAdapter.3.13.0\build\net35\NUnit3TestAdapter.props" Condition="Exists('..\packages\NUnit3TestAdapter.3.13.0\build\net35\NUnit3TestAdapter.props')" />
<Import Project="..\packages\NUnit.3.11.0\build\NUnit.props" Condition="Exists('..\packages\NUnit.3.11.0\build\NUnit.props')" />
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
Expand All @@ -9,10 +11,13 @@
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>BuildMonitor.UnitTests</RootNamespace>
<AssemblyName>BuildMonitor.UnitTests</AssemblyName>
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\</SolutionDir>
<RestorePackages>true</RestorePackages>
<NuGetPackageImportStamp>
</NuGetPackageImportStamp>
<TargetFrameworkProfile />
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
Expand All @@ -32,15 +37,20 @@
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="nunit.framework">
<HintPath>..\packages\NUnit.2.6.2\lib\nunit.framework.dll</HintPath>
<Reference Include="Newtonsoft.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.10.0.3\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="nunit.framework, Version=3.11.0.0, Culture=neutral, PublicKeyToken=2638cd05610744eb, processorArchitecture=MSIL">
<HintPath>..\packages\NUnit.3.11.0\lib\net45\nunit.framework.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
</ItemGroup>
<ItemGroup>
<Compile Include="Domain\MonitorTests.cs" />
<Compile Include="Domain\SolutionBuildTests.cs" />
<Compile Include="LocalData\AnalyseBuildTimesTests.cs" />
<Compile Include="LocalData\BuildTimesTests.cs" />
<Compile Include="LocalData\DataAdjusterTests.cs" />
<Compile Include="LocalData\RawBuildDataTests.cs" />
<Compile Include="Fakes\BuildFactoryFake.cs" />
Expand All @@ -56,11 +66,21 @@
<Name>BuildMonitor</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
</ItemGroup>
<ItemGroup>
<None Include="packages.config" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Import Project="$(SolutionDir)\.nuget\nuget.targets" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('..\packages\NUnit.3.11.0\build\NUnit.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\NUnit.3.11.0\build\NUnit.props'))" />
<Error Condition="!Exists('..\packages\NUnit3TestAdapter.3.13.0\build\net35\NUnit3TestAdapter.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\NUnit3TestAdapter.3.13.0\build\net35\NUnit3TestAdapter.props'))" />
</Target>
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
Expand Down
2 changes: 1 addition & 1 deletion BuildMonitor.UnitTests/Domain/SolutionBuildTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ public void Setup()
timerFake = new TimerFake();
solutionBuild = new SolutionBuild(timerFake, new Solution());
}

[Test]
public void Start_NotRunning_SetsStartedToNow()
{
Expand Down
2 changes: 2 additions & 0 deletions BuildMonitor.UnitTests/Fakes/SolutionBuildFake.cs
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@ public object Data()

public ISolution Solution { get; set; }

public bool IsRebuildAll { get; set; }

public void AddProject(IProjectBuild projectBuild)
{

Expand Down
225 changes: 225 additions & 0 deletions BuildMonitor.UnitTests/LocalData/AnalyseBuildTimesTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,225 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using NUnit.Framework;
using BuildMonitor.LocalData;
using System.Collections;

namespace BuildMonitor.UnitTests.LocalData
{
internal struct SolutionBuildTime
{
public string Solution { get; set; }
public DateTime BuildDateTime { get; set; }
public int BuildTimeInMilliseconds { get; set; }
}

[TestFixture]
public class AnalyseBuildTimesTests
{
[Test]
public void IgnoreNullSolutionNames()
{
const string json =
@"[{
'Start': '2016-01-22T18:53:33.6172723+00:00',
'Time': 2,
'Solution': {
}
}]";

var buildTimes = new AnalyseBuildTimes().Calculate(json);

Assert.AreEqual(0, buildTimes.AvailableSolutions.Count());
}

[Test]
public void AvailableMonths()
{
var solutionbuilds = CreateBuilds(
CreateBuild(buildDateTime: JANUARY1())
, CreateBuild(buildDateTime: JANUARY31())
, CreateBuild(buildDateTime: MARCH())
);

var json = CreateBuildsJSON(solutionbuilds);

var buildTimes = new AnalyseBuildTimes().Calculate(json);

var expected = CreateSolutionMonths(CreateSolutionMonth(JANUARY1()), CreateSolutionMonth(MARCH()));

CollectionAssert.AreEqual(expected, buildTimes.AvailableMonths);
}

[Test]
public void AvailableSolutions()
{
const string CEDD = "Cedd";
const string BUILDMONITOR = "BuildMonitor";

var solutionbuilds = CreateBuilds(
CreateBuild(solution: CEDD)
, CreateBuild(solution: BUILDMONITOR)
, CreateBuild(solution: CEDD)
);

var json = CreateBuildsJSON(solutionbuilds);

var buildTimes = new AnalyseBuildTimes().Calculate(json);

var expected = new List<string>() { CEDD, BUILDMONITOR };

CollectionAssert.AreEqual(expected, buildTimes.AvailableSolutions);
}

[TestCase(19366)]
[TestCase(1)]
[TestCase(395)]
public void OneBuildTimeTotal(int singleBuildTimeInMilliseconds)
{
var json = CreateBuildsJSON(CreateBuildJSON(CreateBuild(buildTimeInMilliseconds: singleBuildTimeInMilliseconds)));

var buildTimes = new AnalyseBuildTimes().Calculate(json);

Assert.That(buildTimes.Total == TimeSpan.FromMilliseconds(singleBuildTimeInMilliseconds));
}

[TestCase(1, 2)]
[TestCase(21341, 123642, 21389734)]
[TestCase(543, 0, 34534567)]
public void MultipleBuildsSameSolution(params int[] buildTimeInMilliseconds)
{
var json = CreateBuildsJSON(buildTimeInMilliseconds.Select(b => CreateBuild(buildTimeInMilliseconds: b)));

var buildTimes = new AnalyseBuildTimes().Calculate(json);

Assert.That(buildTimes.Total == TimeSpan.FromMilliseconds(buildTimeInMilliseconds.Sum()));
}

// Add a testcasesource here if more test cases are wanted
[Test]
public void MultipleBuildsMultipleSolutions()
{
var solutionbuilds = CreateBuilds(
CreateBuild("BuildMonitor", 1)
, CreateBuild("Cedd", 2)
, CreateBuild("BuildMonitor", 982734789)
, CreateBuild("Cedd", 83468)
);

var json = CreateBuildsJSON(solutionbuilds);

var buildTimes = new AnalyseBuildTimes().Calculate(json);

foreach (var solution in solutionbuilds.Select(s => s.Solution).Distinct())
Assert.That(buildTimes.Solution(solution) == TimeSpan.FromMilliseconds(solutionbuilds.Where(s => s.Solution == solution).Sum(s => s.BuildTimeInMilliseconds)));
}

// Add a testcasesource here if more test cases are wanted
[Test]
public void MultipleBuildsMultipleMonthsMultipleSolutions()
{
var solutionbuilds = CreateBuilds(
CreateBuild("BuildMonitor", 1, JANUARY1())
, CreateBuild("Cedd", 2, JANUARY31())
, CreateBuild("BuildMonitor", 982734789, FEBRUARY())
, CreateBuild("Cedd", 83468, MARCH())
);

var json = CreateBuildsJSON(solutionbuilds);

//act
var buildTimes = new AnalyseBuildTimes().Calculate(json);

// assert
var solutionMonths = solutionbuilds.Select(s => new SolutionMonth(solution: s.Solution, month: s.BuildDateTime.Month, year: s.BuildDateTime.Year)).Distinct();
foreach (var solutionMonth in solutionMonths)
Assert.That(buildTimes.SolutionMonth(solutionMonth.Solution, solutionMonth.Month, solutionMonth.Year) == TimeSpan.FromMilliseconds(solutionbuilds.Where(s => s.Solution == solutionMonth.Solution && s.BuildDateTime.Month == solutionMonth.Month && s.BuildDateTime.Year == solutionMonth.Year).Sum(s => s.BuildTimeInMilliseconds)));
}

private static string CreateBuildsJSON(string build)
{
return CreateBuildsJSON(new List<string>() { build });
}

private static string CreateBuildsJSON(IEnumerable<string> builds)
{
return "[" + string.Join("\n,\n", builds) + "]";
}

private static string CreateBuildsJSON(IEnumerable<SolutionBuildTime> solutionbuilds)
{
return CreateBuildsJSON(solutionbuilds.Select(b => CreateBuildJSON(b)));
}

private static string CreateBuildJSON(SolutionBuildTime build)
{
return @"{
'Start': '" + build.BuildDateTime.ToString() + @"',
'Time': " + build.BuildTimeInMilliseconds.ToString() + @",
'Solution': {
'Name': '" + build.Solution + @"'
},
'Projects': [{
'Start': '2016-01-21T18:53:33.6172723+00:00',
'Time': 2,
'Project': {
'Name': 'blah',
'Id': '700a9d28-e9de-428b-a8f2-b40baf4a3e87'
}
},
{
'Start': '2016-01-22T18:53:33.6172723+00:00',
'Time': 4,
'Project': {
'Name': 'blah2',
'Id': '700a9d28-e9de-428b-a8f2-b40baf4a3e88'
}
}]
}";
}

private static IEnumerable<SolutionBuildTime> CreateBuilds(params SolutionBuildTime[] solutionBuildTimes)
{
return solutionBuildTimes;
}

private static SolutionBuildTime CreateBuild(string solution = "", int buildTimeInMilliseconds = 0, DateTime buildDateTime = new DateTime())
{
return new SolutionBuildTime() { Solution = solution, BuildTimeInMilliseconds = buildTimeInMilliseconds, BuildDateTime = buildDateTime };
}

private IEnumerable<SolutionMonth> CreateSolutionMonths(params SolutionMonth[] solutionMonths)
{
return solutionMonths;
}

private SolutionMonth CreateSolutionMonth(DateTime dateTime)
{
return new SolutionMonth("", dateTime.Year, dateTime.Month);
}

private DateTime MARCH()
{
return new DateTime(2000, 3, 1);
}

private DateTime FEBRUARY()
{
return new DateTime(2000, 2, 1);
}

private DateTime JANUARY1()
{
return new DateTime(2000, 1, 1);
}

private DateTime JANUARY31()
{
return new DateTime(2000, 1, 31);
}

}
}
22 changes: 22 additions & 0 deletions BuildMonitor.UnitTests/LocalData/BuildTimesTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using NUnit.Framework;
using BuildMonitor.LocalData;

namespace BuildMonitor.UnitTests.LocalData
{
[TestFixture]
public class BuildTimesTests
{
[Test]
public void ReturnZeroForMissingMonth()
{
var buildTimes = new BuildTimes(TimeSpan.FromSeconds(0), new Dictionary<string, TimeSpan>(), new Dictionary<SolutionMonth, TimeSpan>());

Assert.AreEqual(TimeSpan.FromSeconds(0), buildTimes.SolutionMonth("", 0, 0));
}
}
}
4 changes: 3 additions & 1 deletion BuildMonitor.UnitTests/packages.config
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="NUnit" version="2.6.2" targetFramework="net45" />
<package id="Newtonsoft.Json" version="10.0.3" targetFramework="net472" />
<package id="NUnit" version="3.11.0" targetFramework="net472" />
<package id="NUnit3TestAdapter" version="3.13.0" targetFramework="net472" />
</packages>
15 changes: 7 additions & 8 deletions BuildMonitor.sln
Original file line number Diff line number Diff line change
@@ -1,18 +1,14 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2012
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuget", ".nuget", "{4FDB4354-8389-4675-ACED-6CA6DF570561}"
ProjectSection(SolutionItems) = preProject
.nuget\NuGet.exe = .nuget\NuGet.exe
.nuget\NuGet.targets = .nuget\NuGet.targets
EndProjectSection
# Visual Studio Version 16
VisualStudioVersion = 16.0.28803.352
MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{68E63FC4-249A-4EFE-A8D8-5154DA8E3415}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BuildMonitor", "BuildMonitor\BuildMonitor.csproj", "{700A9D28-E9DE-428B-A8F2-B40BAF4A3E87}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BuildMonitor.UnitTests", "BuildMonitor.UnitTests\BuildMonitor.UnitTests.csproj", "{4107248F-F2FC-4152-816B-E8633C4913F5}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{68E63FC4-249A-4EFE-A8D8-5154DA8E3415}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BuildMonitorPackage", "BuildMonitorPackage\BuildMonitorPackage.csproj", "{F1623C5E-614B-435B-B625-AC534EF3920F}"
EndProject
Global
Expand Down Expand Up @@ -40,4 +36,7 @@ Global
GlobalSection(NestedProjects) = preSolution
{4107248F-F2FC-4152-816B-E8633C4913F5} = {68E63FC4-249A-4EFE-A8D8-5154DA8E3415}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {933B755B-38EF-4B39-87B5-1FBAFCE15C39}
EndGlobalSection
EndGlobal
Loading