+//\r
+// UriTest2.cs - More NUnit Test Cases for System.Uri\r
+//
+\r
using System;\r
-using System.IO;\r
+using System.IO;
+using System.Reflection;\r
using System.Text;\r
using NUnit.Framework;\r
\r
namespace MonoTests.System\r
{\r
[TestFixture]\r
- public class UriTest2 : Assertion\r
+ public class UriTest2\r
{\r
// Segments cannot be validated here...\r
public void AssertUri (string relsrc, Uri uri,\r
string fragment,\r
string userInfo)\r
{\r
- AssertEquals (relsrc + " AbsoluteUri", absoluteUri, uri.AbsoluteUri);\r
- AssertEquals (relsrc + " Scheme", scheme, uri.Scheme);\r
- AssertEquals (relsrc + " Host", host, uri.Host);\r
- AssertEquals (relsrc + " Port", port, uri.Port);\r
- AssertEquals (relsrc + " LocalPath", localPath, uri.LocalPath);\r
- AssertEquals (relsrc + " Query", query, uri.Query);\r
- AssertEquals (relsrc + " Fragment", fragment, uri.Fragment);\r
- AssertEquals (relsrc + " IsFile", isFile, uri.IsFile);\r
- AssertEquals (relsrc + " IsUnc", isUnc, uri.IsUnc);\r
- AssertEquals (relsrc + " IsLoopback", isLoopback, uri.IsLoopback);\r
- AssertEquals (relsrc + " Authority", authority, uri.Authority);\r
- AssertEquals (relsrc + " UserEscaped", userEscaped, uri.UserEscaped);\r
- AssertEquals (relsrc + " UserInfo", userInfo, uri.UserInfo);\r
- AssertEquals (relsrc + " HostNameType", hostNameType, uri.HostNameType);\r
- AssertEquals (relsrc + " AbsolutePath", absolutePath, uri.AbsolutePath);\r
- AssertEquals (relsrc + " PathAndQuery", pathAndQuery, uri.PathAndQuery);\r
- AssertEquals (relsrc + " ToString()", toString, uri.ToString ());\r
+ Assert.AreEqual (absoluteUri, uri.AbsoluteUri, relsrc + " AbsoluteUri");\r
+ Assert.AreEqual (scheme, uri.Scheme, relsrc + " Scheme");\r
+ Assert.AreEqual (host, uri.Host, relsrc + " Host");\r
+ Assert.AreEqual (port, uri.Port, relsrc + " Port");\r
+ // Windows UNC path is not automatically testable on *nix environment,\r
+ if (relsrc.StartsWith ("\\\\") && Path.DirectorySeparatorChar == '\\')\r
+ Assert.AreEqual (localPath, uri.LocalPath, relsrc + " LocalPath");\r
+ Assert.AreEqual (query, uri.Query, relsrc + " Query");\r
+ Assert.AreEqual (fragment, uri.Fragment, relsrc + " Fragment");\r
+ Assert.AreEqual (isFile, uri.IsFile, relsrc + " IsFile");\r
+ Assert.AreEqual (isUnc, uri.IsUnc, relsrc + " IsUnc");\r
+ Assert.AreEqual (isLoopback, uri.IsLoopback, relsrc + " IsLoopback");\r
+ Assert.AreEqual (authority, uri.Authority, relsrc + " Authority");\r
+ Assert.AreEqual (userEscaped, uri.UserEscaped, relsrc + " UserEscaped");\r
+ Assert.AreEqual (userInfo, uri.UserInfo, relsrc + " UserInfo");\r
+ Assert.AreEqual (hostNameType, uri.HostNameType, relsrc + " HostNameType");\r
+ Assert.AreEqual (absolutePath, uri.AbsolutePath, relsrc + " AbsolutePath");\r
+ Assert.AreEqual (pathAndQuery, uri.PathAndQuery, relsrc + " PathAndQuery");\r
+ Assert.AreEqual (toString, uri.ToString (), relsrc + " ToString()");\r
}\r
\r
[Test]\r
+#if NET_2_0\r
+ [Ignore ("Tests needs to be updated for 2.0")]\r
+#endif\r
public void AbsoluteUriFromFile ()\r
{\r
- FromFile ("Test/System/test-uri-props.txt", null);\r
+ FromResource ("test-uri-props.txt", null);\r
}\r
\r
[Test]\r
+ [Category("NotDotNet")]\r
+#if NET_2_0\r
+ [Ignore ("Tests needs to be updated for 2.0")]\r
+#endif\r
public void AbsoluteUriFromFileManual ()\r
{\r
- FromFile ("Test/System/test-uri-props-manual.txt", null);\r
+ FromResource ("test-uri-props-manual.txt", null);\r
}\r
\r
[Test]\r
+#if NET_2_0\r
+ [Ignore ("Tests needs to be updated for 2.0")]\r
+#endif\r
public void RelativeUriFromFile ()\r
{\r
- FromFile ("Test/System/test-uri-relative-props.txt", new Uri ("http://www.go-mono.com"));\r
+ FromResource ("test-uri-relative-props.txt", new Uri ("http://www.go-mono.com"));\r
}\r
\r
- private void FromFile (string testFile, Uri baseUri)\r
- {\r
- StreamReader sr = new StreamReader (testFile, Encoding.UTF8);\r
+ private void FromResource (string res, Uri baseUri)\r
+ {
+ Assembly a = Assembly.GetExecutingAssembly ();
+ Stream s = a.GetManifestResourceStream (res);\r
+ StreamReader sr = new StreamReader (s, Encoding.UTF8);\r
while (sr.Peek () > 0) {\r
sr.ReadLine (); // skip\r
string uriString = sr.ReadLine ();\r
sr.ReadLine (),\r
sr.ReadLine ());\r
// Console.WriteLine ("Passed: " + uriString);\r
- } catch (Exception ex) {\r
- Fail (String.Format ("Construction failed: [{0}] {1}", uriString, ex.Message));\r
+ } catch (UriFormatException ex) {\r
+ Assert.Fail (String.Format ("Construction failed: [{0}] {1}", uriString, ex.Message));\r
}\r
}\r
}\r
+
+ [Test]
+ public void MoreUnescape () // bug 733316
+ {
+ int index = 0;
+ char unesc = Uri.HexUnescape ("%F6", ref index);\r
+ Assert.AreEqual (3, index, "#01");\r
+ Assert.AreEqual (0xf6, unesc, "#02");
+ }\r
+\r
+ [Test]\r
+ public void UriScheme ()\r
+ {\r
+ Assert.AreEqual ("://", Uri.SchemeDelimiter, "://");\r
+ Assert.AreEqual ("file", Uri.UriSchemeFile, "file");\r
+ Assert.AreEqual ("ftp", Uri.UriSchemeFtp, "ftp");\r
+ Assert.AreEqual ("gopher", Uri.UriSchemeGopher, "gopher");\r
+ Assert.AreEqual ("http", Uri.UriSchemeHttp, "http");\r
+ Assert.AreEqual ("https", Uri.UriSchemeHttps, "https");\r
+ Assert.AreEqual ("mailto", Uri.UriSchemeMailto, "mailto");\r
+ Assert.AreEqual ("news", Uri.UriSchemeNews, "news");\r
+ Assert.AreEqual ("nntp", Uri.UriSchemeNntp, "file");\r
+#if NET_2_0\r
+ Assert.AreEqual ("net.pipe", Uri.UriSchemeNetPipe, "net.pipe");\r
+ Assert.AreEqual ("net.tcp", Uri.UriSchemeNetTcp, "net.tcp");\r
+#endif\r
+ }\r
+\r
+ [Test] // bug #71049\r
+ [ExpectedException (typeof (UriFormatException))]\r
+ public void StarsInHost ()\r
+ {\r
+ new Uri ("http://w*w*w.go-mono.com");\r
+ }\r
+
+ [Test]\r
+#if ONLY_1_1\r
+ [Category ("NotDotNet")] // 1.x throws an UriFormatException\r
+#endif\r
+ public void NoHostName1_Bug76146 ()\r
+ {\r
+ Uri u = new Uri ("foo:///?bar");\r
+ Assert.AreEqual ("/", u.AbsolutePath, "AbsolutePath");\r
+ Assert.AreEqual ("foo:///?bar", u.AbsoluteUri, "AbsoluteUri");\r
+ Assert.AreEqual (String.Empty, u.Authority, "Authority");\r
+ Assert.AreEqual (String.Empty, u.Fragment, "Fragment");\r
+ Assert.AreEqual (String.Empty, u.Host, "Host");\r
+ // FIXME (2.0) - Normally this is never Basic without an Host name :(
+ // Assert.AreEqual (UriHostNameType.Basic, u.HostNameType, "HostNameType");\r
+ Assert.IsTrue (u.IsDefaultPort, "IsDefaultPort");\r
+ Assert.IsFalse (u.IsFile, "IsFile");\r
+ // FIXME Assert.IsTrue (u.IsLoopback, "IsLoopback");\r
+ Assert.IsFalse (u.IsUnc, "IsUnc");\r
+ Assert.AreEqual ("/", u.LocalPath, "LocalPath");\r
+ Assert.AreEqual ("/?bar", u.PathAndQuery, "PathAndQuery");\r
+ Assert.AreEqual ("foo", u.Scheme, "Scheme");\r
+ Assert.IsFalse (u.UserEscaped, "UserEscaped");\r
+ Assert.AreEqual (String.Empty, u.UserInfo, "UserInfo");\r
+ }\r
+\r
+ [Test]\r
+#if ONLY_1_1\r
+ [Category ("NotDotNet")] // 1.x throws an UriFormatException\r
+#endif\r
+ public void NoHostName2_Bug76146 ()\r
+ {\r
+ Uri u = new Uri ("foo:///bar");\r
+ Assert.AreEqual ("/bar", u.AbsolutePath, "AbsolutePath");\r
+ Assert.AreEqual ("foo:///bar", u.AbsoluteUri, "AbsoluteUri");\r
+ Assert.AreEqual (String.Empty, u.Authority, "Authority");\r
+ Assert.AreEqual (String.Empty, u.Fragment, "Fragment");\r
+ Assert.AreEqual (String.Empty, u.Host, "Host");
+ // FIXME (2.0) - Normally this is never Basic without an Host name :(
+ // Assert.AreEqual (UriHostNameType.Basic, u.HostNameType, "HostNameType");\r
+ Assert.IsTrue (u.IsDefaultPort, "IsDefaultPort");\r
+ Assert.IsFalse (u.IsFile, "IsFile");\r
+ // FIXME Assert.IsTrue (u.IsLoopback, "IsLoopback");\r
+ Assert.IsFalse (u.IsUnc, "IsUnc");\r
+ Assert.AreEqual ("/bar", u.LocalPath, "LocalPath");\r
+ Assert.AreEqual ("/bar", u.PathAndQuery, "PathAndQuery");\r
+ Assert.AreEqual ("foo", u.Scheme, "Scheme");\r
+ Assert.IsFalse (u.UserEscaped, "UserEscaped");\r
+ Assert.AreEqual (String.Empty, u.UserInfo, "UserInfo");\r
+ }\r
\r
+ [Test]\r
+ [ExpectedException (typeof (UriFormatException))]\r
+ public void InvalidIPAddress_Bug76659 ()\r
+ {\r
+ new Uri ("http://127.0.0.1::::/");\r
+ }\r
}\r
}\r