Skip to content

Commit f6c55bb

Browse files
committed
Add xUnit analyzers and take fixer suggestions (1 of 5): Common to System.Web.Cors.Test
- part of #65 - do not use `xunit.core` package in Microsoft.TestCommon - improve `TestData` behavior when tests sharing dataset properties run in parallel ExceptionResultTests.ExecuteAsync_ReturnsCorrectResponse_WhenContentNegotiationSucceedsAndIncludeErrorDetailIsTrue Manual changes: - use `Assert.IsAssignableFrom<T>(...)`, `Assert.IsType<T>(...)` and `Assert.Single(...)` return values - work around xUnit1013, Public method should be marked as test - move duplicated `[Theory]` and `[TestDataSet(...)]` attributes down to `abstract` methods - add suppression due to xnuit/xunit#1466 - work around xUnit1026, `[Theory]` method doesn't use all parameters - add new data sets or `GC.KeepAlive(...)` - reset `OAuthWebSecurity.OAuthDataProvider` after use in two tests
1 parent 64806c4 commit f6c55bb

File tree

65 files changed

+448
-399
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

65 files changed

+448
-399
lines changed

test/Common/AttributeListTest.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,14 +54,14 @@ public void AttributeListClearThrows()
5454
public void AttributeListContainsWrappedTrue()
5555
{
5656
Attribute presentAttribute = _collection[2];
57-
Assert.True(_list.Contains(presentAttribute));
57+
Assert.Contains(presentAttribute, _list);
5858
}
5959

6060
[Fact]
6161
public void AttributeListContainsMissingFalse()
6262
{
6363
Attribute missingAttribute = new MissingAttribute();
64-
Assert.False(_list.Contains(missingAttribute));
64+
Assert.DoesNotContain(missingAttribute, _list);
6565
}
6666

6767
[Fact]

test/Common/CollectionExtensionsTest.cs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ public void AppendAndReallocateEmpty_ReturnsOne()
1616

1717
string[] emptyAppended = empty.AppendAndReallocate("AppendedEmpty");
1818

19-
Assert.Equal(1, emptyAppended.Length);
20-
Assert.Equal("AppendedEmpty", emptyAppended[0]);
19+
string singleAppended = Assert.Single(emptyAppended);
20+
Assert.Equal("AppendedEmpty", singleAppended);
2121
}
2222

2323
[Fact]
@@ -107,7 +107,7 @@ public void AsIList_Enumerable_Copies()
107107
Assert.Equal(expected, enumerableAsIList);
108108
Assert.NotSame(expected, enumerableAsIList);
109109
}
110-
110+
111111
[Fact]
112112
public void AsList_List_ReturnsSameInstance()
113113
{
@@ -131,6 +131,7 @@ public void AsList_Enumerable_Copies()
131131
Assert.NotSame(array, arrayAsList);
132132
}
133133

134+
[Fact]
134135
public void AsList_ListWrapperCollection_ReturnsSameInstance()
135136
{
136137
List<object> list = new List<object> { new object(), new object() };
@@ -270,7 +271,7 @@ public void ToArrayWithoutNullsICollectionHasNullsRemovesNulls()
270271
Assert.Equal(hasNulls[2], hasNullsResult[1]);
271272
}
272273

273-
[Fact]
274+
[Fact]
274275
public void ToDictionaryFastArray2Element()
275276
{
276277
string[] input = new string[] {"AA", "BB"};
@@ -283,7 +284,7 @@ public void ToDictionaryFastArray2Element()
283284
Assert.Equal(StringComparer.OrdinalIgnoreCase, result.Comparer);
284285
}
285286

286-
[Fact]
287+
[Fact]
287288
public void ToDictionaryFastIListList2Element()
288289
{
289290
string[] input = new string[] {"AA", "BB"};
@@ -311,7 +312,7 @@ public void ToDictionaryFastIListArray2Element()
311312
Assert.Equal(StringComparer.OrdinalIgnoreCase, arrayResult.Comparer);
312313
}
313314

