Browse Source

Add tests for InsertParenthesesVisitor.

newNRvisualizers
Daniel Grunwald 15 years ago
parent
commit
a20e80a09c
  1. 44
      ICSharpCode.NRefactory.Tests/CSharp/InsertParenthesesVisitorTests.cs
  2. 2
      ICSharpCode.NRefactory.Tests/CSharp/Parser/Expression/CastExpressionTests.cs
  3. 2
      ICSharpCode.NRefactory/CSharp/Ast/Expressions/CastExpression.cs
  4. 10
      ICSharpCode.NRefactory/CSharp/Ast/Expressions/Expression.cs
  5. 10
      ICSharpCode.NRefactory/CSharp/Ast/Expressions/UnaryOperatorExpression.cs
  6. 9
      ICSharpCode.NRefactory/CSharp/Ast/PrimitiveType.cs
  7. 9
      ICSharpCode.NRefactory/CSharp/Ast/SimpleType.cs
  8. 2
      ICSharpCode.NRefactory/CSharp/OutputVisitor/InsertParenthesesVisitor.cs
  9. 2
      ICSharpCode.NRefactory/CSharp/OutputVisitor/OutputVisitor.cs
  10. 2
      ICSharpCode.NRefactory/CSharp/Resolver/ResolveVisitor.cs

44
ICSharpCode.NRefactory.Tests/CSharp/InsertParenthesesVisitorTests.cs

@ -43,5 +43,49 @@ namespace ICSharpCode.NRefactory.CSharp @@ -43,5 +43,49 @@ namespace ICSharpCode.NRefactory.CSharp
Assert.AreEqual("cond = a == b", InsertRequired(expr));
Assert.AreEqual("cond = (a == b)", InsertReadable(expr));
}
[Test]
public void TrickyCast1()
{
Expression expr = new UnaryOperatorExpression(
UnaryOperatorType.Minus, new IdentifierExpression("a")
).CastTo(new PrimitiveType("int"));
Assert.AreEqual("(int)-a", InsertRequired(expr));
Assert.AreEqual("(int)(-a)", InsertReadable(expr));
}
[Test]
public void TrickyCast2()
{
Expression expr = new UnaryOperatorExpression(
UnaryOperatorType.Minus, new IdentifierExpression("a")
).CastTo(new SimpleType("MyType"));
Assert.AreEqual("(MyType)(-a)", InsertRequired(expr));
Assert.AreEqual("(MyType)(-a)", InsertReadable(expr));
}
[Test]
public void TrickyCast3()
{
Expression expr = new UnaryOperatorExpression(
UnaryOperatorType.Not, new IdentifierExpression("a")
).CastTo(new SimpleType("MyType"));
Assert.AreEqual("(MyType)!a", InsertRequired(expr));
Assert.AreEqual("(MyType)(!a)", InsertReadable(expr));
}
[Test]
public void CastAndInvoke()
{
Expression expr = new IdentifierExpression("a")
.CastTo(new PrimitiveType("string"))
.Member("Length");
Assert.AreEqual("((string)a).Length", InsertRequired(expr));
Assert.AreEqual("((string)a).Length", InsertReadable(expr));
}
}
}

2
ICSharpCode.NRefactory.Tests/CSharp/Parser/Expression/CastExpressionTests.cs

@ -133,7 +133,7 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.Expression @@ -133,7 +133,7 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.Expression
public void IntMaxValueToBigInt()
{
CastExpression ce = ParseUtilCSharp.ParseExpression<CastExpression>("(BigInt)int.MaxValue");
Assert.AreEqual("BigInt", ce.CastTo.ToString());
Assert.AreEqual("BigInt", ce.Type.ToString());
Assert.IsTrue(ce.Expression is MemberReferenceExpression);
}
}

2
ICSharpCode.NRefactory/CSharp/Ast/Expressions/CastExpression.cs

