2010-03-12 Jb Evain <jbevain@novell.com>
[mono.git] / mcs / class / System / Test / System.CodeDom.Compiler / CodeGeneratorTest.cs
1 //
2 // CodeGenerator unit tests
3 //
4 // Authors:
5 // Gert Driesen (drieseng@users.sourceforge.net)
6 //
7 // (c) Novell
8 //
9
10 using System;
11 using System.CodeDom;
12 using System.CodeDom.Compiler;
13 using System.IO;
14
15 using NUnit.Framework;
16
17 namespace CodeGeneratorTest
18 {
19         [TestFixture]
20         public class MockCodeGenerator : CodeGenerator
21         {
22                 [Test]
23                 public void IsCurrentTest ()
24                 {
25                         MockCodeGenerator codeGenerator = new MockCodeGenerator ();
26                         Assert.AreEqual (false, codeGenerator.IsCurrentClass, "#A1");
27                         Assert.AreEqual (false, codeGenerator.IsCurrentDelegate, "#A2");
28                         Assert.AreEqual (false, codeGenerator.IsCurrentEnum, "#A3");
29                         Assert.AreEqual (false, codeGenerator.IsCurrentInterface, "#A4");
30                         Assert.AreEqual (false, codeGenerator.IsCurrentStruct, "#A5");
31
32                         ((ICodeGenerator) codeGenerator).GenerateCodeFromType (GetClassType (),
33                                 new StringWriter (), new CodeGeneratorOptions ());
34                         Assert.AreEqual (true, codeGenerator.IsCurrentClass, "#B1");
35                         Assert.AreEqual (false, codeGenerator.IsCurrentDelegate, "#B2");
36                         Assert.AreEqual (false, codeGenerator.IsCurrentEnum, "#B3");
37                         Assert.AreEqual (false, codeGenerator.IsCurrentInterface, "#B4");
38                         Assert.AreEqual (false, codeGenerator.IsCurrentStruct, "#B5");
39
40                         ((ICodeGenerator) codeGenerator).GenerateCodeFromType (GetDelegateType (),
41                                 new StringWriter (), new CodeGeneratorOptions ());
42                         Assert.AreEqual (false, codeGenerator.IsCurrentClass, "#C1");
43                         Assert.AreEqual (true, codeGenerator.IsCurrentDelegate, "#C2");
44                         Assert.AreEqual (false, codeGenerator.IsCurrentEnum, "#C3");
45                         Assert.AreEqual (false, codeGenerator.IsCurrentInterface, "#C4");
46                         Assert.AreEqual (false, codeGenerator.IsCurrentStruct, "#C5");
47
48                         ((ICodeGenerator) codeGenerator).GenerateCodeFromType (GetEnumType (),
49                                 new StringWriter (), new CodeGeneratorOptions ());
50                         Assert.AreEqual (false, codeGenerator.IsCurrentClass, "#D1");
51                         Assert.AreEqual (false, codeGenerator.IsCurrentDelegate, "#D2");
52                         Assert.AreEqual (true, codeGenerator.IsCurrentEnum, "#D3");
53                         Assert.AreEqual (false, codeGenerator.IsCurrentInterface, "#D4");
54                         Assert.AreEqual (false, codeGenerator.IsCurrentStruct, "#D5");
55
56                         ((ICodeGenerator) codeGenerator).GenerateCodeFromType (GetInterfaceType (),
57                                 new StringWriter (), new CodeGeneratorOptions ());
58                         Assert.AreEqual (false, codeGenerator.IsCurrentClass, "#E1");
59                         Assert.AreEqual (false, codeGenerator.IsCurrentDelegate, "#E2");
60                         Assert.AreEqual (false, codeGenerator.IsCurrentEnum, "#E3");
61                         Assert.AreEqual (true, codeGenerator.IsCurrentInterface, "#E4");
62                         Assert.AreEqual (false, codeGenerator.IsCurrentStruct, "#E5");
63
64                         ((ICodeGenerator) codeGenerator).GenerateCodeFromType (GetStructType (),
65                                 new StringWriter (), new CodeGeneratorOptions ());
66                         Assert.AreEqual (false, codeGenerator.IsCurrentClass, "#F1");
67                         Assert.AreEqual (false, codeGenerator.IsCurrentDelegate, "#F2");
68                         Assert.AreEqual (false, codeGenerator.IsCurrentEnum, "#F3");
69                         Assert.AreEqual (false, codeGenerator.IsCurrentInterface, "#F4");
70                         Assert.AreEqual (true, codeGenerator.IsCurrentStruct, "#F5");
71                 }
72
73                 [Test]
74                 public void IsValidLanguageIndependentIdentifierTest ()
75                 {
76                         Assert.AreEqual (true,
77                                 CodeGenerator.IsValidLanguageIndependentIdentifier("hello"), "#G1");
78                         Assert.AreEqual (true,
79                                 CodeGenerator.IsValidLanguageIndependentIdentifier("good1"), "#G2");
80                         Assert.AreEqual (false,
81                                 CodeGenerator.IsValidLanguageIndependentIdentifier("2bad"), "#G3");
82                         Assert.AreEqual (false,
83                                 CodeGenerator.IsValidLanguageIndependentIdentifier("@start"), "#G4");
84                         Assert.AreEqual (false,
85                                 CodeGenerator.IsValidLanguageIndependentIdentifier("not@start"), "#G5");
86                         Assert.AreEqual (false,
87                                 CodeGenerator.IsValidLanguageIndependentIdentifier(" spaceatstart"), "#G6");
88                         Assert.AreEqual (false,
89                                 CodeGenerator.IsValidLanguageIndependentIdentifier("spaceatend "), "#G7");
90                         Assert.AreEqual (false,
91                                 CodeGenerator.IsValidLanguageIndependentIdentifier("a spacein2ndplace"), "#G8");
92                 }
93
94                 private CodeTypeDeclaration GetClassType ()
95                 {
96                         return new CodeTypeDeclaration ();
97                 }
98
99                 private CodeTypeDeclaration GetDelegateType ()
100                 {
101                         CodeTypeDeclaration type = new CodeTypeDelegate ();
102                         return type;
103                 }
104
105                 private CodeTypeDeclaration GetEnumType ()
106                 {
107                         CodeTypeDeclaration type = new CodeTypeDeclaration ();
108                         type.IsEnum = true;
109                         return type;
110                 }
111
112                 private CodeTypeDeclaration GetInterfaceType ()
113                 {
114                         CodeTypeDeclaration type = new CodeTypeDeclaration ();
115                         type.IsInterface = true;
116                         return type;
117                 }
118
119                 private CodeTypeDeclaration GetStructType ()
120                 {
121                         CodeTypeDeclaration type = new CodeTypeDeclaration ();
122                         type.IsStruct = true;
123                         return type;
124                 }
125
126                 #region Override implementation of CodeGenerator
127
128                 protected override string NullToken
129                 {
130                         get { return "zip"; }
131                 }
132
133                 protected override void OutputType (CodeTypeReference typeRef)
134                 {
135                 }
136
137                 protected override void GenerateArrayCreateExpression (CodeArrayCreateExpression e)
138                 {
139                 }
140
141                 protected override void GenerateBaseReferenceExpression (CodeBaseReferenceExpression e)
142                 {
143                 }
144
145                 protected override void GenerateCastExpression (CodeCastExpression e)
146                 {
147                 }
148
149                 protected override void GenerateDelegateCreateExpression (CodeDelegateCreateExpression e)
150                 {
151                 }
152
153                 protected override void GenerateFieldReferenceExpression (CodeFieldReferenceExpression e)
154                 {
155                 }
156
157                 protected override void GenerateArgumentReferenceExpression (CodeArgumentReferenceExpression e)
158                 {
159                 }
160
161                 protected override void GenerateVariableReferenceExpression (CodeVariableReferenceExpression e)
162                 {
163                 }
164
165                 protected override void GenerateIndexerExpression (CodeIndexerExpression e)
166                 {
167                 }
168
169                 protected override void GenerateArrayIndexerExpression (CodeArrayIndexerExpression e)
170                 {
171                 }
172
173                 protected override void GenerateSnippetExpression (CodeSnippetExpression e)
174                 {
175                 }
176
177                 protected override void GenerateMethodInvokeExpression (CodeMethodInvokeExpression e)
178                 {
179                 }
180
181                 protected override void GenerateMethodReferenceExpression (CodeMethodReferenceExpression e)
182                 {
183                 }
184
185                 protected override void GenerateEventReferenceExpression (CodeEventReferenceExpression e)
186                 {
187                 }
188
189                 protected override void GenerateDelegateInvokeExpression (CodeDelegateInvokeExpression e)
190                 {
191                 }
192
193                 protected override void GenerateObjectCreateExpression (CodeObjectCreateExpression e)
194                 {
195                 }
196
197                 protected override void GeneratePropertyReferenceExpression (CodePropertyReferenceExpression e)
198                 {
199                 }
200
201                 protected override void GeneratePropertySetValueReferenceExpression (CodePropertySetValueReferenceExpression e)
202                 {
203                 }
204
205                 protected override void GenerateThisReferenceExpression (CodeThisReferenceExpression e)
206                 {
207                 }
208
209                 protected override void GenerateExpressionStatement (CodeExpressionStatement e)
210                 {
211                 }
212
213                 protected override void GenerateIterationStatement (CodeIterationStatement e)
214                 {
215                 }
216
217                 protected override void GenerateThrowExceptionStatement (CodeThrowExceptionStatement e)
218                 {
219                 }
220
221                 protected override void GenerateComment (CodeComment e)
222                 {
223                 }
224
225                 protected override void GenerateMethodReturnStatement (CodeMethodReturnStatement e)
226                 {
227                 }
228
229                 protected override void GenerateConditionStatement (CodeConditionStatement e)
230                 {
231                 }
232
233                 protected override void GenerateTryCatchFinallyStatement (CodeTryCatchFinallyStatement e)
234                 {
235                 }
236
237                 protected override void GenerateAssignStatement (CodeAssignStatement e)
238                 {
239                 }
240
241                 protected override void GenerateAttachEventStatement (CodeAttachEventStatement e)
242                 {
243                 }
244
245                 protected override void GenerateRemoveEventStatement (CodeRemoveEventStatement e)
246                 {
247                 }
248
249                 protected override void GenerateLabeledStatement (CodeLabeledStatement e)
250                 {
251                 }
252
253                 protected override void GenerateVariableDeclarationStatement (CodeVariableDeclarationStatement e)
254                 {
255                 }
256
257                 protected override void GenerateLinePragmaStart (CodeLinePragma e)
258                 {
259                 }
260
261                 protected override void GenerateGotoStatement (CodeGotoStatement e)
262                 {
263                 }
264
265                 protected override void GenerateLinePragmaEnd (CodeLinePragma e)
266                 {
267                 }
268
269                 protected override void GenerateEvent (CodeMemberEvent e, CodeTypeDeclaration c)
270                 {
271                 }
272
273                 protected override void GenerateField (CodeMemberField e)
274                 {
275                 }
276
277                 protected override void GenerateSnippetMember (CodeSnippetTypeMember e)
278                 {
279                 }
280
281                 protected override void GenerateEntryPointMethod (CodeEntryPointMethod e, CodeTypeDeclaration c)
282                 {
283                 }
284
285                 protected override void GenerateMethod (CodeMemberMethod e, CodeTypeDeclaration c)
286                 {
287                 }
288
289                 protected override void GenerateProperty (CodeMemberProperty e, CodeTypeDeclaration c)
290                 {
291                 }
292
293                 protected override void GenerateConstructor (CodeConstructor e, CodeTypeDeclaration c)
294                 {
295                 }
296
297                 protected override void GenerateTypeConstructor (CodeTypeConstructor e)
298                 {
299                 }
300
301                 protected override void GenerateTypeStart (CodeTypeDeclaration e)
302                 {
303                 }
304
305                 protected override void GenerateTypeEnd (CodeTypeDeclaration e)
306                 {
307                 }
308
309                 protected override void GenerateNamespaceStart (CodeNamespace e)
310                 {
311                 }
312
313                 protected override void GenerateNamespaceEnd (CodeNamespace e)
314                 {
315                 }
316
317                 protected override void GenerateNamespaceImport (CodeNamespaceImport e)
318                 {
319                 }
320
321                 protected override void GenerateAttributeDeclarationsStart (CodeAttributeDeclarationCollection attributes)
322                 {
323                 }
324
325                 protected override void GenerateAttributeDeclarationsEnd (CodeAttributeDeclarationCollection attributes)
326                 {
327                 }
328
329                 protected override bool Supports (GeneratorSupport support)
330                 {
331                         return true;
332                 }
333
334                 protected override bool IsValidIdentifier (string value)
335                 {
336                         return true;
337                 }
338
339                 protected override string CreateEscapedIdentifier (string value)
340                 {
341                         return value;
342                 }
343
344                 protected override string CreateValidIdentifier (string value)
345                 {
346                         return value;
347                 }
348
349                 protected override string GetTypeOutput (CodeTypeReference value)
350                 {
351                         return "typeoutput";
352                 }
353
354                 protected override string QuoteSnippetString (string value)
355                 {
356                         return value;
357                 }
358
359                 #endregion Override implementation of CodeGenerator
360         }
361 }