Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

XML Docs #38

Merged
merged 2 commits into from
Feb 2, 2024
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
1 change: 1 addition & 0 deletions SolutionProperties/ReleaseNotes.txt
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
- New API to control implementation wrapper generation.
- Keep members original XML documentation.
18 changes: 18 additions & 0 deletions Tests/Tum4ik.StinimGen.Specs/Features/Event/Event.feature
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,12 @@ Scenario: Event field with EventHandler type
Then there must not be generation exception
And generated interface member must be
"""
/// <inheritdoc cref = "Events.EventHolder.EventMember"/>
event global::System.EventHandler EventMember;
"""
And generated implementation member must be
"""
/// <inheritdoc/>
public event global::System.EventHandler EventMember { add => Events.EventHolder.EventMember += value; remove => Events.EventHolder.EventMember -= value; }
"""

Expand All @@ -49,10 +51,12 @@ Scenario: Event field with custom type
Then there must not be generation exception
And generated interface member must be
"""
/// <inheritdoc cref = "Events.EventHolder.EventMember"/>
event global::Events.CustomEventHandler EventMember;
"""
And generated implementation member must be
"""
/// <inheritdoc/>
public event global::Events.CustomEventHandler EventMember { add => Events.EventHolder.EventMember += value; remove => Events.EventHolder.EventMember -= value; }
"""

Expand All @@ -66,10 +70,12 @@ Scenario: Event field with Action type
Then there must not be generation exception
And generated interface member must be
"""
/// <inheritdoc cref = "Events.EventHolder.EventMember"/>
event global::System.Action EventMember;
"""
And generated implementation member must be
"""
/// <inheritdoc/>
public event global::System.Action EventMember { add => Events.EventHolder.EventMember += value; remove => Events.EventHolder.EventMember -= value; }
"""

Expand All @@ -83,10 +89,12 @@ Scenario: Event field with Action type with keyworded generic parameter
Then there must not be generation exception
And generated interface member must be
"""
/// <inheritdoc cref = "Events.EventHolder.EventMember"/>
event global::System.Action<int> EventMember;
"""
And generated implementation member must be
"""
/// <inheritdoc/>
public event global::System.Action<int> EventMember { add => Events.EventHolder.EventMember += value; remove => Events.EventHolder.EventMember -= value; }
"""

Expand All @@ -100,10 +108,12 @@ Scenario: Event field with Action type with keyworded nullable generic parameter
Then there must not be generation exception
And generated interface member must be
"""
/// <inheritdoc cref = "Events.EventHolder.EventMember"/>
event global::System.Action<string?> EventMember;
"""
And generated implementation member must be
"""
/// <inheritdoc/>
public event global::System.Action<string?> EventMember { add => Events.EventHolder.EventMember += value; remove => Events.EventHolder.EventMember -= value; }
"""

Expand All @@ -117,10 +127,12 @@ Scenario: Event field with Action type with non-keyworded generic parameter
Then there must not be generation exception
And generated interface member must be
"""
/// <inheritdoc cref = "Events.EventHolder.EventMember"/>
event global::System.Action<global::System.DateTime> EventMember;
"""
And generated implementation member must be
"""
/// <inheritdoc/>
public event global::System.Action<global::System.DateTime> EventMember { add => Events.EventHolder.EventMember += value; remove => Events.EventHolder.EventMember -= value; }
"""

Expand All @@ -134,10 +146,12 @@ Scenario: Event field with Action type with non-keyworded nullable generic param
Then there must not be generation exception
And generated interface member must be
"""
/// <inheritdoc cref = "Events.EventHolder.EventMember"/>
event global::System.Action<global::System.DayOfWeek?> EventMember;
"""
And generated implementation member must be
"""
/// <inheritdoc/>
public event global::System.Action<global::System.DayOfWeek?> EventMember { add => Events.EventHolder.EventMember += value; remove => Events.EventHolder.EventMember -= value; }
"""

Expand All @@ -151,10 +165,12 @@ Scenario: Event field with Func
Then there must not be generation exception
And generated interface member must be
"""
/// <inheritdoc cref = "Events.EventHolder.EventMember"/>
event global::System.Func<global::System.DayOfWeek?, double, int?> EventMember;
"""
And generated implementation member must be
"""
/// <inheritdoc/>
public event global::System.Func<global::System.DayOfWeek?, double, int?> EventMember { add => Events.EventHolder.EventMember += value; remove => Events.EventHolder.EventMember -= value; }
"""

