Skip to content

Commit 076bf39

Browse files
authored
Fix source generation for tests in already compiled libraries where syntax isn't available (thomhurst#1894)
* Non-syntax fallback * Set DataAttributes properly * Don't repeat writing IDataSourceGeneratorAttribute * Fix [Arguments] attribute in a separate assembly * Update snaps
1 parent b6cc380 commit 076bf39

29 files changed

+1692
-1255
lines changed
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
using TUnit.Core.SourceGenerator.CodeGenerators;
2+
3+
namespace TUnit.Core.SourceGenerator.Tests.Bugs._1889;
4+
5+
internal class Tests1889 : TestsBase<TestsGenerator>
6+
{
7+
[Test]
8+
public Task Test() => RunTest(Path.Combine(Git.RootDirectory.FullName,
9+
"TUnit.TestProject",
10+
"Bugs",
11+
"1889",
12+
"DerivedTest.cs"),
13+
async generatedFiles =>
14+
{
15+
await Assert.That(generatedFiles.Length).IsEqualTo(1);
16+
});
17+
}

TUnit.Core.SourceGenerator.Tests/ClassDataSourceDrivenTests.Test.verified.txt

Lines changed: 21 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,7 @@ file partial class ClassDataSourceDrivenTests : global::TUnit.Core.Interfaces.So
3636
ReturnType = typeof(void),
3737
Attributes =
3838
[
39-
new global::TUnit.Core.TestAttribute(),
40-
new global::TUnit.Core.ClassDataSourceAttribute<global::TUnit.TestProject.Dummy.SomeAsyncDisposableClass>()
39+
new global::TUnit.Core.TestAttribute()
4140
],
4241
Parameters =
4342
[
@@ -82,6 +81,8 @@ file partial class ClassDataSourceDrivenTests : global::TUnit.Core.Interfaces.So
8281
};
8382
var methodDataAttribute = new global::TUnit.Core.ClassDataSourceAttribute<global::TUnit.TestProject.Dummy.SomeAsyncDisposableClass>();
8483

84+
testBuilderContext.DataAttributes.Add(methodDataAttribute);
85+
8586
var methodArgGeneratedDataArray = methodDataAttribute.GenerateDataSources(methodArgDataGeneratorMetadata);
8687

8788
foreach (var methodArgGeneratedDataAccessor in methodArgGeneratedDataArray)
@@ -168,8 +169,7 @@ file partial class ClassDataSourceDrivenTests : global::TUnit.Core.Interfaces.So
168169
ReturnType = typeof(void),
169170
Attributes =
170171
[
171-
new global::TUnit.Core.TestAttribute(),
172-
new global::TUnit.Core.ClassDataSourceAttribute<global::TUnit.TestProject.Dummy.SomeAsyncDisposableClass>()
172+
new global::TUnit.Core.TestAttribute()
173173
],
174174
Parameters =
175175
[
@@ -214,6 +214,8 @@ file partial class ClassDataSourceDrivenTests : global::TUnit.Core.Interfaces.So
214214
};
215215
var methodDataAttribute = new global::TUnit.Core.ClassDataSourceAttribute<global::TUnit.TestProject.Dummy.SomeAsyncDisposableClass>();
216216

217+
testBuilderContext.DataAttributes.Add(methodDataAttribute);
218+
217219
var methodArgGeneratedDataArray = methodDataAttribute.GenerateDataSources(methodArgDataGeneratorMetadata);
218220

219221
foreach (var methodArgGeneratedDataAccessor in methodArgGeneratedDataArray)
@@ -300,8 +302,7 @@ file partial class ClassDataSourceDrivenTests : global::TUnit.Core.Interfaces.So
300302
ReturnType = typeof(global::System.Threading.Tasks.Task),
301303
Attributes =
302304
[
303-
new global::TUnit.Core.TestAttribute(),
304-
new global::TUnit.Core.ClassDataSourceAttribute<global::TUnit.TestProject.InitializableClass>()
305+
new global::TUnit.Core.TestAttribute()
305306
],
306307
Parameters =
307308
[
@@ -346,6 +347,8 @@ file partial class ClassDataSourceDrivenTests : global::TUnit.Core.Interfaces.So
346347
};
347348
var methodDataAttribute = new global::TUnit.Core.ClassDataSourceAttribute<global::TUnit.TestProject.InitializableClass>();
348349

