2 // Microsoft.VisualBasic.* Test Cases
5 // Gert Driesen (drieseng@users.sourceforge.net)
13 using System.CodeDom.Compiler;
15 using Microsoft.VisualBasic;
17 using NUnit.Framework;
19 namespace MonoTests.Microsoft.VisualBasic
22 public class CodeGeneratorFromExpressionTest
24 VBCodeProvider provider;
25 ICodeGenerator generator;
26 CodeGeneratorOptions options;
31 provider = new VBCodeProvider ();
32 generator = provider.CreateGenerator ();
33 options = new CodeGeneratorOptions ();
37 [ExpectedException (typeof (ArgumentException))]
38 public void DefaultExpressionTest ()
40 using (StringWriter sw = new StringWriter ()) {
41 Generate(new CodeExpression (), sw);
47 [ExpectedException (typeof (ArgumentNullException))]
48 public void NullExpressionTest ()
50 using (StringWriter sw = new StringWriter ()) {
56 public void TypeReferenceExpressionTest ()
58 StringBuilder sb = new StringBuilder();
60 using (StringWriter sw = new StringWriter (sb)) {
61 Assert.AreEqual ("Boolean", Generate (new CodeTypeReferenceExpression (typeof (bool)), sw), "#1");
63 Assert.AreEqual ("Byte", Generate (new CodeTypeReferenceExpression (typeof (byte)), sw), "#2");
65 Assert.AreEqual ("Char", Generate (new CodeTypeReferenceExpression (typeof (char)), sw), "#3");
67 Assert.AreEqual ("Date", Generate (new CodeTypeReferenceExpression (typeof (DateTime)), sw), "#4");
69 Assert.AreEqual ("Decimal", Generate (new CodeTypeReferenceExpression (typeof (decimal)), sw), "#5");
71 Assert.AreEqual ("Double", Generate (new CodeTypeReferenceExpression (typeof (double)), sw), "#6");
73 Assert.AreEqual ("Short", Generate (new CodeTypeReferenceExpression (typeof (short)), sw), "#7");
75 Assert.AreEqual ("Integer", Generate (new CodeTypeReferenceExpression (typeof (int)), sw), "#8");
77 Assert.AreEqual ("Long", Generate (new CodeTypeReferenceExpression (typeof (long)), sw), "#9");
79 Assert.AreEqual ("Single", Generate (new CodeTypeReferenceExpression (typeof (float)), sw), "#10");
81 Assert.AreEqual ("Object", Generate (new CodeTypeReferenceExpression (typeof (object)), sw), "#11");
83 Assert.AreEqual (typeof (void).FullName, Generate (new CodeTypeReferenceExpression (typeof (void)), sw), "#12");
85 Assert.AreEqual (typeof (void).FullName, Generate (new CodeTypeReferenceExpression ((string) null), sw), "#13");
87 Assert.AreEqual (typeof (void).FullName, Generate (new CodeTypeReferenceExpression (""), sw), "#14");
89 Assert.AreEqual ("SByte", Generate (new CodeTypeReferenceExpression (typeof (sbyte)), sw), "#15");
91 Assert.AreEqual ("UShort", Generate (new CodeTypeReferenceExpression (typeof (ushort)), sw), "#16");
93 Assert.AreEqual ("UInteger", Generate (new CodeTypeReferenceExpression (typeof (uint)), sw), "#17");
95 Assert.AreEqual ("ULong", Generate (new CodeTypeReferenceExpression (typeof (ulong)), sw), "#18");
102 public void PrimitiveExpressionTest ()
104 StringBuilder sb = new StringBuilder ();
106 using (StringWriter sw = new StringWriter (sb)) {
107 Assert.AreEqual ("Nothing", Generate (new CodePrimitiveExpression (null), sw), "#1");
109 Assert.AreEqual ("\"AB\"\"C\"", Generate (new CodePrimitiveExpression ("AB\"C"), sw), "#2");
111 Assert.AreEqual ("5", Generate (new CodePrimitiveExpression ((byte) 5), sw), "#4");
113 Assert.AreEqual ("20", Generate (new CodePrimitiveExpression ((short) 20), sw), "#5");
115 Assert.AreEqual ("243", Generate (new CodePrimitiveExpression (243), sw), "#6");
117 Assert.AreEqual ("434343", Generate (new CodePrimitiveExpression ((long) 434343), sw), "#7");
119 Assert.AreEqual ("6.445!", Generate (new CodePrimitiveExpression ((float) 6.445), sw), "#8");
121 Assert.AreEqual ("5.76", Generate (new CodePrimitiveExpression ((double) 5.76), sw), "#9");
123 Assert.AreEqual ("7.667", Generate (new CodePrimitiveExpression ((decimal) 7.667), sw), "#10");
125 Assert.AreEqual ("true", Generate (new CodePrimitiveExpression (true), sw), "#11");
127 Assert.AreEqual ("false", Generate (new CodePrimitiveExpression (false), sw), "#12");
133 public void ArrayIndexerExpressionTest ()
135 StringBuilder sb = new StringBuilder ();
136 using (StringWriter sw = new StringWriter (sb)) {
137 Assert.AreEqual ("x(5)", Generate (new CodeArrayIndexerExpression(new CodeVariableReferenceExpression("x"), new CodePrimitiveExpression(5)), sw), "#1");
143 public void PrimitiveExpressionTest_Char ()
145 string vbNs = "Global.Microsoft.VisualBasic";
146 StringBuilder sb = new StringBuilder ();
148 using (StringWriter sw = new StringWriter (sb)) {
149 Assert.AreEqual (vbNs + ".ChrW(0)", Generate (new CodePrimitiveExpression ('\0'), sw), "#0");
151 Assert.AreEqual (vbNs + ".ChrW(1)", Generate (new CodePrimitiveExpression ('\x01'), sw), "#1");
153 Assert.AreEqual (vbNs + ".ChrW(2)", Generate (new CodePrimitiveExpression ('\x02'), sw), "#2");
155 Assert.AreEqual (vbNs + ".ChrW(3)", Generate (new CodePrimitiveExpression ('\x03'), sw), "#3");
157 Assert.AreEqual (vbNs + ".ChrW(4)", Generate (new CodePrimitiveExpression ('\x04'), sw), "#4");
159 Assert.AreEqual (vbNs + ".ChrW(5)", Generate (new CodePrimitiveExpression ('\x05'), sw), "#5");
161 Assert.AreEqual (vbNs + ".ChrW(6)", Generate (new CodePrimitiveExpression ('\x06'), sw), "#6");
163 Assert.AreEqual (vbNs + ".ChrW(7)", Generate (new CodePrimitiveExpression ('\a'), sw), "#7");
165 Assert.AreEqual (vbNs + ".ChrW(8)", Generate (new CodePrimitiveExpression ('\b'), sw), "#8");
167 Assert.AreEqual (vbNs + ".ChrW(9)", Generate (new CodePrimitiveExpression ('\t'), sw), "#9");
169 Assert.AreEqual (vbNs + ".ChrW(10)", Generate (new CodePrimitiveExpression ('\n'), sw), "#10");
171 Assert.AreEqual (vbNs + ".ChrW(11)", Generate (new CodePrimitiveExpression ('\v'), sw), "#11");
173 Assert.AreEqual (vbNs + ".ChrW(12)", Generate (new CodePrimitiveExpression ('\f'), sw), "#12");
175 Assert.AreEqual (vbNs + ".ChrW(13)", Generate (new CodePrimitiveExpression ('\r'), sw), "#13");
177 Assert.AreEqual (vbNs + ".ChrW(14)", Generate (new CodePrimitiveExpression ('\x0E'), sw), "#14");
179 Assert.AreEqual (vbNs + ".ChrW(15)", Generate (new CodePrimitiveExpression ('\x0F'), sw), "#15");
181 Assert.AreEqual (vbNs + ".ChrW(16)", Generate (new CodePrimitiveExpression ('\x10'), sw), "#16");
183 Assert.AreEqual (vbNs + ".ChrW(17)", Generate (new CodePrimitiveExpression ('\x11'), sw), "#17");
185 Assert.AreEqual (vbNs + ".ChrW(18)", Generate (new CodePrimitiveExpression ('\x12'), sw), "#18");
187 Assert.AreEqual (vbNs + ".ChrW(19)", Generate (new CodePrimitiveExpression ('\x13'), sw), "#19");
189 Assert.AreEqual (vbNs + ".ChrW(20)", Generate (new CodePrimitiveExpression ('\x14'), sw), "#20");
191 Assert.AreEqual (vbNs + ".ChrW(21)", Generate (new CodePrimitiveExpression ('\x15'), sw), "#21");
193 Assert.AreEqual (vbNs + ".ChrW(22)", Generate (new CodePrimitiveExpression ('\x16'), sw), "#22");
195 Assert.AreEqual (vbNs + ".ChrW(23)", Generate (new CodePrimitiveExpression ('\x17'), sw), "#23");
197 Assert.AreEqual (vbNs + ".ChrW(24)", Generate (new CodePrimitiveExpression ('\x18'), sw), "#24");
199 Assert.AreEqual (vbNs + ".ChrW(25)", Generate (new CodePrimitiveExpression ('\x19'), sw), "#25");
201 Assert.AreEqual (vbNs + ".ChrW(26)", Generate (new CodePrimitiveExpression ('\x1A'), sw), "#26");
203 Assert.AreEqual (vbNs + ".ChrW(27)", Generate (new CodePrimitiveExpression ('\x1B'), sw), "#27");
205 Assert.AreEqual (vbNs + ".ChrW(28)", Generate (new CodePrimitiveExpression ('\x1C'), sw), "#28");
207 Assert.AreEqual (vbNs + ".ChrW(29)", Generate (new CodePrimitiveExpression ('\x1D'), sw), "#29");
209 Assert.AreEqual (vbNs + ".ChrW(30)", Generate (new CodePrimitiveExpression ('\x1E'), sw), "#30");
211 Assert.AreEqual (vbNs + ".ChrW(31)", Generate (new CodePrimitiveExpression ('\x1F'), sw), "#31");
213 Assert.AreEqual (vbNs + ".ChrW(32)", Generate (new CodePrimitiveExpression ('\x20'), sw), "#32");
215 Assert.AreEqual (vbNs + ".ChrW(33)", Generate (new CodePrimitiveExpression ('\x21'), sw), "#33");
217 Assert.AreEqual (vbNs + ".ChrW(34)", Generate (new CodePrimitiveExpression ('"'), sw), "#34");
219 Assert.AreEqual (vbNs + ".ChrW(35)", Generate (new CodePrimitiveExpression ('\x23'), sw), "#35");
221 Assert.AreEqual (vbNs + ".ChrW(36)", Generate (new CodePrimitiveExpression ('\x24'), sw), "#36");
223 Assert.AreEqual (vbNs + ".ChrW(37)", Generate (new CodePrimitiveExpression ('\x25'), sw), "#37");
225 Assert.AreEqual (vbNs + ".ChrW(38)", Generate (new CodePrimitiveExpression ('\x26'), sw), "#38");
227 Assert.AreEqual (vbNs + ".ChrW(39)", Generate (new CodePrimitiveExpression ('\''), sw), "#39");
229 Assert.AreEqual (vbNs + ".ChrW(8232)", Generate (new CodePrimitiveExpression ('\u2028'), sw), "#40");
231 Assert.AreEqual (vbNs + ".ChrW(8233)", Generate (new CodePrimitiveExpression ('\u2029'), sw), "#41");
233 Assert.AreEqual (vbNs + ".ChrW(8240)", Generate (new CodePrimitiveExpression ('\u2030'), sw), "#42");
239 public void PrimitiveExpressionTest_SByte ()
241 StringBuilder sb = new StringBuilder ();
243 using (StringWriter sw = new StringWriter (sb)) {
244 Assert.AreEqual ("CSByte(5)", Generate (new CodePrimitiveExpression ((sbyte) 5), sw));
250 public void PrimitiveExpressionTest_UInt16 ()
252 StringBuilder sb = new StringBuilder ();
254 using (StringWriter sw = new StringWriter (sb)) {
255 Assert.AreEqual ("5US", Generate (new CodePrimitiveExpression ((ushort) 5), sw));
261 public void PrimitiveExpressionTest_UInt32 ()
263 StringBuilder sb = new StringBuilder ();
265 using (StringWriter sw = new StringWriter (sb)) {
266 Assert.AreEqual ("5UI", Generate (new CodePrimitiveExpression ((uint) 5), sw));
272 public void PrimitiveExpressionTest_UInt64 ()
274 StringBuilder sb = new StringBuilder ();
276 using (StringWriter sw = new StringWriter (sb)) {
277 Assert.AreEqual ("5UL", Generate (new CodePrimitiveExpression ((ulong) 5), sw));
283 public void ParameterDeclarationExpressionTest ()
285 CodeParameterDeclarationExpression cpde = null;
287 StringBuilder sb = new StringBuilder();
289 using (StringWriter sw = new StringWriter (sb)) {
290 cpde = new CodeParameterDeclarationExpression ();
291 Assert.AreEqual ("ByVal __exception As System.Void", Generate (cpde, sw), "#1");
294 cpde = new CodeParameterDeclarationExpression ((string) null,
296 Assert.AreEqual ("ByVal __exception As System.Void", Generate (cpde, sw), "#2");
299 cpde = new CodeParameterDeclarationExpression ("A", (string) null);
300 Assert.AreEqual ("ByVal __exception As A", Generate (cpde, sw), "#3");
303 cpde = new CodeParameterDeclarationExpression ((string) null, "B");
304 Assert.AreEqual ("ByVal B As System.Void", Generate (cpde, sw), "#4");
307 cpde = new CodeParameterDeclarationExpression ("A", "B");
308 Assert.AreEqual ("ByVal B As A", Generate (cpde, sw), "#5");
311 cpde.Direction = FieldDirection.Out;
312 Assert.AreEqual ("ByRef B As A", Generate (cpde, sw), "#6");
315 cpde.Direction = FieldDirection.Ref;
316 Assert.AreEqual ("ByRef B As A", Generate (cpde, sw), "#7");
321 private string Generate (CodeExpression expression, StringWriter sw)
323 generator.GenerateCodeFromExpression (expression, sw, options);
324 return sw.ToString ();
329 public void ArrayCreateExpressionTest ()
333 sb = new StringBuilder ();
334 using (StringWriter sw = new StringWriter (sb)) {
335 Assert.AreEqual ("New Integer() {5}",
336 Generate (new CodeArrayCreateExpression(
338 new CodeExpression [] {
339 new CodePrimitiveExpression (5)
345 sb = new StringBuilder ();
346 using (StringWriter sw = new StringWriter (sb)) {
347 Assert.AreEqual ("New Integer((5) - 1) {}",
348 Generate (new CodeArrayCreateExpression(
350 new CodePrimitiveExpression (5))
355 sb = new StringBuilder ();
356 using (StringWriter sw = new StringWriter (sb)) {
357 Assert.AreEqual ("New String() {\"a\", \"b\", \"c\"}",
358 Generate (new CodeArrayCreateExpression(
360 new CodeExpression [] {
361 new CodePrimitiveExpression ("a"),
362 new CodePrimitiveExpression ("b"),
363 new CodePrimitiveExpression ("c"),
371 public void EscapedIdentifierTest ()
376 sb = new StringBuilder ();
377 using (StringWriter sw = new StringWriter (sb)) {
378 code = Generate (new CodeVariableReferenceExpression ("set"), sw);
379 Assert.AreEqual ("[set]", code, "#01");
383 sb = new StringBuilder ();
384 using (StringWriter sw = new StringWriter (sb)) {
385 code = Generate (new CodeTypeReferenceExpression ("set"), sw);
386 Assert.AreEqual ("[set]", code, "#02");
390 sb = new StringBuilder ();
391 using (StringWriter sw = new StringWriter (sb)) {
392 code = Generate (new CodePropertyReferenceExpression (null, "set"), sw);
393 Assert.AreEqual ("[set]", code, "#03");
397 sb = new StringBuilder ();
398 using (StringWriter sw = new StringWriter (sb)) {
399 code = Generate (new CodeMethodReferenceExpression (null, "set"), sw);
400 Assert.AreEqual ("[set]", code, "#04");
404 sb = new StringBuilder ();
405 using (StringWriter sw = new StringWriter (sb)) {
406 code = Generate (new CodeFieldReferenceExpression (null, "set"), sw);
407 Assert.AreEqual ("[set]", code, "#05");
411 sb = new StringBuilder ();
412 using (StringWriter sw = new StringWriter (sb)) {
413 code = Generate (new CodeEventReferenceExpression (null, "set"), sw);
414 Assert.AreEqual ("setEvent", code, "#06");
420 public void EventReferenceTest ()
425 sb = new StringBuilder ();
426 using (StringWriter sw = new StringWriter (sb)) {
427 code = Generate (new CodeEventReferenceExpression (null, null), sw);
428 Assert.AreEqual ("[Event]", code, "#01");
431 sb = new StringBuilder ();
432 using (StringWriter sw = new StringWriter (sb)) {
433 code = Generate (new CodeEventReferenceExpression (null, "abc"), sw);
434 Assert.AreEqual ("abcEvent", code, "#02");
437 sb = new StringBuilder ();
438 using (StringWriter sw = new StringWriter (sb)) {
439 code = Generate (new CodeEventReferenceExpression (new CodeThisReferenceExpression (), null), sw);
440 Assert.AreEqual ("Me.Event", code, "#03");
443 sb = new StringBuilder ();
444 using (StringWriter sw = new StringWriter (sb)) {
445 code = Generate (new CodeEventReferenceExpression (new CodeThisReferenceExpression (), "abc"), sw);
446 Assert.AreEqual ("Me.abcEvent", code, "#04");
449 sb = new StringBuilder ();
450 using (StringWriter sw = new StringWriter (sb)) {
451 code = Generate (new CodeEventReferenceExpression (new CodePrimitiveExpression ("primitive"), null), sw);
452 Assert.AreEqual ("\"primitive\".", code, "#05");
455 sb = new StringBuilder ();
456 using (StringWriter sw = new StringWriter (sb)) {
457 code = Generate (new CodeEventReferenceExpression (new CodePrimitiveExpression ("primitive"), "abc"), sw);
458 Assert.AreEqual ("\"primitive\".abc", code, "#06");
463 public void DelegateInvokeTest ()
468 sb = new StringBuilder ();
469 using (StringWriter sw = new StringWriter (sb)) {
470 code = Generate (new CodeDelegateInvokeExpression (null, new CodePrimitiveExpression ("abc")), sw);
471 Assert.AreEqual ("(\"abc\")", code, "#01");
474 sb = new StringBuilder ();
475 using (StringWriter sw = new StringWriter (sb)) {
476 code = Generate (new CodeDelegateInvokeExpression (new CodeThisReferenceExpression (), new CodePrimitiveExpression ("abc")), sw);
477 Assert.AreEqual ("Me(\"abc\")", code, "#02");
480 sb = new StringBuilder ();
481 using (StringWriter sw = new StringWriter (sb)) {
482 code = Generate (new CodeDelegateInvokeExpression (new CodePrimitiveExpression ("primitive"), new CodePrimitiveExpression ("abc")), sw);
483 Assert.AreEqual ("\"primitive\"(\"abc\")", code, "#03");
486 sb = new StringBuilder ();
487 using (StringWriter sw = new StringWriter (sb)) {
488 code = Generate (new CodeDelegateInvokeExpression (new CodeEventReferenceExpression (new CodeThisReferenceExpression (), "Click"), new CodePrimitiveExpression ("abc")), sw);
489 Assert.AreEqual ("RaiseEvent Click(\"abc\")", code, "#04");
492 sb = new StringBuilder ();
493 using (StringWriter sw = new StringWriter (sb)) {
494 code = Generate (new CodeDelegateInvokeExpression (new CodeEventReferenceExpression (new CodeThisReferenceExpression (), null), new CodePrimitiveExpression ("abc")), sw);
495 Assert.AreEqual ("RaiseEvent (\"abc\")", code, "#05");
498 sb = new StringBuilder ();
499 using (StringWriter sw = new StringWriter (sb)) {
500 code = Generate (new CodeDelegateInvokeExpression (new CodeEventReferenceExpression (new CodePrimitiveExpression ("primitive"), "Click"), new CodePrimitiveExpression ("abc")), sw);
501 Assert.AreEqual ("RaiseEvent \"primitive\".Click(\"abc\")", code, "#06");
504 sb = new StringBuilder ();
505 using (StringWriter sw = new StringWriter (sb)) {
506 code = Generate (new CodeDelegateInvokeExpression (new CodeEventReferenceExpression (new CodePrimitiveExpression ("primitive"), null), new CodePrimitiveExpression ("abc")), sw);
507 Assert.AreEqual ("RaiseEvent \"primitive\".(\"abc\")", code, "#07");