314-
[Fact]
315+
[Fact]
315316
public void ToDictionaryFastIEnumerableArray2Element()
316317
{
317318
string[] input = new string[] {"AA", "BB"};

test/Common/Routing/DefaultInlineConstraintResolverTest.cs

Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
// Copyright (c) .NET Foundation. All rights reserved.
22
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
33

4-
using System.Collections.Generic;
54
#if ASPNETWEBAPI
65
using System.Web.Http.Routing.Constraints;
76
#else
@@ -104,17 +103,16 @@ public void ResolveConstraint_LengthConstraint()
104103
{
105104
var constraint = new DefaultInlineConstraintResolver().ResolveConstraint("length(5)");
106105

107-
Assert.IsType<LengthRouteConstraint>(constraint);
108-
Assert.Equal(5, ((LengthRouteConstraint)constraint).Length);
106+
var lengthRouteConstraint = Assert.IsType<LengthRouteConstraint>(constraint);
107+
Assert.Equal(5, lengthRouteConstraint.Length);
109108
}
110109

111110
[Fact]
112111
public void ResolveConstraint_LengthRangeConstraint()
113112
{
114113
var constraint = new DefaultInlineConstraintResolver().ResolveConstraint("length(5, 10)");
115114

116-
Assert.IsType<LengthRouteConstraint>(constraint);
117-
LengthRouteConstraint lengthConstraint = (LengthRouteConstraint)constraint;
115+
LengthRouteConstraint lengthConstraint = Assert.IsType<LengthRouteConstraint>(constraint);
118116
Assert.Equal(5, lengthConstraint.MinLength);
119117
Assert.Equal(10, lengthConstraint.MaxLength);
120118
}
@@ -132,35 +130,35 @@ public void ResolveConstraint_MaxConstraint()
132130
{
133131
var constraint = new DefaultInlineConstraintResolver().ResolveConstraint("max(10)");
134132

135-
Assert.IsType<MaxRouteConstraint>(constraint);
136-
Assert.Equal(10, ((MaxRouteConstraint)constraint).Max);
133+
var maxRouteConstraint = Assert.IsType<MaxRouteConstraint>(constraint);
134+
Assert.Equal(10, maxRouteConstraint.Max);
137135
}
138136

139137
[Fact]
140138
public void ResolveConstraint_MaxLengthConstraint()
141139
{
142140
var constraint = new DefaultInlineConstraintResolver().ResolveConstraint("maxlength(10)");
143141

144-
Assert.IsType<MaxLengthRouteConstraint>(constraint);
145-
Assert.Equal(10, ((MaxLengthRouteConstraint)constraint).MaxLength);
142+
var maxLengthRouteConstraint = Assert.IsType<MaxLengthRouteConstraint>(constraint);
143+
Assert.Equal(10, maxLengthRouteConstraint.MaxLength);
146144
}
147145

148146
[Fact]
149147
public void ResolveConstraint_MinConstraint()
150148
{
151149
var constraint = new DefaultInlineConstraintResolver().ResolveConstraint("min(3)");
152150

153-
Assert.IsType<MinRouteConstraint>(constraint);
154-
Assert.Equal(3, ((MinRouteConstraint)constraint).Min);
151+
var minRouteConstraint = Assert.IsType<MinRouteConstraint>(constraint);
152+
Assert.Equal(3, minRouteConstraint.Min);
155153
}
156154

157155
[Fact]
158156
public void ResolveConstraint_MinLengthConstraint()
159157
{
160158
var constraint = new DefaultInlineConstraintResolver().ResolveConstraint("minlength(3)");
161159

162-
Assert.IsType<MinLengthRouteConstraint>(constraint);
163-
Assert.Equal(3, ((MinLengthRouteConstraint)constraint).MinLength);
160+
var minLengthRouteConstraint = Assert.IsType<MinLengthRouteConstraint>(constraint);
161+
Assert.Equal(3, minLengthRouteConstraint.MinLength);
164162
}
165163

166164
[Fact]
@@ -174,8 +172,7 @@ public void ResolveConstraint_RangeConstraint()
174172
{
175173
var constraint = new DefaultInlineConstraintResolver().ResolveConstraint("range(5, 10)");
176174

177-
Assert.IsType<RangeRouteConstraint>(constraint);
178-
RangeRouteConstraint rangeConstraint = (RangeRouteConstraint)constraint;
175+
RangeRouteConstraint rangeConstraint = Assert.IsType<RangeRouteConstraint>(constraint);
179176
Assert.Equal(5, rangeConstraint.Min);
180177
Assert.Equal(10, rangeConstraint.Max);
181178
}
@@ -185,8 +182,7 @@ public void ResolveConstraint_RegexConstraint()
185182
{
186183
var constraint = new DefaultInlineConstraintResolver().ResolveConstraint("regex(abc,defg)");
187184

188-
Assert.IsType<RegexRouteConstraint>(constraint);
189-
RegexRouteConstraint regexConstraint = (RegexRouteConstraint)constraint;
185+
RegexRouteConstraint regexConstraint = Assert.IsType<RegexRouteConstraint>(constraint);
190186
Assert.Equal("abc,defg", regexConstraint.Pattern);
191187
}
192188

test/Common/Routing/InlineRouteTemplateParserTests.cs

Lines changed: 27 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,8 @@ public void ParseRouteTemplate_ChainedConstraintWithArgumentsAndDefault()
4141

4242
Assert.Equal("hello/{param}", result.RouteUrl);
4343
Assert.Equal("111111", result.Defaults["param"]);
44-
Assert.IsType<RegexRouteConstraint>(result.Constraints["param"]);
45-
Assert.Equal(@"\d+", ((RegexRouteConstraint)result.Constraints["param"]).Pattern);
44+
var regexRouteConstraint = Assert.IsType<RegexRouteConstraint>(result.Constraints["param"]);
45+
Assert.Equal(@"\d+", regexRouteConstraint.Pattern);
4646
}
4747

