Skip to content

Commit

Permalink
Merge pull request #52 from nunit/issue-37
Browse files Browse the repository at this point in the history
Verify that platform paths are correctly generated
  • Loading branch information
CharliePoole authored Sep 19, 2021
2 parents dae036b + 856b8d5 commit 404a0e7
Show file tree
Hide file tree
Showing 37 changed files with 133 additions and 78 deletions.
4 changes: 2 additions & 2 deletions build.cake
Original file line number Diff line number Diff line change
Expand Up @@ -219,8 +219,8 @@ PackageTest[] GetPackageTests(BuildParameters parameters)
TestConsoleVersions = new string[] { "3.7.0", "3.12.0" },
ExpectedResult = new ExpectedResult("Passed")
{
Total = 68,
Passed = 68,
Total = 70,
Passed = 70,
Failed = 0,
Warnings = 0,
Inconclusive = 0,
Expand Down
3 changes: 0 additions & 3 deletions src/extension/VSSolution.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,9 @@
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
// ***********************************************************************

using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Text.RegularExpressions;
using System.Xml;
using NUnit.Engine.Extensibility;

namespace NUnit.Engine.Services.ProjectLoaders
Expand Down
14 changes: 7 additions & 7 deletions src/tests/LegacyProjectLoadTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -31,13 +31,13 @@ namespace NUnit.Engine.Services.ProjectLoaders.Tests
[TestFixture]
public class LegacyProjectLoadTests : ProjectLoaderTests
{
[TestCase("legacy-csharp-sample.csproj", new string[] { "Debug", "Release" }, "csharp-sample")]
[TestCase("legacy-csharp-hebrew-file-problem.csproj", new string[] { "Debug", "Release" }, "HebrewFileProblem")]
[TestCase("legacy-vb-sample.vbproj", new string[] { "Debug", "Release" }, "vb-sample")]
[TestCase("legacy-jsharp-sample.vjsproj", new string[] { "Debug", "Release" }, "jsharp-sample")]
[TestCase("legacy-cpp-sample.vcproj", new string[] { "Debug|Win32", "Release|Win32" }, "cpp-sample")]
[TestCase("legacy-cpp-library-with-macros.vcproj", new string[] { "Debug|Win32", "Release|Win32" }, "legacy-cpp-library-with-macros")]
[TestCase("legacy-cpp-makefile-project.vcproj", new string[] { "Debug|Win32", "Release|Win32" }, "MakeFileProject")]
[TestCase("legacy-sample.csproj", new string[] { "Debug", "Release" }, "csharp-sample")]
[TestCase("legacy-hebrew-file-problem.csproj", new string[] { "Debug", "Release" }, "HebrewFileProblem")]
[TestCase("legacy-sample.vbproj", new string[] { "Debug", "Release" }, "vb-sample")]
[TestCase("legacy-sample.vjsproj", new string[] { "Debug", "Release" }, "jsharp-sample")]
[TestCase("legacy-sample.vcproj", new string[] { "Debug|Win32", "Release|Win32" }, "cpp-sample")]
[TestCase("legacy-library-with-macros.vcproj", new string[] { "Debug|Win32", "Release|Win32" }, "legacy-library-with-macros")]
[TestCase("legacy-makefile-project.vcproj", new string[] { "Debug|Win32", "Release|Win32" }, "MakeFileProject")]
public void CanLoadVsProject(string resourceName, string[] configs, string assemblyName)
{
Assert.That(_loader.CanLoadFrom(resourceName));
Expand Down
23 changes: 12 additions & 11 deletions src/tests/NonSdkProjectLoadTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -31,13 +31,14 @@ namespace NUnit.Engine.Services.ProjectLoaders.Tests
[TestFixture]
public class NonSdkProjectLoadTests : ProjectLoaderTests
{
[TestCase("nonsdk-csharp-sample.csproj", new string[] { "Debug", "Release" }, "csharp-sample")]
[TestCase("nonsdk-csharp-sample.csproj", new string[] { "Debug", "Release" }, "csharp-sample")]
[TestCase("nonsdk-csharp-missing-output-path.csproj", new string[] { "Debug", "Release" }, "MissingOutputPath")]
[TestCase("nonsdk-csharp-xna-project.csproj", new string[] { "Debug|x86", "Release|x86" }, "XNAWindowsProject")]
[TestCase("nonsdk-vb-sample.vbproj", new string[] { "Debug", "Release" }, "vb-sample")]
[TestCase("nonsdk-jsharp-sample.vjsproj", new string[] { "Debug", "Release" }, "jsharp-sample")]
[TestCase("nonsdk-fsharp-sample.fsproj", new string[] { "Debug", "Release" }, "fsharp-sample")]
[TestCase("nonsdk-sample.csproj", new string[] { "Debug", "Release" }, "csharp-sample")]
[TestCase("nonsdk-sample.csproj", new string[] { "Debug", "Release" }, "csharp-sample")]
[TestCase("nonsdk-missing-output-path.csproj", new string[] { "Debug", "Release" }, "MissingOutputPath")]
[TestCase("nonsdk-xna-project.csproj", new string[] { "Debug|x86", "Release|x86" }, "XNAWindowsProject")]
[TestCase("nonsdk-multiple-platforms.csproj", new string[] { "Debug", "Release", "Debug|x64", "Release|x64", "Debug|x86", "Release|x86" }, "MultiplePlatformProject")]
[TestCase("nonsdk-sample.vbproj", new string[] { "Debug", "Release" }, "vb-sample")]
[TestCase("nonsdk-sample.vjsproj", new string[] { "Debug", "Release" }, "jsharp-sample")]
[TestCase("nonsdk-sample.fsproj", new string[] { "Debug", "Release" }, "fsharp-sample")]
public void CanLoadVsProject(string resourceName, string[] configs, string assemblyName)
{
Assert.That(_loader.CanLoadFrom(resourceName));
Expand All @@ -61,8 +62,8 @@ public void CanLoadVsProject(string resourceName, string[] configs, string assem
}
}

[TestCase("nonsdk-csharp-missing-assembly-name.csproj", "nonsdk-csharp-missing-assembly-name.exe")]
[TestCase("nonsdk-csharp-missing-output-type.csproj", "MissingOutputType.dll")]
[TestCase("nonsdk-missing-assembly-name.csproj", "nonsdk-missing-assembly-name.exe")]
[TestCase("nonsdk-missing-output-type.csproj", "MissingOutputType.dll")]
public void PicksUpCorrectMsBuildProperty(string resourceName, string expectedOutputFilename)
{
using (TestResource file = new TestResource(resourceName))
Expand All @@ -81,7 +82,7 @@ public void PicksUpCorrectMsBuildProperty(string resourceName, string expectedOu
[Test]
public void FromProjectWithTemplatedPaths()
{
using (var file = new TestResource("nonsdk-csharp-with-templated-paths.csproj", NormalizePath(@"csharp-sample\csharp-sample.csproj")))
using (var file = new TestResource("nonsdk-templated-paths.csproj", NormalizePath(@"csharp-sample\csharp-sample.csproj")))
{
IProject project = _loader.LoadFrom(file.Path);
Assert.AreEqual(3, project.ConfigNames.Count);
Expand Down Expand Up @@ -110,7 +111,7 @@ public void FromProjectWithTemplatedPaths()
[Test]
public void ProjectWithDuplicatedSections()
{
using (var file = new TestResource("nonsdk-with-duplicated-key.csproj", NormalizePath(@"csharp-sample\csharp-sample.csproj")))
using (var file = new TestResource("nonsdk-duplicated-key.csproj", NormalizePath(@"csharp-sample\csharp-sample.csproj")))
{
IProject project = _loader.LoadFrom(file.Path);
Assert.AreEqual(3, project.ConfigNames.Count);
Expand Down
57 changes: 41 additions & 16 deletions src/tests/SolutionLoadTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
// ***********************************************************************

using System.IO;
using NUnit.Engine.Extensibility;
using NUnit.Engine.Tests.resources;
using NUnit.Framework;
Expand All @@ -33,10 +34,10 @@ public class SolutionLoadTests : ProjectLoaderTests
[Test]
public void VS2003Solution()
{
using (new TestResource("legacy-csharp-sample.csproj", NormalizePath(@"csharp\legacy-csharp-sample.csproj")))
using (new TestResource("legacy-jsharp-sample.vjsproj", NormalizePath(@"jsharp\legacy-jsharp-sample.vjsproj")))
using (new TestResource("legacy-vb-sample.vbproj", NormalizePath(@"vb\legacy-vb-sample.vbproj")))
using (new TestResource("legacy-cpp-sample.vcproj", NormalizePath(@"cpp-sample\legacy-cpp-sample.vcproj")))
using (new TestResource("legacy-sample.csproj", NormalizePath(@"csharp\legacy-sample.csproj")))
using (new TestResource("legacy-sample.vjsproj", NormalizePath(@"jsharp\legacy-sample.vjsproj")))
using (new TestResource("legacy-sample.vbproj", NormalizePath(@"vb\legacy-sample.vbproj")))
using (new TestResource("legacy-sample.vcproj", NormalizePath(@"cpp-sample\legacy-sample.vcproj")))
using (TestResource file = new TestResource("legacy-samples.sln"))
{
IProject project = _loader.LoadFrom(file.Path);
Expand All @@ -50,10 +51,10 @@ public void VS2003Solution()
[Test]
public void VS2005Solution()
{
using (new TestResource("nonsdk-csharp-sample.csproj", NormalizePath(@"csharp\nonsdk-csharp-sample.csproj")))
using (new TestResource("nonsdk-jsharp-sample.vjsproj", NormalizePath(@"jsharp\nonsdk-jsharp-sample.vjsproj")))
using (new TestResource("nonsdk-vb-sample.vbproj", NormalizePath(@"vb\nonsdk-vb-sample.vbproj")))
using (new TestResource("legacy-cpp-sample.vcproj", NormalizePath(@"cpp-sample\legacy-cpp-sample.vcproj")))
using (new TestResource("nonsdk-sample.csproj", NormalizePath(@"csharp\nonsdk-sample.csproj")))
using (new TestResource("nonsdk-sample.vjsproj", NormalizePath(@"jsharp\nonsdk-sample.vjsproj")))
using (new TestResource("nonsdk-sample.vbproj", NormalizePath(@"vb\nonsdk-sample.vbproj")))
using (new TestResource("legacy-sample.vcproj", NormalizePath(@"cpp-sample\legacy-sample.vcproj")))
using (TestResource file = new TestResource("solution-vs2005-samples.sln"))
{
IProject project = _loader.LoadFrom(file.Path);
Expand All @@ -64,10 +65,34 @@ public void VS2005Solution()
}
}

[Test]
public void SolutionWithMultiplePlatforms()
{
using (new TestResource("nonsdk-multiple-platforms.csproj"))
using (TestResource file = new TestResource("solution-with-multiple-platforms.sln"))
{
IProject project = _loader.LoadFrom(file.Path);
Assert.That(project.ConfigNames, Is.EqualTo(new[] { "Debug", "Release" }));

string tempDir = Path.GetDirectoryName(file.Path);
foreach (string config in project.ConfigNames)
{
var subPackages = project.GetTestPackage(config).SubPackages;
Assert.That(subPackages.Count, Is.EqualTo(3));
Assert.That(subPackages[0].FullName, Is.EqualTo(
$"{tempDir}\\bin\\{config}\\MultiplePlatformProject.dll"));
Assert.That(subPackages[1].FullName, Is.EqualTo(
$"{tempDir}\\bin\\x64\\{config}\\MultiplePlatformProject.dll"));
Assert.That(subPackages[2].FullName, Is.EqualTo(
$"{tempDir}\\bin\\x86\\{config}\\MultiplePlatformProject.dll"));
}
}
}

[Test]
public void SolutionWithWebApplication()
{
using (new TestResource("legacy-csharp-sample.csproj", NormalizePath(@"legacy-csharp-sample\legacy-csharp-sample.csproj")))
using (new TestResource("legacy-sample.csproj", NormalizePath(@"legacy-sample\legacy-sample.csproj")))
using (TestResource file = new TestResource("solution-with-web-application.sln"))
{
IProject project = _loader.LoadFrom(file.Path);
Expand All @@ -80,8 +105,8 @@ public void SolutionWithWebApplication()
[Test]
public void SolutionWithUnmanagedCpp()
{
using (new TestResource("legacy-csharp-sample.csproj", NormalizePath(@"legacy-csharp-sample\legacy-csharp-sample.csproj")))
using (new TestResource("legacy-cpp-unmanaged.vcproj", NormalizePath(@"legacy-cpp-unmanaged\legacy-cpp-unmanaged.vcproj")))
using (new TestResource("legacy-sample.csproj", NormalizePath(@"legacy-sample\legacy-sample.csproj")))
using (new TestResource("legacy-unmanaged.vcproj", NormalizePath(@"legacy-unmanaged\legacy-unmanaged.vcproj")))
using (TestResource file = new TestResource("solution-with-unmanaged-cpp.sln"))
{
IProject project = _loader.LoadFrom(file.Path);
Expand All @@ -95,8 +120,8 @@ public void SolutionWithUnmanagedCpp()
[Test]
public void SolutionWithDisabledProject()
{
using (new TestResource("nonsdk-csharp-sample.csproj", NormalizePath(@"csharp-sample\nonsdk-csharp-sample.csproj")))
using (new TestResource("nonsdk-csharp-debug-only.csproj", NormalizePath(@"csharp-debug-only\nonsdk-csharp-debug-only.csproj")))
using (new TestResource("nonsdk-sample.csproj", NormalizePath(@"csharp-sample\nonsdk-sample.csproj")))
using (new TestResource("nonsdk-debug-only.csproj", NormalizePath(@"csharp-debug-only\nonsdk-debug-only.csproj")))
using (TestResource file = new TestResource("solution-with-disabled-project.sln"))
{
IProject project = _loader.LoadFrom(file.Path);
Expand All @@ -109,8 +134,8 @@ public void SolutionWithDisabledProject()
[Test]
public void SolutionWithNonNunitTestProject()
{
using (new TestResource("nonsdk-csharp-sample.csproj", NormalizePath(@"csharp-sample\nonsdk-csharp-sample.csproj")))
using (new TestResource("nonsdk-csharp-debug-only-no-nunit.csproj", NormalizePath(@"nonsdk-csharp-debug-only-no-nunit\csharp-debug-only-no-nunit.csproj")))
using (new TestResource("nonsdk-sample.csproj", NormalizePath(@"csharp-sample\nonsdk-sample.csproj")))
using (new TestResource("nonsdk-debug-only-no-nunit.csproj", NormalizePath(@"debug-only-no-nunit\nonsdk-debug-only-no-nunit.csproj")))
using (TestResource file = new TestResource("solution-with-non-nunit-project.sln"))
{
IProject project = _loader.LoadFrom(file.Path);
Expand All @@ -123,7 +148,7 @@ public void SolutionWithNonNunitTestProject()
[Test]
public void SolutionWithProjectUsingPackageReference()
{
using (new TestResource("nonsdk-csharp-with-package-reference.csproj", NormalizePath(@"project-with-package-reference\nonsdk-csharp-with-package-reference.csproj")))
using (new TestResource("nonsdk-package-reference.csproj", NormalizePath(@"project-with-package-reference\nonsdk-package-reference.csproj")))
using (TestResource file = new TestResource("solution-with-package-reference.sln"))
{
IProject project = _loader.LoadFrom(file.Path);
Expand Down
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
8 changes: 4 additions & 4 deletions src/tests/resources/legacy-samples.sln
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
Microsoft Visual Studio Solution File, Format Version 8.00
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "legacy-csharp-sample", "csharp\legacy-csharp-sample.csproj", "{15D66EEE-A852-4A52-89C2-83E74ECF3770}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "legacy-csharp-sample", "csharp\legacy-sample.csproj", "{15D66EEE-A852-4A52-89C2-83E74ECF3770}"
ProjectSection(ProjectDependencies) = postProject
EndProjectSection
EndProject
Project("{E6FDF86B-F3D1-11D4-8576-0002A516ECE8}") = "legacy-jsharp-sample", "jsharp\legacy-jsharp-sample.vjsproj", "{B55A6E53-57A9-4205-B396-C9983B3AF46A}"
Project("{E6FDF86B-F3D1-11D4-8576-0002A516ECE8}") = "legacy-jsharp-sample", "jsharp\legacy-sample.vjsproj", "{B55A6E53-57A9-4205-B396-C9983B3AF46A}"
ProjectSection(ProjectDependencies) = postProject
EndProjectSection
EndProject
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "legacy-vb-sample", "vb\legacy-vb-sample.vbproj", "{F199991B-6C8E-4AB0-9AAA-703CD4897700}"
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "legacy-vb-sample", "vb\legacy-sample.vbproj", "{F199991B-6C8E-4AB0-9AAA-703CD4897700}"
ProjectSection(ProjectDependencies) = postProject
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "legacy-cpp-sample", "cpp-sample\legacy-cpp-sample.vcproj", "{7E5849C7-0469-4AD2-91B9-C87203934254}"
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "legacy-cpp-sample", "cpp-sample\legacy-sample.vcproj", "{7E5849C7-0469-4AD2-91B9-C87203934254}"
ProjectSection(ProjectDependencies) = postProject
EndProjectSection
EndProject
Expand Down
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
8 changes: 4 additions & 4 deletions src/tests/resources/solution-vs2005-samples.sln
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
Microsoft Visual Studio Solution File, Format Version 9.00
# Visual Studio 2005
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "nonsdk-csharp-sample", "csharp\nonsdk-csharp-sample.csproj", "{15D66EEE-A852-4A52-89C2-83E74ECF3770}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "nonsdk-sample", "csharp\nonsdk-sample.csproj", "{15D66EEE-A852-4A52-89C2-83E74ECF3770}"
EndProject
Project("{E6FDF86B-F3D1-11D4-8576-0002A516ECE8}") = "nonsdk-jsharp-sample", "jsharp\nonsdk-jsharp-sample.vjsproj", "{B55A6E53-57A9-4205-B396-C9983B3AF46A}"
Project("{E6FDF86B-F3D1-11D4-8576-0002A516ECE8}") = "nonsdk-sample", "jsharp\nonsdk-sample.vjsproj", "{B55A6E53-57A9-4205-B396-C9983B3AF46A}"
EndProject
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "nonsdk-vb-sample", "vb\nonsdk-vb-sample.vbproj", "{F199991B-6C8E-4AB0-9AAA-703CD4897700}"
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "nonsdk-sample", "vb\nonsdk-sample.vbproj", "{F199991B-6C8E-4AB0-9AAA-703CD4897700}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "legacy-cpp-sample", "cpp-sample\legacy-cpp-sample.vcproj", "{7E5849C7-0469-4AD2-91B9-C87203934254}"
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "legacy-sample", "cpp-sample\legacy-sample.vcproj", "{7E5849C7-0469-4AD2-91B9-C87203934254}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Expand Down
4 changes: 2 additions & 2 deletions src/tests/resources/solution-with-disabled-project.sln
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@

Microsoft Visual Studio Solution File, Format Version 10.00
# Visual Studio 2008
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "nonsdk-csharp-sample", "csharp-sample\nonsdk-csharp-sample.csproj", "{45103FD8-4F1F-4B2D-9E75-20094E98EE64}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "nonsdk-sample", "csharp-sample\nonsdk-sample.csproj", "{45103FD8-4F1F-4B2D-9E75-20094E98EE64}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "nonsdk-csharp-debug-only", "csharp-debug-only\nonsdk-csharp-debug-only.csproj", "{B9DB5E6C-8A54-40F9-9B1E-225B58FE7ED4}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "nonsdk-debug-only", "csharp-debug-only\nonsdk-debug-only.csproj", "{B9DB5E6C-8A54-40F9-9B1E-225B58FE7ED4}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Expand Down
31 changes: 31 additions & 0 deletions src/tests/resources/solution-with-multiple-platforms.sln
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
Microsoft Visual Studio Solution File, Format Version 9.00
# Visual Studio 2005
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "nonsdk-multiple-platforms", "nonsdk-multiple-platforms.csproj", "{23FF0E4C-DA55-4CC7-A948-09877A66001F}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|Any CPU = Release|Any CPU
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{23FF0E4C-DA55-4CC7-A948-09877A66001F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{23FF0E4C-DA55-4CC7-A948-09877A66001F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{23FF0E4C-DA55-4CC7-A948-09877A66001F}.Debug|x64.ActiveCfg = Debug|x64
{23FF0E4C-DA55-4CC7-A948-09877A66001F}.Debug|x64.Build.0 = Debug|x64
{23FF0E4C-DA55-4CC7-A948-09877A66001F}.Debug|x86.ActiveCfg = Debug|x86
{23FF0E4C-DA55-4CC7-A948-09877A66001F}.Debug|x86.Build.0 = Debug|x86
{23FF0E4C-DA55-4CC7-A948-09877A66001F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{23FF0E4C-DA55-4CC7-A948-09877A66001F}.Release|Any CPU.Build.0 = Release|Any CPU
{23FF0E4C-DA55-4CC7-A948-09877A66001F}.Release|x64.ActiveCfg = Release|x64
{23FF0E4C-DA55-4CC7-A948-09877A66001F}.Release|x64.Build.0 = Release|x64
{23FF0E4C-DA55-4CC7-A948-09877A66001F}.Release|x86.ActiveCfg = Release|x86
{23FF0E4C-DA55-4CC7-A948-09877A66001F}.Release|x86.Build.0 = Release|x86
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal
Loading

0 comments on commit 404a0e7

Please sign in to comment.