Browse Source

* CodeMemberPropertyTest.cs: Test for default value of Type property.
* CodeGeneratorFromCompileUnitTest.cs: Removed last usage of Assertion class.
* CodeGeneratorFromTypeTest.cs: Added tests for method, property and
parameter level attributes.
* CodeMemberProperty.cs: Default value of Type is empty CodeTypeReference.
* System_test.dll.sources: Added CodeMemberPropertyTest.cs from System.CodeDom.
* VBCodeGenerator.cs: Fixed generated code for method, property and parameter
level attributes. Fixed code generated for FieldDirection.

svn path=/trunk/mcs/; revision=46516

Gert Driesen 20 years ago
parent
commit
a420f939be

+ 5 - 0
mcs/class/System/ChangeLog

@@ -1,3 +1,8 @@
+2005-06-26 Gert Driesen <[email protected]>
+
+	* System_test.dll.sources: Added CodeMemberPropertyTest.cs from
+	System.CodeDom.
+
 2005-06-25 Gert Driesen <[email protected]>
 
 	* System_test.dll.sources: Added CodeMemberFieldTest.cs from

+ 6 - 0
mcs/class/System/Microsoft.VisualBasic/ChangeLog

@@ -1,3 +1,9 @@
+2005-06-26  Gert Driesen <[email protected]>
+
+	* VBCodeGenerator.cs: Fixed generated code for method, property
+	and parameter level attributes. Fixed code generated for
+	FieldDirection.
+
 2005-06-25  Gert Driesen <[email protected]>
 
 	* VBCodeGenerator.cs: Removed type shortcuts that are not valid for

+ 37 - 19
mcs/class/System/Microsoft.VisualBasic/VBCodeGenerator.cs