4848
[Fact]
@@ -54,8 +54,7 @@ public void ParseRouteTemplate_ChainedConstraintAndOptional()
5454

5555
Assert.Equal(OptionalParameter, result.Defaults["param"]);
5656

57-
Assert.IsType<OptionalRouteConstraint>(result.Constraints["param"]);
58-
var constraint = (OptionalRouteConstraint)result.Constraints["param"];
57+
var constraint = Assert.IsType<OptionalRouteConstraint>(result.Constraints["param"]);
5958
Assert.IsType<IntRouteConstraint>(constraint.InnerConstraint);
6059
}
6160

@@ -68,9 +67,8 @@ public void ParseRouteTemplate_ChainedConstraintWithArgumentsAndOptional()
6867

6968
Assert.Equal(OptionalParameter, result.Defaults["param"]);
7069

71-
Assert.IsType<OptionalRouteConstraint>(result.Constraints["param"]);
72-
var constraint = (OptionalRouteConstraint)result.Constraints["param"];
73-
Assert.Equal(@"\d+", ((RegexRouteConstraint)constraint.InnerConstraint).Pattern);
70+
var constraint = Assert.IsType<OptionalRouteConstraint>(result.Constraints["param"]);
71+
Assert.Equal(@"\d+", Assert.IsType<RegexRouteConstraint>(constraint.InnerConstraint).Pattern);
7472
}
7573

7674
[Fact]
@@ -80,10 +78,9 @@ public void ParseRouteTemplate_ChainedConstraints()
8078

8179
Assert.Equal("hello/{param}", result.RouteUrl);
8280

