CSLA.NET 6.0.0
CSLA .NET is a software development framework that helps you build a reusable, maintainable object-oriented business layer for your app.
EvaluatePropertiesForSimplicityAnalyzerTests.cs
Go to the documentation of this file.
1using Microsoft.CodeAnalysis;
2using Microsoft.VisualStudio.TestTools.UnitTesting;
3using System;
4using System.Linq;
5using System.Threading.Tasks;
6
8{
9 [TestClass]
11 {
12 [TestMethod]
14 {
15 var analyzer = new EvaluatePropertiesForSimplicityAnalyzer();
16 var diagnostics = analyzer.SupportedDiagnostics;
17 Assert.AreEqual(1, diagnostics.Length);
18
19 var ctorHasParametersDiagnostic = diagnostics.Single(_ => _.Id == Constants.AnalyzerIdentifiers.OnlyUseCslaPropertyMethodsInGetSetRule);
20 Assert.AreEqual(OnlyUseCslaPropertyMethodsInGetSetRuleConstants.Title, ctorHasParametersDiagnostic.Title.ToString(),
21 nameof(DiagnosticDescriptor.Title));
22 Assert.AreEqual(OnlyUseCslaPropertyMethodsInGetSetRuleConstants.Message, ctorHasParametersDiagnostic.MessageFormat.ToString(),
23 nameof(DiagnosticDescriptor.MessageFormat));
24 Assert.AreEqual(Constants.Categories.Usage, ctorHasParametersDiagnostic.Category,
25 nameof(DiagnosticDescriptor.Category));
26 Assert.AreEqual(DiagnosticSeverity.Warning, ctorHasParametersDiagnostic.DefaultSeverity,
27 nameof(DiagnosticDescriptor.DefaultSeverity));
28 Assert.AreEqual(HelpUrlBuilder.Build(Constants.AnalyzerIdentifiers.OnlyUseCslaPropertyMethodsInGetSetRule, nameof(EvaluatePropertiesForSimplicityAnalyzer)),
29 ctorHasParametersDiagnostic.HelpLinkUri,
30 nameof(DiagnosticDescriptor.HelpLinkUri));
31 }
32
33 [TestMethod]
35 {
36 var code = "public class A { }";
37 await TestHelpers.RunAnalysisAsync<EvaluatePropertiesForSimplicityAnalyzer>(
38 code, Array.Empty<string>());
39 }
40
41 [TestMethod]
43 {
44 var code =
45@"using Csla;
46
47public abstract class A : BusinessBase<A>
48{
49 public abstract string Data { get; set; }
50}";
51 await TestHelpers.RunAnalysisAsync<EvaluatePropertiesForSimplicityAnalyzer>(
52 code, Array.Empty<string>());
53 }
54
55 [TestMethod]
57 {
58 var code =
59@"using Csla;
60
61public class A : BusinessBase<A>
62{
63 public static string Data { get; set; }
64}";
65 await TestHelpers.RunAnalysisAsync<EvaluatePropertiesForSimplicityAnalyzer>(
66 code, Array.Empty<string>());
67 }
68
69 [TestMethod]
71 {
72 var code =
73@"using Csla;
74
75public class A : BusinessBase<A>
76{
77 public string Data { get; }
78
79 public string ExpressionData => string.Empty;
80}";
81 await TestHelpers.RunAnalysisAsync<EvaluatePropertiesForSimplicityAnalyzer>(
82 code, Array.Empty<string>());
83 }
84
85 [TestMethod]
87 {
88 var code =
89@"using Csla;
90
91public class A : BusinessBase<A>
92{
93 public string Data { get { return this.GetProperty(); } }
94
95 public string GetProperty() => null;
96}";
97 await TestHelpers.RunAnalysisAsync<EvaluatePropertiesForSimplicityAnalyzer>(
98 code, Array.Empty<string>());
99 }
100
101 [TestMethod]
103 {
104 var code =
105@"using Csla;
106
107public class A : BusinessBase<A>
108{
109 public static readonly PropertyInfo<string> DataProperty = RegisterProperty<string>(_ => _.Data);
110 private string _x;
111
112 public string Data { get { _x = ""44""; return this.GetProperty(DataProperty); } }
113
114 public string GetX() { return _x; }
115}";
116 await TestHelpers.RunAnalysisAsync<EvaluatePropertiesForSimplicityAnalyzer>(
117 code, new[] { Constants.AnalyzerIdentifiers.OnlyUseCslaPropertyMethodsInGetSetRule });
118 }
119
120 [TestMethod]
122 {
123 var code =
124@"using Csla;
125
126public class A : BusinessBase<A>
127{
128 public static readonly PropertyInfo<string> DataProperty = RegisterProperty<string>(_ => _.Data);
129 public string Data { get { return ""x"" + this.GetProperty(DataProperty); } }
130
131 public static readonly PropertyInfo<string> ExpressionDataProperty = RegisterProperty<string>(_ => _.ExpressionData);
132 public string ExpressionData => ""x"" + this.GetProperty(DataProperty);
133}";
134 await TestHelpers.RunAnalysisAsync<EvaluatePropertiesForSimplicityAnalyzer>(code,
135 new[]
136 {
137 Constants.AnalyzerIdentifiers.OnlyUseCslaPropertyMethodsInGetSetRule,
138 Constants.AnalyzerIdentifiers.OnlyUseCslaPropertyMethodsInGetSetRule
139 });
140 }
141
142 [TestMethod]
144 {
145 var code =
146@"using Csla;
147
148public class A : BusinessBase<A>
149{
150 public static readonly PropertyInfo<string> DataProperty = RegisterProperty<string>(_ => _.Data);
151 public string Data { get { return this.GetProperty(DataProperty); } }
152
153 public static readonly PropertyInfo<string> ExpressionDataProperty = RegisterProperty<string>(_ => _.ExpressionData);
154 public string ExpressionData => this.GetProperty(DataProperty);
155}";
156 await TestHelpers.RunAnalysisAsync<EvaluatePropertiesForSimplicityAnalyzer>(
157 code, Array.Empty<string>());
158 }
159
160 [TestMethod]
162 {
163 var code =
164@"using Csla;
165
166public class A : BusinessBase<A>
167{
168 public string Data { set { } }
169}";
170 await TestHelpers.RunAnalysisAsync<EvaluatePropertiesForSimplicityAnalyzer>(
171 code, Array.Empty<string>());
172 }
173
174 [TestMethod]
176 {
177 var code =
178@"using Csla;
179
180public class A : BusinessBase<A>
181{
182 public string Data { set { this.SetProperty(); } }
183
184 public void SetProperty() { }
185}";
186 await TestHelpers.RunAnalysisAsync<EvaluatePropertiesForSimplicityAnalyzer>(
187 code, Array.Empty<string>());
188 }
189
190 [TestMethod]
192 {
193 var code =
194@"using Csla;
195
196public class A : BusinessBase<A>
197{
198 public static readonly PropertyInfo<string> DataProperty = RegisterProperty<string>(_ => _.Data);
199 private string _x;
200
201 public string Data { get { return null; } set { _x = ""44""; this.SetProperty(DataProperty, value); } }
202
203 public string GetX() { return _x; }
204}";
205 await TestHelpers.RunAnalysisAsync<EvaluatePropertiesForSimplicityAnalyzer>(
206 code, new[]
207 {
208 Constants.AnalyzerIdentifiers.OnlyUseCslaPropertyMethodsInGetSetRule
209 });
210 }
211
212 [TestMethod]
214 {
215 var code =
216@"using Csla;
217
218public class A : BusinessBase<A>
219{
220 public static readonly PropertyInfo<string> DataProperty = RegisterProperty<string>(_ => _.Data);
221
222 public string Data
223 {
224 get { return null; }
225 set { this.SetProperty(DataProperty, value); }
226 }
227}";
228 await TestHelpers.RunAnalysisAsync<EvaluatePropertiesForSimplicityAnalyzer>(
229 code, Array.Empty<string>());
230 }
231 }
232}