350+
testBuilderContext.DataAttributes.Add(methodDataAttribute);
351+
349352
var methodArgGeneratedDataArray = methodDataAttribute.GenerateDataSources(methodArgDataGeneratorMetadata);
350353

351354
foreach (var methodArgGeneratedDataAccessor in methodArgGeneratedDataArray)
@@ -432,8 +435,7 @@ file partial class ClassDataSourceDrivenTests : global::TUnit.Core.Interfaces.So
432435
ReturnType = typeof(global::System.Threading.Tasks.Task),
433436
Attributes =
434437
[
435-
new global::TUnit.Core.TestAttribute(),
436-
new global::TUnit.Core.ClassDataSourceAttribute<global::TUnit.TestProject.InitializableClass, global::TUnit.TestProject.InitializableClass>()
438+
new global::TUnit.Core.TestAttribute()
437439
],
438440
Parameters =
439441
[
@@ -488,6 +490,8 @@ file partial class ClassDataSourceDrivenTests : global::TUnit.Core.Interfaces.So
488490
};
489491
var methodDataAttribute = new global::TUnit.Core.ClassDataSourceAttribute<global::TUnit.TestProject.InitializableClass, global::TUnit.TestProject.InitializableClass>();
490492

493+
testBuilderContext.DataAttributes.Add(methodDataAttribute);
494+
491495
var methodArgGeneratedDataArray = methodDataAttribute.GenerateDataSources(methodArgDataGeneratorMetadata);
492496

493497
foreach (var methodArgGeneratedDataAccessor in methodArgGeneratedDataArray)
@@ -577,8 +581,7 @@ file partial class ClassDataSourceDrivenTests : global::TUnit.Core.Interfaces.So
577581
ReturnType = typeof(global::System.Threading.Tasks.Task),
578582
Attributes =
579583
[
580-
new global::TUnit.Core.TestAttribute(),
581-
new global::TUnit.Core.ClassDataSourceAttribute<global::TUnit.TestProject.InitializableClass, global::TUnit.TestProject.InitializableClass, global::TUnit.TestProject.InitializableClass>()
584+
new global::TUnit.Core.TestAttribute()
582585
],
583586
Parameters =
584587
[
@@ -643,6 +646,8 @@ file partial class ClassDataSourceDrivenTests : global::TUnit.Core.Interfaces.So
643646
};
644647
var methodDataAttribute = new global::TUnit.Core.ClassDataSourceAttribute<global::TUnit.TestProject.InitializableClass, global::TUnit.TestProject.InitializableClass, global::TUnit.TestProject.InitializableClass>();
645648

649+
testBuilderContext.DataAttributes.Add(methodDataAttribute);
650+
646651
var methodArgGeneratedDataArray = methodDataAttribute.GenerateDataSources(methodArgDataGeneratorMetadata);
647652

648653
foreach (var methodArgGeneratedDataAccessor in methodArgGeneratedDataArray)
@@ -733,8 +738,7 @@ file partial class ClassDataSourceDrivenTests : global::TUnit.Core.Interfaces.So
733738
ReturnType = typeof(global::System.Threading.Tasks.Task),
734739
Attributes =
735740
[
736-
new global::TUnit.Core.TestAttribute(),
737-
new global::TUnit.Core.ClassDataSourceAttribute<global::TUnit.TestProject.InitializableClass, global::TUnit.TestProject.InitializableClass, global::TUnit.TestProject.InitializableClass, global::TUnit.TestProject.InitializableClass>()
741+
new global::TUnit.Core.TestAttribute()
738742
],
739743
Parameters =
740744
[
@@ -809,6 +813,8 @@ file partial class ClassDataSourceDrivenTests : global::TUnit.Core.Interfaces.So
809813
};
810814
var methodDataAttribute = new global::TUnit.Core.ClassDataSourceAttribute<global::TUnit.TestProject.InitializableClass, global::TUnit.TestProject.InitializableClass, global::TUnit.TestProject.InitializableClass, global::TUnit.TestProject.InitializableClass>();
811815

