Merge pull request #1659 from alexanderkyte/stringbuilder-referencesource
[mono.git] / mcs / class / corlib / Test / System.Resources / ResourceManagerTest.cs
index 9d8067c09a69b5bee0a3d66387c52356f2ce72fc..151e21c581d395fd717b9c9d9a7f5b83ba3bd76b 100644 (file)
@@ -3,9 +3,11 @@
 //     NUnit Test Cases for System.Resources.ResourceManager
 //
 // Authors:
-//     Robert Jordan (robertj@gmx.net)
+//     Robert Jordan (robertj@gmx.net)
+//     Gert Driesen (drieseng@users.sourceforge.net)
+//     Sebastien Pouliot  <sebastien@ximian.com>
 //
-// Copyright (C) 2005 Novell, Inc. (http://www.novell.com)
+// Copyright (C) 2005,2008 Novell, Inc. (http://www.novell.com)
 //
 
 //
 //
 
 using System;
+using System.Collections;
 using System.Globalization;
+using System.Reflection;
 using System.Resources;
 using System.Threading;
+using System.IO;
 
 using NUnit.Framework;
 
@@ -41,26 +46,800 @@ namespace MonoTests.System.Resources
        [TestFixture]
        public class ResourceManagerTest
        {
+               private CultureInfo _orgUICulture;
+
+               [SetUp]
+               public void SetUp ()
+               {
+                       _orgUICulture = Thread.CurrentThread.CurrentUICulture;
+               }
+
+               [TearDown]
+               public void TearDown ()
+               {
+                       Thread.CurrentThread.CurrentUICulture = _orgUICulture;
+               }
+
+               [Test] // ResourceManager ()
+               public void Constructor0 ()
+               {
+                       MockResourceManager rm = new MockResourceManager ();
+                       Assert.IsNull (rm.BaseName, "#1");
+                       Assert.IsNull (rm.BaseNameField, "#2");
+                       Assert.IsFalse (rm.IgnoreCase, "#3");
+                       Assert.IsNull (rm.MainAssembly, "#4");
+                       Assert.IsNull (rm.ResourceSets, "#5");
+                       Assert.IsNotNull (rm.ResourceSetType, "#6");
+                       Assert.IsTrue (typeof (ResourceSet).IsAssignableFrom (rm.ResourceSetType), "#7");
+                       Assert.IsFalse (typeof (ResourceSet) == rm.ResourceSetType, "#8");
+               }
+
+               [Test] // ResourceManager (Type)
+               public void Constructor1 ()
+               {
+                       MockResourceManager rm = new MockResourceManager (typeof (string));
+                       Assert.IsNotNull (rm.BaseName, "#1");
+                       Assert.AreEqual ("String", rm.BaseName, "#2");
+                       Assert.IsNotNull (rm.BaseNameField, "#3");
+                       Assert.AreEqual ("String", rm.BaseNameField, "#4");
+                       Assert.IsFalse (rm.IgnoreCase, "#5");
+                       Assert.IsNotNull (rm.MainAssembly, "#6");
+                       Assert.AreEqual (typeof (String).Assembly, rm.MainAssembly, "#7");
+                       Assert.IsNotNull (rm.ResourceSets, "#8");
+                       Assert.AreEqual (0, rm.ResourceSets.Count, "#9");
+                       Assert.IsNotNull (rm.ResourceSetType, "#10");
+                       Assert.IsTrue (typeof (ResourceSet).IsAssignableFrom (rm.ResourceSetType), "#11");
+                       Assert.IsFalse (typeof (ResourceSet) == rm.ResourceSetType, "#12");
+                       Assert.AreEqual ("RuntimeResourceSet", rm.ResourceSetType.Name, "#13");
+               }
+
+               [Test] // ResourceManager (Type)
+               public void Constructor1_ResourceSource_Null ()
+               {
+                       try {
+                               new ResourceManager ((Type) null);
+                               Assert.Fail ("#1");
+                       } catch (ArgumentNullException ex) {
+                               Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
+                               Assert.IsNull (ex.InnerException, "#3");
+                               Assert.IsNotNull (ex.Message, "#4");
+                               Assert.IsNotNull (ex.ParamName, "#5");
+                               Assert.AreEqual ("resourceSource", ex.ParamName, "#6");
+                       }
+               }
+
+               [Test] // ResourceManager (String, Assembly)
+               public void Constructor2 ()
+               {
+                       MockResourceManager rm = null;
+                       Assembly assembly = null;
+
+                       assembly = Assembly.GetExecutingAssembly ();
+                       rm = new MockResourceManager ("mono", assembly);
+                       Assert.IsNotNull (rm.BaseName, "#A1");
+                       Assert.AreEqual ("mono", rm.BaseName, "#A2");
+                       Assert.IsNotNull (rm.BaseNameField, "#A3");
+                       Assert.AreEqual ("mono", rm.BaseNameField, "#A4");
+                       Assert.IsFalse (rm.IgnoreCase, "#A5");
+                       Assert.IsNotNull (rm.MainAssembly, "#A6");
+                       Assert.AreEqual (assembly, rm.MainAssembly, "#A7");
+                       Assert.IsNotNull (rm.ResourceSets, "#A8");
+                       Assert.AreEqual (0, rm.ResourceSets.Count, "#A9");
+                       Assert.IsNotNull (rm.ResourceSetType, "#A10");
+                       Assert.IsTrue (typeof (ResourceSet).IsAssignableFrom (rm.ResourceSetType), "#A11");
+                       Assert.IsFalse (typeof (ResourceSet) == rm.ResourceSetType, "#A12");
+                       Assert.AreEqual ("RuntimeResourceSet", rm.ResourceSetType.Name, "#A13");
+
+                       assembly = typeof (int).Assembly;
+                       rm = new MockResourceManager (string.Empty, assembly);
+                       Assert.IsNotNull (rm.BaseName, "#B1");
+                       Assert.AreEqual (string.Empty, rm.BaseName, "#B2");
+                       Assert.IsNotNull (rm.BaseNameField, "#B3");
+                       Assert.AreEqual (string.Empty, rm.BaseNameField, "#B4");
+                       Assert.IsFalse (rm.IgnoreCase, "#B5");
+                       Assert.IsNotNull (rm.MainAssembly, "#B6");
+                       Assert.AreEqual (assembly, rm.MainAssembly, "#B7");
+                       Assert.IsNotNull (rm.ResourceSets, "#B8");
+                       Assert.AreEqual (0, rm.ResourceSets.Count, "#B9");
+                       Assert.IsNotNull (rm.ResourceSetType, "#B10");
+                       Assert.IsTrue (typeof (ResourceSet).IsAssignableFrom (rm.ResourceSetType), "#B11");
+                       Assert.IsFalse (typeof (ResourceSet) == rm.ResourceSetType, "#B12");
+                       Assert.AreEqual ("RuntimeResourceSet", rm.ResourceSetType.Name, "#B13");
+               }
+
+               [Test] // ResourceManager (String, Assembly)
+               public void Constructor2_BaseName_Null ()
+               {
+                       try {
+                               new ResourceManager ((string) null, Assembly.
+                                       GetExecutingAssembly ());
+                               Assert.Fail ("#1");
+                       } catch (ArgumentNullException ex) {
+                               Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
+                               Assert.IsNull (ex.InnerException, "#3");
+                               Assert.IsNotNull (ex.Message, "#4");
+                               Assert.IsNotNull (ex.ParamName, "#5");
+                               Assert.AreEqual ("baseName", ex.ParamName, "#6");
+                       }
+               }
+
+               [Test] // ResourceManager (String, Assembly)
+               public void Constructor2_BaseName_Resources ()
+               {
+                       MockResourceManager rm = new MockResourceManager (
+                               "mono.resources",
+                               Assembly.GetExecutingAssembly ());
+                       Assert.IsNotNull (rm.BaseName, "#1");
+                       Assert.AreEqual ("mono.resources", rm.BaseName, "#2");
+                       Assert.IsNotNull (rm.BaseNameField, "#3");
+                       Assert.AreEqual ("mono.resources", rm.BaseNameField, "#4");
+                       Assert.IsFalse (rm.IgnoreCase, "#5");
+                       Assert.IsNotNull (rm.MainAssembly, "#6");
+                       Assert.AreEqual (Assembly.GetExecutingAssembly (), rm.MainAssembly, "#7");
+                       Assert.IsNotNull (rm.ResourceSets, "#8");
+                       Assert.AreEqual (0, rm.ResourceSets.Count, "#9");
+                       Assert.IsNotNull (rm.ResourceSetType, "#10");
+                       Assert.IsTrue (typeof (ResourceSet).IsAssignableFrom (rm.ResourceSetType), "#11");
+                       Assert.IsFalse (typeof (ResourceSet) == rm.ResourceSetType, "#12");
+                       Assert.AreEqual ("RuntimeResourceSet", rm.ResourceSetType.Name, "#13");
+               }
+
+               [Test] // ResourceManager (String, Assembly)
+               public void Constructor2_Assembly_Null ()
+               {
+                       try {
+                               new ResourceManager (string.Empty, (Assembly) null);
+                               Assert.Fail ("#1");
+                       } catch (ArgumentNullException ex) {
+                               Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
+                               Assert.IsNull (ex.InnerException, "#3");
+                               Assert.IsNotNull (ex.Message, "#4");
+                               Assert.IsNotNull (ex.ParamName, "#5");
+                               Assert.AreEqual ("assembly", ex.ParamName, "#6");
+                       }
+               }
+
+               [Test] // ResourceManager (String, Assembly, Type)
+               public void Constructor3 ()
+               {
+                       MockResourceManager rm = null;
+                       Assembly assembly = null;
+
+                       assembly = Assembly.GetExecutingAssembly ();
+                       rm = new MockResourceManager ("mono", assembly,
+                               typeof (ResourceSet));
+                       Assert.IsNotNull (rm.BaseName, "#A1");
+                       Assert.AreEqual ("mono", rm.BaseName, "#A2");
+                       Assert.IsNotNull (rm.BaseNameField, "#A3");
+                       Assert.AreEqual ("mono", rm.BaseNameField, "#A4");
+                       Assert.IsFalse (rm.IgnoreCase, "#A5");
+                       Assert.IsNotNull (rm.MainAssembly, "#A6");
+                       Assert.AreEqual (assembly, rm.MainAssembly, "#A7");
+                       Assert.IsNotNull (rm.ResourceSets, "#A8");
+                       Assert.AreEqual (0, rm.ResourceSets.Count, "#A9");
+                       Assert.IsNotNull (rm.ResourceSetType, "#A10");
+                       Assert.AreEqual (typeof (ResourceSet), rm.ResourceSetType, "#A11");
+
+                       assembly = typeof (int).Assembly;
+                       rm = new MockResourceManager ("mono", assembly,
+                               typeof (MockResourceSet));
+                       Assert.IsNotNull (rm.BaseName, "#B1");
+                       Assert.AreEqual ("mono", rm.BaseName, "#B2");
+                       Assert.IsNotNull (rm.BaseNameField, "#B3");
+                       Assert.AreEqual ("mono", rm.BaseNameField, "#B4");
+                       Assert.IsFalse (rm.IgnoreCase, "#B5");
+                       Assert.IsNotNull (rm.MainAssembly, "#B6");
+                       Assert.AreEqual (assembly, rm.MainAssembly, "#B7");
+                       Assert.IsNotNull (rm.ResourceSets, "#B8");
+                       Assert.AreEqual (0, rm.ResourceSets.Count, "#B9");
+                       Assert.IsNotNull (rm.ResourceSetType, "#B10");
+                       Assert.AreEqual (typeof (MockResourceSet), rm.ResourceSetType, "#B11");
+               }
+
+               [Test] // ResourceManager (String, Assembly, Type)
+               public void Constructor3_BaseName_Null ()
+               {
+                       try {
+                               new ResourceManager ((string) null, Assembly.
+                                       GetExecutingAssembly (),
+                                       typeof (ResourceSet));
+                               Assert.Fail ("#1");
+                       } catch (ArgumentNullException ex) {
+                               Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
+                               Assert.IsNull (ex.InnerException, "#3");
+                               Assert.IsNotNull (ex.Message, "#4");
+                               Assert.IsNotNull (ex.ParamName, "#5");
+                               Assert.AreEqual ("baseName", ex.ParamName, "#6");
+                       }
+               }
+
+               [Test] // ResourceManager (String, Assembly, Type)
+               public void Constructor3_BaseName_Resources ()
+               {
+                       MockResourceManager rm = new MockResourceManager (
+                               "mono.resources",
+                               Assembly.GetExecutingAssembly (),
+                               typeof (ResourceSet));
+                       Assert.IsNotNull (rm.BaseName, "#1");
+                       Assert.AreEqual ("mono.resources", rm.BaseName, "#2");
+                       Assert.IsNotNull (rm.BaseNameField, "#3");
+                       Assert.AreEqual ("mono.resources", rm.BaseNameField, "#4");
+                       Assert.IsFalse (rm.IgnoreCase, "#5");
+                       Assert.IsNotNull (rm.MainAssembly, "#6");
+                       Assert.AreEqual (Assembly.GetExecutingAssembly (), rm.MainAssembly, "#7");
+                       Assert.IsNotNull (rm.ResourceSets, "#8");
+                       Assert.AreEqual (0, rm.ResourceSets.Count, "#9");
+                       Assert.IsNotNull (rm.ResourceSetType, "#10");
+                       Assert.AreEqual (typeof (ResourceSet), rm.ResourceSetType, "#11");
+               }
+
+               [Test] // ResourceManager (String, Assembly, Type)
+               public void Constructor3_Assembly_Null ()
+               {
+                       try {
+                               new ResourceManager (string.Empty, (Assembly) null,
+                                       typeof (ResourceSet));
+                               Assert.Fail ("#1");
+                       } catch (ArgumentNullException ex) {
+                               Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
+                               Assert.IsNull (ex.InnerException, "#3");
+                               Assert.IsNotNull (ex.Message, "#4");
+                               Assert.IsNotNull (ex.ParamName, "#5");
+                               Assert.AreEqual ("assembly", ex.ParamName, "#6");
+                       }
+               }
+
+               [Test] // ResourceManager (String, Assembly, Type)
+               public void Constructor3_UsingResourceSet_Invalid ()
+               {
+                       try {
+                               new ResourceManager ("mono", typeof (int).Assembly,
+                                       typeof (string));
+                               Assert.Fail ("#1");
+                       } catch (ArgumentException ex) {
+                               // Type parameter must refer to a subclass of
+                               // ResourceSet
+                               Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
+                               Assert.IsNull (ex.InnerException, "#3");
+                               Assert.IsNotNull (ex.Message, "#4");
+                               Assert.IsTrue (ex.Message.IndexOf ("ResourceSet") != -1, "#5");
+                               Assert.IsNotNull (ex.ParamName, "#6");
+                               Assert.AreEqual ("usingResourceSet", ex.ParamName, "#7");
+                       }
+               }
+
+               [Test] // ResourceManager (String, Assembly, Type)
+               public void Constructor3_UsingResourceSet_Null ()
+               {
+                       MockResourceManager rm = new MockResourceManager (
+                               string.Empty, Assembly.GetExecutingAssembly (),
+                               (Type) null);
+                       Assert.IsNotNull (rm.BaseName, "#1");
+                       Assert.AreEqual (string.Empty, rm.BaseName, "#2");
+                       Assert.IsNotNull (rm.BaseNameField, "#3");
+                       Assert.AreEqual (string.Empty, rm.BaseNameField, "#4");
+                       Assert.IsFalse (rm.IgnoreCase, "#5");
+                       Assert.IsNotNull (rm.MainAssembly, "#6");
+                       Assert.AreEqual (Assembly.GetExecutingAssembly (), rm.MainAssembly, "#7");
+                       Assert.IsNotNull (rm.ResourceSets, "#8");
+                       Assert.AreEqual (0, rm.ResourceSets.Count, "#9");
+                       Assert.IsNotNull (rm.ResourceSetType, "#10");
+                       Assert.IsTrue (typeof (ResourceSet).IsAssignableFrom (rm.ResourceSetType), "#11");
+                       Assert.IsFalse (typeof (ResourceSet) == rm.ResourceSetType, "#12");
+                       Assert.AreEqual ("RuntimeResourceSet", rm.ResourceSetType.Name, "#13");
+               }
+
+               [Test]
+               public void CreateFileBasedResourceManager_BaseName_Null ()
+               {
+                       try {
+                               ResourceManager.CreateFileBasedResourceManager (
+                                       (string) null, AppDomain.CurrentDomain.BaseDirectory,
+                                       typeof (ResourceSet));
+                               Assert.Fail ("#1");
+                       } catch (ArgumentNullException ex) {
+                               Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
+                               Assert.IsNull (ex.InnerException, "#3");
+                               Assert.IsNotNull (ex.Message, "#4");
+                               Assert.IsNotNull (ex.ParamName, "#5");
+                               Assert.AreEqual ("baseName", ex.ParamName, "#6");
+                       }
+               }
+
+               [Test]
+               public void CreateFileBasedResourceManager_BaseName_Resources ()
+               {
+                       ResourceManager rm = ResourceManager.CreateFileBasedResourceManager (
+                               "MyResources.resources", "Test/resources", null);
+                       try {
+                               rm.GetResourceSet (CultureInfo.InvariantCulture, true, true);
+                               Assert.Fail ("#1");
+                       } catch (MissingManifestResourceException ex) {
+                               // Could not find any resources appropriate for
+                               // the specified culture (or the neutral culture)
+                               //on disk
+                               Assert.AreEqual (typeof (MissingManifestResourceException), ex.GetType (), "#2");
+                               Assert.IsNull (ex.InnerException, "#3");
+                               Assert.IsNotNull (ex.Message, "#4");
+                       }
+               }
+
+               [Test]
+               public void CreateFileBasedResourceManager_ResourceDir_Null ()
+               {
+                       try {
+                               ResourceManager.CreateFileBasedResourceManager (
+                                       "whatever", (string) null,
+                                       typeof (ResourceSet));
+                               Assert.Fail ("#1");
+                       } catch (ArgumentNullException ex) {
+                               Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
+                               Assert.IsNull (ex.InnerException, "#3");
+                               Assert.IsNotNull (ex.Message, "#4");
+                               Assert.IsNotNull (ex.ParamName, "#5");
+                               Assert.AreEqual ("resourceDir", ex.ParamName, "#6");
+                       }
+               }
+
+               [Test]
+               public void CreateFileBasedResourceManager_UsingResourceSet_Invalid ()
+               {
+                       ResourceManager rm = ResourceManager.CreateFileBasedResourceManager (
+                               "MyResources", "Test/resources", typeof (string));
+                       Assert.IsNotNull (rm.BaseName, "#1");
+                       Assert.AreEqual ("MyResources", rm.BaseName, "#2");
+                       Assert.IsFalse (rm.IgnoreCase, "#3");
+                       Assert.IsNotNull (rm.ResourceSetType, "#4");
+                       Assert.AreEqual (typeof (string), rm.ResourceSetType, "#5");
+               }
+
+               [Test]
+               public void CreateFileBasedResourceManager_UsingResourceSet_Null ()
+               {
+                       ResourceManager rm = ResourceManager.CreateFileBasedResourceManager (
+                               "MyResources", "Test/resources", (Type) null);
+                       Assert.IsNotNull (rm.BaseName, "#1");
+                       Assert.AreEqual ("MyResources", rm.BaseName, "#2");
+                       Assert.IsFalse (rm.IgnoreCase, "#3");
+                       Assert.IsNotNull (rm.ResourceSetType, "#4");
+                       Assert.IsTrue (typeof (ResourceSet).IsAssignableFrom (rm.ResourceSetType), "#5");
+                       Assert.IsFalse (typeof (ResourceSet) == rm.ResourceSetType, "#6");
+                       Assert.AreEqual ("RuntimeResourceSet", rm.ResourceSetType.Name, "#7");
+               }
+
                [Test]
-               public void TestInvariantCulture ()
+               [Category ("MobileNotWorking")]
+               public void GetObject ()
                {
+                       ResourceManager rm = ResourceManager.
+                               CreateFileBasedResourceManager ("MyResources", "Test/resources", null);
+
                        Thread.CurrentThread.CurrentUICulture = CultureInfo.InvariantCulture;
+                       Assert.AreEqual ("Hello World", rm.GetObject ("HelloWorld"), "#A1");
+                       Assert.AreEqual ("Hello World", rm.GetObject ("HelloWorld", new CultureInfo ("de")), "#A2");
+                       Assert.AreEqual ("Hello World", rm.GetObject ("HelloWorld", (CultureInfo) null), "#A3");
+                       Assert.IsNull (rm.GetObject ("deHelloWorld"), "#A4");
+                       Assert.AreEqual ("Hallo Welt", rm.GetObject ("deHelloWorld", new CultureInfo ("de")), "#A5");
+                       Assert.IsNull (rm.GetObject ("deHelloWorld", (CultureInfo) null), "#A6");
+
+                       Thread.CurrentThread.CurrentUICulture = new CultureInfo ("de");
+                       Assert.AreEqual ("Hello World", rm.GetObject ("HelloWorld"), "#B1");
+                       Assert.AreEqual ("Hello World", rm.GetObject ("HelloWorld", (CultureInfo) null), "#B2");
+                       Assert.AreEqual ("Hallo Welt", rm.GetObject ("deHelloWorld"), "#B3");
+                       Assert.IsNull (rm.GetObject ("deHelloWorld", new CultureInfo ("nl-BE")), "#B4");
+                       Assert.AreEqual ("Hallo Welt", rm.GetObject ("deHelloWorld", (CultureInfo) null), "#B5");
+
+                       Thread.CurrentThread.CurrentUICulture = new CultureInfo ("nl-BE");
+                       Assert.AreEqual ("Hello World", rm.GetObject ("HelloWorld"), "#C1");
+                       Assert.AreEqual ("Hello World", rm.GetObject ("HelloWorld", new CultureInfo ("de")), "#C2");
+                       Assert.AreEqual ("Hello World", rm.GetObject ("HelloWorld", (CultureInfo) null), "#C3");
+                       Assert.IsNull (rm.GetObject ("deHelloWorld"), "#C4");
+                       Assert.AreEqual ("Hallo Welt", rm.GetObject ("deHelloWorld", new CultureInfo ("de")), "#C5");
+                       Assert.IsNull (rm.GetObject ("deHelloWorld", (CultureInfo) null), "#C6");
+
+                       rm.ReleaseAllResources ();
+               }
+
+               [Test]
+               public void GetObject_Name_Null ()
+               {
+                       ResourceManager rm = new ResourceManager (typeof (string));
+                       try {
+                               rm.GetObject ((string) null);
+                               Assert.Fail ("#A1");
+                       } catch (ArgumentNullException ex) {
+                               Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#A2");
+                               Assert.IsNull (ex.InnerException, "#A3");
+                               Assert.IsNotNull (ex.Message, "#A4");
+                               Assert.IsNotNull (ex.ParamName, "#A5");
+                               Assert.AreEqual ("name", ex.ParamName, "#A6");
+                       }
+
+                       try {
+                               rm.GetObject ((string) null, CultureInfo.InvariantCulture);
+                               Assert.Fail ("#B1");
+                       } catch (ArgumentNullException ex) {
+                               Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#B2");
+                               Assert.IsNull (ex.InnerException, "#B3");
+                               Assert.IsNotNull (ex.Message, "#B4");
+                               Assert.IsNotNull (ex.ParamName, "#B5");
+                               Assert.AreEqual ("name", ex.ParamName, "#B6");
+                       }
+                       rm.ReleaseAllResources ();
+               }
+
+               [Test]
+               [Category ("MobileNotWorking")]
+               public void GetObject_ResourceSet_Disposed ()
+               {
+                       Thread.CurrentThread.CurrentUICulture = new CultureInfo ("de");
                        ResourceManager rm = ResourceManager.
                                CreateFileBasedResourceManager ("MyResources", "Test/resources", null);
-                       Assert.AreEqual ("Hello World", rm.GetString ("HelloWorld"), "#01");
-                       Assert.AreEqual ("Hello World", rm.GetObject ("HelloWorld"), "#02");
+                       ResourceSet rs = rm.GetResourceSet (new CultureInfo ("de"),
+                               true, true);
+                       rs.Dispose ();
+
+                       try {
+                               rm.GetObject ("deHelloWorld");
+                               Assert.Fail ("#1");
+                       } catch (ObjectDisposedException ex) {
+                               // Cannot access a closed resource set
+                               Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
+                               Assert.IsNull (ex.InnerException, "#3");
+                               Assert.IsNotNull (ex.Message, "#4");
+                       } finally {
+                               rm.ReleaseAllResources ();
+                       }
                }
 
                [Test]
-               public void TestGermanCulture ()
+               public void GetResourceFileName ()
+               {
+                       MockResourceManager rm = new MockResourceManager ();
+                       Assert.AreEqual (".nl-BE.resources",
+                               rm.GetResourceFileName (new CultureInfo ("nl-BE")), "#A1");
+                       Assert.AreEqual (".fr.resources",
+                               rm.GetResourceFileName (new CultureInfo ("fr")), "#A2");
+                       Assert.AreEqual (".resources",
+                               rm.GetResourceFileName (CultureInfo.InvariantCulture), "#A3");
+
+                       rm = new MockResourceManager (typeof (string));
+                       Assert.AreEqual ("String.nl-BE.resources",
+                               rm.GetResourceFileName (new CultureInfo ("nl-BE")), "#B1");
+                       Assert.AreEqual ("String.fr.resources",
+                               rm.GetResourceFileName (new CultureInfo ("fr")), "#B2");
+                       Assert.AreEqual ("String.resources",
+                               rm.GetResourceFileName (CultureInfo.InvariantCulture), "#B3");
+               }
+
+               [Test]
+               public void GetResourceFileName_Culture_Null ()
+               {
+                       MockResourceManager rm = new MockResourceManager ();
+                       try {
+                               rm.GetResourceFileName ((CultureInfo) null);
+                               Assert.Fail ("#1");
+                       } catch (NullReferenceException) {
+                       }
+               }
+
+               [Test]
+               public void GetResourceSet_Culture_Null ()
+               {
+                       ResourceManager rm = new ResourceManager (typeof (string));
+                       try {
+                               rm.GetResourceSet ((CultureInfo) null, false, false);
+                               Assert.Fail ("#1");
+                       } catch (ArgumentNullException ex) {
+                               Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
+                               Assert.IsNull (ex.InnerException, "#3");
+                               Assert.IsNotNull (ex.Message, "#4");
+                               Assert.IsNotNull (ex.ParamName, "#5");
+                               Assert.AreEqual ("culture", ex.ParamName, "#6");
+                       }
+                       rm.ReleaseAllResources ();
+               }
+
+               [Test]
+               [Category ("MobileNotWorking")]
+               public void GetString ()
+               {
+                       ResourceManager rm = ResourceManager.
+                               CreateFileBasedResourceManager ("MyResources", "Test/resources", null);
+
+                       Thread.CurrentThread.CurrentUICulture = CultureInfo.InvariantCulture;
+                       Assert.AreEqual ("Hello World", rm.GetString ("HelloWorld"), "#A1");
+                       Assert.AreEqual ("Hello World", rm.GetString ("HelloWorld", new CultureInfo ("de")), "#A2");
+                       Assert.AreEqual ("Hello World", rm.GetString ("HelloWorld", (CultureInfo) null), "#A3");
+                       Assert.IsNull (rm.GetString ("deHelloWorld"), "#A4");
+                       Assert.AreEqual ("Hallo Welt", rm.GetString ("deHelloWorld", new CultureInfo ("de")), "#A5");
+                       Assert.IsNull (rm.GetString ("deHelloWorld", (CultureInfo) null), "#A6");
+
+                       Thread.CurrentThread.CurrentUICulture = new CultureInfo ("de");
+                       Assert.AreEqual ("Hello World", rm.GetString ("HelloWorld"), "#B1");
+                       Assert.AreEqual ("Hello World", rm.GetString ("HelloWorld", (CultureInfo) null), "#B2");
+                       Assert.AreEqual ("Hallo Welt", rm.GetString ("deHelloWorld"), "#B3");
+                       Assert.IsNull (rm.GetString ("deHelloWorld", new CultureInfo ("nl-BE")), "#B4");
+                       Assert.AreEqual ("Hallo Welt", rm.GetString ("deHelloWorld", (CultureInfo) null), "#B5");
+
+                       Thread.CurrentThread.CurrentUICulture = new CultureInfo ("nl-BE");
+                       Assert.AreEqual ("Hello World", rm.GetString ("HelloWorld"), "#C1");
+                       Assert.AreEqual ("Hello World", rm.GetString ("HelloWorld", new CultureInfo ("de")), "#C2");
+                       Assert.AreEqual ("Hello World", rm.GetString ("HelloWorld", (CultureInfo) null), "#C3");
+                       Assert.IsNull (rm.GetString ("deHelloWorld"), "#C4");
+                       Assert.AreEqual ("Hallo Welt", rm.GetString ("deHelloWorld", new CultureInfo ("de")), "#C5");
+                       Assert.IsNull (rm.GetString ("deHelloWorld", (CultureInfo) null), "#C6");
+
+                       rm.ReleaseAllResources ();
+               }
+
+               [Test]
+               public void GetString_Name_Null ()
+               {
+                       ResourceManager rm = new ResourceManager (typeof (string));
+                       try {
+                               rm.GetString ((string) null);
+                               Assert.Fail ("#A1");
+                       } catch (ArgumentNullException ex) {
+                               Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#A2");
+                               Assert.IsNull (ex.InnerException, "#A3");
+                               Assert.IsNotNull (ex.Message, "#A4");
+                               Assert.IsNotNull (ex.ParamName, "#A5");
+                               Assert.AreEqual ("name", ex.ParamName, "#A6");
+                       }
+
+                       try {
+                               rm.GetString ((string) null, CultureInfo.InvariantCulture);
+                               Assert.Fail ("#B1");
+                       } catch (ArgumentNullException ex) {
+                               Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#B2");
+                               Assert.IsNull (ex.InnerException, "#B3");
+                               Assert.IsNotNull (ex.Message, "#B4");
+                               Assert.IsNotNull (ex.ParamName, "#B5");
+                               Assert.AreEqual ("name", ex.ParamName, "#B6");
+                       }
+                       rm.ReleaseAllResources ();
+               }
+
+               [Test]
+               [Category ("MobileNotWorking")]
+               [SetCulture ("de")]
+               public void GetString_ResourceSet_Disposed ()
                {
-                       Thread.CurrentThread.CurrentUICulture = new CultureInfo ("de-DE");
                        ResourceManager rm = ResourceManager.
                                CreateFileBasedResourceManager ("MyResources", "Test/resources", null);
-                       Assert.AreEqual ("Hello World", rm.GetString ("HelloWorld"), "#01");
-                       Assert.AreEqual ("Hello World", rm.GetObject ("HelloWorld"), "#02");
-                       Assert.AreEqual ("Hallo Welt", rm.GetString ("deHelloWorld"), "#03");
-                       Assert.AreEqual ("Hallo Welt", rm.GetObject ("deHelloWorld"), "#04");
+                       ResourceSet rs = rm.GetResourceSet (new CultureInfo ("de"),
+                               true, true);
+                       rs.Dispose ();
+
+                       Assert.IsNull (rm.GetString ("deHelloWorld"));
+                       rm.ReleaseAllResources ();
+               }
+
+               [Test]
+               [Category ("MobileNotWorking")]
+               public void GetStream ()
+               {
+                       Thread.CurrentThread.CurrentUICulture = CultureInfo.InvariantCulture;
+                       ResourceManager rm = ResourceManager.
+                               CreateFileBasedResourceManager ("StreamTest", "Test/resources", null);
+                       UnmanagedMemoryStream s = rm.GetStream ("test");
+                       Assert.AreEqual (22, s.Length, "#A1");
+                       Assert.AreEqual ("veritas vos liberabit\n", new StreamReader (s).ReadToEnd (), "#A2");
+                       s.Close ();
+
+                       Thread.CurrentThread.CurrentUICulture = new CultureInfo ("ja-JP");
+                       s = rm.GetStream ("test");
+                       Assert.AreEqual (22, s.Length, "#B1");
+                       Assert.AreEqual ("Veritas Vos Liberabit\n", new StreamReader (s).ReadToEnd (), "#B2");
+                       s.Close ();
+
+                       Thread.CurrentThread.CurrentUICulture = new CultureInfo ("nl-BE");
+                       s = rm.GetStream ("test");
+                       Assert.AreEqual (22, s.Length, "#C1");
+                       Assert.AreEqual ("veritas vos liberabit\n", new StreamReader (s).ReadToEnd (), "#C2");
+                       rm.ReleaseAllResources ();
+               }
+
+               [Test]
+               [Category ("MobileNotWorking")]
+               public void GetStream_Culture ()
+               {
+                       Thread.CurrentThread.CurrentUICulture = CultureInfo.InvariantCulture;
+                       ResourceManager rm = ResourceManager.
+                               CreateFileBasedResourceManager ("StreamTest", "Test/resources", null);
+                       UnmanagedMemoryStream s = rm.GetStream ("test", new CultureInfo ("ja-JP"));
+                       Assert.AreEqual (22, s.Length, "#1");
+                       Assert.AreEqual ("Veritas Vos Liberabit\n", new StreamReader (s).ReadToEnd (), "#2");
+                       s.Close ();
+
+                       Thread.CurrentThread.CurrentUICulture = CultureInfo.InvariantCulture;
+                       s = rm.GetStream ("test", null);
+                       Assert.AreEqual (22, s.Length, "#1");
+                       Assert.AreEqual ("veritas vos liberabit\n", new StreamReader (s).ReadToEnd (), "#2");
+                       s.Close ();
+
+                       Thread.CurrentThread.CurrentUICulture = new CultureInfo ("ja-JP");
+                       s = rm.GetStream ("test", null);
+                       Assert.AreEqual (22, s.Length, "#1");
+                       Assert.AreEqual ("Veritas Vos Liberabit\n", new StreamReader (s).ReadToEnd (), "#2");
+                       s.Close ();
+                       rm.ReleaseAllResources ();
+               }
+
+               [Test]
+               public void GetStream_Name_Null ()
+               {
+                       ResourceManager rm = new ResourceManager (typeof (string));
+                       try {
+                               rm.GetStream ((string) null);
+                               Assert.Fail ("#A1");
+                       } catch (ArgumentNullException ex) {
+                               Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#A2");
+                               Assert.IsNull (ex.InnerException, "#A3");
+                               Assert.IsNotNull (ex.Message, "#A4");
+                               Assert.IsNotNull (ex.ParamName, "#A5");
+                               Assert.AreEqual ("name", ex.ParamName, "#A6");
+                       }
+
+                       try {
+                               rm.GetStream ((string) null, CultureInfo.InvariantCulture);
+                               Assert.Fail ("#A1");
+                       } catch (ArgumentNullException ex) {
+                               Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#A2");
+                               Assert.IsNull (ex.InnerException, "#A3");
+                               Assert.IsNotNull (ex.Message, "#A4");
+                               Assert.IsNotNull (ex.ParamName, "#A5");
+                               Assert.AreEqual ("name", ex.ParamName, "#A6");
+                       }
+                       rm.ReleaseAllResources ();
+               }
+
+               [Test]
+               [Category ("MobileNotWorking")]
+               public void GetStream_Resource_DoesNotExist ()
+               {
+                       ResourceManager rm = ResourceManager.
+                               CreateFileBasedResourceManager ("StreamTest", "Test/resources", null);
+                       Assert.IsNull (rm.GetStream ("HelloWorld"));
+                       rm.ReleaseAllResources ();
+               }
+
+               [Test]
+               [Category ("MobileNotWorking")]
+               public void GetStream_Resource_NonStream ()
+               {
+                       ResourceManager rm = ResourceManager.
+                               CreateFileBasedResourceManager ("MyResources", "Test/resources", null);
+
+                       try {
+                               rm.GetStream ("HelloWorld", CultureInfo.InvariantCulture);
+                               Assert.Fail ("#1");
+                       } catch (InvalidOperationException ex) {
+                               // Resource 'HelloWorld' was not a Stream - call
+                               // GetObject instead
+                               Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#2");
+                               Assert.IsNull (ex.InnerException, "#3");
+                               Assert.IsNotNull (ex.Message, "#4");
+                       } finally {
+                               rm.ReleaseAllResources ();
+                       }
+               }
+
+               [Test]
+               public void GetStream_ResourceFile_DoesNotExist ()
+               {
+                       ResourceManager rm = ResourceManager.
+                               CreateFileBasedResourceManager ("DoesNotExist", "Test/resources", null);
+                       try {
+                               rm.GetStream ("HelloWorld");
+                               Assert.Fail ("#1");
+                       } catch (MissingManifestResourceException ex) {
+                               // Could not find any resources appropriate for
+                               // the specified culture (or the neutral culture)
+                               //on disk
+                               Assert.AreEqual (typeof (MissingManifestResourceException), ex.GetType (), "#2");
+                               Assert.IsNull (ex.InnerException, "#3");
+                               Assert.IsNotNull (ex.Message, "#4");
+                       }
+               }
+
+               [Test]
+               [Category ("MobileNotWorking")]
+               public void GetStream_ResourceSet_Disposed ()
+               {
+                       Thread.CurrentThread.CurrentUICulture = CultureInfo.InvariantCulture;
+                       ResourceManager rm = ResourceManager.
+                               CreateFileBasedResourceManager ("StreamTest", "Test/resources", null);
+                       ResourceSet rs = rm.GetResourceSet (new CultureInfo ("ja-JP"),
+                               true, true);
+                       rs.Dispose ();
+
+                       try {
+                               rm.GetStream ("test", new CultureInfo ("ja-JP"));
+                               Assert.Fail ("#1");
+                       } catch (ObjectDisposedException ex) {
+                               // Cannot access a closed resource set
+                               Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
+                               Assert.IsNull (ex.InnerException, "#3");
+                               Assert.IsNotNull (ex.Message, "#4");
+                       } finally {
+                               rm.ReleaseAllResources ();
+                       }
+               }
+
+               [Test]
+               [Category ("MobileNotWorking")]
+               public void IgnoreCase ()
+               {
+                       ResourceManager rm = ResourceManager.
+                               CreateFileBasedResourceManager ("MyResources", "Test/resources", null);
+
+                       Thread.CurrentThread.CurrentUICulture = CultureInfo.InvariantCulture;
+                       Assert.IsFalse (rm.IgnoreCase, "#A1");
+                       Assert.IsNull (rm.GetString ("helloWORLD"), "#A2");
+                       rm.IgnoreCase = true;
+                       Assert.IsTrue (rm.IgnoreCase, "#B1");
+                       Assert.AreEqual ("Hello World", rm.GetString ("HelloWorld"), "#B2");
+                       rm.ReleaseAllResources ();
+               }
+
+               [Test]
+               public void TestSatellites ()
+               {
+                       ResourceManager manager = new ResourceManager("Resources", GetType ().Assembly);
+                       
+                       Assert.AreEqual ("Hei", manager.GetString ("Hello", new CultureInfo ("nn-NO")), "nn-NO");
+                       Assert.AreEqual ("Hola", manager.GetString ("Hello", new CultureInfo ("es-ES")), "es-ES");
+                       Assert.AreEqual ("Hello", manager.GetString ("Hello", new CultureInfo ("en-US")), "en-US");
+               }               
+
+               class MockResourceManager : ResourceManager
+               {
+                       public MockResourceManager ()
+                       {
+                       }
+
+                       public MockResourceManager (Type resourceSource) : base (resourceSource)
+                       {
+                       }
+
+                       public MockResourceManager (string baseName, Assembly assembly)
+                               : base (baseName, assembly)
+                       {
+                       }
+
+                       public MockResourceManager (string baseName, Assembly assembly, Type usingResourceSet)
+                               : base (baseName, assembly, usingResourceSet)
+                       {
+                       }
+
+                       public new string BaseNameField {
+                               get { return base.BaseNameField; }
+                       }
+
+                       public new Assembly MainAssembly {
+                               get { return base.MainAssembly; }
+                       }
+
+                       public new Hashtable ResourceSets {
+                               get { return base.ResourceSets; }
+                       }
+
+                       public new ResourceSet InternalGetResourceSet (CultureInfo culture, bool Createifnotexists, bool tryParents)
+                       {
+                               return base.InternalGetResourceSet (culture,
+                                       Createifnotexists, tryParents);
+                       }
+
+                       public new string GetResourceFileName (CultureInfo culture)
+                       {
+                               return base.GetResourceFileName (culture);
+                       }
+               }
+
+               class MockResourceSet : ResourceSet
+               {
                }
        }
 }