Browse Source

Enable parser unit tests; ignore those that are broken.

newNRvisualizers
Daniel Grunwald 15 years ago
parent
commit
8703df7bae
  1. 13
      ICSharpCode.NRefactory.Tests/CSharp/Parser/Expression/AnonymousMethodTests.cs
  2. 2
      ICSharpCode.NRefactory.Tests/CSharp/Parser/Expression/ConditionalExpressionTests.cs
  3. 4
      ICSharpCode.NRefactory.Tests/CSharp/Parser/Expression/IdentifierExpressionTests.cs
  4. 14
      ICSharpCode.NRefactory.Tests/CSharp/Parser/Expression/PrimitiveExpressionTests.cs
  5. 2
      ICSharpCode.NRefactory.Tests/CSharp/Parser/Expression/SizeOfExpressionTests.cs
  6. 14
      ICSharpCode.NRefactory.Tests/CSharp/Parser/ParseUtil.cs
  7. 2
      ICSharpCode.NRefactory.Tests/CSharp/Parser/Statements/BlockStatementTests.cs
  8. 8
      ICSharpCode.NRefactory.Tests/CSharp/Parser/Statements/CheckedStatementTests.cs
  9. 4
      ICSharpCode.NRefactory.Tests/CSharp/Parser/Statements/ExpressionStatementTests.cs
  10. 26
      ICSharpCode.NRefactory.Tests/CSharp/Parser/Statements/ForStatementTests.cs
  11. 2
      ICSharpCode.NRefactory.Tests/CSharp/Parser/Statements/GotoStatementTests.cs
  12. 7
      ICSharpCode.NRefactory.Tests/CSharp/Parser/Statements/LabelStatementTests.cs
  13. 4
      ICSharpCode.NRefactory.Tests/CSharp/Parser/TypeMembers/ConstructorDeclarationTests.cs
  14. 2
      ICSharpCode.NRefactory.Tests/CSharp/Parser/TypeMembers/IndexerDeclarationTests.cs
  15. 14
      ICSharpCode.NRefactory.Tests/CSharp/Parser/TypeMembers/MethodDeclarationTests.cs
  16. 8
      ICSharpCode.NRefactory.Tests/CSharp/Parser/TypeMembers/OperatorDeclarationTests.cs
  17. 4
      ICSharpCode.NRefactory.Tests/CSharp/Parser/TypeMembers/PropertyDeclarationTests.cs
  18. 2
      ICSharpCode.NRefactory.Tests/TypeSystem/TypeSystemTests.cs
  19. 2
      ICSharpCode.NRefactory/CSharp/Dom/Expressions/AnonymousMethodExpression.cs
  20. 33
      ICSharpCode.NRefactory/CSharp/Parser/CSharpParser.cs

13
ICSharpCode.NRefactory.Tests/CSharp/Parser/Expression/AnonymousMethodTests.cs

@ -21,7 +21,7 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.Expression @@ -21,7 +21,7 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.Expression
{
AnonymousMethodExpression ame = Parse("delegate {}");
Assert.AreEqual(0, ame.Parameters.Count());
Assert.AreEqual(0, ame.Body.Children.Count());
Assert.AreEqual(0, ame.Body.Statements.Count());
Assert.IsFalse(ame.HasParameterList);
}
@ -29,27 +29,26 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.Expression @@ -29,27 +29,26 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.Expression
public void AnonymousMethodAfterCast()
{
CastExpression c = ParseUtilCSharp.ParseExpression<CastExpression>("(ThreadStart)delegate {}");
Assert.AreEqual("ThreadStart", c.CastTo);
AnonymousMethodExpression ame = (AnonymousMethodExpression)c.Expression;
Assert.AreEqual(0, ame.Parameters.Count());
Assert.AreEqual(0, ame.Body.Children.Count());
Assert.AreEqual(0, ame.Body.Statements.Count());
}
[Test]
[Test, Ignore("Parameter list is broken")]
public void EmptyAnonymousMethod()
{
AnonymousMethodExpression ame = Parse("delegate() {}");
Assert.AreEqual(0, ame.Parameters.Count());
Assert.AreEqual(0, ame.Body.Children.Count());
Assert.AreEqual(0, ame.Body.Statements.Count());
Assert.IsTrue(ame.HasParameterList);
}
[Test]
[Test, Ignore("Parameter list is broken")]
public void SimpleAnonymousMethod()
{
AnonymousMethodExpression ame = Parse("delegate(int a, int b) { return a + b; }");
Assert.AreEqual(2, ame.Parameters.Count());
Assert.AreEqual(1, ame.Body.Children.Count());
Assert.AreEqual(1, ame.Body.Statements.Count());
Assert.IsTrue(ame.Body.Children.First() is ReturnStatement);
}
}

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

