Merge pull request #1971 from angeloc/master
[mono.git] / mcs / class / System / Test / System / UriTest.cs
index 904ee9a94c9f48dc35b405dfeb79c37b53e2c823..a8cb6283403a2647408eeea81ba95e6b39b0e905 100644 (file)
@@ -1920,32 +1920,44 @@ namespace MonoTests.System
                [Test]
                public void DotNetRelativeOrAbsoluteTest ()
                {
-                       Uri uri;
-
-                       uri = new Uri ("/foo", DotNetRelativeOrAbsolute);
-                       Assert.IsFalse (uri.IsAbsoluteUri);
-                       
-                       Uri.TryCreate("/foo", DotNetRelativeOrAbsolute, out uri);
-                       Assert.IsFalse (uri.IsAbsoluteUri);
+                       FieldInfo useDotNetRelativeOrAbsoluteField = null;
+                       bool useDotNetRelativeOrAbsoluteOld = false;
 
                        if (Type.GetType ("Mono.Runtime") != null) {
-                               uri = new Uri ("/foo", UriKind.RelativeOrAbsolute);
-                               Assert.IsTrue (uri.IsAbsoluteUri);
+                               useDotNetRelativeOrAbsoluteField = typeof (Uri).GetField ("useDotNetRelativeOrAbsolute",
+                                       BindingFlags.Static | BindingFlags.GetField | BindingFlags.NonPublic);
+                               useDotNetRelativeOrAbsoluteOld = (bool) useDotNetRelativeOrAbsoluteField.GetValue (null);
+                               useDotNetRelativeOrAbsoluteField.SetValue (null, false);
+                       }
+
+                       try {
+                               Uri uri;
 
-                               Uri.TryCreate("/foo", UriKind.RelativeOrAbsolute, out uri);
-                               Assert.IsTrue (uri.IsAbsoluteUri);
+                               uri = new Uri ("/foo", DotNetRelativeOrAbsolute);
+                               Assert.IsFalse (uri.IsAbsoluteUri);
+                               
+                               Uri.TryCreate("/foo", DotNetRelativeOrAbsolute, out uri);
+                               Assert.IsFalse (uri.IsAbsoluteUri);
 
-                               var useDotNetRelativeOrAbsoluteField = typeof (Uri).GetField ("useDotNetRelativeOrAbsolute",
-                                       BindingFlags.Static | BindingFlags.GetField | BindingFlags.NonPublic);
+                               if (useDotNetRelativeOrAbsoluteField != null) {
+                                       uri = new Uri ("/foo", UriKind.RelativeOrAbsolute);
+                                       Assert.IsTrue (uri.IsAbsoluteUri);
 
-                               useDotNetRelativeOrAbsoluteField.SetValue (null, true);
-                       }
+                                       Uri.TryCreate("/foo", UriKind.RelativeOrAbsolute, out uri);
+                                       Assert.IsTrue (uri.IsAbsoluteUri);
 
-                       uri = new Uri ("/foo", UriKind.RelativeOrAbsolute);
-                       Assert.IsFalse (uri.IsAbsoluteUri);
+                                       useDotNetRelativeOrAbsoluteField.SetValue (null, true);
+                               }
 
-                       Uri.TryCreate("/foo", DotNetRelativeOrAbsolute, out uri);
-                       Assert.IsFalse (uri.IsAbsoluteUri);
+                               uri = new Uri ("/foo", UriKind.RelativeOrAbsolute);
+                               Assert.IsFalse (uri.IsAbsoluteUri);
+
+                               Uri.TryCreate("/foo", DotNetRelativeOrAbsolute, out uri);
+                               Assert.IsFalse (uri.IsAbsoluteUri);
+                       } finally {
+                               if (useDotNetRelativeOrAbsoluteField != null)
+                                       useDotNetRelativeOrAbsoluteField.SetValue (null, useDotNetRelativeOrAbsoluteOld);
+                       }
                }
 
                [Test]