2
// <copyright see="prj:///doc/copyright.txt"/>
3
// <license see="prj:///doc/license.txt"/>
4
// <owner name="Daniel Grunwald" email="daniel@danielgrunwald.de"/>
5
// <version>$Revision: 1080 $</version>
11
using NUnit.Framework;
12
using ICSharpCode.NRefactory.Parser;
13
using ICSharpCode.NRefactory.Parser.AST;
14
using ICSharpCode.NRefactory.PrettyPrinter;
16
namespace ICSharpCode.NRefactory.Tests.PrettyPrinter
19
public class CSharpToVBConverterTest
21
public void TestProgram(string input, string expectedOutput)
23
IParser parser = ParserFactory.CreateParser(SupportedLanguage.CSharp, new StringReader(input));
25
Assert.AreEqual("", parser.Errors.ErrorOutput);
26
parser.CompilationUnit.AcceptVisitor(new CSharpToVBNetConvertVisitor(), null);
27
VBNetOutputVisitor outputVisitor = new VBNetOutputVisitor();
28
outputVisitor.Visit(parser.CompilationUnit, null);
29
Assert.AreEqual("", outputVisitor.Errors.ErrorOutput);
30
Assert.AreEqual(expectedOutput, outputVisitor.Text);
33
public void TestMember(string input, string expectedOutput)
35
StringBuilder b = new StringBuilder();
36
b.AppendLine("Class tmp1");
37
using (StringReader r = new StringReader(expectedOutput)) {
39
while ((line = r.ReadLine()) != null) {
44
b.AppendLine("End Class");
45
TestProgram("class tmp1 { \n" + input + "\n}", b.ToString());
48
public void TestStatement(string input, string expectedOutput)
50
StringBuilder b = new StringBuilder();
51
b.AppendLine("Class tmp1");
52
b.AppendLine("\tPrivate Sub tmp2()");
53
using (StringReader r = new StringReader(expectedOutput)) {
55
while ((line = r.ReadLine()) != null) {
60
b.AppendLine("\tEnd Sub");
61
b.AppendLine("End Class");
62
TestProgram("class tmp1 { void tmp2() {\n" + input + "\n}}", b.ToString());
66
public void ForWithUnknownConditionAndSingleStatement()
68
TestStatement("for (i = 0; unknownCondition; i++) b[i] = s[i];",
70
"While unknownCondition\n" +
77
public void ForWithUnknownConditionAndBlock()
79
TestStatement("for (i = 0; unknownCondition; i++) { b[i] = s[i]; }",
81
"While unknownCondition\n" +
88
public void ForWithSingleStatement()
90
TestStatement("for (i = 0; i < end; i++) b[i] = s[i];",
91
"For i = 0 To [end] - 1\n" +
96
public void ForWithBlock()
98
TestStatement("for (i = 0; i < end; i++) { b[i] = s[i]; }",
99
"For i = 0 To [end] - 1\n" +
105
public void AddEventHandler()
107
TestStatement("this.button1.Click += new System.EventHandler(this.OnButton1Click);",
108
"AddHandler Me.button1.Click, AddressOf Me.OnButton1Click");
112
public void RemoveEventHandler()
114
TestStatement("this.button1.Click -= new System.EventHandler(this.OnButton1Click);",
115
"RemoveHandler Me.button1.Click, AddressOf Me.OnButton1Click");
119
public void RaiseEvent()
121
TestStatement("if (MyEvent != null) MyEvent(this, EventArgs.Empty);",
122
"RaiseEvent MyEvent(Me, EventArgs.Empty)");
123
TestStatement("if (null != MyEvent) { MyEvent(this, EventArgs.Empty); }",
124
"RaiseEvent MyEvent(Me, EventArgs.Empty)");
128
public void IfStatementSimilarToRaiseEvent()
130
TestStatement("if (FullImage != null) DrawImage();",
131
"If FullImage IsNot Nothing Then\n" +
135
TestStatement("if (FullImage != null) e.DrawImage();",
136
"If FullImage IsNot Nothing Then\n" +
137
"\te.DrawImage()\n" +
140
TestStatement("if (FullImage != null) { DrawImage(); }",
141
"If FullImage IsNot Nothing Then\n" +
144
TestStatement("if (FullImage != null) { e.DrawImage(); }",
145
"If FullImage IsNot Nothing Then\n" +
146
"\te.DrawImage()\n" +
148
// another bug related to the IfStatement code:
149
TestStatement("if (Tiles != null) foreach (Tile t in Tiles) this.TileTray.Controls.Remove(t);",
150
"If Tiles IsNot Nothing Then\n" +
151
"\tFor Each t As Tile In Tiles\n" +
152
"\t\tMe.TileTray.Controls.Remove(t)\n" +
158
public void AnonymousMethod()
160
TestMember("void A() { someEvent += delegate(int argument) { return argument * 2; }; }",
161
"Private Sub A()\n" +
162
"\tAddHandler someEvent, AddressOf ConvertedAnonymousMethod1\n" +
164
"Private Sub ConvertedAnonymousMethod1(ByVal argument As Integer)\n" +
165
"\tReturn argument * 2\n" +
170
public void AnonymousMethodInVarDeclaration()
172
TestMember("void A() { SomeDelegate i = delegate(int argument) { return argument * 2; }; }",
173
"Private Sub A()\n" +
174
"\tDim i As SomeDelegate = AddressOf ConvertedAnonymousMethod1\n" +
176
"Private Sub ConvertedAnonymousMethod1(ByVal argument As Integer)\n" +
177
"\tReturn argument * 2\n" +
182
public void RegisterEvent()
184
TestStatement("someEvent += tmp2;",
185
"AddHandler someEvent, AddressOf tmp2");
186
TestStatement("someEvent += this.tmp2;",
187
"AddHandler someEvent, AddressOf tmp2");
188
TestStatement("someEvent += new SomeDelegate(tmp2);",
189
"AddHandler someEvent, AddressOf tmp2");
190
TestStatement("someEvent += new SomeDelegate(this.tmp2);",
191
"AddHandler someEvent, AddressOf tmp2");
195
public void StaticMethod()
197
TestMember("static void A() {}",
198
"Private Shared Sub A()\nEnd Sub");
202
public void PInvoke()
204
TestMember("[DllImport(\"user32.dll\", CharSet = CharSet.Auto)]\n" +
205
"public static extern int MessageBox(IntPtr hwnd, string t, string caption, UInt32 t2);",
206
"<DllImport(\"user32.dll\", CharSet := CharSet.Auto)> _\n" +
207
"Public Shared Function MessageBox(ByVal hwnd As IntPtr, ByVal t As String, ByVal caption As String, ByVal t2 As UInt32) As Integer\n" +
210
TestMember("[DllImport(\"user32.dll\", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]\n" +
211
"public static extern IntPtr SendMessage(IntPtr hWnd, int Msg, UIntPtr wParam, IntPtr lParam);",
212
"Public Declare Ansi Function SendMessage Lib \"user32.dll\" (ByVal hWnd As IntPtr, ByVal Msg As Integer, ByVal wParam As UIntPtr, ByVal lParam As IntPtr) As IntPtr");
214
TestMember("[DllImport(\"user32.dll\", SetLastError = true, ExactSpelling = true, EntryPoint = \"SendMessageW\")]\n" +
215
"public static extern IntPtr SendMessage(IntPtr hWnd, int Msg, UIntPtr wParam, IntPtr lParam);",
216
"Public Declare Auto Function SendMessage Lib \"user32.dll\" Alias \"SendMessageW\" (ByVal hWnd As IntPtr, ByVal Msg As Integer, ByVal wParam As UIntPtr, ByVal lParam As IntPtr) As IntPtr");
220
public void Constructor()
222
TestMember("public tmp1() : base(1) { }",
223
"Public Sub New()\n\tMyBase.New(1)\nEnd Sub");
224
TestMember("public tmp1() : this(1) { }",
225
"Public Sub New()\n\tMe.New(1)\nEnd Sub");
229
public void Destructor()
231
TestMember("~tmp1() { Dead(); }",
232
"Protected Overrides Sub Finalize()\n" +
236
"\t\tMyBase.Finalize()\n" +
242
public void RenameConflictingNames()
244
TestMember("int count;" +
245
"public int Count { get { return count; } }" +
246
"void Test1(int count) { count = 3; }" +
247
"void Test2() { int count; count = 3; }" +
248
"void Test3() { foreach (int count in someList) { count = 3; } }",
250
"Private m_count As Integer\n" +
251
"Public ReadOnly Property Count() As Integer\n" +
253
"\t\tReturn m_count\n" +
256
"Private Sub Test1(ByVal count As Integer)\n" +
259
"Private Sub Test2()\n" +
260
"\tDim count As Integer\n" +
263
"Private Sub Test3()\n" +
264
"\tFor Each count As Integer In someList\n" +