Merge pull request #5714 from alexischr/update_bockbuild
[mono.git] / mcs / class / System / Test / Microsoft.VisualBasic / CodeGeneratorFromCompileUnitTest.cs
index 0e183eb72078ded6a7b839fbb017de3a93618144..7c9993abfdb45e2c0b027c100a6aba1ea8282535 100644 (file)
@@ -2,13 +2,14 @@
 // Microsoft.VisualBasic.* Test Cases
 //
 // Authors:
-//     Gert Driesen (drieseng@users.sourceforge.net)
+//     Gert Driesen (drieseng@users.sourceforge.net)
 //
 // (c) 2005 Novell
 //
 
 using System;
 using System.Globalization;
+using System.IO;
 using System.Text;
 using System.CodeDom;
 using System.CodeDom.Compiler;
@@ -26,8 +27,7 @@ namespace MonoTests.Microsoft.VisualBasic
                public CodeGeneratorFromCompileUnitTest ()
                {
                        Init();
-                       Generate();
-                       codeUnitHeader = Code;
+                       codeUnitHeader = Generate ();
                }
                
                [SetUp]
@@ -36,22 +36,21 @@ namespace MonoTests.Microsoft.VisualBasic
                        InitBase ();
                        codeUnit = new CodeCompileUnit ();
                }
-               
-               protected override string Code {
-                       get { return base.Code.Substring (codeUnitHeader.Length); }
-               }
-               
-               protected override void Generate ()
+
+               protected override string Generate (CodeGeneratorOptions options)
                {
+                       StringWriter writer = new StringWriter ();
+                       writer.NewLine = NewLine;
+
                        generator.GenerateCodeFromCompileUnit (codeUnit, writer, options);
                        writer.Close ();
+                       return writer.ToString ().Substring (codeUnitHeader.Length);
                }
-               
+
                [Test]
                public void DefaultCodeUnitTest ()
                {
-                       Generate ();
-                       Assert.AreEqual ("", Code);
+                       Assert.AreEqual ("", Generate ());
                }
 
                [Test]
@@ -66,8 +65,7 @@ namespace MonoTests.Microsoft.VisualBasic
                public void ReferencedTest ()
                {
                        codeUnit.ReferencedAssemblies.Add ("System.dll");
-                       Generate();
-                       Assert.AreEqual ("", Code);
+                       Assert.AreEqual ("", Generate ());
                }
 
                [Test]
@@ -75,9 +73,8 @@ namespace MonoTests.Microsoft.VisualBasic
                {
                        CodeNamespace ns = new CodeNamespace ("A");
                        codeUnit.Namespaces.Add (ns);
-                       Generate ();
                        Assert.AreEqual (string.Format (CultureInfo.InvariantCulture,
-                               "{0}Namespace A{0}End Namespace{0}", writer.NewLine), Code);
+                               "{0}Namespace A{0}End Namespace{0}", NewLine), Generate ());
                }
 
                [Test]
@@ -86,9 +83,8 @@ namespace MonoTests.Microsoft.VisualBasic
                        CodeNamespace ns = new CodeNamespace ("A");
                        codeUnit.Namespaces.Add (ns);
                        codeUnit.ReferencedAssemblies.Add ("using System;");
-                       Generate ();
                        Assert.AreEqual (string.Format (CultureInfo.InvariantCulture,
-                               "{0}Namespace A{0}End Namespace{0}", writer.NewLine), Code);
+                               "{0}Namespace A{0}End Namespace{0}", NewLine), Generate ());
                }
 
                [Test]
@@ -98,9 +94,8 @@ namespace MonoTests.Microsoft.VisualBasic
                        attrDec.Name = "A";
 
                        codeUnit.AssemblyCustomAttributes.Add (attrDec);
-                       Generate ();
-                       Assertion.AssertEquals (string.Format (CultureInfo.InvariantCulture,
-                               "<Assembly: A()> {0}", writer.NewLine), Code);
+                       Assert.AreEqual (string.Format (CultureInfo.InvariantCulture,
+                               "<Assembly: A()> {0}", NewLine), Generate ());
                }
 
                [Test]
@@ -113,11 +108,16 @@ namespace MonoTests.Microsoft.VisualBasic
                                new CodePrimitiveExpression(false)));
                        attrDec.Arguments.Add (new CodeAttributeArgument("A2", 
                                new CodePrimitiveExpression(true)));
+                       // null name should not be output
+                       attrDec.Arguments.Add (new CodeAttributeArgument (null,
+                               new CodePrimitiveExpression (true)));
+                       // zero length name should not be output
+                       attrDec.Arguments.Add (new CodeAttributeArgument (string.Empty,
+                               new CodePrimitiveExpression (false)));
 
                        codeUnit.AssemblyCustomAttributes.Add (attrDec);
