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
{ {
AnonymousMethodExpression ame = Parse("delegate {}"); AnonymousMethodExpression ame = Parse("delegate {}");
Assert.AreEqual(0, ame.Parameters.Count()); Assert.AreEqual(0, ame.Parameters.Count());
Assert.AreEqual(0, ame.Body.Children.Count()); Assert.AreEqual(0, ame.Body.Statements.Count());
Assert.IsFalse(ame.HasParameterList); Assert.IsFalse(ame.HasParameterList);
} }
@ -29,27 +29,26 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.Expression
public void AnonymousMethodAfterCast() public void AnonymousMethodAfterCast()
{ {
CastExpression c = ParseUtilCSharp.ParseExpression<CastExpression>("(ThreadStart)delegate {}"); CastExpression c = ParseUtilCSharp.ParseExpression<CastExpression>("(ThreadStart)delegate {}");
Assert.AreEqual("ThreadStart", c.CastTo);
AnonymousMethodExpression ame = (AnonymousMethodExpression)c.Expression; AnonymousMethodExpression ame = (AnonymousMethodExpression)c.Expression;
Assert.AreEqual(0, ame.Parameters.Count()); 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() public void EmptyAnonymousMethod()
{ {
AnonymousMethodExpression ame = Parse("delegate() {}"); AnonymousMethodExpression ame = Parse("delegate() {}");
Assert.AreEqual(0, ame.Parameters.Count()); Assert.AreEqual(0, ame.Parameters.Count());
Assert.AreEqual(0, ame.Body.Children.Count()); Assert.AreEqual(0, ame.Body.Statements.Count());
Assert.IsTrue(ame.HasParameterList); Assert.IsTrue(ame.HasParameterList);
} }
[Test] [Test, Ignore("Parameter list is broken")]
public void SimpleAnonymousMethod() public void SimpleAnonymousMethod()
{ {
AnonymousMethodExpression ame = Parse("delegate(int a, int b) { return a + b; }"); AnonymousMethodExpression ame = Parse("delegate(int a, int b) { return a + b; }");
Assert.AreEqual(2, ame.Parameters.Count()); 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); 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
Assert.IsTrue(ce.FalseExpression is MemberReferenceExpression); Assert.IsTrue(ce.FalseExpression is MemberReferenceExpression);
} }
[Test] [Test, Ignore("crashes the parser")]
public void ConditionalIsWithNullableExpressionTest() public void ConditionalIsWithNullableExpressionTest()
{ {
ConditionalExpression ce = ParseUtilCSharp.ParseExpression<ConditionalExpression>("a is b? ? a() : a.B"); 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
CheckIdentifier(@"\u006cexer", "lexer"); CheckIdentifier(@"\u006cexer", "lexer");
} }
[Test] [Test, Ignore("Mono parser bug?")]
public void TestIdentifierContainingEscapeSequence() public void TestIdentifierContainingEscapeSequence()
{ {
CheckIdentifier(@"l\U00000065xer", "lexer"); CheckIdentifier(@"l\U00000065xer", "lexer");
@ -45,7 +45,7 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.Expression
CheckIdentifier("@int", "int"); CheckIdentifier("@int", "int");
} }
[Test] [Test, Ignore("Mono parser bug?")]
public void TestKeywordWithEscapeSequenceIsIdentifier() public void TestKeywordWithEscapeSequenceIsIdentifier()
{ {
CheckIdentifier(@"i\u006et", "int"); CheckIdentifier(@"i\u006et", "int");

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

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

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

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

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

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

@ -20,9 +20,9 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.Statements
[Test] [Test]
public void CheckedStatementAndExpressionTest() 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(); 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); Assert.IsTrue(ce.Expression is UnaryOperatorExpression);
} }
@ -36,9 +36,9 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.Statements
[Test] [Test]
public void UncheckedStatementAndExpressionTest() 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(); 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); 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
[Test] [Test]
public void StatementExpressionTest() public void StatementExpressionTest()
{ {
ExpressionStatement stmtExprStmt = ParseUtilCSharp.ParseStatement<ExpressionStatement>("my.Obj.PropCall;"); ExpressionStatement stmtExprStmt = ParseUtilCSharp.ParseStatement<ExpressionStatement>("a = my.Obj.PropCall;");
Assert.IsTrue(stmtExprStmt.Expression is MemberReferenceExpression); Assert.IsTrue(stmtExprStmt.Expression is AssignmentExpression);
} }
[Test] [Test]

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

@ -17,7 +17,7 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.Statements
// TODO : Extend test. // TODO : Extend test.
} }
[Test] [Test, Ignore("for statement is broken when Initializers.Count()!=1")]
public void EmptyForStatementTest() public void EmptyForStatementTest()
{ {
ForStatement forStmt = ParseUtilCSharp.ParseStatement<ForStatement>("for (;;) ;"); ForStatement forStmt = ParseUtilCSharp.ParseStatement<ForStatement>("for (;;) ;");
@ -31,7 +31,29 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.Statements
public void ForStatementTest() public void ForStatementTest()
{ {
ForStatement forStmt = ParseUtilCSharp.ParseStatement<ForStatement>("for (int i = 5; i < 6; ++i) {} "); 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
[TestFixture] [TestFixture]
public class GotoStatementTests public class GotoStatementTests
{ {
[Test] [Test, Ignore("regular goto statement is broken")]
public void GotoStatementTest() public void GotoStatementTest()
{ {
GotoStatement gotoStmt = ParseUtilCSharp.ParseStatement<GotoStatement>("goto myLabel;"); GotoStatement gotoStmt = ParseUtilCSharp.ParseStatement<GotoStatement>("goto myLabel;");

7
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) // This code is distributed under MIT X11 license (for details please see \doc\license.txt)
using System; using System;
using System.Linq;
using NUnit.Framework; using NUnit.Framework;
namespace ICSharpCode.NRefactory.CSharp.Parser.Statements namespace ICSharpCode.NRefactory.CSharp.Parser.Statements
@ -12,14 +13,16 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.Statements
[Test] [Test]
public void LabelStatementTest() 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); Assert.AreEqual("myLabel", labelStmt.Label);
} }
[Test] [Test]
public void Label2StatementTest() 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); Assert.AreEqual("yield", labelStmt.Label);
} }
} }

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

@ -17,7 +17,7 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.TypeMembers
Assert.IsNull(cd.Initializer); Assert.IsNull(cd.Initializer);
} }
[Test] [Test, Ignore("Constructor initializer is broken")]
public void ConstructorDeclarationTest2() public void ConstructorDeclarationTest2()
{ {
ConstructorDeclaration cd = ParseUtilCSharp.ParseTypeMember<ConstructorDeclaration>("MyClass() : this(5) {}"); ConstructorDeclaration cd = ParseUtilCSharp.ParseTypeMember<ConstructorDeclaration>("MyClass() : this(5) {}");
@ -25,7 +25,7 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.TypeMembers
Assert.AreEqual(1, cd.Initializer.Arguments.Count()); Assert.AreEqual(1, cd.Initializer.Arguments.Count());
} }
[Test] [Test, Ignore("Constructor initializer is broken")]
public void ConstructorDeclarationTest3() public void ConstructorDeclarationTest3()
{ {
ConstructorDeclaration cd = ParseUtilCSharp.ParseTypeMember<ConstructorDeclaration>("MyClass() : base(1, 2, 3) {}"); 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
Assert.IsNotNull(id.SetAccessor, "No set region found!"); Assert.IsNotNull(id.SetAccessor, "No set region found!");
} }
[Test] [Test, Ignore("type reference is not yet implemented")]
public void IndexerImplementingInterfaceTest() public void IndexerImplementingInterfaceTest()
{ {
IndexerDeclaration id = ParseUtilCSharp.ParseTypeMember<IndexerDeclaration>("int MyInterface.this[int a, string b] { get { } set { } }"); 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
[TestFixture] [TestFixture]
public class MethodDeclarationTests public class MethodDeclarationTests
{ {
[Test] [Test, Ignore("type references not yet implemented")]
public void SimpleMethodDeclarationTest() public void SimpleMethodDeclarationTest()
{ {
MethodDeclaration md = ParseUtilCSharp.ParseTypeMember<MethodDeclaration>("void MyMethod() {} "); MethodDeclaration md = ParseUtilCSharp.ParseTypeMember<MethodDeclaration>("void MyMethod() {} ");
@ -19,7 +19,7 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.TypeMembers
Assert.IsFalse(md.IsExtensionMethod); Assert.IsFalse(md.IsExtensionMethod);
} }
[Test] [Test, Ignore("type references not yet implemented")]
public void AbstractMethodDeclarationTest() public void AbstractMethodDeclarationTest()
{ {
MethodDeclaration md = ParseUtilCSharp.ParseTypeMember<MethodDeclaration>("abstract void MyMethod();"); MethodDeclaration md = ParseUtilCSharp.ParseTypeMember<MethodDeclaration>("abstract void MyMethod();");
@ -30,7 +30,7 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.TypeMembers
Assert.AreEqual(Modifiers.Abstract, md.Modifiers); Assert.AreEqual(Modifiers.Abstract, md.Modifiers);
} }
[Test] [Test, Ignore("type references not yet implemented")]
public void DefiningPartialMethodDeclarationTest() public void DefiningPartialMethodDeclarationTest()
{ {
MethodDeclaration md = ParseUtilCSharp.ParseTypeMember<MethodDeclaration>("partial void MyMethod();"); MethodDeclaration md = ParseUtilCSharp.ParseTypeMember<MethodDeclaration>("partial void MyMethod();");
@ -41,7 +41,7 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.TypeMembers
Assert.AreEqual(Modifiers.Partial, md.Modifiers); Assert.AreEqual(Modifiers.Partial, md.Modifiers);
} }
[Test] [Test, Ignore("type references not yet implemented")]
public void ImplementingPartialMethodDeclarationTest() public void ImplementingPartialMethodDeclarationTest()
{ {
MethodDeclaration md = ParseUtilCSharp.ParseTypeMember<MethodDeclaration>("partial void MyMethod() { }"); MethodDeclaration md = ParseUtilCSharp.ParseTypeMember<MethodDeclaration>("partial void MyMethod() { }");
@ -63,9 +63,9 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.TypeMembers
"; ";
MethodDeclaration md = ParseUtilCSharp.ParseTypeMember<MethodDeclaration>(program); MethodDeclaration md = ParseUtilCSharp.ParseTypeMember<MethodDeclaration>(program);
Assert.AreEqual(2, md.StartLocation.Line, "StartLocation.Y"); 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(3, md.StartLocation.Column, "StartLocation.X");
Assert.AreEqual(18, md.EndLocation.Column, "EndLocation.X"); Assert.AreEqual(4, md.EndLocation.Column, "EndLocation.X");
} }
[Test] [Test]
@ -79,7 +79,7 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.TypeMembers
"; ";
MethodDeclaration md = ParseUtilCSharp.ParseTypeMember<MethodDeclaration>(program); MethodDeclaration md = ParseUtilCSharp.ParseTypeMember<MethodDeclaration>(program);
Assert.AreEqual(2, md.StartLocation.Line, "StartLocation.Y"); 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(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
[TestFixture] [TestFixture]
public class OperatorDeclarationTests public class OperatorDeclarationTests
{ {
[Test] [Test, Ignore("type references not yet implemented")]
public void ImplictOperatorDeclarationTest() public void ImplictOperatorDeclarationTest()
{ {
OperatorDeclaration od = ParseUtilCSharp.ParseTypeMember<OperatorDeclaration>("public static implicit operator double(MyObject f) { return 0.5d; }"); 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
Assert.AreEqual("op_Implicit", od.Name); Assert.AreEqual("op_Implicit", od.Name);
} }
[Test] [Test, Ignore("type references not yet implemented")]
public void ExplicitOperatorDeclarationTest() public void ExplicitOperatorDeclarationTest()
{ {
OperatorDeclaration od = ParseUtilCSharp.ParseTypeMember<OperatorDeclaration>("public static explicit operator double(MyObject f) { return 0.5d; }"); 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
Assert.AreEqual("op_Explicit", od.Name); Assert.AreEqual("op_Explicit", od.Name);
} }
[Test] [Test, Ignore("type references not yet implemented")]
public void BinaryPlusOperatorDeclarationTest() public void BinaryPlusOperatorDeclarationTest()
{ {
OperatorDeclaration od = ParseUtilCSharp.ParseTypeMember<OperatorDeclaration>("public static MyObject operator +(MyObject a, MyObject b) {}"); OperatorDeclaration od = ParseUtilCSharp.ParseTypeMember<OperatorDeclaration>("public static MyObject operator +(MyObject a, MyObject b) {}");
@ -40,7 +40,7 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.TypeMembers
Assert.AreEqual("op_Addition", od.Name); Assert.AreEqual("op_Addition", od.Name);
} }
[Test] [Test, Ignore("type references not yet implemented")]
public void UnaryPlusOperatorDeclarationTest() public void UnaryPlusOperatorDeclarationTest()
{ {
OperatorDeclaration od = ParseUtilCSharp.ParseTypeMember<OperatorDeclaration>("public static MyObject operator +(MyObject a) {}"); 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
Assert.AreEqual(new DomLocation(4, code.IndexOf("}\n\t}") + 1 - line4Pos + 1), pd.SetAccessor.Body.EndLocation); 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() public void PropertyImplementingInterfaceTest()
{ {
PropertyDeclaration pd = ParseUtilCSharp.ParseTypeMember<PropertyDeclaration>("int MyInterface.MyProperty { get {} } "); PropertyDeclaration pd = ParseUtilCSharp.ParseTypeMember<PropertyDeclaration>("int MyInterface.MyProperty { get {} } ");
@ -77,7 +77,7 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.TypeMembers
Assert.AreEqual("MyInterface", pd.PrivateImplementationType); Assert.AreEqual("MyInterface", pd.PrivateImplementationType);
} }
[Test, Ignore] [Test, Ignore("type references not yet implemented")]
public void PropertyImplementingGenericInterfaceTest() public void PropertyImplementingGenericInterfaceTest()
{ {
PropertyDeclaration pd = ParseUtilCSharp.ParseTypeMember<PropertyDeclaration>("int MyInterface<string>.MyProperty { get {} } "); 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
Assert.AreEqual(Accessibility.Public, p.Accessibility); Assert.AreEqual(Accessibility.Public, p.Accessibility);
Assert.AreEqual(Accessibility.Public, p.Getter.Accessibility); Assert.AreEqual(Accessibility.Public, p.Getter.Accessibility);
Assert.IsFalse(p.CanSet); Assert.IsFalse(p.CanSet);
Assert.AreEqual(Accessibility.None, p.Setter.Accessibility); Assert.IsNull(p.Setter);
} }
[Test] [Test]

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

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

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

@ -1624,7 +1624,7 @@ namespace ICSharpCode.NRefactory.CSharp
var location = LocationsBag.GetLocations (conditionalExpression); var location = LocationsBag.GetLocations (conditionalExpression);
result.AddChild (new CSharpTokenNode (Convert (conditionalExpression.Location), 1), ConditionalExpression.Roles.QuestionMark); 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) if (location != null)
result.AddChild (new CSharpTokenNode (Convert (location[0]), 1), ConditionalExpression.Roles.Colon); result.AddChild (new CSharpTokenNode (Convert (location[0]), 1), ConditionalExpression.Roles.Colon);
result.AddChild ((INode)conditionalExpression.FalseExpr.Accept (this), ConditionalExpression.FalseExpressionRole); result.AddChild ((INode)conditionalExpression.FalseExpr.Accept (this), ConditionalExpression.FalseExpressionRole);
@ -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 string code = "class MyClass { " + reader.ReadToEnd() + "}";
throw new NotImplementedException(); 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 string code = "void M() { " + reader.ReadToEnd() + "}";
throw new NotImplementedException(); 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) public INode ParseTypeReference(TextReader reader)
@ -2312,8 +2322,13 @@ namespace ICSharpCode.NRefactory.CSharp
public INode ParseExpression(TextReader reader) public INode ParseExpression(TextReader reader)
{ {
// TODO: add support for parsing expressions var es = ParseStatements(new StringReader("tmp = " + reader.ReadToEnd() + ";")).FirstOrDefault() as ExpressionStatement;
throw new NotImplementedException(); if (es != null) {
AssignmentExpression ae = es.Expression as AssignmentExpression;
if (ae != null)
return ae.Right;
}
return null;
} }
/// <summary> /// <summary>

Loading…
Cancel
Save