[sgen] Make sure we don't sweep a block if we're not supposed to
[mono.git] / mcs / class / System / Test / System / UriTest.cs
index 43cb4cc18b90db5a1bca2c07e0702fb12ab13c3d..32c3fb0459e10829d7a0b9419f3eb99dfc72cd72 100644 (file)
@@ -21,21 +21,12 @@ namespace MonoTests.System
        [TestFixture]
        public class UriTest
        {
-               protected bool isWin32 = false;
-               public bool IriParsing;
+               bool isWin32;
 
                [TestFixtureSetUp]
                public void GetReady ()
                {
                        isWin32 = (Path.DirectorySeparatorChar == '\\');
-
-                       //Make sure Uri static constructor is called
-                       Uri.EscapeDataString ("");
-
-                       FieldInfo iriParsingField = typeof (Uri).GetField ("s_IriParsing",
-                               BindingFlags.Static | BindingFlags.GetField | BindingFlags.NonPublic);
-                       if (iriParsingField != null)
-                               IriParsing = (bool)iriParsingField.GetValue (null);
                }
 
                [Test]
@@ -605,10 +596,7 @@ namespace MonoTests.System
                        Uri u1 = new Uri("http://localhost:8080/test.aspx?ReturnUrl=%2fSearchDoc%2fSearcher.aspx");
                        Uri u2 = new Uri("http://localhost:8080/test.aspx?ReturnUrl=%252fSearchDoc%252fSearcher.aspx");
 
-                       if (IriParsing)
-                               Assert.AreEqual ("http://localhost:8080/test.aspx?ReturnUrl=%2fSearchDoc%2fSearcher.aspx", u1.ToString (), "QE1");
-                       else
-                               Assert.AreEqual ("http://localhost:8080/test.aspx?ReturnUrl=/SearchDoc/Searcher.aspx", u1.ToString (), "QE1");
+                       Assert.AreEqual ("http://localhost:8080/test.aspx?ReturnUrl=%2fSearchDoc%2fSearcher.aspx", u1.ToString (), "QE1");
 
                        Assert.AreEqual ("http://localhost:8080/test.aspx?ReturnUrl=%252fSearchDoc%252fSearcher.aspx", u2.ToString (), "QE2");
                }
@@ -897,11 +885,10 @@ namespace MonoTests.System
                }
 
                [Test]
-               [Category("NotDotNet")]
                public void CheckHostName1 ()
                {
                        // reported to MSDN Product Feedback Center (FDBK28671)
-                       Assert.AreEqual (UriHostNameType.Unknown, Uri.CheckHostName (":11:22:33:44:55:66:77:88"), "#36 known to fail with ms.net: this is not a valid IPv6 address.");
+                       Assert.AreEqual (UriHostNameType.IPv6, Uri.CheckHostName (":11:22:33:44:55:66:77:88"), "#36 known to fail with ms.net: this is not a valid IPv6 address.");
                }
 
                [Test]
@@ -1211,14 +1198,6 @@ namespace MonoTests.System
                        Assert.AreEqual ("http://www.xxx.com/bar/foo/foobar.htm?z=0&y=5" + (char) 0xa9, uri1.MakeRelative (uri8), "#14");
                }
 
-               [Test]
-               [Category ("NotWorking")]
-               public void RelativeUri ()
-               {
-                       var u = new Uri ("/foo/bar");
-                       Assert.IsFalse (u.IsAbsoluteUri, "#1");
-               }
-
                [Test]
                public void RelativeFragmentUri ()
                {
@@ -1736,6 +1715,16 @@ namespace MonoTests.System
                        Assert.AreEqual ("file", unixuri.Scheme, "UnixAbsoluteFilePath_WithSpecialChars #2");
                }
 