83-
Assert.IsType<CompoundRouteConstraint>(result.Constraints["param"]);
84-
CompoundRouteConstraint constraint = (CompoundRouteConstraint)result.Constraints["param"];
85-
Assert.Equal(@"\d+", ((RegexRouteConstraint)constraint.Constraints.ElementAt(0)).Pattern);
86-
Assert.Equal(@"\w+", ((RegexRouteConstraint)constraint.Constraints.ElementAt(1)).Pattern);
81+
CompoundRouteConstraint constraint = Assert.IsType<CompoundRouteConstraint>(result.Constraints["param"]);
82+
Assert.Equal(@"\d+", Assert.IsType<RegexRouteConstraint>(constraint.Constraints.ElementAt(0)).Pattern);
83+
Assert.Equal(@"\w+", Assert.IsType<RegexRouteConstraint>(constraint.Constraints.ElementAt(1)).Pattern);
8784
}
8885

8986
[Fact]
@@ -93,8 +90,8 @@ public void ParseRouteTemplate_Constraint()
9390

9491
Assert.Equal("hello/{param}", result.RouteUrl);
9592

96-
Assert.IsType<RegexRouteConstraint>(result.Constraints["param"]);
97-
Assert.Equal(@"\d+", ((RegexRouteConstraint)result.Constraints["param"]).Pattern);
93+
var constraint = Assert.IsType<RegexRouteConstraint>(result.Constraints["param"]);
94+
Assert.Equal(@"\d+", constraint.Pattern);
9895
}
9996

10097
[Fact]
@@ -108,8 +105,7 @@ public void ParseRouteTemplate_ConstraintsDefaultsAndOptionalsInMultipleSections
108105
Assert.Equal("abc", result.Defaults["p2"]);
109106
Assert.Equal(OptionalParameter, result.Defaults["p3"]);
110107

111-
Assert.IsType<CompoundRouteConstraint>(result.Constraints["p1"]);
112-
CompoundRouteConstraint constraint = (CompoundRouteConstraint)result.Constraints["p1"];
108+
CompoundRouteConstraint constraint = Assert.IsType<CompoundRouteConstraint>(result.Constraints["p1"]);
113109
Assert.IsType<AlphaRouteConstraint>(constraint.Constraints.ElementAt(0));
114110
Assert.IsType<LengthRouteConstraint>(constraint.Constraints.ElementAt(1));
115111
}
@@ -147,8 +143,8 @@ public void ParseRouteTemplate_RegexConstraintWithClosingBraceInPattern()
147143

148144
Assert.Equal("hello/{param}", result.RouteUrl);
149145

150-
Assert.IsType<RegexRouteConstraint>(result.Constraints["param"]);
151-
Assert.Equal(@"\}", ((RegexRouteConstraint)result.Constraints["param"]).Pattern);
146+
var constraint = Assert.IsType<RegexRouteConstraint>(result.Constraints["param"]);
147+
Assert.Equal(@"\}", constraint.Pattern);
152148
}
153149

154150
[Fact]
@@ -158,8 +154,8 @@ public void ParseRouteTemplate_RegexConstraintWithClosingParenInPattern()
158154

159155
Assert.Equal("hello/{param}", result.RouteUrl);
160156

161-
Assert.IsType<RegexRouteConstraint>(result.Constraints["param"]);
162-
Assert.Equal(@"\)", ((RegexRouteConstraint)result.Constraints["param"]).Pattern);
157+
var constraint = Assert.IsType<RegexRouteConstraint>(result.Constraints["param"]);
158+
Assert.Equal(@"\)", constraint.Pattern);
163159
}
164160

165161
[Fact]
@@ -168,8 +164,8 @@ public void ParseRouteTemplate_RegexConstraintWithColonInPattern()
168164
var result = Act(@"hello/{param:regex(:)}");
169165