816+
testBuilderContext.DataAttributes.Add(methodDataAttribute);
817+
812818
var methodArgGeneratedDataArray = methodDataAttribute.GenerateDataSources(methodArgDataGeneratorMetadata);
813819

814820
foreach (var methodArgGeneratedDataAccessor in methodArgGeneratedDataArray)
@@ -900,8 +906,7 @@ file partial class ClassDataSourceDrivenTests : global::TUnit.Core.Interfaces.So
900906
ReturnType = typeof(global::System.Threading.Tasks.Task),
901907
Attributes =
902908
[
903-
new global::TUnit.Core.TestAttribute(),
904-
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>()
909+
new global::TUnit.Core.TestAttribute()
905910
],
906911
Parameters =
907912
[
@@ -986,6 +991,8 @@ file partial class ClassDataSourceDrivenTests : global::TUnit.Core.Interfaces.So
986991
};
987992
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>();
988993

994+
testBuilderContext.DataAttributes.Add(methodDataAttribute);
995+
989996
var methodArgGeneratedDataArray = methodDataAttribute.GenerateDataSources(methodArgDataGeneratorMetadata);
990997

991998
foreach (var methodArgGeneratedDataAccessor in methodArgGeneratedDataArray)

TUnit.Core.SourceGenerator.Tests/ClassDataSourceDrivenTests2.Test.verified.txt

Lines changed: 12 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -53,11 +53,7 @@ file partial class ClassDataSourceDrivenTests2 : global::TUnit.Core.Interfaces.S
5353
}),
5454
Name = "ClassDataSourceDrivenTests2",
5555
Namespace = "TUnit.TestProject",
56-
Attributes =
57-
[
58-
new global::TUnit.Core.ClassDataSourceAttribute<global::TUnit.TestProject.ClassDataSourceDrivenTests2.Derived1>(),
59-
new global::TUnit.Core.ClassDataSourceAttribute<global::TUnit.TestProject.ClassDataSourceDrivenTests2.Derived2>()
60-
],
56+
Attributes = [],
6157
Parameters =
6258
[
6359
new global::TUnit.Core.SourceGeneratedParameterInformation<global::TUnit.TestProject.ClassDataSourceDrivenTests2.Base>
@@ -89,6 +85,8 @@ file partial class ClassDataSourceDrivenTests2 : global::TUnit.Core.Interfaces.S
8985
};
9086
var classDataAttribute = new global::TUnit.Core.ClassDataSourceAttribute<global::TUnit.TestProject.ClassDataSourceDrivenTests2.Derived1>();
9187

88+
testBuilderContext.DataAttributes.Add(classDataAttribute);
89+
9290
var classArgGeneratedDataArray = classDataAttribute.GenerateDataSources(classArgDataGeneratorMetadata);
9391

9492
foreach (var classArgGeneratedDataAccessor in classArgGeneratedDataArray)
@@ -163,11 +161,7 @@ file partial class ClassDataSourceDrivenTests2 : global::TUnit.Core.Interfaces.S
163161
}),
164162
Name = "ClassDataSourceDrivenTests2",
165163
Namespace = "TUnit.TestProject",
166-
Attributes =
167-
[
168-
new global::TUnit.Core.ClassDataSourceAttribute<global::TUnit.TestProject.ClassDataSourceDrivenTests2.Derived1>(),
169-
new global::TUnit.Core.ClassDataSourceAttribute<global::TUnit.TestProject.ClassDataSourceDrivenTests2.Derived2>()
170-
],
164+
Attributes = [],
171165
Parameters =
172166
[
173167
new global::TUnit.Core.SourceGeneratedParameterInformation<global::TUnit.TestProject.ClassDataSourceDrivenTests2.Base>
@@ -199,6 +193,8 @@ file partial class ClassDataSourceDrivenTests2 : global::TUnit.Core.Interfaces.S
199193
};
200194
var classDataAttribute = new global::TUnit.Core.ClassDataSourceAttribute<global::TUnit.TestProject.ClassDataSourceDrivenTests2.Derived2>();
201195

