merge from trunk revisions 58933, 58935, 58936
[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.IO;
13 using System.Text;
14
15 using Microsoft.CSharp;
16
17 using NUnit.Framework;
18
19 namespace MonoTests.Microsoft.CSharp
20 {
21         /// <summary>
22         /// Test ICodeGenerator's GenerateCodeFromExpression, along with a 
23         /// minimal set CodeDom components.
24         /// </summary>
25         [TestFixture]
26         public class CodeGeneratorFromExpressionTest
27         {
28                 private CSharpCodeProvider provider;
29                 private ICodeGenerator generator;
30                 private CodeGeneratorOptions options;
31
32                 [SetUp]
33                 public void SetUp ()
34                 {
35                         provider = new CSharpCodeProvider ();
36                         generator = provider.CreateGenerator ();
37                         options = new CodeGeneratorOptions ();
38                 }
39
40                 [Test]
41                 [ExpectedException (typeof (ArgumentException))]
42                 public void DefaultExpressionTest ()
43                 {
44                         using (StringWriter sw = new StringWriter ()) {
45                                 Generate (new CodeExpression (), sw);
46                                 sw.Close ();
47                         }
48                 }
49
50                 [Test]
51                 [ExpectedException (typeof (ArgumentNullException))]
52                 public void NullExpressionTest ()
53                 {
54                         using (StringWriter sw = new StringWriter ()) {
55                                 Generate (null, sw);
56                         }
57                 }
58
59                 [Test]
60                 public void TypeReferenceExpressionTest ()
61                 {
62                         StringBuilder sb = new StringBuilder ();
63
64                         using (StringWriter sw = new StringWriter (sb)) {
65                                 Assert.AreEqual ("bool", Generate (new CodeTypeReferenceExpression (typeof (bool)), sw), "#1");
66                                 sb.Length = 0;
67                                 Assert.AreEqual ("char", Generate (new CodeTypeReferenceExpression (typeof (char)), sw), "#2");
68                                 sb.Length = 0;
69                                 Assert.AreEqual (typeof(DateTime).FullName, Generate (new CodeTypeReferenceExpression (typeof (DateTime)), sw), "#3");
70                                 sb.Length = 0;
71                                 Assert.AreEqual ("short", Generate (new CodeTypeReferenceExpression (typeof (short)), sw), "#4");
72                                 sb.Length = 0;
73                                 Assert.AreEqual ("int", Generate (new CodeTypeReferenceExpression (typeof (int)), sw), "#5");
74                                 sb.Length = 0;
75                                 Assert.AreEqual ("long", Generate (new CodeTypeReferenceExpression (typeof (long)), sw), "#6");
76                                 sb.Length = 0;
77                                 Assert.AreEqual ("object", Generate (new CodeTypeReferenceExpression (typeof (object)), sw), "#7");
78                                 sb.Length = 0;
79                                 Assert.AreEqual ("void", Generate (new CodeTypeReferenceExpression (typeof (void)), sw), "#8");
80                                 sb.Length = 0;
81                                 Assert.AreEqual ("void", Generate (new CodeTypeReferenceExpression ((string) null), sw), "#9");
82                                 sb.Length = 0;
83                                 Assert.AreEqual ("void", Generate (new CodeTypeReferenceExpression (""), sw), "#10");
84                                 sb.Length = 0;
85 #if NET_2_0
86                                 Assert.AreEqual ("byte", Generate (new CodeTypeReferenceExpression (typeof (byte)), sw), "#11");
87                                 sb.Length = 0;
88                                 Assert.AreEqual ("decimal", Generate (new CodeTypeReferenceExpression (typeof (decimal)), sw), "#12");
89                                 sb.Length = 0;
90                                 Assert.AreEqual ("double", Generate (new CodeTypeReferenceExpression (typeof (double)), sw), "#13");
91                                 sb.Length = 0;
92                                 Assert.AreEqual ("sbyte", Generate (new CodeTypeReferenceExpression (typeof (sbyte)), sw), "#14");
93                                 sb.Length = 0;
94                                 Assert.AreEqual ("ushort", Generate (new CodeTypeReferenceExpression (typeof (ushort)), sw), "#15");
95                                 sb.Length = 0;
96                                 Assert.AreEqual ("uint", Generate (new CodeTypeReferenceExpression (typeof (uint)), sw), "#16");
97                                 sb.Length = 0;
98                                 Assert.AreEqual ("ulong", Generate (new CodeTypeReferenceExpression (typeof (ulong)), sw), "#17");
99                                 sb.Length = 0;
100                                 Assert.AreEqual ("float", Generate (new CodeTypeReferenceExpression (typeof (float)), sw), "#18");
101                                 sb.Length = 0;
102 #else
103                                 Assert.AreEqual (typeof (byte).FullName, Generate (new CodeTypeReferenceExpression (typeof (byte)), sw), "#19");
104                                 sb.Length = 0;
105                                 Assert.AreEqual (typeof (decimal).FullName, Generate (new CodeTypeReferenceExpression (typeof (decimal)), sw), "#20");
106                                 sb.Length = 0;
107                                 Assert.AreEqual (typeof (double).FullName, Generate (new CodeTypeReferenceExpression (typeof (double)), sw), "#21");
108                                 sb.Length = 0;
109                                 Assert.AreEqual (typeof (sbyte).FullName, Generate (new CodeTypeReferenceExpression (typeof (sbyte)), sw), "#22");
110                                 sb.Length = 0;
111                                 Assert.AreEqual (typeof (ushort).FullName, Generate (new CodeTypeReferenceExpression (typeof (ushort)), sw), "#23");
112                                 sb.Length = 0;
113                                 Assert.AreEqual (typeof (uint).FullName, Generate (new CodeTypeReferenceExpression (typeof (uint)), sw), "#24");
114                                 sb.Length = 0;
115                                 Assert.AreEqual (typeof (ulong).FullName, Generate (new CodeTypeReferenceExpression (typeof (ulong)), sw), "#25");
116                                 sb.Length = 0;
117                                 Assert.AreEqual (typeof (float).FullName, Generate (new CodeTypeReferenceExpression (typeof (float)), sw), "#26");
118                                 sb.Length = 0;
119 #endif
120                                 sw.Close ();
121                         }
122                 }
123
124                 private string Generate (CodeExpression expression, StringWriter sw)
125                 {
126                         generator.GenerateCodeFromExpression (expression, sw, options);
127                         return sw.ToString ();
128                 }
129         }
130 }