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");
73 private CodeTypeDeclaration GetClassType ()
75 return new CodeTypeDeclaration ();
78 private CodeTypeDeclaration GetDelegateType ()
80 CodeTypeDeclaration type = new CodeTypeDelegate ();
84 private CodeTypeDeclaration GetEnumType ()
86 CodeTypeDeclaration type = new CodeTypeDeclaration ();
91 private CodeTypeDeclaration GetInterfaceType ()
93 CodeTypeDeclaration type = new CodeTypeDeclaration ();
94 type.IsInterface = true;
98 private CodeTypeDeclaration GetStructType ()
100 CodeTypeDeclaration type = new CodeTypeDeclaration ();
101 type.IsStruct = true;
105 #region Override implementation of CodeGenerator
107 protected override string NullToken
109 get { return "zip"; }
112 protected override void OutputType (CodeTypeReference typeRef)
116 protected override void GenerateArrayCreateExpression (CodeArrayCreateExpression e)
120 protected override void GenerateBaseReferenceExpression (CodeBaseReferenceExpression e)
124 protected override void GenerateCastExpression (CodeCastExpression e)
128 protected override void GenerateDelegateCreateExpression (CodeDelegateCreateExpression e)
132 protected override void GenerateFieldReferenceExpression (CodeFieldReferenceExpression e)
136 protected override void GenerateArgumentReferenceExpression (CodeArgumentReferenceExpression e)
140 protected override void GenerateVariableReferenceExpression (CodeVariableReferenceExpression e)
144 protected override void GenerateIndexerExpression (CodeIndexerExpression e)
148 protected override void GenerateArrayIndexerExpression (CodeArrayIndexerExpression e)
152 protected override void GenerateSnippetExpression (CodeSnippetExpression e)
156 protected override void GenerateMethodInvokeExpression (CodeMethodInvokeExpression e)
160 protected override void GenerateMethodReferenceExpression (CodeMethodReferenceExpression e)
164 protected override void GenerateEventReferenceExpression (CodeEventReferenceExpression e)
168 protected override void GenerateDelegateInvokeExpression (CodeDelegateInvokeExpression e)
172 protected override void GenerateObjectCreateExpression (CodeObjectCreateExpression e)
176 protected override void GeneratePropertyReferenceExpression (CodePropertyReferenceExpression e)
180 protected override void GeneratePropertySetValueReferenceExpression (CodePropertySetValueReferenceExpression e)
184 protected override void GenerateThisReferenceExpression (CodeThisReferenceExpression e)
188 protected override void GenerateExpressionStatement (CodeExpressionStatement e)
192 protected override void GenerateIterationStatement (CodeIterationStatement e)
196 protected override void GenerateThrowExceptionStatement (CodeThrowExceptionStatement e)
200 protected override void GenerateComment (CodeComment e)
204 protected override void GenerateMethodReturnStatement (CodeMethodReturnStatement e)
208 protected override void GenerateConditionStatement (CodeConditionStatement e)
212 protected override void GenerateTryCatchFinallyStatement (CodeTryCatchFinallyStatement e)
216 protected override void GenerateAssignStatement (CodeAssignStatement e)
220 protected override void GenerateAttachEventStatement (CodeAttachEventStatement e)
224 protected override void GenerateRemoveEventStatement (CodeRemoveEventStatement e)
228 protected override void GenerateLabeledStatement (CodeLabeledStatement e)
232 protected override void GenerateVariableDeclarationStatement (CodeVariableDeclarationStatement e)
236 protected override void GenerateLinePragmaStart (CodeLinePragma e)
240 protected override void GenerateGotoStatement (CodeGotoStatement e)
244 protected override void GenerateLinePragmaEnd (CodeLinePragma e)
248 protected override void GenerateEvent (CodeMemberEvent e, CodeTypeDeclaration c)
252 protected override void GenerateField (CodeMemberField e)
256 protected override void GenerateSnippetMember (CodeSnippetTypeMember e)
260 protected override void GenerateEntryPointMethod (CodeEntryPointMethod e, CodeTypeDeclaration c)
264 protected override void GenerateMethod (CodeMemberMethod e, CodeTypeDeclaration c)
268 protected override void GenerateProperty (CodeMemberProperty e, CodeTypeDeclaration c)
272 protected override void GenerateConstructor (CodeConstructor e, CodeTypeDeclaration c)
276 protected override void GenerateTypeConstructor (CodeTypeConstructor e)
280 protected override void GenerateTypeStart (CodeTypeDeclaration e)
284 protected override void GenerateTypeEnd (CodeTypeDeclaration e)
288 protected override void GenerateNamespaceStart (CodeNamespace e)
292 protected override void GenerateNamespaceEnd (CodeNamespace e)
296 protected override void GenerateNamespaceImport (CodeNamespaceImport e)
300 protected override void GenerateAttributeDeclarationsStart (CodeAttributeDeclarationCollection attributes)
304 protected override void GenerateAttributeDeclarationsEnd (CodeAttributeDeclarationCollection attributes)
308 protected override bool Supports (GeneratorSupport support)
313 protected override bool IsValidIdentifier (string value)
318 protected override string CreateEscapedIdentifier (string value)
323 protected override string CreateValidIdentifier (string value)
328 protected override string GetTypeOutput (CodeTypeReference value)
333 protected override string QuoteSnippetString (string value)
338 #endregion Override implementation of CodeGenerator