@@ -201,8 +201,8 @@ namespace Microsoft.VisualBasic
 		{
 			GenerateCompileUnitStart (compileUnit);
 
-			OutputAttributes (compileUnit.AssemblyCustomAttributes, 
-				"Assembly: ", false);
+			OutputAttributes (compileUnit.AssemblyCustomAttributes,
+				"Assembly: ", LineHandling.NewLine);
 
 			GenerateNamespaces (compileUnit);
 
@@ -313,8 +313,9 @@ namespace Microsoft.VisualBasic
 
 		protected override void GenerateParameterDeclarationExpression (CodeParameterDeclarationExpression e)
 		{
-			if (e.CustomAttributes != null && e.CustomAttributes.Count > 0)
-				OutputAttributeDeclarations (e.CustomAttributes);
+			if (e.CustomAttributes.Count > 0)
+				OutputAttributes (e.CustomAttributes, null,
+					LineHandling.InLine);
 			OutputDirection (e.Direction);
 			OutputTypeNamePair (e.Type, e.Name);
 		}
@@ -569,7 +570,8 @@ namespace Microsoft.VisualBasic
 			TextWriter output = Output;
 
 			if (eventRef.CustomAttributes.Count > 0)
-				OutputAttributes (eventRef.CustomAttributes, null, true);
+				OutputAttributes (eventRef.CustomAttributes, null, 
+					LineHandling.ContinueLine);
 
 			MemberAttributes attributes = eventRef.Attributes;
 
@@ -586,7 +588,8 @@ namespace Microsoft.VisualBasic
 			TextWriter output = Output;
 
 			if (field.CustomAttributes.Count > 0)
-				OutputAttributes (field.CustomAttributes, null, true);
+				OutputAttributes (field.CustomAttributes, null, 
+					LineHandling.ContinueLine);
 
 			MemberAttributes attributes = field.Attributes;
 			OutputMemberAccessModifier (attributes);
@@ -622,7 +625,8 @@ namespace Microsoft.VisualBasic
 			TextWriter output = Output;
 
 			if (method.CustomAttributes.Count > 0)
-				OutputAttributeDeclarations (method.CustomAttributes);
+				OutputAttributes (method.CustomAttributes, null, 
+					LineHandling.ContinueLine);
 
 			MemberAttributes attributes = method.Attributes;
 
@@ -676,7 +680,8 @@ namespace Microsoft.VisualBasic
 			TextWriter output = Output;
 
 			if (property.CustomAttributes.Count > 0)
-				OutputAttributeDeclarations (property.CustomAttributes);
+				OutputAttributes (property.CustomAttributes, null, 
+					LineHandling.ContinueLine);
 
 			MemberAttributes attributes = property.Attributes;
 			OutputMemberAccessModifier (attributes);
@@ -750,7 +755,8 @@ namespace Microsoft.VisualBasic
 		{
 			TextWriter output = Output;
 
-			OutputAttributes (declaration.CustomAttributes, null, true);
+			OutputAttributes (declaration.CustomAttributes, null, 
+				LineHandling.ContinueLine);
 			TypeAttributes attributes = declaration.TypeAttributes;
 			OutputTypeAttributes (attributes,
 				declaration.IsStruct,
@@ -857,7 +863,7 @@ namespace Microsoft.VisualBasic
 			Output.Write (">");
 		}
 
-		private void OutputAttributes (CodeAttributeDeclarationCollection attributes, string prefix, bool continueLine) {
+		private void OutputAttributes (CodeAttributeDeclarationCollection attributes, string prefix, LineHandling lineHandling) {
 			if (attributes.Count != 0) {
 				GenerateAttributeDeclarationsStart (attributes);
 
@@ -870,8 +876,11 @@ namespace Microsoft.VisualBasic
 					OutputAttributeDeclaration (att);
 
 					while (enumerator.MoveNext ()) {
-						ContinueOnNewLine (", ");
-						Output.Write (" ");
+						Output.Write (", ");
+						if (lineHandling != LineHandling.InLine) {
+							ContinueOnNewLine ("");
+							Output.Write (" ");
+						}
 						att = (CodeAttributeDeclaration) enumerator.Current;
 						if (prefix != null) {
 							Output.Write (prefix);
@@ -881,10 +890,14 @@ namespace Microsoft.VisualBasic
 				}
 				GenerateAttributeDeclarationsEnd (attributes);
 				Output.Write (" ");
-				if (continueLine) {
-					ContinueOnNewLine ("");
-				} else {
-					Output.WriteLine ();
+
+				switch (lineHandling) {
+					case LineHandling.ContinueLine:
+						ContinueOnNewLine ("");
+						break;
+					case LineHandling.NewLine:
+						Output.WriteLine ();
+						break;
 				}
 			}
 		}
@@ -921,11 +934,9 @@ namespace Microsoft.VisualBasic
 		{
 			switch (direction) {
 			case FieldDirection.In:
-				//there is no "In"
-				break;
-			case FieldDirection.Out:
 				Output.Write ("ByVal ");
 				break;
+			case FieldDirection.Out:
 			case FieldDirection.Ref:
 				Output.Write ("ByRef ");
 				break;
@@ -1280,5 +1291,12 @@ namespace Microsoft.VisualBasic
 		{
 			return true;
 		}
+
+		private enum LineHandling
+		{
+			InLine,
+			ContinueLine,
+			NewLine
+		}
 	}
 }

+ 5 - 0
mcs/class/System/System.CodeDom/ChangeLog

@@ -1,3 +1,8 @@
+2005-06-26 Gert Driesen <[email protected]>
+
+	* CodeMemberProperty.cs: Default value of Type is empty 
+	CodeTypeReference.
+
 2005-06-25 Gert Driesen <[email protected]>
 
 	* CodeMemberField.cs: Default value of Type is empty CodeTypeReference.

+ 3 - 0
mcs/class/System/System.CodeDom/CodeMemberProperty.cs

@@ -124,6 +124,9 @@ namespace System.CodeDom
 
 		public CodeTypeReference Type {
 			get {
+				if (type == null) {
+					type = new CodeTypeReference(string.Empty);
+				}
 				return type;
 			}
 			set {

+ 1 - 0
mcs/class/System/System_test.dll.sources

@@ -14,6 +14,7 @@ System/UriBuilderTest.cs
 System/UriTest.cs
 System/UriTest2.cs
 System.CodeDom/CodeMemberFieldTest.cs
+System.CodeDom/CodeMemberPropertyTest.cs
 System.CodeDom.Compiler/IndentedTextWriterTest.cs
 System.Collections.Generic/QueueTest.cs
 System.Collections.Generic/StackTest.cs

+ 7 - 0
mcs/class/System/Test/Microsoft.VisualBasic/ChangeLog

@@ -1,3 +1,10 @@
+2005-06-26  Gert Driesen <[email protected]>
+
+	* CodeGeneratorFromCompileUnitTest.cs: Removed last usage of
+	Assertion class.
+	* CodeGeneratorFromTypeTest.cs: Added tests for method, property and
+	parameter level attributes.
+
 2005-06-25  Gert Driesen <[email protected]>
 
 	* CodeGeneratorFromCompileUnitTest.cs: Added test for assembly-level

+ 1 - 1
mcs/class/System/Test/Microsoft.VisualBasic/CodeGeneratorFromCompileUnitTest.cs

@@ -99,7 +99,7 @@ namespace MonoTests.Microsoft.VisualBasic
 
 			codeUnit.AssemblyCustomAttributes.Add (attrDec);
 			Generate ();
-			Assertion.AssertEquals (string.Format (CultureInfo.InvariantCulture,
+			Assert.AreEqual (string.Format (CultureInfo.InvariantCulture,
 				"<Assembly: A()> {0}", writer.NewLine), Code);
 		}
 

+ 162 - 0
mcs/class/System/Test/Microsoft.VisualBasic/CodeGeneratorFromTypeTest.cs

@@ -165,5 +165,167 @@ namespace MonoTests.Microsoft.VisualBasic
 				+ "Public Name As Integer{0}"
 				+ "End Class{0}", writer.NewLine), Code);
 		}
+
+		[Test]
+		public void PropertyMembersTypeTest1 ()
+		{
+			type.Name = "Test1";
+
+			CodeMemberProperty property = new CodeMemberProperty ();
+
+			CodeAttributeDeclaration attrDec = new CodeAttributeDeclaration ();
+			attrDec.Name = "A";
+			property.CustomAttributes.Add (attrDec);
+
+			attrDec = new CodeAttributeDeclaration ();
+			attrDec.Name = "B";
+			property.CustomAttributes.Add (attrDec);
+
+			type.Members.Add (property);
+
+			Generate ();
+			Assert.AreEqual (string.Format (CultureInfo.InvariantCulture,
+				"Public Class Test1{0}    {0}    <A(),  _{0}     B()>  _{0}    "
+				+ "Private Property  As System.Void{0}    End Property{0}"
+				+ "End Class{0}", writer.NewLine), Code);
+		}
+
+		[Test]
+		public void PropertyMembersTypeTest2 ()
+		{
+			type.Name = "Test1";
+
+			CodeMemberProperty property = new CodeMemberProperty ();
+			property.Name = "Name";
+			property.Attributes = MemberAttributes.Public;
+			property.Type = new CodeTypeReference (typeof (int));
+			type.Members.Add (property);
+
+			Generate ();
+			Assert.AreEqual (string.Format (CultureInfo.InvariantCulture,
+				"Public Class Test1{0}"
+				+ "    {0}"
+				+ "    Public Overridable Property Name As Integer{0}"
+				+ "    End Property{0}"
+				+ "End Class{0}", writer.NewLine), Code);
+		}
+
+		[Test]
+		public void MethodMembersTypeTest1 ()
+		{
+			type.Name = "Test1";
+
+			CodeMemberMethod method = new CodeMemberMethod ();
+
+			CodeAttributeDeclaration attrDec = new CodeAttributeDeclaration ();
+			attrDec.Name = "A";
+			method.CustomAttributes.Add (attrDec);
+
+			attrDec = new CodeAttributeDeclaration ();
+			attrDec.Name = "B";
+			method.CustomAttributes.Add (attrDec);
+
+			type.Members.Add (method);
+
+			Generate ();
+			Assert.AreEqual (string.Format (CultureInfo.InvariantCulture,
+				"Public Class Test1{0}" 
+				+ "    {0}"
+				+ "    <A(),  _{0}" 
+				+ "     B()>  _{0}"
+				+ "    Private Sub (){0}"
+				+ "    End Sub{0}"
+				+ "End Class{0}", writer.NewLine), Code);
+		}
+
+		[Test]
+		public void MethodMembersTypeTest2 ()
+		{
+			type.Name = "Test1";
+
+			CodeMemberMethod method = new CodeMemberMethod ();
+			method.Name = "Something";
+			method.Attributes = MemberAttributes.Public;
+			method.ReturnType = new CodeTypeReference (typeof (int));
+
+			CodeParameterDeclarationExpression param = new CodeParameterDeclarationExpression (
+				typeof(object), "value1");
+			method.Parameters.Add (param);
+
+			param = new CodeParameterDeclarationExpression (
+				typeof (object), "value2");
+			param.Direction = FieldDirection.In;
+			method.Parameters.Add (param);
+
+			param = new CodeParameterDeclarationExpression (typeof (int), "index");
+			param.Direction = FieldDirection.Out;
+			method.Parameters.Add (param);
+
+			param = new CodeParameterDeclarationExpression (typeof (int), "count");
+			param.Direction = FieldDirection.Ref;
+			method.Parameters.Add (param);
+
+			type.Members.Add (method);
+
+			Generate ();
+			Assert.AreEqual (string.Format (CultureInfo.InvariantCulture,
+				"Public Class Test1{0}"
+				+ "    {0}"
+				+ "    Public Overridable Function Something(ByVal value1 As Object, ByVal value2 As Object, ByRef index As Integer, ByRef count As Integer) As Integer{0}"
+				+ "    End Function{0}"
+				+ "End Class{0}", writer.NewLine), Code);
+		}
+
+		[Test]
+		public void MethodMembersTypeTest3 ()
+		{
+			type.Name = "Test1";
+
+			CodeMemberMethod method = new CodeMemberMethod ();
+			method.Name = "Something";
+			method.Attributes = MemberAttributes.Public;
+			method.ReturnType = new CodeTypeReference (typeof (int));
+
+			// first parameter
+			CodeParameterDeclarationExpression param = new CodeParameterDeclarationExpression (
+				typeof (object), "value");
+
+			CodeAttributeDeclaration attrDec = new CodeAttributeDeclaration ();
+			attrDec.Name = "A";
+			param.CustomAttributes.Add (attrDec);
+
+			attrDec = new CodeAttributeDeclaration ();
+			attrDec.Name = "B";
+			param.CustomAttributes.Add (attrDec);
+
+			method.Parameters.Add (param);
+
+			// second parameter
+			param = new CodeParameterDeclarationExpression (typeof (int), "index");
+			param.Direction = FieldDirection.Out;
+			method.Parameters.Add (param);
+
+			attrDec = new CodeAttributeDeclaration ();
+			attrDec.Name = "C";
+			attrDec.Arguments.Add (new CodeAttributeArgument ("A1",
+				new CodePrimitiveExpression (false)));
+			attrDec.Arguments.Add (new CodeAttributeArgument ("A2",
+				new CodePrimitiveExpression (true)));
+			param.CustomAttributes.Add (attrDec);
+
+			attrDec = new CodeAttributeDeclaration ();
+			attrDec.Name = "D";
+			param.CustomAttributes.Add (attrDec);
+
+			type.Members.Add (method);
+
+			Generate ();
+			Assert.AreEqual (string.Format (CultureInfo.InvariantCulture,
+				"Public Class Test1{0}"
+				+ "    {0}"
+				+ "    Public Overridable Function Something(<A(), B()> ByVal value As Object, <C(A1:=false, A2:=true), D()> ByRef index As Integer) As Integer{0}"
+				+ "    End Function{0}"
+				+ "End Class{0}", writer.NewLine), Code);
+		}
 	}
 }

+ 4 - 0
mcs/class/System/Test/System.CodeDom/ChangeLog

@@ -1,3 +1,7 @@
+2005-06-26  Gert Driesen  <[email protected]>
+
+	* CodeMemberPropertyTest.cs: Test for default value of Type property.
+
 2005-06-25  Gert Driesen  <[email protected]>
 
 	* CodeMemberFieldTest.cs: Test for default value of Type property.