* CodeGeneratorFromCompileUnitTest.cs: Added test for assembly-level attribute
[mono.git] / mcs / class / System / Test / Microsoft.VisualBasic / CodeGeneratorFromTypeTest.cs
1 //
2 // Microsoft.VisualBasic.* Test Cases
3 //
4 // Authors:
5 //      Gert Driesen (drieseng@users.sourceforge.net)
6 //
7 // (c) Novell
8 //
9 using System;
10 using System.Globalization;
11 using System.Text;
12 using System.CodeDom;
13 using System.CodeDom.Compiler;
14
15 using NUnit.Framework;
16
17 namespace MonoTests.Microsoft.VisualBasic
18 {
19         ///
20         /// <summary>
21         ///     Test ICodeGenerator's GenerateCodeFromType, along with a 
22         ///     minimal set CodeDom components.
23         /// </summary>
24         ///
25         [TestFixture]
26         public class CodeGeneratorFromTypeTest : CodeGeneratorTestBase
27         {
28                 CodeTypeDeclaration type = null;
29
30                 [SetUp]
31                 public void Init ()
32                 {
33                         InitBase ();
34                         type = new CodeTypeDeclaration ();
35                 }
36                 
37                 protected override void Generate ()
38                 {
39                         generator.GenerateCodeFromType (type, writer, options);
40                         writer.Close ();
41                 }
42                 
43                 [Test]
44                 public void DefaultTypeTest ()
45                 {
46                         Generate ();
47                         Assert.AreEqual (string.Format (CultureInfo.InvariantCulture,
48                                 "Public Class {0}End Class{0}", writer.NewLine), Code);
49                 }
50
51                 [Test]
52                 [ExpectedException (typeof (NullReferenceException))]
53                 public void NullTypeTest ()
54                 {
55                         type = null;
56                         Generate ();
57                 }
58
59                 [Test]
60                 public void SimpleTypeTest ()
61                 {
62                         type.Name = "Test1";
63                         Generate ();
64                         Assert.AreEqual (string.Format (CultureInfo.InvariantCulture,
65                                 "Public Class Test1{0}End Class{0}", writer.NewLine), Code);
66                 }
67
68                 [Test]
69                 public void AttributesAndTypeTest ()
70                 {
71                         type.Name = "Test1";
72
73                         CodeAttributeDeclaration attrDec = new CodeAttributeDeclaration ();
74                         attrDec.Name = "A";
75                         type.CustomAttributes.Add (attrDec);
76
77                         attrDec = new CodeAttributeDeclaration ();
78                         attrDec.Name = "B";
79                         type.CustomAttributes.Add (attrDec);
80
81                         Generate ();
82                         Assert.AreEqual (string.Format (CultureInfo.InvariantCulture,
83                                 "<A(),  _{0} B()>  _{0}Public Class Test1{0}End Class{0}", 
84                                 writer.NewLine), Code);
85                 }
86
87                 [Test]
88                 public void EventMembersTypeTest1 ()
89                 {
90                         type.Name = "Test1";
91
92                         CodeMemberEvent evt = new CodeMemberEvent ();
93
94                         CodeAttributeDeclaration attrDec = new CodeAttributeDeclaration ();
95                         attrDec.Name = "A";
96                         evt.CustomAttributes.Add (attrDec);
97
98                         attrDec = new CodeAttributeDeclaration ();
99                         attrDec.Name = "B";
100                         evt.CustomAttributes.Add (attrDec);
101
102                         type.Members.Add (evt);
103
104                         Generate ();
105                         Assert.AreEqual (string.Format (CultureInfo.InvariantCulture,
106                                 "Public Class Test1{0}    {0}    <A(),  _{0}     B()>  _{0}    "
107                                 + "Private Event  As System.Void{0}End Class{0}", writer.NewLine), Code);
108                 }
109
110                 [Test]
111                 public void EventMembersTypeTest2 ()
112                 {
113                         type.Name = "Test1";
114
115                         CodeMemberEvent evt = new CodeMemberEvent ();
116                         evt.Name = "OnClick";
117                         evt.Attributes = MemberAttributes.Public;
118                         evt.Type = new CodeTypeReference(typeof (int));
119                         type.Members.Add (evt);
120
121                         Generate ();
122                         Assert.AreEqual (string.Format (CultureInfo.InvariantCulture,
123                                 "Public Class Test1{0}    {0}    "
124                                 + "Public Event OnClick As Integer{0}"
125                                 + "End Class{0}", writer.NewLine), Code);
126                 }
127
128                 [Test]
129                 public void FieldMembersTypeTest1 ()
130                 {
131                         type.Name = "Test1";
132
133                         CodeMemberField fld = new CodeMemberField ();
134
135                         CodeAttributeDeclaration attrDec = new CodeAttributeDeclaration ();
136                         attrDec.Name = "A";
137                         fld.CustomAttributes.Add (attrDec);
138
139                         attrDec = new CodeAttributeDeclaration ();
140                         attrDec.Name = "B";
141                         fld.CustomAttributes.Add (attrDec);
142
143                         type.Members.Add (fld);
144
145                         Generate ();
146                         Assert.AreEqual (string.Format (CultureInfo.InvariantCulture,
147                                 "Public Class Test1{0}    {0}    <A(),  _{0}     B()>  _{0}    "
148                                 + "Private  As System.Void{0}End Class{0}", writer.NewLine), Code);
149                 }
150
151                 [Test]
152                 public void FieldMembersTypeTest2 ()
153                 {
154                         type.Name = "Test1";
155
156                         CodeMemberField fld = new CodeMemberField ();
157                         fld.Name = "Name";
158                         fld.Attributes = MemberAttributes.Public;
159                         fld.Type = new CodeTypeReference (typeof (int));
160                         type.Members.Add (fld);
161
162                         Generate ();
163                         Assert.AreEqual (string.Format (CultureInfo.InvariantCulture,
164                                 "Public Class Test1{0}    {0}    "
165                                 + "Public Name As Integer{0}"
166                                 + "End Class{0}", writer.NewLine), Code);
167                 }
168         }
169 }