Author: gert
Date: 2007-10-16 05:32:23 -0400 (Tue, 16 Oct 2007)
New Revision: 87563
Added:
trunk/gert/standalone/bug331601/
trunk/gert/standalone/bug331601/default.build
trunk/gert/standalone/bug331601/test.cs
Modified:
trunk/gert/standalone/known-issues
Log:
Added test for bug #331601.
Added: trunk/gert/standalone/bug331601/default.build
===================================================================
--- trunk/gert/standalone/bug331601/default.build 2007-10-16 09:28:35 UTC
(rev 87562)
+++ trunk/gert/standalone/bug331601/default.build 2007-10-16 09:32:23 UTC
(rev 87563)
@@ -0,0 +1,59 @@
+<project name="bug331601" default="rebuild">
+ <target name="mono-1.0">
+ <property name="csc.defines"
value="NET_1_0,NET_1_1,ONLY_1_1,MONO" />
+ </target>
+
+ <target name="mono-2.0">
+ <property name="csc.defines"
value="NET_1_0,NET_1_1,NET_2_0,ONLY_2_0,MONO" />
+ </target>
+
+ <target name="net-1.1">
+ <property name="csc.defines" value="NET_1_0,NET_1_1,ONLY_1_1" />
+ </target>
+
+ <target name="net-2.0">
+ <property name="csc.defines"
value="NET_1_0,NET_1_1,NET_2_0,ONLY_2_0" />
+ </target>
+
+ <property name="frameworks" value="mono-1.0,mono-2.0,net-1.1,net-2.0" />
+
+ <target name="clean">
+ <delete>
+ <fileset>
+ <include name="bug331601c.dll" />
+ <include name="out" />
+ <include name="test.exe" />
+ </fileset>
+ </delete>
+ </target>
+
+ <target name="build">
+ <property name="original.targetframework"
value="${nant.settings.currentframework}" />
+
+ <foreach property="framework" item="String" in="${frameworks}"
delim=",">
+ <if test="${framework::exists(framework)}">
+ <property name="nant.settings.currentframework"
value="${framework}" />
+ <call
target="${nant.settings.currentframework}" />
+ <call target="run" />
+ <call target="clean" />
+ </if>
+ </foreach>
+
+ <property name="nant.settings.currentframework"
value="${original.targetframework}" />
+ </target>
+
+ <target name="compile">
+ <csc target="exe" define="${csc.defines}" output="test.exe"
warnaserror="true" warninglevel="4">
+ <sources>
+ <include name="test.cs" />
+ </sources>
+ </csc>
+ </target>
+
+ <target name="run" depends="compile">
+ <exec program="test.exe" managed="true" output="out" />
+ <fail if="${file::exists('out')}" />
+ </target>
+
+ <target name="rebuild" depends="clean, build" />
+</project>
Property changes on: trunk/gert/standalone/bug331601/default.build
___________________________________________________________________
Name: svn:eol-style
+ native
Added: trunk/gert/standalone/bug331601/test.cs
===================================================================
--- trunk/gert/standalone/bug331601/test.cs 2007-10-16 09:28:35 UTC (rev
87562)
+++ trunk/gert/standalone/bug331601/test.cs 2007-10-16 09:32:23 UTC (rev
87563)
@@ -0,0 +1,103 @@
+using System;
+using System.Collections;
+using System.IO;
+using System.Runtime.Serialization.Formatters.Binary;
+using System.Reflection;
+using System.Reflection.Emit;
+
+class Program
+{
+ static ArrayList _assemblyBuilders = new ArrayList ();
+
+ static void Main ()
+ {
+ AppDomain.CurrentDomain.AssemblyResolve += new
ResolveEventHandler (
+ AppDomain_AssemblyResolve);
+
+ AssemblyBuilder ab1 =
AppDomain.CurrentDomain.DefineDynamicAssembly (
+ CreateAssemblyName ("bug331601a"),
+ AssemblyBuilderAccess.RunAndSave,
+ AppDomain.CurrentDomain.BaseDirectory);
+ _assemblyBuilders.Add (ab1);
+
+ Console.WriteLine ("A");
+ object p1 = Create (ab1, "A", typeof (MyClass));
+ Serialize (p1);
+
+ AssemblyBuilder ab2 =
AppDomain.CurrentDomain.DefineDynamicAssembly (
+ CreateAssemblyName ("bug331601b"),
+ AssemblyBuilderAccess.RunAndSave,
+ AppDomain.CurrentDomain.BaseDirectory);
+ _assemblyBuilders.Add (ab2);
+
+ Console.WriteLine ("B");
+ object p2 = Create (ab2, "B", p1.GetType ());
+ Serialize (p2);
+
+ Console.WriteLine ("C");
+ object q1 = Save ("C", p2.GetType ());
+ Serialize (q1);
+ }
+
+ static AssemblyName CreateAssemblyName (string name)
+ {
+ AssemblyName aname = new AssemblyName ();
+ aname.Name = name;
+ return aname;
+ }
+
+ static void Serialize (object value)
+ {
+ MemoryStream ms = new MemoryStream ();
+
+ BinaryFormatter bf = new BinaryFormatter ();
+ bf.Serialize (ms, value);
+
+ ms.Position = 0;
+
+ bf = new BinaryFormatter ();
+ bf.Deserialize (ms);
+ }
+
+ static object Create (AssemblyBuilder ab, string typeName, Type
baseType)
+ {
+ ModuleBuilder mb = ab.DefineDynamicModule (ab.GetName ().Name +
".dll");
+ TypeBuilder tb = mb.DefineType (typeName,
TypeAttributes.Public, baseType);
+ tb.SetCustomAttribute (new CustomAttributeBuilder (
+ typeof (SerializableAttribute).GetConstructor (
+ Type.EmptyTypes), new object [0]));
+ Type emittedType = tb.CreateType ();
+ return Activator.CreateInstance (emittedType);
+ }
+
+ static object Save (string typeName, Type baseType)
+ {
+ AssemblyBuilder ab =
AppDomain.CurrentDomain.DefineDynamicAssembly (
+ CreateAssemblyName ("bug331601c"),
+ AssemblyBuilderAccess.RunAndSave,
+ AppDomain.CurrentDomain.BaseDirectory);
+
+ ModuleBuilder mb = ab.DefineDynamicModule (ab.GetName ().Name +
".dll");
+ TypeBuilder tb = mb.DefineType (typeName,
TypeAttributes.Public, baseType);
+ tb.SetCustomAttribute (new CustomAttributeBuilder (
+ typeof (SerializableAttribute).GetConstructor (
+ Type.EmptyTypes), new object [0]));
+ Type emittedType = tb.CreateType ();
+ ab.Save (ab.GetName ().Name + ".dll");
+ return Activator.CreateInstance (emittedType);
+ }
+
+ static Assembly AppDomain_AssemblyResolve (object sender,
ResolveEventArgs args)
+ {
+ foreach (AssemblyBuilder ab in _assemblyBuilders) {
+ if (args.Name.StartsWith (ab.GetName ().Name))
+ return ab;
+ }
+ return null;
+ }
+}
+
+[Serializable]
+public class MyClass
+{
+}
Property changes on: trunk/gert/standalone/bug331601/test.cs
___________________________________________________________________
Name: svn:eol-style
+ native
Modified: trunk/gert/standalone/known-issues
===================================================================
--- trunk/gert/standalone/known-issues 2007-10-16 09:28:35 UTC (rev 87562)
+++ trunk/gert/standalone/known-issues 2007-10-16 09:32:23 UTC (rev 87563)
@@ -86,6 +86,7 @@
bug327438/**
bug328830/**
bug331126/**
+bug331601/**
bug331958/**
bug332163/**
bug332206/**
_______________________________________________
Mono-patches maillist - [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches