diff --git a/Pipeline/Build.FrameworkTest.cs b/Pipeline/Build.FrameworkTest.cs
index 5f9b3f765..0fb8f80ad 100644
--- a/Pipeline/Build.FrameworkTest.cs
+++ b/Pipeline/Build.FrameworkTest.cs
@@ -18,8 +18,8 @@ partial class Build
Solution.Tests.Frameworks.aweXpect_Frameworks_MsTest_Tests,
Solution.Tests.Frameworks.aweXpect_Frameworks_NUnit4_Tests,
Solution.Tests.Frameworks.aweXpect_Frameworks_NUnit3_Tests,
- Solution.Tests.Frameworks.aweXpect_Frameworks_XUnit2_Tests,
- Solution.Tests.Frameworks.aweXpect_Frameworks_XUnit3_Core_Tests,
+ Solution.Tests.Frameworks.aweXpect_Frameworks_Xunit2_Tests,
+ Solution.Tests.Frameworks.aweXpect_Frameworks_Xunit3_Core_Tests,
];
Target TestFrameworks => _ => _
@@ -70,7 +70,7 @@ from framework in supportedFrameworks
{
Project[] projects =
[
- Solution.Tests.Frameworks.aweXpect_Frameworks_TUnit_Tests,
+ Solution.Tests.Frameworks.aweXpect_Frameworks_Tunit_Tests,
];
var testCombinations =
@@ -113,7 +113,7 @@ from framework in frameworks
{
Project[] projects =
[
- Solution.Tests.Frameworks.aweXpect_Frameworks_XUnit3_Tests,
+ Solution.Tests.Frameworks.aweXpect_Frameworks_Xunit3_Tests,
];
var testCombinations =
diff --git a/Pipeline/Build.cs b/Pipeline/Build.cs
index dc06fb472..6cd56e4ed 100644
--- a/Pipeline/Build.cs
+++ b/Pipeline/Build.cs
@@ -20,7 +20,7 @@ partial class Build : NukeBuild
///
/// Afterward, you can update the package reference in `Directory.Packages.props` and reset this flag.
///
- readonly BuildScope BuildScope = BuildScope.Default;
+ readonly BuildScope BuildScope = BuildScope.MainOnly;
[Parameter("Github Token")] readonly string GithubToken;
[GitRepository] readonly GitRepository Repository;
diff --git a/Source/aweXpect.Core/Core/Adapters/MsTestAdapter.cs b/Source/aweXpect.Core/Core/Adapters/MsTestAdapter.cs
deleted file mode 100644
index 6ff75aa9d..000000000
--- a/Source/aweXpect.Core/Core/Adapters/MsTestAdapter.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-// ReSharper disable UnusedType.Global
-
-namespace aweXpect.Core.Adapters;
-
-///
-/// Implements the MS test framework adapter.
-///
-///
-///
-///
-// ReSharper disable once UnusedMember.Global
-internal class MsTestAdapter() : TestFrameworkAdapter(
- "Microsoft.VisualStudio.TestPlatform.TestFramework,",
- (a, m) => FromType("Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException", a, m),
- (a, m) => FromType("Microsoft.VisualStudio.TestTools.UnitTesting.AssertInconclusiveException", a, m),
- (a, m) => FromType("Microsoft.VisualStudio.TestTools.UnitTesting.AssertInconclusiveException", a, m)
-);
diff --git a/Source/aweXpect.Core/Core/Adapters/NUnitAdapter.cs b/Source/aweXpect.Core/Core/Adapters/NUnitAdapter.cs
deleted file mode 100644
index 28e912605..000000000
--- a/Source/aweXpect.Core/Core/Adapters/NUnitAdapter.cs
+++ /dev/null
@@ -1,16 +0,0 @@
-// ReSharper disable UnusedType.Global
-
-namespace aweXpect.Core.Adapters;
-
-///
-/// Implements the NUnit test framework adapter.
-///
-///
-///
-///
-internal class NUnitAdapter() : TestFrameworkAdapter(
- "nunit.framework,",
- (a, m) => FromType("NUnit.Framework.AssertionException", a, m),
- (a, m) => FromType("NUnit.Framework.IgnoreException", a, m),
- (a, m) => FromType("NUnit.Framework.InconclusiveException", a, m)
-);
diff --git a/Source/aweXpect.Core/Core/Adapters/TUnitAdapter.cs b/Source/aweXpect.Core/Core/Adapters/TUnitAdapter.cs
deleted file mode 100644
index 738398671..000000000
--- a/Source/aweXpect.Core/Core/Adapters/TUnitAdapter.cs
+++ /dev/null
@@ -1,89 +0,0 @@
-#if NET8_0_OR_GREATER
-using System;
-using System.Diagnostics;
-using System.Diagnostics.CodeAnalysis;
-using System.Reflection;
-
-// ReSharper disable UnusedType.Global
-
-namespace aweXpect.Core.Adapters;
-
-///
-/// Implements the TUnit test framework adapter.
-///
-///
-///
-///
-[ExcludeFromCodeCoverage]
-internal class TUnitAdapter : ITestFrameworkAdapter
-{
- private Assembly? _assertionsAssembly;
- private Assembly? _coreAssembly;
-
- #region ITestFrameworkAdapter Members
-
- ///
- public bool IsAvailable
- {
- get
- {
- try
- {
- // For netfx the assembly is not in AppDomain by default, so we can't just scan AppDomain.CurrentDomain
- _coreAssembly = Assembly.Load(new AssemblyName("TUnit.Core"));
- _assertionsAssembly = Assembly.Load(new AssemblyName("TUnit.Assertions"));
- return _coreAssembly is not null;
- }
- catch
- {
- return false;
- }
- }
- }
-
- ///
- [DoesNotReturn]
- [StackTraceHidden]
- public void Fail(string message)
- {
- if (_assertionsAssembly == null)
- {
- // When TUnit is used without its assertions library, use the default exception.
- throw new FailException(message);
- }
-
- Type exceptionType =
- _assertionsAssembly.GetType("TUnit.Assertions.Exceptions.AssertionException")
- ?? throw new NotSupportedException(
- "Failed to create the TUnit fail assertion type");
-
- throw (Exception)Activator.CreateInstance(exceptionType, message)!;
- }
-
- ///
- [DoesNotReturn]
- [StackTraceHidden]
- public void Inconclusive(string message)
- {
- Type exceptionType = _coreAssembly?.GetType("TUnit.Core.Exceptions.InconclusiveTestException")
- ?? throw new NotSupportedException(
- "Failed to create the TUnit inconclusive assertion type");
-
- throw (Exception)Activator.CreateInstance(exceptionType, message, null)!;
- }
-
- ///
- [DoesNotReturn]
- [StackTraceHidden]
- public void Skip(string message)
- {
- Type exceptionType = _coreAssembly?.GetType("TUnit.Core.Exceptions.SkipTestException")
- ?? throw new NotSupportedException(
- "Failed to create the TUnit skip assertion type");
-
- throw (Exception)Activator.CreateInstance(exceptionType, message)!;
- }
-
- #endregion
-}
-#endif
diff --git a/Source/aweXpect.Core/Core/Adapters/TestFrameworkAdapter.cs b/Source/aweXpect.Core/Core/Adapters/TestFrameworkAdapter.cs
deleted file mode 100644
index ca345cc92..000000000
--- a/Source/aweXpect.Core/Core/Adapters/TestFrameworkAdapter.cs
+++ /dev/null
@@ -1,94 +0,0 @@
-using System;
-using System.Diagnostics;
-using System.Diagnostics.CodeAnalysis;
-using System.Linq;
-using System.Reflection;
-
-namespace aweXpect.Core.Adapters;
-
-internal abstract class TestFrameworkAdapter(
- string assemblyName,
- Func failException,
- Func skipException,
- Func inconclusiveException)
- : ITestFrameworkAdapter
-{
- private Assembly? _assembly;
-
- protected static Exception? FromType(string typeName, Assembly assembly, string message)
- {
- Type? exceptionType = assembly.GetType(typeName);
- if (exceptionType is null)
- {
- return null;
- }
-
- return (Exception?)Activator.CreateInstance(exceptionType, message);
- }
-
- #region ITestFrameworkAdapter Members
-
- ///
- public bool IsAvailable
- {
- get
- {
- try
- {
- // For netfx the assembly is not in AppDomain by default, so we can't just scan AppDomain.CurrentDomain
- _assembly = AppDomain.CurrentDomain.GetAssemblies()
- .First(a => a.FullName?.StartsWith(assemblyName, StringComparison.OrdinalIgnoreCase) == true);
- }
- catch
- {
- // Ignore any exception while trying to load the assembly
- }
-
- return _assembly is not null;
- }
- }
-
- ///
- [DoesNotReturn]
- [StackTraceHidden]
- public void Fail(string message)
- {
- if (_assembly is null)
- {
- throw new NotSupportedException("Failed to create the fail assertion type");
- }
-
- throw failException(_assembly, message)
- ?? new NotSupportedException("Failed to create the fail assertion type");
- }
-
- ///
- [DoesNotReturn]
- [StackTraceHidden]
- public void Skip(string message)
- {
- if (_assembly is null)
- {
- throw new NotSupportedException("Failed to create the skip assertion type");
- }
-
- throw skipException(_assembly, message)
- ?? new NotSupportedException("Failed to create the skip assertion type");
- }
-
- ///
- [DoesNotReturn]
- [StackTraceHidden]
- public void Inconclusive(string message)
- {
- if (_assembly is null)
- {
- throw new NotSupportedException("Failed to create the inconclusive assertion type");
- }
-
- throw inconclusiveException(_assembly, message)
- ?? new NotSupportedException("Failed to create the inconclusive assertion type");
- }
-
- #endregion
-}
diff --git a/Source/aweXpect.Core/Core/Adapters/XUnit2Adapter.cs b/Source/aweXpect.Core/Core/Adapters/XUnit2Adapter.cs
deleted file mode 100644
index 000b13cdb..000000000
--- a/Source/aweXpect.Core/Core/Adapters/XUnit2Adapter.cs
+++ /dev/null
@@ -1,16 +0,0 @@
-// ReSharper disable UnusedType.Global
-
-namespace aweXpect.Core.Adapters;
-
-///
-/// Implements the XUnit v2 test framework adapter.
-///
-///
-///
-///
-internal class XUnit2Adapter() : TestFrameworkAdapter(
- "xunit.assert",
- (a, m) => FromType("Xunit.Sdk.XunitException", a, m),
- (_, m) => new SkipException($"SKIPPED: {m} (xunit v2 does not support skipping test)"),
- (_, m) => new InconclusiveException(m)
-);
diff --git a/Source/aweXpect.Core/Core/Adapters/XUnit3Adapter.cs b/Source/aweXpect.Core/Core/Adapters/XUnit3Adapter.cs
deleted file mode 100644
index 949f153dc..000000000
--- a/Source/aweXpect.Core/Core/Adapters/XUnit3Adapter.cs
+++ /dev/null
@@ -1,43 +0,0 @@
-using System;
-using System.Diagnostics.CodeAnalysis;
-
-// ReSharper disable UnusedType.Global
-
-namespace aweXpect.Core.Adapters;
-
-///
-/// Implements the XUnit v3 test framework adapter.
-///
-///
-///
-///
-[ExcludeFromCodeCoverage]
-internal class XUnit3Adapter() : TestFrameworkAdapter(
- "xunit.v3.assert",
- (a, m) => FromType("Xunit.Sdk.XunitException", a, m),
- (_, m) => new SkipException($"$XunitDynamicSkip${m}"),
- (_, m) => new XunitTimeoutException(m))
-{
- internal class XUnit3CoreAdapter() : TestFrameworkAdapter(
- "xunit.v3.core",
- (_, m) => new XunitException(m),
- (_, m) => new SkipException($"$XunitDynamicSkip${m}"),
- (_, m) => new XunitTimeoutException(m))
- {
- ///
- /// Interface is required by xunit v3 to identify an assertion exception.
- ///
- private interface IAssertionException;
-
-#pragma warning disable S3871 // Exception types should be "public"
- private sealed class XunitException(string message)
- : Exception(message), IAssertionException;
-#pragma warning restore S3871 // Exception types should be "public"
- }
-
-#pragma warning disable S3871 // Exception types should be "public"
- private sealed class XunitTimeoutException(string message)
- : InconclusiveException(message), ITestTimeoutException;
-#pragma warning restore S3871 // Exception types should be "public"
- private interface ITestTimeoutException;
-}
diff --git a/Source/aweXpect.Frameworks/FrameworkGenerator.cs b/Source/aweXpect.Frameworks/FrameworkGenerator.cs
new file mode 100644
index 000000000..6865c2f40
--- /dev/null
+++ b/Source/aweXpect.Frameworks/FrameworkGenerator.cs
@@ -0,0 +1,285 @@
+using Microsoft.CodeAnalysis;
+
+namespace aweXpect.Frameworks;
+
+///
+/// The for generating test framework adapters.
+///
+[Generator]
+public class FrameworkGenerator : IIncrementalGenerator
+{
+ private static string MsTestAdapter =>
+ """
+ using System.Diagnostics;
+ using System.Diagnostics.CodeAnalysis;
+ using aweXpect.Core.Adapters;
+
+ namespace aweXpect.Frameworks;
+
+ internal class MsTestAdapter() : ITestFrameworkAdapter
+ {
+ ///
+ public bool IsAvailable { get; } = true;
+
+ ///
+ [DoesNotReturn]
+ [StackTraceHidden]
+ public void Skip(string message)
+ => throw new Microsoft.VisualStudio.TestTools.UnitTesting.AssertInconclusiveException(message);
+
+ ///
+ [DoesNotReturn]
+ [StackTraceHidden]
+ public void Fail(string message)
+ => throw new Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException(message);
+
+ ///
+ [DoesNotReturn]
+ [StackTraceHidden]
+ public void Inconclusive(string message)
+ => throw new Microsoft.VisualStudio.TestTools.UnitTesting.AssertInconclusiveException(message);
+ }
+ """;
+
+ private static string NunitAdapter =>
+ """
+ using System.Diagnostics;
+ using System.Diagnostics.CodeAnalysis;
+ using aweXpect.Core.Adapters;
+
+ namespace aweXpect.Frameworks;
+
+ internal class NunitAdapter() : ITestFrameworkAdapter
+ {
+ ///
+ public bool IsAvailable { get; } = true;
+
+ ///
+ [DoesNotReturn]
+ [StackTraceHidden]
+ public void Skip(string message)
+ => throw new NUnit.Framework.IgnoreException(message);
+
+ ///
+ [DoesNotReturn]
+ [StackTraceHidden]
+ public void Fail(string message)
+ => throw new NUnit.Framework.AssertionException(message);
+
+ ///
+ [DoesNotReturn]
+ [StackTraceHidden]
+ public void Inconclusive(string message)
+ => throw new NUnit.Framework.InconclusiveException(message);
+ }
+ """;
+
+ private static string TUnitAdapter =>
+ """
+ using System.Diagnostics;
+ using System.Diagnostics.CodeAnalysis;
+ using aweXpect.Core.Adapters;
+
+ namespace aweXpect.Frameworks;
+
+ internal class TUnitAdapter() : ITestFrameworkAdapter
+ {
+ ///
+ public bool IsAvailable { get; } = true;
+
+ ///
+ [DoesNotReturn]
+ [StackTraceHidden]
+ public void Skip(string message)
+ => throw new TUnit.Core.Exceptions.SkipTestException(message);
+
+ ///
+ [DoesNotReturn]
+ [StackTraceHidden]
+ public void Fail(string message)
+ => throw new TUnit.Assertions.Exceptions.AssertionException(message);
+
+ ///
+ [DoesNotReturn]
+ [StackTraceHidden]
+ public void Inconclusive(string message)
+ => throw new TUnit.Core.Exceptions.InconclusiveTestException(message, null);
+ }
+ """;
+
+ private static string Xunit2Adapter =>
+ """
+ using System.Diagnostics;
+ using System.Diagnostics.CodeAnalysis;
+ using aweXpect.Core.Adapters;
+
+ namespace aweXpect.Frameworks;
+
+ internal class Xunit2Adapter() : ITestFrameworkAdapter
+ {
+ ///
+ public bool IsAvailable { get; } = true;
+
+ ///
+ [DoesNotReturn]
+ [StackTraceHidden]
+ public void Skip(string message)
+ => throw new SkipException($"SKIPPED: {message} (xunit v2 does not support skipping test)");
+
+ ///
+ [DoesNotReturn]
+ [StackTraceHidden]
+ public void Fail(string message)
+ => throw new Xunit.Sdk.XunitException(message);
+
+ ///
+ [DoesNotReturn]
+ [StackTraceHidden]
+ public void Inconclusive(string message)
+ => throw new InconclusiveException(message);
+ }
+ """;
+
+ private static string Xunit3CoreAdapter =>
+ """
+ using System;
+ using System.Diagnostics;
+ using System.Diagnostics.CodeAnalysis;
+ using aweXpect;
+ using aweXpect.Core.Adapters;
+
+ namespace aweXpect.Frameworks;
+
+ internal class Xunit3Adapter() : ITestFrameworkAdapter
+ {
+ ///
+ public bool IsAvailable { get; } = true;
+
+ ///
+ [DoesNotReturn]
+ [StackTraceHidden]
+ public void Skip(string message)
+ => throw new SkipException($"$XunitDynamicSkip${message}");
+
+ ///
+ [DoesNotReturn]
+ [StackTraceHidden]
+ public void Fail(string message)
+ => throw new XunitException(message);
+
+ ///
+ [DoesNotReturn]
+ [StackTraceHidden]
+ public void Inconclusive(string message)
+ => throw new XunitTimeoutException(message);
+
+ ///
+ /// Interface is required by xunit v3 to identify an assertion exception.
+ ///
+ private interface IAssertionException;
+
+ #pragma warning disable S3871 // Exception types should be "public"
+ private sealed class XunitException(string message)
+ : Exception(message), IAssertionException;
+ #pragma warning restore S3871 // Exception types should be "public"
+
+ #pragma warning disable S3871 // Exception types should be "public"
+ private sealed class XunitTimeoutException(string message)
+ : InconclusiveException(message), ITestTimeoutException;
+ #pragma warning restore S3871 // Exception types should be "public"
+ private interface ITestTimeoutException;
+ }
+ """;
+
+ private static string Xunit3AssertAdapter =>
+ """
+ using System;
+ using System.Diagnostics;
+ using System.Diagnostics.CodeAnalysis;
+ using aweXpect;
+ using aweXpect.Core.Adapters;
+
+ namespace aweXpect.Frameworks;
+
+ internal class Xunit3Adapter() : ITestFrameworkAdapter
+ {
+ ///
+ public bool IsAvailable { get; } = true;
+
+ ///
+ [DoesNotReturn]
+ [StackTraceHidden]
+ public void Skip(string message)
+ => throw new SkipException($"$XunitDynamicSkip${message}");
+
+ ///
+ [DoesNotReturn]
+ [StackTraceHidden]
+ public void Fail(string message)
+ => throw new Xunit.Sdk.XunitException(message);
+
+ ///
+ [DoesNotReturn]
+ [StackTraceHidden]
+ public void Inconclusive(string message)
+ => throw new XunitTimeoutException(message);
+
+ #pragma warning disable S3871 // Exception types should be "public"
+ private sealed class XunitTimeoutException(string message)
+ : InconclusiveException(message), ITestTimeoutException;
+ #pragma warning restore S3871 // Exception types should be "public"
+ private interface ITestTimeoutException;
+ }
+ """;
+
+ void IIncrementalGenerator.Initialize(IncrementalGeneratorInitializationContext context)
+ {
+ IncrementalValueProvider<(bool hasMsTest, bool hasNunit, bool hasTUnit, bool hasXunit2, bool hasXunit3Core, bool
+ hasXunit3Assert)> settings = context.CompilationProvider
+ .Select((c, _) =>
+ {
+ bool hasMsTest =
+ c.ReferencedAssemblyNames.Any(x => x.Name == "Microsoft.VisualStudio.TestPlatform.TestFramework");
+ bool hasNunit = c.ReferencedAssemblyNames.Any(x => x.Name == "nunit.framework");
+ bool hasTUnit = c.ReferencedAssemblyNames.Any(x => x.Name == "TUnit.Core") &&
+ c.ReferencedAssemblyNames.Any(x => x.Name == "TUnit.Assertions");
+ bool hasXunit2 = c.ReferencedAssemblyNames.Any(x => x.Name == "xunit.assert");
+ bool hasXunit3Core = c.ReferencedAssemblyNames.Any(x => x.Name == "xunit.v3.core");
+ bool hasXunit3Assert = c.ReferencedAssemblyNames.Any(x => x.Name == "xunit.v3.assert");
+ return (hasMsTest, hasNunit, hasTUnit, hasXunit2, hasXunit3Core, hasXunit3Assert);
+ });
+
+ // Generate the source from the captured values
+ context.RegisterSourceOutput(settings, static (spc, opts) =>
+ {
+ if (opts.hasMsTest)
+ {
+ spc.AddSource("MsTest.g.cs", MsTestAdapter);
+ }
+
+ if (opts.hasNunit)
+ {
+ spc.AddSource("Nunit.g.cs", NunitAdapter);
+ }
+
+ if (opts.hasTUnit)
+ {
+ spc.AddSource("TUnit.g.cs", TUnitAdapter);
+ }
+
+ if (opts.hasXunit2)
+ {
+ spc.AddSource("Xunit2.g.cs", Xunit2Adapter);
+ }
+
+ if (opts.hasXunit3Assert)
+ {
+ spc.AddSource("Xunit3.g.cs", Xunit3AssertAdapter);
+ }
+ else if (opts.hasXunit3Core)
+ {
+ spc.AddSource("Xunit3.g.cs", Xunit3CoreAdapter);
+ }
+ });
+ }
+}
diff --git a/Source/aweXpect.Frameworks/Properties/launchSettings.json b/Source/aweXpect.Frameworks/Properties/launchSettings.json
new file mode 100644
index 000000000..bd75a0398
--- /dev/null
+++ b/Source/aweXpect.Frameworks/Properties/launchSettings.json
@@ -0,0 +1,9 @@
+{
+ "$schema": "http://json.schemastore.org/launchsettings.json",
+ "profiles": {
+ "Generators": {
+ "commandName": "DebugRoslynComponent",
+ "targetProject": "../../Tests/Frameworks/aweXpect.Frameworks.TUnit.Tests/aweXpect.Frameworks.TUnit.Tests.csproj"
+ }
+ }
+}
diff --git a/Source/aweXpect.Frameworks/aweXpect.Frameworks.csproj b/Source/aweXpect.Frameworks/aweXpect.Frameworks.csproj
new file mode 100644
index 000000000..65f42d8e5
--- /dev/null
+++ b/Source/aweXpect.Frameworks/aweXpect.Frameworks.csproj
@@ -0,0 +1,25 @@
+
+
+
+ netstandard2.0
+ false
+ enable
+ true
+ preview
+ true
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Source/aweXpect/aweXpect.csproj b/Source/aweXpect/aweXpect.csproj
index 0b7dd50a9..430990395 100644
--- a/Source/aweXpect/aweXpect.csproj
+++ b/Source/aweXpect/aweXpect.csproj
@@ -21,6 +21,7 @@
+
diff --git a/Tests/Frameworks/aweXpect.Frameworks.MsTest.Tests/aweXpect.Frameworks.MsTest.Tests.csproj b/Tests/Frameworks/aweXpect.Frameworks.MsTest.Tests/aweXpect.Frameworks.MsTest.Tests.csproj
index dc09d3878..d04862f0f 100644
--- a/Tests/Frameworks/aweXpect.Frameworks.MsTest.Tests/aweXpect.Frameworks.MsTest.Tests.csproj
+++ b/Tests/Frameworks/aweXpect.Frameworks.MsTest.Tests/aweXpect.Frameworks.MsTest.Tests.csproj
@@ -6,6 +6,7 @@
+
diff --git a/Tests/Frameworks/aweXpect.Frameworks.NUnit3.Tests/aweXpect.Frameworks.NUnit3.Tests.csproj b/Tests/Frameworks/aweXpect.Frameworks.NUnit3.Tests/aweXpect.Frameworks.NUnit3.Tests.csproj
index 0c01d8f03..0a2cc3e8c 100644
--- a/Tests/Frameworks/aweXpect.Frameworks.NUnit3.Tests/aweXpect.Frameworks.NUnit3.Tests.csproj
+++ b/Tests/Frameworks/aweXpect.Frameworks.NUnit3.Tests/aweXpect.Frameworks.NUnit3.Tests.csproj
@@ -13,6 +13,7 @@
+
diff --git a/Tests/Frameworks/aweXpect.Frameworks.NUnit4.Tests/aweXpect.Frameworks.NUnit4.Tests.csproj b/Tests/Frameworks/aweXpect.Frameworks.NUnit4.Tests/aweXpect.Frameworks.NUnit4.Tests.csproj
index eae373b76..541677485 100644
--- a/Tests/Frameworks/aweXpect.Frameworks.NUnit4.Tests/aweXpect.Frameworks.NUnit4.Tests.csproj
+++ b/Tests/Frameworks/aweXpect.Frameworks.NUnit4.Tests/aweXpect.Frameworks.NUnit4.Tests.csproj
@@ -13,6 +13,7 @@
+
diff --git a/Tests/Frameworks/aweXpect.Frameworks.TUnit.Tests/TUnitTestFrameworkTests.cs b/Tests/Frameworks/aweXpect.Frameworks.Tunit.Tests/TunitTestFrameworkTests.cs
similarity index 90%
rename from Tests/Frameworks/aweXpect.Frameworks.TUnit.Tests/TUnitTestFrameworkTests.cs
rename to Tests/Frameworks/aweXpect.Frameworks.Tunit.Tests/TunitTestFrameworkTests.cs
index c2f1c25e9..8417ded86 100644
--- a/Tests/Frameworks/aweXpect.Frameworks.TUnit.Tests/TUnitTestFrameworkTests.cs
+++ b/Tests/Frameworks/aweXpect.Frameworks.Tunit.Tests/TunitTestFrameworkTests.cs
@@ -2,9 +2,9 @@
using TUnit.Assertions.Exceptions;
using TUnit.Core.Exceptions;
-namespace aweXpect.Frameworks.TUnit.Tests;
+namespace aweXpect.Frameworks.Tunit.Tests;
-public sealed class TUnitTestFrameworkTests
+public sealed class TunitTestFrameworkTests
{
[Test]
public async Task OnFail_WhenUsingXunit2AsTestFramework_ShouldThrowXunitException()
diff --git a/Tests/Frameworks/aweXpect.Frameworks.TUnit.Tests/aweXpect.Frameworks.TUnit.Tests.csproj b/Tests/Frameworks/aweXpect.Frameworks.Tunit.Tests/aweXpect.Frameworks.Tunit.Tests.csproj
similarity index 70%
rename from Tests/Frameworks/aweXpect.Frameworks.TUnit.Tests/aweXpect.Frameworks.TUnit.Tests.csproj
rename to Tests/Frameworks/aweXpect.Frameworks.Tunit.Tests/aweXpect.Frameworks.Tunit.Tests.csproj
index cfd8cb787..dc5a790e8 100644
--- a/Tests/Frameworks/aweXpect.Frameworks.TUnit.Tests/aweXpect.Frameworks.TUnit.Tests.csproj
+++ b/Tests/Frameworks/aweXpect.Frameworks.Tunit.Tests/aweXpect.Frameworks.Tunit.Tests.csproj
@@ -7,6 +7,7 @@
+
diff --git a/Tests/Frameworks/aweXpect.Frameworks.XUnit2.Tests/XUnit2TestFrameworkTests.cs b/Tests/Frameworks/aweXpect.Frameworks.Xunit2.Tests/Xunit2TestFrameworkTests.cs
similarity index 89%
rename from Tests/Frameworks/aweXpect.Frameworks.XUnit2.Tests/XUnit2TestFrameworkTests.cs
rename to Tests/Frameworks/aweXpect.Frameworks.Xunit2.Tests/Xunit2TestFrameworkTests.cs
index 6e729f277..7cf569914 100644
--- a/Tests/Frameworks/aweXpect.Frameworks.XUnit2.Tests/XUnit2TestFrameworkTests.cs
+++ b/Tests/Frameworks/aweXpect.Frameworks.Xunit2.Tests/Xunit2TestFrameworkTests.cs
@@ -2,9 +2,9 @@
using Xunit;
using Xunit.Sdk;
-namespace aweXpect.Frameworks.XUnit2.Tests;
+namespace aweXpect.Frameworks.Xunit2.Tests;
-public sealed class XUnit2TestFrameworkTests
+public sealed class Xunit2TestFrameworkTests
{
[Fact]
public async Task OnFail_WhenUsingXunit2AsTestFramework_ShouldThrowXunitException()
diff --git a/Tests/Frameworks/aweXpect.Frameworks.XUnit2.Tests/aweXpect.Frameworks.XUnit2.Tests.csproj b/Tests/Frameworks/aweXpect.Frameworks.Xunit2.Tests/aweXpect.Frameworks.Xunit2.Tests.csproj
similarity index 82%
rename from Tests/Frameworks/aweXpect.Frameworks.XUnit2.Tests/aweXpect.Frameworks.XUnit2.Tests.csproj
rename to Tests/Frameworks/aweXpect.Frameworks.Xunit2.Tests/aweXpect.Frameworks.Xunit2.Tests.csproj
index a31415ea2..8cfffbd60 100644
--- a/Tests/Frameworks/aweXpect.Frameworks.XUnit2.Tests/aweXpect.Frameworks.XUnit2.Tests.csproj
+++ b/Tests/Frameworks/aweXpect.Frameworks.Xunit2.Tests/aweXpect.Frameworks.Xunit2.Tests.csproj
@@ -9,6 +9,7 @@
+
diff --git a/Tests/Frameworks/aweXpect.Frameworks.XUnit3.Core.Tests/XUnit3CoreTestFrameworkTests.cs b/Tests/Frameworks/aweXpect.Frameworks.Xunit3.Core.Tests/Xunit3CoreTestFrameworkTests.cs
similarity index 92%
rename from Tests/Frameworks/aweXpect.Frameworks.XUnit3.Core.Tests/XUnit3CoreTestFrameworkTests.cs
rename to Tests/Frameworks/aweXpect.Frameworks.Xunit3.Core.Tests/Xunit3CoreTestFrameworkTests.cs
index 7ae6ee9b2..72e0e3b6a 100644
--- a/Tests/Frameworks/aweXpect.Frameworks.XUnit3.Core.Tests/XUnit3CoreTestFrameworkTests.cs
+++ b/Tests/Frameworks/aweXpect.Frameworks.Xunit3.Core.Tests/Xunit3CoreTestFrameworkTests.cs
@@ -3,9 +3,9 @@
using System.Threading.Tasks;
using Xunit;
-namespace aweXpect.Frameworks.XUnit3.Core.Tests;
+namespace aweXpect.Frameworks.Xunit3.Core.Tests;
-public class XUnit3TestFrameworkTests
+public class Xunit3TestFrameworkTests
{
[Fact]
public async Task OnFail_WhenUsingXunit3AsTestFramework_ShouldThrowXunitException()
diff --git a/Tests/Frameworks/aweXpect.Frameworks.XUnit3.Core.Tests/aweXpect.Frameworks.XUnit3.Core.Tests.csproj b/Tests/Frameworks/aweXpect.Frameworks.Xunit3.Core.Tests/aweXpect.Frameworks.Xunit3.Core.Tests.csproj
similarity index 84%
rename from Tests/Frameworks/aweXpect.Frameworks.XUnit3.Core.Tests/aweXpect.Frameworks.XUnit3.Core.Tests.csproj
rename to Tests/Frameworks/aweXpect.Frameworks.Xunit3.Core.Tests/aweXpect.Frameworks.Xunit3.Core.Tests.csproj
index 1d784b0dd..3526de4e6 100644
--- a/Tests/Frameworks/aweXpect.Frameworks.XUnit3.Core.Tests/aweXpect.Frameworks.XUnit3.Core.Tests.csproj
+++ b/Tests/Frameworks/aweXpect.Frameworks.Xunit3.Core.Tests/aweXpect.Frameworks.Xunit3.Core.Tests.csproj
@@ -12,6 +12,7 @@
+
diff --git a/Tests/Frameworks/aweXpect.Frameworks.XUnit3.Tests/XUnit3TestFrameworkTests.cs b/Tests/Frameworks/aweXpect.Frameworks.Xunit3.Tests/Xunit3TestFrameworkTests.cs
similarity index 91%
rename from Tests/Frameworks/aweXpect.Frameworks.XUnit3.Tests/XUnit3TestFrameworkTests.cs
rename to Tests/Frameworks/aweXpect.Frameworks.Xunit3.Tests/Xunit3TestFrameworkTests.cs
index 15e2a8388..d56ad2cb6 100644
--- a/Tests/Frameworks/aweXpect.Frameworks.XUnit3.Tests/XUnit3TestFrameworkTests.cs
+++ b/Tests/Frameworks/aweXpect.Frameworks.Xunit3.Tests/Xunit3TestFrameworkTests.cs
@@ -3,9 +3,9 @@
using Xunit;
using Xunit.Sdk;
-namespace aweXpect.Frameworks.XUnit3.Tests;
+namespace aweXpect.Frameworks.Xunit3.Tests;
-public class XUnit3TestFrameworkTests
+public class Xunit3TestFrameworkTests
{
[Fact]
public async Task OnFail_WhenUsingXunit3AsTestFramework_ShouldThrowXunitException()
diff --git a/Tests/Frameworks/aweXpect.Frameworks.XUnit3.Tests/aweXpect.Frameworks.XUnit3.Tests.csproj b/Tests/Frameworks/aweXpect.Frameworks.Xunit3.Tests/aweXpect.Frameworks.Xunit3.Tests.csproj
similarity index 77%
rename from Tests/Frameworks/aweXpect.Frameworks.XUnit3.Tests/aweXpect.Frameworks.XUnit3.Tests.csproj
rename to Tests/Frameworks/aweXpect.Frameworks.Xunit3.Tests/aweXpect.Frameworks.Xunit3.Tests.csproj
index e6203d2ba..02c917d56 100644
--- a/Tests/Frameworks/aweXpect.Frameworks.XUnit3.Tests/aweXpect.Frameworks.XUnit3.Tests.csproj
+++ b/Tests/Frameworks/aweXpect.Frameworks.Xunit3.Tests/aweXpect.Frameworks.Xunit3.Tests.csproj
@@ -12,6 +12,7 @@
+
diff --git a/Tests/aweXpect.Core.Tests/Core/Adapters/TestFrameworkAdapterTests.cs b/Tests/aweXpect.Core.Tests/Core/Adapters/TestFrameworkAdapterTests.cs
deleted file mode 100644
index 8a15a0cb3..000000000
--- a/Tests/aweXpect.Core.Tests/Core/Adapters/TestFrameworkAdapterTests.cs
+++ /dev/null
@@ -1,165 +0,0 @@
-using System.Reflection;
-using aweXpect.Core.Adapters;
-using aweXpect.Core.Tests.TestHelpers;
-using Xunit.Abstractions;
-
-namespace aweXpect.Core.Tests.Core.Adapters;
-
-public sealed class TestFrameworkAdapterTests : IDisposable
-{
- private readonly XunitTraceWriter _writer;
-
- public TestFrameworkAdapterTests(ITestOutputHelper testOutputHelper)
- {
- _writer = new XunitTraceWriter(testOutputHelper);
- }
-
- public void Dispose() => _writer.Dispose();
-
- [Fact]
- public async Task FromType_WhenNameDoesNotExist_ShouldReturnNull()
- {
- string typeName = "type-that-does-not-exist";
- Assembly assembly = typeof(TestFrameworkAdapterTests).Assembly;
-
- Exception? exception = MyTestFrameworkAdapter.FromTypeWrapper(typeName, assembly, "foo");
-
- await That(exception).IsNull();
- }
-
- [Fact]
- public async Task Inconclusive_MissingAssemblyName_ShouldThrowNotSupportedException()
- {
- MyTestFrameworkAdapter adapter = new(MissingAssembly, skipException: new MyException());
- _ = adapter.IsAvailable;
-
- await That(() => adapter.Inconclusive("foo")).Throws()
- .WithMessage("Failed to create the inconclusive assertion type");
- }
-
- [Fact]
- public async Task Inconclusive_ValidAssemblyName_ShouldThrowNotSupportedException()
- {
- MyTestFrameworkAdapter adapter = new(ExistingAssembly);
- _ = adapter.IsAvailable;
-
- await That(() => adapter.Inconclusive("foo")).Throws()
- .WithMessage("Failed to create the inconclusive assertion type");
- }
-
- [Fact]
- public async Task Inconclusive_ValidAssemblyName_WithException_ShouldThrowProvidedException()
- {
- MyException exception = new("my-message");
- MyTestFrameworkAdapter adapter = new(ExistingAssembly, inconclusiveException: exception);
- _ = adapter.IsAvailable;
-
- await That(() => adapter.Inconclusive("foo")).Throws()
- .WithMessage("my-message");
- }
-
- [Fact]
- public async Task MissingAssemblyName_ShouldNotBeAvailable()
- {
- MyTestFrameworkAdapter adapter = new(MissingAssembly);
- _ = adapter.IsAvailable;
-
- await That(adapter.IsAvailable).IsFalse();
- }
-
- [Fact]
- public async Task Skip_MissingAssemblyName_ShouldThrowNotSupportedException()
- {
- MyTestFrameworkAdapter adapter = new(MissingAssembly, skipException: new MyException());
- _ = adapter.IsAvailable;
-
- await That(() => adapter.Skip("foo")).Throws()
- .WithMessage("Failed to create the skip assertion type");
- }
-
- [Fact]
- public async Task Skip_ValidAssemblyName_ShouldThrowNotSupportedException()
- {
- MyTestFrameworkAdapter adapter = new(ExistingAssembly);
- _ = adapter.IsAvailable;
-
- await That(() => adapter.Skip("foo")).Throws()
- .WithMessage("Failed to create the skip assertion type");
- }
-
- [Fact]
- public async Task Skip_ValidAssemblyName_WithException_ShouldThrowProvidedException()
- {
- MyException exception = new("my-message");
- MyTestFrameworkAdapter adapter = new(ExistingAssembly, skipException: exception);
- _ = adapter.IsAvailable;
-
- await That(() => adapter.Skip("foo")).Throws()
- .WithMessage("my-message");
- }
-
- [Fact]
- public async Task Throw_MissingAssemblyName_ShouldThrowNotSupportedException()
- {
- MyTestFrameworkAdapter adapter = new(MissingAssembly, new MyException());
- _ = adapter.IsAvailable;
-
- await That(() => adapter.Fail("foo")).Throws()
- .WithMessage("Failed to create the fail assertion type");
- }
-
- [Fact]
- public async Task Throw_ValidAssemblyName_ShouldThrowNotSupportedException()
- {
- MyTestFrameworkAdapter adapter = new(ExistingAssembly);
- _ = adapter.IsAvailable;
-
- await That(() => adapter.Fail("foo")).Throws()
- .WithMessage("Failed to create the fail assertion type");
- }
-
- [Fact]
- public async Task Throw_ValidAssemblyName_WithException_ShouldThrowProvidedException()
- {
- MyException exception = new("my-message");
- MyTestFrameworkAdapter adapter = new(ExistingAssembly, exception);
- _ = adapter.IsAvailable;
-
- await That(() => adapter.Fail("foo")).Throws()
- .WithMessage("my-message");
- }
-
- [Fact]
- public async Task ValidAssemblyName_ShouldBeAvailable()
- {
- MyTestFrameworkAdapter adapter = new(ExistingAssembly);
- _ = adapter.IsAvailable;
-
- await That(adapter.IsAvailable).IsTrue();
- }
-
- private const string ExistingAssembly = "aweXpect.Core.Tests";
- private const string MissingAssembly = "this-assembly-does-not-exist";
-
- private sealed class MyTestFrameworkAdapter : TestFrameworkAdapter
- {
- public MyTestFrameworkAdapter() : this(MissingAssembly)
- {
- // An empty constructor is required in order to avoid an exception in the ambient initialization "DetectFramework" method!
- }
-
- public MyTestFrameworkAdapter(string assemblyName,
- Exception? failException = null,
- Exception? skipException = null,
- Exception? inconclusiveException = null)
- : base(assemblyName,
- (_, _) => failException,
- (_, _) => skipException,
- (_, _) => inconclusiveException)
- {
- }
-
- public static Exception? FromTypeWrapper(string typeName, Assembly assembly, string message)
- => FromType(typeName, assembly, message);
- }
-}
diff --git a/Tests/aweXpect.Core.Tests/aweXpect.Core.Tests.csproj b/Tests/aweXpect.Core.Tests/aweXpect.Core.Tests.csproj
index 45082cec7..83538e681 100644
--- a/Tests/aweXpect.Core.Tests/aweXpect.Core.Tests.csproj
+++ b/Tests/aweXpect.Core.Tests/aweXpect.Core.Tests.csproj
@@ -8,6 +8,7 @@
+
diff --git a/Tests/aweXpect.Internal.Tests/aweXpect.Internal.Tests.csproj b/Tests/aweXpect.Internal.Tests/aweXpect.Internal.Tests.csproj
index 69923f4d0..2a11e1a0a 100644
--- a/Tests/aweXpect.Internal.Tests/aweXpect.Internal.Tests.csproj
+++ b/Tests/aweXpect.Internal.Tests/aweXpect.Internal.Tests.csproj
@@ -1,6 +1,7 @@
+
diff --git a/Tests/aweXpect.Tests/aweXpect.Tests.csproj b/Tests/aweXpect.Tests/aweXpect.Tests.csproj
index e03cda6ab..b8f2543ba 100644
--- a/Tests/aweXpect.Tests/aweXpect.Tests.csproj
+++ b/Tests/aweXpect.Tests/aweXpect.Tests.csproj
@@ -1,6 +1,7 @@
+
diff --git a/aweXpect.sln b/aweXpect.sln
index 21085e6fe..bbe94e9bb 100644
--- a/aweXpect.sln
+++ b/aweXpect.sln
@@ -67,9 +67,9 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "aweXpect.Frameworks.NUnit3.
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "aweXpect.Frameworks.NUnit4.Tests", "Tests\Frameworks\aweXpect.Frameworks.NUnit4.Tests\aweXpect.Frameworks.NUnit4.Tests.csproj", "{9ABF8E11-7975-43F2-8418-1F6D9E5E4D37}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "aweXpect.Frameworks.TUnit.Tests", "Tests\Frameworks\aweXpect.Frameworks.TUnit.Tests\aweXpect.Frameworks.TUnit.Tests.csproj", "{532FAE88-3327-4B1B-B3B7-43D439A7CEE8}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "aweXpect.Frameworks.Tunit.Tests", "Tests\Frameworks\aweXpect.Frameworks.Tunit.Tests\aweXpect.Frameworks.Tunit.Tests.csproj", "{532FAE88-3327-4B1B-B3B7-43D439A7CEE8}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "aweXpect.Frameworks.XUnit2.Tests", "Tests\Frameworks\aweXpect.Frameworks.XUnit2.Tests\aweXpect.Frameworks.XUnit2.Tests.csproj", "{3E369992-EC14-4874-B793-7FCF5D9DB660}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "aweXpect.Frameworks.Xunit2.Tests", "Tests\Frameworks\aweXpect.Frameworks.Xunit2.Tests\aweXpect.Frameworks.Xunit2.Tests.csproj", "{3E369992-EC14-4874-B793-7FCF5D9DB660}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Benchmarks", "Benchmarks", "{FA002813-92DA-46AC-8F34-DA739B4380C8}"
EndProject
@@ -79,9 +79,9 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "aweXpect.Frameworks.Fallbac
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "aweXpect.Frameworks.MsTest.Tests", "Tests\Frameworks\aweXpect.Frameworks.MsTest.Tests\aweXpect.Frameworks.MsTest.Tests.csproj", "{1EC393AD-DE25-4C0E-A8B5-B19A2843A4E2}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "aweXpect.Frameworks.XUnit3.Tests", "Tests\Frameworks\aweXpect.Frameworks.XUnit3.Tests\aweXpect.Frameworks.XUnit3.Tests.csproj", "{5D0060AC-986B-4C28-A871-BA0EC9223DA7}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "aweXpect.Frameworks.Xunit3.Tests", "Tests\Frameworks\aweXpect.Frameworks.Xunit3.Tests\aweXpect.Frameworks.Xunit3.Tests.csproj", "{5D0060AC-986B-4C28-A871-BA0EC9223DA7}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "aweXpect.Frameworks.XUnit3.Core.Tests", "Tests\Frameworks\aweXpect.Frameworks.XUnit3.Core.Tests\aweXpect.Frameworks.XUnit3.Core.Tests.csproj", "{A815B631-402C-44B0-80B3-50B6EAFD8078}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "aweXpect.Frameworks.Xunit3.Core.Tests", "Tests\Frameworks\aweXpect.Frameworks.Xunit3.Core.Tests\aweXpect.Frameworks.Xunit3.Core.Tests.csproj", "{A815B631-402C-44B0-80B3-50B6EAFD8078}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "aweXpect.Internal.Tests", "Tests\aweXpect.Internal.Tests\aweXpect.Internal.Tests.csproj", "{4A940BE9-D9E0-4004-89D4-5D6E8CB37208}"
EndProject
@@ -95,6 +95,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "aweXpect.Analyzers.CodeFixe
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "aweXpect.SourceGenerators", "Source\aweXpect.SourceGenerators\aweXpect.SourceGenerators.csproj", "{C4F90F26-54CD-447E-870D-6F1C05729155}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "aweXpect.Frameworks", "Source\aweXpect.Frameworks\aweXpect.Frameworks.csproj", "{75E57A42-1C09-4923-B1E1-A27937189E9A}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -183,6 +185,10 @@ Global
{C4F90F26-54CD-447E-870D-6F1C05729155}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C4F90F26-54CD-447E-870D-6F1C05729155}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C4F90F26-54CD-447E-870D-6F1C05729155}.Release|Any CPU.Build.0 = Release|Any CPU
+ {75E57A42-1C09-4923-B1E1-A27937189E9A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {75E57A42-1C09-4923-B1E1-A27937189E9A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {75E57A42-1C09-4923-B1E1-A27937189E9A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {75E57A42-1C09-4923-B1E1-A27937189E9A}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{97D64B45-D97E-4A94-9EF0-37BF25310EBA} = {9CC57AD0-4984-4618-96EA-01FFFCCD84FA}