2014-08-13 10:39:27 +01:00
|
|
|
//
|
|
|
|
// Microsoft.VisualBasic.* Test Cases
|
|
|
|
//
|
|
|
|
// Authors:
|
2015-08-26 07:17:56 -04:00
|
|
|
// Gert Driesen (drieseng@users.sourceforge.net)
|
2014-08-13 10:39:27 +01:00
|
|
|
//
|
|
|
|
// (c) 2005 Novell
|
|
|
|
//
|
|
|
|
|
|
|
|
using System;
|
|
|
|
using System.Globalization;
|
|
|
|
using System.IO;
|
|
|
|
using System.Text;
|
|
|
|
using System.CodeDom;
|
|
|
|
using System.CodeDom.Compiler;
|
|
|
|
|
|
|
|
using NUnit.Framework;
|
|
|
|
|
|
|
|
namespace MonoTests.Microsoft.VisualBasic
|
|
|
|
{
|
|
|
|
[TestFixture]
|
|
|
|
public class CodeGeneratorFromCompileUnitTest : CodeGeneratorTestBase
|
|
|
|
{
|
|
|
|
string codeUnitHeader = "";
|
|
|
|
CodeCompileUnit codeUnit = null;
|
|
|
|
|
|
|
|
public CodeGeneratorFromCompileUnitTest ()
|
|
|
|
{
|
|
|
|
Init();
|
|
|
|
codeUnitHeader = Generate ();
|
|
|
|
}
|
|
|
|
|
|
|
|
[SetUp]
|
|
|
|
public void Init ()
|
|
|
|
{
|
|
|
|
InitBase ();
|
|
|
|
codeUnit = new CodeCompileUnit ();
|
|
|
|
}
|
|
|
|
|
|
|
|
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 ()
|
|
|
|
{
|
|
|
|
Assert.AreEqual ("", Generate ());
|
|
|
|
}
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
[ExpectedException (typeof (NullReferenceException))]
|
|
|
|
public void NullCodeUnitTest ()
|
|
|
|
{
|
|
|
|
codeUnit = null;
|
|
|
|
Generate();
|
|
|
|
}
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
public void ReferencedTest ()
|
|
|
|
{
|
|
|
|
codeUnit.ReferencedAssemblies.Add ("System.dll");
|
|
|
|
Assert.AreEqual ("", Generate ());
|
|
|
|
}
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
public void SimpleNamespaceTest ()
|
|
|
|
{
|
|
|
|
CodeNamespace ns = new CodeNamespace ("A");
|
|
|
|
codeUnit.Namespaces.Add (ns);
|
|
|
|
Assert.AreEqual (string.Format (CultureInfo.InvariantCulture,
|
|
|
|
"{0}Namespace A{0}End Namespace{0}", NewLine), Generate ());
|
|
|
|
}
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
public void ReferenceAndSimpleNamespaceTest()
|
|
|
|
{
|
|
|
|
CodeNamespace ns = new CodeNamespace ("A");
|
|
|
|
codeUnit.Namespaces.Add (ns);
|
|
|
|
codeUnit.ReferencedAssemblies.Add ("using System;");
|
|
|
|
Assert.AreEqual (string.Format (CultureInfo.InvariantCulture,
|
|
|
|
"{0}Namespace A{0}End Namespace{0}", NewLine), Generate ());
|
|
|
|
}
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
public void SimpleAttributeTest ()
|
|
|
|
{
|
|
|
|
CodeAttributeDeclaration attrDec = new CodeAttributeDeclaration ();
|
|
|
|
attrDec.Name = "A";
|
|
|
|
|
|
|
|
codeUnit.AssemblyCustomAttributes.Add (attrDec);
|
|
|
|
Assert.AreEqual (string.Format (CultureInfo.InvariantCulture,
|
|
|
|
"<Assembly: A()> {0}", NewLine), Generate ());
|
|
|
|
}
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
public void AttributeWithValueTest ()
|
|
|
|
{
|
|
|
|
CodeAttributeDeclaration attrDec = new CodeAttributeDeclaration ();
|
|
|
|
attrDec.Name = "A";
|
|
|
|
|
|
|
|
attrDec.Arguments.Add (new CodeAttributeArgument("A1",
|
|
|
|
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);
|
|
|
|
Assert.AreEqual ("<Assembly: A(A1:=false, A2:=true, true, false)> " +
|
|
|
|
NewLine, Generate ());
|
|
|
|
}
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
public void MultipleAttributeTest ()
|
|
|
|
{
|
|
|
|
CodeAttributeDeclaration attrDec = new CodeAttributeDeclaration ();
|
|
|
|
attrDec.Name = "A";
|
|
|
|
codeUnit.AssemblyCustomAttributes.Add (attrDec);
|
|
|
|
|
|
|
|
attrDec = new CodeAttributeDeclaration ();
|
|
|
|
attrDec.Name = "B";
|
|
|
|
codeUnit.AssemblyCustomAttributes.Add (attrDec);
|
|
|
|
Assert.AreEqual (string.Format (CultureInfo.InvariantCulture,
|
|
|
|
"<Assembly: A(), _{0} Assembly: B()> {0}", NewLine),
|
|
|
|
Generate ());
|
|
|
|
}
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
public void AttributeAndSimpleNamespaceTest ()
|
|
|
|
{
|
|
|
|
CodeNamespace ns = new CodeNamespace ("A");
|
|
|
|
codeUnit.Namespaces.Add (ns);
|
|
|
|
|
|
|
|
CodeAttributeDeclaration attrDec = new CodeAttributeDeclaration ();
|
|
|
|
attrDec.Name = "A";
|
|
|
|
codeUnit.AssemblyCustomAttributes.Add (attrDec);
|
|
|
|
|
|
|
|
attrDec = new CodeAttributeDeclaration ();
|
|
|
|
attrDec.Name = "B";
|
|
|
|
codeUnit.AssemblyCustomAttributes.Add (attrDec);
|
|
|
|
|
|
|
|
Assert.AreEqual (string.Format (CultureInfo.InvariantCulture,
|
|
|
|
"<Assembly: A(), _{0} Assembly: B()> {0}{0}Namespace A{0}End "
|
|
|
|
+ "Namespace{0}", NewLine), Generate ());
|
|
|
|
}
|
|
|
|
|
2015-08-26 07:17:56 -04:00
|
|
|
[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 ());
|
|
|
|
}
|
|
|
|
|
2014-08-13 10:39:27 +01:00
|
|
|
[Test]
|
|
|
|
public void CodeSnippetTest ()
|
|
|
|
{
|
|
|
|
StringBuilder sb = new StringBuilder();
|
|
|
|
sb.Append ("Public Class Test1");
|
|
|
|
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 () + 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());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|