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");
240 [ExpectedException (typeof (ArgumentException))]
242 public void PrimitiveExpressionTest_SByte ()
244 StringBuilder sb = new StringBuilder ();
246 using (StringWriter sw = new StringWriter (sb)) {
247 Assert.AreEqual ("CSByte(5)", Generate (new CodePrimitiveExpression ((sbyte) 5), sw));
254 [ExpectedException (typeof (ArgumentException))]
256 public void PrimitiveExpressionTest_UInt16 ()
258 StringBuilder sb = new StringBuilder ();
260 using (StringWriter sw = new StringWriter (sb)) {
261 Assert.AreEqual ("5US", Generate (new CodePrimitiveExpression ((ushort) 5), sw));
268 [ExpectedException (typeof (ArgumentException))]
270 public void PrimitiveExpressionTest_UInt32 ()
272 StringBuilder sb = new StringBuilder ();
274 using (StringWriter sw = new StringWriter (sb)) {
275 Assert.AreEqual ("5UI", Generate (new CodePrimitiveExpression ((uint) 5), sw));
282 [ExpectedException (typeof (ArgumentException))]
284 public void PrimitiveExpressionTest_UInt64 ()
286 StringBuilder sb = new StringBuilder ();
288 using (StringWriter sw = new StringWriter (sb)) {
289 Assert.AreEqual ("5UL", Generate (new CodePrimitiveExpression ((ulong) 5), sw));
295 public void ParameterDeclarationExpressionTest ()
297 CodeParameterDeclarationExpression cpde = null;
299 StringBuilder sb = new StringBuilder();
301 using (StringWriter sw = new StringWriter (sb)) {
302 cpde = new CodeParameterDeclarationExpression ();
303 Assert.AreEqual ("ByVal __exception As System.Void", Generate (cpde, sw), "#1");
306 cpde = new CodeParameterDeclarationExpression ((string) null,
308 Assert.AreEqual ("ByVal __exception As System.Void", Generate (cpde, sw), "#2");
311 cpde = new CodeParameterDeclarationExpression ("A", (string) null);
312 Assert.AreEqual ("ByVal __exception As A", Generate (cpde, sw), "#3");
315 cpde = new CodeParameterDeclarationExpression ((string) null, "B");
316 Assert.AreEqual ("ByVal B As System.Void", Generate (cpde, sw), "#4");
319 cpde = new CodeParameterDeclarationExpression ("A", "B");
320 Assert.AreEqual ("ByVal B As A", Generate (cpde, sw), "#5");
323 cpde.Direction = FieldDirection.Out;
324 Assert.AreEqual ("ByRef B As A", Generate (cpde, sw), "#6");
327 cpde.Direction = FieldDirection.Ref;
328 Assert.AreEqual ("ByRef B As A", Generate (cpde, sw), "#7");
333 private string Generate (CodeExpression expression, StringWriter sw)
335 generator.GenerateCodeFromExpression (expression, sw, options);
336 return sw.ToString ();
341 public void ArrayCreateExpressionTest ()
345 sb = new StringBuilder ();
346 using (StringWriter sw = new StringWriter (sb)) {
347 Assert.AreEqual ("New Integer() {5}",
348 Generate (new CodeArrayCreateExpression(
350 new CodeExpression [] {
351 new CodePrimitiveExpression (5)
357 sb = new StringBuilder ();
358 using (StringWriter sw = new StringWriter (sb)) {
359 Assert.AreEqual ("New Integer((5) - 1) {}",
360 Generate (new CodeArrayCreateExpression(
362 new CodePrimitiveExpression (5))
367 sb = new StringBuilder ();
368 using (StringWriter sw = new StringWriter (sb)) {
369 Assert.AreEqual ("New String() {\"a\", \"b\", \"c\"}",
370 Generate (new CodeArrayCreateExpression(
372 new CodeExpression [] {
373 new CodePrimitiveExpression ("a"),
374 new CodePrimitiveExpression ("b"),
375 new CodePrimitiveExpression ("c"),
383 public void EscapedIdentifierTest ()
388 sb = new StringBuilder ();
389 using (StringWriter sw = new StringWriter (sb)) {
390 code = Generate (new CodeVariableReferenceExpression ("set"), sw);
391 Assert.AreEqual ("[set]", code, "#01");
395 sb = new StringBuilder ();
396 using (StringWriter sw = new StringWriter (sb)) {
397 code = Generate (new CodeTypeReferenceExpression ("set"), sw);
398 Assert.AreEqual ("[set]", code, "#02");
402 sb = new StringBuilder ();
403 using (StringWriter sw = new StringWriter (sb)) {
404 code = Generate (new CodePropertyReferenceExpression (null, "set"), sw);
405 Assert.AreEqual ("[set]", code, "#03");
409 sb = new StringBuilder ();
410 using (StringWriter sw = new StringWriter (sb)) {
411 code = Generate (new CodeMethodReferenceExpression (null, "set"), sw);
412 Assert.AreEqual ("[set]", code, "#04");
416 sb = new StringBuilder ();
417 using (StringWriter sw = new StringWriter (sb)) {
418 code = Generate (new CodeFieldReferenceExpression (null, "set"), sw);
419 Assert.AreEqual ("[set]", code, "#05");
423 sb = new StringBuilder ();
424 using (StringWriter sw = new StringWriter (sb)) {
425 code = Generate (new CodeEventReferenceExpression (null, "set"), sw);
426 Assert.AreEqual ("setEvent", code, "#06");
432 public void EventReferenceTest ()
437 sb = new StringBuilder ();
438 using (StringWriter sw = new StringWriter (sb)) {
439 code = Generate (new CodeEventReferenceExpression (null, null), sw);
440 Assert.AreEqual ("[Event]", code, "#01");
443 sb = new StringBuilder ();
444 using (StringWriter sw = new StringWriter (sb)) {
445 code = Generate (new CodeEventReferenceExpression (null, "abc"), sw);
446 Assert.AreEqual ("abcEvent", code, "#02");
449 sb = new StringBuilder ();
450 using (StringWriter sw = new StringWriter (sb)) {
451 code = Generate (new CodeEventReferenceExpression (new CodeThisReferenceExpression (), null), sw);
452 Assert.AreEqual ("Me.Event", code, "#03");
455 sb = new StringBuilder ();
456 using (StringWriter sw = new StringWriter (sb)) {
457 code = Generate (new CodeEventReferenceExpression (new CodeThisReferenceExpression (), "abc"), sw);
458 Assert.AreEqual ("Me.abcEvent", code, "#04");
461 sb = new StringBuilder ();
462 using (StringWriter sw = new StringWriter (sb)) {
463 code = Generate (new CodeEventReferenceExpression (new CodePrimitiveExpression ("primitive"), null), sw);
464 Assert.AreEqual ("\"primitive\".", code, "#05");
467 sb = new StringBuilder ();
468 using (StringWriter sw = new StringWriter (sb)) {
469 code = Generate (new CodeEventReferenceExpression (new CodePrimitiveExpression ("primitive"), "abc"), sw);
470 Assert.AreEqual ("\"primitive\".abc", code, "#06");
475 public void DelegateInvokeTest ()
480 sb = new StringBuilder ();
481 using (StringWriter sw = new StringWriter (sb)) {
482 code = Generate (new CodeDelegateInvokeExpression (null, new CodePrimitiveExpression ("abc")), sw);
483 Assert.AreEqual ("(\"abc\")", code, "#01");
486 sb = new StringBuilder ();
487 using (StringWriter sw = new StringWriter (sb)) {
488 code = Generate (new CodeDelegateInvokeExpression (new CodeThisReferenceExpression (), new CodePrimitiveExpression ("abc")), sw);
489 Assert.AreEqual ("Me(\"abc\")", code, "#02");
492 sb = new StringBuilder ();
493 using (StringWriter sw = new StringWriter (sb)) {
494 code = Generate (new CodeDelegateInvokeExpression (new CodePrimitiveExpression ("primitive"), new CodePrimitiveExpression ("abc")), sw);
495 Assert.AreEqual ("\"primitive\"(\"abc\")", code, "#03");
498 sb = new StringBuilder ();
499 using (StringWriter sw = new StringWriter (sb)) {
500 code = Generate (new CodeDelegateInvokeExpression (new CodeEventReferenceExpression (new CodeThisReferenceExpression (), "Click"), new CodePrimitiveExpression ("abc")), sw);
501 Assert.AreEqual ("RaiseEvent Click(\"abc\")", code, "#04");
504 sb = new StringBuilder ();
505 using (StringWriter sw = new StringWriter (sb)) {
506 code = Generate (new CodeDelegateInvokeExpression (new CodeEventReferenceExpression (new CodeThisReferenceExpression (), null), new CodePrimitiveExpression ("abc")), sw);
507 Assert.AreEqual ("RaiseEvent (\"abc\")", code, "#05");
510 sb = new StringBuilder ();
511 using (StringWriter sw = new StringWriter (sb)) {
512 code = Generate (new CodeDelegateInvokeExpression (new CodeEventReferenceExpression (new CodePrimitiveExpression ("primitive"), "Click"), new CodePrimitiveExpression ("abc")), sw);
513 Assert.AreEqual ("RaiseEvent \"primitive\".Click(\"abc\")", code, "#06");
516 sb = new StringBuilder ();
517 using (StringWriter sw = new StringWriter (sb)) {
518 code = Generate (new CodeDelegateInvokeExpression (new CodeEventReferenceExpression (new CodePrimitiveExpression ("primitive"), null), new CodePrimitiveExpression ("abc")), sw);
519 Assert.AreEqual ("RaiseEvent \"primitive\".(\"abc\")", code, "#07");