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
4 changes: 2 additions & 2 deletions Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,8 @@
<PackageVersion Include="NUnit3TestAdapter" Version="5.1.0" />
<PackageVersion Include="NUnit.Analyzers" Version="4.10.0" />
<PackageVersion Include="PublicApiGenerator" Version="11.4.6" />
<PackageVersion Include="TUnit" Version="0.25.21" />
<PackageVersion Include="TUnit.Core" Version="0.56.5" />
<PackageVersion Include="TUnit" Version="0.56.44" />
<PackageVersion Include="TUnit.Core" Version="0.56.44" />
<PackageVersion Include="Verify.MSTest" Version="30.7.2" />
<PackageVersion Include="Verify.NUnit" Version="30.7.2" />
<PackageVersion Include="Verify.TUnit" Version="30.7.2" />
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
namespace NetEvolve.Extensions.TUnit.Internal;

using System.Diagnostics.CodeAnalysis;
using System.Threading.Tasks;
using global::TUnit.Core.Interfaces;

/// <summary>
Expand All @@ -15,20 +16,25 @@ public abstract class CategoryTraitBaseAttribute : Attribute, ITestDiscoveryEven
/// </summary>
public string Category { get; }

/// <inheritdoc cref="IEventReceiver.Order" />
public int Order => 0;

/// <summary>
/// Initializes a new instance of the <see cref="CategoryTraitBaseAttribute"/> class.
/// </summary>
/// <param name="category"></param>
protected CategoryTraitBaseAttribute(string category) => Category = category;

/// <inheritdoc/>
public void OnTestDiscovery(DiscoveredTestContext discoveredTestContext)
public ValueTask OnTestDiscovered(DiscoveredTestContext context)
{
if (discoveredTestContext is null)
if (context is null)
{
return;
return ValueTask.CompletedTask;
}

discoveredTestContext.AddCategory(Category);
context.AddCategory(Category);

return ValueTask.CompletedTask;
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
namespace NetEvolve.Extensions.TUnit.Internal;

using System.Threading.Tasks;
using global::TUnit.Core;
using global::TUnit.Core.Interfaces;

/// <summary>
Expand Down Expand Up @@ -31,6 +33,9 @@ public abstract class CategoryWithIdTraitBaseAttribute : Attribute, ITestDiscove
/// </summary>
public string? Id { get; }

/// <inheritdoc cref="IEventReceiver.Order" />
public int Order => 0;

/// <summary>
/// Initializes a new instance of the <see cref="CategoryWithIdTraitBaseAttribute"/> class.
/// </summary>
Expand All @@ -54,17 +59,19 @@ protected CategoryWithIdTraitBaseAttribute(string category, long id)
}

/// <inheritdoc/>
public void OnTestDiscovery(DiscoveredTestContext discoveredTestContext)
public ValueTask OnTestDiscovered(DiscoveredTestContext context)
{
if (discoveredTestContext is null)
if (context is null)
{
return;
return ValueTask.CompletedTask;
}

discoveredTestContext.AddCategory(Category);
context.AddCategory(Category);
if (!string.IsNullOrWhiteSpace(Id))
{
discoveredTestContext.AddProperty(Category, Id);
context.AddProperty(Category, Id);
}

return ValueTask.CompletedTask;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,9 @@ public abstract class NamedCategoryTraitBaseAttribute : Attribute, ITestDiscover
/// </summary>
public string Id { get; }

/// <inheritdoc cref="IEventReceiver.Order" />
public int Order => 0;

/// <summary>
/// Initializes a new instance of the <see cref="NamedCategoryTraitBaseAttribute"/> class.
/// </summary>
Expand All @@ -29,16 +32,18 @@ protected NamedCategoryTraitBaseAttribute(string category, string id)
}

