Author: mhabersack
Date: 2007-09-12 07:17:45 -0400 (Wed, 12 Sep 2007)
New Revision: 85677

Added:
   trunk/mono/mono/tests/assemblyresolve_event.cs
   trunk/mono/mono/tests/assemblyresolve_event2.2.cs
Modified:
   trunk/mono/mono/metadata/ChangeLog
   trunk/mono/mono/metadata/appdomain.c
   trunk/mono/mono/metadata/assembly.c
   trunk/mono/mono/metadata/domain-internals.h
   trunk/mono/mono/tests/ChangeLog
   trunk/mono/mono/tests/Makefile.am
Log:
2007-09-12  Marek Habersack  <[EMAIL PROTECTED]>

            * assemblyresolve_event2.2.cs: added tests for assembly resolution
            event handler.

            * assemblyresolve_event.cs: added tests for assembly resolution
            event handler.

2007-09-12  Marek Habersack  <[EMAIL PROTECTED]>

            * appdomain.c (mono_runtime_init): do not install postload hooks -
            tests show that MS.NET doesn't use anything of that sort to
            trigger the AppDomain.AssemblyResolve event.
            (mono_try_assembly_resolve): renamed from try_assembly_resolve and
            made non-static.

            * assembly.c (mono_assembly_load_with_partial_name): if other       
            attempts fail, trigger the AppDomain.AssemblyResolve event handler
            to resolve the assembly.

            * domain-internals.h: added mono_try_assembly_resolve and marked
            it as internal.



Modified: trunk/mono/mono/metadata/ChangeLog
===================================================================
--- trunk/mono/mono/metadata/ChangeLog  2007-09-12 10:48:34 UTC (rev 85676)
+++ trunk/mono/mono/metadata/ChangeLog  2007-09-12 11:17:45 UTC (rev 85677)
@@ -1,3 +1,18 @@
+2007-09-12  Marek Habersack  <[EMAIL PROTECTED]>
+
+       * appdomain.c (mono_runtime_init): do not install postload hooks -
+       tests show that MS.NET doesn't use anything of that sort to
+       trigger the AppDomain.AssemblyResolve event.
+       (mono_try_assembly_resolve): renamed from try_assembly_resolve and
+       made non-static.
+
+       * assembly.c (mono_assembly_load_with_partial_name): if other   
+       attempts fail, trigger the AppDomain.AssemblyResolve event handler
+       to resolve the assembly.
+
+       * domain-internals.h: added mono_try_assembly_resolve and marked
+       it as internal.
+
 2007-09-11  Jb Evain  <[EMAIL PROTECTED]>
 
        * object-internals.h (MonoReflectionDynamicMethod): add

Modified: trunk/mono/mono/metadata/appdomain.c
===================================================================
--- trunk/mono/mono/metadata/appdomain.c        2007-09-12 10:48:34 UTC (rev 
85676)
+++ trunk/mono/mono/metadata/appdomain.c        2007-09-12 11:17:45 UTC (rev 
85677)
@@ -111,8 +111,6 @@
        mono_install_assembly_refonly_preload_hook 
(mono_domain_assembly_preload, GUINT_TO_POINTER (TRUE));
        mono_install_assembly_search_hook (mono_domain_assembly_search, 
GUINT_TO_POINTER (FALSE));
        mono_install_assembly_refonly_search_hook (mono_domain_assembly_search, 
GUINT_TO_POINTER (TRUE));
-       mono_install_assembly_postload_search_hook 
(mono_domain_assembly_postload_search, GUINT_TO_POINTER (FALSE));
-       mono_install_assembly_postload_refonly_search_hook 
(mono_domain_assembly_postload_search, GUINT_TO_POINTER (TRUE));
        mono_install_assembly_load_hook (mono_domain_fire_assembly_load, NULL);
        mono_install_lookup_dynamic_token 
(mono_reflection_lookup_dynamic_token);
 
@@ -675,8 +673,8 @@
        return res;
 }
 
