2 // CodeGenerator unit tests
5 // Gert Driesen (drieseng@users.sourceforge.net)
12 using System.CodeDom.Compiler;
15 using NUnit.Framework;
17 namespace CodeGeneratorTest
20 public class MockCodeGenerator : CodeGenerator
23 public void IsCurrentTest ()
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");
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");
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");
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");
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");
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");
74 public void IsValidLanguageIndependentIdentifierTest ()
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");
94 private CodeTypeDeclaration GetClassType ()
96 return new CodeTypeDeclaration ();
99 private CodeTypeDeclaration GetDelegateType ()
101 CodeTypeDeclaration type = new CodeTypeDelegate ();
105 private CodeTypeDeclaration GetEnumType ()
107 CodeTypeDeclaration type = new CodeTypeDeclaration ();
112 private CodeTypeDeclaration GetInterfaceType ()
114 CodeTypeDeclaration type = new CodeTypeDeclaration ();
115 type.IsInterface = true;
119 private CodeTypeDeclaration GetStructType ()
121 CodeTypeDeclaration type = new CodeTypeDeclaration ();
122 type.IsStruct = true;
126 #region Override implementation of CodeGenerator
128 protected override string NullToken
130 get { return "zip"; }
133 protected override void OutputType (CodeTypeReference typeRef)
137 protected override void GenerateArrayCreateExpression (CodeArrayCreateExpression e)
141 protected override void GenerateBaseReferenceExpression (CodeBaseReferenceExpression e)
145 protected override void GenerateCastExpression (CodeCastExpression e)
149 protected override void GenerateDelegateCreateExpression (CodeDelegateCreateExpression e)
153 protected override void GenerateFieldReferenceExpression (CodeFieldReferenceExpression e)
157 protected override void GenerateArgumentReferenceExpression (CodeArgumentReferenceExpression e)
161 protected override void GenerateVariableReferenceExpression (CodeVariableReferenceExpression e)
165 protected override void GenerateIndexerExpression (CodeIndexerExpression e)
169 protected override void GenerateArrayIndexerExpression (CodeArrayIndexerExpression e)
173 protected override void GenerateSnippetExpression (CodeSnippetExpression e)
177 protected override void GenerateMethodInvokeExpression (CodeMethodInvokeExpression e)
181 protected override void GenerateMethodReferenceExpression (CodeMethodReferenceExpression e)
185 protected override void GenerateEventReferenceExpression (CodeEventReferenceExpression e)
189 protected override void GenerateDelegateInvokeExpression (CodeDelegateInvokeExpression e)
193 protected override void GenerateObjectCreateExpression (CodeObjectCreateExpression e)
197 protected override void GeneratePropertyReferenceExpression (CodePropertyReferenceExpression e)
201 protected override void GeneratePropertySetValueReferenceExpression (CodePropertySetValueReferenceExpression e)
205 protected override void GenerateThisReferenceExpression (CodeThisReferenceExpression e)
209 protected override void GenerateExpressionStatement (CodeExpressionStatement e)
213 protected override void GenerateIterationStatement (CodeIterationStatement e)
217 protected override void GenerateThrowExceptionStatement (CodeThrowExceptionStatement e)
221 protected override void GenerateComment (CodeComment e)
225 protected override void GenerateMethodReturnStatement (CodeMethodReturnStatement e)
229 protected override void GenerateConditionStatement (CodeConditionStatement e)
233 protected override void GenerateTryCatchFinallyStatement (CodeTryCatchFinallyStatement e)
237 protected override void GenerateAssignStatement (CodeAssignStatement e)
241 protected override void GenerateAttachEventStatement (CodeAttachEventStatement e)
245 protected override void GenerateRemoveEventStatement (CodeRemoveEventStatement e)
249 protected override void GenerateLabeledStatement (CodeLabeledStatement e)
253 protected override void GenerateVariableDeclarationStatement (CodeVariableDeclarationStatement e)
257 protected override void GenerateLinePragmaStart (CodeLinePragma e)
261 protected override void GenerateGotoStatement (CodeGotoStatement e)
265 protected override void GenerateLinePragmaEnd (CodeLinePragma e)
269 protected override void GenerateEvent (CodeMemberEvent e, CodeTypeDeclaration c)
273 protected override void GenerateField (CodeMemberField e)
277 protected override void GenerateSnippetMember (CodeSnippetTypeMember e)
281 protected override void GenerateEntryPointMethod (CodeEntryPointMethod e, CodeTypeDeclaration c)
285 protected override void GenerateMethod (CodeMemberMethod e, CodeTypeDeclaration c)
289 protected override void GenerateProperty (CodeMemberProperty e, CodeTypeDeclaration c)
293 protected override void GenerateConstructor (CodeConstructor e, CodeTypeDeclaration c)
297 protected override void GenerateTypeConstructor (CodeTypeConstructor e)
301 protected override void GenerateTypeStart (CodeTypeDeclaration e)
305 protected override void GenerateTypeEnd (CodeTypeDeclaration e)
309 protected override void GenerateNamespaceStart (CodeNamespace e)
313 protected override void GenerateNamespaceEnd (CodeNamespace e)
317 protected override void GenerateNamespaceImport (CodeNamespaceImport e)
321 protected override void GenerateAttributeDeclarationsStart (CodeAttributeDeclarationCollection attributes)
325 protected override void GenerateAttributeDeclarationsEnd (CodeAttributeDeclarationCollection attributes)
329 protected override bool Supports (GeneratorSupport support)
334 protected override bool IsValidIdentifier (string value)
339 protected override string CreateEscapedIdentifier (string value)
344 protected override string CreateValidIdentifier (string value)
349 protected override string GetTypeOutput (CodeTypeReference value)
354 protected override string QuoteSnippetString (string value)
359 #endregion Override implementation of CodeGenerator