From 8703df7bae0c7b961f398ebefc19cf1b558a76cd Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Sun, 21 Nov 2010 17:36:10 +0100 Subject: [PATCH] Enable parser unit tests; ignore those that are broken. --- .../Parser/Expression/AnonymousMethodTests.cs | 13 ++++---- .../Expression/ConditionalExpressionTests.cs | 2 +- .../Expression/IdentifierExpressionTests.cs | 4 +-- .../Expression/PrimitiveExpressionTests.cs | 14 ++++++-- .../Expression/SizeOfExpressionTests.cs | 2 +- .../CSharp/Parser/ParseUtil.cs | 14 +++----- .../Parser/Statements/BlockStatementTests.cs | 2 +- .../Statements/CheckedStatementTests.cs | 8 ++--- .../Statements/ExpressionStatementTests.cs | 4 +-- .../Parser/Statements/ForStatementTests.cs | 26 +++++++++++++-- .../Parser/Statements/GotoStatementTests.cs | 2 +- .../Parser/Statements/LabelStatementTests.cs | 7 ++-- .../ConstructorDeclarationTests.cs | 4 +-- .../TypeMembers/IndexerDeclarationTests.cs | 2 +- .../TypeMembers/MethodDeclarationTests.cs | 14 ++++---- .../TypeMembers/OperatorDeclarationTests.cs | 8 ++--- .../TypeMembers/PropertyDeclarationTests.cs | 4 +-- .../TypeSystem/TypeSystemTests.cs | 2 +- .../Expressions/AnonymousMethodExpression.cs | 2 +- .../CSharp/Parser/CSharpParser.cs | 33 ++++++++++++++----- 20 files changed, 105 insertions(+), 62 deletions(-) diff --git a/ICSharpCode.NRefactory.Tests/CSharp/Parser/Expression/AnonymousMethodTests.cs b/ICSharpCode.NRefactory.Tests/CSharp/Parser/Expression/AnonymousMethodTests.cs index 8de820ba89..90e68d8079 100644 --- a/ICSharpCode.NRefactory.Tests/CSharp/Parser/Expression/AnonymousMethodTests.cs +++ b/ICSharpCode.NRefactory.Tests/CSharp/Parser/Expression/AnonymousMethodTests.cs @@ -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 public void AnonymousMethodAfterCast() { CastExpression c = ParseUtilCSharp.ParseExpression("(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); } } diff --git a/ICSharpCode.NRefactory.Tests/CSharp/Parser/Expression/ConditionalExpressionTests.cs b/ICSharpCode.NRefactory.Tests/CSharp/Parser/Expression/ConditionalExpressionTests.cs index 819b16582d..21c8a5d94e 100644 --- a/ICSharpCode.NRefactory.Tests/CSharp/Parser/Expression/ConditionalExpressionTests.cs +++ b/ICSharpCode.NRefactory.Tests/CSharp/Parser/Expression/ConditionalExpressionTests.cs @@ -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("a is b? ? a() : a.B"); diff --git a/ICSharpCode.NRefactory.Tests/CSharp/Parser/Expression/IdentifierExpressionTests.cs b/ICSharpCode.NRefactory.Tests/CSharp/Parser/Expression/IdentifierExpressionTests.cs index 27ff26b233..6cd54f521b 100644 --- a/ICSharpCode.NRefactory.Tests/CSharp/Parser/Expression/IdentifierExpressionTests.cs +++ b/ICSharpCode.NRefactory.Tests/CSharp/Parser/Expression/IdentifierExpressionTests.cs @@ -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 CheckIdentifier("@int", "int"); } - [Test] + [Test, Ignore("Mono parser bug?")] public void TestKeywordWithEscapeSequenceIsIdentifier() { CheckIdentifier(@"i\u006et", "int"); diff --git a/ICSharpCode.NRefactory.Tests/CSharp/Parser/Expression/PrimitiveExpressionTests.cs b/ICSharpCode.NRefactory.Tests/CSharp/Parser/Expression/PrimitiveExpressionTests.cs index 29fb7d5bcb..9b4b1efcc6 100644 --- a/ICSharpCode.NRefactory.Tests/CSharp/Parser/Expression/PrimitiveExpressionTests.cs +++ b/ICSharpCode.NRefactory.Tests/CSharp/Parser/Expression/PrimitiveExpressionTests.cs @@ -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 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 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 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("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 diff --git a/ICSharpCode.NRefactory.Tests/CSharp/Parser/Expression/SizeOfExpressionTests.cs b/ICSharpCode.NRefactory.Tests/CSharp/Parser/Expression/SizeOfExpressionTests.cs index 23d444ecc5..8512f168d1 100644 --- a/ICSharpCode.NRefactory.Tests/CSharp/Parser/Expression/SizeOfExpressionTests.cs +++ b/ICSharpCode.NRefactory.Tests/CSharp/Parser/Expression/SizeOfExpressionTests.cs @@ -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("sizeof(MyType)"); diff --git a/ICSharpCode.NRefactory.Tests/CSharp/Parser/ParseUtil.cs b/ICSharpCode.NRefactory.Tests/CSharp/Parser/ParseUtil.cs index 731d4e1951..9db072cc78 100644 --- a/ICSharpCode.NRefactory.Tests/CSharp/Parser/ParseUtil.cs +++ b/ICSharpCode.NRefactory.Tests/CSharp/Parser/ParseUtil.cs @@ -28,15 +28,12 @@ namespace ICSharpCode.NRefactory.CSharp.Parser public static T ParseStatement(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 public static T ParseExpression(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 public static T ParseTypeMember(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; diff --git a/ICSharpCode.NRefactory.Tests/CSharp/Parser/Statements/BlockStatementTests.cs b/ICSharpCode.NRefactory.Tests/CSharp/Parser/Statements/BlockStatementTests.cs index 71519b3907..f0fb9885ec 100644 --- a/ICSharpCode.NRefactory.Tests/CSharp/Parser/Statements/BlockStatementTests.cs +++ b/ICSharpCode.NRefactory.Tests/CSharp/Parser/Statements/BlockStatementTests.cs @@ -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 = @"{ diff --git a/ICSharpCode.NRefactory.Tests/CSharp/Parser/Statements/CheckedStatementTests.cs b/ICSharpCode.NRefactory.Tests/CSharp/Parser/Statements/CheckedStatementTests.cs index a99a568b02..b50639ad5b 100644 --- a/ICSharpCode.NRefactory.Tests/CSharp/Parser/Statements/CheckedStatementTests.cs +++ b/ICSharpCode.NRefactory.Tests/CSharp/Parser/Statements/CheckedStatementTests.cs @@ -20,9 +20,9 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.Statements [Test] public void CheckedStatementAndExpressionTest() { - CheckedStatement checkedStatement = ParseUtilCSharp.ParseStatement("checked { checked(++i); }"); + CheckedStatement checkedStatement = ParseUtilCSharp.ParseStatement("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 [Test] public void UncheckedStatementAndExpressionTest() { - UncheckedStatement uncheckedStatement = ParseUtilCSharp.ParseStatement("unchecked { unchecked(++i); }"); + UncheckedStatement uncheckedStatement = ParseUtilCSharp.ParseStatement("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); } } diff --git a/ICSharpCode.NRefactory.Tests/CSharp/Parser/Statements/ExpressionStatementTests.cs b/ICSharpCode.NRefactory.Tests/CSharp/Parser/Statements/ExpressionStatementTests.cs index 7d2e206e21..9489deffc0 100644 --- a/ICSharpCode.NRefactory.Tests/CSharp/Parser/Statements/ExpressionStatementTests.cs +++ b/ICSharpCode.NRefactory.Tests/CSharp/Parser/Statements/ExpressionStatementTests.cs @@ -12,8 +12,8 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.Statements [Test] public void StatementExpressionTest() { - ExpressionStatement stmtExprStmt = ParseUtilCSharp.ParseStatement("my.Obj.PropCall;"); - Assert.IsTrue(stmtExprStmt.Expression is MemberReferenceExpression); + ExpressionStatement stmtExprStmt = ParseUtilCSharp.ParseStatement("a = my.Obj.PropCall;"); + Assert.IsTrue(stmtExprStmt.Expression is AssignmentExpression); } [Test] diff --git a/ICSharpCode.NRefactory.Tests/CSharp/Parser/Statements/ForStatementTests.cs b/ICSharpCode.NRefactory.Tests/CSharp/Parser/Statements/ForStatementTests.cs index e97d4da5ea..6f95ac4932 100644 --- a/ICSharpCode.NRefactory.Tests/CSharp/Parser/Statements/ForStatementTests.cs +++ b/ICSharpCode.NRefactory.Tests/CSharp/Parser/Statements/ForStatementTests.cs @@ -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("for (;;) ;"); @@ -31,7 +31,29 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.Statements public void ForStatementTest() { ForStatement forStmt = ParseUtilCSharp.ParseStatement("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("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("for (int i = 5; i < 6; ++i, j--) {} "); + Assert.AreEqual(2, forStmt.Iterators.Count()); + Assert.IsTrue(forStmt.Iterators.All(i => i is ExpressionStatement)); } } } diff --git a/ICSharpCode.NRefactory.Tests/CSharp/Parser/Statements/GotoStatementTests.cs b/ICSharpCode.NRefactory.Tests/CSharp/Parser/Statements/GotoStatementTests.cs index 100c8481c1..e8db13cb62 100644 --- a/ICSharpCode.NRefactory.Tests/CSharp/Parser/Statements/GotoStatementTests.cs +++ b/ICSharpCode.NRefactory.Tests/CSharp/Parser/Statements/GotoStatementTests.cs @@ -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("goto myLabel;"); diff --git a/ICSharpCode.NRefactory.Tests/CSharp/Parser/Statements/LabelStatementTests.cs b/ICSharpCode.NRefactory.Tests/CSharp/Parser/Statements/LabelStatementTests.cs index 24ccb16dfa..3ce3339fdf 100644 --- a/ICSharpCode.NRefactory.Tests/CSharp/Parser/Statements/LabelStatementTests.cs +++ b/ICSharpCode.NRefactory.Tests/CSharp/Parser/Statements/LabelStatementTests.cs @@ -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 [Test] public void LabelStatementTest() { - LabelStatement labelStmt = ParseUtilCSharp.ParseStatement("myLabel: ; "); + BlockStatement block = ParseUtilCSharp.ParseStatement("{ myLabel: ; }"); + LabelStatement labelStmt = (LabelStatement)block.Statements.First(); Assert.AreEqual("myLabel", labelStmt.Label); } [Test] public void Label2StatementTest() { - LabelStatement labelStmt = ParseUtilCSharp.ParseStatement("yield: ; "); + BlockStatement block = ParseUtilCSharp.ParseStatement("{ yield: ; }"); + LabelStatement labelStmt = (LabelStatement)block.Statements.First(); Assert.AreEqual("yield", labelStmt.Label); } } diff --git a/ICSharpCode.NRefactory.Tests/CSharp/Parser/TypeMembers/ConstructorDeclarationTests.cs b/ICSharpCode.NRefactory.Tests/CSharp/Parser/TypeMembers/ConstructorDeclarationTests.cs index fde562f23a..cb191a5371 100644 --- a/ICSharpCode.NRefactory.Tests/CSharp/Parser/TypeMembers/ConstructorDeclarationTests.cs +++ b/ICSharpCode.NRefactory.Tests/CSharp/Parser/TypeMembers/ConstructorDeclarationTests.cs @@ -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("MyClass() : this(5) {}"); @@ -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("MyClass() : base(1, 2, 3) {}"); diff --git a/ICSharpCode.NRefactory.Tests/CSharp/Parser/TypeMembers/IndexerDeclarationTests.cs b/ICSharpCode.NRefactory.Tests/CSharp/Parser/TypeMembers/IndexerDeclarationTests.cs index 48bc01373d..07486bcfbd 100644 --- a/ICSharpCode.NRefactory.Tests/CSharp/Parser/TypeMembers/IndexerDeclarationTests.cs +++ b/ICSharpCode.NRefactory.Tests/CSharp/Parser/TypeMembers/IndexerDeclarationTests.cs @@ -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("int MyInterface.this[int a, string b] { get { } set { } }"); diff --git a/ICSharpCode.NRefactory.Tests/CSharp/Parser/TypeMembers/MethodDeclarationTests.cs b/ICSharpCode.NRefactory.Tests/CSharp/Parser/TypeMembers/MethodDeclarationTests.cs index 721f6c84e6..f977aff497 100644 --- a/ICSharpCode.NRefactory.Tests/CSharp/Parser/TypeMembers/MethodDeclarationTests.cs +++ b/ICSharpCode.NRefactory.Tests/CSharp/Parser/TypeMembers/MethodDeclarationTests.cs @@ -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("void MyMethod() {} "); @@ -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("abstract void MyMethod();"); @@ -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("partial void MyMethod();"); @@ -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("partial void MyMethod() { }"); @@ -63,9 +63,9 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.TypeMembers "; MethodDeclaration md = ParseUtilCSharp.ParseTypeMember(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 "; MethodDeclaration md = ParseUtilCSharp.ParseTypeMember(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"); } diff --git a/ICSharpCode.NRefactory.Tests/CSharp/Parser/TypeMembers/OperatorDeclarationTests.cs b/ICSharpCode.NRefactory.Tests/CSharp/Parser/TypeMembers/OperatorDeclarationTests.cs index fbc3d5db0a..e2901f54ee 100644 --- a/ICSharpCode.NRefactory.Tests/CSharp/Parser/TypeMembers/OperatorDeclarationTests.cs +++ b/ICSharpCode.NRefactory.Tests/CSharp/Parser/TypeMembers/OperatorDeclarationTests.cs @@ -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("public static implicit operator double(MyObject f) { return 0.5d; }"); @@ -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("public static explicit operator double(MyObject f) { return 0.5d; }"); @@ -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("public static MyObject operator +(MyObject a, MyObject b) {}"); @@ -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("public static MyObject operator +(MyObject a) {}"); diff --git a/ICSharpCode.NRefactory.Tests/CSharp/Parser/TypeMembers/PropertyDeclarationTests.cs b/ICSharpCode.NRefactory.Tests/CSharp/Parser/TypeMembers/PropertyDeclarationTests.cs index 66b0a68168..9b8053b24c 100644 --- a/ICSharpCode.NRefactory.Tests/CSharp/Parser/TypeMembers/PropertyDeclarationTests.cs +++ b/ICSharpCode.NRefactory.Tests/CSharp/Parser/TypeMembers/PropertyDeclarationTests.cs @@ -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("int MyInterface.MyProperty { get {} } "); @@ -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("int MyInterface.MyProperty { get {} } "); diff --git a/ICSharpCode.NRefactory.Tests/TypeSystem/TypeSystemTests.cs b/ICSharpCode.NRefactory.Tests/TypeSystem/TypeSystemTests.cs index 5d7d77bf8a..bf23905417 100644 --- a/ICSharpCode.NRefactory.Tests/TypeSystem/TypeSystemTests.cs +++ b/ICSharpCode.NRefactory.Tests/TypeSystem/TypeSystemTests.cs @@ -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] diff --git a/ICSharpCode.NRefactory/CSharp/Dom/Expressions/AnonymousMethodExpression.cs b/ICSharpCode.NRefactory/CSharp/Dom/Expressions/AnonymousMethodExpression.cs index 9313eeaf0b..deab1059ad 100644 --- a/ICSharpCode.NRefactory/CSharp/Dom/Expressions/AnonymousMethodExpression.cs +++ b/ICSharpCode.NRefactory/CSharp/Dom/Expressions/AnonymousMethodExpression.cs @@ -46,7 +46,7 @@ namespace ICSharpCode.NRefactory.CSharp } public bool HasParameterList { - get { throw new NotImplementedException(); } + get { return GetChildByRole (Roles.LPar) != null; } } public BlockStatement Body { diff --git a/ICSharpCode.NRefactory/CSharp/Parser/CSharpParser.cs b/ICSharpCode.NRefactory/CSharp/Parser/CSharpParser.cs index 9872726752..12c14652e6 100644 --- a/ICSharpCode.NRefactory/CSharp/Parser/CSharpParser.cs +++ b/ICSharpCode.NRefactory/CSharp/Parser/CSharpParser.cs @@ -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 } } - public List ParseTypeMembers(TextReader reader) + public IEnumerable 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.Instance; } - public BlockStatement ParseBlock(TextReader reader) + public IEnumerable 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.Instance; } public INode ParseTypeReference(TextReader reader) @@ -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; } ///