1
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
2
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
7
using ICSharpCode.NRefactory.Parser;
8
using ICSharpCode.NRefactory.Ast;
10
namespace ICSharpCode.NRefactory.Tests.Ast
13
public class ConditionalExpressionTests
17
public void CSharpConditionalExpressionTest()
19
ConditionalExpression ce = ParseUtilCSharp.ParseExpression<ConditionalExpression>("a == b ? a() : a.B");
21
Assert.IsTrue(ce.Condition is BinaryOperatorExpression);
22
Assert.IsTrue(ce.TrueExpression is InvocationExpression);
23
Assert.IsTrue(ce.FalseExpression is MemberReferenceExpression);
27
public void CSharpConditionalIsExpressionTest()
29
// (as is b?) ERROR (conflict with nullables, SD2-419)
30
ConditionalExpression ce = ParseUtilCSharp.ParseExpression<ConditionalExpression>("a is b ? a() : a.B");
32
Assert.IsTrue(ce.Condition is TypeOfIsExpression);
33
Assert.IsTrue(ce.TrueExpression is InvocationExpression);
34
Assert.IsTrue(ce.FalseExpression is MemberReferenceExpression);
38
public void CSharpConditionalIsWithNullableExpressionTest()
40
ConditionalExpression ce = ParseUtilCSharp.ParseExpression<ConditionalExpression>("a is b? ? a() : a.B");
42
Assert.IsTrue(ce.Condition is TypeOfIsExpression);
43
Assert.IsTrue(ce.TrueExpression is InvocationExpression);
44
Assert.IsTrue(ce.FalseExpression is MemberReferenceExpression);
48
public void CSharpConditionalIsExpressionTest2()
50
ConditionalExpression ce = ParseUtilCSharp.ParseExpression<ConditionalExpression>("a is b ? (a()) : a.B");
52
Assert.IsTrue(ce.Condition is TypeOfIsExpression);
53
Assert.IsTrue(ce.TrueExpression is ParenthesizedExpression);
54
Assert.IsTrue(ce.FalseExpression is MemberReferenceExpression);
58
public void CSharpConditionalExpressionNegativeValue()
60
ConditionalExpression ce = ParseUtilCSharp.ParseExpression<ConditionalExpression>("isNegative ? -1 : 1");
62
Assert.IsTrue(ce.Condition is IdentifierExpression);
63
Assert.IsTrue(ce.TrueExpression is UnaryOperatorExpression);
64
Assert.IsTrue(ce.FalseExpression is PrimitiveExpression);
69
public void CSharpConditionalIsWithNegativeValue()
71
ConditionalExpression ce = ParseUtilCSharp.ParseExpression<ConditionalExpression>("a is b ? -1 : 1");
73
Assert.IsTrue(ce.Condition is TypeOfIsExpression);
74
Assert.IsTrue(ce.TrueExpression is UnaryOperatorExpression);
75
Assert.IsTrue(ce.FalseExpression is PrimitiveExpression);
79
public void CSharpConditionalIsWithExplicitPositiveValue()
81
ConditionalExpression ce = ParseUtilCSharp.ParseExpression<ConditionalExpression>("a is b ? +1 : 1");
83
Assert.IsTrue(ce.Condition is TypeOfIsExpression);
84
Assert.IsTrue(ce.TrueExpression is UnaryOperatorExpression);
85
Assert.IsTrue(ce.FalseExpression is PrimitiveExpression);
89
public void CSharpRepeatedConditionalExpr()
91
ConditionalExpression ce = ParseUtilCSharp.ParseExpression<ConditionalExpression>("a ? b : c ? d : e");
93
Assert.AreEqual("a", ((IdentifierExpression)ce.Condition).Identifier);
94
Assert.AreEqual("b", ((IdentifierExpression)ce.TrueExpression).Identifier);
95
Assert.IsTrue(ce.FalseExpression is ConditionalExpression);
99
public void CSharpNestedConditionalExpr()
101
ConditionalExpression ce = ParseUtilCSharp.ParseExpression<ConditionalExpression>("a ? b ? c : d : e");
103
Assert.AreEqual("a", ((IdentifierExpression)ce.Condition).Identifier);
104
Assert.AreEqual("e", ((IdentifierExpression)ce.FalseExpression).Identifier);
105
Assert.IsTrue(ce.TrueExpression is ConditionalExpression);
112
public void VBNetConditionalExpressionTest()
114
ConditionalExpression ce = ParseUtilVBNet.ParseExpression<ConditionalExpression>("If(x IsNot Nothing, x.Test, \"nothing\")");
116
Assert.IsTrue(ce.Condition is BinaryOperatorExpression);
117
Assert.IsTrue(ce.TrueExpression is MemberReferenceExpression);
118
Assert.IsTrue(ce.FalseExpression is PrimitiveExpression);