5using Microsoft.VisualStudio.TestTools.UnitTesting;
7using System.Collections.Generic;
8using System.Collections.Immutable;
10using System.Threading;
11using System.Threading.Tasks;
22 var ids = fix.FixableDiagnosticIds.ToList();
24 Assert.AreEqual(1, ids.Count, nameof(ids.Count));
25 Assert.AreEqual(ids[0], Constants.AnalyzerIdentifiers.DoesOperationHaveAttribute,
26 nameof(Constants.AnalyzerIdentifiers.DoesOperationHaveAttribute));
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")]
134 public async Task
VerifyGetFixes(
string operationName,
string attributeName,
bool includeUsingCsla,
135 string expectedDescription)
138$
@"{(includeUsingCsla ? "using Csla;
" : string.Empty)}
140public class A : Csla.BusinessBase<A>
142 private void {operationName}() {{ }}
144 var document = TestHelpers.Create(code);
145 var tree = await document.GetSyntaxTreeAsync();
147 var sourceSpan = diagnostics[0].Location.SourceSpan;
149 var actions =
new List<CodeAction>();
150 var codeActionRegistration =
new Action<CodeAction, ImmutableArray<Diagnostic>>(
151 (a, _) => { actions.Add(a); });
154 var codeFixContext =
new CodeFixContext(document, diagnostics[0],
155 codeActionRegistration,
new CancellationToken(
false));
156 await fix.RegisterCodeFixesAsync(codeFixContext);
158 Assert.AreEqual(1, actions.Count, nameof(actions.Count));
160 await TestHelpers.VerifyChangesAsync(actions,
161 expectedDescription, document,
164 Assert.IsTrue(newRoot.DescendantNodes(_ =>
true).OfType<AttributeSyntax>().Any(_ => _.Name.ToString() == attributeName));
168 Assert.IsTrue(newRoot.DescendantNodes(_ => true).OfType<UsingDirectiveSyntax>().Any(
169 _ => _.Name.GetText().ToString() ==
"Csla"));
void VerifyGetFixableDiagnosticIds()
async Task VerifyGetFixes(string operationName, string attributeName, bool includeUsingCsla, string expectedDescription)