[bcl] Remove more NET_2_0 checks from class libs
[mono.git] / mcs / class / System / Test / Microsoft.CSharp / CodeGeneratorFromExpressionTest.cs
1 //
2 // Microsoft.CSharp.* Test Cases
3 //
4 // Authors:
5 //      Erik LeBel (eriklebel@yahoo.ca)
6 //
7 // (c) 2003 Erik LeBel
8 //
9 using System;
10 using System.CodeDom;
11 using System.CodeDom.Compiler;
12 using System.Globalization;
13 using System.IO;
14 using System.Text;
15
16 using Microsoft.CSharp;
17
18 using NUnit.Framework;
19
20 namespace MonoTests.Microsoft.CSharp
21 {
22         /// <summary>
23         /// Test ICodeGenerator's GenerateCodeFromExpression, along with a 
24         /// minimal set CodeDom components.
25         /// </summary>
26         [TestFixture]
27         public class CodeGeneratorFromExpressionTest
28         {
29                 private CSharpCodeProvider provider;
30                 private ICodeGenerator generator;
31                 private CodeGeneratorOptions options;
32
33                 [SetUp]
34                 public void SetUp ()
35                 {
36                         provider = new CSharpCodeProvider ();
37                         generator = provider.CreateGenerator ();
38                         options = new CodeGeneratorOptions ();
39                 }
40
41                 [Test]
42                 public void DefaultExpressionTest ()
43                 {
44                         using (StringWriter sw = new StringWriter ()) {
45                                 try {
46                                         Generate (new CodeExpression (), sw);
47                                         Assert.Fail ("#1");
48                                 } catch (ArgumentException ex) {
49                                         // Element type System.CodeDom.CodeExpression is not supported
50                                         Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
51                                         Assert.IsNull (ex.InnerException, "#3");
52                                         Assert.IsNotNull (ex.Message, "#4");
53                                         Assert.AreEqual ("e", ex.ParamName, "#5");
54                                 }
55                         }
56                 }
57
58                 [Test]
59                 public void NullExpressionTest ()
60                 {
61                         using (StringWriter sw = new StringWriter ()) {
62                                 try {
63                                         Generate (null, sw);
64                                         Assert.Fail ("#1");
65                                 } catch (ArgumentNullException ex) {
66                                         Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
67                                         Assert.IsNull (ex.InnerException, "#3");
68                                         Assert.IsNotNull (ex.Message, "#4");
69                                         Assert.AreEqual ("e", ex.ParamName, "#5");
70                                 }
71                         }
72                 }
73
74                 [Test]
75                 public void TypeReferenceExpressionTest ()
76                 {
77                         StringBuilder sb = new StringBuilder ();
78
79                         using (StringWriter sw = new StringWriter (sb)) {
80                                 Assert.AreEqual ("bool", Generate (new CodeTypeReferenceExpression (typeof (bool)), sw), "#1");
81                                 sb.Length = 0;
82                                 Assert.AreEqual ("char", Generate (new CodeTypeReferenceExpression (typeof (char)), sw), "#2");
83                                 sb.Length = 0;
84                                 Assert.AreEqual (typeof(DateTime).FullName, Generate (new CodeTypeReferenceExpression (typeof (DateTime)), sw), "#3");
85                                 sb.Length = 0;
86                                 Assert.AreEqual ("short", Generate (new CodeTypeReferenceExpression (typeof (short)), sw), "#4");
87                                 sb.Length = 0;
88                                 Assert.AreEqual ("int", Generate (new CodeTypeReferenceExpression (typeof (int)), sw), "#5");
89                                 sb.Length = 0;
90                                 Assert.AreEqual ("long", Generate (new CodeTypeReferenceExpression (typeof (long)), sw), "#6");
91                                 sb.Length = 0;
92                                 Assert.AreEqual ("object", Generate (new CodeTypeReferenceExpression (typeof (object)), sw), "#7");
93                                 sb.Length = 0;
94                                 Assert.AreEqual ("void", Generate (new CodeTypeReferenceExpression (typeof (void)), sw), "#8");
95                                 sb.Length = 0;
96                                 Assert.AreEqual ("void", Generate (new CodeTypeReferenceExpression ((string) null), sw), "#9");
97                                 sb.Length = 0;
98                                 Assert.AreEqual ("void", Generate (new CodeTypeReferenceExpression (""), sw), "#10");
99                                 sb.Length = 0;
100                                 Assert.AreEqual ("byte", Generate (new CodeTypeReferenceExpression (typeof (byte)), sw), "#11");
101                                 sb.Length = 0;
102                                 Assert.AreEqual ("decimal", Generate (new CodeTypeReferenceExpression (typeof (decimal)), sw), "#12");
103                                 sb.Length = 0;
104                                 Assert.AreEqual ("double", Generate (new CodeTypeReferenceExpression (typeof (double)), sw), "#13");
105                                 sb.Length = 0;
106                                 Assert.AreEqual ("sbyte", Generate (new CodeTypeReferenceExpression (typeof (sbyte)), sw), "#14");
107                                 sb.Length = 0;
108                                 Assert.AreEqual ("ushort", Generate (new CodeTypeReferenceExpression (typeof (ushort)), sw), "#15");
109                                 sb.Length = 0;
110                                 Assert.AreEqual ("uint", Generate (new CodeTypeReferenceExpression (typeof (uint)), sw), "#16");
111                                 sb.Length = 0;
112                                 Assert.AreEqual ("ulong", Generate (new CodeTypeReferenceExpression (typeof (ulong)), sw), "#17");
113                                 sb.Length = 0;
114                                 Assert.AreEqual ("float", Generate (new CodeTypeReferenceExpression (typeof (float)), sw), "#18");
115                                 sb.Length = 0;
116                                 sw.Close ();
117                         }
118                 }
119
120                 [Test]
121                 public void PrimitiveExpressionTest ()
122                 {
123                         StringBuilder sb = new StringBuilder ();
124
125                         using (StringWriter sw = new StringWriter (sb)) {
126                                 Assert.AreEqual ("null", Generate (new CodePrimitiveExpression (null), sw), "#1");
127                                 sb.Length = 0;
128                                 Assert.AreEqual ("\"AB\\\"C\"", Generate (new CodePrimitiveExpression ("AB\"C"), sw), "#2");
129                                 sb.Length = 0;
130                                 Assert.AreEqual ("5", Generate (new CodePrimitiveExpression ((byte) 5), sw), "#4");
131                                 sb.Length = 0;
132                                 Assert.AreEqual ("20", Generate (new CodePrimitiveExpression ((short) 20), sw), "#5");
133                                 sb.Length = 0;
134                                 Assert.AreEqual ("243", Generate (new CodePrimitiveExpression (243), sw), "#6");
135                                 sb.Length = 0;
136                                 Assert.AreEqual ("434343", Generate (new CodePrimitiveExpression ((long) 434343), sw), "#7");
137                                 sb.Length = 0;
138                                 Assert.AreEqual ("6.445F", Generate (new CodePrimitiveExpression ((float) 6.445), sw), "#8");
139                                 sb.Length = 0;
140                                 Assert.AreEqual ("5.76", Generate (new CodePrimitiveExpression ((double) 5.76), sw), "#9");
141                                 sb.Length = 0;
142                                 Assert.AreEqual ("7.667m", Generate (new CodePrimitiveExpression ((decimal) 7.667), sw), "#10");
143                                 sb.Length = 0;
144                                 Assert.AreEqual ("true", Generate (new CodePrimitiveExpression (true), sw), "#11");
145                                 sb.Length = 0;
146                                 Assert.AreEqual ("false", Generate (new CodePrimitiveExpression (false), sw), "#12");
147                                 sw.Close ();
148                         }
149                 }
150
151                 [Test]
152                 public void PrimitiveExpressionTest_Char ()
153                 {
154                         StringBuilder sb = new StringBuilder ();
155
156                         using (StringWriter sw = new StringWriter (sb)) {
157                                 Assert.AreEqual ("'\\0'", Generate (new CodePrimitiveExpression ('\0'), sw), "#0");
158                                 sb.Length = 0;
159                                 Assert.AreEqual ("'\x01'", Generate (new CodePrimitiveExpression ('\x01'), sw), "#1");
160                                 sb.Length = 0;
161                                 Assert.AreEqual ("'\x02'", Generate (new CodePrimitiveExpression ('\x02'), sw), "#2");
162                                 sb.Length = 0;
163                                 Assert.AreEqual ("'\x03'", Generate (new CodePrimitiveExpression ('\x03'), sw), "#3");
164                                 sb.Length = 0;
165                                 Assert.AreEqual ("'\x04'", Generate (new CodePrimitiveExpression ('\x04'), sw), "#4");
166                                 sb.Length = 0;
167                                 Assert.AreEqual ("'\x05'", Generate (new CodePrimitiveExpression ('\x05'), sw), "#5");
168                                 sb.Length = 0;
169                                 Assert.AreEqual ("'\x06'", Generate (new CodePrimitiveExpression ('\x06'), sw), "#6");
170                                 sb.Length = 0;
171                                 Assert.AreEqual ("'\a'", Generate (new CodePrimitiveExpression ('\a'), sw), "#7");
172                                 sb.Length = 0;
173                                 Assert.AreEqual ("'\b'", Generate (new CodePrimitiveExpression ('\b'), sw), "#8");
174                                 sb.Length = 0;
175                                 Assert.AreEqual ("'\\t'", Generate (new CodePrimitiveExpression ('\t'), sw), "#9");
176                                 sb.Length = 0;
177                                 Assert.AreEqual ("'\\n'", Generate (new CodePrimitiveExpression ('\n'), sw), "#10");
178                                 sb.Length = 0;
179                                 Assert.AreEqual ("'\v'", Generate (new CodePrimitiveExpression ('\v'), sw), "#11");
180                                 sb.Length = 0;
181                                 Assert.AreEqual ("'\f'", Generate (new CodePrimitiveExpression ('\f'), sw), "#12");
182                                 sb.Length = 0;
183                                 Assert.AreEqual ("'\\r'", Generate (new CodePrimitiveExpression ('\r'), sw), "#13");
184                                 sb.Length = 0;
185                                 Assert.AreEqual ("'\x0E'", Generate (new CodePrimitiveExpression ('\x0E'), sw), "#14");
186                                 sb.Length = 0;
187                                 Assert.AreEqual ("'\x0F'", Generate (new CodePrimitiveExpression ('\x0F'), sw), "#15");
188                                 sb.Length = 0;
189                                 Assert.AreEqual ("'\x10'", Generate (new CodePrimitiveExpression ('\x10'), sw), "#16");
190                                 sb.Length = 0;
191                                 Assert.AreEqual ("'\x11'", Generate (new CodePrimitiveExpression ('\x11'), sw), "#17");
192                                 sb.Length = 0;
193                                 Assert.AreEqual ("'\x12'", Generate (new CodePrimitiveExpression ('\x12'), sw), "#18");
194                                 sb.Length = 0;
195                                 Assert.AreEqual ("'\x13'", Generate (new CodePrimitiveExpression ('\x13'), sw), "#19");
196                                 sb.Length = 0;
197                                 Assert.AreEqual ("'\x14'", Generate (new CodePrimitiveExpression ('\x14'), sw), "#20");
198                                 sb.Length = 0;
199                                 Assert.AreEqual ("'\x15'", Generate (new CodePrimitiveExpression ('\x15'), sw), "#21");
200                                 sb.Length = 0;
201                                 Assert.AreEqual ("'\x16'", Generate (new CodePrimitiveExpression ('\x16'), sw), "#22");
202                                 sb.Length = 0;
203                                 Assert.AreEqual ("'\x17'", Generate (new CodePrimitiveExpression ('\x17'), sw), "#23");
204                                 sb.Length = 0;
205                                 Assert.AreEqual ("'\x18'", Generate (new CodePrimitiveExpression ('\x18'), sw), "#24");
206                                 sb.Length = 0;
207                                 Assert.AreEqual ("'\x19'", Generate (new CodePrimitiveExpression ('\x19'), sw), "#25");
208                                 sb.Length = 0;
209                                 Assert.AreEqual ("'\x1A'", Generate (new CodePrimitiveExpression ('\x1A'), sw), "#26");
210                                 sb.Length = 0;
211                                 Assert.AreEqual ("'\x1B'", Generate (new CodePrimitiveExpression ('\x1B'), sw), "#27");
212                                 sb.Length = 0;
213                                 Assert.AreEqual ("'\x1C'", Generate (new CodePrimitiveExpression ('\x1C'), sw), "#28");
214                                 sb.Length = 0;
215                                 Assert.AreEqual ("'\x1D'", Generate (new CodePrimitiveExpression ('\x1D'), sw), "#29");
216                                 sb.Length = 0;
217                                 Assert.AreEqual ("'\x1E'", Generate (new CodePrimitiveExpression ('\x1E'), sw), "#30");
218                                 sb.Length = 0;
219                                 Assert.AreEqual ("'\x1F'", Generate (new CodePrimitiveExpression ('\x1F'), sw), "#31");
220                                 sb.Length = 0;
221                                 Assert.AreEqual ("'\x20'", Generate (new CodePrimitiveExpression ('\x20'), sw), "#32");
222                                 sb.Length = 0;
223                                 Assert.AreEqual ("'\x21'", Generate (new CodePrimitiveExpression ('\x21'), sw), "#33");
224                                 sb.Length = 0;
225                                 Assert.AreEqual ("'\\\"'", Generate (new CodePrimitiveExpression ('"'), sw), "#34");
226                                 sb.Length = 0;
227                                 Assert.AreEqual ("'\x23'", Generate (new CodePrimitiveExpression ('\x23'), sw), "#35");
228                                 sb.Length = 0;
229                                 Assert.AreEqual ("'\x24'", Generate (new CodePrimitiveExpression ('\x24'), sw), "#36");
230                                 sb.Length = 0;
231                                 Assert.AreEqual ("'\x25'", Generate (new CodePrimitiveExpression ('\x25'), sw), "#37");
232                                 sb.Length = 0;
233                                 Assert.AreEqual ("'\x26'", Generate (new CodePrimitiveExpression ('\x26'), sw), "#38");
234                                 sb.Length = 0;
235                                 Assert.AreEqual ("'\\''", Generate (new CodePrimitiveExpression ('\''), sw), "#39");
236                                 sb.Length = 0;
237                                 Assert.AreEqual ("'\\u2028'", Generate (new CodePrimitiveExpression ('\u2028'), sw), "#40");
238                                 sb.Length = 0;
239                                 Assert.AreEqual ("'\\u2029'", Generate (new CodePrimitiveExpression ('\u2029'), sw), "#41");
240                                 sb.Length = 0;
241                                 Assert.AreEqual ("'\u2030'", Generate (new CodePrimitiveExpression ('\u2030'), sw), "#42");
242                                 sw.Close ();
243                         }
244                 }
245
246                 [Test]
247 #if ONLY_1_1
248                 [ExpectedException (typeof (ArgumentException))]
249 #endif
250                 public void PrimitiveExpressionTest_SByte ()
251                 {
252                         StringBuilder sb = new StringBuilder ();
253
254                         using (StringWriter sw = new StringWriter (sb)) {
255                                 Assert.AreEqual ("5", Generate (new CodePrimitiveExpression ((sbyte) 5), sw));
256                                 sw.Close ();
257                         }
258                 }
259
260                 [Test]
261 #if ONLY_1_1
262                 [ExpectedException (typeof (ArgumentException))]
263 #endif
264                 public void PrimitiveExpressionTest_UInt16 ()
265                 {
266                         StringBuilder sb = new StringBuilder ();
267
268                         using (StringWriter sw = new StringWriter (sb)) {
269                                 Assert.AreEqual ("5", Generate (new CodePrimitiveExpression ((ushort) 5), sw));
270                                 sw.Close ();
271                         }
272                 }
273
274                 [Test]
275 #if ONLY_1_1
276                 [ExpectedException (typeof (ArgumentException))]
277 #endif
278                 public void PrimitiveExpressionTest_UInt32 ()
279                 {
280                         StringBuilder sb = new StringBuilder ();
281
282                         using (StringWriter sw = new StringWriter (sb)) {
283                                 Assert.AreEqual ("5u", Generate (new CodePrimitiveExpression ((uint) 5), sw));
284                                 sw.Close ();
285                         }
286                 }
287
288                 [Test]
289 #if ONLY_1_1
290                 [ExpectedException (typeof (ArgumentException))]
291 #endif
292                 public void PrimitiveExpressionTest_UInt64 ()
293                 {
294                         StringBuilder sb = new StringBuilder ();
295
296                         using (StringWriter sw = new StringWriter (sb)) {
297                                 Assert.AreEqual ("5ul", Generate (new CodePrimitiveExpression ((ulong) 5), sw));
298                                 sw.Close ();
299                         }
300                 }
301
302                 [Test]
303                 public void ParameterDeclarationExpressionTest ()
304                 {
305                         CodeParameterDeclarationExpression cpde = null;
306
307                         StringBuilder sb = new StringBuilder ();
308
309                         using (StringWriter sw = new StringWriter (sb)) {
310                                 cpde = new CodeParameterDeclarationExpression ();
311                                 Assert.AreEqual ("void ", Generate (cpde, sw), "#1");
312                                 sb.Length = 0;
313
314                                 cpde = new CodeParameterDeclarationExpression ((string) null,
315                                         (string) null);
316                                 Assert.AreEqual ("void ", Generate (cpde, sw), "#2");
317                                 sb.Length = 0;
318
319                                 cpde = new CodeParameterDeclarationExpression ("A", (string) null);
320                                 Assert.AreEqual ("A ", Generate (cpde, sw), "#4");
321                                 sb.Length = 0;
322
323                                 cpde = new CodeParameterDeclarationExpression ((string) null, "B");
324                                 Assert.AreEqual ("void B", Generate (cpde, sw), "#4");
325                                 sb.Length = 0;
326
327                                 cpde = new CodeParameterDeclarationExpression ("A", "B");
328                                 Assert.AreEqual ("A B", Generate (cpde, sw), "#5");
329                                 sb.Length = 0;
330
331                                 cpde.Direction = FieldDirection.Out;
332                                 Assert.AreEqual ("out A B", Generate (cpde, sw), "#6");
333                                 sb.Length = 0;
334
335                                 cpde.Direction = FieldDirection.Ref;
336                                 Assert.AreEqual ("ref A B", Generate (cpde, sw), "#7");
337                                 sb.Length = 0;
338                         }
339                 }
340
341                 [Test]
342                 public void ArrayCreateExpressionTest ()
343                 {
344                         StringBuilder sb;
345
346                         sb = new StringBuilder ();
347                         using (StringWriter sw = new StringWriter (sb)) {
348                                 Assert.AreEqual (
349                                         string.Format (CultureInfo.InvariantCulture,
350                                                 "new int[] {{{0}        5}}",
351                                                 Environment.NewLine),
352                                         Generate (new CodeArrayCreateExpression (
353                                                         typeof (int),
354                                                         new CodeExpression [] {
355                                                                 new CodePrimitiveExpression (5)
356                                                                 })
357                                                 , sw), "#1");
358                         }
359
360                         sb = new StringBuilder ();
361                         using (StringWriter sw = new StringWriter (sb)) {
362                                 Assert.AreEqual ("new int[5]",
363                                         Generate (new CodeArrayCreateExpression (
364                                                         typeof (int),
365                                                         new CodePrimitiveExpression (5))
366                                                 , sw), "#2");
367                         }
368
369                         sb = new StringBuilder ();
370                         using (StringWriter sw = new StringWriter (sb)) {
371                                 Assert.AreEqual (
372                                         string.Format (CultureInfo.InvariantCulture,
373                                                 "new string[] {{{0}" +
374                                                 "        \"a\",{0}" +
375                                                 "        \"b\",{0}" +
376                                                 "        \"c\"}}",
377                                                 Environment.NewLine),
378                                         Generate (new CodeArrayCreateExpression (
379                                                         typeof (string),
380                                                         new CodeExpression [] {
381                                                                 new CodePrimitiveExpression ("a"),
382                                                                 new CodePrimitiveExpression ("b"),
383                                                                 new CodePrimitiveExpression ("c"),
384                                                                 })
385                                                 , sw));
386                                 sw.Close ();
387                         }
388                 }
389
390                 [Test]
391                 public void EscapedIdentifierTest ()
392                 {
393                         StringBuilder sb;
394                         string code;
395
396                         sb = new StringBuilder ();
397                         using (StringWriter sw = new StringWriter (sb)) {
398                                 code = Generate (new CodeVariableReferenceExpression ("using"), sw);
399                                 Assert.AreEqual ("@using", code, "#1");
400                                 sw.Close ();
401                         }
402
403                         sb = new StringBuilder ();
404                         using (StringWriter sw = new StringWriter (sb)) {
405                                 code = Generate (new CodeTypeReferenceExpression ("using"), sw);
406                                 Assert.AreEqual ("@using", code, "#2");
407                                 sw.Close ();
408                         }
409
410                         sb = new StringBuilder ();
411                         using (StringWriter sw = new StringWriter (sb)) {
412                                 code = Generate (new CodePropertyReferenceExpression (null, "using"), sw);
413                                 Assert.AreEqual ("@using", code, "#3");
414                                 sw.Close ();
415                         }
416
417                         sb = new StringBuilder ();
418                         using (StringWriter sw = new StringWriter (sb)) {
419                                 code = Generate (new CodeMethodReferenceExpression (null, "using"), sw);
420                                 Assert.AreEqual ("@using", code, "#4");
421                                 sw.Close ();
422                         }
423
424                         sb = new StringBuilder ();
425                         using (StringWriter sw = new StringWriter (sb)) {
426                                 code = Generate (new CodeFieldReferenceExpression (null, "using"), sw);
427                                 Assert.AreEqual ("@using", code, "#5");
428                                 sw.Close ();
429                         }
430
431                         sb = new StringBuilder ();
432                         using (StringWriter sw = new StringWriter (sb)) {
433                                 code = Generate (new CodeEventReferenceExpression (null, "using"), sw);
434                                 Assert.AreEqual ("@using", code, "#6");
435                                 sw.Close ();
436                         }
437                 }
438
439                 [Test]
440                 public void EventReferenceTest ()
441                 {
442                         StringBuilder sb;
443                         string code;
444
445                         sb = new StringBuilder ();
446                         using (StringWriter sw = new StringWriter (sb)) {
447                                 code = Generate (new CodeEventReferenceExpression (null, null), sw);
448                                 Assert.AreEqual (string.Empty, code, "#1");
449                         }
450
451                         sb = new StringBuilder ();
452                         using (StringWriter sw = new StringWriter (sb)) {
453                                 code = Generate (new CodeEventReferenceExpression (null, "abc"), sw);
454                                 Assert.AreEqual ("abc", code, "#2");
455                         }
456
457                         sb = new StringBuilder ();
458                         using (StringWriter sw = new StringWriter (sb)) {
459                                 code = Generate (new CodeEventReferenceExpression (new CodeThisReferenceExpression (), null), sw);
460                                 Assert.AreEqual ("this.", code, "#3");
461                         }
462
463                         sb = new StringBuilder ();
464                         using (StringWriter sw = new StringWriter (sb)) {
465                                 code = Generate (new CodeEventReferenceExpression (new CodeThisReferenceExpression (), "abc"), sw);
466                                 Assert.AreEqual ("this.abc", code, "#4");
467                         }
468
469                         sb = new StringBuilder ();
470                         using (StringWriter sw = new StringWriter (sb)) {
471                                 code = Generate (new CodeEventReferenceExpression (new CodePrimitiveExpression ("primitive"), null), sw);
472                                 Assert.AreEqual ("\"primitive\".", code, "#5");
473                         }
474
475                         sb = new StringBuilder ();
476                         using (StringWriter sw = new StringWriter (sb)) {
477                                 code = Generate (new CodeEventReferenceExpression (new CodePrimitiveExpression ("primitive"), "abc"), sw);
478                                 Assert.AreEqual ("\"primitive\".abc", code, "#6");
479                         }
480                 }
481
482                 [Test]
483                 public void DefaultValueExpressionTest ()
484                 {
485                         StringBuilder sb = new StringBuilder ();
486
487                         using (StringWriter sw = new StringWriter (sb)) {
488                                 Assert.AreEqual ("default(string)", Generate (new CodeDefaultValueExpression (new CodeTypeReference (typeof(string))), sw), "#0");
489                                 sb.Length = 0;
490                                 sw.Close ();
491                         }
492                 }
493
494                 [Test]
495                 public void DelegateInvokeTest ()
496                 {
497                         StringBuilder sb;
498                         string code;
499
500                         sb = new StringBuilder ();
501                         using (StringWriter sw = new StringWriter (sb)) {
502                                 code = Generate (new CodeDelegateInvokeExpression (null, new CodePrimitiveExpression ("abc")), sw);
503                                 Assert.AreEqual ("(\"abc\")", code, "#1");
504                         }
505
506                         sb = new StringBuilder ();
507                         using (StringWriter sw = new StringWriter (sb)) {
508                                 code = Generate (new CodeDelegateInvokeExpression (new CodeThisReferenceExpression (), new CodePrimitiveExpression ("abc")), sw);
509                                 Assert.AreEqual ("this(\"abc\")", code, "#2");
510                         }
511
512                         sb = new StringBuilder ();
513                         using (StringWriter sw = new StringWriter (sb)) {
514                                 code = Generate (new CodeDelegateInvokeExpression (new CodePrimitiveExpression ("primitive"), new CodePrimitiveExpression ("abc")), sw);
515                                 Assert.AreEqual ("\"primitive\"(\"abc\")", code, "#3");
516                         }
517
518                         sb = new StringBuilder ();
519                         using (StringWriter sw = new StringWriter (sb)) {
520                                 code = Generate (new CodeDelegateInvokeExpression (new CodeEventReferenceExpression (new CodeThisReferenceExpression (), "Click"), new CodePrimitiveExpression ("abc")), sw);
521                                 Assert.AreEqual ("this.Click(\"abc\")", code, "#4");
522                         }
523
524                         sb = new StringBuilder ();
525                         using (StringWriter sw = new StringWriter (sb)) {
526                                 code = Generate (new CodeDelegateInvokeExpression (new CodeEventReferenceExpression (new CodeThisReferenceExpression (), null), new CodePrimitiveExpression ("abc")), sw);
527                                 Assert.AreEqual ("this.(\"abc\")", code, "#5");
528                         }
529
530                         sb = new StringBuilder ();
531                         using (StringWriter sw = new StringWriter (sb)) {
532                                 code = Generate (new CodeDelegateInvokeExpression (new CodeEventReferenceExpression (new CodePrimitiveExpression ("primitive"), "Click"), new CodePrimitiveExpression ("abc")), sw);
533                                 Assert.AreEqual ("\"primitive\".Click(\"abc\")", code, "#6");
534                         }
535
536                         sb = new StringBuilder ();
537                         using (StringWriter sw = new StringWriter (sb)) {
538                                 code = Generate (new CodeDelegateInvokeExpression (new CodeEventReferenceExpression (new CodePrimitiveExpression ("primitive"), null), new CodePrimitiveExpression ("abc")), sw);
539                                 Assert.AreEqual ("\"primitive\".(\"abc\")", code, "#7");
540                         }
541
542                         sb = new StringBuilder ();
543                         using (StringWriter sw = new StringWriter (sb)) {
544                                 code = Generate (new CodeDelegateInvokeExpression (), sw);
545                                 Assert.AreEqual ("()", code, "#8");
546                         }
547                 }
548
549                 private string Generate (CodeExpression expression, StringWriter sw)
550                 {
551                         generator.GenerateCodeFromExpression (expression, sw, options);
552                         return sw.ToString ();
553                 }
554         }
555 }