Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
7 changes: 6 additions & 1 deletion .github/workflows/dotnet.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ name: .NET
permissions:
pull-requests: write


on:
push:
branches: [ "main" ]
Expand All @@ -26,7 +27,11 @@ jobs:
- name: Setup .NET
uses: actions/setup-dotnet@v3
with:
dotnet-version: 9.0.x
dotnet-version: |
6.0.x
7.0.x
8.0.x
9.0.x
- name: Restore dependencies
run: dotnet restore
- name: Build
Expand Down
13 changes: 10 additions & 3 deletions src/MDAT/MDAT.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
<Company>MESS</Company>
<PackageProjectUrl>https://github.com/MTESSDev/mdAT</PackageProjectUrl>
<RepositoryUrl>https://github.com/MTESSDev/mdAT</RepositoryUrl>
<Version>1.4.1</Version>
<Version>1.5.0</Version>
<Description>Markdown Auto-Tests for .net 6+, based on MSTestsV2 DataSource.</Description>
</PropertyGroup>

Expand All @@ -34,13 +34,20 @@
<ItemGroup>
<PackageReference Include="LoxSmoke.DocXml" Version="3.6.1" />
<PackageReference Include="Markdig" Version="0.37.0" />
<PackageReference Include="Microsoft.Extensions.Primitives" Version="2.2.0" />
<PackageReference Include="Moq" Version="4.18.4" />
<PackageReference Include="MSTest.TestFramework" Version="3.3.1" />
<PackageReference Include="MSTest.TestFramework" Version="3.10.4" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
<PackageReference Include="Quibble.Xunit" Version="0.3.1" />
<PackageReference Include="System.Data.SqlClient" Version="4.8.6" />
<PackageReference Include="YamlDotNet" Version="16.2.1" />
<PackageReference Include="YamlDotNet.System.Text.Json" Version="1.6.4" />
</ItemGroup>

<ItemGroup>
<PackageReference Include="YamlDotNet.System.Text.Json" Version="1.5.1" Condition="'$(TargetFramework)' == 'net6.0'" />
<PackageReference Include="YamlDotNet.System.Text.Json" Version="1.5.1" Condition="'$(TargetFramework)' == 'net7.0'" />
<PackageReference Include="YamlDotNet.System.Text.Json" Version="1.5.1" Condition="'$(TargetFramework)' == 'net8.0'" />
<PackageReference Include="YamlDotNet.System.Text.Json" Version="1.6.4" Condition="'$(TargetFramework)' == 'net9.0'" />
</ItemGroup>

