New test.
[mono.git] / mcs / class / System / Test / Microsoft.VisualBasic / CodeGeneratorFromNamespaceTest.cs
1 //
2 // Microsoft.VisualBasic.* Test Cases
3 //
4 // Authors:
5 // Gert Driesen (drieseng@users.sourceforge.net)
6 //
7 // (c) 2006 Novell
8 //
9 using System;
10 using System.CodeDom;
11 using System.CodeDom.Compiler;
12 using System.Globalization;
13 using System.IO;
14 using System.Text;
15
16 using NUnit.Framework;
17
18 namespace MonoTests.Microsoft.VisualBasic
19 {
20         /// <summary>
21         /// Test ICodeGenerator's GenerateCodeFromNamespace, along with a 
22         /// minimal set CodeDom components.
23         /// </summary>
24         [TestFixture]
25         public class CodeGeneratorFromNamespaceTest : CodeGeneratorTestBase
26         {
27                 CodeNamespace codeNamespace = null;
28
29                 [SetUp]
30                 public void Init ()
31                 {
32                         InitBase ();
33                         codeNamespace = new CodeNamespace ();
34                 }
35                 
36                 protected override string Generate (CodeGeneratorOptions options)
37                 {
38                         StringWriter writer = new StringWriter ();
39                         writer.NewLine = NewLine;
40
41                         generator.GenerateCodeFromNamespace (codeNamespace, writer, options);
42                         writer.Close ();
43                         return writer.ToString ();
44                 }
45                 
46                 [Test]
47                 [ExpectedException (typeof (NullReferenceException))]
48                 public void NullNamespaceTest ()
49                 {
50                         codeNamespace = null;
51                         Generate ();
52                 }
53
54                 [Test]
55                 public void NullNamespaceNameTest ()
56                 {
57                         codeNamespace.Name = null;
58                         Assert.AreEqual ("\n", Generate ());
59                 }
60
61                 
62                 [Test]
63                 public void DefaultNamespaceTest ()
64                 {
65                         Assert.AreEqual ("\n", Generate ());
66                 }
67
68                 [Test]
69                 public void SimpleNamespaceTest ()
70                 {
71                         codeNamespace.Name = "A";
72                         Assert.AreEqual ("\nNamespace A\nEnd Namespace\n", Generate ());
73                 }
74
75                 [Test]
76                 public void InvalidNamespaceTest ()
77                 {
78                         codeNamespace.Name = "A,B";
79                         Assert.AreEqual ("\nNamespace A,B\nEnd Namespace\n", Generate ());
80                 }
81
82                 [Test]
83                 public void CommentOnlyNamespaceTest ()
84                 {
85                         CodeCommentStatement comment = new CodeCommentStatement ("a");
86                         codeNamespace.Comments.Add (comment);
87                         Assert.AreEqual ("\n'a\n", Generate ());
88                 }
89
90                 [Test]
91                 public void ImportsTest ()
92                 {
93                         codeNamespace.Imports.Add (new CodeNamespaceImport ("System"));
94                         codeNamespace.Imports.Add (new CodeNamespaceImport ("System.Collections"));
95
96                         Assert.AreEqual (string.Format(CultureInfo.InvariantCulture,
97                                 "Imports System{0}" +
98                                 "Imports System.Collections{0}" +
99                                 "{0}", NewLine), Generate (), "#1");
100
101                         codeNamespace.Name = "A";
102
103                         Assert.AreEqual (string.Format (CultureInfo.InvariantCulture,
104                                 "Imports System{0}" +
105                                 "Imports System.Collections{0}" +
106                                 "{0}" +
107                                 "Namespace A{0}" +
108                                 "End Namespace{0}", NewLine), Generate (), "#2");
109
110                         codeNamespace.Name = null;
111                         codeNamespace.Comments.Add (new CodeCommentStatement ("a"));
112
113                         Assert.AreEqual (string.Format (CultureInfo.InvariantCulture,
114                                 "Imports System{0}" +
115                                 "Imports System.Collections{0}" +
116                                 "{0}" +
117                                 "'a{0}", NewLine), Generate (), "#3");
118
119                         codeNamespace.Name = "A";
120
121                         Assert.AreEqual (string.Format (CultureInfo.InvariantCulture,
122                                 "Imports System{0}" +
123                                 "Imports System.Collections{0}" +
124                                 "{0}" +
125                                 "'a{0}" +
126                                 "Namespace A{0}" +
127                                 "End Namespace{0}", NewLine), Generate (), "#4");
128                 }
129
130                 [Test]
131                 public void TypeTest ()
132                 {
133                         codeNamespace.Types.Add (new CodeTypeDeclaration ("Person"));
134                         Assert.AreEqual (string.Format(CultureInfo.InvariantCulture,
135                                 "{0}" +
136                                 "{0}" +
137                                 "Public Class Person{0}" +
138                                 "End Class{0}", NewLine), Generate (), "#A1");
139
140                         CodeGeneratorOptions options = new CodeGeneratorOptions ();
141                         options.BlankLinesBetweenMembers = false;
142                         Assert.AreEqual (string.Format(CultureInfo.InvariantCulture,
143                                 "{0}" +
144                                 "Public Class Person{0}" +
145                                 "End Class{0}", NewLine), Generate (options), "#A2");
146
147                         codeNamespace.Name = "A";
148                         Assert.AreEqual (string.Format(CultureInfo.InvariantCulture,
149                                 "{0}" +
150                                 "Namespace A{0}" +
151                                 "    {0}" +
152                                 "    Public Class Person{0}" +
153                                 "    End Class{0}" +
154                                 "End Namespace{0}", NewLine), Generate (), "#B1");
155
156                         Assert.AreEqual (string.Format (CultureInfo.InvariantCulture,
157                                 "{0}" +
158                                 "Namespace A{0}" +
159                                 "    Public Class Person{0}" +
160                                 "    End Class{0}" +
161                                 "End Namespace{0}", NewLine), Generate (options), "#B2");
162                 }
163         }
164 }