Expand All @@ -173,9 +189,11 @@ Scenario: Full event
Then there must not be generation exception
And generated interface member must be
"""
/// <inheritdoc cref = "Events.EventHolder.FullEvent"/>
event global::System.EventHandler FullEvent;
"""
And generated implementation member must be
"""
/// <inheritdoc/>
public event global::System.EventHandler FullEvent { add => Events.EventHolder.FullEvent += value; remove => Events.EventHolder.FullEvent -= value; }
"""
Original file line number Diff line number Diff line change
Expand Up @@ -30,10 +30,12 @@ Scenario: Field with keyworded type
Then there must not be generation exception
And generated interface member must be
"""
/// <inheritdoc cref = "Fields.FieldHolder.ConstField"/>
int ConstField { get; }
"""
And generated implementation member must be
"""
/// <inheritdoc/>
public int ConstField { get => Fields.FieldHolder.ConstField; }
"""

Expand All @@ -47,9 +49,11 @@ Scenario: Field with non-keyworded type
Then there must not be generation exception
And generated interface member must be
"""
/// <inheritdoc cref = "Fields.FieldHolder.ConstField"/>
double ConstField { get; }
"""
And generated implementation member must be
"""
/// <inheritdoc/>
public double ConstField { get => Fields.FieldHolder.ConstField; }
"""
8 changes: 8 additions & 0 deletions Tests/Tum4ik.StinimGen.Specs/Features/Field/Field.feature
Original file line number Diff line number Diff line change
Expand Up @@ -30,10 +30,12 @@ Scenario: Non-nullable field with keyworded type
Then there must not be generation exception
And generated interface member must be
"""
/// <inheritdoc cref = "Fields.FieldHolder.StaticField"/>
object StaticField { get; set; }
"""
And generated implementation member must be
"""
/// <inheritdoc/>
public object StaticField { get => Fields.FieldHolder.StaticField; set => Fields.FieldHolder.StaticField = value; }
"""

Expand All @@ -47,10 +49,12 @@ Scenario: Nullable field with keyworded type
Then there must not be generation exception
And generated interface member must be
"""
/// <inheritdoc cref = "Fields.FieldHolder.StaticField"/>
object? StaticField { get; set; }
"""
And generated implementation member must be
"""
/// <inheritdoc/>
public object? StaticField { get => Fields.FieldHolder.StaticField; set => Fields.FieldHolder.StaticField = value; }
"""

Expand All @@ -64,10 +68,12 @@ Scenario: Non-nullable field
Then there must not be generation exception
And generated interface member must be
"""
/// <inheritdoc cref = "Fields.FieldHolder.StaticField"/>
global::System.Delegate StaticField { get; set; }
"""
And generated implementation member must be
"""
/// <inheritdoc/>
public global::System.Delegate StaticField { get => Fields.FieldHolder.StaticField; set => Fields.FieldHolder.StaticField = value; }
"""

Expand All @@ -81,9 +87,11 @@ Scenario: Nullable field
Then there must not be generation exception
And generated interface member must be
"""
/// <inheritdoc cref = "Fields.FieldHolder.StaticField"/>
global::System.Delegate? StaticField { get; set; }
"""
And generated implementation member must be
"""
/// <inheritdoc/>
public global::System.Delegate? StaticField { get => Fields.FieldHolder.StaticField; set => Fields.FieldHolder.StaticField = value; }
"""
Original file line number Diff line number Diff line change
Expand Up @@ -30,10 +30,12 @@ Scenario: Non-nullable field with keyworded type
Then there must not be generation exception
And generated interface member must be
"""
/// <inheritdoc cref = "Fields.FieldHolder.StaticReadonlyField"/>
float StaticReadonlyField { get; }
"""
And generated implementation member must be
"""
/// <inheritdoc/>
public float StaticReadonlyField { get => Fields.FieldHolder.StaticReadonlyField; }
"""

Expand All @@ -47,10 +49,12 @@ Scenario: Nullable field with keyworded type
Then there must not be generation exception
And generated interface member must be
"""
/// <inheritdoc cref = "Fields.FieldHolder.StaticReadonlyField"/>
float? StaticReadonlyField { get; }
"""
And generated implementation member must be
"""
/// <inheritdoc/>
public float? StaticReadonlyField { get => Fields.FieldHolder.StaticReadonlyField; }
"""