196+
testBuilderContext.DataAttributes.Add(classDataAttribute);
197+
202198
var classArgGeneratedDataArray = classDataAttribute.GenerateDataSources(classArgDataGeneratorMetadata);
203199

204200
foreach (var classArgGeneratedDataAccessor in classArgGeneratedDataArray)
@@ -302,11 +298,7 @@ file partial class ClassDataSourceDrivenTests2 : global::TUnit.Core.Interfaces.S
302298
}),
303299
Name = "ClassDataSourceDrivenTests2",
304300
Namespace = "TUnit.TestProject",
305-
Attributes =
306-
[
307-
new global::TUnit.Core.ClassDataSourceAttribute<global::TUnit.TestProject.ClassDataSourceDrivenTests2.Derived1>(),
308-
new global::TUnit.Core.ClassDataSourceAttribute<global::TUnit.TestProject.ClassDataSourceDrivenTests2.Derived2>()
309-
],
301+
Attributes = [],
310302
Parameters =
311303
[
312304
new global::TUnit.Core.SourceGeneratedParameterInformation<global::TUnit.TestProject.ClassDataSourceDrivenTests2.Base>
@@ -338,6 +330,8 @@ file partial class ClassDataSourceDrivenTests2 : global::TUnit.Core.Interfaces.S
338330
};
339331
var classDataAttribute = new global::TUnit.Core.ClassDataSourceAttribute<global::TUnit.TestProject.ClassDataSourceDrivenTests2.Derived1>();
340332

333+
testBuilderContext.DataAttributes.Add(classDataAttribute);
334+
341335
var classArgGeneratedDataArray = classDataAttribute.GenerateDataSources(classArgDataGeneratorMetadata);
342336

343337
foreach (var classArgGeneratedDataAccessor in classArgGeneratedDataArray)
@@ -412,11 +406,7 @@ file partial class ClassDataSourceDrivenTests2 : global::TUnit.Core.Interfaces.S
412406
}),
413407
Name = "ClassDataSourceDrivenTests2",
414408
Namespace = "TUnit.TestProject",
415-
Attributes =
416-
[
417-
new global::TUnit.Core.ClassDataSourceAttribute<global::TUnit.TestProject.ClassDataSourceDrivenTests2.Derived1>(),
418-
new global::TUnit.Core.ClassDataSourceAttribute<global::TUnit.TestProject.ClassDataSourceDrivenTests2.Derived2>()
419-
],
409+
Attributes = [],
420410
Parameters =
421411
[
422412
new global::TUnit.Core.SourceGeneratedParameterInformation<global::TUnit.TestProject.ClassDataSourceDrivenTests2.Base>
@@ -448,6 +438,8 @@ file partial class ClassDataSourceDrivenTests2 : global::TUnit.Core.Interfaces.S
448438
};
449439
var classDataAttribute = new global::TUnit.Core.ClassDataSourceAttribute<global::TUnit.TestProject.ClassDataSourceDrivenTests2.Derived2>();
450440

441+
testBuilderContext.DataAttributes.Add(classDataAttribute);
442+
451443
var classArgGeneratedDataArray = classDataAttribute.GenerateDataSources(classArgDataGeneratorMetadata);
452444

453445
foreach (var classArgGeneratedDataAccessor in classArgGeneratedDataArray)

0 commit comments

Comments
 (0)