170166
Assert.Equal("hello/{param}", result.RouteUrl);
171-
Assert.IsType<RegexRouteConstraint>(result.Constraints["param"]);
172-
Assert.Equal(@":", ((RegexRouteConstraint)result.Constraints["param"]).Pattern);
167+
var constraint = Assert.IsType<RegexRouteConstraint>(result.Constraints["param"]);
168+
Assert.Equal(@":", constraint.Pattern);
173169
}
174170

175171
[Fact]
@@ -178,8 +174,8 @@ public void ParseRouteTemplate_RegexConstraintWithCommaInPattern()
178174
var result = Act(@"hello/{param:regex(\w,\w)}");
179175

180176
Assert.Equal("hello/{param}", result.RouteUrl);
181-
Assert.IsType<RegexRouteConstraint>(result.Constraints["param"]);
182-
Assert.Equal(@"\w,\w", ((RegexRouteConstraint)result.Constraints["param"]).Pattern);
177+
var constraint = Assert.IsType<RegexRouteConstraint>(result.Constraints["param"]);
178+
Assert.Equal(@"\w,\w", constraint.Pattern);
183179
}
184180

185181
[Fact]
@@ -190,8 +186,8 @@ public void ParseRouteTemplate_RegexConstraintWithEqualsSignInPattern()
190186
Assert.Equal("hello/{param}", result.RouteUrl);
191187

192188
Assert.DoesNotContain("param", result.Defaults.Keys);
193-
Assert.IsType<RegexRouteConstraint>(result.Constraints["param"]);
194-
Assert.Equal(@"=", ((RegexRouteConstraint)result.Constraints["param"]).Pattern);
189+
var constraint = Assert.IsType<RegexRouteConstraint>(result.Constraints["param"]);
190+
Assert.Equal(@"=", constraint.Pattern);
195191
}
196192

197193
[Fact]
@@ -200,8 +196,8 @@ public void ParseRouteTemplate_RegexConstraintWithOpenBraceInPattern()
200196
var result = Act(@"hello/{param:regex(\{)}");
201197

202198
Assert.Equal("hello/{param}", result.RouteUrl);
203-
Assert.IsType<RegexRouteConstraint>(result.Constraints["param"]);
204-
Assert.Equal(@"\{", ((RegexRouteConstraint)result.Constraints["param"]).Pattern);
199+
var constraint = Assert.IsType<RegexRouteConstraint>(result.Constraints["param"]);
200+
Assert.Equal(@"\{", constraint.Pattern);
205201
}
206202

207203
[Fact]
@@ -210,8 +206,8 @@ public void ParseRouteTemplate_RegexConstraintWithOpenParenInPattern()
210206
var result = Act(@"hello/{param:regex(\()}");
211207

212208
Assert.Equal("hello/{param}", result.RouteUrl);
213-
Assert.IsType<RegexRouteConstraint>(result.Constraints["param"]);
214-
Assert.Equal(@"\(", ((RegexRouteConstraint)result.Constraints["param"]).Pattern);
209+
var constraint = Assert.IsType<RegexRouteConstraint>(result.Constraints["param"]);
210+
Assert.Equal(@"\(", constraint.Pattern);
215211
}
216212

217213
[Fact]
@@ -221,8 +217,8 @@ public void ParseRouteTemplate_RegexConstraintWithQuestionMarkInPattern()
221217

222218
Assert.Equal("hello/{param}", result.RouteUrl);
223219
Assert.DoesNotContain("param", result.Defaults.Keys);
224-
Assert.IsType<RegexRouteConstraint>(result.Constraints["param"]);
225-
Assert.Equal(@"\?", ((RegexRouteConstraint)result.Constraints["param"]).Pattern);
220+
var constraint = Assert.IsType<RegexRouteConstraint>(result.Constraints["param"]);
221+
Assert.Equal(@"\?", constraint.Pattern);
226222
}
227223

228224

