Skip to content

Commit 96f16ba

Browse files
Move manifest retrieval into separate SlnxXsdProvider class
Co-authored-by: 304NotModified <5808377+304NotModified@users.noreply.github.com>
1 parent 801ab18 commit 96f16ba

6 files changed

Lines changed: 22 additions & 11 deletions

File tree

src/SLNX-validator.Core/ServiceCollectionExtensions.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ public static IServiceCollection AddSlnxValidator(this IServiceCollection servic
1111
{
1212
services.AddSingleton<IFileSystem, RealFileSystem>();
1313
services.AddSingleton<ISonarReporter, SonarReporter>();
14+
services.AddSingleton<SlnxXsdProvider>();
1415
services.AddSingleton<IXsdValidator, XsdValidator>();
1516
services.AddSingleton<Validation.SlnxValidator>();
1617
services.AddSingleton<SlnxFileResolver>();
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
using System.Reflection;
2+
3+
namespace JulianVerdurmen.SlnxValidator.Core.Validation;
4+
5+
public sealed class SlnxXsdProvider
6+
{
7+
// Source: https://github.com/microsoft/vs-solutionpersistence/blob/main/src/Microsoft.VisualStudio.SolutionPersistence/Serializer/Xml/Slnx.xsd
8+
private const string XsdResourceName = "JulianVerdurmen.SlnxValidator.Slnx.xsd";
9+
10+
public Stream GetXsdStream()
11+
{
12+
return Assembly
13+
.GetExecutingAssembly()
14+
.GetManifestResourceStream(XsdResourceName) ?? throw new InvalidOperationException($"XSD resource '{XsdResourceName}' not found in assembly");
15+
}
16+
}

src/SLNX-validator.Core/Validation/XsdValidator.cs

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,16 @@
1-
using System.Reflection;
21
using System.Xml;
32
using System.Xml.Schema;
43
using JulianVerdurmen.SlnxValidator.Core.ValidationResults;
54

65
namespace JulianVerdurmen.SlnxValidator.Core.Validation;
76

8-
public sealed class XsdValidator : IXsdValidator
7+
public sealed class XsdValidator(SlnxXsdProvider xsdProvider) : IXsdValidator
98
{
10-
// Source: https://github.com/microsoft/vs-solutionpersistence/blob/main/src/Microsoft.VisualStudio.SolutionPersistence/Serializer/Xml/Slnx.xsd
11-
private const string XsdResourceName = "JulianVerdurmen.SlnxValidator.Slnx.xsd";
12-
139
public async Task ValidateAsync(string slnxContent, ValidationResult result, CancellationToken cancellationToken)
1410
{
1511
var schemas = new XmlSchemaSet();
1612

17-
await using var xsdStream = Assembly
18-
.GetExecutingAssembly()
19-
.GetManifestResourceStream(XsdResourceName) ?? throw new InvalidOperationException("XSD file not found");
13+
await using var xsdStream = xsdProvider.GetXsdStream();
2014

2115
using var xsdReader = XmlReader.Create(xsdStream);
2216
schemas.Add(null, xsdReader);

tests/SLNX-validator.Core.Tests/SlnxValidatorTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ namespace JulianVerdurmen.SlnxValidator.Core.Tests;
77
public class SlnxValidatorTests
88
{
99
private static Validation.SlnxValidator ValidatorWithFiles(params string[] existingPaths)
10-
=> new(new MockFileSystem(existingPaths), new XsdValidator());
10+
=> new(new MockFileSystem(existingPaths), new XsdValidator(new SlnxXsdProvider()));
1111

1212
private static readonly string RepoRoot = OperatingSystem.IsWindows() ? @"C:\repo" : "/repo";
1313

tests/SLNX-validator.Core.Tests/SolutionIntegrationTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ public async Task OwnSlnxFile_HasNoValidationErrors()
2121
var slnxFile = directory!.EnumerateFiles("*.slnx").First();
2222
var content = await File.ReadAllTextAsync(slnxFile.FullName);
2323

24-
var validator = new CoreSlnxValidator(new RealFileSystem(), new XsdValidator());
24+
var validator = new CoreSlnxValidator(new RealFileSystem(), new XsdValidator(new SlnxXsdProvider()));
2525
var result = await validator.ValidateAsync(content, slnxFile.DirectoryName!);
2626

2727
result.Errors.Should().BeEmpty();

tests/SLNX-validator.Tests/ValidatorRunnerTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ public class ValidatorRunnerTests
1111
private static ValidatorRunner CreateRunner(IFileSystem fileSystem)
1212
{
1313
var resolver = new SlnxFileResolver(fileSystem);
14-
var validator = new CoreSlnxValidator(fileSystem, new XsdValidator());
14+
var validator = new CoreSlnxValidator(fileSystem, new XsdValidator(new SlnxXsdProvider()));
1515
var collector = new ValidationCollector(fileSystem, validator);
1616
var sonarReporter = new SonarReporter(fileSystem);
1717
return new ValidatorRunner(resolver, collector, sonarReporter);

0 commit comments

Comments
 (0)