2 // Microsoft.CSharp.* Test Cases
5 // Erik LeBel (eriklebel@yahoo.ca)
11 using System.CodeDom.Compiler;
15 using Microsoft.CSharp;
17 using NUnit.Framework;
19 namespace MonoTests.Microsoft.CSharp
22 /// Test ICodeGenerator's GenerateCodeFromExpression, along with a
23 /// minimal set CodeDom components.
26 public class CodeGeneratorFromExpressionTest
28 private CSharpCodeProvider provider;
29 private ICodeGenerator generator;
30 private CodeGeneratorOptions options;
35 provider = new CSharpCodeProvider ();
36 generator = provider.CreateGenerator ();
37 options = new CodeGeneratorOptions ();
41 [ExpectedException (typeof (ArgumentException))]
42 public void DefaultExpressionTest ()
44 using (StringWriter sw = new StringWriter ()) {
45 Generate (new CodeExpression (), sw);
51 [ExpectedException (typeof (ArgumentNullException))]
52 public void NullExpressionTest ()
54 using (StringWriter sw = new StringWriter ()) {
60 public void TypeReferenceExpressionTest ()
62 StringBuilder sb = new StringBuilder ();
64 using (StringWriter sw = new StringWriter (sb)) {
65 Assert.AreEqual ("bool", Generate (new CodeTypeReferenceExpression (typeof (bool)), sw), "#1");
67 Assert.AreEqual ("char", Generate (new CodeTypeReferenceExpression (typeof (char)), sw), "#2");
69 Assert.AreEqual (typeof(DateTime).FullName, Generate (new CodeTypeReferenceExpression (typeof (DateTime)), sw), "#3");
71 Assert.AreEqual ("short", Generate (new CodeTypeReferenceExpression (typeof (short)), sw), "#4");
73 Assert.AreEqual ("int", Generate (new CodeTypeReferenceExpression (typeof (int)), sw), "#5");
75 Assert.AreEqual ("long", Generate (new CodeTypeReferenceExpression (typeof (long)), sw), "#6");
77 Assert.AreEqual ("object", Generate (new CodeTypeReferenceExpression (typeof (object)), sw), "#7");
79 Assert.AreEqual ("void", Generate (new CodeTypeReferenceExpression (typeof (void)), sw), "#8");
81 Assert.AreEqual ("void", Generate (new CodeTypeReferenceExpression ((string) null), sw), "#9");
83 Assert.AreEqual ("void", Generate (new CodeTypeReferenceExpression (""), sw), "#10");
86 Assert.AreEqual ("byte", Generate (new CodeTypeReferenceExpression (typeof (byte)), sw), "#11");
88 Assert.AreEqual ("decimal", Generate (new CodeTypeReferenceExpression (typeof (decimal)), sw), "#12");
90 Assert.AreEqual ("double", Generate (new CodeTypeReferenceExpression (typeof (double)), sw), "#13");
92 Assert.AreEqual ("sbyte", Generate (new CodeTypeReferenceExpression (typeof (sbyte)), sw), "#14");
94 Assert.AreEqual ("ushort", Generate (new CodeTypeReferenceExpression (typeof (ushort)), sw), "#15");
96 Assert.AreEqual ("uint", Generate (new CodeTypeReferenceExpression (typeof (uint)), sw), "#16");
98 Assert.AreEqual ("ulong", Generate (new CodeTypeReferenceExpression (typeof (ulong)), sw), "#17");
100 Assert.AreEqual ("float", Generate (new CodeTypeReferenceExpression (typeof (float)), sw), "#18");
103 Assert.AreEqual (typeof (byte).FullName, Generate (new CodeTypeReferenceExpression (typeof (byte)), sw), "#19");
105 Assert.AreEqual (typeof (decimal).FullName, Generate (new CodeTypeReferenceExpression (typeof (decimal)), sw), "#20");
107 Assert.AreEqual (typeof (double).FullName, Generate (new CodeTypeReferenceExpression (typeof (double)), sw), "#21");
109 Assert.AreEqual (typeof (sbyte).FullName, Generate (new CodeTypeReferenceExpression (typeof (sbyte)), sw), "#22");
111 Assert.AreEqual (typeof (ushort).FullName, Generate (new CodeTypeReferenceExpression (typeof (ushort)), sw), "#23");
113 Assert.AreEqual (typeof (uint).FullName, Generate (new CodeTypeReferenceExpression (typeof (uint)), sw), "#24");
115 Assert.AreEqual (typeof (ulong).FullName, Generate (new CodeTypeReferenceExpression (typeof (ulong)), sw), "#25");
117 Assert.AreEqual (typeof (float).FullName, Generate (new CodeTypeReferenceExpression (typeof (float)), sw), "#26");
125 public void PrimitiveExpressionTest ()
127 StringBuilder sb = new StringBuilder ();
129 using (StringWriter sw = new StringWriter (sb)) {
130 Assert.AreEqual ("null", Generate (new CodePrimitiveExpression (null), sw), "#1");
132 Assert.AreEqual ("\"AB\\\"C\"", Generate (new CodePrimitiveExpression ("AB\"C"), sw), "#2");
134 Assert.AreEqual ("5", Generate (new CodePrimitiveExpression ((byte) 5), sw), "#4");
136 Assert.AreEqual ("20", Generate (new CodePrimitiveExpression ((short) 20), sw), "#5");
138 Assert.AreEqual ("243", Generate (new CodePrimitiveExpression (243), sw), "#6");
140 Assert.AreEqual ("434343", Generate (new CodePrimitiveExpression ((long) 434343), sw), "#7");
142 Assert.AreEqual ("6.445F", Generate (new CodePrimitiveExpression ((float) 6.445), sw), "#8");
144 Assert.AreEqual ("5.76", Generate (new CodePrimitiveExpression ((double) 5.76), sw), "#9");
146 Assert.AreEqual ("7.667m", Generate (new CodePrimitiveExpression ((decimal) 7.667), sw), "#10");
148 Assert.AreEqual ("true", Generate (new CodePrimitiveExpression (true), sw), "#11");
150 Assert.AreEqual ("false", Generate (new CodePrimitiveExpression (false), sw), "#12");
156 public void PrimitiveExpressionTest_Char ()
158 StringBuilder sb = new StringBuilder ();
160 using (StringWriter sw = new StringWriter (sb)) {
161 Assert.AreEqual ("'\\0'", Generate (new CodePrimitiveExpression ('\0'), sw), "#0");
163 Assert.AreEqual ("'\x01'", Generate (new CodePrimitiveExpression ('\x01'), sw), "#1");
165 Assert.AreEqual ("'\x02'", Generate (new CodePrimitiveExpression ('\x02'), sw), "#2");
167 Assert.AreEqual ("'\x03'", Generate (new CodePrimitiveExpression ('\x03'), sw), "#3");
169 Assert.AreEqual ("'\x04'", Generate (new CodePrimitiveExpression ('\x04'), sw), "#4");
171 Assert.AreEqual ("'\x05'", Generate (new CodePrimitiveExpression ('\x05'), sw), "#5");
173 Assert.AreEqual ("'\x06'", Generate (new CodePrimitiveExpression ('\x06'), sw), "#6");
175 Assert.AreEqual ("'\a'", Generate (new CodePrimitiveExpression ('\a'), sw), "#7");
177 Assert.AreEqual ("'\b'", Generate (new CodePrimitiveExpression ('\b'), sw), "#8");
179 Assert.AreEqual ("'\\t'", Generate (new CodePrimitiveExpression ('\t'), sw), "#9");
181 Assert.AreEqual ("'\\n'", Generate (new CodePrimitiveExpression ('\n'), sw), "#10");
183 Assert.AreEqual ("'\v'", Generate (new CodePrimitiveExpression ('\v'), sw), "#11");
185 Assert.AreEqual ("'\f'", Generate (new CodePrimitiveExpression ('\f'), sw), "#12");
187 Assert.AreEqual ("'\\r'", Generate (new CodePrimitiveExpression ('\r'), sw), "#13");
189 Assert.AreEqual ("'\x0E'", Generate (new CodePrimitiveExpression ('\x0E'), sw), "#14");
191 Assert.AreEqual ("'\x0F'", Generate (new CodePrimitiveExpression ('\x0F'), sw), "#15");
193 Assert.AreEqual ("'\x10'", Generate (new CodePrimitiveExpression ('\x10'), sw), "#16");
195 Assert.AreEqual ("'\x11'", Generate (new CodePrimitiveExpression ('\x11'), sw), "#17");
197 Assert.AreEqual ("'\x12'", Generate (new CodePrimitiveExpression ('\x12'), sw), "#18");
199 Assert.AreEqual ("'\x13'", Generate (new CodePrimitiveExpression ('\x13'), sw), "#19");
201 Assert.AreEqual ("'\x14'", Generate (new CodePrimitiveExpression ('\x14'), sw), "#20");
203 Assert.AreEqual ("'\x15'", Generate (new CodePrimitiveExpression ('\x15'), sw), "#21");
205 Assert.AreEqual ("'\x16'", Generate (new CodePrimitiveExpression ('\x16'), sw), "#22");
207 Assert.AreEqual ("'\x17'", Generate (new CodePrimitiveExpression ('\x17'), sw), "#23");
209 Assert.AreEqual ("'\x18'", Generate (new CodePrimitiveExpression ('\x18'), sw), "#24");
211 Assert.AreEqual ("'\x19'", Generate (new CodePrimitiveExpression ('\x19'), sw), "#25");
213 Assert.AreEqual ("'\x1A'", Generate (new CodePrimitiveExpression ('\x1A'), sw), "#26");
215 Assert.AreEqual ("'\x1B'", Generate (new CodePrimitiveExpression ('\x1B'), sw), "#27");
217 Assert.AreEqual ("'\x1C'", Generate (new CodePrimitiveExpression ('\x1C'), sw), "#28");
219 Assert.AreEqual ("'\x1D'", Generate (new CodePrimitiveExpression ('\x1D'), sw), "#29");
221 Assert.AreEqual ("'\x1E'", Generate (new CodePrimitiveExpression ('\x1E'), sw), "#30");
223 Assert.AreEqual ("'\x1F'", Generate (new CodePrimitiveExpression ('\x1F'), sw), "#31");
225 Assert.AreEqual ("'\x20'", Generate (new CodePrimitiveExpression ('\x20'), sw), "#32");
227 Assert.AreEqual ("'\x21'", Generate (new CodePrimitiveExpression ('\x21'), sw), "#33");
229 Assert.AreEqual ("'\\\"'", Generate (new CodePrimitiveExpression ('"'), sw), "#34");
231 Assert.AreEqual ("'\x23'", Generate (new CodePrimitiveExpression ('\x23'), sw), "#35");
233 Assert.AreEqual ("'\x24'", Generate (new CodePrimitiveExpression ('\x24'), sw), "#36");
235 Assert.AreEqual ("'\x25'", Generate (new CodePrimitiveExpression ('\x25'), sw), "#37");
237 Assert.AreEqual ("'\x26'", Generate (new CodePrimitiveExpression ('\x26'), sw), "#38");
239 Assert.AreEqual ("'\\''", Generate (new CodePrimitiveExpression ('\''), sw), "#39");
242 Assert.AreEqual ("'\\u2028'", Generate (new CodePrimitiveExpression ('\u2028'), sw), "#40");
244 Assert.AreEqual ("'\\u8232'", Generate (new CodePrimitiveExpression ('\u2028'), sw), "#40");
248 Assert.AreEqual ("'\\u2029'", Generate (new CodePrimitiveExpression ('\u2029'), sw), "#41");
250 Assert.AreEqual ("'\\u8233'", Generate (new CodePrimitiveExpression ('\u2029'), sw), "#41");
253 Assert.AreEqual ("'\u2030'", Generate (new CodePrimitiveExpression ('\u2030'), sw), "#42");
260 [ExpectedException (typeof (ArgumentException))]
262 public void PrimitiveExpressionTest_SByte ()
264 StringBuilder sb = new StringBuilder ();
266 using (StringWriter sw = new StringWriter (sb)) {
267 Assert.AreEqual ("5", Generate (new CodePrimitiveExpression ((sbyte) 5), sw));
274 [ExpectedException (typeof (ArgumentException))]
276 public void PrimitiveExpressionTest_UInt16 ()
278 StringBuilder sb = new StringBuilder ();
280 using (StringWriter sw = new StringWriter (sb)) {
281 Assert.AreEqual ("5", Generate (new CodePrimitiveExpression ((ushort) 5), sw));
288 [ExpectedException (typeof (ArgumentException))]
290 public void PrimitiveExpressionTest_UInt32 ()
292 StringBuilder sb = new StringBuilder ();
294 using (StringWriter sw = new StringWriter (sb)) {
295 Assert.AreEqual ("5u", Generate (new CodePrimitiveExpression ((uint) 5), sw));
302 [ExpectedException (typeof (ArgumentException))]
304 public void PrimitiveExpressionTest_UInt64 ()
306 StringBuilder sb = new StringBuilder ();
308 using (StringWriter sw = new StringWriter (sb)) {
309 Assert.AreEqual ("5ul", Generate (new CodePrimitiveExpression ((ulong) 5), sw));
315 public void ParameterDeclarationExpressionTest ()
317 CodeParameterDeclarationExpression cpde = null;
319 StringBuilder sb = new StringBuilder ();
321 using (StringWriter sw = new StringWriter (sb)) {
322 cpde = new CodeParameterDeclarationExpression ();
323 Assert.AreEqual ("void ", Generate (cpde, sw), "#1");
326 cpde = new CodeParameterDeclarationExpression ((string) null,
328 Assert.AreEqual ("void ", Generate (cpde, sw), "#2");
331 cpde = new CodeParameterDeclarationExpression ("A", (string) null);
332 Assert.AreEqual ("A ", Generate (cpde, sw), "#4");
335 cpde = new CodeParameterDeclarationExpression ((string) null, "B");
336 Assert.AreEqual ("void B", Generate (cpde, sw), "#4");
339 cpde = new CodeParameterDeclarationExpression ("A", "B");
340 Assert.AreEqual ("A B", Generate (cpde, sw), "#5");
343 cpde.Direction = FieldDirection.Out;
344 Assert.AreEqual ("out A B", Generate (cpde, sw), "#6");
347 cpde.Direction = FieldDirection.Ref;
348 Assert.AreEqual ("ref A B", Generate (cpde, sw), "#7");
353 private string Generate (CodeExpression expression, StringWriter sw)
355 generator.GenerateCodeFromExpression (expression, sw, options);
356 return sw.ToString ();