diff --git a/TUnit.Core.SourceGenerator.Tests/DataSourceGeneratorTests.NonTyped.verified.txt b/TUnit.Core.SourceGenerator.Tests/DataSourceGeneratorTests.NonTyped.verified.txt
new file mode 100644
index 0000000000..a94604bf63
--- /dev/null
+++ b/TUnit.Core.SourceGenerator.Tests/DataSourceGeneratorTests.NonTyped.verified.txt
@@ -0,0 +1,115 @@
+[
+//
+#pragma warning disable
+using global::System.Linq;
+using global::System.Reflection;
+using global::TUnit.Core;
+using global::TUnit.Core.Extensions;
+
+namespace TUnit.SourceGenerated;
+
+[global::System.Diagnostics.StackTraceHidden]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+file partial class AutoDataTests : TUnit.Core.Interfaces.SourceGenerator.ITestSource
+{
+ [global::System.Runtime.CompilerServices.ModuleInitializer]
+ public static void Initialise()
+ {
+ SourceRegistrar.Register(new AutoDataTests());
+ }
+ public global::System.Collections.Generic.IReadOnlyList CollectTests(string sessionId)
+ {
+ return Tests0(sessionId);
+ }
+ private global::System.Collections.Generic.List Tests0(string sessionId)
+ {
+ global::System.Collections.Generic.List nodes = [];
+ var classDataIndex = 0;
+ var testMethodDataIndex = 0;
+ try
+ {
+ var testClassType = typeof(global::TUnit.TestProject.AutoDataTests);
+ var methodInfo = global::TUnit.Core.Helpers.MethodInfoRetriever.GetMethodInfo(typeof(global::TUnit.TestProject.AutoDataTests), "Test1", 0, [typeof(global::System.String), typeof(global::System.Int32), typeof(global::System.Double), typeof(global::System.Boolean)]);
+
+ var testBuilderContext = new global::TUnit.Core.TestBuilderContext();
+ var testBuilderContextAccessor = new global::TUnit.Core.TestBuilderContextAccessor(testBuilderContext);
+ var methodArgDataGeneratorMetadata = new DataGeneratorMetadata
+{
+ Type = TUnit.Core.Enums.DataGeneratorType.Parameters,
+ TestClassType = testClassType,
+ ParameterInfos = methodInfo.GetParameters(),
+ PropertyInfo = null,
+ TestBuilderContext = testBuilderContextAccessor,
+ TestSessionId = sessionId,
+};
+ var methodDataAttribute = new global::TUnit.TestProject.Attributes.AutoDataAttribute()
+{
+
+};
+
+ var methodArgGeneratedDataArray = methodDataAttribute.GenerateDataSources(methodArgDataGeneratorMetadata);
+
+ foreach (var methodArgGeneratedDataAccessor in methodArgGeneratedDataArray)
+ {
+ testMethodDataIndex++;
+
+ var methodArgGeneratedData = methodArgGeneratedDataAccessor();
+ global::System.String methodArg = (global::System.String)methodArgGeneratedData[0];
+ global::System.Int32 methodArg1 = (global::System.Int32)methodArgGeneratedData[1];
+ global::System.Double methodArg2 = (global::System.Double)methodArgGeneratedData[2];
+ global::System.Boolean methodArg3 = (global::System.Boolean)methodArgGeneratedData[3];
+ var resettableClassFactoryDelegate = () => new ResettableLazy(() =>
+ new global::TUnit.TestProject.AutoDataTests()
+ , sessionId, testBuilderContext);
+
+ var resettableClassFactory = resettableClassFactoryDelegate();
+
+ nodes.Add(new TestMetadata
+ {
+ TestId = $"global::TUnit.TestProject.Attributes.AutoDataAttribute:{testMethodDataIndex}:TL-GAC0:TUnit.TestProject.AutoDataTests.Test1(System.String,System.Int32,System.Double,System.Boolean):0",
+ TestClassArguments = [],
+ TestMethodArguments = [methodArg, methodArg1, methodArg2, methodArg3],
+ TestClassProperties = [],
+ CurrentRepeatAttempt = 0,
+ RepeatLimit = 0,
+ MethodInfo = methodInfo,
+ ResettableClassFactory = resettableClassFactory,
+ TestMethodFactory = (classInstance, cancellationToken) => AsyncConvert.Convert(() => classInstance.Test1(methodArg, methodArg1, methodArg2, methodArg3)),
+ TestFilePath = @"",
+ TestLineNumber = 8,
+ TestAttributes = [ new global::TUnit.TestProject.Attributes.AutoDataAttribute()
+{
+
+}, new global::TUnit.Core.TestAttribute()
+{
+
+} ],
+ ClassAttributes = [ ],
+ AssemblyAttributes = [ ],
+ DataAttributes = [ methodDataAttribute ],
+ TestBuilderContext = testBuilderContext,
+ });
+ resettableClassFactory = resettableClassFactoryDelegate();
+ testBuilderContext = new();
+ testBuilderContextAccessor.Current = testBuilderContext;
+ }
+ }
+ catch (global::System.Exception exception)
+ {
+ nodes.Add(new FailedInitializationTest
+ {
+ TestId = $"global::TUnit.TestProject.Attributes.AutoDataAttribute:{testMethodDataIndex}:TL-GAC0:TUnit.TestProject.AutoDataTests.Test1(System.String,System.Int32,System.Double,System.Boolean):0",
+ TestClass = typeof(global::TUnit.TestProject.AutoDataTests),
+ ReturnType = global::TUnit.Core.Helpers.MethodInfoRetriever.GetMethodInfo(typeof(global::TUnit.TestProject.AutoDataTests), "Test1", 0, [typeof(global::System.String), typeof(global::System.Int32), typeof(global::System.Double), typeof(global::System.Boolean)]).ReturnType,
+ ParameterTypeFullNames = [typeof(global::System.String), typeof(global::System.Int32), typeof(global::System.Double), typeof(global::System.Boolean)],
+ TestName = "Test1",
+ TestFilePath = @"",
+ TestLineNumber = 8,
+ Exception = exception,
+ });
+ }
+ return nodes;
+ }
+}
+
+]
\ No newline at end of file
diff --git a/TUnit.Core.SourceGenerator.Tests/DataSourceGeneratorTests.Typed.verified.txt b/TUnit.Core.SourceGenerator.Tests/DataSourceGeneratorTests.Typed.verified.txt
new file mode 100644
index 0000000000..db21df673d
--- /dev/null
+++ b/TUnit.Core.SourceGenerator.Tests/DataSourceGeneratorTests.Typed.verified.txt
@@ -0,0 +1,800 @@
+[
+//
+#pragma warning disable
+using global::System.Linq;
+using global::System.Reflection;
+using global::TUnit.Core;
+using global::TUnit.Core.Extensions;
+
+namespace TUnit.SourceGenerated;
+
+[global::System.Diagnostics.StackTraceHidden]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+file partial class DataSourceGeneratorTests : TUnit.Core.Interfaces.SourceGenerator.ITestSource
+{
+ [global::System.Runtime.CompilerServices.ModuleInitializer]
+ public static void Initialise()
+ {
+ SourceRegistrar.Register(new DataSourceGeneratorTests());
+ }
+ public global::System.Collections.Generic.IReadOnlyList CollectTests(string sessionId)
+ {
+ return
+ [
+ ..Tests0(sessionId),
+ ..Tests1(sessionId),
+ ];
+ }
+ private global::System.Collections.Generic.List Tests0(string sessionId)
+ {
+ global::System.Collections.Generic.List nodes = [];
+ var classDataIndex = 0;
+ var testMethodDataIndex = 0;
+ try
+ {
+ var testClassType = typeof(global::TUnit.TestProject.DataSourceGeneratorTests);
+ var methodInfo = global::TUnit.Core.Helpers.MethodInfoRetriever.GetMethodInfo(typeof(global::TUnit.TestProject.DataSourceGeneratorTests), "GeneratedData_Method", 0, [typeof(global::System.Int32)]);
+
+ var testBuilderContext = new global::TUnit.Core.TestBuilderContext();
+ var testBuilderContextAccessor = new global::TUnit.Core.TestBuilderContextAccessor(testBuilderContext);
+ var classArgDataGeneratorMetadata = new DataGeneratorMetadata
+{
+ Type = TUnit.Core.Enums.DataGeneratorType.Parameters,
+ TestClassType = testClassType,
+ ParameterInfos = typeof(global::TUnit.TestProject.DataSourceGeneratorTests).GetConstructors().First().GetParameters(),
+ PropertyInfo = null,
+ TestBuilderContext = testBuilderContextAccessor,
+ TestSessionId = sessionId,
+};
+ var classDataAttribute = new global::TUnit.TestProject.DataSourceGeneratorTests.AutoFixtureGeneratorAttribute()
+{
+
+};
+
+ var classArgGeneratedDataArray = classDataAttribute.GenerateDataSources(classArgDataGeneratorMetadata);
+
+ foreach (var classArgGeneratedDataAccessor in classArgGeneratedDataArray)
+ {
+ classDataIndex++;
+ var methodArgDataGeneratorMetadata = new DataGeneratorMetadata
+{
+ Type = TUnit.Core.Enums.DataGeneratorType.Parameters,
+ TestClassType = testClassType,
+ ParameterInfos = methodInfo.GetParameters(),
+ PropertyInfo = null,
+ TestBuilderContext = testBuilderContextAccessor,
+ TestSessionId = sessionId,
+};
+ var methodDataAttribute = new global::TUnit.TestProject.DataSourceGeneratorTests.AutoFixtureGeneratorAttribute()
+{
+
+};
+
+ var methodArgGeneratedDataArray = methodDataAttribute.GenerateDataSources(methodArgDataGeneratorMetadata);
+
+ foreach (var methodArgGeneratedDataAccessor in methodArgGeneratedDataArray)
+ {
+ testMethodDataIndex++;
+ var classArgGeneratedData = classArgGeneratedDataAccessor();
+ global::System.Int32 classArg = classArgGeneratedData.Item1;
+ global::System.String classArg1 = classArgGeneratedData.Item2;
+ global::System.Boolean classArg2 = classArgGeneratedData.Item3;
+
+
+ var methodArgGeneratedData = methodArgGeneratedDataAccessor();
+ var resettableClassFactoryDelegate = () => new ResettableLazy(() =>
+ new global::TUnit.TestProject.DataSourceGeneratorTests(classArg, classArg1, classArg2)
+ , sessionId, testBuilderContext);
+
+ var resettableClassFactory = resettableClassFactoryDelegate();
+
+ nodes.Add(new TestMetadata
+ {
+ TestId = $"global::TUnit.TestProject.DataSourceGeneratorTests.AutoFixtureGeneratorAttribute:{classDataIndex}:CL-GAC0:global::TUnit.TestProject.DataSourceGeneratorTests.AutoFixtureGeneratorAttribute:{testMethodDataIndex}:TL-GAC0:TUnit.TestProject.DataSourceGeneratorTests(System.Int32,System.String,System.Boolean).GeneratedData_Method(System.Int32):0",
+ TestClassArguments = [classArg, classArg1, classArg2],
+ TestMethodArguments = [methodArgGeneratedData],
+ TestClassProperties = [],
+ CurrentRepeatAttempt = 0,
+ RepeatLimit = 0,
+ MethodInfo = methodInfo,
+ ResettableClassFactory = resettableClassFactory,
+ TestMethodFactory = (classInstance, cancellationToken) => AsyncConvert.Convert(() => classInstance.GeneratedData_Method(methodArgGeneratedData)),
+ TestFilePath = @"",
+ TestLineNumber = 9,
+ TestAttributes = [ new global::TUnit.Core.TestAttribute()
+{
+
+}, new global::TUnit.TestProject.DataSourceGeneratorTests.AutoFixtureGeneratorAttribute()
+{
+
+} ],
+ ClassAttributes = [ new global::TUnit.TestProject.DataSourceGeneratorTests.AutoFixtureGeneratorAttribute()
+{
+
+}, new global::TUnit.TestProject.DataSourceGeneratorTests.AutoFixtureGeneratorAttribute()
+{
+
+} ],
+ AssemblyAttributes = [ ],
+ DataAttributes = [ classDataAttribute, methodDataAttribute ],
+ TestBuilderContext = testBuilderContext,
+ });
+ resettableClassFactory = resettableClassFactoryDelegate();
+ testBuilderContext = new();
+ testBuilderContextAccessor.Current = testBuilderContext;
+ }
+ }
+ }
+ catch (global::System.Exception exception)
+ {
+ nodes.Add(new FailedInitializationTest
+ {
+ TestId = $"global::TUnit.TestProject.DataSourceGeneratorTests.AutoFixtureGeneratorAttribute:{classDataIndex}:CL-GAC0:global::TUnit.TestProject.DataSourceGeneratorTests.AutoFixtureGeneratorAttribute:{testMethodDataIndex}:TL-GAC0:TUnit.TestProject.DataSourceGeneratorTests(System.Int32,System.String,System.Boolean).GeneratedData_Method(System.Int32):0",
+ TestClass = typeof(global::TUnit.TestProject.DataSourceGeneratorTests),
+ ReturnType = global::TUnit.Core.Helpers.MethodInfoRetriever.GetMethodInfo(typeof(global::TUnit.TestProject.DataSourceGeneratorTests), "GeneratedData_Method", 0, [typeof(global::System.Int32)]).ReturnType,
+ ParameterTypeFullNames = [typeof(global::System.Int32)],
+ TestName = "GeneratedData_Method",
+ TestFilePath = @"",
+ TestLineNumber = 9,
+ Exception = exception,
+ });
+ }
+ return nodes;
+ }
+ private global::System.Collections.Generic.List Tests1(string sessionId)
+ {
+ global::System.Collections.Generic.List nodes = [];
+ var classDataIndex = 0;
+ var testMethodDataIndex = 0;
+ try
+ {
+ var testClassType = typeof(global::TUnit.TestProject.DataSourceGeneratorTests);
+ var methodInfo = global::TUnit.Core.Helpers.MethodInfoRetriever.GetMethodInfo(typeof(global::TUnit.TestProject.DataSourceGeneratorTests), "GeneratedData_Method", 0, [typeof(global::System.Int32)]);
+
+ var testBuilderContext = new global::TUnit.Core.TestBuilderContext();
+ var testBuilderContextAccessor = new global::TUnit.Core.TestBuilderContextAccessor(testBuilderContext);
+ var classArgDataGeneratorMetadata = new DataGeneratorMetadata
+{
+ Type = TUnit.Core.Enums.DataGeneratorType.Parameters,
+ TestClassType = testClassType,
+ ParameterInfos = typeof(global::TUnit.TestProject.DataSourceGeneratorTests).GetConstructors().First().GetParameters(),
+ PropertyInfo = null,
+ TestBuilderContext = testBuilderContextAccessor,
+ TestSessionId = sessionId,
+};
+ var classDataAttribute = new global::TUnit.TestProject.DataSourceGeneratorTests.AutoFixtureGeneratorAttribute()
+{
+
+};
+
+ var classArgGeneratedDataArray = classDataAttribute.GenerateDataSources(classArgDataGeneratorMetadata);
+
+ foreach (var classArgGeneratedDataAccessor in classArgGeneratedDataArray)
+ {
+ classDataIndex++;
+ var methodArgDataGeneratorMetadata = new DataGeneratorMetadata
+{
+ Type = TUnit.Core.Enums.DataGeneratorType.Parameters,
+ TestClassType = testClassType,
+ ParameterInfos = methodInfo.GetParameters(),
+ PropertyInfo = null,
+ TestBuilderContext = testBuilderContextAccessor,
+ TestSessionId = sessionId,
+};
+ var methodDataAttribute = new global::TUnit.TestProject.DataSourceGeneratorTests.AutoFixtureGeneratorAttribute()
+{
+
+};
+
+ var methodArgGeneratedDataArray = methodDataAttribute.GenerateDataSources(methodArgDataGeneratorMetadata);
+
+ foreach (var methodArgGeneratedDataAccessor in methodArgGeneratedDataArray)
+ {
+ testMethodDataIndex++;
+ var classArgGeneratedData = classArgGeneratedDataAccessor();
+ global::System.Int32 classArg = classArgGeneratedData.Item1;
+ global::System.String classArg1 = classArgGeneratedData.Item2;
+ global::System.Boolean classArg2 = classArgGeneratedData.Item3;
+
+
+ var methodArgGeneratedData = methodArgGeneratedDataAccessor();
+ var resettableClassFactoryDelegate = () => new ResettableLazy(() =>
+ new global::TUnit.TestProject.DataSourceGeneratorTests(classArg, classArg1, classArg2)
+ , sessionId, testBuilderContext);
+
+ var resettableClassFactory = resettableClassFactoryDelegate();
+
+ nodes.Add(new TestMetadata
+ {
+ TestId = $"global::TUnit.TestProject.DataSourceGeneratorTests.AutoFixtureGeneratorAttribute:{classDataIndex}:CL-GAC0:global::TUnit.TestProject.DataSourceGeneratorTests.AutoFixtureGeneratorAttribute:{testMethodDataIndex}:TL-GAC0:TUnit.TestProject.DataSourceGeneratorTests(System.Int32,System.String,System.Boolean).GeneratedData_Method(System.Int32):0",
+ TestClassArguments = [classArg, classArg1, classArg2],
+ TestMethodArguments = [methodArgGeneratedData],
+ TestClassProperties = [],
+ CurrentRepeatAttempt = 0,
+ RepeatLimit = 0,
+ MethodInfo = methodInfo,
+ ResettableClassFactory = resettableClassFactory,
+ TestMethodFactory = (classInstance, cancellationToken) => AsyncConvert.Convert(() => classInstance.GeneratedData_Method(methodArgGeneratedData)),
+ TestFilePath = @"",
+ TestLineNumber = 9,
+ TestAttributes = [ new global::TUnit.Core.TestAttribute()
+{
+
+}, new global::TUnit.TestProject.DataSourceGeneratorTests.AutoFixtureGeneratorAttribute()
+{
+
+} ],
+ ClassAttributes = [ new global::TUnit.TestProject.DataSourceGeneratorTests.AutoFixtureGeneratorAttribute()
+{
+
+}, new global::TUnit.TestProject.DataSourceGeneratorTests.AutoFixtureGeneratorAttribute()
+{
+
+} ],
+ AssemblyAttributes = [ ],
+ DataAttributes = [ classDataAttribute, methodDataAttribute ],
+ TestBuilderContext = testBuilderContext,
+ });
+ resettableClassFactory = resettableClassFactoryDelegate();
+ testBuilderContext = new();
+ testBuilderContextAccessor.Current = testBuilderContext;
+ }
+ }
+ }
+ catch (global::System.Exception exception)
+ {
+ nodes.Add(new FailedInitializationTest
+ {
+ TestId = $"global::TUnit.TestProject.DataSourceGeneratorTests.AutoFixtureGeneratorAttribute:{classDataIndex}:CL-GAC0:global::TUnit.TestProject.DataSourceGeneratorTests.AutoFixtureGeneratorAttribute:{testMethodDataIndex}:TL-GAC0:TUnit.TestProject.DataSourceGeneratorTests(System.Int32,System.String,System.Boolean).GeneratedData_Method(System.Int32):0",
+ TestClass = typeof(global::TUnit.TestProject.DataSourceGeneratorTests),
+ ReturnType = global::TUnit.Core.Helpers.MethodInfoRetriever.GetMethodInfo(typeof(global::TUnit.TestProject.DataSourceGeneratorTests), "GeneratedData_Method", 0, [typeof(global::System.Int32)]).ReturnType,
+ ParameterTypeFullNames = [typeof(global::System.Int32)],
+ TestName = "GeneratedData_Method",
+ TestFilePath = @"",
+ TestLineNumber = 9,
+ Exception = exception,
+ });
+ }
+ return nodes;
+ }
+}
+
+
+//
+#pragma warning disable
+using global::System.Linq;
+using global::System.Reflection;
+using global::TUnit.Core;
+using global::TUnit.Core.Extensions;
+
+namespace TUnit.SourceGenerated;
+
+[global::System.Diagnostics.StackTraceHidden]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+file partial class DataSourceGeneratorTests : TUnit.Core.Interfaces.SourceGenerator.ITestSource
+{
+ [global::System.Runtime.CompilerServices.ModuleInitializer]
+ public static void Initialise()
+ {
+ SourceRegistrar.Register(new DataSourceGeneratorTests());
+ }
+ public global::System.Collections.Generic.IReadOnlyList CollectTests(string sessionId)
+ {
+ return
+ [
+ ..Tests0(sessionId),
+ ..Tests1(sessionId),
+ ];
+ }
+ private global::System.Collections.Generic.List Tests0(string sessionId)
+ {
+ global::System.Collections.Generic.List nodes = [];
+ var classDataIndex = 0;
+ var testMethodDataIndex = 0;
+ try
+ {
+ var testClassType = typeof(global::TUnit.TestProject.DataSourceGeneratorTests);
+ var methodInfo = global::TUnit.Core.Helpers.MethodInfoRetriever.GetMethodInfo(typeof(global::TUnit.TestProject.DataSourceGeneratorTests), "GeneratedData_Method2", 0, [typeof(global::System.Int32), typeof(global::System.String), typeof(global::System.Boolean)]);
+
+ var testBuilderContext = new global::TUnit.Core.TestBuilderContext();
+ var testBuilderContextAccessor = new global::TUnit.Core.TestBuilderContextAccessor(testBuilderContext);
+ var classArgDataGeneratorMetadata = new DataGeneratorMetadata
+{
+ Type = TUnit.Core.Enums.DataGeneratorType.Parameters,
+ TestClassType = testClassType,
+ ParameterInfos = typeof(global::TUnit.TestProject.DataSourceGeneratorTests).GetConstructors().First().GetParameters(),
+ PropertyInfo = null,
+ TestBuilderContext = testBuilderContextAccessor,
+ TestSessionId = sessionId,
+};
+ var classDataAttribute = new global::TUnit.TestProject.DataSourceGeneratorTests.AutoFixtureGeneratorAttribute()
+{
+
+};
+
+ var classArgGeneratedDataArray = classDataAttribute.GenerateDataSources(classArgDataGeneratorMetadata);
+
+ foreach (var classArgGeneratedDataAccessor in classArgGeneratedDataArray)
+ {
+ classDataIndex++;
+ var methodArgDataGeneratorMetadata = new DataGeneratorMetadata
+{
+ Type = TUnit.Core.Enums.DataGeneratorType.Parameters,
+ TestClassType = testClassType,
+ ParameterInfos = methodInfo.GetParameters(),
+ PropertyInfo = null,
+ TestBuilderContext = testBuilderContextAccessor,
+ TestSessionId = sessionId,
+};
+ var methodDataAttribute = new global::TUnit.TestProject.DataSourceGeneratorTests.AutoFixtureGeneratorAttribute()
+{
+
+};
+
+ var methodArgGeneratedDataArray = methodDataAttribute.GenerateDataSources(methodArgDataGeneratorMetadata);
+
+ foreach (var methodArgGeneratedDataAccessor in methodArgGeneratedDataArray)
+ {
+ testMethodDataIndex++;
+ var classArgGeneratedData = classArgGeneratedDataAccessor();
+ global::System.Int32 classArg = classArgGeneratedData.Item1;
+ global::System.String classArg1 = classArgGeneratedData.Item2;
+ global::System.Boolean classArg2 = classArgGeneratedData.Item3;
+
+
+ var methodArgGeneratedData = methodArgGeneratedDataAccessor();
+ global::System.Int32 methodArg = methodArgGeneratedData.Item1;
+ global::System.String methodArg1 = methodArgGeneratedData.Item2;
+ global::System.Boolean methodArg2 = methodArgGeneratedData.Item3;
+
+ var resettableClassFactoryDelegate = () => new ResettableLazy(() =>
+ new global::TUnit.TestProject.DataSourceGeneratorTests(classArg, classArg1, classArg2)
+ , sessionId, testBuilderContext);
+
+ var resettableClassFactory = resettableClassFactoryDelegate();
+
+ nodes.Add(new TestMetadata
+ {
+ TestId = $"global::TUnit.TestProject.DataSourceGeneratorTests.AutoFixtureGeneratorAttribute:{classDataIndex}:CL-GAC0:global::TUnit.TestProject.DataSourceGeneratorTests.AutoFixtureGeneratorAttribute:{testMethodDataIndex}:TL-GAC0:TUnit.TestProject.DataSourceGeneratorTests(System.Int32,System.String,System.Boolean).GeneratedData_Method2(System.Int32,System.String,System.Boolean):0",
+ TestClassArguments = [classArg, classArg1, classArg2],
+ TestMethodArguments = [methodArg, methodArg1, methodArg2],
+ TestClassProperties = [],
+ CurrentRepeatAttempt = 0,
+ RepeatLimit = 0,
+ MethodInfo = methodInfo,
+ ResettableClassFactory = resettableClassFactory,
+ TestMethodFactory = (classInstance, cancellationToken) => AsyncConvert.Convert(() => classInstance.GeneratedData_Method2(methodArg, methodArg1, methodArg2)),
+ TestFilePath = @"",
+ TestLineNumber = 17,
+ TestAttributes = [ new global::TUnit.Core.TestAttribute()
+{
+
+}, new global::TUnit.TestProject.DataSourceGeneratorTests.AutoFixtureGeneratorAttribute()
+{
+
+} ],
+ ClassAttributes = [ new global::TUnit.TestProject.DataSourceGeneratorTests.AutoFixtureGeneratorAttribute()
+{
+
+}, new global::TUnit.TestProject.DataSourceGeneratorTests.AutoFixtureGeneratorAttribute()
+{
+
+} ],
+ AssemblyAttributes = [ ],
+ DataAttributes = [ classDataAttribute, methodDataAttribute ],
+ TestBuilderContext = testBuilderContext,
+ });
+ resettableClassFactory = resettableClassFactoryDelegate();
+ testBuilderContext = new();
+ testBuilderContextAccessor.Current = testBuilderContext;
+ }
+ }
+ }
+ catch (global::System.Exception exception)
+ {
+ nodes.Add(new FailedInitializationTest
+ {
+ TestId = $"global::TUnit.TestProject.DataSourceGeneratorTests.AutoFixtureGeneratorAttribute:{classDataIndex}:CL-GAC0:global::TUnit.TestProject.DataSourceGeneratorTests.AutoFixtureGeneratorAttribute:{testMethodDataIndex}:TL-GAC0:TUnit.TestProject.DataSourceGeneratorTests(System.Int32,System.String,System.Boolean).GeneratedData_Method2(System.Int32,System.String,System.Boolean):0",
+ TestClass = typeof(global::TUnit.TestProject.DataSourceGeneratorTests),
+ ReturnType = global::TUnit.Core.Helpers.MethodInfoRetriever.GetMethodInfo(typeof(global::TUnit.TestProject.DataSourceGeneratorTests), "GeneratedData_Method2", 0, [typeof(global::System.Int32), typeof(global::System.String), typeof(global::System.Boolean)]).ReturnType,
+ ParameterTypeFullNames = [typeof(global::System.Int32), typeof(global::System.String), typeof(global::System.Boolean)],
+ TestName = "GeneratedData_Method2",
+ TestFilePath = @"",
+ TestLineNumber = 17,
+ Exception = exception,
+ });
+ }
+ return nodes;
+ }
+ private global::System.Collections.Generic.List Tests1(string sessionId)
+ {
+ global::System.Collections.Generic.List nodes = [];
+ var classDataIndex = 0;
+ var testMethodDataIndex = 0;
+ try
+ {
+ var testClassType = typeof(global::TUnit.TestProject.DataSourceGeneratorTests);
+ var methodInfo = global::TUnit.Core.Helpers.MethodInfoRetriever.GetMethodInfo(typeof(global::TUnit.TestProject.DataSourceGeneratorTests), "GeneratedData_Method2", 0, [typeof(global::System.Int32), typeof(global::System.String), typeof(global::System.Boolean)]);
+
+ var testBuilderContext = new global::TUnit.Core.TestBuilderContext();
+ var testBuilderContextAccessor = new global::TUnit.Core.TestBuilderContextAccessor(testBuilderContext);
+ var classArgDataGeneratorMetadata = new DataGeneratorMetadata
+{
+ Type = TUnit.Core.Enums.DataGeneratorType.Parameters,
+ TestClassType = testClassType,
+ ParameterInfos = typeof(global::TUnit.TestProject.DataSourceGeneratorTests).GetConstructors().First().GetParameters(),
+ PropertyInfo = null,
+ TestBuilderContext = testBuilderContextAccessor,
+ TestSessionId = sessionId,
+};
+ var classDataAttribute = new global::TUnit.TestProject.DataSourceGeneratorTests.AutoFixtureGeneratorAttribute()
+{
+
+};
+
+ var classArgGeneratedDataArray = classDataAttribute.GenerateDataSources(classArgDataGeneratorMetadata);
+
+ foreach (var classArgGeneratedDataAccessor in classArgGeneratedDataArray)
+ {
+ classDataIndex++;
+ var methodArgDataGeneratorMetadata = new DataGeneratorMetadata
+{
+ Type = TUnit.Core.Enums.DataGeneratorType.Parameters,
+ TestClassType = testClassType,
+ ParameterInfos = methodInfo.GetParameters(),
+ PropertyInfo = null,
+ TestBuilderContext = testBuilderContextAccessor,
+ TestSessionId = sessionId,
+};
+ var methodDataAttribute = new global::TUnit.TestProject.DataSourceGeneratorTests.AutoFixtureGeneratorAttribute()
+{
+
+};
+
+ var methodArgGeneratedDataArray = methodDataAttribute.GenerateDataSources(methodArgDataGeneratorMetadata);
+
+ foreach (var methodArgGeneratedDataAccessor in methodArgGeneratedDataArray)
+ {
+ testMethodDataIndex++;
+ var classArgGeneratedData = classArgGeneratedDataAccessor();
+ global::System.Int32 classArg = classArgGeneratedData.Item1;
+ global::System.String classArg1 = classArgGeneratedData.Item2;
+ global::System.Boolean classArg2 = classArgGeneratedData.Item3;
+
+
+ var methodArgGeneratedData = methodArgGeneratedDataAccessor();
+ global::System.Int32 methodArg = methodArgGeneratedData.Item1;
+ global::System.String methodArg1 = methodArgGeneratedData.Item2;
+ global::System.Boolean methodArg2 = methodArgGeneratedData.Item3;
+
+ var resettableClassFactoryDelegate = () => new ResettableLazy(() =>
+ new global::TUnit.TestProject.DataSourceGeneratorTests(classArg, classArg1, classArg2)
+ , sessionId, testBuilderContext);
+
+ var resettableClassFactory = resettableClassFactoryDelegate();
+
+ nodes.Add(new TestMetadata
+ {
+ TestId = $"global::TUnit.TestProject.DataSourceGeneratorTests.AutoFixtureGeneratorAttribute:{classDataIndex}:CL-GAC0:global::TUnit.TestProject.DataSourceGeneratorTests.AutoFixtureGeneratorAttribute:{testMethodDataIndex}:TL-GAC0:TUnit.TestProject.DataSourceGeneratorTests(System.Int32,System.String,System.Boolean).GeneratedData_Method2(System.Int32,System.String,System.Boolean):0",
+ TestClassArguments = [classArg, classArg1, classArg2],
+ TestMethodArguments = [methodArg, methodArg1, methodArg2],
+ TestClassProperties = [],
+ CurrentRepeatAttempt = 0,
+ RepeatLimit = 0,
+ MethodInfo = methodInfo,
+ ResettableClassFactory = resettableClassFactory,
+ TestMethodFactory = (classInstance, cancellationToken) => AsyncConvert.Convert(() => classInstance.GeneratedData_Method2(methodArg, methodArg1, methodArg2)),
+ TestFilePath = @"",
+ TestLineNumber = 17,
+ TestAttributes = [ new global::TUnit.Core.TestAttribute()
+{
+
+}, new global::TUnit.TestProject.DataSourceGeneratorTests.AutoFixtureGeneratorAttribute()
+{
+
+} ],
+ ClassAttributes = [ new global::TUnit.TestProject.DataSourceGeneratorTests.AutoFixtureGeneratorAttribute()
+{
+
+}, new global::TUnit.TestProject.DataSourceGeneratorTests.AutoFixtureGeneratorAttribute()
+{
+
+} ],
+ AssemblyAttributes = [ ],
+ DataAttributes = [ classDataAttribute, methodDataAttribute ],
+ TestBuilderContext = testBuilderContext,
+ });
+ resettableClassFactory = resettableClassFactoryDelegate();
+ testBuilderContext = new();
+ testBuilderContextAccessor.Current = testBuilderContext;
+ }
+ }
+ }
+ catch (global::System.Exception exception)
+ {
+ nodes.Add(new FailedInitializationTest
+ {
+ TestId = $"global::TUnit.TestProject.DataSourceGeneratorTests.AutoFixtureGeneratorAttribute:{classDataIndex}:CL-GAC0:global::TUnit.TestProject.DataSourceGeneratorTests.AutoFixtureGeneratorAttribute:{testMethodDataIndex}:TL-GAC0:TUnit.TestProject.DataSourceGeneratorTests(System.Int32,System.String,System.Boolean).GeneratedData_Method2(System.Int32,System.String,System.Boolean):0",
+ TestClass = typeof(global::TUnit.TestProject.DataSourceGeneratorTests),
+ ReturnType = global::TUnit.Core.Helpers.MethodInfoRetriever.GetMethodInfo(typeof(global::TUnit.TestProject.DataSourceGeneratorTests), "GeneratedData_Method2", 0, [typeof(global::System.Int32), typeof(global::System.String), typeof(global::System.Boolean)]).ReturnType,
+ ParameterTypeFullNames = [typeof(global::System.Int32), typeof(global::System.String), typeof(global::System.Boolean)],
+ TestName = "GeneratedData_Method2",
+ TestFilePath = @"",
+ TestLineNumber = 17,
+ Exception = exception,
+ });
+ }
+ return nodes;
+ }
+}
+
+
+//
+#pragma warning disable
+using global::System.Linq;
+using global::System.Reflection;
+using global::TUnit.Core;
+using global::TUnit.Core.Extensions;
+
+namespace TUnit.SourceGenerated;
+
+[global::System.Diagnostics.StackTraceHidden]
+[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+file partial class DataSourceGeneratorTests : TUnit.Core.Interfaces.SourceGenerator.ITestSource
+{
+ [global::System.Runtime.CompilerServices.ModuleInitializer]
+ public static void Initialise()
+ {
+ SourceRegistrar.Register(new DataSourceGeneratorTests());
+ }
+ public global::System.Collections.Generic.IReadOnlyList CollectTests(string sessionId)
+ {
+ return
+ [
+ ..Tests0(sessionId),
+ ..Tests1(sessionId),
+ ];
+ }
+ private global::System.Collections.Generic.List Tests0(string sessionId)
+ {
+ global::System.Collections.Generic.List nodes = [];
+ var classDataIndex = 0;
+ var testMethodDataIndex = 0;
+ try
+ {
+ var testClassType = typeof(global::TUnit.TestProject.DataSourceGeneratorTests);
+ var methodInfo = global::TUnit.Core.Helpers.MethodInfoRetriever.GetMethodInfo(typeof(global::TUnit.TestProject.DataSourceGeneratorTests), "GeneratedData_Method3", 0, [typeof(global::System.Int32), typeof(global::System.String), typeof(global::System.Boolean)]);
+
+ var testBuilderContext = new global::TUnit.Core.TestBuilderContext();
+ var testBuilderContextAccessor = new global::TUnit.Core.TestBuilderContextAccessor(testBuilderContext);
+ var classArgDataGeneratorMetadata = new DataGeneratorMetadata
+{
+ Type = TUnit.Core.Enums.DataGeneratorType.Parameters,
+ TestClassType = testClassType,
+ ParameterInfos = typeof(global::TUnit.TestProject.DataSourceGeneratorTests).GetConstructors().First().GetParameters(),
+ PropertyInfo = null,
+ TestBuilderContext = testBuilderContextAccessor,
+ TestSessionId = sessionId,
+};
+ var classDataAttribute = new global::TUnit.TestProject.DataSourceGeneratorTests.AutoFixtureGeneratorAttribute()
+{
+
+};
+
+ var classArgGeneratedDataArray = classDataAttribute.GenerateDataSources(classArgDataGeneratorMetadata);
+
+ foreach (var classArgGeneratedDataAccessor in classArgGeneratedDataArray)
+ {
+ classDataIndex++;
+ var methodArgDataGeneratorMetadata = new DataGeneratorMetadata
+{
+ Type = TUnit.Core.Enums.DataGeneratorType.Parameters,
+ TestClassType = testClassType,
+ ParameterInfos = methodInfo.GetParameters(),
+ PropertyInfo = null,
+ TestBuilderContext = testBuilderContextAccessor,
+ TestSessionId = sessionId,
+};
+ var methodDataAttribute = new global::TUnit.TestProject.DataSourceGeneratorTests.AutoFixtureGeneratorAttribute()
+{
+
+};
+
+ var methodArgGeneratedDataArray = methodDataAttribute.GenerateDataSources(methodArgDataGeneratorMetadata);
+
+ foreach (var methodArgGeneratedDataAccessor in methodArgGeneratedDataArray)
+ {
+ testMethodDataIndex++;
+ var classArgGeneratedData = classArgGeneratedDataAccessor();
+ global::System.Int32 classArg = classArgGeneratedData.Item1;
+ global::System.String classArg1 = classArgGeneratedData.Item2;
+ global::System.Boolean classArg2 = classArgGeneratedData.Item3;
+
+
+ var methodArgGeneratedData = methodArgGeneratedDataAccessor();
+ global::System.Int32 methodArg = methodArgGeneratedData.Item1;
+ global::System.String methodArg1 = methodArgGeneratedData.Item2;
+ global::System.Boolean methodArg2 = methodArgGeneratedData.Item3;
+
+ var resettableClassFactoryDelegate = () => new ResettableLazy(() =>
+ new global::TUnit.TestProject.DataSourceGeneratorTests(classArg, classArg1, classArg2)
+ , sessionId, testBuilderContext);
+
+ var resettableClassFactory = resettableClassFactoryDelegate();
+
+ nodes.Add(new TestMetadata
+ {
+ TestId = $"global::TUnit.TestProject.DataSourceGeneratorTests.AutoFixtureGeneratorAttribute:{classDataIndex}:CL-GAC0:global::TUnit.TestProject.DataSourceGeneratorTests.AutoFixtureGeneratorAttribute:{testMethodDataIndex}:TL-GAC0:TUnit.TestProject.DataSourceGeneratorTests(System.Int32,System.String,System.Boolean).GeneratedData_Method3(System.Int32,System.String,System.Boolean):0",
+ TestClassArguments = [classArg, classArg1, classArg2],
+ TestMethodArguments = [methodArg, methodArg1, methodArg2],
+ TestClassProperties = [],
+ CurrentRepeatAttempt = 0,
+ RepeatLimit = 0,
+ MethodInfo = methodInfo,
+ ResettableClassFactory = resettableClassFactory,
+ TestMethodFactory = (classInstance, cancellationToken) => AsyncConvert.Convert(() => classInstance.GeneratedData_Method3(methodArg, methodArg1, methodArg2)),
+ TestFilePath = @"",
+ TestLineNumber = 25,
+ TestAttributes = [ new global::TUnit.Core.TestAttribute()
+{
+
+}, new global::TUnit.TestProject.DataSourceGeneratorTests.AutoFixtureGeneratorAttribute()
+{
+
+} ],
+ ClassAttributes = [ new global::TUnit.TestProject.DataSourceGeneratorTests.AutoFixtureGeneratorAttribute()
+{
+
+}, new global::TUnit.TestProject.DataSourceGeneratorTests.AutoFixtureGeneratorAttribute()
+{
+
+} ],
+ AssemblyAttributes = [ ],
+ DataAttributes = [ classDataAttribute, methodDataAttribute ],
+ TestBuilderContext = testBuilderContext,
+ });
+ resettableClassFactory = resettableClassFactoryDelegate();
+ testBuilderContext = new();
+ testBuilderContextAccessor.Current = testBuilderContext;
+ }
+ }
+ }
+ catch (global::System.Exception exception)
+ {
+ nodes.Add(new FailedInitializationTest
+ {
+ TestId = $"global::TUnit.TestProject.DataSourceGeneratorTests.AutoFixtureGeneratorAttribute:{classDataIndex}:CL-GAC0:global::TUnit.TestProject.DataSourceGeneratorTests.AutoFixtureGeneratorAttribute:{testMethodDataIndex}:TL-GAC0:TUnit.TestProject.DataSourceGeneratorTests(System.Int32,System.String,System.Boolean).GeneratedData_Method3(System.Int32,System.String,System.Boolean):0",
+ TestClass = typeof(global::TUnit.TestProject.DataSourceGeneratorTests),
+ ReturnType = global::TUnit.Core.Helpers.MethodInfoRetriever.GetMethodInfo(typeof(global::TUnit.TestProject.DataSourceGeneratorTests), "GeneratedData_Method3", 0, [typeof(global::System.Int32), typeof(global::System.String), typeof(global::System.Boolean)]).ReturnType,
+ ParameterTypeFullNames = [typeof(global::System.Int32), typeof(global::System.String), typeof(global::System.Boolean)],
+ TestName = "GeneratedData_Method3",
+ TestFilePath = @"",
+ TestLineNumber = 25,
+ Exception = exception,
+ });
+ }
+ return nodes;
+ }
+ private global::System.Collections.Generic.List Tests1(string sessionId)
+ {
+ global::System.Collections.Generic.List nodes = [];
+ var classDataIndex = 0;
+ var testMethodDataIndex = 0;
+ try
+ {
+ var testClassType = typeof(global::TUnit.TestProject.DataSourceGeneratorTests);
+ var methodInfo = global::TUnit.Core.Helpers.MethodInfoRetriever.GetMethodInfo(typeof(global::TUnit.TestProject.DataSourceGeneratorTests), "GeneratedData_Method3", 0, [typeof(global::System.Int32), typeof(global::System.String), typeof(global::System.Boolean)]);
+
+ var testBuilderContext = new global::TUnit.Core.TestBuilderContext();
+ var testBuilderContextAccessor = new global::TUnit.Core.TestBuilderContextAccessor(testBuilderContext);
+ var classArgDataGeneratorMetadata = new DataGeneratorMetadata
+{
+ Type = TUnit.Core.Enums.DataGeneratorType.Parameters,
+ TestClassType = testClassType,
+ ParameterInfos = typeof(global::TUnit.TestProject.DataSourceGeneratorTests).GetConstructors().First().GetParameters(),
+ PropertyInfo = null,
+ TestBuilderContext = testBuilderContextAccessor,
+ TestSessionId = sessionId,
+};
+ var classDataAttribute = new global::TUnit.TestProject.DataSourceGeneratorTests.AutoFixtureGeneratorAttribute()
+{
+
+};
+
+ var classArgGeneratedDataArray = classDataAttribute.GenerateDataSources(classArgDataGeneratorMetadata);
+
+ foreach (var classArgGeneratedDataAccessor in classArgGeneratedDataArray)
+ {
+ classDataIndex++;
+ var methodArgDataGeneratorMetadata = new DataGeneratorMetadata
+{
+ Type = TUnit.Core.Enums.DataGeneratorType.Parameters,
+ TestClassType = testClassType,
+ ParameterInfos = methodInfo.GetParameters(),
+ PropertyInfo = null,
+ TestBuilderContext = testBuilderContextAccessor,
+ TestSessionId = sessionId,
+};
+ var methodDataAttribute = new global::TUnit.TestProject.DataSourceGeneratorTests.AutoFixtureGeneratorAttribute()
+{
+
+};
+
+ var methodArgGeneratedDataArray = methodDataAttribute.GenerateDataSources(methodArgDataGeneratorMetadata);
+
+ foreach (var methodArgGeneratedDataAccessor in methodArgGeneratedDataArray)
+ {
+ testMethodDataIndex++;
+ var classArgGeneratedData = classArgGeneratedDataAccessor();
+ global::System.Int32 classArg = classArgGeneratedData.Item1;
+ global::System.String classArg1 = classArgGeneratedData.Item2;
+ global::System.Boolean classArg2 = classArgGeneratedData.Item3;
+
+
+ var methodArgGeneratedData = methodArgGeneratedDataAccessor();
+ global::System.Int32 methodArg = methodArgGeneratedData.Item1;
+ global::System.String methodArg1 = methodArgGeneratedData.Item2;
+ global::System.Boolean methodArg2 = methodArgGeneratedData.Item3;
+
+ var resettableClassFactoryDelegate = () => new ResettableLazy(() =>
+ new global::TUnit.TestProject.DataSourceGeneratorTests(classArg, classArg1, classArg2)
+ , sessionId, testBuilderContext);
+
+ var resettableClassFactory = resettableClassFactoryDelegate();
+
+ nodes.Add(new TestMetadata
+ {
+ TestId = $"global::TUnit.TestProject.DataSourceGeneratorTests.AutoFixtureGeneratorAttribute:{classDataIndex}:CL-GAC0:global::TUnit.TestProject.DataSourceGeneratorTests.AutoFixtureGeneratorAttribute:{testMethodDataIndex}:TL-GAC0:TUnit.TestProject.DataSourceGeneratorTests(System.Int32,System.String,System.Boolean).GeneratedData_Method3(System.Int32,System.String,System.Boolean):0",
+ TestClassArguments = [classArg, classArg1, classArg2],
+ TestMethodArguments = [methodArg, methodArg1, methodArg2],
+ TestClassProperties = [],
+ CurrentRepeatAttempt = 0,
+ RepeatLimit = 0,
+ MethodInfo = methodInfo,
+ ResettableClassFactory = resettableClassFactory,
+ TestMethodFactory = (classInstance, cancellationToken) => AsyncConvert.Convert(() => classInstance.GeneratedData_Method3(methodArg, methodArg1, methodArg2)),
+ TestFilePath = @"",
+ TestLineNumber = 25,
+ TestAttributes = [ new global::TUnit.Core.TestAttribute()
+{
+
+}, new global::TUnit.TestProject.DataSourceGeneratorTests.AutoFixtureGeneratorAttribute()
+{
+
+} ],
+ ClassAttributes = [ new global::TUnit.TestProject.DataSourceGeneratorTests.AutoFixtureGeneratorAttribute()
+{
+
+}, new global::TUnit.TestProject.DataSourceGeneratorTests.AutoFixtureGeneratorAttribute()
+{
+
+} ],
+ AssemblyAttributes = [ ],
+ DataAttributes = [ classDataAttribute, methodDataAttribute ],
+ TestBuilderContext = testBuilderContext,
+ });
+ resettableClassFactory = resettableClassFactoryDelegate();
+ testBuilderContext = new();
+ testBuilderContextAccessor.Current = testBuilderContext;
+ }
+ }
+ }
+ catch (global::System.Exception exception)
+ {
+ nodes.Add(new FailedInitializationTest
+ {
+ TestId = $"global::TUnit.TestProject.DataSourceGeneratorTests.AutoFixtureGeneratorAttribute:{classDataIndex}:CL-GAC0:global::TUnit.TestProject.DataSourceGeneratorTests.AutoFixtureGeneratorAttribute:{testMethodDataIndex}:TL-GAC0:TUnit.TestProject.DataSourceGeneratorTests(System.Int32,System.String,System.Boolean).GeneratedData_Method3(System.Int32,System.String,System.Boolean):0",
+ TestClass = typeof(global::TUnit.TestProject.DataSourceGeneratorTests),
+ ReturnType = global::TUnit.Core.Helpers.MethodInfoRetriever.GetMethodInfo(typeof(global::TUnit.TestProject.DataSourceGeneratorTests), "GeneratedData_Method3", 0, [typeof(global::System.Int32), typeof(global::System.String), typeof(global::System.Boolean)]).ReturnType,
+ ParameterTypeFullNames = [typeof(global::System.Int32), typeof(global::System.String), typeof(global::System.Boolean)],
+ TestName = "GeneratedData_Method3",
+ TestFilePath = @"",
+ TestLineNumber = 25,
+ Exception = exception,
+ });
+ }
+ return nodes;
+ }
+}
+
+]
\ No newline at end of file
diff --git a/TUnit.Core.SourceGenerator.Tests/DataSourceGeneratorTests.cs b/TUnit.Core.SourceGenerator.Tests/DataSourceGeneratorTests.cs
index b9d4f77534..2a5f6b63b8 100644
--- a/TUnit.Core.SourceGenerator.Tests/DataSourceGeneratorTests.cs
+++ b/TUnit.Core.SourceGenerator.Tests/DataSourceGeneratorTests.cs
@@ -1,15 +1,34 @@
using TUnit.Core.SourceGenerator.CodeGenerators;
+using TUnit.Core.SourceGenerator.Tests.Options;
namespace TUnit.Core.SourceGenerator.Tests;
internal class DataSourceGeneratorTests : TestsBase
{
[Test]
- public Task Test() => RunTest(Path.Combine(Git.RootDirectory.FullName,
+ public Task Typed() => RunTest(Path.Combine(Git.RootDirectory.FullName,
"TUnit.TestProject",
"DataSourceGeneratorTests.cs"),
async generatedFiles =>
{
await Assert.That(generatedFiles.Length).IsEqualTo(3);
});
+
+ [Test]
+ public Task NonTyped() => RunTest(Path.Combine(Git.RootDirectory.FullName,
+ "TUnit.TestProject",
+ "AutoDataTests.cs"),
+ new RunTestOptions()
+ {
+ AdditionalFiles = [
+ Path.Combine(Git.RootDirectory.FullName,
+ "TUnit.TestProject",
+ "Attributes",
+ "AutoDataAttribute.cs")
+ ]
+ },
+ async generatedFiles =>
+ {
+ await Assert.That(generatedFiles.Length).IsEqualTo(1);
+ });
}
\ No newline at end of file
diff --git a/TUnit.Core.SourceGenerator/CodeGenerators/Helpers/ArgumentsRetriever.cs b/TUnit.Core.SourceGenerator/CodeGenerators/Helpers/ArgumentsRetriever.cs
index 13adca5bf4..30efffc35a 100644
--- a/TUnit.Core.SourceGenerator/CodeGenerators/Helpers/ArgumentsRetriever.cs
+++ b/TUnit.Core.SourceGenerator/CodeGenerators/Helpers/ArgumentsRetriever.cs
@@ -63,7 +63,14 @@ public static IEnumerable GetArguments(GeneratorAttributeSyntaxCo
if (dataAttribute.AttributeClass?.IsOrInherits(WellKnownFullyQualifiedClassNames
.DataSourceGeneratorAttribute.WithGlobalPrefix) == true)
{
- yield return DataSourceGeneratorRetriever.Parse(context, namedTypeSymbol, dataAttribute, argumentsType,
+ yield return DataSourceGeneratorRetriever.Parse(context, namedTypeSymbol, parameterOrPropertyTypes, dataAttribute, argumentsType,
+ index, propertyName);
+ }
+
+ if (dataAttribute.AttributeClass?.IsOrInherits(WellKnownFullyQualifiedClassNames
+ .NonTypedDataSourceGeneratorAttribute.WithGlobalPrefix) == true)
+ {
+ yield return DataSourceGeneratorRetriever.Parse(context, namedTypeSymbol, parameterOrPropertyTypes, dataAttribute, argumentsType,
index, propertyName);
}
}
diff --git a/TUnit.Core.SourceGenerator/CodeGenerators/Helpers/DataSourceGeneratorRetriever.cs b/TUnit.Core.SourceGenerator/CodeGenerators/Helpers/DataSourceGeneratorRetriever.cs
index 1f5b9a69d6..4441d6e9c4 100644
--- a/TUnit.Core.SourceGenerator/CodeGenerators/Helpers/DataSourceGeneratorRetriever.cs
+++ b/TUnit.Core.SourceGenerator/CodeGenerators/Helpers/DataSourceGeneratorRetriever.cs
@@ -1,4 +1,5 @@
-using Microsoft.CodeAnalysis;
+using System.Collections.Immutable;
+using Microsoft.CodeAnalysis;
using TUnit.Core.SourceGenerator.Enums;
using TUnit.Core.SourceGenerator.Extensions;
using TUnit.Core.SourceGenerator.Models.Arguments;
@@ -7,7 +8,9 @@ namespace TUnit.Core.SourceGenerator.CodeGenerators.Helpers;
public static class DataSourceGeneratorRetriever
{
- public static ArgumentsContainer Parse(GeneratorAttributeSyntaxContext context, INamedTypeSymbol namedTypeSymbol,
+ public static ArgumentsContainer Parse(GeneratorAttributeSyntaxContext context,
+ INamedTypeSymbol namedTypeSymbol,
+ ImmutableArray parameterOrPropertyTypes,
AttributeData attributeData,
ArgumentsType argumentsType,
int index,
@@ -18,11 +21,12 @@ public static ArgumentsContainer Parse(GeneratorAttributeSyntaxContext context,
context,
attributeData: attributeData,
ArgumentsType: argumentsType,
+ parameterOrPropertyTypes: parameterOrPropertyTypes,
TestClassTypeName: namedTypeSymbol.ToDisplayString(DisplayFormats.FullyQualifiedGenericWithGlobalPrefix),
AttributeDataGeneratorType: attributeData.AttributeClass!.ToDisplayString(DisplayFormats
.FullyQualifiedGenericWithGlobalPrefix),
- GenericArguments: GetDataGeneratorAttributeBaseClass(attributeData.AttributeClass).TypeArguments
- .Select(x => x.ToDisplayString(DisplayFormats.FullyQualifiedGenericWithGlobalPrefix)).ToArray(),
+ GenericArguments: GetDataGeneratorAttributeBaseClass(attributeData.AttributeClass)?.TypeArguments
+ .Select(x => x.ToDisplayString(DisplayFormats.FullyQualifiedGenericWithGlobalPrefix)).ToArray() ?? [],
AttributeIndex: index
)
{
@@ -36,11 +40,16 @@ .Value.Value as bool? ??
};
}
- private static INamedTypeSymbol GetDataGeneratorAttributeBaseClass(ITypeSymbol attributeClass)
+ private static INamedTypeSymbol? GetDataGeneratorAttributeBaseClass(ITypeSymbol attributeClass)
{
var selfAndBaseTypes = attributeClass.GetSelfAndBaseTypes();
- return (INamedTypeSymbol) selfAndBaseTypes.First(HasGeneratorInterface);
+ if (selfAndBaseTypes.FirstOrDefault(HasGeneratorInterface) is INamedTypeSymbol generatorInterface)
+ {
+ return generatorInterface;
+ }
+
+ return null;
}
private static bool HasGeneratorInterface(ITypeSymbol t)
diff --git a/TUnit.Core.SourceGenerator/Models/Arguments/GeneratedArgumentsContainer.cs b/TUnit.Core.SourceGenerator/Models/Arguments/GeneratedArgumentsContainer.cs
index 4ced356cb1..c9dce30578 100644
--- a/TUnit.Core.SourceGenerator/Models/Arguments/GeneratedArgumentsContainer.cs
+++ b/TUnit.Core.SourceGenerator/Models/Arguments/GeneratedArgumentsContainer.cs
@@ -1,18 +1,22 @@
+using System.Collections.Immutable;
using Microsoft.CodeAnalysis;
using TUnit.Core.SourceGenerator.CodeGenerators.Writers;
using TUnit.Core.SourceGenerator.Enums;
+using TUnit.Core.SourceGenerator.Extensions;
namespace TUnit.Core.SourceGenerator.Models.Arguments;
public record GeneratedArgumentsContainer : ArgumentsContainer
{
public GeneratedArgumentsContainer(GeneratorAttributeSyntaxContext context, AttributeData attributeData,
- ArgumentsType ArgumentsType, int AttributeIndex, string TestClassTypeName, string[] GenericArguments,
+ ArgumentsType ArgumentsType, ImmutableArray parameterOrPropertyTypes, int AttributeIndex,
+ string TestClassTypeName, string[] GenericArguments,
string AttributeDataGeneratorType) : base(ArgumentsType)
{
this.AttributeIndex = AttributeIndex;
Context = context;
AttributeData = attributeData;
+ ParameterOrPropertyTypes = parameterOrPropertyTypes;
this.TestClassTypeName = TestClassTypeName;
this.GenericArguments = GenericArguments;
this.AttributeDataGeneratorType = AttributeDataGeneratorType;
@@ -137,8 +141,17 @@ public override void WriteVariableAssignments(SourceCodeWriter sourceCodeWriter,
var generatedDataVariableName = $"{VariableNamePrefix}GeneratedData";
sourceCodeWriter.WriteLine($"var {generatedDataVariableName} = {generatedDataVariableName}Accessor();");
-
- if (GenericArguments.Length > 1)
+
+ if (GenericArguments.Length == 0)
+ {
+ for (var i = 0; i < ParameterOrPropertyTypes.Length; i++)
+ {
+ var refIndex = i;
+
+ sourceCodeWriter.WriteLine(GenerateVariable(ParameterOrPropertyTypes[i].GloballyQualified(), $"({ParameterOrPropertyTypes[i].GloballyQualified()}){generatedDataVariableName}[{i}]", ref refIndex).ToString());
+ }
+ }
+ else if (GenericArguments.Length > 1)
{
for (var i = 0; i < GenericArguments.Length; i++)
{
@@ -176,6 +189,7 @@ public override string[] GetArgumentTypes()
public GeneratorAttributeSyntaxContext Context { get; }
public AttributeData AttributeData { get; }
+ public ImmutableArray ParameterOrPropertyTypes { get; }
public string TestClassTypeName { get; }
public string[] GenericArguments { get; }
diff --git a/TUnit.Core.SourceGenerator/WellKnownFullyQualifiedClassNames.cs b/TUnit.Core.SourceGenerator/WellKnownFullyQualifiedClassNames.cs
index 0e0891111b..b7679d51bd 100644
--- a/TUnit.Core.SourceGenerator/WellKnownFullyQualifiedClassNames.cs
+++ b/TUnit.Core.SourceGenerator/WellKnownFullyQualifiedClassNames.cs
@@ -16,6 +16,7 @@ public static class WellKnownFullyQualifiedClassNames
public static readonly FullyQualifiedTypeName MatrixAttribute = "TUnit.Core.MatrixAttribute";
public static readonly FullyQualifiedTypeName ClassConstructorAttribute = "TUnit.Core.ClassConstructorAttribute";
public static readonly FullyQualifiedTypeName DataSourceGeneratorAttribute = "TUnit.Core.DataSourceGeneratorAttribute";
+ public static readonly FullyQualifiedTypeName NonTypedDataSourceGeneratorAttribute = "TUnit.Core.NonTypedDataSourceGeneratorAttribute";
// Metadata
diff --git a/TUnit.Core/Attributes/TestData/INonTypedDataSourceGeneratorAttribute.cs b/TUnit.Core/Attributes/TestData/INonTypedDataSourceGeneratorAttribute.cs
new file mode 100644
index 0000000000..af3fc08670
--- /dev/null
+++ b/TUnit.Core/Attributes/TestData/INonTypedDataSourceGeneratorAttribute.cs
@@ -0,0 +1,3 @@
+namespace TUnit.Core;
+
+internal interface INonTypedDataSource : IDataAttribute;
\ No newline at end of file
diff --git a/TUnit.Core/Attributes/TestData/NonTypedDataSourceGeneratorAttribute.cs b/TUnit.Core/Attributes/TestData/NonTypedDataSourceGeneratorAttribute.cs
new file mode 100644
index 0000000000..954bb86f0a
--- /dev/null
+++ b/TUnit.Core/Attributes/TestData/NonTypedDataSourceGeneratorAttribute.cs
@@ -0,0 +1,7 @@
+namespace TUnit.Core;
+
+[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class | AttributeTargets.Property, AllowMultiple = true)]
+public abstract class NonTypedDataSourceGeneratorAttribute : TestDataAttribute, INonTypedDataSource
+{
+ public abstract IEnumerable> GenerateDataSources(DataGeneratorMetadata dataGeneratorMetadata);
+}
\ No newline at end of file
diff --git a/TUnit.TestProject/Attributes/AutoDataAttribute.cs b/TUnit.TestProject/Attributes/AutoDataAttribute.cs
new file mode 100644
index 0000000000..5d672c45ba
--- /dev/null
+++ b/TUnit.TestProject/Attributes/AutoDataAttribute.cs
@@ -0,0 +1,26 @@
+using AutoFixture.Kernel;
+
+namespace TUnit.TestProject.Attributes;
+
+public class AutoDataAttribute : NonTypedDataSourceGeneratorAttribute
+{
+ private static AutoFixture.Fixture _fixture = new();
+
+ public override IEnumerable> GenerateDataSources(DataGeneratorMetadata dataGeneratorMetadata)
+ {
+ yield return () => GenerateRow(dataGeneratorMetadata);
+ }
+
+ private object?[] GenerateRow(DataGeneratorMetadata dataGeneratorMetadata)
+ {
+ return GenerateRowEnumerable(dataGeneratorMetadata).ToArray();
+ }
+
+ private static IEnumerable