-static MonoReflectionAssembly *
-try_assembly_resolve (MonoDomain *domain, MonoString *fname, gboolean refonly)
+MonoReflectionAssembly *
+mono_try_assembly_resolve (MonoDomain *domain, MonoString *fname, gboolean 
refonly)
 {
        MonoClass *klass;
        MonoMethod *method;
@@ -712,7 +710,7 @@
        aname_str = mono_stringify_assembly_name (aname);
 
        /* FIXME: We invoke managed code here, so there is a potential for 
deadlocks */
-       assembly = try_assembly_resolve (domain, mono_string_new (domain, 
aname_str), refonly);
+       assembly = mono_try_assembly_resolve (domain, mono_string_new (domain, 
aname_str), refonly);
 
        g_free (aname_str);
 
@@ -1383,7 +1381,7 @@
        ass = mono_assembly_load_full (&aname, NULL, &status, refOnly);
        mono_assembly_name_free (&aname);
 
-       if (!ass && (refass = try_assembly_resolve (domain, assRef, refOnly)) 
== NULL){
+       if (!ass && (refass = mono_try_assembly_resolve (domain, assRef, 
refOnly)) == NULL){
                /* FIXME: it doesn't make much sense since we really don't have 
a filename ... */
                MonoException *exc = mono_get_exception_file_not_found2 (NULL, 
assRef);
                mono_raise_exception (exc);

Modified: trunk/mono/mono/metadata/assembly.c
===================================================================
--- trunk/mono/mono/metadata/assembly.c 2007-09-12 10:48:34 UTC (rev 85676)
+++ trunk/mono/mono/metadata/assembly.c 2007-09-12 11:17:45 UTC (rev 85677)
@@ -1920,7 +1920,11 @@
 
        if (res)
                res->in_gac = TRUE;
-
+       else {
+               MonoDomain *domain = mono_domain_get ();
+               res = mono_try_assembly_resolve (domain, mono_string_new 
(domain, name), FALSE);                
+       }
+       
        g_free (fullname);
        mono_assembly_name_free (aname);
 

Modified: trunk/mono/mono/metadata/domain-internals.h
===================================================================
--- trunk/mono/mono/metadata/domain-internals.h 2007-09-12 10:48:34 UTC (rev 
85676)
+++ trunk/mono/mono/metadata/domain-internals.h 2007-09-12 11:17:45 UTC (rev 
85677)
@@ -331,4 +331,7 @@
 void
 mono_domain_add_class_static_data (MonoDomain *domain, MonoClass *klass, 
gpointer data, guint32 *bitmap);
 
+MonoReflectionAssembly *
+mono_try_assembly_resolve (MonoDomain *domain, MonoString *fname, gboolean 
refonly) MONO_INTERNAL;
+
 #endif /* __MONO_METADATA_DOMAIN_INTERNALS_H__ */

Modified: trunk/mono/mono/tests/ChangeLog
===================================================================
--- trunk/mono/mono/tests/ChangeLog     2007-09-12 10:48:34 UTC (rev 85676)
+++ trunk/mono/mono/tests/ChangeLog     2007-09-12 11:17:45 UTC (rev 85677)
@@ -1,3 +1,11 @@
+2007-09-12  Marek Habersack  <[EMAIL PROTECTED]>
+
+       * assemblyresolve_event2.2.cs: added tests for assembly resolution
+       event handler.
+
+       * assemblyresolve_event.cs: added tests for assembly resolution
+       event handler.
+
 2007-09-11  Mark Probst  <[EMAIL PROTECTED]>
 
        * coreclr-security.cs: Added positive and negative tests for

Modified: trunk/mono/mono/tests/Makefile.am
===================================================================
--- trunk/mono/mono/tests/Makefile.am   2007-09-12 10:48:34 UTC (rev 85676)
+++ trunk/mono/mono/tests/Makefile.am   2007-09-12 11:17:45 UTC (rev 85677)
@@ -43,6 +43,7 @@
 TEST_CS_SRC=                   \
        array-init.cs           \
        arraylist.cs            \
+       assemblyresolve_event.cs        \
        checked.cs              \
        char-isnumber.cs        \
        create-instance.cs      \
@@ -281,6 +282,7 @@
        enum_types.il
 
 TEST_CS2_SRC = \
+       assemblyresolve_event2.2.cs     \
        interlocked-2.2.cs      \
        pinvoke-2.2.cs          \
        bug-78431.2.cs          \

Added: trunk/mono/mono/tests/assemblyresolve_event.cs
===================================================================
--- trunk/mono/mono/tests/assemblyresolve_event.cs      2007-09-12 10:48:34 UTC 
(rev 85676)
+++ trunk/mono/mono/tests/assemblyresolve_event.cs      2007-09-12 11:17:45 UTC 
(rev 85677)
@@ -0,0 +1,57 @@
+using System;
+using System.Reflection;
+
+public class App
+{
+       static bool[] expected_results = {true, false, false, true};
+       static bool handler_fired;
+       
+       public static int Main ()
+       {
+               AppDomain.CurrentDomain.AssemblyResolve += new 
ResolveEventHandler(MyResolveEventHandler);
+
+               int i = 0;
+               handler_fired = false;
+               
+               try {
+                       Assembly.Load ("SomeAssembly");
+               } catch (Exception) {
+               }
+               if (expected_results [i] != handler_fired)
+                       return 1;
+
+               i++;
+               handler_fired = false;
+               try {
+                       Assembly.LoadFile ("SomeAssembly");
+               } catch (Exception) {
+               }
+               if (expected_results [i] != handler_fired)
+                       return 2;
+               
+               i++;
+               handler_fired = false;
+               try {
+                       Assembly.LoadFrom ("SomeAssembly");
+               } catch (Exception) {
+               }
+               if (expected_results [i] != handler_fired)
+                       return 3;
+
+               i++;
+               handler_fired = false;
+               try {
+                       Assembly.LoadWithPartialName ("SomeAssembly");
+               } catch (Exception) {
+               }
+               if (expected_results [i] != handler_fired)
+                       return 4;
+
+               return 0;
+       }
+
+       static Assembly MyResolveEventHandler(object sender, ResolveEventArgs 
args) {
+               handler_fired = true;
+               return null;
+       }
+}


Property changes on: trunk/mono/mono/tests/assemblyresolve_event.cs
___________________________________________________________________
Name: svn:eol-style
   + native

Added: trunk/mono/mono/tests/assemblyresolve_event2.2.cs
===================================================================
--- trunk/mono/mono/tests/assemblyresolve_event2.2.cs   2007-09-12 10:48:34 UTC 
(rev 85676)
+++ trunk/mono/mono/tests/assemblyresolve_event2.2.cs   2007-09-12 11:17:45 UTC 
(rev 85677)
@@ -0,0 +1,39 @@
+using System;
+using System.Reflection;
+
+public class App
+{
+       static bool[] expected_results = {false, false};
+       static bool handler_fired;
+       
+       public static int Main ()
+       {
+               AppDomain.CurrentDomain.ReflectionOnlyAssemblyResolve += new 
ResolveEventHandler(MyReflectionResolveEventHandler);
+
+               int i = 0;
+               handler_fired = false;
+
+               try {
+                       Assembly.ReflectionOnlyLoad ("SomeAssembly");
+               } catch (Exception) {
+               }
+               if (expected_results [i] != handler_fired)
+                       return 1;
+
+               i++;
+               handler_fired = false;
+               try {
+                       Assembly.ReflectionOnlyLoadFrom ("SomeAssembly");
+               } catch (Exception) {
+               }
+               if (expected_results [i] != handler_fired)
+                       return 2;
+
+               return 0;
+       }
+
+       static Assembly MyReflectionResolveEventHandler(object sender, 
ResolveEventArgs args) {
+               handler_fired = true;
+               return null;
+       }
+}


Property changes on: trunk/mono/mono/tests/assemblyresolve_event2.2.cs
___________________________________________________________________
Name: svn:eol-style
   + native

_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to