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.
DoesOperationHaveAttributeAddAttributeCodeFixTests.cs
Go to the documentation of this file.
1using Microsoft.CodeAnalysis;
2using Microsoft.CodeAnalysis.CodeActions;
3using Microsoft.CodeAnalysis.CodeFixes;
4using Microsoft.CodeAnalysis.CSharp.Syntax;
5using Microsoft.VisualStudio.TestTools.UnitTesting;
6using System;
7using System.Collections.Generic;
8using System.Collections.Immutable;
9using System.Linq;
10using System.Threading;
11using System.Threading.Tasks;
12
14{
15 [TestClass]
17 {
18 [TestMethod]
20 {
22 var ids = fix.FixableDiagnosticIds.ToList();
23
24 Assert.AreEqual(1, ids.Count, nameof(ids.Count));
25 Assert.AreEqual(ids[0], Constants.AnalyzerIdentifiers.DoesOperationHaveAttribute,
26 nameof(Constants.AnalyzerIdentifiers.DoesOperationHaveAttribute));
27 }
28
29 [DataRow(CslaMemberConstants.Operations.DataPortalCreate,
30 CslaMemberConstants.OperationAttributes.Create, true,
31 DoesOperationHaveAttributeAnalyzerAddAttributeCodeFixConstants.AddAttributeDescription,
32 DisplayName = "VerifyGetFixesWhenOperationIsDataPortalCreateAndHasUsing")]
33 [DataRow(CslaMemberConstants.Operations.DataPortalCreate,
34 CslaMemberConstants.OperationAttributes.Create, false,
35 DoesOperationHaveAttributeAnalyzerAddAttributeCodeFixConstants.AddAttributeAndUsingDescription,
36 DisplayName = "VerifyGetFixesWhenOperationIsDataPortalCreateAndDoesNotHaveUsing")]
37 [DataRow(CslaMemberConstants.Operations.DataPortalFetch,
38 CslaMemberConstants.OperationAttributes.Fetch, true,
39 DoesOperationHaveAttributeAnalyzerAddAttributeCodeFixConstants.AddAttributeDescription,
40 DisplayName = "VerifyGetFixesWhenOperationIsDataPortalFetchAndHasUsing")]
41 [DataRow(CslaMemberConstants.Operations.DataPortalFetch,
42 CslaMemberConstants.OperationAttributes.Fetch, false,
43 DoesOperationHaveAttributeAnalyzerAddAttributeCodeFixConstants.AddAttributeAndUsingDescription,
44 DisplayName = "VerifyGetFixesWhenOperationIsDataPortalFetchAndDoesNotHaveUsing")]
45 [DataRow(CslaMemberConstants.Operations.DataPortalInsert,
46 CslaMemberConstants.OperationAttributes.Insert, true,
47 DoesOperationHaveAttributeAnalyzerAddAttributeCodeFixConstants.AddAttributeDescription,
48 DisplayName = "VerifyGetFixesWhenOperationIsDataPortalInsertAndHasUsing")]
49 [DataRow(CslaMemberConstants.Operations.DataPortalInsert,
50 CslaMemberConstants.OperationAttributes.Insert, false,
51 DoesOperationHaveAttributeAnalyzerAddAttributeCodeFixConstants.AddAttributeAndUsingDescription,
52 DisplayName = "VerifyGetFixesWhenOperationIsDataPortalInsertAndDoesNotHasUsing")]
53 [DataRow(CslaMemberConstants.Operations.DataPortalUpdate,
54 CslaMemberConstants.OperationAttributes.Update, true,
55 DoesOperationHaveAttributeAnalyzerAddAttributeCodeFixConstants.AddAttributeDescription,
56 DisplayName = "VerifyGetFixesWhenOperationIsDataPortalUpdateAndHasUsing")]
57 [DataRow(CslaMemberConstants.Operations.DataPortalUpdate,
58 CslaMemberConstants.OperationAttributes.Update, false,
59 DoesOperationHaveAttributeAnalyzerAddAttributeCodeFixConstants.AddAttributeAndUsingDescription,
60 DisplayName = "VerifyGetFixesWhenOperationIsDataPortalUpdateAndDoesNotHasUsing")]
61 [DataRow(CslaMemberConstants.Operations.DataPortalDelete,
62 CslaMemberConstants.OperationAttributes.Delete, true,
63 DoesOperationHaveAttributeAnalyzerAddAttributeCodeFixConstants.AddAttributeDescription,
64 DisplayName = "VerifyGetFixesWhenOperationIsDataPortalDeleteAndHasUsing")]
65 [DataRow(CslaMemberConstants.Operations.DataPortalDelete,
66 CslaMemberConstants.OperationAttributes.Delete, false,
67 DoesOperationHaveAttributeAnalyzerAddAttributeCodeFixConstants.AddAttributeAndUsingDescription,
68 DisplayName = "VerifyGetFixesWhenOperationIsDataPortalDeleteAndDoesNotHasUsing")]
69 [DataRow(CslaMemberConstants.Operations.DataPortalDeleteSelf,
70 CslaMemberConstants.OperationAttributes.DeleteSelf, true,
71 DoesOperationHaveAttributeAnalyzerAddAttributeCodeFixConstants.AddAttributeDescription,
72 DisplayName = "VerifyGetFixesWhenOperationIsDataPortalDeleteSelfAndHasUsing")]
73 [DataRow(CslaMemberConstants.Operations.DataPortalDeleteSelf,
74 CslaMemberConstants.OperationAttributes.DeleteSelf, false,
75 DoesOperationHaveAttributeAnalyzerAddAttributeCodeFixConstants.AddAttributeAndUsingDescription,
76 DisplayName = "VerifyGetFixesWhenOperationIsDataPortalDeleteSelfAndDoesNotHasUsing")]
77 [DataRow(CslaMemberConstants.Operations.DataPortalExecute,
78 CslaMemberConstants.OperationAttributes.Execute, true,
79 DoesOperationHaveAttributeAnalyzerAddAttributeCodeFixConstants.AddAttributeDescription,
80 DisplayName = "VerifyGetFixesWhenOperationIsDataPortalExecuteAndHasUsing")]
81 [DataRow(CslaMemberConstants.Operations.DataPortalExecute,
82 CslaMemberConstants.OperationAttributes.Execute, false,
83 DoesOperationHaveAttributeAnalyzerAddAttributeCodeFixConstants.AddAttributeAndUsingDescription,
84 DisplayName = "VerifyGetFixesWhenOperationIsDataPortalExecuteAndDoesNotHasUsing")]
85 [DataRow(CslaMemberConstants.Operations.ChildCreate,
86 CslaMemberConstants.OperationAttributes.CreateChild, true,
87 DoesOperationHaveAttributeAnalyzerAddAttributeCodeFixConstants.AddAttributeDescription,
88 DisplayName = "VerifyGetFixesWhenOperationIsCreateChildAndHasUsing")]
89 [DataRow(CslaMemberConstants.Operations.ChildCreate,
90 CslaMemberConstants.OperationAttributes.CreateChild, false,
91 DoesOperationHaveAttributeAnalyzerAddAttributeCodeFixConstants.AddAttributeAndUsingDescription,
92 DisplayName = "VerifyGetFixesWhenOperationIsCreateChildAndDoesNotHasUsing")]
93 [DataRow(CslaMemberConstants.Operations.ChildFetch,
94 CslaMemberConstants.OperationAttributes.FetchChild, true,
95 DoesOperationHaveAttributeAnalyzerAddAttributeCodeFixConstants.AddAttributeDescription,
96 DisplayName = "VerifyGetFixesWhenOperationIsFetchChildAndHasUsing")]
97 [DataRow(CslaMemberConstants.Operations.ChildFetch,
98 CslaMemberConstants.OperationAttributes.FetchChild, false,
99 DoesOperationHaveAttributeAnalyzerAddAttributeCodeFixConstants.AddAttributeAndUsingDescription,
100 DisplayName = "VerifyGetFixesWhenOperationIsFetchChildAndDoesNotHasUsing")]
101 [DataRow(CslaMemberConstants.Operations.ChildInsert,
102 CslaMemberConstants.OperationAttributes.InsertChild, true,
103 DoesOperationHaveAttributeAnalyzerAddAttributeCodeFixConstants.AddAttributeDescription,
104 DisplayName = "VerifyGetFixesWhenOperationIsInsertChildAndHasUsing")]
105 [DataRow(CslaMemberConstants.Operations.ChildInsert,
106 CslaMemberConstants.OperationAttributes.InsertChild, false,
107 DoesOperationHaveAttributeAnalyzerAddAttributeCodeFixConstants.AddAttributeAndUsingDescription,
108 DisplayName = "VerifyGetFixesWhenOperationIsInsertChildAndDoesNotHasUsing")]
109 [DataRow(CslaMemberConstants.Operations.ChildUpdate,
110 CslaMemberConstants.OperationAttributes.UpdateChild, true,
111 DoesOperationHaveAttributeAnalyzerAddAttributeCodeFixConstants.AddAttributeDescription,
112 DisplayName = "VerifyGetFixesWhenOperationIsUpdateChildAndHasUsing")]
113 [DataRow(CslaMemberConstants.Operations.ChildUpdate,
114 CslaMemberConstants.OperationAttributes.UpdateChild, false,
115 DoesOperationHaveAttributeAnalyzerAddAttributeCodeFixConstants.AddAttributeAndUsingDescription,
116 DisplayName = "VerifyGetFixesWhenOperationIsUpdateChildAndDoesNotHasUsing")]
117 [DataRow(CslaMemberConstants.Operations.ChildDeleteSelf,
118 CslaMemberConstants.OperationAttributes.DeleteSelfChild, true,
119 DoesOperationHaveAttributeAnalyzerAddAttributeCodeFixConstants.AddAttributeDescription,
120 DisplayName = "VerifyGetFixesWhenOperationIsDeleteSelfChildAndHasUsing")]
121 [DataRow(CslaMemberConstants.Operations.ChildDeleteSelf,
122 CslaMemberConstants.OperationAttributes.DeleteSelfChild, false,
123 DoesOperationHaveAttributeAnalyzerAddAttributeCodeFixConstants.AddAttributeAndUsingDescription,
124 DisplayName = "VerifyGetFixesWhenOperationIsDeleteSelfChildAndDoesNotHasUsing")]
125 [DataRow(CslaMemberConstants.Operations.ChildExecute,
126 CslaMemberConstants.OperationAttributes.ExecuteChild, true,
127 DoesOperationHaveAttributeAnalyzerAddAttributeCodeFixConstants.AddAttributeDescription,
128 DisplayName = "VerifyGetFixesWhenOperationIsExecuteChildAndHasUsing")]
129 [DataRow(CslaMemberConstants.Operations.ChildExecute,
130 CslaMemberConstants.OperationAttributes.ExecuteChild, false,
131 DoesOperationHaveAttributeAnalyzerAddAttributeCodeFixConstants.AddAttributeAndUsingDescription,
132 DisplayName = "VerifyGetFixesWhenOperationIsExecuteChildAndDoesNotHasUsing")]
133 [DataTestMethod]
134 public async Task VerifyGetFixes(string operationName, string attributeName, bool includeUsingCsla,
135 string expectedDescription)
136 {
137 var code =
138$@"{(includeUsingCsla ? "using Csla;" : string.Empty)}
139
140public class A : Csla.BusinessBase<A>
141{{
142 private void {operationName}() {{ }}
143}}";
144 var document = TestHelpers.Create(code);
145 var tree = await document.GetSyntaxTreeAsync();
146 var diagnostics = await TestHelpers.GetDiagnosticsAsync(code, new DoesOperationHaveAttributeAnalyzer());
147 var sourceSpan = diagnostics[0].Location.SourceSpan;
148
149 var actions = new List<CodeAction>();
150 var codeActionRegistration = new Action<CodeAction, ImmutableArray<Diagnostic>>(
151 (a, _) => { actions.Add(a); });
152
154 var codeFixContext = new CodeFixContext(document, diagnostics[0],
155 codeActionRegistration, new CancellationToken(false));
156 await fix.RegisterCodeFixesAsync(codeFixContext);
157
158 Assert.AreEqual(1, actions.Count, nameof(actions.Count));
159
160 await TestHelpers.VerifyChangesAsync(actions,
161 expectedDescription, document,
162 (model, newRoot) =>
163 {
164 Assert.IsTrue(newRoot.DescendantNodes(_ => true).OfType<AttributeSyntax>().Any(_ => _.Name.ToString() == attributeName));
165
166 if(includeUsingCsla)
167 {
168 Assert.IsTrue(newRoot.DescendantNodes(_ => true).OfType<UsingDirectiveSyntax>().Any(
169 _ => _.Name.GetText().ToString() == "Csla"));
170 }
171 });
172 }
173 }
174}
async Task VerifyGetFixes(string operationName, string attributeName, bool includeUsingCsla, string expectedDescription)