Skip to content

Commit 027bfa3

Browse files
Add IValidationTarget non-generic interface (#158)
1 parent 258ee22 commit 027bfa3

File tree

67 files changed

+502
-13
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

67 files changed

+502
-13
lines changed

src/Immediate.Validations.Generators/Templates/Validations.sbntxt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,12 @@ partial {{ c.type }} {{ c.name }}
1515

1616
partial {{ class.type }} {{ class.name }}
1717
{
18+
ValidationResult IValidationTarget.Validate() =>
19+
Validate(this, []);
20+
21+
ValidationResult IValidationTarget.Validate(ValidationResult errors) =>
22+
Validate(this, errors);
23+
1824
static ValidationResult IValidationTarget<{{ class.name }}>.Validate({{ class.name; if is_reference_type; "?"; end }} target) =>
1925
Validate(target, []);
2026

src/Immediate.Validations.Shared/IValidationTarget.cs

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,38 @@
22

33
namespace Immediate.Validations.Shared;
44

5+
/// <summary>
6+
/// This represents a class that has a <see cref="Validate()"/> method to validate instances of that class.
7+
/// </summary>
8+
public interface IValidationTarget
9+
{
10+
/// <summary>
11+
/// A method which can be used to validate this instance.
12+
/// </summary>
13+
/// <returns>
14+
/// A <see cref="ValidationResult" /> containing the result of the validation on <see langword="this" />.
15+
/// </returns>
16+
ValidationResult Validate();
17+
18+
/// <summary>
19+
/// A method which can be used to validate this instance.
20+
/// </summary>
21+
/// <param name="errors">
22+
/// The operating <see cref="ValidationResult" /> to add validation entries to.
23+
/// </param>
24+
/// <returns>
25+
/// A <see cref="ValidationResult" /> containing the result of the validation on <see langword="this" />.
26+
/// </returns>
27+
ValidationResult Validate(ValidationResult errors);
28+
}
29+
530
/// <summary>
631
/// This represents a class that has a <see cref="Validate(T)"/> method to validate instances of that class.
732
/// </summary>
833
/// <typeparam name="T">
934
/// The type which should be validated.
1035
/// </typeparam>
11-
public interface IValidationTarget<T>
36+
public interface IValidationTarget<T> : IValidationTarget
1237
{
1338
/// <summary>
1439
/// A method which can be used to validate instances of the type <typeparamref name="T"/>.

tests/Immediate.Validations.Tests/AnalyzerTests/ValidateClassAnalyzerTests.cs

Lines changed: 86 additions & 4 deletions
Large diffs are not rendered by default.

tests/Immediate.Validations.Tests/CodeFixTests/AddIValidationTargetCodefixProviderTests.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,19 +8,19 @@ public sealed class AddIValidationTargetCodefixProviderTests
88
[Test]
99
public async Task AddIValidationTargetNoBaseTypes() =>
1010
await CodeFixTestHelper.CreateCodeFixTest<ValidateClassAnalyzer, AddIValidationTargetCodefixProvider>(
11-
$$"""
11+
"""
1212
namespace Immediate.Validations.Shared;
1313
1414
[Validate]
1515
public sealed record {|IV0013:Data|}
1616
{
1717
}
1818
""",
19-
$$"""
19+
"""
2020
namespace Immediate.Validations.Shared;
2121
2222
[Validate]
23-
public sealed record Data : {|CS0535:{|CS0535:IValidationTarget<Data>|}|}
23+
public sealed record Data : {|CS0535:{|CS0535:{|CS0535:{|CS0535:IValidationTarget<Data>|}|}|}|}
2424
{
2525
}
2626
"""
@@ -29,7 +29,7 @@ public sealed record Data : {|CS0535:{|CS0535:IValidationTarget<Data>|}|}
2929
[Test]
3030
public async Task AddIValidationTargetWithBaseType() =>
3131
await CodeFixTestHelper.CreateCodeFixTest<ValidateClassAnalyzer, AddIValidationTargetCodefixProvider>(
32-
$$"""
32+
"""
3333
using System;
3434
3535
namespace Immediate.Validations.Shared;
@@ -40,13 +40,13 @@ public sealed record {|IV0013:Data|} : IDisposable
4040
public void Dispose() { }
4141
}
4242
""",
43-
$$"""
43+
"""
4444
using System;
4545
4646
namespace Immediate.Validations.Shared;
4747
4848
[Validate]
49-
public sealed record Data : IDisposable, {|CS0535:{|CS0535:IValidationTarget<Data>|}|}
49+
public sealed record Data : IDisposable, {|CS0535:{|CS0535:{|CS0535:{|CS0535:IValidationTarget<Data>|}|}|}|}
5050
{
5151
public void Dispose() { }
5252
}

tests/Immediate.Validations.Tests/CodeFixTests/AddValidateAttributeCodefixProviderTests.cs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,21 +8,25 @@ public sealed class AddValidateAttributeCodefixProviderTests
88
[Test]
99
public async Task AddValidateAttribute() =>
1010
await CodeFixTestHelper.CreateCodeFixTest<ValidateClassAnalyzer, AddValidateAttributeCodefixProvider>(
11-
$$"""
11+
"""
1212
namespace Immediate.Validations.Shared;
1313
1414
public sealed record {|IV0012:Data|} : IValidationTarget<Data>
1515
{
16+
public ValidationResult Validate() => [];
17+
public ValidationResult Validate(ValidationResult errors) => [];
1618
public static ValidationResult Validate(Data target) => [];
1719
public static ValidationResult Validate(Data target, ValidationResult errors) => [];
1820
}
1921
""",
20-
$$"""
22+
"""
2123
namespace Immediate.Validations.Shared;
2224
2325
[Validate]
2426
public sealed record Data : IValidationTarget<Data>
2527
{
28+
public ValidationResult Validate() => [];
29+
public ValidationResult Validate(ValidationResult errors) => [];
2630
public static ValidationResult Validate(Data target) => [];
2731
public static ValidationResult Validate(Data target, ValidationResult errors) => [];
2832
}

tests/Immediate.Validations.Tests/GeneratorTests/ClassLocationTests.ImplementBaseValidationInterface#IV.Namespace..BaseInterface.g.verified.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,12 @@ namespace Namespace;
1010

1111
partial interface BaseInterface
1212
{
13+
ValidationResult IValidationTarget.Validate() =>
14+
Validate(this, []);
15+
16+
ValidationResult IValidationTarget.Validate(ValidationResult errors) =>
17+
Validate(this, errors);
18+
1319
static ValidationResult IValidationTarget<BaseInterface>.Validate(BaseInterface? target) =>
1420
Validate(target, []);
1521

tests/Immediate.Validations.Tests/GeneratorTests/ClassLocationTests.ImplementBaseValidationInterface#IV.Namespace..ValidateClass.g.verified.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,12 @@ namespace Namespace;
1010

1111
partial class ValidateClass
1212
{
13+
ValidationResult IValidationTarget.Validate() =>
14+
Validate(this, []);
15+
16+
ValidationResult IValidationTarget.Validate(ValidationResult errors) =>
17+
Validate(this, errors);
18+
1319
static ValidationResult IValidationTarget<ValidateClass>.Validate(ValidateClass? target) =>
1420
Validate(target, []);
1521

tests/Immediate.Validations.Tests/GeneratorTests/ClassLocationTests.InheritBaseValidationTarget#IV.Namespace..BaseClass.g.verified.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,12 @@ namespace Namespace;
1010

1111
partial class BaseClass
1212
{
13+
ValidationResult IValidationTarget.Validate() =>
14+
Validate(this, []);
15+
16+
ValidationResult IValidationTarget.Validate(ValidationResult errors) =>
17+
Validate(this, errors);
18+
1319
static ValidationResult IValidationTarget<BaseClass>.Validate(BaseClass? target) =>
1420
Validate(target, []);
1521

tests/Immediate.Validations.Tests/GeneratorTests/ClassLocationTests.InheritBaseValidationTarget#IV.Namespace..ValidateClass.g.verified.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,12 @@ namespace Namespace;
1010

1111
partial class ValidateClass
1212
{
13+
ValidationResult IValidationTarget.Validate() =>
14+
Validate(this, []);
15+
16+
ValidationResult IValidationTarget.Validate(ValidationResult errors) =>
17+
Validate(this, errors);
18+
1319
static ValidationResult IValidationTarget<ValidateClass>.Validate(ValidateClass? target) =>
1420
Validate(target, []);
1521

tests/Immediate.Validations.Tests/GeneratorTests/ClassLocationTests.InheritedClassesTest#IV.Namespace.OuterClass.BaseClass.g.verified.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,12 @@ partial class OuterClass
1212

1313
partial class BaseClass
1414
{
15+
ValidationResult IValidationTarget.Validate() =>
16+
Validate(this, []);
17+
18+
ValidationResult IValidationTarget.Validate(ValidationResult errors) =>
19+
Validate(this, errors);
20+
1521
static ValidationResult IValidationTarget<BaseClass>.Validate(BaseClass? target) =>
1622
Validate(target, []);
1723

0 commit comments

Comments
 (0)