/// <inheritdoc/>
public void OnTestDiscovery(DiscoveredTestContext discoveredTestContext)
public ValueTask OnTestDiscovered(DiscoveredTestContext context)
{
if (discoveredTestContext is null)
if (context is null)
{
return;
return ValueTask.CompletedTask;
}

if (!string.IsNullOrWhiteSpace(Id))
{
discoveredTestContext.AddProperty(Category, Id);
context.AddProperty(Category, Id);
}

return ValueTask.CompletedTask;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ internal static class Predefined
public static void Init()
{
Verifier.DerivePathInfo(
(sourceFile, projectDirectory, type, method) =>
(__, projectDirectory, type, method) =>
{
var directory = Path.Combine(projectDirectory, "_snapshots", Namer.TargetFrameworkNameAndVersion);
_ = Directory.CreateDirectory(directory);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ internal static class Predefined
public static void Init()
{
Verifier.DerivePathInfo(
(sourceFile, projectDirectory, type, method) =>
(__, projectDirectory, type, method) =>
{
var directory = Path.Combine(projectDirectory, "..", "_snapshots", Namer.TargetFrameworkNameAndVersion);
_ = Directory.CreateDirectory(directory);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ internal static class Predefined
public static void Init()
{
Verifier.DerivePathInfo(
(sourceFile, projectDirectory, type, method) =>
(__, projectDirectory, type, method) =>
{
var directory = Path.Combine(projectDirectory, "_snapshots", Namer.TargetFrameworkNameAndVersion);
_ = Directory.CreateDirectory(directory);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ internal static class Predefined
public static void Init()
{
Verifier.DerivePathInfo(
(sourceFile, projectDirectory, type, method) =>
(__, projectDirectory, type, method) =>
{
var directory = Path.Combine(projectDirectory, "..", "_snapshots", Namer.TargetFrameworkNameAndVersion);
_ = Directory.CreateDirectory(directory);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ internal static class Predefined
public static void Init()
{
Verifier.DerivePathInfo(
(sourceFile, projectDirectory, type, method) =>
(__, projectDirectory, type, method) =>
{
var directory = Path.Combine(projectDirectory, "_snapshots", Namer.TargetFrameworkNameAndVersion);
_ = Directory.CreateDirectory(directory);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -87,21 +87,62 @@ namespace NetEvolve.Extensions.TUnit.Internal
{
protected CategoryTraitBaseAttribute(string category) { }
public string Category { get; }
public void OnTestDiscovery(TUnit.Core.DiscoveredTestContext discoveredTestContext) { }
public int Order { get; }
public System.Threading.Tasks.ValueTask OnTestDiscovered(TUnit.Core.DiscoveredTestContext context) { }
}
public abstract class CategoryWithIdTraitBaseAttribute : System.Attribute, TUnit.Core.Interfaces.IEventReceiver, TUnit.Core.Interfaces.ITestDiscoveryEventReceiver
{
protected CategoryWithIdTraitBaseAttribute(string category, long id) { }
protected CategoryWithIdTraitBaseAttribute(string category, string? id) { }
public string Category { get; }
public string? Id { get; }
public void OnTestDiscovery(TUnit.Core.DiscoveredTestContext discoveredTestContext) { }
public int Order { get; }
public System.Threading.Tasks.ValueTask OnTestDiscovered(TUnit.Core.DiscoveredTestContext context) { }
}
public abstract class NamedCategoryTraitBaseAttribute : System.Attribute, TUnit.Core.Interfaces.IEventReceiver, TUnit.Core.Interfaces.ITestDiscoveryEventReceiver
{
protected NamedCategoryTraitBaseAttribute(string category, string id) { }
public string Category { get; }
public string Id { get; }
public void OnTestDiscovery(TUnit.Core.DiscoveredTestContext discoveredTestContext) { }
public int Order { get; }
public System.Threading.Tasks.ValueTask OnTestDiscovered(TUnit.Core.DiscoveredTestContext context) { }
}
}
namespace TUnit.Core.Helpers
{
public static class ReflectionReplacements
{
public static bool IsAotMode { get; }
public static object?[]? ConvertTupleToArray(object tuple) { }
public static System.Threading.Tasks.Task<object?> InvokeMethodAsync(string methodKey, object? instance, params object?[]? parameters) { }
public static bool IsTupleType(System.Type type) { }
public static System.Type? MakeGenericType(System.Type genericDefinition, params System.Type[] typeArguments) { }
public static void RegisterGenericTypeFactory(TUnit.Core.Helpers.ReflectionReplacements.GenericTypeFactoryDelegate genericTypeFactory) { }
public static void RegisterMethodInvoker(TUnit.Core.Helpers.ReflectionReplacements.MethodInvokerDelegate methodInvoker) { }
public static void RegisterPropertyInjector<T>(TUnit.Core.Helpers.ReflectionReplacements.PropertyInjectorDelegate<T> propertyInjector)
where T : notnull { }
public static void RegisterTupleConverter(TUnit.Core.Helpers.ReflectionReplacements.TupleConverterDelegate tupleConverter) { }
public static void RegisterTupleTypeChecker(TUnit.Core.Helpers.ReflectionReplacements.TupleTypeCheckerDelegate tupleTypeChecker) { }
public static void RegisterTypeResolver(TUnit.Core.Helpers.ReflectionReplacements.TypeResolverDelegate typeResolver) { }
public static System.Type? ResolveType(string assemblyQualifiedName) { }
public delegate System.Type? GenericTypeFactoryDelegate(System.Type genericDefinition, System.Type[] typeArguments);
public delegate System.Threading.Tasks.Task<object?> MethodInvokerDelegate(string methodKey, object? instance, object?[]? parameters);
public delegate System.Threading.Tasks.Task PropertyInjectorDelegate<T>(T instance, System.Collections.Generic.Dictionary<string, object?> propertyValues, TUnit.Core.TestContext testContext);
public delegate object?[]? TupleConverterDelegate(object tuple);
public delegate bool TupleTypeCheckerDelegate(System.Type type);
public delegate System.Type? TypeResolverDelegate(string assemblyQualifiedName);
}
}
namespace TUnit.Generated
{
public static class AotReplacementRegistry
{
[System.Runtime.CompilerServices.ModuleInitializer]
public static void Initialize() { }
}
public static class AotTypeResolver
{
public static System.Type? MakeGenericType(System.Type genericTypeDefinition, params System.Type[] typeArguments) { }
public static System.Type? ResolveType(string assemblyQualifiedName) { }
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -87,21 +87,62 @@ namespace NetEvolve.Extensions.TUnit.Internal
{
protected CategoryTraitBaseAttribute(string category) { }
public string Category { get; }
public void OnTestDiscovery(TUnit.Core.DiscoveredTestContext discoveredTestContext) { }
public int Order { get; }
public System.Threading.Tasks.ValueTask OnTestDiscovered(TUnit.Core.DiscoveredTestContext context) { }
}
public abstract class CategoryWithIdTraitBaseAttribute : System.Attribute, TUnit.Core.Interfaces.IEventReceiver, TUnit.Core.Interfaces.ITestDiscoveryEventReceiver
{
protected CategoryWithIdTraitBaseAttribute(string category, long id) { }
protected CategoryWithIdTraitBaseAttribute(string category, string? id) { }
public string Category { get; }
public string? Id { get; }
public void OnTestDiscovery(TUnit.Core.DiscoveredTestContext discoveredTestContext) { }
public int Order { get; }
public System.Threading.Tasks.ValueTask OnTestDiscovered(TUnit.Core.DiscoveredTestContext context) { }
}
public abstract class NamedCategoryTraitBaseAttribute : System.Attribute, TUnit.Core.Interfaces.IEventReceiver, TUnit.Core.Interfaces.ITestDiscoveryEventReceiver
{
protected NamedCategoryTraitBaseAttribute(string category, string id) { }
public string Category { get; }
public string Id { get; }
public void OnTestDiscovery(TUnit.Core.DiscoveredTestContext discoveredTestContext) { }
public int Order { get; }
public System.Threading.Tasks.ValueTask OnTestDiscovered(TUnit.Core.DiscoveredTestContext context) { }
}
}
namespace TUnit.Core.Helpers
{
public static class ReflectionReplacements
{
public static bool IsAotMode { get; }
public static object?[]? ConvertTupleToArray(object tuple) { }
public static System.Threading.Tasks.Task<object?> InvokeMethodAsync(string methodKey, object? instance, params object?[]? parameters) { }
public static bool IsTupleType(System.Type type) { }
public static System.Type? MakeGenericType(System.Type genericDefinition, params System.Type[] typeArguments) { }
public static void RegisterGenericTypeFactory(TUnit.Core.Helpers.ReflectionReplacements.GenericTypeFactoryDelegate genericTypeFactory) { }
public static void RegisterMethodInvoker(TUnit.Core.Helpers.ReflectionReplacements.MethodInvokerDelegate methodInvoker) { }
public static void RegisterPropertyInjector<T>(TUnit.Core.Helpers.ReflectionReplacements.PropertyInjectorDelegate<T> propertyInjector)
where T : notnull { }
public static void RegisterTupleConverter(TUnit.Core.Helpers.ReflectionReplacements.TupleConverterDelegate tupleConverter) { }
public static void RegisterTupleTypeChecker(TUnit.Core.Helpers.ReflectionReplacements.TupleTypeCheckerDelegate tupleTypeChecker) { }
public static void RegisterTypeResolver(TUnit.Core.Helpers.ReflectionReplacements.TypeResolverDelegate typeResolver) { }
public static System.Type? ResolveType(string assemblyQualifiedName) { }
public delegate System.Type? GenericTypeFactoryDelegate(System.Type genericDefinition, System.Type[] typeArguments);
public delegate System.Threading.Tasks.Task<object?> MethodInvokerDelegate(string methodKey, object? instance, object?[]? parameters);
public delegate System.Threading.Tasks.Task PropertyInjectorDelegate<T>(T instance, System.Collections.Generic.Dictionary<string, object?> propertyValues, TUnit.Core.TestContext testContext);
public delegate object?[]? TupleConverterDelegate(object tuple);
public delegate bool TupleTypeCheckerDelegate(System.Type type);
public delegate System.Type? TypeResolverDelegate(string assemblyQualifiedName);
}
}
namespace TUnit.Generated
{
public static class AotReplacementRegistry
{
[System.Runtime.CompilerServices.ModuleInitializer]
public static void Initialize() { }
}
public static class AotTypeResolver
{
public static System.Type? MakeGenericType(System.Type genericTypeDefinition, params System.Type[] typeArguments) { }
public static System.Type? ResolveType(string assemblyQualifiedName) { }
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ protected static IEnumerable<KeyValuePair<string, string>> GetTraits([CallerMemb

var context = TestContext.Current;

return GetCategories(context).Union(GetProperties(context)).Distinct().ToList();
return [.. GetCategories(context).Union(GetProperties(context)).Distinct()];
}

private static IEnumerable<KeyValuePair<string, string>> GetCategories(TestContext context) =>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ internal static class Predefined
public static void Init()
{
Verifier.DerivePathInfo(
(sourceFile, projectDirectory, type, method) =>
(__, projectDirectory, type, method) =>
{
var directory = Path.Combine(projectDirectory, "..", "_snapshots", Namer.TargetFrameworkNameAndVersion);
_ = Directory.CreateDirectory(directory);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ internal static class Predefined
public static void Init()
{
Verifier.DerivePathInfo(
(sourceFile, projectDirectory, type, method) =>
(__, projectDirectory, type, method) =>
{
var directory = Path.Combine(projectDirectory, "_snapshots", Namer.TargetFrameworkNameAndVersion);
_ = Directory.CreateDirectory(directory);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,15 +40,17 @@ protected IEnumerable<KeyValuePair<string, string>> GetTraits([CallerMemberName]
}

var messageSink = new NullMessageSink();
return GetTraits(methodInfo.CustomAttributes, messageSink)
.Union(GetTraits(classType.CustomAttributes, messageSink))
.Union(GetTraits(classType.Assembly.CustomAttributes, messageSink))
.Distinct()
.Where(kvp =>
!kvp.Key.Equals("TestGroup", StringComparison.OrdinalIgnoreCase)
&& !kvp.Value.Equals("TestGroup", StringComparison.OrdinalIgnoreCase)
)
.ToList();
return
[
.. GetTraits(methodInfo.CustomAttributes, messageSink)
.Union(GetTraits(classType.CustomAttributes, messageSink))
.Union(GetTraits(classType.Assembly.CustomAttributes, messageSink))
.Distinct()
.Where(kvp =>
!kvp.Key.Equals("TestGroup", StringComparison.OrdinalIgnoreCase)
&& !kvp.Value.Equals("TestGroup", StringComparison.OrdinalIgnoreCase)
),
];
}

private static List<KeyValuePair<string, string>> GetTraits(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ internal static class Predefined
public static void Init()
{
Verifier.DerivePathInfo(
(sourceFile, projectDirectory, type, method) =>
(__, projectDirectory, type, method) =>
{
var directory = Path.Combine(projectDirectory, "..", "_snapshots", Namer.TargetFrameworkNameAndVersion);
_ = Directory.CreateDirectory(directory);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ internal static class Predefined
public static void Init()
{
Verifier.DerivePathInfo(
(sourceFile, projectDirectory, type, method) =>
(__, projectDirectory, type, method) =>
{
var directory = Path.Combine(projectDirectory, "_snapshots", Namer.TargetFrameworkNameAndVersion);
_ = Directory.CreateDirectory(directory);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ internal static class Predefined
public static void Init()
{
Verifier.DerivePathInfo(
(sourceFile, projectDirectory, type, method) =>
(__, projectDirectory, type, method) =>
{
var directory = Path.Combine(projectDirectory, "..", "_snapshots", Namer.TargetFrameworkNameAndVersion);
_ = Directory.CreateDirectory(directory);
Expand Down