-                       Generate ();
-                       Assert.AreEqual ("<Assembly: A(A1:=false, A2:=true)> " + 
-                               writer.NewLine, Code);
+                       Assert.AreEqual ("<Assembly: A(A1:=false, A2:=true, true, false)> " +
+                               NewLine, Generate ());
                }
 
                [Test]
@@ -130,10 +130,9 @@ namespace MonoTests.Microsoft.VisualBasic
                        attrDec = new CodeAttributeDeclaration ();
                        attrDec.Name = "B";
                        codeUnit.AssemblyCustomAttributes.Add (attrDec);
-                       Generate ();
                        Assert.AreEqual (string.Format (CultureInfo.InvariantCulture, 
-                               "<Assembly: A(),  _{0} Assembly: B()> {0}", writer.NewLine),
-                               Code);
+                               "<Assembly: A(),  _{0} Assembly: B()> {0}", NewLine),
+                               Generate ());
                }
 
                [Test]
@@ -150,11 +149,43 @@ namespace MonoTests.Microsoft.VisualBasic
                        attrDec.Name = "B";
                        codeUnit.AssemblyCustomAttributes.Add (attrDec);
 
-                       Generate ();
-
                        Assert.AreEqual (string.Format (CultureInfo.InvariantCulture,
                                "<Assembly: A(),  _{0} Assembly: B()> {0}{0}Namespace A{0}End "
-                               + "Namespace{0}",writer.NewLine), Code);
+                               + "Namespace{0}", NewLine), Generate ());
+               }
+
+               [Test]
+               public void AttributeAndImportsTest ()
+               {
+                       CodeNamespace ns = new CodeNamespace ();
+                       codeUnit.Namespaces.Add (ns);
+                       ns.Imports.Add(new CodeNamespaceImport("System"));
+                       ns.Imports.Add(new CodeNamespaceImport("System.Reflection"));
+
+                       CodeAttributeDeclaration attrDec = new CodeAttributeDeclaration ();
+                       attrDec.Name = "A";
+                       codeUnit.AssemblyCustomAttributes.Add (attrDec);
+
+                       Assert.AreEqual (string.Format (CultureInfo.InvariantCulture,
+                               "Imports System{0}Imports System.Reflection{0}<Assembly: A()> {0}{0}",
+                               NewLine), Generate ());
+               }
+
+               [Test]
+               public void AttributeAndImportsAndNamespaceTest ()
+               {
+                       CodeNamespace ns = new CodeNamespace ("A");
+                       codeUnit.Namespaces.Add (ns);
+                       ns.Imports.Add(new CodeNamespaceImport("System"));
+                       ns.Imports.Add(new CodeNamespaceImport("System.Reflection"));
+
+                       CodeAttributeDeclaration attrDec = new CodeAttributeDeclaration ();
+                       attrDec.Name = "A";
+                       codeUnit.AssemblyCustomAttributes.Add (attrDec);
+
+                       Assert.AreEqual (string.Format (CultureInfo.InvariantCulture,
+                               "Imports System{0}Imports System.Reflection{0}<Assembly: A()> {0}{0}"
+                               + "Namespace A{0}End Namespace{0}", NewLine), Generate ());
                }
 
                [Test]
@@ -165,11 +196,38 @@ namespace MonoTests.Microsoft.VisualBasic
                        sb.Append (Environment.NewLine);
                        sb.Append ("End Class");
 
+                       StringWriter writer = new StringWriter ();
+                       writer.NewLine = NewLine;
+
                        codeUnit = new CodeSnippetCompileUnit (sb.ToString ());
                        generator.GenerateCodeFromCompileUnit (codeUnit, writer, options);
                        writer.Close ();
-                       Assert.AreEqual (sb.ToString () + writer.NewLine, 
-                                               writer.ToString());
+                       Assert.AreEqual (sb.ToString () + NewLine, writer.ToString());
+               }
+               
+               [Test]
+               public void ExternalSourceTest ()
+               {
+                       CodeSnippetCompileUnit snippet;
+                       
+                       StringBuilder sb = new StringBuilder();
+                       sb.Append ("\n");
+                       sb.Append ("#ExternalSource(\"file.vb\",123)");
+                       sb.Append ("\n");
+                       sb.Append ("\n");
+                       sb.Append ("\n");
+                       sb.Append ("#End ExternalSource");
+                       sb.Append ("\n");
+
+                       StringWriter writer = new StringWriter ();
+                       writer.NewLine = NewLine;
+
+                       codeUnit = new CodeSnippetCompileUnit ("");
+                       snippet = (CodeSnippetCompileUnit) codeUnit;
+                       snippet.LinePragma = new CodeLinePragma ("file.vb", 123);
+                       generator.GenerateCodeFromCompileUnit (codeUnit, writer, options);
+                       writer.Close ();
+                       Assert.AreEqual (sb.ToString (), writer.ToString());
                }
        }
 }