2 // AppDomainSetupTest.cs - NUnit Test Cases for the System.AppDomainSetup class
5 // Gonzalo Paniagua Javier (gonzalo@ximian.com)
6 // Sebastien Pouliot <sebastien@ximian.com>
8 // (C) 2003 Ximian, Inc. http://www.ximian.com
9 // Copyright (C) 2005 Novell, Inc (http://www.novell.com)
12 using NUnit.Framework;
16 namespace MonoTests.System
19 public class AppDomainSetupTest {
21 static readonly string tmpPath = Path.GetTempPath ();
22 static readonly string curDir = Directory.GetCurrentDirectory ();
24 private bool RunningOnWindows {
26 return Path.DirectorySeparatorChar == '\\';
29 private bool RunningOnMono {
31 return (Type.GetType ("System.MonoType", false) != null);
36 public void ConfigurationFile_Relative_ApplicationBase ()
38 string fileName = "blar.config";
39 AppDomainSetup setup = new AppDomainSetup();
40 string dir = "app_base";
41 setup.ApplicationBase = dir;
42 setup.ConfigurationFile = fileName;
43 string baseDir = Path.GetFullPath(dir);
44 string configFile = Path.Combine(baseDir, fileName);
45 Assert.AreEqual(configFile, setup.ConfigurationFile, "Check relative to ApplicationBase");
49 public void ConfigurationFile_Null ()
51 AppDomainSetup setup = new AppDomainSetup();
52 Assert.IsNull(setup.ConfigurationFile);
56 [ExpectedException (typeof (MemberAccessException))] // The ApplicationBase must be set before retrieving this property
57 public void ConfigurationFile_Relative_NoApplicationBase ()
59 AppDomainSetup setup = new AppDomainSetup();
60 setup.ConfigurationFile = "blar.config";
61 string configFile = setup.ConfigurationFile;
62 if (configFile == null) {
63 // avoid compiler warning
68 public void ConfigurationFile_Absolute_NoApplicationBase ()
70 AppDomainSetup setup = new AppDomainSetup();
71 string configFile = Path.GetFullPath("blar.config");
72 setup.ConfigurationFile = configFile;
73 Assert.AreEqual(configFile, setup.ConfigurationFile);
77 public void ApplicationBase1 ()
79 string expected_path = tmpPath;
80 AppDomainSetup setup = new AppDomainSetup ();
81 string fileUri = "file://" + tmpPath.Replace(@"\", @"/");
82 setup.ApplicationBase = fileUri;
84 // under .NET the NotSupportedException is throw when getting
85 // (and not setting) the ApplicationBase property
86 Assert.AreEqual (expected_path, setup.ApplicationBase);
88 catch (NotSupportedException) {
89 // however the path is invalid only on .NET
96 public void ApplicationBase2 ()
98 AppDomainSetup setup = new AppDomainSetup ();
99 setup.ApplicationBase = curDir;
100 Assert.AreEqual (curDir, setup.ApplicationBase);
104 public void ApplicationBase3 ()
106 AppDomainSetup setup = new AppDomainSetup ();
107 string expected = Path.Combine (Environment.CurrentDirectory, "lalala");
108 setup.ApplicationBase = "lalala";
109 Assert.AreEqual (expected, setup.ApplicationBase);
113 public void ApplicationBase4 ()
115 AppDomainSetup setup = new AppDomainSetup ();
116 setup.ApplicationBase = "lala:la";
117 if (!RunningOnWindows) {
118 Assert.AreEqual (Path.GetFullPath ("lala:la"), setup.ApplicationBase);
120 // On Windows we expect a NotSupportedException to be thrown because
121 // of the illegal character (:) in the path
123 Assert.Fail ("NotSupportedException expected but setup.ApplicationBase returned:" + setup.ApplicationBase);
125 catch (NotSupportedException) {
132 public void ApplicationBase5 ()
134 // This is failing because of (probably) a windows-ism, so don't worry
135 AppDomainSetup setup = new AppDomainSetup ();
136 setup.ApplicationBase = "file:///lala:la";
137 string expected = "/lala:la";
138 if (!RunningOnWindows) {
139 Assert.AreEqual (expected, setup.ApplicationBase);
141 // On Windows we expect a NotSupportedException to be thrown because
142 // of the illegal character (:) in the path
144 Assert.Fail ("NotSupportedException expected but setup.ApplicationBase returned:" + setup.ApplicationBase);
146 catch (NotSupportedException) {
153 public void ApplicationBase6 ()
155 AppDomainSetup setup = new AppDomainSetup ();
156 setup.ApplicationBase = "la?lala";
157 // paths containing "?" are *always* bad on Windows
158 // but are legal for linux so we return a full path
159 if (!RunningOnWindows) {
160 Assert.AreEqual (Path.GetFullPath ("la?lala"), setup.ApplicationBase);
162 // On Windows we expect a ArgumentException to be thrown because
163 // of the illegal character (?) in the path
165 Assert.Fail ("ArgumentException expected but setup.ApplicationBase returned:" + setup.ApplicationBase);
167 catch (ArgumentException) {
174 public void ApplicationBase7 ()
176 if (RunningOnWindows) {
177 // Extended paths are Windows only
178 AppDomainSetup setup = new AppDomainSetup ();
179 string expected = @"\\?\" + curDir;
180 setup.ApplicationBase = expected;
181 Assert.AreEqual (expected, setup.ApplicationBase);
186 public void ApplicationBase8 ()
188 if (RunningOnWindows) {
189 // Extended paths are Windows only
190 AppDomainSetup setup = new AppDomainSetup ();
191 setup.ApplicationBase = @"\\?\C:\lala:la";
193 Assert.Fail ("NotSupportedException expected but setup.ApplicationBase returned:" + setup.ApplicationBase);
195 catch (NotSupportedException) {
201 #if MONO_FEATURE_MULTIPLE_APPDOMAINS
204 [Category ("NotWorking")]
206 public void AppDomainInitializer1 ()
208 AppDomainSetup s = new AppDomainSetup ();
209 s.AppDomainInitializer = AppDomainInitialized1;
210 s.AppDomainInitializerArguments = new string [] {"A", "B"};
211 AppDomain domain = AppDomain.CreateDomain ("MyDomain", null, s);
213 object data = domain.GetData ("Initialized");
214 Assert.IsNotNull (data);
215 Assert.IsTrue ((bool) data);
217 #endif // MONO_FEATURE_MULTIPLE_APPDOMAINS
219 static void AppDomainInitialized1 (string [] args)
221 bool initialized = true;
222 initialized &= args [0] == "A";
223 initialized &= args [1] == "B";
224 initialized &= AppDomain.CurrentDomain.FriendlyName == "MyDomain";
226 AppDomain.CurrentDomain.SetData ("Initialized", initialized);
229 public void InstanceInitializer (string [] args)
233 #if MONO_FEATURE_MULTIPLE_APPDOMAINS
236 [Category ("NotWorking")]
238 [ExpectedException (typeof (ArgumentException))]
240 public void AppDomainInitializerNonStaticMethod ()
242 AppDomainSetup s = new AppDomainSetup ();
243 s.AppDomainInitializer = InstanceInitializer;
244 AppDomain.CreateDomain ("MyDomain", null, s);
246 #endif // MONO_FEATURE_MULTIPLE_APPDOMAINS