test/Common/Routing/RouteFactoryAttributeTests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -500,8 +500,8 @@ public void AttributeUsage_IsAsSpecified()
500500
// Assert
501501
Assert.NotNull(usage);
502502
Assert.Equal(AttributeTargets.Class | AttributeTargets.Method, usage.ValidOn);
503-
Assert.Equal(false, usage.Inherited);
504-
Assert.Equal(true, usage.AllowMultiple);
503+
Assert.False(usage.Inherited);
504+
Assert.True(usage.AllowMultiple);
505505
}
506506

507507
private static IDirectRouteBuilder CreateBuilder(Func<RouteEntry> build)

test/Common/UriQueryUtilityTest.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,12 +52,12 @@ public void UrlDecode_ParsesEmptySegmentsCorrectly()
5252
Assert.NotNull(result);
5353

5454
// Because this is a NameValueCollection, the same name appears only once
55-
Assert.Equal(1, result.Count);
55+
Assert.Single(result);
5656

5757
// Values should be a comma separated list of empty strings
5858
string[] values = result[""].Split(new char[] { ',' });
5959

60-
// We expect length+1 segment as the final '&' counts as a segment
60+
// We expect length+1 segment as the final '&' counts as a segment
6161
Assert.Equal(index + 1, values.Length);
6262
foreach (var value in values)
6363
{
@@ -84,7 +84,7 @@ public void UrlDecode_ParsesCorrectly(string segment, string resultName, string
8484
Assert.NotNull(result);
8585

8686
// Because this is a NameValueCollection, the same name appears only once
87-
Assert.Equal(1, result.Count);
87+
Assert.Single(result);
8888

8989
// Values should be a comma separated list of resultValue
9090
string[] values = result[resultName].Split(new char[] { ',' });

test/Microsoft.AspNet.Facebook.Test/FacebookAuthorizeFilterHookTest.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,7 @@ public void OnAuthorization_TriggersDeniedHookAfterPersistingRequestedPermission
169169
}
170170

171171
// Assert
172-
Assert.Equal(false, authorizeFilter.DeniedPermissionPromptHookTriggered);
172+
Assert.False(authorizeFilter.DeniedPermissionPromptHookTriggered);
173173

174174
// Act 2
175175
// We're making a "second" request essentially

test/Microsoft.AspNet.Facebook.Test/Microsoft.AspNet.Facebook.Test.csproj

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,9 @@
128128
<ItemGroup>
129129
<Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
130130
</ItemGroup>
131+
<ItemGroup>
132+
<Analyzer Include="..\..\packages\xunit.analyzers.0.7.0\analyzers\dotnet\cs\xunit.analyzers.dll" />
133+
</ItemGroup>
131134
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
132135
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
133136
<PropertyGroup>

test/Microsoft.AspNet.Facebook.Test/packages.config

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@
44
<package id="Facebook" version="6.4.2" targetFramework="net452" />
55
<package id="Moq" version="4.7.142" targetFramework="net452" />
66
<package id="Newtonsoft.Json" version="7.0.1" targetFramework="net452" />
7+
<package id="xunit" version="2.3.0" targetFramework="net452" />
78
<package id="xunit.abstractions" version="2.0.1" targetFramework="net452" />
9+
<package id="xunit.analyzers" version="0.7.0" targetFramework="net452" />
810
<package id="xunit.assert" version="2.3.0" targetFramework="net452" />
911
<package id="xunit.core" version="2.3.0" targetFramework="net452" />
1012
<package id="xunit.extensibility.core" version="2.3.0" targetFramework="net452" />

test/Microsoft.TestCommon/Microsoft.TestCommon.csproj

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,9 @@
112112
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
113113
</None>
114114
</ItemGroup>
115+
<ItemGroup>
116+
<Analyzer Include="..\..\packages\xunit.analyzers.0.7.0\analyzers\dotnet\cs\xunit.analyzers.dll" />
117+
</ItemGroup>
115118
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
116119
<ProjectExtensions>
117120
<VisualStudio>

0 commit comments

Comments
 (0)