Skip to content

Commit

Permalink
Fix source generation for tests in already compiled libraries where s…
Browse files Browse the repository at this point in the history
…yntax isn't available (#1894)

* Non-syntax fallback

* Set DataAttributes properly

* Don't repeat writing IDataSourceGeneratorAttribute

* Fix [Arguments] attribute in a separate assembly

* Update snaps
  • Loading branch information
thomhurst authored Feb 19, 2025
1 parent b6cc380 commit 076bf39
Show file tree
Hide file tree
Showing 29 changed files with 1,692 additions and 1,255 deletions.
17 changes: 17 additions & 0 deletions TUnit.Core.SourceGenerator.Tests/Bugs/1889/Tests1889.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
using TUnit.Core.SourceGenerator.CodeGenerators;

namespace TUnit.Core.SourceGenerator.Tests.Bugs._1889;

internal class Tests1889 : TestsBase<TestsGenerator>
{
[Test]
public Task Test() => RunTest(Path.Combine(Git.RootDirectory.FullName,
"TUnit.TestProject",
"Bugs",
"1889",
"DerivedTest.cs"),
async generatedFiles =>
{
await Assert.That(generatedFiles.Length).IsEqualTo(1);
});
}
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,7 @@ file partial class ClassDataSourceDrivenTests : global::TUnit.Core.Interfaces.So
ReturnType = typeof(void),
Attributes =
[
new global::TUnit.Core.TestAttribute(),
new global::TUnit.Core.ClassDataSourceAttribute<global::TUnit.TestProject.Dummy.SomeAsyncDisposableClass>()
new global::TUnit.Core.TestAttribute()
],
Parameters =
[
Expand Down Expand Up @@ -82,6 +81,8 @@ file partial class ClassDataSourceDrivenTests : global::TUnit.Core.Interfaces.So
};
var methodDataAttribute = new global::TUnit.Core.ClassDataSourceAttribute<global::TUnit.TestProject.Dummy.SomeAsyncDisposableClass>();

testBuilderContext.DataAttributes.Add(methodDataAttribute);

var methodArgGeneratedDataArray = methodDataAttribute.GenerateDataSources(methodArgDataGeneratorMetadata);

foreach (var methodArgGeneratedDataAccessor in methodArgGeneratedDataArray)
Expand Down Expand Up @@ -168,8 +169,7 @@ file partial class ClassDataSourceDrivenTests : global::TUnit.Core.Interfaces.So
ReturnType = typeof(void),
Attributes =
[
new global::TUnit.Core.TestAttribute(),
new global::TUnit.Core.ClassDataSourceAttribute<global::TUnit.TestProject.Dummy.SomeAsyncDisposableClass>()
new global::TUnit.Core.TestAttribute()
],
Parameters =
[
Expand Down Expand Up @@ -214,6 +214,8 @@ file partial class ClassDataSourceDrivenTests : global::TUnit.Core.Interfaces.So
};
var methodDataAttribute = new global::TUnit.Core.ClassDataSourceAttribute<global::TUnit.TestProject.Dummy.SomeAsyncDisposableClass>();

testBuilderContext.DataAttributes.Add(methodDataAttribute);

var methodArgGeneratedDataArray = methodDataAttribute.GenerateDataSources(methodArgDataGeneratorMetadata);

foreach (var methodArgGeneratedDataAccessor in methodArgGeneratedDataArray)
Expand Down Expand Up @@ -300,8 +302,7 @@ file partial class ClassDataSourceDrivenTests : global::TUnit.Core.Interfaces.So
ReturnType = typeof(global::System.Threading.Tasks.Task),
Attributes =
[
new global::TUnit.Core.TestAttribute(),
new global::TUnit.Core.ClassDataSourceAttribute<global::TUnit.TestProject.InitializableClass>()
new global::TUnit.Core.TestAttribute()
],
Parameters =
[
Expand Down Expand Up @@ -346,6 +347,8 @@ file partial class ClassDataSourceDrivenTests : global::TUnit.Core.Interfaces.So
};
var methodDataAttribute = new global::TUnit.Core.ClassDataSourceAttribute<global::TUnit.TestProject.InitializableClass>();

testBuilderContext.DataAttributes.Add(methodDataAttribute);

var methodArgGeneratedDataArray = methodDataAttribute.GenerateDataSources(methodArgDataGeneratorMetadata);

foreach (var methodArgGeneratedDataAccessor in methodArgGeneratedDataArray)
Expand Down Expand Up @@ -432,8 +435,7 @@ file partial class ClassDataSourceDrivenTests : global::TUnit.Core.Interfaces.So
ReturnType = typeof(global::System.Threading.Tasks.Task),
Attributes =
[
new global::TUnit.Core.TestAttribute(),
new global::TUnit.Core.ClassDataSourceAttribute<global::TUnit.TestProject.InitializableClass, global::TUnit.TestProject.InitializableClass>()
new global::TUnit.Core.TestAttribute()
],
Parameters =
[
Expand Down Expand Up @@ -488,6 +490,8 @@ file partial class ClassDataSourceDrivenTests : global::TUnit.Core.Interfaces.So
};
var methodDataAttribute = new global::TUnit.Core.ClassDataSourceAttribute<global::TUnit.TestProject.InitializableClass, global::TUnit.TestProject.InitializableClass>();

