Author: gert
Date: 2008-01-27 11:06:24 -0500 (Sun, 27 Jan 2008)
New Revision: 94055
Modified:
trunk/mcs/class/System/Microsoft.CSharp/CSharpCodeGenerator.cs
trunk/mcs/class/System/Microsoft.CSharp/ChangeLog
trunk/mcs/class/System/Microsoft.VisualBasic/ChangeLog
trunk/mcs/class/System/Microsoft.VisualBasic/VBCodeGenerator.cs
trunk/mcs/class/System/System.CodeDom.Compiler/ChangeLog
trunk/mcs/class/System/System.CodeDom.Compiler/CodeGenerator.cs
trunk/mcs/class/System/Test/Microsoft.CSharp/ChangeLog
trunk/mcs/class/System/Test/Microsoft.CSharp/CodeGeneratorFromExpressionTest.cs
trunk/mcs/class/System/Test/Microsoft.VisualBasic/ChangeLog
trunk/mcs/class/System/Test/Microsoft.VisualBasic/CodeGeneratorFromExpressionTest.cs
Log:
* CSharpCodeGenerator.cs: Avoid ArgumentNullException when
CodeDelegateInvokeExpression.TargetObject is null.
* VBCodeGenerator.cs: In GenerateDelegateInvokeExpression, only emit
RaiseEvent statement on 2.0 profile if TargetObject is a
CodeEventReferenceExpression. Spaces to tabs and code formatting.
* CodeGenerator.cs: Fixed ArgumentException argument names. Indent
expression list.
* CodeGeneratorFromExpressionTest.cs: Copied some tests from VB, and
improved existing tests.
* CodeGeneratorFromExpressionTest.cs: Numbered tests. Fixed test for
DelegateInvokeExpression to pass on MS 2.0 and improved coverage.
Modified: trunk/mcs/class/System/Microsoft.CSharp/CSharpCodeGenerator.cs
===================================================================
--- trunk/mcs/class/System/Microsoft.CSharp/CSharpCodeGenerator.cs
2008-01-27 16:04:40 UTC (rev 94054)
+++ trunk/mcs/class/System/Microsoft.CSharp/CSharpCodeGenerator.cs
2008-01-27 16:06:24 UTC (rev 94055)
@@ -289,7 +289,8 @@
protected override void GenerateDelegateInvokeExpression
(CodeDelegateInvokeExpression expression)
{
- GenerateExpression (expression.TargetObject);
+ if (expression.TargetObject != null)
+ GenerateExpression (expression.TargetObject);
Output.Write ('(');
OutputExpressionList (expression.Parameters);
Output.Write (')');
Modified: trunk/mcs/class/System/Microsoft.CSharp/ChangeLog
===================================================================
--- trunk/mcs/class/System/Microsoft.CSharp/ChangeLog 2008-01-27 16:04:40 UTC
(rev 94054)
+++ trunk/mcs/class/System/Microsoft.CSharp/ChangeLog 2008-01-27 16:06:24 UTC
(rev 94055)
@@ -1,3 +1,8 @@
+2008-01-27 Gert Driesen <[EMAIL PROTECTED]>
+
+ * CSharpCodeGenerator.cs: Avoid ArgumentNullException when
+ CodeDelegateInvokeExpression.TargetObject is null.
+
2008-01-16 Gert Driesen <[EMAIL PROTECTED]>
* CSharpCodeGenerator.cs: Cosmetic changes to the code emitted for
Modified: trunk/mcs/class/System/Microsoft.VisualBasic/ChangeLog
===================================================================
--- trunk/mcs/class/System/Microsoft.VisualBasic/ChangeLog 2008-01-27
16:04:40 UTC (rev 94054)
+++ trunk/mcs/class/System/Microsoft.VisualBasic/ChangeLog 2008-01-27
16:06:24 UTC (rev 94055)
@@ -1,3 +1,9 @@
+2008-01-27 Gert Driesen <[EMAIL PROTECTED]>
+
+ * VBCodeGenerator.cs: In GenerateDelegateInvokeExpression, only emit
+ RaiseEvent statement on 2.0 profile if TargetObject is a
+ CodeEventReferenceExpression. Spaces to tabs and code formatting.
+
2008-01-16 Gert Driesen <[EMAIL PROTECTED]>
* VBCodeGenerator.cs: Implement support for type parameters.
Modified: trunk/mcs/class/System/Microsoft.VisualBasic/VBCodeGenerator.cs
===================================================================
--- trunk/mcs/class/System/Microsoft.VisualBasic/VBCodeGenerator.cs
2008-01-27 16:04:40 UTC (rev 94054)
+++ trunk/mcs/class/System/Microsoft.VisualBasic/VBCodeGenerator.cs
2008-01-27 16:06:24 UTC (rev 94055)
@@ -57,7 +57,7 @@
internal class VBCodeGenerator : CodeGenerator
{
#if NET_2_0
- private string[] Keywords = new string[] {
+ private string [] Keywords = new string [] {
"AddHandler", "AddressOf", "Alias", "And",
"AndAlso", "Ansi", "As", "Assembly",
"Auto", "Boolean", "ByRef", "Byte",
@@ -95,7 +95,7 @@
"Xor"
};
#else
- private string[] Keywords = new string[] {
+ private string [] Keywords = new string [] {
"AddHandler", "AddressOf", "Alias", "And",
"AndAlso", "Ansi", "As", "Assembly",
"Auto", "Boolean", "ByRef", "Byte",
@@ -173,9 +173,9 @@
output.Write ("(Not (");
GenerateExpression (reverse ? e.Right : e.Left);
- output.Write (") Is ");
- GenerateExpression (reverse ? e.Left : e.Right);
- output.Write (')');
+ output.Write (") Is ");
+ GenerateExpression (reverse ? e.Left : e.Right);
+ output.Write (')');
} else {
base.GenerateBinaryOperatorExpression (e);
}
@@ -199,12 +199,9 @@
OutputExpressionList (initializers);
--Indent;
output.Write ("}");
-
- }
- else {
+ } else {
CodeTypeReference arrayType =
createType.ArrayElementType;
- while (arrayType != null)
- {
+ while (arrayType != null) {
createType = arrayType;
arrayType = arrayType.ArrayElementType;
}
@@ -239,14 +236,14 @@
output.Write (")");
}
- private bool AsBool(object datavalue)
+ private bool AsBool (object datavalue)
{
- return datavalue != null && datavalue is bool &&
(bool)datavalue;
+ return datavalue != null && datavalue is bool && (bool)
datavalue;
}
- private string OnOff(bool datavalue)
+ private string OnOff (bool datavalue)
{
- return datavalue?"On":"Off";
+ return datavalue ? "On" : "Off";
}
protected override void GenerateCompileUnitStart
(CodeCompileUnit compileUnit)
@@ -261,8 +258,8 @@
GenerateComment (new CodeComment (" </autogenerated>"));
GenerateComment (new CodeComment
("------------------------------------------------------------------------------"));
Output.WriteLine ();
- if (AsBool(compileUnit.UserData["AllowLateBound"])) {
- Output.WriteLine("Option Explicit
{0}",OnOff(AsBool(compileUnit.UserData["RequireVariableDeclaration"])));
+ if (AsBool (compileUnit.UserData ["AllowLateBound"])) {
+ Output.WriteLine("Option Explicit {0}", OnOff
(AsBool (compileUnit.UserData ["RequireVariableDeclaration"])));
Output.WriteLine("Option Strict Off");
} else {
Output.WriteLine("Option Explicit On"); //
Strict On implies Explicit On
@@ -382,8 +379,13 @@
{
CodeEventReferenceExpression ev =
expression.TargetObject as CodeEventReferenceExpression;
+#if ONLY_1_1
Output.Write ("RaiseEvent ");
+#endif
if (ev != null) {
+#if NET_2_0
+ Output.Write ("RaiseEvent ");
+#endif
if (ev.TargetObject != null &&
!(ev.TargetObject is CodeThisReferenceExpression)) {
GenerateExpression (ev.TargetObject);
Output.Write (".");
@@ -516,13 +518,13 @@
string text = comment.Text;
for (int i = 0; i < text.Length; i++) {
- output.Write (text[i]);
+ output.Write (text [i]);
if (text[i] == '\r') {
- if (i < (text.Length - 1) && text[i +
1] == '\n') {
+ if (i < (text.Length - 1) && text [i +
1] == '\n') {
continue;
}
output.Write (commentChars);
- } else if (text[i] == '\n') {
+ } else if (text [i] == '\n') {
output.Write (commentChars);
}
}
@@ -589,7 +591,6 @@
CodeStatementCollection finallies =
statement.FinallyStatements;
if (finallies.Count > 0) {
-
output.WriteLine ("Finally");
++Indent;
GenerateStatements (finallies);
@@ -600,7 +601,7 @@
}
protected override void GenerateAssignStatement
(CodeAssignStatement statement)
- {
+ {
TextWriter output = Output;
GenerateExpression (statement.Left);
output.Write (" = ");
@@ -676,8 +677,7 @@
OutputTypeNamePair (statement.Type, statement.Name);
CodeExpression initExpression =
statement.InitExpression;
- if (initExpression != null)
- {
+ if (initExpression != null) {
output.Write (" = ");
GenerateExpression (initExpression);
}
@@ -702,13 +702,12 @@
protected override void GenerateEvent (CodeMemberEvent
eventRef, CodeTypeDeclaration declaration)
{
- if (IsCurrentDelegate || IsCurrentEnum) {
+ if (IsCurrentDelegate || IsCurrentEnum)
return;
- }
TextWriter output = Output;
- OutputAttributes (eventRef.CustomAttributes, null,
+ OutputAttributes (eventRef.CustomAttributes, null,
LineHandling.ContinueLine);
OutputMemberAccessModifier (eventRef.Attributes);
@@ -732,9 +731,8 @@
protected override void GenerateField (CodeMemberField field)
{
- if (IsCurrentDelegate || IsCurrentInterface) {
+ if (IsCurrentDelegate || IsCurrentInterface)
return;
- }
TextWriter output = Output;
@@ -768,7 +766,7 @@
protected override void GenerateEntryPointMethod
(CodeEntryPointMethod method, CodeTypeDeclaration declaration)
{
#if NET_2_0
- OutputAttributes (method.CustomAttributes, null,
+ OutputAttributes (method.CustomAttributes, null,
LineHandling.ContinueLine);
#endif
@@ -782,9 +780,8 @@
[MonoTODO ("partially implemented")]
protected override void GenerateMethod (CodeMemberMethod
method, CodeTypeDeclaration declaration)
{
- if (IsCurrentDelegate || IsCurrentEnum) {
+ if (IsCurrentDelegate || IsCurrentEnum)
return;
- }
bool isSub = method.ReturnType.BaseType ==
typeof(void).FullName;
@@ -855,9 +852,8 @@
protected override void GenerateProperty (CodeMemberProperty
property, CodeTypeDeclaration declaration)
{
- if (IsCurrentDelegate || IsCurrentEnum) {
+ if (IsCurrentDelegate || IsCurrentEnum)
return;
- }
TextWriter output = Output;
@@ -944,9 +940,8 @@
protected override void GenerateConstructor (CodeConstructor
constructor, CodeTypeDeclaration declaration)
{
- if (IsCurrentDelegate || IsCurrentEnum ||
IsCurrentInterface) {
+ if (IsCurrentDelegate || IsCurrentEnum ||
IsCurrentInterface)
return;
- }
OutputAttributes (constructor.CustomAttributes, null,
LineHandling.ContinueLine);
@@ -984,9 +979,8 @@
protected override void GenerateTypeConstructor
(CodeTypeConstructor constructor)
{
- if (IsCurrentDelegate || IsCurrentEnum ||
IsCurrentInterface) {
+ if (IsCurrentDelegate || IsCurrentEnum ||
IsCurrentInterface)
return;
- }
#if NET_2_0
OutputAttributes (constructor.CustomAttributes, null,
@@ -1236,12 +1230,12 @@
protected override void OutputFieldScopeModifier
(MemberAttributes attributes)
{
switch (attributes & MemberAttributes.ScopeMask) {
- case MemberAttributes.Static:
- Output.Write ("Shared ");
- break;
- case MemberAttributes.Const:
- Output.Write ("Const ");
- break;
+ case MemberAttributes.Static:
+ Output.Write ("Shared ");
+ break;
+ case MemberAttributes.Const:
+ Output.Write ("Const ");
+ break;
}
}
@@ -1269,79 +1263,77 @@
protected override void OutputMemberAccessModifier
(MemberAttributes attributes)
{
switch (attributes & MemberAttributes.AccessMask) {
- case MemberAttributes.Assembly:
- case MemberAttributes.FamilyAndAssembly:
- Output.Write ("Friend ");
- break;
- case MemberAttributes.Family:
- Output.Write ("Protected ");
- break;
- case MemberAttributes.FamilyOrAssembly:
- Output.Write ("Protected Friend ");
- break;
- case MemberAttributes.Private:
- Output.Write ("Private ");
- break;
- case MemberAttributes.Public:
- Output.Write ("Public ");
- break;
+ case MemberAttributes.Assembly:
+ case MemberAttributes.FamilyAndAssembly:
+ Output.Write ("Friend ");
+ break;
+ case MemberAttributes.Family:
+ Output.Write ("Protected ");
+ break;
+ case MemberAttributes.FamilyOrAssembly:
+ Output.Write ("Protected Friend ");
+ break;
+ case MemberAttributes.Private:
+ Output.Write ("Private ");
+ break;
+ case MemberAttributes.Public:
+ Output.Write ("Public ");
+ break;
}
}
private void OutputVTableModifier (MemberAttributes attributes)
{
- if ((attributes & MemberAttributes.VTableMask) ==
MemberAttributes.New) {
+ if ((attributes & MemberAttributes.VTableMask) ==
MemberAttributes.New)
Output.Write ("Shadows ");
- }
}
protected override void OutputMemberScopeModifier
(MemberAttributes attributes)
{
switch (attributes & MemberAttributes.ScopeMask) {
- case MemberAttributes.Abstract:
- Output.Write ("MustOverride ");
- break;
- case MemberAttributes.Final:
- // do nothing
- break;
- case MemberAttributes.Static:
- Output.Write ("Shared ");
- break;
- case MemberAttributes.Override:
- Output.Write ("Overrides ");
- break;
- case MemberAttributes.Overloaded:
- // based on
http://gendotnet.com/Code%20Gen%20Articles/codedom.htm
- Output.Write ("Overloads ");
+ case MemberAttributes.Abstract:
+ Output.Write ("MustOverride ");
+ break;
+ case MemberAttributes.Final:
+ // do nothing
+ break;
+ case MemberAttributes.Static:
+ Output.Write ("Shared ");
+ break;
+ case MemberAttributes.Override:
+ Output.Write ("Overrides ");
+ break;
+ case MemberAttributes.Overloaded:
+ // based on
http://gendotnet.com/Code%20Gen%20Articles/codedom.htm
+ Output.Write ("Overloads ");
- MemberAttributes access_ovl =
attributes & MemberAttributes.AccessMask;
- if (access_ovl ==
MemberAttributes.Public || access_ovl == MemberAttributes.Family) {
- Output.Write ("Overridable ");
- }
- break;
- default:
- //
- // FUNNY! if the scope value is
- // rubbish (0 or >Const), and access
- // is public, protected make it
- // "virtual".
- //
- // i'm not sure whether this is 100%
- // correct, but it seems to be MS
- // behavior.
- //
- // On MS.NET 2.0, internal properties
- // are also marked "virtual".
- //
- MemberAttributes access = attributes &
MemberAttributes.AccessMask;
- if (access == MemberAttributes.Public
||
+ MemberAttributes access_ovl = attributes &
MemberAttributes.AccessMask;
+ if (access_ovl == MemberAttributes.Public ||
access_ovl == MemberAttributes.Family)
+ Output.Write ("Overridable ");
+ break;
+ default:
+ //
+ // FUNNY! if the scope value is
+ // rubbish (0 or >Const), and access
+ // is public, protected make it
+ // "virtual".
+ //
+ // i'm not sure whether this is 100%
+ // correct, but it seems to be MS
+ // behavior.
+ //
+ // On MS.NET 2.0, internal properties
+ // are also marked "virtual".
+ //
+ MemberAttributes access = attributes &
MemberAttributes.AccessMask;
+ if (access == MemberAttributes.Public ||
#if NET_2_0
- access ==
MemberAttributes.Family || access == MemberAttributes.Assembly)
+ access == MemberAttributes.Family ||
access == MemberAttributes.Assembly)
#else
- access ==
MemberAttributes.Family)
+ access == MemberAttributes.Family)
#endif
- Output.Write ("Overridable ");
- break;
+ Output.Write ("Overridable ");
+ break;
}
}
@@ -1413,25 +1405,25 @@
#endif
switch (attributes & TypeAttributes.VisibilityMask) {
- case TypeAttributes.Public:
- case TypeAttributes.NestedPublic:
- output.Write ("Public ");
- break;
- case TypeAttributes.NestedPrivate:
- output.Write ("Private ");
- break;
+ case TypeAttributes.Public:
+ case TypeAttributes.NestedPublic:
+ output.Write ("Public ");
+ break;
+ case TypeAttributes.NestedPrivate:
+ output.Write ("Private ");
+ break;
#if NET_2_0
- case TypeAttributes.NotPublic:
- case TypeAttributes.NestedFamANDAssem:
- case TypeAttributes.NestedAssembly:
- output.Write ("Friend ");
- break;
- case TypeAttributes.NestedFamily:
- output.Write ("Protected ");
- break;
- case TypeAttributes.NestedFamORAssem:
- output.Write ("Protected Friend ");
- break;
+ case TypeAttributes.NotPublic:
+ case TypeAttributes.NestedFamANDAssem:
+ case TypeAttributes.NestedAssembly:
+ output.Write ("Friend ");
+ break;
+ case TypeAttributes.NestedFamily:
+ output.Write ("Protected ");
+ break;
+ case TypeAttributes.NestedFamORAssem:
+ output.Write ("Protected Friend ");
+ break;
#endif
}
@@ -1505,9 +1497,8 @@
protected override void OutputTypeNamePair (CodeTypeReference
typeRef, String name)
{
#if NET_2_0
- if (name.Length == 0) {
+ if (name.Length == 0)
name = "__exception";
- }
#endif
Output.Write (CreateEscapedIdentifier(name) + " As " +
GetTypeOutput (typeRef));
}
@@ -1522,12 +1513,10 @@
StringBuilder mySBuilder = new
StringBuilder(value.Length);
mySBuilder.Append ("\"");
bool inQuotes = true;
- for (int MyCounter = 0; MyCounter < value.Length;
MyCounter++)
- {
+ for (int MyCounter = 0; MyCounter < value.Length;
MyCounter++) {
if (value[MyCounter] == 34) //quotation mark
{
- if (!inQuotes)
- {
+ if (!inQuotes) {
mySBuilder.Append ("&\"");
inQuotes = true;
}
@@ -1536,8 +1525,7 @@
}
else if (value[MyCounter] >= 32) //standard
ansi/unicode characters
{
- if (!inQuotes)
- {
+ if (!inQuotes) {
mySBuilder.Append ("&\"");
inQuotes = true;
}
@@ -1545,15 +1533,14 @@
}
else //special chars, e.g. line break
{
- if (inQuotes)
- {
+ if (inQuotes) {
mySBuilder.Append ("\"");
inQuotes = false;
}
mySBuilder.Append
("&Microsoft.VisualBasic.ChrW(");
mySBuilder.Append
((int)value[MyCounter]);
mySBuilder.Append (")");
- }
+ }
}
if (inQuotes)
mySBuilder.Append ("\"");
@@ -1595,7 +1582,7 @@
arrayType = type.ArrayElementType;
if (arrayType != null)
output = GetTypeOutput (arrayType);
- else {
+ else {
switch (type.BaseType) {
case "System.DateTime":
output = "Date";
@@ -1691,9 +1678,8 @@
continue;
}
- if (p != property && p.Name == property.Name &&
p.PrivateImplementationType == null) {
+ if (p != property && p.Name == property.Name &&
p.PrivateImplementationType == null)
return true;
- }
}
return false;
}
@@ -1711,9 +1697,8 @@
continue;
}
- if (!(m is CodeTypeConstructor) && !(m is
CodeConstructor) && m != method && m.Name == method.Name &&
m.PrivateImplementationType == null) {
+ if (!(m is CodeTypeConstructor) && !(m is
CodeConstructor) && m != method && m.Name == method.Name &&
m.PrivateImplementationType == null)
return true;
- }
}
return false;
}
@@ -1721,9 +1706,8 @@
private string GetEventName (CodeMemberEvent evt)
{
#if NET_2_0
- if (evt.PrivateImplementationType == null) {
+ if (evt.PrivateImplementationType == null)
return evt.Name;
- }
string baseType =
evt.PrivateImplementationType.BaseType.Replace ('.', '_');
return baseType + "_" + evt.Name;
@@ -1734,9 +1718,8 @@
private string GetMethodName (CodeMemberMethod method)
{
- if (method.PrivateImplementationType == null) {
+ if (method.PrivateImplementationType == null)
return method.Name;
- }
string baseType =
method.PrivateImplementationType.BaseType.Replace ('.', '_');
return baseType + "_" + method.Name;
@@ -1744,9 +1727,8 @@
private string GetPropertyName (CodeMemberProperty property)
{
- if (property.PrivateImplementationType == null) {
+ if (property.PrivateImplementationType == null)
return property.Name;
- }
string baseType =
property.PrivateImplementationType.BaseType.Replace ('.', '_');
return baseType + "_" + property.Name;
Modified: trunk/mcs/class/System/System.CodeDom.Compiler/ChangeLog
===================================================================
--- trunk/mcs/class/System/System.CodeDom.Compiler/ChangeLog 2008-01-27
16:04:40 UTC (rev 94054)
+++ trunk/mcs/class/System/System.CodeDom.Compiler/ChangeLog 2008-01-27
16:06:24 UTC (rev 94055)
@@ -1,3 +1,8 @@
+2008-01-27 Gert Driesen <[EMAIL PROTECTED]>
+
+ * CodeGenerator.cs: Fixed ArgumentException argument names. Indent
+ expression list.
+
2007-12-15 Marek Habersack <[EMAIL PROTECTED]>
* Compiler.cs: added support for the default collection of
Modified: trunk/mcs/class/System/System.CodeDom.Compiler/CodeGenerator.cs
===================================================================
--- trunk/mcs/class/System/System.CodeDom.Compiler/CodeGenerator.cs
2008-01-27 16:04:40 UTC (rev 94054)
+++ trunk/mcs/class/System/System.CodeDom.Compiler/CodeGenerator.cs
2008-01-27 16:06:24 UTC (rev 94055)
@@ -278,7 +278,7 @@
protected void GenerateExpression (CodeExpression e)
{
if (e == null)
- throw new ArgumentNullException ("Value cannot
be null.");
+ throw new ArgumentNullException ("e");
CodeArgumentReferenceExpression argref = e as
CodeArgumentReferenceExpression;
if (argref != null) {
@@ -401,7 +401,7 @@
return;
}
- throw new ArgumentException ("Element type " + e + " is
not supported.");
+ throw new ArgumentException ("Element type " + e + " is
not supported.", "e");
}
protected abstract void GenerateExpressionStatement
(CodeExpressionStatement statement);
@@ -763,6 +763,7 @@
protected virtual void OutputExpressionList
(CodeExpressionCollection expressions,
bool
newLineBetweenItems)
{
+ ++Indent;
IEnumerator enumerator = expressions.GetEnumerator();
if (enumerator.MoveNext()) {
CodeExpression expression =
(CodeExpression)enumerator.Current;
@@ -781,6 +782,7 @@
GenerateExpression (expression);
}
}
+ --Indent;
}
protected virtual void OutputFieldScopeModifier
(MemberAttributes attributes)
Modified: trunk/mcs/class/System/Test/Microsoft.CSharp/ChangeLog
===================================================================
--- trunk/mcs/class/System/Test/Microsoft.CSharp/ChangeLog 2008-01-27
16:04:40 UTC (rev 94054)
+++ trunk/mcs/class/System/Test/Microsoft.CSharp/ChangeLog 2008-01-27
16:06:24 UTC (rev 94055)
@@ -1,3 +1,8 @@
+2008-01-27 Gert Driesen <[EMAIL PROTECTED]>
+
+ * CodeGeneratorFromExpressionTest.cs: Copied some tests from VB, and
+ improved existing tests.
+
2008-01-16 Gert Driesen <[EMAIL PROTECTED]>
* CodeGeneratorFromCompileUnitTest.cs: Avoid using "", and use
Modified:
trunk/mcs/class/System/Test/Microsoft.CSharp/CodeGeneratorFromExpressionTest.cs
===================================================================
---
trunk/mcs/class/System/Test/Microsoft.CSharp/CodeGeneratorFromExpressionTest.cs
2008-01-27 16:04:40 UTC (rev 94054)
+++
trunk/mcs/class/System/Test/Microsoft.CSharp/CodeGeneratorFromExpressionTest.cs
2008-01-27 16:06:24 UTC (rev 94055)
@@ -9,6 +9,7 @@
using System;
using System.CodeDom;
using System.CodeDom.Compiler;
+using System.Globalization;
using System.IO;
using System.Text;
@@ -38,21 +39,35 @@
}
[Test]
- [ExpectedException (typeof (ArgumentException))]
public void DefaultExpressionTest ()
{
using (StringWriter sw = new StringWriter ()) {
- Generate (new CodeExpression (), sw);
- sw.Close ();
+ try {
+ Generate (new CodeExpression (), sw);
+ Assert.Fail ("#1");
+ } catch (ArgumentException ex) {
+ // Element type
System.CodeDom.CodeExpression is not supported
+ Assert.AreEqual (typeof
(ArgumentException), ex.GetType (), "#2");
+ Assert.IsNull (ex.InnerException, "#3");
+ Assert.IsNotNull (ex.Message, "#4");
+ Assert.AreEqual ("e", ex.ParamName,
"#5");
+ }
}
}
[Test]
- [ExpectedException (typeof (ArgumentNullException))]
public void NullExpressionTest ()
{
using (StringWriter sw = new StringWriter ()) {
- Generate (null, sw);
+ try {
+ Generate (null, sw);
+ Assert.Fail ("#1");
+ } catch (ArgumentNullException ex) {
+ Assert.AreEqual (typeof
(ArgumentNullException), ex.GetType (), "#2");
+ Assert.IsNull (ex.InnerException, "#3");
+ Assert.IsNotNull (ex.Message, "#4");
+ Assert.AreEqual ("e", ex.ParamName,
"#5");
+ }
}
}
@@ -350,6 +365,202 @@
}
}
+ [Test]
+ public void ArrayCreateExpressionTest ()
+ {
+ StringBuilder sb;
+
+ sb = new StringBuilder ();
+ using (StringWriter sw = new StringWriter (sb)) {
+ Assert.AreEqual (
+ string.Format
(CultureInfo.InvariantCulture,
+ "new int[] {{{0} 5}}",
+ Environment.NewLine),
+ Generate (new CodeArrayCreateExpression
(
+ typeof (int),
+ new CodeExpression [] {
+ new
CodePrimitiveExpression (5)
+ })
+ , sw), "#1");
+ }
+
+ sb = new StringBuilder ();
+ using (StringWriter sw = new StringWriter (sb)) {
+ Assert.AreEqual ("new int[5]",
+ Generate (new CodeArrayCreateExpression
(
+ typeof (int),
+ new
CodePrimitiveExpression (5))
+ , sw), "#2");
+ }
+
+ sb = new StringBuilder ();
+ using (StringWriter sw = new StringWriter (sb)) {
+ Assert.AreEqual (
+ string.Format
(CultureInfo.InvariantCulture,
+ "new string[] {{{0}" +
+ " \"a\",{0}" +
+ " \"b\",{0}" +
+ " \"c\"}}",
+ Environment.NewLine),
+ Generate (new CodeArrayCreateExpression
(
+ typeof (string),
+ new CodeExpression [] {
+ new
CodePrimitiveExpression ("a"),
+ new
CodePrimitiveExpression ("b"),
+ new
CodePrimitiveExpression ("c"),
+ })
+ , sw));
+ sw.Close ();
+ }
+ }
+
+ [Test]
+ public void EscapedIdentifierTest ()
+ {
+ StringBuilder sb;
+ string code;
+
+ sb = new StringBuilder ();
+ using (StringWriter sw = new StringWriter (sb)) {
+ code = Generate (new
CodeVariableReferenceExpression ("using"), sw);
+ Assert.AreEqual ("@using", code, "#1");
+ sw.Close ();
+ }
+
+ sb = new StringBuilder ();
+ using (StringWriter sw = new StringWriter (sb)) {
+ code = Generate (new
CodeTypeReferenceExpression ("using"), sw);
+ Assert.AreEqual ("@using", code, "#2");
+ sw.Close ();
+ }
+
+ sb = new StringBuilder ();
+ using (StringWriter sw = new StringWriter (sb)) {
+ code = Generate (new
CodePropertyReferenceExpression (null, "using"), sw);
+ Assert.AreEqual ("@using", code, "#3");
+ sw.Close ();
+ }
+
+ sb = new StringBuilder ();
+ using (StringWriter sw = new StringWriter (sb)) {
+ code = Generate (new
CodeMethodReferenceExpression (null, "using"), sw);
+ Assert.AreEqual ("@using", code, "#4");
+ sw.Close ();
+ }
+
+ sb = new StringBuilder ();
+ using (StringWriter sw = new StringWriter (sb)) {
+ code = Generate (new
CodeFieldReferenceExpression (null, "using"), sw);
+ Assert.AreEqual ("@using", code, "#5");
+ sw.Close ();
+ }
+
+ sb = new StringBuilder ();
+ using (StringWriter sw = new StringWriter (sb)) {
+ code = Generate (new
CodeEventReferenceExpression (null, "using"), sw);
+ Assert.AreEqual ("@using", code, "#6");
+ sw.Close ();
+ }
+ }
+
+ [Test]
+ public void EventReferenceTest ()
+ {
+ StringBuilder sb;
+ string code;
+
+ sb = new StringBuilder ();
+ using (StringWriter sw = new StringWriter (sb)) {
+ code = Generate (new
CodeEventReferenceExpression (null, null), sw);
+ Assert.AreEqual (string.Empty, code, "#1");
+ }
+
+ sb = new StringBuilder ();
+ using (StringWriter sw = new StringWriter (sb)) {
+ code = Generate (new
CodeEventReferenceExpression (null, "abc"), sw);
+ Assert.AreEqual ("abc", code, "#2");
+ }
+
+ sb = new StringBuilder ();
+ using (StringWriter sw = new StringWriter (sb)) {
+ code = Generate (new
CodeEventReferenceExpression (new CodeThisReferenceExpression (), null), sw);
+ Assert.AreEqual ("this.", code, "#3");
+ }
+
+ sb = new StringBuilder ();
+ using (StringWriter sw = new StringWriter (sb)) {
+ code = Generate (new
CodeEventReferenceExpression (new CodeThisReferenceExpression (), "abc"), sw);
+ Assert.AreEqual ("this.abc", code, "#4");
+ }
+
+ sb = new StringBuilder ();
+ using (StringWriter sw = new StringWriter (sb)) {
+ code = Generate (new
CodeEventReferenceExpression (new CodePrimitiveExpression ("primitive"), null),
sw);
+ Assert.AreEqual ("\"primitive\".", code, "#5");
+ }
+
+ sb = new StringBuilder ();
+ using (StringWriter sw = new StringWriter (sb)) {
+ code = Generate (new
CodeEventReferenceExpression (new CodePrimitiveExpression ("primitive"),
"abc"), sw);
+ Assert.AreEqual ("\"primitive\".abc", code,
"#6");
+ }
+ }
+
+ [Test]
+ public void DelegateInvokeTest ()
+ {
+ StringBuilder sb;
+ string code;
+
+ sb = new StringBuilder ();
+ using (StringWriter sw = new StringWriter (sb)) {
+ code = Generate (new
CodeDelegateInvokeExpression (null, new CodePrimitiveExpression ("abc")), sw);
+ Assert.AreEqual ("(\"abc\")", code, "#1");
+ }
+
+ sb = new StringBuilder ();
+ using (StringWriter sw = new StringWriter (sb)) {
+ code = Generate (new
CodeDelegateInvokeExpression (new CodeThisReferenceExpression (), new
CodePrimitiveExpression ("abc")), sw);
+ Assert.AreEqual ("this(\"abc\")", code, "#2");
+ }
+
+ sb = new StringBuilder ();
+ using (StringWriter sw = new StringWriter (sb)) {
+ code = Generate (new
CodeDelegateInvokeExpression (new CodePrimitiveExpression ("primitive"), new
CodePrimitiveExpression ("abc")), sw);
+ Assert.AreEqual ("\"primitive\"(\"abc\")",
code, "#3");
+ }
+
+ sb = new StringBuilder ();
+ using (StringWriter sw = new StringWriter (sb)) {
+ code = Generate (new
CodeDelegateInvokeExpression (new CodeEventReferenceExpression (new
CodeThisReferenceExpression (), "Click"), new CodePrimitiveExpression ("abc")),
sw);
+ Assert.AreEqual ("this.Click(\"abc\")", code,
"#4");
+ }
+
+ sb = new StringBuilder ();
+ using (StringWriter sw = new StringWriter (sb)) {
+ code = Generate (new
CodeDelegateInvokeExpression (new CodeEventReferenceExpression (new
CodeThisReferenceExpression (), null), new CodePrimitiveExpression ("abc")),
sw);
+ Assert.AreEqual ("this.(\"abc\")", code, "#5");
+ }
+
+ sb = new StringBuilder ();
+ using (StringWriter sw = new StringWriter (sb)) {
+ code = Generate (new
CodeDelegateInvokeExpression (new CodeEventReferenceExpression (new
CodePrimitiveExpression ("primitive"), "Click"), new CodePrimitiveExpression
("abc")), sw);
+ Assert.AreEqual
("\"primitive\".Click(\"abc\")", code, "#6");
+ }
+
+ sb = new StringBuilder ();
+ using (StringWriter sw = new StringWriter (sb)) {
+ code = Generate (new
CodeDelegateInvokeExpression (new CodeEventReferenceExpression (new
CodePrimitiveExpression ("primitive"), null), new CodePrimitiveExpression
("abc")), sw);
+ Assert.AreEqual ("\"primitive\".(\"abc\")",
code, "#7");
+ }
+
+ sb = new StringBuilder ();
+ using (StringWriter sw = new StringWriter (sb)) {
+ code = Generate (new
CodeDelegateInvokeExpression (), sw);
+ Assert.AreEqual ("()", code, "#8");
+ }
+ }
+
private string Generate (CodeExpression expression,
StringWriter sw)
{
generator.GenerateCodeFromExpression (expression, sw,
options);
Modified: trunk/mcs/class/System/Test/Microsoft.VisualBasic/ChangeLog
===================================================================
--- trunk/mcs/class/System/Test/Microsoft.VisualBasic/ChangeLog 2008-01-27
16:04:40 UTC (rev 94054)
+++ trunk/mcs/class/System/Test/Microsoft.VisualBasic/ChangeLog 2008-01-27
16:06:24 UTC (rev 94055)
@@ -1,3 +1,8 @@
+2008-01-27 Gert Driesen <[EMAIL PROTECTED]>
+
+ * CodeGeneratorFromExpressionTest.cs: Numbered tests. Fixed test for
+ DelegateInvokeExpression to pass on MS 2.0 and improved coverage.
+
2008-01-16 Gert Driesen <[EMAIL PROTECTED]>
* CodeGeneratorFromNamespaceTest.cs: Added tests for type parameters.
Modified:
trunk/mcs/class/System/Test/Microsoft.VisualBasic/CodeGeneratorFromExpressionTest.cs
===================================================================
---
trunk/mcs/class/System/Test/Microsoft.VisualBasic/CodeGeneratorFromExpressionTest.cs
2008-01-27 16:04:40 UTC (rev 94054)
+++
trunk/mcs/class/System/Test/Microsoft.VisualBasic/CodeGeneratorFromExpressionTest.cs
2008-01-27 16:06:24 UTC (rev 94055)
@@ -377,7 +377,7 @@
new CodeExpression [] {
new
CodePrimitiveExpression (5)
})
- , sw));
+ , sw), "#1");
sw.Close ();
}
@@ -387,11 +387,10 @@
Generate (new CodeArrayCreateExpression(
typeof(int),
new
CodePrimitiveExpression (5))
- , sw));
+ , sw), "#2");
sw.Close ();
}
-
sb = new StringBuilder ();
using (StringWriter sw = new StringWriter (sb)) {
Assert.AreEqual ("New String() {\"a\", \"b\",
\"c\"}",
@@ -402,7 +401,7 @@
new
CodePrimitiveExpression ("b"),
new
CodePrimitiveExpression ("c"),
})
- , sw));
+ , sw), "#3");
sw.Close ();
}
}
@@ -472,14 +471,14 @@
using (StringWriter sw = new StringWriter (sb)) {
code = Generate (new
CodeEventReferenceExpression (null, "abc"), sw);
Assert.AreEqual ("abcEvent", code, "#02");
- }
+ }
sb = new StringBuilder ();
using (StringWriter sw = new StringWriter (sb)) {
code = Generate (new
CodeEventReferenceExpression (new CodeThisReferenceExpression (), null), sw);
Assert.AreEqual ("Me.Event", code, "#03");
}
-
+
sb = new StringBuilder ();
using (StringWriter sw = new StringWriter (sb)) {
code = Generate (new
CodeEventReferenceExpression (new CodeThisReferenceExpression (), "abc"), sw);
@@ -508,20 +507,56 @@
sb = new StringBuilder ();
using (StringWriter sw = new StringWriter (sb)) {
code = Generate (new
CodeDelegateInvokeExpression (null, new CodePrimitiveExpression ("abc")), sw);
- Assert.AreEqual ("RaiseEvent (\"abc\")", code,
"#02");
- }
-
+#if NET_2_0
+ Assert.AreEqual ("(\"abc\")", code, "#01");
+#else
+ Assert.AreEqual ("RaiseEvent (\"abc\")", code,
"#01");
+#endif
+ }
+
sb = new StringBuilder ();
using (StringWriter sw = new StringWriter (sb)) {
code = Generate (new
CodeDelegateInvokeExpression (new CodeThisReferenceExpression (), new
CodePrimitiveExpression ("abc")), sw);
- Assert.AreEqual ("RaiseEvent Me(\"abc\")",
code, "#04");
+#if NET_2_0
+ Assert.AreEqual ("Me(\"abc\")", code, "#02");
+#else
+ Assert.AreEqual ("RaiseEvent Me(\"abc\")",
code, "#02");
+#endif
}
-
+
sb = new StringBuilder ();
using (StringWriter sw = new StringWriter (sb)) {
code = Generate (new
CodeDelegateInvokeExpression (new CodePrimitiveExpression ("primitive"), new
CodePrimitiveExpression ("abc")), sw);
- Assert.AreEqual ("RaiseEvent
\"primitive\"(\"abc\")", code, "#06");
+#if NET_2_0
+ Assert.AreEqual ("\"primitive\"(\"abc\")",
code, "#03");
+#else
+ Assert.AreEqual ("RaiseEvent
\"primitive\"(\"abc\")", code, "#03");
+#endif
}
+
+ sb = new StringBuilder ();
+ using (StringWriter sw = new StringWriter (sb)) {
+ code = Generate (new
CodeDelegateInvokeExpression (new CodeEventReferenceExpression (new
CodeThisReferenceExpression (), "Click"), new CodePrimitiveExpression ("abc")),
sw);
+ Assert.AreEqual ("RaiseEvent Click(\"abc\")",
code, "#04");
+ }
+
+ sb = new StringBuilder ();
+ using (StringWriter sw = new StringWriter (sb)) {
+ code = Generate (new
CodeDelegateInvokeExpression (new CodeEventReferenceExpression (new
CodeThisReferenceExpression (), null), new CodePrimitiveExpression ("abc")),
sw);
+ Assert.AreEqual ("RaiseEvent (\"abc\")", code,
"#05");
+ }
+
+ sb = new StringBuilder ();
+ using (StringWriter sw = new StringWriter (sb)) {
+ code = Generate (new
CodeDelegateInvokeExpression (new CodeEventReferenceExpression (new
CodePrimitiveExpression ("primitive"), "Click"), new CodePrimitiveExpression
("abc")), sw);
+ Assert.AreEqual ("RaiseEvent
\"primitive\".Click(\"abc\")", code, "#06");
+ }
+
+ sb = new StringBuilder ();
+ using (StringWriter sw = new StringWriter (sb)) {
+ code = Generate (new
CodeDelegateInvokeExpression (new CodeEventReferenceExpression (new
CodePrimitiveExpression ("primitive"), null), new CodePrimitiveExpression
("abc")), sw);
+ Assert.AreEqual ("RaiseEvent
\"primitive\".(\"abc\")", code, "#07");
+ }
}
}
}
_______________________________________________
Mono-patches maillist - [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches