From 8daa2ffef7bea052812fdc737fd098bc5c932de9 Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Thu, 5 Jan 2006 18:32:48 +0000 Subject: [PATCH] Fixed bug converting AddHandler statements to C#. git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@968 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- .../Src/Output/CSharp/CSharpOutputVisitor.cs | 2 +- .../NRefactory/Test/NRefactoryTests.csproj | 3 +- .../Output/CSharp/VBToCSharpConverterTest.cs | 93 +++++++++++++++++++ ...rterTest.cs => CSharpToVBConverterTest.cs} | 0 4 files changed, 96 insertions(+), 2 deletions(-) create mode 100644 src/Libraries/NRefactory/Test/Output/CSharp/VBToCSharpConverterTest.cs rename src/Libraries/NRefactory/Test/Output/VBNet/{ConverterTest.cs => CSharpToVBConverterTest.cs} (100%) diff --git a/src/Libraries/NRefactory/Project/Src/Output/CSharp/CSharpOutputVisitor.cs b/src/Libraries/NRefactory/Project/Src/Output/CSharp/CSharpOutputVisitor.cs index cc78dee69b..588fef5861 100644 --- a/src/Libraries/NRefactory/Project/Src/Output/CSharp/CSharpOutputVisitor.cs +++ b/src/Libraries/NRefactory/Project/Src/Output/CSharp/CSharpOutputVisitor.cs @@ -2034,7 +2034,7 @@ namespace ICSharpCode.NRefactory.PrettyPrinter public object Visit(AddressOfExpression addressOfExpression, object data) { // C# 2.0 can reference methods directly - return Visit(addressOfExpression.Expression, data); + return nodeTracker.TrackedVisit(addressOfExpression.Expression, data); } public object Visit(AnonymousMethodExpression anonymousMethodExpression, object data) diff --git a/src/Libraries/NRefactory/Test/NRefactoryTests.csproj b/src/Libraries/NRefactory/Test/NRefactoryTests.csproj index c34c3d78b1..126b94021b 100644 --- a/src/Libraries/NRefactory/Test/NRefactoryTests.csproj +++ b/src/Libraries/NRefactory/Test/NRefactoryTests.csproj @@ -136,7 +136,8 @@ - + + diff --git a/src/Libraries/NRefactory/Test/Output/CSharp/VBToCSharpConverterTest.cs b/src/Libraries/NRefactory/Test/Output/CSharp/VBToCSharpConverterTest.cs new file mode 100644 index 0000000000..e8937f6c7c --- /dev/null +++ b/src/Libraries/NRefactory/Test/Output/CSharp/VBToCSharpConverterTest.cs @@ -0,0 +1,93 @@ +// +// +// +// +// $Revision$ +// + +using System; +using System.Text; +using System.IO; +using NUnit.Framework; +using ICSharpCode.NRefactory.Parser; +using ICSharpCode.NRefactory.Parser.AST; +using ICSharpCode.NRefactory.PrettyPrinter; + +namespace ICSharpCode.NRefactory.Tests.PrettyPrinter +{ + [TestFixture] + public class VBToCSharpConverterTest + { + public void TestProgram(string input, string expectedOutput) + { + IParser parser = ParserFactory.CreateParser(SupportedLanguage.VBNet, new StringReader(input)); + parser.Parse(); + Assert.AreEqual("", parser.Errors.ErrorOutput); + parser.CompilationUnit.AcceptVisitor(new VBNetToCSharpConvertVisitor(), null); + CSharpOutputVisitor outputVisitor = new CSharpOutputVisitor(); + outputVisitor.Visit(parser.CompilationUnit, null); + Assert.AreEqual("", outputVisitor.Errors.ErrorOutput); + Assert.AreEqual(expectedOutput, outputVisitor.Text); + } + + public void TestMember(string input, string expectedOutput) + { + StringBuilder b = new StringBuilder(); + b.AppendLine("class tmp1"); + b.AppendLine("{"); + using (StringReader r = new StringReader(expectedOutput)) { + string line; + while ((line = r.ReadLine()) != null) { + b.Append("\t"); + b.AppendLine(line); + } + } + b.AppendLine("}"); + TestProgram("Class tmp1 \n" + input + "\nEnd Class", b.ToString()); + } + + public void TestStatement(string input, string expectedOutput) + { + StringBuilder b = new StringBuilder(); + b.AppendLine("class tmp1"); + b.AppendLine("{"); + b.AppendLine("\tvoid tmp2()"); + b.AppendLine("\t{"); + using (StringReader r = new StringReader(expectedOutput)) { + string line; + while ((line = r.ReadLine()) != null) { + b.Append("\t\t"); + b.AppendLine(line); + } + } + b.AppendLine("\t}"); + b.AppendLine("}"); + TestProgram("Class tmp1 \n Sub tmp2() \n" + input + "\n End Sub \n End Class", b.ToString()); + } + + [Test] + public void AddHandler() + { + TestStatement("AddHandler someEvent, AddressOf tmp2", + "someEvent += tmp2;"); + TestStatement("AddHandler someEvent, AddressOf Me.tmp2", + "someEvent += this.tmp2;"); + } + + [Test] + public void RemoveHandler() + { + TestStatement("RemoveHandler someEvent, AddressOf tmp2", + "someEvent -= tmp2;"); + TestStatement("RemoveHandler someEvent, AddressOf Me.tmp2", + "someEvent -= this.tmp2;"); + } + + [Test] + public void RaiseEvent() + { + TestStatement("RaiseEvent someEvent(Me, EventArgs.Empty)", + "if (someEvent != null) {\n\tsomeEvent(this, EventArgs.Empty);\n}"); + } + } +} diff --git a/src/Libraries/NRefactory/Test/Output/VBNet/ConverterTest.cs b/src/Libraries/NRefactory/Test/Output/VBNet/CSharpToVBConverterTest.cs similarity index 100% rename from src/Libraries/NRefactory/Test/Output/VBNet/ConverterTest.cs rename to src/Libraries/NRefactory/Test/Output/VBNet/CSharpToVBConverterTest.cs