Skip to content

Commit 21c9999

Browse files
authored
Merge pull request #2403 from bjornhellander/Issue2376_AddTestsForThrowExpressionSyntaxWrapper
Added tests for ThrowExpressionSyntaxWrapper
2 parents c33ff28 + 0373041 commit 21c9999

4 files changed

Lines changed: 142 additions & 0 deletions

File tree

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
// Copyright (c) Tunnel Vision Laboratories, LLC. All Rights Reserved.
2+
// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.
3+
4+
namespace StyleCop.Analyzers.Test.CSharp7.Lightup
5+
{
6+
using System;
7+
using Microsoft.CodeAnalysis;
8+
using Microsoft.CodeAnalysis.CSharp;
9+
using Microsoft.CodeAnalysis.CSharp.Syntax;
10+
using StyleCop.Analyzers.Lightup;
11+
using Xunit;
12+
13+
public class ThrowExpressionSyntaxWrapperTests
14+
{
15+
[Fact]
16+
public void TestNull()
17+
{
18+
var syntaxNode = default(SyntaxNode);
19+
var throwExpressionSyntax = (ThrowExpressionSyntaxWrapper)syntaxNode;
20+
Assert.Null(throwExpressionSyntax.SyntaxNode);
21+
Assert.Throws<NullReferenceException>(() => throwExpressionSyntax.Expression);
22+
Assert.Throws<NullReferenceException>(() => throwExpressionSyntax.ThrowKeyword);
23+
Assert.Throws<NullReferenceException>(() => throwExpressionSyntax.WithExpression(SyntaxFactory.LiteralExpression(SyntaxKind.NullLiteralExpression)));
24+
Assert.Throws<NullReferenceException>(() => throwExpressionSyntax.WithThrowKeyword(SyntaxFactory.Token(SyntaxKind.ThrowKeyword)));
25+
}
26+
27+
[Fact]
28+
public void TestProperties()
29+
{
30+
var syntaxNode = SyntaxFactory.ThrowExpression(SyntaxFactory.Token(SyntaxKind.ThrowKeyword), SyntaxFactory.LiteralExpression(SyntaxKind.NullLiteralExpression));
31+
Assert.True(syntaxNode.IsKind(SyntaxKind.ThrowExpression));
32+
Assert.True(syntaxNode.IsKind(SyntaxKindEx.ThrowExpression));
33+
34+
var throwExpressionSyntax = (ThrowExpressionSyntaxWrapper)syntaxNode;
35+
Assert.Same(syntaxNode, throwExpressionSyntax.SyntaxNode);
36+
Assert.Same(syntaxNode.Expression, throwExpressionSyntax.Expression);
37+
Assert.True(syntaxNode.ThrowKeyword.IsEquivalentTo(throwExpressionSyntax.ThrowKeyword));
38+
39+
var newExpression = SyntaxFactory.LiteralExpression(SyntaxKind.NumericLiteralExpression, SyntaxFactory.Literal(0)); // This does not make sense semantically, but it's good enough for this test
40+
var modifiedExpression = throwExpressionSyntax.WithExpression(newExpression);
41+
Assert.NotNull(modifiedExpression.SyntaxNode);
42+
Assert.NotSame(syntaxNode.Expression, modifiedExpression.Expression);
43+
Assert.Equal(SyntaxKind.NumericLiteralExpression, modifiedExpression.Expression.Kind());
44+
45+
var newThrowKeyword = SyntaxFactory.Token(SyntaxKind.ThrowKeyword).WithLeadingTrivia(SyntaxFactory.Space);
46+
var modifiedThrowKeyword = throwExpressionSyntax.WithThrowKeyword(newThrowKeyword);
47+
Assert.NotNull(modifiedThrowKeyword.SyntaxNode);
48+
Assert.Equal(1, modifiedThrowKeyword.ThrowKeyword.LeadingTrivia.Count);
49+
Assert.Equal(" ", modifiedThrowKeyword.ThrowKeyword.LeadingTrivia.ToString());
50+
}
51+
52+
[Fact]
53+
public void TestIsInstance()
54+
{
55+
Assert.False(ThrowExpressionSyntaxWrapper.IsInstance(null));
56+
Assert.False(ThrowExpressionSyntaxWrapper.IsInstance(SyntaxFactory.LiteralExpression(SyntaxKind.NullLiteralExpression)));
57+
58+
var syntaxNode = SyntaxFactory.ThrowExpression(SyntaxFactory.Token(SyntaxKind.ThrowKeyword), SyntaxFactory.LiteralExpression(SyntaxKind.NullLiteralExpression));
59+
Assert.True(ThrowExpressionSyntaxWrapper.IsInstance(syntaxNode));
60+
}
61+
62+
[Fact]
63+
public void TestConversionsNull()
64+
{
65+
var syntaxNode = default(SyntaxNode);
66+
var throwExpressionSyntax = (ThrowExpressionSyntaxWrapper)syntaxNode;
67+
68+
ExpressionSyntax syntax = throwExpressionSyntax;
69+
Assert.Null(syntax);
70+
}
71+
72+
[Fact]
73+
public void TestConversions()
74+
{
75+
var syntaxNode = SyntaxFactory.ThrowExpression(SyntaxFactory.Token(SyntaxKind.ThrowKeyword), SyntaxFactory.LiteralExpression(SyntaxKind.NullLiteralExpression));
76+
var throwExpressionSyntax = (ThrowExpressionSyntaxWrapper)syntaxNode;
77+
78+
ExpressionSyntax syntax = throwExpressionSyntax;
79+
Assert.Same(syntaxNode, syntax);
80+
}
81+
82+
[Fact]
83+
public void TestInvalidConversion()
84+
{
85+
var syntaxNode = SyntaxFactory.LiteralExpression(SyntaxKind.NullLiteralExpression);
86+
Assert.Throws<InvalidCastException>(() => (ThrowExpressionSyntaxWrapper)syntaxNode);
87+
}
88+
}
89+
}

