[corlib] Fix tests for watchOS. (#3131)
[mono.git] / mcs / class / corlib / Test / System.Reflection / AssemblyTest.cs
index 7a09dcae67032906ba6e673b0dbe6a995da7a8b8..bc3416441cfad03b93e428301df40573aaff264e 100644 (file)
@@ -37,7 +37,7 @@ using System.Configuration.Assemblies;
 using System.Globalization;
 using System.IO;
 using System.Reflection;
-#if !MONOTOUCH
+#if !MONOTOUCH && !MOBILE_STATIC
 using System.Reflection.Emit;
 #endif
 using System.Threading;
@@ -47,6 +47,9 @@ using System.Security;
 using System.Linq;
 using System.Resources;
 
+// Used by GetType_TypeForwarder_Nested ()
+[assembly: System.Runtime.CompilerServices.TypeForwardedToAttribute(typeof(System.Globalization.CultureInfo))]
+
 namespace MonoTests.System.Reflection
 {
        [TestFixture]
@@ -165,13 +168,24 @@ namespace MonoTests.System.Reflection
                        Assert.IsNull (type, "#B2");
                }
 
+               [Test]
+               public void GetType_TypeForwarder_Nested () {
+                       // System.Globalization is a PCL assembly
+                       Type t = typeof (AssemblyTest).Assembly.GetType ("System.Globalization.CultureInfo/Data");
+                       Assert.IsNotNull (t);
+                       Assert.AreEqual ("System.Globalization.CultureInfo+Data", t.FullName);
+               }
+
                [Test]
                public void GetEntryAssembly ()
                {
                        // note: only available in default appdomain
                        // http://weblogs.asp.net/asanto/archive/2003/09/08/26710.aspx
                        // Not sure we should emulate this behavior.
-#if !MONODROID
+#if __WATCHOS__
+                       Assert.IsNull (Assembly.GetEntryAssembly (), "GetEntryAssembly");
+                       Assert.IsTrue (AppDomain.CurrentDomain.IsDefaultAppDomain (), "!default appdomain");
+#elif !MONODROID
                        string fname = AppDomain.CurrentDomain.FriendlyName;
                        if (fname.EndsWith (".dll")) { // nunit-console
                                Assert.IsNull (Assembly.GetEntryAssembly (), "GetEntryAssembly");
@@ -186,7 +200,7 @@ namespace MonoTests.System.Reflection
 #endif
                }
 
-#if !MONOTOUCH // Reflection.Emit is not supported.
+#if !MONOTOUCH && !MOBILE_STATIC // Reflection.Emit is not supported.
                [Test]
                [Category("AndroidNotWorking")] // Missing Mono.CompilerServices.SymbolWriter
                public void GetModules_MissingFile ()
@@ -238,7 +252,7 @@ namespace MonoTests.System.Reflection
                public void Corlib_test ()
                {
                        Assembly corlib_test = Assembly.GetExecutingAssembly ();
-#if MONODROID
+#if MONODROID || MOBILE_STATIC || __WATCHOS__
                        Assert.IsNull (corlib_test.EntryPoint, "EntryPoint");
                        Assert.IsNull (corlib_test.Evidence, "Evidence");
 #elif MOBILE
@@ -446,7 +460,18 @@ namespace MonoTests.System.Reflection
                [Test]
                public void LoadWithPartialName ()
                {
-                       string [] names = { "corlib_test_net_1_1", "corlib_test_net_2_0", "corlib_test_net_4_0", "corlib_test_net_4_5", "corlib_test_net_4_x", "corlib_plattest", "mscorlibtests", "BclTests" };
+// FIXME?
+// So the problem here is that if we load an assembly
+// in a fully aot mode and then cannot load the
+// dylib, we will assert. This test is incompatible
+// with the semantics of aot'ed assembly loading, as
+// aot may assert when loading. This assumes that it's
+// safe to greedly load everything.
+#if MOBILE_STATIC
+                       string [] names = { "mobile_static_corlib_test" };
+#else
+                       string [] names = { "corlib_test_net_1_1", "corlib_test_net_2_0", "corlib_test_net_4_0", "corlib_test_net_4_5", "net_4_x_corlib_test", "corlib_plattest", "mscorlibtests", "BclTests" };
+#endif
 
                        foreach (string s in names)
                                if (Assembly.LoadWithPartialName (s) != null)
@@ -491,7 +516,7 @@ namespace MonoTests.System.Reflection
                        }
                }
 
-#if !MONOTOUCH // Reflection.Emit is not supported.
+#if !MONOTOUCH && !MOBILE_STATIC // Reflection.Emit is not supported.
                [Test]
                public void Location_Empty() {
                        string assemblyFileName = Path.Combine (
@@ -1164,7 +1189,7 @@ namespace MonoTests.System.Reflection
 
                        Assert.AreEqual ("MonoModule", module.GetType ().Name, "#2");
 
-#if !MONOTOUCH
+#if !MONOTOUCH && !MOBILE_STATIC
                        Assert.AreEqual ("mscorlib.dll", module.Name, "#3");
 #endif
                        Assert.IsFalse (module.IsResource (), "#4");
@@ -1305,6 +1330,19 @@ namespace MonoTests.System.Reflection
                        Assert.AreSame (x1, x2, "#1");
                }
 #endif
+
+               class MyAssembly : Assembly { }
+
+               [Test]
+               public void CustomAssemblyImplThrows ()
+               {
+                       var ma = new MyAssembly();
+                       try {
+                               ma.GetName ();
+                               Assert.Fail ("must throw");
+                       } catch (NotImplementedException){
+                       }
+               }
        }
 
        public class TestDefinedTypes