@ -35,7 +35,7 @@ namespace ICSharpCode.NRefactory.CSharp @@ -35,7 +35,7 @@ namespace ICSharpCode.NRefactory.CSharp
get { return GetChildByRole (Roles.LPar); }
}
public AstType CastTo {
public AstType Type {
get { return GetChildByRole (Roles.Type); }
set { SetChildByRole (Roles.Type, value); }
}

10
ICSharpCode.NRefactory/CSharp/Ast/Expressions/Expression.cs

@ -107,6 +107,16 @@ namespace ICSharpCode.NRefactory.CSharp @@ -107,6 +107,16 @@ namespace ICSharpCode.NRefactory.CSharp
Arguments = arguments
};
}
public CastExpression CastTo(AstType type)
{
return new CastExpression { Type = type, Expression = this };
}
public AsExpression CastAs(AstType type)
{
return new AsExpression { Type = type, Expression = this };
}
#endregion
}
}

10
ICSharpCode.NRefactory/CSharp/Ast/Expressions/UnaryOperatorExpression.cs

@ -35,6 +35,16 @@ namespace ICSharpCode.NRefactory.CSharp @@ -35,6 +35,16 @@ namespace ICSharpCode.NRefactory.CSharp
{
public readonly static Role<CSharpTokenNode> OperatorRole = BinaryOperatorExpression.OperatorRole;
public UnaryOperatorExpression()
{
}
public UnaryOperatorExpression(UnaryOperatorType op, Expression expression)
{
this.Operator = op;
this.Expression = expression;
}
public UnaryOperatorType Operator {
get;
set;

9
ICSharpCode.NRefactory/CSharp/Ast/PrimitiveType.cs

@ -34,6 +34,15 @@ namespace ICSharpCode.NRefactory.CSharp @@ -34,6 +34,15 @@ namespace ICSharpCode.NRefactory.CSharp
public string Keyword { get; set; }
public AstLocation Location { get; set; }
public PrimitiveType()
{
}
public PrimitiveType(string keyword)
{
this.Keyword = keyword;
}
public override AstLocation StartLocation {
get {
return Location;

9
ICSharpCode.NRefactory/CSharp/Ast/SimpleType.cs

@ -33,6 +33,15 @@ namespace ICSharpCode.NRefactory.CSharp @@ -33,6 +33,15 @@ namespace ICSharpCode.NRefactory.CSharp
{
public class SimpleType : AstType
{
public SimpleType()
{
}
public SimpleType(string identifier)
{
this.Identifier = identifier;
}
public string Identifier {
get {
return GetChildByRole (Roles.Identifier).Name;

2
ICSharpCode.NRefactory/CSharp/OutputVisitor/InsertParenthesesVisitor.cs

@ -147,7 +147,7 @@ namespace ICSharpCode.NRefactory.CSharp @@ -147,7 +147,7 @@ namespace ICSharpCode.NRefactory.CSharp
Parenthesize(castExpression.Expression);
} else {
if (uoe != null && !(uoe.Operator == UnaryOperatorType.BitNot || uoe.Operator == UnaryOperatorType.Not)) {
if (TypeCanBeMisinterpretedAsExpression(castExpression.CastTo)) {
if (TypeCanBeMisinterpretedAsExpression(castExpression.Type)) {
Parenthesize(castExpression.Expression);
}
}

2
ICSharpCode.NRefactory/CSharp/OutputVisitor/OutputVisitor.cs

@ -463,7 +463,7 @@ namespace ICSharpCode.NRefactory.CSharp @@ -463,7 +463,7 @@ namespace ICSharpCode.NRefactory.CSharp
StartNode(castExpression);
LPar();
Space(policy.WithinCastParentheses);
castExpression.CastTo.AcceptVisitor(this, data);
castExpression.Type.AcceptVisitor(this, data);
Space(policy.WithinCastParentheses);
RPar();
Space(policy.SpacesAfterTypecast);

2
ICSharpCode.NRefactory/CSharp/Resolver/ResolveVisitor.cs

@ -541,7 +541,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -541,7 +541,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
public override ResolveResult VisitCastExpression(CastExpression castExpression, object data)
{
if (resolverEnabled) {
return resolver.ResolveCast(ResolveType(castExpression.CastTo), Resolve(castExpression.Expression));
return resolver.ResolveCast(ResolveType(castExpression.Type), Resolve(castExpression.Expression));
} else {
ScanChildren(castExpression);
return null;

Loading…
Cancel
Save