</Project>
6 changes: 6 additions & 0 deletions src/MDAT/MarkdownTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -223,12 +223,18 @@ private static IDeserializer NewDeserializer(INodeTypeResolver resolver, string
.WithTypeConverter(new ByteArayConverter(), e => e.OnBottom())
.WithTypeConverter(new SystemTextJsonYamlTypeConverter())
.WithTypeInspector(x => new SystemTextJsonTypeInspector(x))
.WithTypeConverter(new StringValuesConverter())
.WithNodeTypeResolver(resolver)
.WithNodeDeserializer(new KeyValuePairNodeDeserializer())
.IgnoreUnmatchedProperties()
.WithAttemptingUnquotedStringTypeDeserialization()
.WithTagMapping(MdatConstants.IncludeTag, typeof(IncludeRef));

foreach(var typeConverter in MdatConfig.ListeTypeConverter)
{
_ = typeConverter.Where is { } ? deserializer.WithTypeConverter(typeConverter.TypeConverter!, typeConverter.Where) : deserializer.WithTypeConverter(typeConverter.TypeConverter!);
}

var includeNodeDeserializerOptions = new YamlIncludeNodeDeserializerOptions
{
DirectoryName = directoryName,
Expand Down
19 changes: 19 additions & 0 deletions src/MDAT/MdatConfig.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
using YamlDotNet.Serialization;

namespace MDAT;

public static class MdatConfig
{
public static List<ConfigTypeConverter> ListeTypeConverter { get; set; } = new List<ConfigTypeConverter>();

public static void AddYamlTypeConverter(IYamlTypeConverter typeConverter, Action<IRegistrationLocationSelectionSyntax<IYamlTypeConverter>>? where = null)
{
ListeTypeConverter.Add(new ConfigTypeConverter() { TypeConverter = typeConverter, Where = where });
}
}

public class ConfigTypeConverter
{
public IYamlTypeConverter? TypeConverter { get; set; }
public Action<IRegistrationLocationSelectionSyntax<IYamlTypeConverter>>? Where { get; set; }
}
62 changes: 62 additions & 0 deletions src/MDAT/Resolver/StringValuesConverter.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
using YamlDotNet.Core.Events;
using YamlDotNet.Core;
using YamlDotNet.Serialization;
using Microsoft.Extensions.Primitives;

namespace MDAT.Resolver;

internal class StringValuesConverter : IYamlTypeConverter
{
private static readonly Type _sequenceStartType = typeof(SequenceStart);
private static readonly Type _sequenceEndType = typeof(SequenceEnd);

public bool Accepts(Type type) =>
type == typeof(StringValues) || type == typeof(StringValues?);

public object? ReadYaml(IParser parser, Type type, ObjectDeserializer rootDeserializer)
{
List<string> strList = new List<string>();

if (parser.Current is Scalar)
{
strList.Add(GetScalarValue(parser));
}
else if (parser.Current!.GetType() == _sequenceStartType)
{
parser.Consume<SequenceStart>();
do
{
strList.Add(GetScalarValue(parser));
parser.MoveNext();
} while (parser.Current.GetType() != _sequenceEndType);
}
else
{
parser.MoveNext();
return null;
}

parser.MoveNext();

return new StringValues(strList.ToArray());
}

public void WriteYaml(IEmitter emitter, object? value, Type type, ObjectSerializer serializer)
{
throw new NotImplementedException();
}

private static string GetScalarValue(IParser parser)
{
Scalar? scalar;

scalar = parser.Current as Scalar;

if (scalar == null)
{
throw new InvalidDataException("Failed to retrieve scalar value.");
}

return scalar.Value;
}
}
29 changes: 29 additions & 0 deletions src/MDATTests/CustomResolverTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
using MDAT;
using MDATTests.Resolver;
using Microsoft.Extensions.Primitives;

[assembly: Parallelize(Workers = 0, Scope = ExecutionScope.MethodLevel)]

namespace MDAT.Tests;

[TestClass]
public class CustomResolverTests
{
[ClassInitialize]
public static void ClassInitialize(TestContext testContext)
{
MdatConfig.AddYamlTypeConverter(new StringValuesTestYamlTypeConverter());
}

/// <summary>
/// Test AddYamlTypeConverter
/// </summary>
[TestMethod]
[DoNotParallelize]
[MarkdownTest("~\\Tests\\{method}.md")]
public async Task Test_AddYamlTypeConverter(StringValues input, Expected expected)
{
_ = await Verify.Assert(() =>
Task.FromResult(input), expected);
}
}
4 changes: 2 additions & 2 deletions src/MDATTests/MDATTests.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@
<PackageReference Include="Microsoft.AspNetCore.Mvc.Core" Version="2.2.5" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.9.0" />
<PackageReference Include="Moq" Version="4.18.4" />
<PackageReference Include="MSTest.TestAdapter" Version="3.3.1" />
<PackageReference Include="MSTest.TestFramework" Version="3.3.1" />
<PackageReference Include="MSTest.TestAdapter" Version="3.10.4" />
<PackageReference Include="MSTest.TestFramework" Version="3.10.4" />
<PackageReference Include="coverlet.collector" Version="6.0.2">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
Expand Down
12 changes: 12 additions & 0 deletions src/MDATTests/MarkdownTestAttributeTests.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using MDATTests;
using MDATTests.Models;
using Microsoft.Extensions.Primitives;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Moq;
using System;
Expand Down Expand Up @@ -396,6 +397,17 @@ public async Task Test_keypairvalues(List<KeyValuePair<string, string>> input, E
Task.FromResult(input), expected);
}

/// <summary>
/// Test StringValues
/// </summary>
[TestMethod]
[MarkdownTest("~\\Tests\\{method}.md")]
public async Task Test_StringValues(StringValues input, Expected expected)
{
_ = await Verify.Assert(() =>
Task.FromResult(input), expected);
}

/// <summary>
/// Test class
/// </summary>
Expand Down
30 changes: 30 additions & 0 deletions src/MDATTests/Resolver/StringValuesTestYamlTypeConverter .cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
using Microsoft.Extensions.Primitives;
using YamlDotNet.Core;
using YamlDotNet.Core.Events;
using YamlDotNet.Serialization;

namespace MDATTests.Resolver;

public class StringValuesTestYamlTypeConverter : IYamlTypeConverter
{
public bool Accepts(Type type)
{
return type == typeof(StringValues);
}

public object ReadYaml(IParser parser, Type type, ObjectDeserializer rootDeserializer)
{
var scalar = parser.Consume<Scalar>();

var values = scalar.Value.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries)
.Select(s => s.Trim())
.ToArray();

return new StringValues(values);
}

public void WriteYaml(IEmitter emitter, object? value, Type type, ObjectSerializer serializer)
{
throw new NotImplementedException();
}
}
21 changes: 21 additions & 0 deletions src/MDATTests/Tests/test-add-yaml-type-converter.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# Test_AddYamlTypeConverter

> Test AddYamlTypeConverter

## Case 1

Description

``````yaml
input: un;test
expected:
name: null
generateExpectedData: null
verify:
- type: match
jsonPath: $
allowAdditionalProperties: false
data:
- un
- test
``````
23 changes: 23 additions & 0 deletions src/MDATTests/Tests/test-string-values.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Test_StringValues

> Test StringValues

## Case 1

Description

``````yaml
input:
- un
- test
expected:
name: null
generateExpectedData: null
verify:
- type: match
jsonPath: $
allowAdditionalProperties: false
data:
- un
- test
``````
Loading