testBuilderContext.DataAttributes.Add(methodDataAttribute);

var methodArgGeneratedDataArray = methodDataAttribute.GenerateDataSources(methodArgDataGeneratorMetadata);

foreach (var methodArgGeneratedDataAccessor in methodArgGeneratedDataArray)
Expand Down Expand Up @@ -577,8 +581,7 @@ file partial class ClassDataSourceDrivenTests : global::TUnit.Core.Interfaces.So
ReturnType = typeof(global::System.Threading.Tasks.Task),
Attributes =
[
new global::TUnit.Core.TestAttribute(),
new global::TUnit.Core.ClassDataSourceAttribute<global::TUnit.TestProject.InitializableClass, global::TUnit.TestProject.InitializableClass, global::TUnit.TestProject.InitializableClass>()
new global::TUnit.Core.TestAttribute()
],
Parameters =
[
Expand Down Expand Up @@ -643,6 +646,8 @@ file partial class ClassDataSourceDrivenTests : global::TUnit.Core.Interfaces.So
};
var methodDataAttribute = new global::TUnit.Core.ClassDataSourceAttribute<global::TUnit.TestProject.InitializableClass, global::TUnit.TestProject.InitializableClass, global::TUnit.TestProject.InitializableClass>();

testBuilderContext.DataAttributes.Add(methodDataAttribute);

var methodArgGeneratedDataArray = methodDataAttribute.GenerateDataSources(methodArgDataGeneratorMetadata);

foreach (var methodArgGeneratedDataAccessor in methodArgGeneratedDataArray)
Expand Down Expand Up @@ -733,8 +738,7 @@ file partial class ClassDataSourceDrivenTests : global::TUnit.Core.Interfaces.So
ReturnType = typeof(global::System.Threading.Tasks.Task),
Attributes =
[
new global::TUnit.Core.TestAttribute(),
new global::TUnit.Core.ClassDataSourceAttribute<global::TUnit.TestProject.InitializableClass, global::TUnit.TestProject.InitializableClass, global::TUnit.TestProject.InitializableClass, global::TUnit.TestProject.InitializableClass>()
new global::TUnit.Core.TestAttribute()
],
Parameters =
[
Expand Down Expand Up @@ -809,6 +813,8 @@ file partial class ClassDataSourceDrivenTests : global::TUnit.Core.Interfaces.So
};
var methodDataAttribute = new global::TUnit.Core.ClassDataSourceAttribute<global::TUnit.TestProject.InitializableClass, global::TUnit.TestProject.InitializableClass, global::TUnit.TestProject.InitializableClass, global::TUnit.TestProject.InitializableClass>();

testBuilderContext.DataAttributes.Add(methodDataAttribute);

var methodArgGeneratedDataArray = methodDataAttribute.GenerateDataSources(methodArgDataGeneratorMetadata);

foreach (var methodArgGeneratedDataAccessor in methodArgGeneratedDataArray)
Expand Down Expand Up @@ -900,8 +906,7 @@ file partial class ClassDataSourceDrivenTests : global::TUnit.Core.Interfaces.So
ReturnType = typeof(global::System.Threading.Tasks.Task),
Attributes =
[
new global::TUnit.Core.TestAttribute(),
new global::TUnit.Core.ClassDataSourceAttribute<global::TUnit.TestProject.InitializableClass, global::TUnit.TestProject.InitializableClass, global::TUnit.TestProject.InitializableClass, global::TUnit.TestProject.InitializableClass, global::TUnit.TestProject.InitializableClass>()
new global::TUnit.Core.TestAttribute()
],
Parameters =
[
Expand Down Expand Up @@ -986,6 +991,8 @@ file partial class ClassDataSourceDrivenTests : global::TUnit.Core.Interfaces.So
};
var methodDataAttribute = new global::TUnit.Core.ClassDataSourceAttribute<global::TUnit.TestProject.InitializableClass, global::TUnit.TestProject.InitializableClass, global::TUnit.TestProject.InitializableClass, global::TUnit.TestProject.InitializableClass, global::TUnit.TestProject.InitializableClass>();

testBuilderContext.DataAttributes.Add(methodDataAttribute);

var methodArgGeneratedDataArray = methodDataAttribute.GenerateDataSources(methodArgDataGeneratorMetadata);

foreach (var methodArgGeneratedDataAccessor in methodArgGeneratedDataArray)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,11 +53,7 @@ file partial class ClassDataSourceDrivenTests2 : global::TUnit.Core.Interfaces.S
}),
Name = "ClassDataSourceDrivenTests2",
Namespace = "TUnit.TestProject",
Attributes =
[
new global::TUnit.Core.ClassDataSourceAttribute<global::TUnit.TestProject.ClassDataSourceDrivenTests2.Derived1>(),
new global::TUnit.Core.ClassDataSourceAttribute<global::TUnit.TestProject.ClassDataSourceDrivenTests2.Derived2>()
],
Attributes = [],
Parameters =
[
new global::TUnit.Core.SourceGeneratedParameterInformation<global::TUnit.TestProject.ClassDataSourceDrivenTests2.Base>
Expand Down Expand Up @@ -89,6 +85,8 @@ file partial class ClassDataSourceDrivenTests2 : global::TUnit.Core.Interfaces.S
};
var classDataAttribute = new global::TUnit.Core.ClassDataSourceAttribute<global::TUnit.TestProject.ClassDataSourceDrivenTests2.Derived1>();

