New UnitTest Projects

This commit is contained in:
Brett Hewitson 2021-12-02 16:46:53 +10:00
parent f3fa0b8106
commit 4a80b089b4
19 changed files with 456 additions and 3 deletions

View file

@ -0,0 +1,31 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup Label="Globals">
<SccProjectName>SAK</SccProjectName>
<SccProvider>SAK</SccProvider>
<SccAuxPath>SAK</SccAuxPath>
<SccLocalPath>SAK</SccLocalPath>
</PropertyGroup>
<PropertyGroup>
<TargetFramework>net462</TargetFramework>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
<RootNamespace>ServerManagerTool.Plugin.Common.UnitTests</RootNamespace>
<AssemblyName>ServerManager.Plugin.Common.UnitTests</AssemblyName>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
<DebugType>none</DebugType>
<DebugSymbols>false</DebugSymbols>
</PropertyGroup>
<ItemGroup>
<None Remove="Plugin.Common.UnitTests.csproj.vspscc" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="MSTest.TestAdapter" Version="2.1.2" />
<PackageReference Include="MSTest.TestFramework" Version="2.1.2" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Plugin.Common\Plugin.Common.csproj" />
</ItemGroup>
</Project>

View file

@ -0,0 +1,36 @@
using Microsoft.VisualStudio.TestTools.UnitTesting;
using ServerManagerTool.Plugin.Common;
using ServerManagerTool.Plugin.Common.Lib;
using System.Collections.Generic;
namespace Plugin.Common.UnitTests
{
[TestClass]
public class PluginHelperUnitTest
{
[TestMethod]
public void PluginHelper_HandleAlert_When_SingleLineMessage_Then_Valid()
{
// Arrange
PluginHelper.Instance.SetFetchProfileCallback(FetchProfiles);
// Act
var profileList = PluginHelper.Instance.FetchProfileList();
// Assert
Assert.IsNotNull(profileList);
Assert.IsTrue(profileList.Count == 3);
}
public IList<Profile> FetchProfiles()
{
return new List<Profile>()
{
new Profile() { ProfileName = "Profile 1", InstallationFolder = @"d:\asmdata\servers\server1" },
new Profile() { ProfileName = "Profile 2", InstallationFolder = @"d:\asmdata\servers\server2" },
new Profile() { ProfileName = "Profile 3", InstallationFolder = @"d:\asmdata\servers\server3" },
};
}
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.3 KiB

Binary file not shown.

View file

@ -0,0 +1,318 @@
using ServerManagerTool.Plugin.Discord;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;
using System.Text;
using System.Threading.Tasks;
using System.Collections.Generic;
using ServerManagerTool.Plugin.Common.Lib;
namespace Plugin.Discord.UnitTests
{
[TestClass]
public class DiscordPluginUnitTest
{
[TestMethod]
public void DiscordPlugin_HandleAlert_When_SingleLineMessage_Then_Valid()
{
// Arrange
var plugin = new DiscordPlugin();
plugin.Initialize();
var alertMessage = new StringBuilder();
alertMessage.AppendLine("The server has been started.");
// Act
plugin.HandleAlert(ServerManagerTool.Plugin.Common.AlertType.Startup, "Server 1", alertMessage.ToString());
// Assert
Assert.IsTrue(true);
}
[TestMethod]
public void DiscordPlugin_HandleAlert_When_SingleLineUnicodeMessage_Then_Valid()
{
// Arrange
var plugin = new DiscordPlugin();
plugin.Initialize();
var alertMessage = new StringBuilder();
alertMessage.AppendLine("Требуется перезагрузка сервера. Сейчас сервер будет выключен.");
// Act
plugin.HandleAlert(ServerManagerTool.Plugin.Common.AlertType.Startup, "Server 1", alertMessage.ToString());
// Assert
Assert.IsTrue(true);
}
[TestMethod]
public void DiscordPlugin_HandleAlert_When_SingleLineSpecialCharacterMessage_Then_Valid()
{
// Arrange
var plugin = new DiscordPlugin();
plugin.Initialize();
var alertMessage = new StringBuilder();
alertMessage.AppendLine("Update performed, includes: Structures Plus (S+) (731604991)");
// Act
plugin.HandleAlert(ServerManagerTool.Plugin.Common.AlertType.Startup, "Server 1", alertMessage.ToString());
// Assert
Assert.IsTrue(true);
}
[TestMethod]
public void DiscordPlugin_HandleAlert_When_MultipleLineMessage_Then_Valid()
{
// Arrange
var plugin = new DiscordPlugin();
plugin.Initialize();
var alertMessage = new StringBuilder();
alertMessage.AppendLine("The server is being shutdown.");
alertMessage.AppendLine("Please logout to avoid profile corruption.");
// Act
plugin.HandleAlert(ServerManagerTool.Plugin.Common.AlertType.Shutdown, "Server 2", alertMessage.ToString());
// Assert
Assert.IsTrue(true);
}
[TestMethod]
public void DiscordPlugin_HandleAlert_When_MultipleLineMessageInOneLine_Then_Valid()
{
// Arrange
var plugin = new DiscordPlugin();
plugin.Initialize();
//var alertMessage = new StringBuilder();
//alertMessage.AppendLine("The server is being shutdown.\r\nPlease logout to avoid profile corruption.");
var alertMessage = "Server restart required.\r\n\r\nServer will restart in {minutes} minutes. \r\n\r\nPlease logout before restart to prevent character corruption.";
// Act
plugin.HandleAlert(ServerManagerTool.Plugin.Common.AlertType.Shutdown, "Server 2", alertMessage);
// Assert
Assert.IsTrue(true);
}
[TestMethod]
public void DiscordPlugin_HandleAlert_When_ErrorAlertType_Then_Valid()
{
// Arrange
var plugin = new DiscordPlugin();
plugin.Initialize();
var alertMessage = new StringBuilder();
alertMessage.AppendLine("The server encountered an error while starting.");
// Act
plugin.HandleAlert(ServerManagerTool.Plugin.Common.AlertType.Error, "Server 1", alertMessage.ToString());
// Assert
Assert.IsTrue(true);
}
[TestMethod]
public void DiscordPlugin_HandleAlert_When_SingleLineMessageToUnknownProfileName_Then_NoAlertSent()
{
// Arrange
var plugin = new DiscordPlugin();
plugin.Initialize();
var alertMessage = new StringBuilder();
alertMessage.AppendLine("The server has been started.");
// Act
plugin.HandleAlert(ServerManagerTool.Plugin.Common.AlertType.Startup, "", alertMessage.ToString());
// Assert
Assert.IsTrue(true);
}
[TestMethod]
public void DiscordPlugin_HandleAlert_When_ExtraLongMessage_Then_AlertTruncated()
{
// Arrange
var plugin = new DiscordPlugin();
plugin.Initialize();
var alertMessage = new StringBuilder();
alertMessage.AppendLine("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus ac lorem pretium, volutpat massa ut, iaculis augue. Aenean condimentum gravida laoreet. Morbi mattis leo non enim imperdiet dignissim. Donec et consectetur est. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Curabitur leo ipsum, commodo sed ante eu, vulputate maximus nulla. In sollicitudin, magna ut fringilla scelerisque, neque nulla semper nunc, at tempus nibh mi quis diam. Nunc quis tortor neque. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.");
alertMessage.AppendLine("Maecenas ultrices in est a iaculis.Sed eget pharetra nibh.Duis luctus neque id iaculis vestibulum.Duis condimentum sapien metus, at pretium dui aliquam ullamcorper.Sed at efficitur tellus.Praesent eget ex blandit orci venenatis fringilla et in ex.Curabitur id mauris sed augue pharetra ornare.Integer at malesuada nisl, id blandit orci.");
alertMessage.AppendLine("Ut ac dolor non ex porta lobortis.Aliquam sollicitudin nec justo ac finibus.Aliquam condimentum malesuada luctus.Nam ut ornare justo, a scelerisque sapien.Vivamus eget nisi risus.Morbi ut tellus ultricies arcu sagittis eleifend.Praesent eu augue in eros egestas rhoncus eu sed quam.");
alertMessage.AppendLine("Quisque quis facilisis ipsum.In egestas pulvinar urna, id maximus lorem vehicula nec.Fusce vel nibh tincidunt, semper risus a, consectetur nunc.Morbi at lorem libero.Donec diam eros, aliquet in enim vitae, ornare malesuada nisi.Donec a mi pharetra dolor dignissim dapibus at vel velit.Praesent tincidunt, ipsum eget finibus cursus, ex turpis accumsan dui, ut hendrerit ante tortor vitae urna.Nulla faucibus ipsum nec tellus congue rhoncus.Maecenas sed tortor placerat, lobortis arcu sit amet, pellentesque sapien.Praesent sit amet feugiat massa.");
alertMessage.AppendLine("Vestibulum eu felis accumsan, vehicula metus ut, gravida nulla.Sed pharetra sed ex vel sodales.In vestibulum, nisl vitae ultricies mattis, lacus massa maximus nunc, id suscipit lorem ligula id tortor.Donec porttitor diam ac turpis posuere aliquam.Phasellus non sed.");
// Act
plugin.HandleAlert(ServerManagerTool.Plugin.Common.AlertType.Shutdown, "Server 3", alertMessage.ToString());
// Assert
Assert.IsTrue(true);
}
[TestMethod]
public void DiscordPlugin_HandleAlert_When_SendingMultipleMessagesSingleServer_Then_Valid()
{
var plugin = new DiscordPlugin();
plugin.Initialize();
SendMultipleMessages(plugin, "Server 1");
}
[TestMethod]
public void DiscordPlugin_HandleAlert_When_SendingMultipleMessagesMultipleServers_Sync_Then_Valid()
{
// Arrange
var plugin = new DiscordPlugin();
plugin.Initialize();
var alertMessage1 = new StringBuilder();
alertMessage1.AppendLine("Message 1 - shutdown 1.");
var alertMessage2 = new StringBuilder();
alertMessage2.AppendLine("Message 2 - shutdown 2.");
var alertMessage3 = new StringBuilder();
alertMessage3.AppendLine("Message 3 - start.");
var alertMessage4 = new StringBuilder();
alertMessage4.AppendLine("Message 4 - update reason.");
// Act
plugin.HandleAlert(ServerManagerTool.Plugin.Common.AlertType.ShutdownMessage, "Server 1", alertMessage1.ToString());
plugin.HandleAlert(ServerManagerTool.Plugin.Common.AlertType.ShutdownMessage, "Server 2", alertMessage1.ToString());
plugin.HandleAlert(ServerManagerTool.Plugin.Common.AlertType.ShutdownMessage, "Server 3", alertMessage1.ToString());
plugin.HandleAlert(ServerManagerTool.Plugin.Common.AlertType.ShutdownMessage, "Server 4", alertMessage1.ToString());
Task.Delay(2000).Wait();
plugin.HandleAlert(ServerManagerTool.Plugin.Common.AlertType.ShutdownMessage, "Server 1", alertMessage2.ToString());
plugin.HandleAlert(ServerManagerTool.Plugin.Common.AlertType.ShutdownMessage, "Server 2", alertMessage2.ToString());
plugin.HandleAlert(ServerManagerTool.Plugin.Common.AlertType.ShutdownMessage, "Server 3", alertMessage2.ToString());
plugin.HandleAlert(ServerManagerTool.Plugin.Common.AlertType.ShutdownMessage, "Server 4", alertMessage2.ToString());
Task.Delay(2000).Wait();
plugin.HandleAlert(ServerManagerTool.Plugin.Common.AlertType.Startup, "Server 1", alertMessage3.ToString());
plugin.HandleAlert(ServerManagerTool.Plugin.Common.AlertType.Startup, "Server 2", alertMessage3.ToString());
plugin.HandleAlert(ServerManagerTool.Plugin.Common.AlertType.Startup, "Server 3", alertMessage3.ToString());
plugin.HandleAlert(ServerManagerTool.Plugin.Common.AlertType.Startup, "Server 4", alertMessage3.ToString());
Task.Delay(2000).Wait();
plugin.HandleAlert(ServerManagerTool.Plugin.Common.AlertType.UpdateResults, "Server 1", alertMessage4.ToString());
plugin.HandleAlert(ServerManagerTool.Plugin.Common.AlertType.UpdateResults, "Server 2", alertMessage4.ToString());
plugin.HandleAlert(ServerManagerTool.Plugin.Common.AlertType.UpdateResults, "Server 3", alertMessage4.ToString());
plugin.HandleAlert(ServerManagerTool.Plugin.Common.AlertType.UpdateResults, "Server 4", alertMessage4.ToString());
// Assert
Assert.IsTrue(true);
}
[TestMethod]
public void DiscordPlugin_HandleAlert_When_SendingMultipleMessagesMultipleServers_ASync_Then_Valid()
{
var plugin = new DiscordPlugin();
plugin.Initialize();
Parallel.For(1, 9, (i) => {
switch (i)
{
case 1:
case 2:
case 3:
case 4:
SendMultipleMessages(plugin, $"Server {i}");
break;
case 5:
case 6:
case 7:
case 8:
SendMultipleErrors(plugin, $"Server {i-4}");
break;
}
});
}
private void SendMultipleMessages(DiscordPlugin plugin, string profileName)
{
// Arrange
Random rnd = new Random();
var alertMessage1 = new StringBuilder();
alertMessage1.AppendLine("Message 1 - shutdown 1.");
var alertMessage2 = new StringBuilder();
alertMessage2.AppendLine("Message 2 - shutdown 2.");
var alertMessage3 = new StringBuilder();
alertMessage3.AppendLine("Message 3 - start.");
var alertMessage4 = new StringBuilder();
alertMessage4.AppendLine("Message 4 - update reason.");
// Act
plugin.HandleAlert(ServerManagerTool.Plugin.Common.AlertType.ShutdownMessage, profileName, alertMessage1.ToString());
Task.Delay(rnd.Next(1000, 5000)).Wait();
plugin.HandleAlert(ServerManagerTool.Plugin.Common.AlertType.ShutdownMessage, profileName, alertMessage2.ToString());
Task.Delay(rnd.Next(1000, 5000)).Wait();
plugin.HandleAlert(ServerManagerTool.Plugin.Common.AlertType.Startup, profileName, alertMessage3.ToString());
Task.Delay(rnd.Next(1000, 5000)).Wait();
plugin.HandleAlert(ServerManagerTool.Plugin.Common.AlertType.UpdateResults, profileName, alertMessage4.ToString());
// Assert
Assert.IsTrue(true);
}
private void SendMultipleErrors(DiscordPlugin plugin, string profileName)
{
// Arrange
Random rnd = new Random();
var alertMessage1 = new StringBuilder();
alertMessage1.AppendLine("Error 1.");
var alertMessage2 = new StringBuilder();
alertMessage2.AppendLine("Error 2.");
// Act
plugin.HandleAlert(ServerManagerTool.Plugin.Common.AlertType.Error, profileName, alertMessage1.ToString());
Task.Delay(rnd.Next(1000, 5000)).Wait();
plugin.HandleAlert(ServerManagerTool.Plugin.Common.AlertType.Error, profileName, alertMessage2.ToString());
// Assert
Assert.IsTrue(true);
}
[TestMethod]
public void DiscordPlugin_OpenConfigForm()
{
// Arrange
ServerManagerTool.Plugin.Common.PluginHelper.Instance.SetFetchProfileCallback(FetchProfiles);
var plugin = new DiscordPlugin();
plugin.Initialize();
// Act
plugin.OpenConfigForm(null);
// Assert
Assert.IsTrue(true);
}
[TestMethod]
public void DiscordPlugin_OpenConfigForm_DebugMode()
{
// Arrange
ServerManagerTool.Plugin.Common.PluginHelper.Instance.SetFetchProfileCallback(FetchProfiles);
var plugin = new DiscordPlugin();
plugin.BetaEnabled = true;
plugin.Initialize();
// Act
plugin.OpenConfigForm(null);
// Assert
Assert.IsTrue(true);
}
private IList<Profile> FetchProfiles()
{
return new List<Profile>()
{
new Profile() { ProfileName = "Profile 1", InstallationFolder = @"d:\asmdata\servers\server1" },
new Profile() { ProfileName = "Profile 2", InstallationFolder = @"d:\asmdata\servers\server2" },
new Profile() { ProfileName = "Profile 3", InstallationFolder = @"d:\asmdata\servers\server3" },
};
}
}
}

View file

@ -0,0 +1,31 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup Label="Globals">
<SccProjectName>%24/Development/ServerManagers/Main/Plugin.Discord.UnitTests</SccProjectName>
<SccProvider>{4CA58AB2-18FA-4F8D-95D4-32DDF27D184C}</SccProvider>
<SccAuxPath>https://dev.azure.com/bretthewitson</SccAuxPath>
<SccLocalPath>.</SccLocalPath>
</PropertyGroup>
<PropertyGroup>
<TargetFramework>net462</TargetFramework>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
<RootNamespace>ServerManagerTool.Plugin.Discord.UnitTests</RootNamespace>
<AssemblyName>ServerManager.Plugin.Discord.UnitTests</AssemblyName>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
<DebugType>none</DebugType>
<DebugSymbols>false</DebugSymbols>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="MSTest.TestAdapter" Version="2.1.2" />
<PackageReference Include="MSTest.TestFramework" Version="2.1.2" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Plugin.Common\Plugin.Common.csproj" />
<ProjectReference Include="..\Plugin.Discord\Plugin.Discord.csproj" />
</ItemGroup>
<ItemGroup>
<Reference Include="PresentationCore" />
<Reference Include="PresentationFramework" />
<Reference Include="WindowsBase" />
</ItemGroup>
</Project>

View file

@ -0,0 +1,19 @@
using System.Reflection;
using System.Runtime.InteropServices;
[assembly: AssemblyTitle("Plugin.Discord.UnitTests")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Bletch1971")]
[assembly: AssemblyProduct("Plugin.Discord.UnitTests")]
[assembly: AssemblyCopyright("Copyright © 2017")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
[assembly: ComVisible(false)]
[assembly: Guid("8d13fc88-9508-4c3a-8ed0-f7bd46e343cc")]
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View file

@ -1,7 +1,7 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.31911.196
# Visual Studio Version 17
VisualStudioVersion = 17.0.31912.275
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ServerManager.Common", "ServerManager.Common\ServerManager.Common.csproj", "{7C99D9F7-0C65-4116-927A-94EB018C88FD}"
EndProject
@ -40,7 +40,11 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ARKServerManager.Common", "
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ConanServerManager.Common", "ConanServerManager.Common\ConanServerManager.Common.csproj", "{630422CA-4BCC-4D1D-9701-87D8EAF0B209}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ServerManager.WebApplication", "ServerManager.WebApplication\ServerManager.WebApplication.csproj", "{39C42E58-36BD-4C6B-9AD2-7F9EBCA7A68A}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ServerManager.WebApplication", "ServerManager.WebApplication\ServerManager.WebApplication.csproj", "{39C42E58-36BD-4C6B-9AD2-7F9EBCA7A68A}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Plugin.Common.UnitTests", "Plugin.Common.UnitTests\Plugin.Common.UnitTests.csproj", "{A8BFC452-5BE8-41E7-BD1D-C29B944185CE}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Plugin.Discord.UnitTests", "Plugin.Discord.UnitTests\Plugin.Discord.UnitTests.csproj", "{1434D87A-E9FC-48B9-BEC9-E5A3003F1F2E}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@ -133,6 +137,18 @@ Global
{39C42E58-36BD-4C6B-9AD2-7F9EBCA7A68A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{39C42E58-36BD-4C6B-9AD2-7F9EBCA7A68A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{39C42E58-36BD-4C6B-9AD2-7F9EBCA7A68A}.Release|Any CPU.Build.0 = Release|Any CPU
{A8BFC452-5BE8-41E7-BD1D-C29B944185CE}.Debug - Beta|Any CPU.ActiveCfg = Debug|Any CPU
{A8BFC452-5BE8-41E7-BD1D-C29B944185CE}.Debug - Beta|Any CPU.Build.0 = Debug|Any CPU
{A8BFC452-5BE8-41E7-BD1D-C29B944185CE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A8BFC452-5BE8-41E7-BD1D-C29B944185CE}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A8BFC452-5BE8-41E7-BD1D-C29B944185CE}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A8BFC452-5BE8-41E7-BD1D-C29B944185CE}.Release|Any CPU.Build.0 = Release|Any CPU
{1434D87A-E9FC-48B9-BEC9-E5A3003F1F2E}.Debug - Beta|Any CPU.ActiveCfg = Debug|Any CPU
{1434D87A-E9FC-48B9-BEC9-E5A3003F1F2E}.Debug - Beta|Any CPU.Build.0 = Debug|Any CPU
{1434D87A-E9FC-48B9-BEC9-E5A3003F1F2E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1434D87A-E9FC-48B9-BEC9-E5A3003F1F2E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1434D87A-E9FC-48B9-BEC9-E5A3003F1F2E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1434D87A-E9FC-48B9-BEC9-E5A3003F1F2E}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@ -145,6 +161,8 @@ Global
{D2EE1483-021F-4900-BBE8-88338D1386F4} = {44D8A1A2-01FF-4DD3-A201-AD9A26F7798D}
{96832688-29BD-464F-9DCE-482E37BFC751} = {44D8A1A2-01FF-4DD3-A201-AD9A26F7798D}
{4CA9C894-518F-42D7-BBE2-CFDFE7A03F8A} = {44D8A1A2-01FF-4DD3-A201-AD9A26F7798D}
{A8BFC452-5BE8-41E7-BD1D-C29B944185CE} = {F8DBCE70-4658-47CB-A508-B3951125F0ED}
{1434D87A-E9FC-48B9-BEC9-E5A3003F1F2E} = {F8DBCE70-4658-47CB-A508-B3951125F0ED}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {4201246C-6E53-4209-883D-A4F084C19187}