Skip to content

Commit d60a6d9

Browse files
Changes from MarimerLLC#4645 picked (MarimerLLC#4666)
Some fixes found due to enabled NRT :) Co-authored-by: Rockford Lhotka <rocky@lhotka.net>
1 parent ec18a30 commit d60a6d9

19 files changed

Lines changed: 493 additions & 135 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,184 @@
1+
using Csla.Generator.AutoImplementProperties.CSharp.AutoImplement;
2+
3+
4+
namespace Csla.Generator.Tests
5+
{
6+
[TestClass]
7+
public class AutoImplementPropertiesGeneratorTests : VerifyBase
8+
{
9+
[TestMethod("ReadOnlyBase must be generated with LoadProperty for set and GetProperty for get.")]
10+
public async Task Case01()
11+
{
12+
var inputSource = """
13+
namespace Test
14+
{
15+
[Csla.CslaImplementProperties]
16+
public partial class ReadOnlyPOCO : Csla.ReadOnlyBase<ReadOnlyPOCO>
17+
{
18+
public partial string Name { get; private set; }
19+
}
20+
}
21+
""";
22+
23+
await TestHelper<IncrementalAutoImplementPropertiesPartialsGenerator>.Verify(inputSource);
24+
}
25+
26+
[TestMethod("BusinessBase must be generated with SetProperty for set and GetProperty for get.")]
27+
public async Task Case02()
28+
{
29+
var source = """
30+
namespace Test
31+
{
32+
[Csla.CslaImplementProperties]
33+
public partial class BusinessBaseTestClass : Csla.BusinessBase<BusinessBaseTestClass>
34+
{
35+
public partial int? Age { get; private set; }
36+
}
37+
}
38+
""";
39+
40+
await TestHelper<IncrementalAutoImplementPropertiesPartialsGenerator>.Verify(source);
41+
}
42+
43+
[TestMethod("Property with a type containing a generic parameter.")]
44+
public async Task Case03()
45+
{
46+
var source = """
47+
namespace Test2
48+
{
49+
public class GenericType<T>;
50+
}
51+
52+
namespace Test
53+
{
54+
using Test2;
55+
56+
[Csla.CslaImplementProperties]
57+
public partial class BusinessBaseTestClass : Csla.BusinessBase<BusinessBaseTestClass>
58+
{
59+
public partial GenericType<string> Name { get; private set; }
60+
}
61+
}
62+
""";
63+
64+
await TestHelper<IncrementalAutoImplementPropertiesPartialsGenerator>.Verify(source);
65+
}
66+
67+
[TestMethod("Type contained in a file scoped namespace declaration.")]
68+
public async Task Case04()
69+
{
70+
var source = """
71+
namespace Test;
72+
73+
[Csla.CslaImplementProperties]
74+
public partial class BusinessBaseTestClass : Csla.BusinessBase<BusinessBaseTestClass>
75+
{
76+
public partial string? Name { get; private set; }
77+
}
78+
""";
79+
80+
await TestHelper<IncrementalAutoImplementPropertiesPartialsGenerator>.Verify(source);
81+
}
82+
83+
[TestMethod("Two types with same name but different namespaces.")]
84+
public async Task Case05()
85+
{
86+
var additionalSources = new List<string>
87+
{
88+
"""
89+
namespace Test2
90+
{
91+
public class UniqueType1
92+
{
93+
}
94+
95+
public class NonUniqueType
96+
{
97+
}
98+
}
99+
""",
100+
"""
101+
namespace Test3
102+
{
103+
public class NonUniqueType
104+
{
105+
}
106+
}
107+
"""
108+
};
109+
110+
var source = """
111+
using Test2;
112+
113+
namespace Test
114+
{
115+
[Csla.CslaImplementProperties]
116+
public partial class BusinessBaseTestClass : Csla.BusinessBase<BusinessBaseTestClass>
117+
{
118+
public partial UniqueType1? UniqueName { get; private set; }
119+
120+
public partial Test3.NonUniqueType? NonUnique { get; set; }
121+
}
122+
}
123+
""";
124+
125+
await TestHelper<IncrementalAutoImplementPropertiesPartialsGenerator>.Verify(source, additionalSources);
126+
}
127+
128+
[TestMethod("Command must be generated with LoadProperty for set and ReadProperty for get.")]
129+
public async Task Case06()
130+
{
131+
var source = """
132+
namespace Test
133+
{
134+
[Csla.CslaImplementProperties]
135+
public partial class CommandTest : Csla.CommandBase<CommandTest>
136+
{
137+
public partial string Name { get; private set; }
138+
}
139+
}
140+
""";
141+
142+
await TestHelper<IncrementalAutoImplementPropertiesPartialsGenerator>.Verify(source);
143+
}
144+
145+
[TestMethod("Property with nested generic type must be generated correctly.")]
146+
public async Task Case07()
147+
{
148+
var source = """
149+
using Csla;
150+
using Csla.Core;
151+
152+
namespace Test;
153+
154+
public class GenericType<T>;
155+
156+
[CslaImplementProperties]
157+
public partial class BOTest : BusinessBase<BOTest>
158+
{
159+
public partial GenericType<MobileDictionary<string, int>>? Name { get; private set; }
160+
}
161+
""";
162+
await TestHelper<IncrementalAutoImplementPropertiesPartialsGenerator>.Verify(source);
163+
}
164+
165+
[TestMethod("Property with nested generic nullable types must be generated correctly.")]
166+
public async Task Case08()
167+
{
168+
var source = """
169+
using Csla;
170+
using Csla.Core;
171+
172+
namespace Test;
173+
174+
[CslaImplementProperties]
175+
public partial class BOTest : BusinessBase<BOTest>
176+
{
177+
public partial MobileDictionary<string, MobileList<int?>?>? Name { get; private set; }
178+
}
179+
""";
180+
181+
await TestHelper<IncrementalAutoImplementPropertiesPartialsGenerator>.Verify(source);
182+
}
183+
}
184+
}