testBuilderContext.DataAttributes.Add(classDataAttribute);

var classArgGeneratedDataArray = classDataAttribute.GenerateDataSources(classArgDataGeneratorMetadata);

foreach (var classArgGeneratedDataAccessor in classArgGeneratedDataArray)
Expand Down Expand Up @@ -163,11 +161,7 @@ file partial class ClassDataSourceDrivenTests2 : global::TUnit.Core.Interfaces.S
}),
Name = "ClassDataSourceDrivenTests2",
Namespace = "TUnit.TestProject",
Attributes =
[
new global::TUnit.Core.ClassDataSourceAttribute<global::TUnit.TestProject.ClassDataSourceDrivenTests2.Derived1>(),
new global::TUnit.Core.ClassDataSourceAttribute<global::TUnit.TestProject.ClassDataSourceDrivenTests2.Derived2>()
],
Attributes = [],
Parameters =
[
new global::TUnit.Core.SourceGeneratedParameterInformation<global::TUnit.TestProject.ClassDataSourceDrivenTests2.Base>
Expand Down Expand Up @@ -199,6 +193,8 @@ file partial class ClassDataSourceDrivenTests2 : global::TUnit.Core.Interfaces.S
};
var classDataAttribute = new global::TUnit.Core.ClassDataSourceAttribute<global::TUnit.TestProject.ClassDataSourceDrivenTests2.Derived2>();

testBuilderContext.DataAttributes.Add(classDataAttribute);

var classArgGeneratedDataArray = classDataAttribute.GenerateDataSources(classArgDataGeneratorMetadata);

foreach (var classArgGeneratedDataAccessor in classArgGeneratedDataArray)
Expand Down Expand Up @@ -302,11 +298,7 @@ file partial class ClassDataSourceDrivenTests2 : global::TUnit.Core.Interfaces.S
}),
Name = "ClassDataSourceDrivenTests2",
Namespace = "TUnit.TestProject",
Attributes =
[
new global::TUnit.Core.ClassDataSourceAttribute<global::TUnit.TestProject.ClassDataSourceDrivenTests2.Derived1>(),
new global::TUnit.Core.ClassDataSourceAttribute<global::TUnit.TestProject.ClassDataSourceDrivenTests2.Derived2>()
],
Attributes = [],
Parameters =
[
new global::TUnit.Core.SourceGeneratedParameterInformation<global::TUnit.TestProject.ClassDataSourceDrivenTests2.Base>
Expand Down Expand Up @@ -338,6 +330,8 @@ file partial class ClassDataSourceDrivenTests2 : global::TUnit.Core.Interfaces.S
};
var classDataAttribute = new global::TUnit.Core.ClassDataSourceAttribute<global::TUnit.TestProject.ClassDataSourceDrivenTests2.Derived1>();

testBuilderContext.DataAttributes.Add(classDataAttribute);

var classArgGeneratedDataArray = classDataAttribute.GenerateDataSources(classArgDataGeneratorMetadata);

foreach (var classArgGeneratedDataAccessor in classArgGeneratedDataArray)
Expand Down Expand Up @@ -412,11 +406,7 @@ file partial class ClassDataSourceDrivenTests2 : global::TUnit.Core.Interfaces.S
}),
Name = "ClassDataSourceDrivenTests2",
Namespace = "TUnit.TestProject",
Attributes =
[
new global::TUnit.Core.ClassDataSourceAttribute<global::TUnit.TestProject.ClassDataSourceDrivenTests2.Derived1>(),
new global::TUnit.Core.ClassDataSourceAttribute<global::TUnit.TestProject.ClassDataSourceDrivenTests2.Derived2>()
],
Attributes = [],
Parameters =
[
new global::TUnit.Core.SourceGeneratedParameterInformation<global::TUnit.TestProject.ClassDataSourceDrivenTests2.Base>
Expand Down Expand Up @@ -448,6 +438,8 @@ file partial class ClassDataSourceDrivenTests2 : global::TUnit.Core.Interfaces.S
};
var classDataAttribute = new global::TUnit.Core.ClassDataSourceAttribute<global::TUnit.TestProject.ClassDataSourceDrivenTests2.Derived2>();

testBuilderContext.DataAttributes.Add(classDataAttribute);

var classArgGeneratedDataArray = classDataAttribute.GenerateDataSources(classArgDataGeneratorMetadata);

foreach (var classArgGeneratedDataAccessor in classArgGeneratedDataArray)
Expand Down
Loading

0 comments on commit 076bf39

Please sign in to comment.