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.
CheckConstructorsAnalyzerTests.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 CheckConstructorsAnalyzer();
16 var diagnostics = analyzer.SupportedDiagnostics;
17 Assert.AreEqual(2, diagnostics.Length);
18
19 var ctorHasParametersDiagnostic = diagnostics.Single(_ => _.Id == Constants.AnalyzerIdentifiers.ConstructorHasParameters);
20 Assert.AreEqual(ConstructorHasParametersConstants.Title, ctorHasParametersDiagnostic.Title.ToString(),
21 nameof(DiagnosticDescriptor.Title));
22 Assert.AreEqual(ConstructorHasParametersConstants.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.ConstructorHasParameters, nameof(CheckConstructorsAnalyzer)),
29 ctorHasParametersDiagnostic.HelpLinkUri,
30 nameof(DiagnosticDescriptor.HelpLinkUri));
31
32 var publicNoArgsCtorDiagnostic = diagnostics.Single(_ => _.Id == Constants.AnalyzerIdentifiers.PublicNoArgumentConstructorIsMissing);
33 Assert.AreEqual(PublicNoArgumentConstructorIsMissingConstants.Title, publicNoArgsCtorDiagnostic.Title.ToString(),
34 nameof(DiagnosticDescriptor.Title));
35 Assert.AreEqual(PublicNoArgumentConstructorIsMissingConstants.Message, publicNoArgsCtorDiagnostic.MessageFormat.ToString(),
36 nameof(DiagnosticDescriptor.MessageFormat));
37 Assert.AreEqual(Constants.Categories.Usage, publicNoArgsCtorDiagnostic.Category,
38 nameof(DiagnosticDescriptor.Category));
39 Assert.AreEqual(DiagnosticSeverity.Error, publicNoArgsCtorDiagnostic.DefaultSeverity,
40 nameof(DiagnosticDescriptor.DefaultSeverity));
41 Assert.AreEqual(HelpUrlBuilder.Build(Constants.AnalyzerIdentifiers.PublicNoArgumentConstructorIsMissing, nameof(CheckConstructorsAnalyzer)),
42 publicNoArgsCtorDiagnostic.HelpLinkUri,
43 nameof(DiagnosticDescriptor.HelpLinkUri));
44 }
45
46 [TestMethod]
48 {
49 var code = "public class A { }";
50 await TestHelpers.RunAnalysisAsync<CheckConstructorsAnalyzer>(code, Array.Empty<string>());
51 }
52
53 [TestMethod]
55 {
56 var code =
57@"using Csla;
58
59public class A : BusinessBase<A> { }";
60 await TestHelpers.RunAnalysisAsync<CheckConstructorsAnalyzer>(code, Array.Empty<string>());
61 }
62
63 [TestMethod]
65 {
66 var code =
67@"using Csla;
68
69public class A : BusinessBase<A>
70{
71 private A() { }
72}";
73 await TestHelpers.RunAnalysisAsync<CheckConstructorsAnalyzer>(code,
74 new[] { Constants.AnalyzerIdentifiers.PublicNoArgumentConstructorIsMissing },
75 diagnostics => Assert.AreEqual(true.ToString(), diagnostics[0].Properties[PublicNoArgumentConstructorIsMissingConstants.HasNonPublicNoArgumentConstructor]));
76 }
77
78 [TestMethod]
80 {
81 var code =
82@"using Csla;
83
84public class A : BusinessBase<A>
85{
86 private A(int a) { }
87}";
88 await TestHelpers.RunAnalysisAsync<CheckConstructorsAnalyzer>(code,
89 new[] { Constants.AnalyzerIdentifiers.PublicNoArgumentConstructorIsMissing },
90 diagnostics => Assert.AreEqual(false.ToString(), diagnostics[0].Properties[PublicNoArgumentConstructorIsMissingConstants.HasNonPublicNoArgumentConstructor]));
91 }
92
93 [TestMethod]
95 {
96 var code =
97@"using Csla;
98
99public class A : BusinessBase<A>
100{
101 public A() { }
102 public A(int a) { }
103}";
104 await TestHelpers.RunAnalysisAsync<CheckConstructorsAnalyzer>(code,
105 new[] { Constants.AnalyzerIdentifiers.ConstructorHasParameters },
106 diagnostics => Assert.AreEqual(0, diagnostics[0].Properties.Count));
107 }
108
109 [TestMethod]
111 {
112 var code =
113@"using Csla;
114
115public class A : BusinessBase<A>
116{
117 public A(int a) { }
118}";
119 await TestHelpers.RunAnalysisAsync<CheckConstructorsAnalyzer>(code,
120 new[] { Constants.AnalyzerIdentifiers.ConstructorHasParameters, Constants.AnalyzerIdentifiers.PublicNoArgumentConstructorIsMissing },
121 diagnostics => Assert.AreEqual(0, diagnostics[0].Properties.Count));
122 }
123
124 [TestMethod]
126 {
127 var code =
128@"using Csla;
129
130public class A : BusinessBase<A>
131{
132 static A() { }
133
134 private A(int a) { }
135}";
136 await TestHelpers.RunAnalysisAsync<CheckConstructorsAnalyzer>(code,
137 new[] { Constants.AnalyzerIdentifiers.PublicNoArgumentConstructorIsMissing },
138 diagnostics => Assert.AreEqual(false.ToString(), diagnostics[0].Properties[PublicNoArgumentConstructorIsMissingConstants.HasNonPublicNoArgumentConstructor]));
139 }
140
141 [TestMethod]
143 {
144 var code =
145@"using Csla;
146
147public class A : BusinessBase<A> { }
148
149public class B : BusinessListBase<B, A>
150{
151 public B() { }
152
153 public B(int a) { }
154}";
155 await TestHelpers.RunAnalysisAsync<CheckConstructorsAnalyzer>(code,
156 new[] { Constants.AnalyzerIdentifiers.ConstructorHasParameters },
157 diagnostics => Assert.AreEqual(0, diagnostics[0].Properties.Count));
158 }
159
160 [TestMethod]
162 {
163 var code =
164@"using Csla;
165
166public class A : BusinessBase<A> { }
167
168public class B : DynamicListBase<A>
169{
170 public B() { }
171
172 public B(int a) { }
173}";
174 await TestHelpers.RunAnalysisAsync<CheckConstructorsAnalyzer>(code,
175 new[] { Constants.AnalyzerIdentifiers.ConstructorHasParameters },
176 diagnostics => Assert.AreEqual(0, diagnostics[0].Properties.Count));
177 }
178
179 [TestMethod]
181 {
182 var code =
183@"using Csla;
184
185public class A : BusinessBase<A> { }
186
187public class B
188 : BusinessBindingListBase<B, A>
189{
190 public B() { }
191
192 public B(int a) { }
193}";
194 await TestHelpers.RunAnalysisAsync<CheckConstructorsAnalyzer>(code,
195 new[] { Constants.AnalyzerIdentifiers.ConstructorHasParameters },
196 diagnostics => Assert.AreEqual(0, diagnostics[0].Properties.Count));
197 }
198
199 [TestMethod]
201 {
202 var code =
203@"using Csla;
204
205public class A : CommandBase<A>
206{
207 public A() { }
208
209 public A(int a) { }
210}";
211 await TestHelpers.RunAnalysisAsync<CheckConstructorsAnalyzer>(code, Array.Empty<string>());
212 }
213 }
214}