Expand All @@ -64,10 +68,12 @@ Scenario: Non-nullable field
Then there must not be generation exception
And generated interface member must be
"""
/// <inheritdoc cref = "Fields.FieldHolder.StaticReadonlyField"/>
global::System.StringComparer StaticReadonlyField { get; }
"""
And generated implementation member must be
"""
/// <inheritdoc/>
public global::System.StringComparer StaticReadonlyField { get => Fields.FieldHolder.StaticReadonlyField; }
"""

Expand All @@ -81,9 +87,11 @@ Scenario: Nullable field
Then there must not be generation exception
And generated interface member must be
"""
/// <inheritdoc cref = "Fields.FieldHolder.StaticReadonlyField"/>
global::System.StringComparer? StaticReadonlyField { get; }
"""
And generated implementation member must be
"""
/// <inheritdoc/>
public global::System.StringComparer? StaticReadonlyField { get => Fields.FieldHolder.StaticReadonlyField; }
"""
14 changes: 14 additions & 0 deletions Tests/Tum4ik.StinimGen.Specs/Features/Method/GenericMethod.feature
Original file line number Diff line number Diff line change
Expand Up @@ -33,10 +33,12 @@ Scenario: Void method with a generic parameter and without parameters
Then there must not be generation exception
And generated interface member must be
"""
/// <inheritdoc cref = "Methods.MethodHolder.Method{T}()"/>
void Method<T>();
"""
And generated implementation member must be
"""
/// <inheritdoc/>
public void Method<T>() => Methods.MethodHolder.Method<T>();
"""

Expand All @@ -50,10 +52,12 @@ Scenario: Void method with several generic parameters and without parameters
Then there must not be generation exception
And generated interface member must be
"""
/// <inheritdoc cref = "Methods.MethodHolder.Method{T1, T2, T3}()"/>
void Method<T1, T2, T3>();
"""
And generated implementation member must be
"""
/// <inheritdoc/>
public void Method<T1, T2, T3>() => Methods.MethodHolder.Method<T1, T2, T3>();
"""

Expand All @@ -67,10 +71,12 @@ Scenario: Method without parameters returns generic type
Then there must not be generation exception
And generated interface member must be
"""
/// <inheritdoc cref = "Methods.MethodHolder.Method{T}()"/>
T Method<T>();
"""
And generated implementation member must be
"""
/// <inheritdoc/>
public T Method<T>() => Methods.MethodHolder.Method<T>();
"""

Expand All @@ -84,10 +90,12 @@ Scenario: Method with parameters returns generic type
Then there must not be generation exception
And generated interface member must be
"""
/// <inheritdoc cref = "Methods.MethodHolder.Method{T1, T2}(T1, T2)"/>
T1 Method<T1, T2>(T1 p1, T2 p2);
"""
And generated implementation member must be
"""
/// <inheritdoc/>
public T1 Method<T1, T2>(T1 p1, T2 p2) => Methods.MethodHolder.Method<T1, T2>(p1, p2);
"""

Expand All @@ -101,10 +109,12 @@ Scenario: Async method without parameters returns Task of generic type
Then there must not be generation exception
And generated interface member must be
"""
/// <inheritdoc cref = "Methods.MethodHolder.MethodAsync{T}()"/>
global::System.Threading.Tasks.Task<T> MethodAsync<T>();
"""
And generated implementation member must be
"""
/// <inheritdoc/>
public global::System.Threading.Tasks.Task<T> MethodAsync<T>() => Methods.MethodHolder.MethodAsync<T>();
"""

Expand All @@ -118,11 +128,13 @@ Scenario: Generic method with a constraint
Then there must not be generation exception
And generated interface member must be
"""
/// <inheritdoc cref = "Methods.MethodHolder.Method{T}()"/>
void Method<T>()
where T : class, new();
"""
And generated implementation member must be
"""
/// <inheritdoc/>
public void Method<T>()
where T : class, new() => Methods.MethodHolder.Method<T>();
"""
Expand All @@ -140,11 +152,13 @@ Scenario: Generic method with several constraints
Then there must not be generation exception
And generated interface member must be
"""
/// <inheritdoc cref = "Methods.MethodHolder.Method{TParent, TChild}()"/>
void Method<TParent, TChild>()
where TParent : class where TChild : TParent, new();
"""
And generated implementation member must be
"""
/// <inheritdoc/>
public void Method<TParent, TChild>()
where TParent : class where TChild : TParent, new() => Methods.MethodHolder.Method<TParent, TChild>();
"""
Loading