+               [Test]
+               [Category ("NotDotNet")]
+               public void UnixAbsolutePath_ReplaceRelative ()
+               {
+                       var u1 = new Uri ("/Users/demo/Projects/file.xml");
+                       var u2 = new Uri (u1, "b.jpg");
+
+                       Assert.AreEqual ("file:///Users/demo/Projects/b.jpg", u2.ToString ());
+               }
+
                [Test]
                public void RelativeUriWithColons ()
                {
@@ -1920,12 +1909,44 @@ namespace MonoTests.System
                [Test]
                public void DotNetRelativeOrAbsoluteTest ()
                {
-                       var uri1 = new Uri ("/foo", DotNetRelativeOrAbsolute);
-                       Assert.IsFalse (uri1.IsAbsoluteUri);
-                       
-                       Uri uri2;
-                       Uri.TryCreate("/foo", DotNetRelativeOrAbsolute, out uri2);
-                       Assert.IsFalse (uri2.IsAbsoluteUri);
+                       FieldInfo useDotNetRelativeOrAbsoluteField = null;
+                       bool useDotNetRelativeOrAbsoluteOld = false;
+
+                       if (Type.GetType ("Mono.Runtime") != null) {
+                               useDotNetRelativeOrAbsoluteField = typeof (Uri).GetField ("useDotNetRelativeOrAbsolute",
+                                       BindingFlags.Static | BindingFlags.GetField | BindingFlags.NonPublic);
+                               useDotNetRelativeOrAbsoluteOld = (bool) useDotNetRelativeOrAbsoluteField.GetValue (null);
+                               useDotNetRelativeOrAbsoluteField.SetValue (null, false);
+                       }
+
+                       try {
+                               Uri uri;
+
+                               uri = new Uri ("/foo", DotNetRelativeOrAbsolute);
+                               Assert.IsFalse (uri.IsAbsoluteUri, "#2");
+                               
+                               Assert.IsTrue (Uri.TryCreate("/foo", DotNetRelativeOrAbsolute, out uri), "#3");
+                               Assert.IsFalse (uri.IsAbsoluteUri, "#3a");
+
+                               if (useDotNetRelativeOrAbsoluteField != null) {
+                                       uri = new Uri ("/foo", UriKind.RelativeOrAbsolute);
+                                       Assert.IsTrue (uri.IsAbsoluteUri, "#4");
+
+                                       Assert.IsTrue (Uri.TryCreate("/foo", UriKind.RelativeOrAbsolute, out uri), "#5");
+                                       Assert.IsTrue (uri.IsAbsoluteUri, "#5a");
+
+                                       useDotNetRelativeOrAbsoluteField.SetValue (null, true);
+                               }
+
+                               uri = new Uri ("/foo", UriKind.RelativeOrAbsolute);
+                               Assert.IsFalse (uri.IsAbsoluteUri, "#10");
+
+                               Assert.IsTrue (Uri.TryCreate("/foo", UriKind.RelativeOrAbsolute, out uri), "#11");
+                               Assert.IsFalse (uri.IsAbsoluteUri, "#11a");
+                       } finally {
+                               if (useDotNetRelativeOrAbsoluteField != null)
+                                       useDotNetRelativeOrAbsoluteField.SetValue (null, useDotNetRelativeOrAbsoluteOld);
+                       }
                }
 
                [Test]
@@ -1998,37 +2019,65 @@ namespace MonoTests.System
                                Assert.Fail (string.Format ("Unexpected {0} while building URI with username {1}", e.GetType ().Name, userinfo));
                        }
                }
-       }
 
-       // Tests non default IriParsing
-       [TestFixture]
-       public class UriTestAux : UriTest
-       {
-               private FieldInfo iriParsingField;
-               private bool originalIriParsing;
+               // Covers #29864
+               [Test]
+               public void PathDotTrim ()
+               {
+                       var baseUri = new Uri ("http://test.com", UriKind.Absolute);
+                       var relUri = new Uri ("path/dot./", UriKind.Relative);
+                       var uri = new Uri (baseUri, relUri);
+                       Assert.AreEqual ("http://test.com/path/dot./", uri.ToString ());
+               }
 
-               [TestFixtureSetUp]
-               public void GetReady2 ()
+               [Test]
+               public void GuardedIPv6Address ()
                {
-                       isWin32 = (Path.DirectorySeparatorChar == '\\');
+                       var x = new Uri ("asfd://[::1]:123/");
+                       Assert.AreEqual ("[::1]", x.Host, "#1");
+               }
+
+               [Test]
+               public void CombineWithUserSchema ()
+               {
+                       var baseUri = new Uri ("zip:mem:///");
+                       var relativeUrl = "zip:mem:///foo/bar.txt";
 
-                       //Make sure Uri static constructor is called
-                       Uri.EscapeDataString ("");
+                       var result = new Uri (baseUri, relativeUrl);
 
-                       iriParsingField = typeof (Uri).GetField ("s_IriParsing",
-                               BindingFlags.Static | BindingFlags.GetField | BindingFlags.NonPublic);
+                       Assert.AreEqual ("zip:mem:///foo/bar.txt", result.ToString ());
+               }
 
-                       originalIriParsing = (bool) iriParsingField.GetValue (null);
+               [Test]
+               public void Scheme_msapp ()
+               {
+                       var uri = new Uri ("ms-app://s-1-15-2-1613647288");
+                       Assert.AreEqual ("ms-app", uri.Scheme);
+               }
 
-                       IriParsing = !originalIriParsing;
+               [Test]
+               public void CombineWithUnixAbsolutePath ()
+               {
+                       var a = new Uri ("http://localhost/");
+                       var b = new Uri ("/foo", UriKind.RelativeOrAbsolute);
+                       var res = new Uri (a, b);
 
-                       iriParsingField.SetValue (null, IriParsing);
+                       Assert.AreEqual ("http://localhost/foo", res.ToString ());
                }
 
-               [TestFixtureTearDown]
-               public void TearDown ()
+               [Test]
+               public void ImplicitUnixFileWithUnicode ()
+               {
+                       string value = "/Library/Frameworks/System.Runtim…ee";
+                       Uri uri;
+                       Assert.IsTrue (Uri.TryCreate (value, UriKind.Absolute, out uri));
+               }
+
+               [Test]
+               public void UncValidPath ()
                {
-                       iriParsingField.SetValue (null, originalIriParsing);
+                       var uri = new Uri ("https://_foo/bar.html");
+                       Assert.AreEqual ("https", uri.Scheme);
                }
        }
 }