Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions TUnit.Mocks.SourceGenerator/Builders/MockBridgeBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,7 @@ public static string Build(MockTypeModel model)
private static void BuildBridgeInterface(CodeWriter writer, MockTypeModel model, string safeName)
{
writer.AppendLine("[global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)]");
var visibility = model.IsPublic ? "public" : "internal";
using (writer.Block($"{visibility} interface {safeName}Mockable : {model.FullyQualifiedName}"))
using (writer.Block($"{model.Visibility} interface {safeName}Mockable : {model.FullyQualifiedName}"))
{
bool first = true;

Expand Down
6 changes: 2 additions & 4 deletions TUnit.Mocks.SourceGenerator/Builders/MockEventsBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,9 @@ public static string Build(MockTypeModel model)

using (writer.Block("namespace TUnit.Mocks.Generated"))
{
var visibility = model.IsPublic ? "public" : "internal";

// Lightweight struct holding engine reference — no allocation
writer.AppendLine("[global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)]");
using (writer.Block($"{visibility} readonly struct {safeName}_MockEvents"))
using (writer.Block($"{model.Visibility} readonly struct {safeName}_MockEvents"))
{
writer.AppendLine($"internal readonly global::TUnit.Mocks.MockEngine<{mockableType}> Engine;");
writer.AppendLine();
Expand All @@ -29,7 +27,7 @@ public static string Build(MockTypeModel model)

writer.AppendLine();

using (writer.Block($"{visibility} static class {safeName}_MockEventsExtensions"))
using (writer.Block($"{model.Visibility} static class {safeName}_MockEventsExtensions"))
{
// Extension property on Mock<T> — non-nullable, only present when type has events
using (writer.Block($"extension(global::TUnit.Mocks.Mock<{mockableType}> mock)"))
Expand Down
12 changes: 5 additions & 7 deletions TUnit.Mocks.SourceGenerator/Builders/MockMembersBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,7 @@ public static string Build(MockTypeModel model)
using (writer.Block("namespace TUnit.Mocks.Generated"))
{
// Extension methods class
var visibility = model.IsPublic ? "public" : "internal";
using (writer.Block($"{visibility} static class {safeName}_MockMemberExtensions"))
using (writer.Block($"{model.Visibility} static class {safeName}_MockMemberExtensions"))
{
bool firstMember = true;

Expand Down Expand Up @@ -84,7 +83,7 @@ public static string Build(MockTypeModel model)
{
if (!ShouldGenerateTypedWrapper(method, hasEvents)) continue;
writer.AppendLine();
GenerateUnifiedSealedClass(writer, method, safeName, instanceEventArray, visibility);
GenerateUnifiedSealedClass(writer, method, safeName, instanceEventArray, model.Visibility);
}
}

Expand Down Expand Up @@ -148,7 +147,7 @@ private static void GenerateUnifiedSealedClass(CodeWriter writer, MockMemberMode
// Ref struct returns use the void wrapper (can't use ref structs as generic type args)
if (method.IsVoid || method.IsRefStructReturn)
{
GenerateVoidUnifiedClass(writer, wrapperName, matchableParams, events, method.Parameters, hasRefStructParams, allNonOutParams, method.SpanReturnElementType, method.ReturnType, visibility,
GenerateVoidUnifiedClass(writer, wrapperName, visibility, matchableParams, events, method.Parameters, hasRefStructParams, allNonOutParams, method.SpanReturnElementType, method.ReturnType,
isAsync: method.IsAsync, isValueTask: method.IsValueTask);
}
else if (method.IsReturnTypeStaticAbstractInterface)
Expand Down Expand Up @@ -276,11 +275,10 @@ private static void GenerateReturnUnifiedClass(CodeWriter writer, string wrapper
}
}

private static void GenerateVoidUnifiedClass(CodeWriter writer, string wrapperName,
private static void GenerateVoidUnifiedClass(CodeWriter writer, string wrapperName, string visibility,
List<MockParameterModel> nonOutParams, EquatableArray<MockEventModel> events,
EquatableArray<MockParameterModel> allParameters, bool hasRefStructParams, List<MockParameterModel> allNonOutParams,
string? spanReturnElementType, string? spanReturnType,
string visibility,
string? spanReturnElementType = null, string? spanReturnType = null,
bool isAsync = false, bool isValueTask = false)
{
var builderType = "global::TUnit.Mocks.Setup.VoidMethodSetupBuilder";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,12 +23,11 @@ public static string Build(MockTypeModel model)

using (writer.Block("namespace TUnit.Mocks"))
{
var visibility = model.IsPublic ? "public" : "internal";
using (writer.Block($"{visibility} static class {extensionClassName}_MockStaticExtension"))
using (writer.Block($"{model.Visibility} static class {extensionClassName}_MockStaticExtension"))
{
using (writer.Block($"extension({model.FullyQualifiedName})"))
{
using (writer.Block($"{visibility} static global::{mockNamespace}.{shortName}Mock Mock(global::TUnit.Mocks.MockBehavior behavior = global::TUnit.Mocks.MockBehavior.Loose)"))
using (writer.Block($"{model.Visibility} static global::{mockNamespace}.{shortName}Mock Mock(global::TUnit.Mocks.MockBehavior behavior = global::TUnit.Mocks.MockBehavior.Loose)"))
{
writer.AppendLine($"return (global::{mockNamespace}.{shortName}Mock)global::TUnit.Mocks.Mock.Of<{mockableType}>(behavior);");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,7 @@ public static string Build(MockTypeModel model)

using (writer.Block($"namespace {mockNamespace}"))
{
var visibility = model.IsPublic ? "public" : "internal";
using (writer.Block($"{visibility} sealed class {safeName}Mock : global::TUnit.Mocks.Mock<{mockableType}>, {model.FullyQualifiedName}"))
using (writer.Block($"{model.Visibility} sealed class {safeName}Mock : global::TUnit.Mocks.Mock<{mockableType}>, {model.FullyQualifiedName}"))
{
writer.AppendLine("[global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)]");
writer.AppendLine($"internal {safeName}Mock({mockableType} mockObject, global::TUnit.Mocks.MockEngine<{mockableType}> engine)");
Expand Down
3 changes: 3 additions & 0 deletions TUnit.Mocks.SourceGenerator/Models/MockTypeModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,9 @@ internal sealed record MockTypeModel : IEquatable<MockTypeModel>
/// </summary>
public bool IsPublic { get; init; } = true;

/// <summary>The C# visibility keyword to emit on generated wrapper/extension types.</summary>
public string Visibility => IsPublic ? "public" : "internal";

public bool Equals(MockTypeModel? other)
{
if (other is null) return false;
Expand Down
Loading