@ -30,7 +30,7 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.Expression @@ -30,7 +30,7 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.Expression
Assert.IsTrue(ce.FalseExpression is MemberReferenceExpression);
}
[Test]
[Test, Ignore("crashes the parser")]
public void ConditionalIsWithNullableExpressionTest()
{
ConditionalExpression ce = ParseUtilCSharp.ParseExpression<ConditionalExpression>("a is b? ? a() : a.B");

4
ICSharpCode.NRefactory.Tests/CSharp/Parser/Expression/IdentifierExpressionTests.cs

@ -33,7 +33,7 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.Expression @@ -33,7 +33,7 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.Expression
CheckIdentifier(@"\u006cexer", "lexer");
}
[Test]
[Test, Ignore("Mono parser bug?")]
public void TestIdentifierContainingEscapeSequence()
{
CheckIdentifier(@"l\U00000065xer", "lexer");
@ -45,7 +45,7 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.Expression @@ -45,7 +45,7 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.Expression
CheckIdentifier("@int", "int");
}
[Test]
[Test, Ignore("Mono parser bug?")]
public void TestKeywordWithEscapeSequenceIsIdentifier()
{
CheckIdentifier(@"i\u006et", "int");

14
ICSharpCode.NRefactory.Tests/CSharp/Parser/Expression/PrimitiveExpressionTests.cs

@ -17,7 +17,7 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.Expression @@ -17,7 +17,7 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.Expression
Assert.AreEqual(0, invExpr.Arguments.Count());
Assert.IsTrue(invExpr.Target is MemberReferenceExpression);
MemberReferenceExpression fre = invExpr.Target as MemberReferenceExpression;
Assert.AreEqual("ToString", fre.Identifier);
Assert.AreEqual("ToString", fre.MemberName);
Assert.IsTrue(fre.Target is PrimitiveExpression);
PrimitiveExpression pe = fre.Target as PrimitiveExpression;
@ -45,7 +45,7 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.Expression @@ -45,7 +45,7 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.Expression
CheckLiteral("'\\u0356'", '\u0356');
}
[Test]
[Test, Ignore("this special case isn't implemented yet")]
public void IntMinValueTest()
{
CheckLiteral("-2147483648", -2147483648);
@ -58,7 +58,7 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.Expression @@ -58,7 +58,7 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.Expression
CheckLiteral("2147483648", 2147483648); // uint
}
[Test]
[Test, Ignore("this special case isn't implemented yet")]
public void LongMinValueTest()
{
CheckLiteral("-9223372036854775808", -9223372036854775808);
@ -139,6 +139,14 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.Expression @@ -139,6 +139,14 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.Expression
CheckLiteral("9223372036854775807", 9223372036854775807); // long.MaxValue
CheckLiteral("9223372036854775808", 9223372036854775808); // long.MaxValue+1
CheckLiteral("18446744073709551615", 18446744073709551615); // ulong.MaxValue
}
[Test]
public void TestTooLongInteger()
{
// ulong.MaxValue+1
ParseUtilCSharp.ParseExpression<PrimitiveExpression>("18446744073709551616", expectErrors: true);
CheckLiteral("18446744073709551616f", 18446744073709551616f); // ulong.MaxValue+1 as float
CheckLiteral("18446744073709551616d", 18446744073709551616d); // ulong.MaxValue+1 as double
CheckLiteral("18446744073709551616m", 18446744073709551616m); // ulong.MaxValue+1 as decimal

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

@ -9,7 +9,7 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.Expression @@ -9,7 +9,7 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.Expression
[TestFixture]
public class SizeOfExpressionTests
{
[Test]
[Test, Ignore("type references not implemented yet")]
public void SizeOfExpressionTest()
{
SizeOfExpression soe = ParseUtilCSharp.ParseExpression<SizeOfExpression>("sizeof(MyType)");

14
ICSharpCode.NRefactory.Tests/CSharp/Parser/ParseUtil.cs

@ -28,15 +28,12 @@ namespace ICSharpCode.NRefactory.CSharp.Parser @@ -28,15 +28,12 @@ namespace ICSharpCode.NRefactory.CSharp.Parser
public static T ParseStatement<T>(string stmt, bool expectErrors = false) where T : INode
{
Assert.Ignore("ParseStatement not yet implemented");
CSharpParser parser = new CSharpParser();
BlockStatement parsedBlock = parser.ParseBlock(new StringReader(stmt));
var statements = parser.ParseStatements(new StringReader(stmt));
Assert.AreEqual(expectErrors, parser.HasErrors, "HasErrors");
Assert.AreEqual(1, parsedBlock.Children.Count());
INode statement = parsedBlock.Children.First();
INode statement = statements.Single();
Type type = typeof(T);
Assert.IsTrue(type.IsAssignableFrom(statement.GetType()), String.Format("Parsed statement was {0} instead of {1} ({2})", statement.GetType(), type, statement));
return (T)statement;
@ -44,7 +41,7 @@ namespace ICSharpCode.NRefactory.CSharp.Parser @@ -44,7 +41,7 @@ namespace ICSharpCode.NRefactory.CSharp.Parser
public static T ParseExpression<T>(string expr, bool expectErrors = false) where T : INode
{
Assert.Ignore("ParseExpression not yet implemented");
if (expectErrors) Assert.Ignore("errors not yet implemented");
CSharpParser parser = new CSharpParser();
INode parsedExpression = parser.ParseExpression(new StringReader(expr));
@ -58,15 +55,14 @@ namespace ICSharpCode.NRefactory.CSharp.Parser @@ -58,15 +55,14 @@ namespace ICSharpCode.NRefactory.CSharp.Parser
public static T ParseTypeMember<T>(string expr, bool expectErrors = false) where T : AbstractMemberBase
{
Assert.Ignore("ParseTypeMember not yet implemented");
if (expectErrors) Assert.Ignore("errors not yet implemented");
CSharpParser parser = new CSharpParser();
var members = parser.ParseTypeMembers(new StringReader(expr));
Assert.AreEqual(expectErrors, parser.HasErrors, "HasErrors");
Assert.AreEqual(1, members.Count);
AbstractMemberBase m = members[0];
AbstractMemberBase m = members.Single();
Type type = typeof(T);
Assert.IsTrue(type.IsAssignableFrom(m.GetType()), String.Format("Parsed member was {0} instead of {1} ({2})", m.GetType(), type, m));
return (T)m;

2
ICSharpCode.NRefactory.Tests/CSharp/Parser/Statements/BlockStatementTests.cs

@ -17,7 +17,7 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.Statements @@ -17,7 +17,7 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.Statements
Assert.AreEqual(0, blockStmt.Statements.Count());
}
[Test]
[Test, Ignore("position isn't correct when only parsing a block")]
public void ComplexBlockStatementPositionTest()
{
string code = @"{

8
ICSharpCode.NRefactory.Tests/CSharp/Parser/Statements/CheckedStatementTests.cs

@ -20,9 +20,9 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.Statements @@ -20,9 +20,9 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.Statements
[Test]
public void CheckedStatementAndExpressionTest()
{
CheckedStatement checkedStatement = ParseUtilCSharp.ParseStatement<CheckedStatement>("checked { checked(++i); }");
CheckedStatement checkedStatement = ParseUtilCSharp.ParseStatement<CheckedStatement>("checked { checked(++i).ToString(); }");
ExpressionStatement es = (ExpressionStatement)checkedStatement.Block.Statements.Single();
CheckedExpression ce = (CheckedExpression)es.Expression;
CheckedExpression ce = (CheckedExpression)((MemberReferenceExpression)((InvocationExpression)es.Expression).Target).Target;
Assert.IsTrue(ce.Expression is UnaryOperatorExpression);
}
@ -36,9 +36,9 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.Statements @@ -36,9 +36,9 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.Statements
[Test]
public void UncheckedStatementAndExpressionTest()
{
UncheckedStatement uncheckedStatement = ParseUtilCSharp.ParseStatement<UncheckedStatement>("unchecked { unchecked(++i); }");
UncheckedStatement uncheckedStatement = ParseUtilCSharp.ParseStatement<UncheckedStatement>("unchecked { unchecked(++i).ToString(); }");
ExpressionStatement es = (ExpressionStatement)uncheckedStatement.Block.Statements.Single();
CheckedExpression ce = (CheckedExpression)es.Expression;
UncheckedExpression ce = (UncheckedExpression)((MemberReferenceExpression)((InvocationExpression)es.Expression).Target).Target;
Assert.IsTrue(ce.Expression is UnaryOperatorExpression);
}
}

4
ICSharpCode.NRefactory.Tests/CSharp/Parser/Statements/ExpressionStatementTests.cs

@ -12,8 +12,8 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.Statements @@ -12,8 +12,8 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.Statements
[Test]
public void StatementExpressionTest()
{
ExpressionStatement stmtExprStmt = ParseUtilCSharp.ParseStatement<ExpressionStatement>("my.Obj.PropCall;");
Assert.IsTrue(stmtExprStmt.Expression is MemberReferenceExpression);
ExpressionStatement stmtExprStmt = ParseUtilCSharp.ParseStatement<ExpressionStatement>("a = my.Obj.PropCall;");
Assert.IsTrue(stmtExprStmt.Expression is AssignmentExpression);
}
[Test]

26
ICSharpCode.NRefactory.Tests/CSharp/Parser/Statements/ForStatementTests.cs

@ -17,7 +17,7 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.Statements @@ -17,7 +17,7 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.Statements
// TODO : Extend test.
}
[Test]
[Test, Ignore("for statement is broken when Initializers.Count()!=1")]
public void EmptyForStatementTest()
{
ForStatement forStmt = ParseUtilCSharp.ParseStatement<ForStatement>("for (;;) ;");
@ -31,7 +31,29 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.Statements @@ -31,7 +31,29 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.Statements
public void ForStatementTest()
{
ForStatement forStmt = ParseUtilCSharp.ParseStatement<ForStatement>("for (int i = 5; i < 6; ++i) {} ");
// TODO : Extend test.
var init = (VariableDeclarationStatement)forStmt.Initializers.Single();
Assert.AreEqual("i", init.Variables.Single().Name);
Assert.IsTrue(forStmt.Condition is BinaryOperatorExpression);
var inc = (ExpressionStatement)forStmt.Iterators.Single();
Assert.IsTrue(inc.Expression is UnaryOperatorExpression);
}
[Test, Ignore("for statement is broken when Initializers.Count()!=1")]
public void ForStatementTestMultipleInitializers()
{
ForStatement forStmt = ParseUtilCSharp.ParseStatement<ForStatement>("for (i = 0, j = 1; i < 6; ++i) {} ");
Assert.AreEqual(2, forStmt.Initializers.Count());
Assert.IsTrue(forStmt.Iterators.All(i => i is ExpressionStatement));
}
[Test, Ignore("for statement is broken when Iterators.Count()!=1")]
public void ForStatementTestMultipleIterators()
{
ForStatement forStmt = ParseUtilCSharp.ParseStatement<ForStatement>("for (int i = 5; i < 6; ++i, j--) {} ");
Assert.AreEqual(2, forStmt.Iterators.Count());
Assert.IsTrue(forStmt.Iterators.All(i => i is ExpressionStatement));
}
}
}

2
ICSharpCode.NRefactory.Tests/CSharp/Parser/Statements/GotoStatementTests.cs

@ -10,7 +10,7 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.Statements @@ -10,7 +10,7 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.Statements
[TestFixture]
public class GotoStatementTests
{
[Test]
[Test, Ignore("regular goto statement is broken")]
public void GotoStatementTest()
{
GotoStatement gotoStmt = ParseUtilCSharp.ParseStatement<GotoStatement>("goto myLabel;");

7
ICSharpCode.NRefactory.Tests/CSharp/Parser/Statements/LabelStatementTests.cs

@ -2,6 +2,7 @@ @@ -2,6 +2,7 @@
// This code is distributed under MIT X11 license (for details please see \doc\license.txt)
using System;
using System.Linq;
using NUnit.Framework;
namespace ICSharpCode.NRefactory.CSharp.Parser.Statements
@ -12,14 +13,16 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.Statements @@ -12,14 +13,16 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.Statements
[Test]
public void LabelStatementTest()
{
LabelStatement labelStmt = ParseUtilCSharp.ParseStatement<LabelStatement>("myLabel: ; ");
BlockStatement block = ParseUtilCSharp.ParseStatement<BlockStatement>("{ myLabel: ; }");
LabelStatement labelStmt = (LabelStatement)block.Statements.First();
Assert.AreEqual("myLabel", labelStmt.Label);
}
[Test]
public void Label2StatementTest()
{
LabelStatement labelStmt = ParseUtilCSharp.ParseStatement<LabelStatement>("yield: ; ");
BlockStatement block = ParseUtilCSharp.ParseStatement<BlockStatement>("{ yield: ; }");
LabelStatement labelStmt = (LabelStatement)block.Statements.First();
Assert.AreEqual("yield", labelStmt.Label);
}
}

4
ICSharpCode.NRefactory.Tests/CSharp/Parser/TypeMembers/ConstructorDeclarationTests.cs

@ -17,7 +17,7 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.TypeMembers @@ -17,7 +17,7 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.TypeMembers
Assert.IsNull(cd.Initializer);
}
[Test]
[Test, Ignore("Constructor initializer is broken")]
public void ConstructorDeclarationTest2()
{
ConstructorDeclaration cd = ParseUtilCSharp.ParseTypeMember<ConstructorDeclaration>("MyClass() : this(5) {}");
@ -25,7 +25,7 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.TypeMembers @@ -25,7 +25,7 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.TypeMembers
Assert.AreEqual(1, cd.Initializer.Arguments.Count());
}
[Test]
[Test, Ignore("Constructor initializer is broken")]
public void ConstructorDeclarationTest3()
{
ConstructorDeclaration cd = ParseUtilCSharp.ParseTypeMember<ConstructorDeclaration>("MyClass() : base(1, 2, 3) {}");

2
ICSharpCode.NRefactory.Tests/CSharp/Parser/TypeMembers/IndexerDeclarationTests.cs

@ -19,7 +19,7 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.TypeMembers @@ -19,7 +19,7 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.TypeMembers
Assert.IsNotNull(id.SetAccessor, "No set region found!");
}
[Test]
[Test, Ignore("type reference is not yet implemented")]
public void IndexerImplementingInterfaceTest()
{
IndexerDeclaration id = ParseUtilCSharp.ParseTypeMember<IndexerDeclaration>("int MyInterface.this[int a, string b] { get { } set { } }");

14
ICSharpCode.NRefactory.Tests/CSharp/Parser/TypeMembers/MethodDeclarationTests.cs

@ -10,7 +10,7 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.TypeMembers @@ -10,7 +10,7 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.TypeMembers
[TestFixture]
public class MethodDeclarationTests
{
[Test]
[Test, Ignore("type references not yet implemented")]
public void SimpleMethodDeclarationTest()
{
MethodDeclaration md = ParseUtilCSharp.ParseTypeMember<MethodDeclaration>("void MyMethod() {} ");
@ -19,7 +19,7 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.TypeMembers @@ -19,7 +19,7 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.TypeMembers
Assert.IsFalse(md.IsExtensionMethod);
}
[Test]
[Test, Ignore("type references not yet implemented")]
public void AbstractMethodDeclarationTest()
{
MethodDeclaration md = ParseUtilCSharp.ParseTypeMember<MethodDeclaration>("abstract void MyMethod();");
@ -30,7 +30,7 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.TypeMembers @@ -30,7 +30,7 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.TypeMembers
Assert.AreEqual(Modifiers.Abstract, md.Modifiers);
}
[Test]
[Test, Ignore("type references not yet implemented")]
public void DefiningPartialMethodDeclarationTest()
{
MethodDeclaration md = ParseUtilCSharp.ParseTypeMember<MethodDeclaration>("partial void MyMethod();");
@ -41,7 +41,7 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.TypeMembers @@ -41,7 +41,7 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.TypeMembers
Assert.AreEqual(Modifiers.Partial, md.Modifiers);
}
[Test]
[Test, Ignore("type references not yet implemented")]
public void ImplementingPartialMethodDeclarationTest()
{
MethodDeclaration md = ParseUtilCSharp.ParseTypeMember<MethodDeclaration>("partial void MyMethod() { }");
@ -63,9 +63,9 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.TypeMembers @@ -63,9 +63,9 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.TypeMembers
";
MethodDeclaration md = ParseUtilCSharp.ParseTypeMember<MethodDeclaration>(program);
Assert.AreEqual(2, md.StartLocation.Line, "StartLocation.Y");
Assert.AreEqual(2, md.EndLocation.Line, "EndLocation.Y");
Assert.AreEqual(5, md.EndLocation.Line, "EndLocation.Y");
Assert.AreEqual(3, md.StartLocation.Column, "StartLocation.X");
Assert.AreEqual(18, md.EndLocation.Column, "EndLocation.X");
Assert.AreEqual(4, md.EndLocation.Column, "EndLocation.X");
}
[Test]
@ -79,7 +79,7 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.TypeMembers @@ -79,7 +79,7 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.TypeMembers
";
MethodDeclaration md = ParseUtilCSharp.ParseTypeMember<MethodDeclaration>(program);
Assert.AreEqual(2, md.StartLocation.Line, "StartLocation.Y");
Assert.AreEqual(2, md.EndLocation.Line, "EndLocation.Y");
Assert.AreEqual(5, md.EndLocation.Line, "EndLocation.Y");
Assert.AreEqual(3, md.StartLocation.Column, "StartLocation.X");
}

8
ICSharpCode.NRefactory.Tests/CSharp/Parser/TypeMembers/OperatorDeclarationTests.cs

@ -10,7 +10,7 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.TypeMembers @@ -10,7 +10,7 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.TypeMembers
[TestFixture]
public class OperatorDeclarationTests
{
[Test]
[Test, Ignore("type references not yet implemented")]
public void ImplictOperatorDeclarationTest()
{
OperatorDeclaration od = ParseUtilCSharp.ParseTypeMember<OperatorDeclaration>("public static implicit operator double(MyObject f) { return 0.5d; }");
@ -20,7 +20,7 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.TypeMembers @@ -20,7 +20,7 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.TypeMembers
Assert.AreEqual("op_Implicit", od.Name);
}
[Test]
[Test, Ignore("type references not yet implemented")]
public void ExplicitOperatorDeclarationTest()
{
OperatorDeclaration od = ParseUtilCSharp.ParseTypeMember<OperatorDeclaration>("public static explicit operator double(MyObject f) { return 0.5d; }");
@ -30,7 +30,7 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.TypeMembers @@ -30,7 +30,7 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.TypeMembers
Assert.AreEqual("op_Explicit", od.Name);
}
[Test]
[Test, Ignore("type references not yet implemented")]
public void BinaryPlusOperatorDeclarationTest()
{
OperatorDeclaration od = ParseUtilCSharp.ParseTypeMember<OperatorDeclaration>("public static MyObject operator +(MyObject a, MyObject b) {}");
@ -40,7 +40,7 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.TypeMembers @@ -40,7 +40,7 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.TypeMembers
Assert.AreEqual("op_Addition", od.Name);
}
[Test]
[Test, Ignore("type references not yet implemented")]
public void UnaryPlusOperatorDeclarationTest()
{
OperatorDeclaration od = ParseUtilCSharp.ParseTypeMember<OperatorDeclaration>("public static MyObject operator +(MyObject a) {}");

4
ICSharpCode.NRefactory.Tests/CSharp/Parser/TypeMembers/PropertyDeclarationTests.cs

@ -66,7 +66,7 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.TypeMembers @@ -66,7 +66,7 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.TypeMembers
Assert.AreEqual(new DomLocation(4, code.IndexOf("}\n\t}") + 1 - line4Pos + 1), pd.SetAccessor.Body.EndLocation);
}
[Test]
[Test, Ignore("type references not yet implemented")]
public void PropertyImplementingInterfaceTest()
{
PropertyDeclaration pd = ParseUtilCSharp.ParseTypeMember<PropertyDeclaration>("int MyInterface.MyProperty { get {} } ");
@ -77,7 +77,7 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.TypeMembers @@ -77,7 +77,7 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.TypeMembers
Assert.AreEqual("MyInterface", pd.PrivateImplementationType);
}
[Test, Ignore]
[Test, Ignore("type references not yet implemented")]
public void PropertyImplementingGenericInterfaceTest()
{
PropertyDeclaration pd = ParseUtilCSharp.ParseTypeMember<PropertyDeclaration>("int MyInterface<string>.MyProperty { get {} } ");

2
ICSharpCode.NRefactory.Tests/TypeSystem/TypeSystemTests.cs

@ -193,7 +193,7 @@ namespace ICSharpCode.NRefactory.TypeSystem @@ -193,7 +193,7 @@ namespace ICSharpCode.NRefactory.TypeSystem
Assert.AreEqual(Accessibility.Public, p.Accessibility);
Assert.AreEqual(Accessibility.Public, p.Getter.Accessibility);
Assert.IsFalse(p.CanSet);
Assert.AreEqual(Accessibility.None, p.Setter.Accessibility);
Assert.IsNull(p.Setter);
}
[Test]

2
ICSharpCode.NRefactory/CSharp/Dom/Expressions/AnonymousMethodExpression.cs

@ -46,7 +46,7 @@ namespace ICSharpCode.NRefactory.CSharp @@ -46,7 +46,7 @@ namespace ICSharpCode.NRefactory.CSharp
}
public bool HasParameterList {
get { throw new NotImplementedException(); }
get { return GetChildByRole (Roles.LPar) != null; }
}
public BlockStatement Body {

33
ICSharpCode.NRefactory/CSharp/Parser/CSharpParser.cs

@ -1624,7 +1624,7 @@ namespace ICSharpCode.NRefactory.CSharp @@ -1624,7 +1624,7 @@ namespace ICSharpCode.NRefactory.CSharp
var location = LocationsBag.GetLocations (conditionalExpression);
result.AddChild (new CSharpTokenNode (Convert (conditionalExpression.Location), 1), ConditionalExpression.Roles.QuestionMark);
result.AddChild ((INode)conditionalExpression.TrueExpr.Accept (this), ConditionalExpression.FalseExpressionRole);
result.AddChild ((INode)conditionalExpression.TrueExpr.Accept (this), ConditionalExpression.TrueExpressionRole);
if (location != null)
result.AddChild (new CSharpTokenNode (Convert (location[0]), 1), ConditionalExpression.Roles.Colon);
result.AddChild ((INode)conditionalExpression.FalseExpr.Accept (this), ConditionalExpression.FalseExpressionRole);
@ -2292,16 +2292,26 @@ namespace ICSharpCode.NRefactory.CSharp @@ -2292,16 +2292,26 @@ namespace ICSharpCode.NRefactory.CSharp
}
}
public List<AbstractMemberBase> ParseTypeMembers(TextReader reader)
public IEnumerable<AbstractMemberBase> ParseTypeMembers(TextReader reader)
{
// TODO: add support for type members
throw new NotImplementedException();
string code = "class MyClass { " + reader.ReadToEnd() + "}";
var cu = Parse(new StringReader(code));
var td = cu.Children.FirstOrDefault() as TypeDeclaration;
if (td != null)
return td.Members;
else
return EmptyList<AbstractMemberBase>.Instance;
}
public BlockStatement ParseBlock(TextReader reader)
public IEnumerable<INode> ParseStatements(TextReader reader)
{
// TODO: add support for parsing statement blocks
throw new NotImplementedException();
string code = "void M() { " + reader.ReadToEnd() + "}";
var members = ParseTypeMembers(new StringReader(code));
var method = members.FirstOrDefault() as MethodDeclaration;
if (method != null && method.Body != null)
return method.Body.Statements;
else
return EmptyList<INode>.Instance;
}
public INode ParseTypeReference(TextReader reader)
@ -2312,8 +2322,13 @@ namespace ICSharpCode.NRefactory.CSharp @@ -2312,8 +2322,13 @@ namespace ICSharpCode.NRefactory.CSharp
public INode ParseExpression(TextReader reader)
{
// TODO: add support for parsing expressions
throw new NotImplementedException();
var es = ParseStatements(new StringReader("tmp = " + reader.ReadToEnd() + ";")).FirstOrDefault() as ExpressionStatement;
if (es != null) {
AssignmentExpression ae = es.Expression as AssignmentExpression;
if (ae != null)
return ae.Right;
}
return null;
}
/// <summary>

Loading…
Cancel
Save