StyleCop.Analyzers/StyleCop.Analyzers.Test.CSharp7/StyleCop.Analyzers.Test.CSharp7.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -281,6 +281,7 @@
281281
<Compile Include="Lightup\PatternSyntaxWrapperTests.cs" />
282282
<Compile Include="Lightup\SingleVariableDesignationSyntaxWrapperTests.cs" />
283283
<Compile Include="Lightup\SyntaxWrapperTests.cs" />
284+
<Compile Include="Lightup\ThrowExpressionSyntaxWrapperTests.cs" />
284285
<Compile Include="Lightup\VariableDesignationSyntaxWrapperTests.cs" />
285286
<Compile Include="MaintainabilityRules\SA1119CSharp7UnitTests.cs" />
286287
<Compile Include="MaintainabilityRules\SA1400CSharp7UnitTests.cs" />
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
// Copyright (c) Tunnel Vision Laboratories, LLC. All Rights Reserved.
2+
// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.
3+
4+
namespace StyleCop.Analyzers.Test.Lightup
5+
{
6+
using System;
7+
using Microsoft.CodeAnalysis;
8+
using Microsoft.CodeAnalysis.CSharp;
9+
using Microsoft.CodeAnalysis.CSharp.Syntax;
10+
using StyleCop.Analyzers.Lightup;
11+
using Xunit;
12+
13+
public class ThrowExpressionSyntaxWrapperTests
14+
{
15+
[Fact]
16+
public void TestNull()
17+
{
18+
var syntaxNode = default(SyntaxNode);
19+
var throwExpressionSyntax = (ThrowExpressionSyntaxWrapper)syntaxNode;
20+
Assert.Null(throwExpressionSyntax.SyntaxNode);
21+
Assert.Throws<NullReferenceException>(() => throwExpressionSyntax.Expression);
22+
Assert.Throws<NullReferenceException>(() => throwExpressionSyntax.ThrowKeyword);
23+
Assert.Throws<NullReferenceException>(() => throwExpressionSyntax.WithExpression(SyntaxFactory.LiteralExpression(SyntaxKind.NullLiteralExpression)));
24+
Assert.Throws<NullReferenceException>(() => throwExpressionSyntax.WithThrowKeyword(SyntaxFactory.Token(SyntaxKind.ThrowKeyword)));
25+
}
26+
27+
[Fact]
28+
public void TestIsInstance()
29+
{
30+
Assert.False(ThrowExpressionSyntaxWrapper.IsInstance(null));
31+
Assert.False(ThrowExpressionSyntaxWrapper.IsInstance(SyntaxFactory.LiteralExpression(SyntaxKind.NullLiteralExpression)));
32+
}
33+
34+
[Fact]
35+
public void TestConversionsNull()
36+
{
37+
var syntaxNode = default(SyntaxNode);
38+
var throwExpressionSyntax = (ThrowExpressionSyntaxWrapper)syntaxNode;
39+
40+
ExpressionSyntax syntax = throwExpressionSyntax;
41+
Assert.Null(syntax);
42+
}
43+
44+
[Fact]
45+
public void TestInvalidConversion()
46+
{
47+
var syntaxNode = SyntaxFactory.LiteralExpression(SyntaxKind.NullLiteralExpression);
48+
Assert.Throws<InvalidCastException>(() => (ThrowExpressionSyntaxWrapper)syntaxNode);
49+
}
50+
}
51+
}

StyleCop.Analyzers/StyleCop.Analyzers.Test/StyleCop.Analyzers.Test.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,7 @@
250250
<Compile Include="Lightup\SeparatedSyntaxListWrapperTestBase.cs" />
251251
<Compile Include="Lightup\SingleVariableDesignationSyntaxWrapperTests.cs" />
252252
<Compile Include="Lightup\SyntaxWrapperTests.cs" />
253+
<Compile Include="Lightup\ThrowExpressionSyntaxWrapperTests.cs" />
253254
<Compile Include="Lightup\UnsupportedSyntaxListTests.cs" />
254255
<Compile Include="Lightup\VariableDesignationSyntaxWrapperTests.cs" />
255256
<Compile Include="LinqHelpers\SyntaxTriviaListEnumerableTests.cs" />

0 commit comments

Comments
 (0)