Source/Csla.Generators/cs/AutoImplementProperties/Csla.Generator.AutoImplementProperties.CSharp.Tests/Csla.Generator.AutoImplementProperties.CSharp.Tests.csproj

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,23 @@
55
<LangVersion>preview</LangVersion>
66
<IsPackable>false</IsPackable>
77
<Nullable>enable</Nullable>
8+
<ImplicitUsings>enable</ImplicitUsings>
89
</PropertyGroup>
910

1011
<ItemGroup>
11-
<PackageReference Include="Microsoft.CodeAnalysis" Version="4.12.0" />
12+
<PackageReference Include="AwesomeAssertions" Version="8.2.0" />
13+
<PackageReference Include="AwesomeAssertions.Analyzers" Version="8.0.0">
14+
<PrivateAssets>all</PrivateAssets>
15+
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
16+
</PackageReference>
17+
<PackageReference Include="Microsoft.CodeAnalysis" Version="4.14.0" />
1218
<PackageReference Include="Microsoft.CodeAnalysis.CSharp.Analyzer.Testing" Version="1.1.2" />
1319
<PackageReference Include="Microsoft.CodeAnalysis.CSharp.SourceGenerators.Testing" Version="1.1.2" />
14-
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.9.0" />
15-
<PackageReference Include="MSTest.TestAdapter" Version="3.5.0" />
16-
<PackageReference Include="MSTest.TestFramework" Version="3.5.0" />
17-
<PackageReference Include="Verify.MSTest" Version="26.1.2" />
18-
<PackageReference Include="Verify.SourceGenerators" Version="2.2.0" />
20+
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.13.0" />
21+
<PackageReference Include="MSTest.TestAdapter" Version="3.8.3" />
22+
<PackageReference Include="MSTest.TestFramework" Version="3.8.3" />
23+
<PackageReference Include="Verify.MSTest" Version="29.3.1" />
24+
<PackageReference Include="Verify.SourceGenerators" Version="2.5.0" />
1925
<PackageReference Include="coverlet.collector" Version="6.0.4">
2026
<PrivateAssets>all</PrivateAssets>
2127
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>

Source/Csla.Generators/cs/AutoImplementProperties/Csla.Generator.AutoImplementProperties.CSharp.Tests/IncrementalAutoImplementPropertiesPartialsGeneratorTests.cs

Lines changed: 0 additions & 81 deletions
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
using System.Runtime.CompilerServices;
2+
3+
namespace Csla.Generator.Tests
4+
{
5+
public static class ModuleInitializer
6+
{
7+
[ModuleInitializer]
8+
public static void Init()
9+
{
10+
VerifySourceGenerators.Initialize();
11+
}
12+
}
13+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
//HintName: ReadOnlyPOCO.g.cs
2+
//<auto-generated/>
3+
#nullable enable
4+
using System;
5+
using Csla;
6+
7+
namespace Test;
8+
9+
public partial class ReadOnlyPOCO
10+
{
11+
public static readonly PropertyInfo<string> NameProperty = RegisterProperty<string>(nameof(Name));
12+
public partial string Name
13+
{
14+
get => GetProperty(NameProperty)!;
15+
private set => LoadProperty(NameProperty, value);
16+
}
17+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
//HintName: BusinessBaseTestClass.g.cs
2+
//<auto-generated/>
3+
#nullable enable
4+
using System;
5+
using Csla;
6+
7+
namespace Test;
8+
9+
public partial class BusinessBaseTestClass
10+
{
11+
public static readonly PropertyInfo<int?> AgeProperty = RegisterProperty<int?>(nameof(Age));
12+
public partial int? Age
13+
{
14+
get => GetProperty(AgeProperty);
15+
private set => SetProperty(AgeProperty, value);
16+
}
17+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
//HintName: BusinessBaseTestClass.g.cs
2+
//<auto-generated/>
3+
#nullable enable
4+
using System;
5+
using Csla;
6+
7+
namespace Test;
8+
9+
public partial class BusinessBaseTestClass
10+
{
11+
public static readonly PropertyInfo<global::Test2.GenericType<string>> NameProperty = RegisterProperty<global::Test2.GenericType<string>>(nameof(Name));
12+
public partial global::Test2.GenericType<string> Name
13+
{
14+
get => GetProperty(NameProperty)!;
15+
private set => SetProperty(NameProperty, value);
16+
}
17+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
//HintName: BusinessBaseTestClass.g.cs
2+
//<auto-generated/>
3+
#nullable enable
4+
using System;
5+
using Csla;
6+
7+
namespace Test;
8+
9+
public partial class BusinessBaseTestClass
10+
{
11+
public static readonly PropertyInfo<string?> NameProperty = RegisterProperty<string?>(nameof(Name));
12+
public partial string? Name
13+
{
14+
get => GetProperty(NameProperty);
15+
private set => SetProperty(NameProperty, value);
16+
}
17+
}

0 commit comments

Comments
 (0)