* WebClient.cs: Modified argument checks to match MS, and wrap
authorGert Driesen <drieseng@users.sourceforge.net>
Mon, 3 Dec 2007 19:09:56 +0000 (19:09 -0000)
committerGert Driesen <drieseng@users.sourceforge.net>
Mon, 3 Dec 2007 19:09:56 +0000 (19:09 -0000)
exceptions in a WebException. Fixes bug #343064.
* WebClient.cs: Added tests for argument checks.

svn path=/trunk/mcs/; revision=90581

mcs/class/System/System.Net/ChangeLog
mcs/class/System/System.Net/WebClient.cs
mcs/class/System/Test/System.Net/ChangeLog
mcs/class/System/Test/System.Net/WebClientTest.cs

index a8996f9650ff1c5d4ca5ed7c69fba1e0293c08af..11a41625df632efbe202cc2dd018c24a2ecdcd5d 100644 (file)
@@ -1,3 +1,8 @@
+2007-12-03  Gert Driesen  <drieseng@users.sourceforge.net>
+
+       * WebClient.cs: Modified argument checks to match MS, and wrap
+       exceptions in a WebException. Fixes bug #343064.
+
 2007-12-03  Miguel de Icaza  <miguel@novell.com>
 
        * FtpWebRequest.cs: Applied patch from Jerome Haltom that fixes
index d26e5cad43dd13ccc209626156d808fd4fe55f32..d8c83492f73ab5971097581c4c98cc2e879dd58c 100644 (file)
@@ -209,7 +209,12 @@ namespace System.Net
 
                public byte [] DownloadData (string address)
                {
-                       return DownloadData (MakeUri (address));
+#if NET_2_0
+                       if (address == null)
+                               throw new ArgumentNullException ("address");
+#endif
+
+                       return DownloadData (CreateUri (address));
                }
 
 #if NET_2_0
@@ -217,6 +222,11 @@ namespace System.Net
 #endif
                byte [] DownloadData (Uri address)
                {
+#if NET_2_0
+                       if (address == null)
+                               throw new ArgumentNullException ("address");
+#endif
+
                        try {
                                SetBusy ();
                                return DownloadDataCore (address);
@@ -227,17 +237,27 @@ namespace System.Net
 
                byte [] DownloadDataCore (Uri address)
                {
-                       WebRequest request = SetupRequest (address, "GET");
-                       WebResponse response = request.GetResponse ();
-                       Stream st = ProcessResponse (response);
-                       return ReadAll (st, (int) response.ContentLength);
+                       try {
+                               WebRequest request = SetupRequest (address, "GET");
+                               WebResponse response = request.GetResponse ();
+                               Stream st = ProcessResponse (response);
+                               return ReadAll (st, (int) response.ContentLength);
+                       } catch (Exception ex) {
+                               throw new WebException ("An error occurred " +
+                                       "performing a WebClient request.", ex);
+                       }
                }
 
                //   DownloadFile
 
                public void DownloadFile (string address, string fileName)
                {
-                       DownloadFile (MakeUri (address), fileName);
+#if NET_2_0
+                       if (address == null)
+                               throw new ArgumentNullException ("address");
+#endif
+
+                       DownloadFile (CreateUri (address), fileName);
                }
 
 #if NET_2_0
@@ -245,9 +265,19 @@ namespace System.Net
 #endif
                void DownloadFile (Uri address, string fileName)
                {
+#if NET_2_0
+                       if (address == null)
+                               throw new ArgumentNullException ("address");
+                       if (fileName == null)
+                               throw new ArgumentNullException ("fileName");
+#endif
+
                        try {
                                SetBusy ();
                                DownloadFileCore (address, fileName);
+                       } catch (Exception ex) {
+                               throw new WebException ("An error occurred " +
+                                       "performing a WebClient request.", ex);
                        } finally {
                                isBusy = false;
                        }
@@ -255,27 +285,31 @@ namespace System.Net
 
                void DownloadFileCore (Uri address, string fileName)
                {
-                       WebRequest request = SetupRequest (address);
-                       WebResponse response = request.GetResponse ();
-                       Stream st = ProcessResponse (response);
-
-                       int cLength = (int) response.ContentLength;
-                       int length = (cLength <= -1 || cLength > 8192) ? 8192 : cLength;
-                       byte [] buffer = new byte [length];
-                       FileStream f = new FileStream (fileName, FileMode.Create);
+                       using (FileStream f = new FileStream (fileName, FileMode.Create)) {
+                               WebRequest request = SetupRequest (address);
+                               WebResponse response = request.GetResponse ();
+                               Stream st = ProcessResponse (response);
 
-                       int nread = 0;
-                       while ((nread = st.Read (buffer, 0, length)) != 0)
-                               f.Write (buffer, 0, nread);
+                               int cLength = (int) response.ContentLength;
+                               int length = (cLength <= -1 || cLength > 8192) ? 8192 : cLength;
+                               byte [] buffer = new byte [length];
 
-                       f.Close ();
+                               int nread = 0;
+                               while ((nread = st.Read (buffer, 0, length)) != 0)
+                                       f.Write (buffer, 0, nread);
+                       }
                }
 
                //   OpenRead
 
                public Stream OpenRead (string address)
                {
-                       return OpenRead (MakeUri (address));
+#if NET_2_0
+                       if (address == null)
+                               throw new ArgumentNullException ("address");
+#endif
+
+                       return OpenRead (CreateUri (address));
                }
 
 #if NET_2_0
@@ -283,11 +317,19 @@ namespace System.Net
 #endif
                Stream OpenRead (Uri address)
                {
+#if NET_2_0
+                       if (address == null)
+                               throw new ArgumentNullException ("address");
+#endif
+
                        try {
                                SetBusy ();
                                WebRequest request = SetupRequest (address);
                                WebResponse response = request.GetResponse ();
                                return ProcessResponse (response);
+                       } catch (Exception ex) {
+                               throw new WebException ("An error occurred " +
+                                       "performing a WebClient request.", ex);
                        } finally {
                                isBusy = false;
                        }
@@ -297,12 +339,22 @@ namespace System.Net
 
                public Stream OpenWrite (string address)
                {
-                       return OpenWrite (MakeUri (address));
+#if NET_2_0
+                       if (address == null)
+                               throw new ArgumentNullException ("address");
+#endif
+
+                       return OpenWrite (CreateUri (address));
                }
                
                public Stream OpenWrite (string address, string method)
                {
-                       return OpenWrite (MakeUri (address), method);
+#if NET_2_0
+                       if (address == null)
+                               throw new ArgumentNullException ("address");
+#endif
+
+                       return OpenWrite (CreateUri (address), method);
                }
 
 #if NET_2_0
@@ -310,7 +362,7 @@ namespace System.Net
 #endif
                Stream OpenWrite (Uri address)
                {
-                       return OpenWrite (address, DetermineMethod (address));
+                       return OpenWrite (address, (string) null);
                }
 
 #if NET_2_0
@@ -318,19 +370,28 @@ namespace System.Net
 #endif
                Stream OpenWrite (Uri address, string method)
                {
+#if NET_2_0
+                       if (address == null)
+                               throw new ArgumentNullException ("address");
+#endif
+
                        try {
                                SetBusy ();
                                WebRequest request = SetupRequest (address, method);
                                return request.GetRequestStream ();
+                       } catch (Exception ex) {
+                               throw new WebException ("An error occurred " +
+                                       "performing a WebClient request.", ex);
                        } finally {
                                isBusy = false;
                        }
                }
 
-               private string DetermineMethod (Uri address)
+               private string DetermineMethod (Uri address, string method)
                {
-                       if (address == null)
-                               throw new ArgumentNullException ("address");
+                       if (method != null)
+                               return method;
+
 #if NET_2_0
                        if (address.Scheme == Uri.UriSchemeFtp)
                                return "RETR";
@@ -342,12 +403,22 @@ namespace System.Net
 
                public byte [] UploadData (string address, byte [] data)
                {
-                       return UploadData (MakeUri (address), data);
+#if NET_2_0
+                       if (address == null)
+                               throw new ArgumentNullException ("address");
+#endif
+
+                       return UploadData (CreateUri (address), data);
                }
                
                public byte [] UploadData (string address, string method, byte [] data)
                {
-                       return UploadData (MakeUri (address), method, data);
+#if NET_2_0
+                       if (address == null)
+                               throw new ArgumentNullException ("address");
+#endif
+
+                       return UploadData (CreateUri (address), method, data);
                }
 
 #if NET_2_0
@@ -355,7 +426,7 @@ namespace System.Net
 #endif
                byte [] UploadData (Uri address, byte [] data)
                {
-                       return UploadData (address, DetermineMethod (address), data);
+                       return UploadData (address, (string) null, data);
                }
 
 #if NET_2_0
@@ -363,9 +434,19 @@ namespace System.Net
 #endif
                byte [] UploadData (Uri address, string method, byte [] data)
                {
+#if NET_2_0
+                       if (address == null)
+                               throw new ArgumentNullException ("address");
+                       if (data == null)
+                               throw new ArgumentNullException ("data");
+#endif
+
                        try {
                                SetBusy ();
                                return UploadDataCore (address, method, data);
+                       } catch (Exception ex) {
+                               throw new WebException ("An error occurred " +
+                                       "performing a WebClient request.", ex);
                        } finally {
                                isBusy = false;
                        }
@@ -373,11 +454,16 @@ namespace System.Net
 
                byte [] UploadDataCore (Uri address, string method, byte [] data)
                {
+#if ONLY_1_1
+                       if (address == null)
+                               throw new ArgumentNullException ("address");
                        if (data == null)
                                throw new ArgumentNullException ("data");
+#endif
 
+                       WebRequest request = SetupRequest (address, method);
                        int contentLength = data.Length;
-                       WebRequest request = SetupRequest (address, method, contentLength);
+                       request.ContentLength = contentLength;
                        using (Stream stream = request.GetRequestStream ()) {
                                stream.Write (data, 0, contentLength);
                        }
@@ -391,7 +477,12 @@ namespace System.Net
 
                public byte [] UploadFile (string address, string fileName)
                {
-                       return UploadFile (MakeUri (address), fileName);
+#if NET_2_0
+                       if (address == null)
+                               throw new ArgumentNullException ("address");
+#endif
+
+                       return UploadFile (CreateUri (address), fileName);
                }
 
 #if NET_2_0
@@ -399,12 +490,12 @@ namespace System.Net
 #endif
                byte [] UploadFile (Uri address, string fileName)
                {
-                       return UploadFile (address, DetermineMethod (address), fileName);
+                       return UploadFile (address, (string) null, fileName);
                }
                
                public byte [] UploadFile (string address, string method, string fileName)
                {
-                       return UploadFile (MakeUri (address), method, fileName);
+                       return UploadFile (CreateUri (address), method, fileName);
                }
 
 #if NET_2_0
@@ -412,9 +503,19 @@ namespace System.Net
 #endif
                byte [] UploadFile (Uri address, string method, string fileName)
                {
+#if NET_2_0
+                       if (address == null)
+                               throw new ArgumentNullException ("address");
+                       if (fileName == null)
+                               throw new ArgumentNullException ("fileName");
+#endif
+
                        try {
                                SetBusy ();
                                return UploadFileCore (address, method, fileName);
+                       } catch (Exception ex) {
+                               throw new WebException ("An error occurred " +
+                                       "performing a WebClient request.", ex);
                        } finally {
                                isBusy = false;
                        }
@@ -422,6 +523,11 @@ namespace System.Net
 
                byte [] UploadFileCore (Uri address, string method, string fileName)
                {
+#if ONLY_1_1
+                       if (address == null)
+                               throw new ArgumentNullException ("address");
+#endif
+
                        string fileCType = Headers ["Content-Type"];
                        if (fileCType != null) {
                                string lower = fileCType.ToLower ();
@@ -434,13 +540,15 @@ namespace System.Net
 
                        string boundary = "------------" + DateTime.Now.Ticks.ToString ("x");
                        Headers ["Content-Type"] = String.Format ("multipart/form-data; boundary={0}", boundary);
-                       WebRequest request = SetupRequest (address, method);
                        Stream reqStream = null;
                        Stream fStream = null;
                        byte [] resultBytes = null;
 
+                       fileName = Path.GetFullPath (fileName);
+
                        try {
                                fStream = File.OpenRead (fileName);
+                               WebRequest request = SetupRequest (address, method);
                                reqStream = request.GetRequestStream ();
                                byte [] realBoundary = Encoding.ASCII.GetBytes ("--" + boundary + "\r\n");
                                reqStream.Write (realBoundary, 0, realBoundary.Length);
@@ -464,10 +572,6 @@ namespace System.Net
                                WebResponse response = request.GetResponse ();
                                Stream st = ProcessResponse (response);
                                resultBytes = ReadAll (st, (int) response.ContentLength);
-                       } catch (WebException) {
-                               throw;
-                       } catch (Exception e) {
-                               throw new WebException ("Error uploading file.", e);
                        } finally {
                                if (fStream != null)
                                        fStream.Close ();
@@ -476,17 +580,27 @@ namespace System.Net
                                        reqStream.Close ();
                        }
                        
-                       return resultBytes;     
+                       return resultBytes;
                }
                
                public byte[] UploadValues (string address, NameValueCollection data)
                {
-                       return UploadValues (MakeUri (address), data);
+#if NET_2_0
+                       if (address == null)
+                               throw new ArgumentNullException ("address");
+#endif
+
+                       return UploadValues (CreateUri (address), data);
                }
                
                public byte[] UploadValues (string address, string method, NameValueCollection data)
                {
-                       return UploadValues (MakeUri (address), method, data);
+#if NET_2_0
+                       if (address == null)
+                               throw new ArgumentNullException ("address");
+#endif
+
+                       return UploadValues (CreateUri (address), method, data);
                }
 
 #if NET_2_0
@@ -494,17 +608,27 @@ namespace System.Net
 #endif
                byte[] UploadValues (Uri address, NameValueCollection data)
                {
-                       return UploadValues (address, DetermineMethod (address), data);
+                       return UploadValues (address, (string) null, data);
                }
 
 #if NET_2_0
                public
 #endif
-               byte[] UploadValues (Uri uri, string method, NameValueCollection data)
+               byte[] UploadValues (Uri address, string method, NameValueCollection data)
                {
+#if NET_2_0
+                       if (address == null)
+                               throw new ArgumentNullException ("address");
+                       if (data == null)
+                               throw new ArgumentNullException ("data");
+#endif
+
                        try {
                                SetBusy ();
-                               return UploadValuesCore (uri, method, data);
+                               return UploadValuesCore (address, method, data);
+                       } catch (Exception ex) {
+                               throw new WebException ("An error occurred " +
+                                       "performing a WebClient request.", ex);
                        } finally {
                                isBusy = false;
                        }
@@ -512,8 +636,10 @@ namespace System.Net
 
                byte[] UploadValuesCore (Uri uri, string method, NameValueCollection data)
                {
+#if ONLY_1_1
                        if (data == null)
-                               throw new ArgumentNullException ("data"); // MS throws a nullref
+                               throw new ArgumentNullException ("data");
+#endif
 
                        string cType = Headers ["Content-Type"];
                        if (cType != null && String.Compare (cType, urlEncodedCType, true) != 0)
@@ -563,24 +689,44 @@ namespace System.Net
 
                public string UploadString (string address, string data)
                {
+                       if (address == null)
+                               throw new ArgumentNullException ("address");
+                       if (data == null)
+                               throw new ArgumentNullException ("data");
+
                        byte [] resp = UploadData (address, encoding.GetBytes (data));
                        return encoding.GetString (resp);
                }
 
                public string UploadString (string address, string method, string data)
                {
+                       if (address == null)
+                               throw new ArgumentNullException ("address");
+                       if (data == null)
+                               throw new ArgumentNullException ("data");
+
                        byte [] resp = UploadData (address, method, encoding.GetBytes (data));
                        return encoding.GetString (resp);
                }
 
                public string UploadString (Uri address, string data)
                {
+                       if (address == null)
+                               throw new ArgumentNullException ("address");
+                       if (data == null)
+                               throw new ArgumentNullException ("data");
+
                        byte [] resp = UploadData (address, encoding.GetBytes (data));
                        return encoding.GetString (resp);
                }
 
                public string UploadString (Uri address, string method, string data)
                {
+                       if (address == null)
+                               throw new ArgumentNullException ("address");
+                       if (data == null)
+                               throw new ArgumentNullException ("data");
+
                        byte [] resp = UploadData (address, method, encoding.GetBytes (data));
                        return encoding.GetString (resp);
                }
@@ -598,6 +744,20 @@ namespace System.Net
                public event UploadValuesCompletedEventHandler UploadValuesCompleted;
 #endif
 
+               Uri CreateUri (string address)
+               {
+#if ONLY_1_1
+                       try {
+                               return MakeUri (address);
+                       } catch (Exception ex) {
+                               throw new WebException ("An error occurred " +
+                                       "performing a WebClient request.", ex);
+                       }
+#else
+                       return MakeUri (address);
+#endif
+               }
+
                Uri MakeUri (string path)
                {
                        string query = null;
@@ -614,19 +774,18 @@ namespace System.Net
                                        query = sb.ToString ();
                                }
                        }
-                       
 
                        if (baseAddress == null && query == null) {
                                try {
                                        return new Uri (path);
-                               }
-                               catch (System.UriFormatException) {
-                                       if ((path[0] == Path.DirectorySeparatorChar) || (path[1] == ':' && Char.ToLower(path[0]) > 'a' && Char.ToLower(path[0]) < 'z')) {
-                                               return new Uri ("file://" + path);
-                                       }
-                                       else {
-                                               return new Uri ("file://" + Environment.CurrentDirectory + Path.DirectorySeparatorChar + path);
-                                       }
+#if NET_2_0
+                               } catch (ArgumentNullException) {
+                                       path = Path.GetFullPath (path);
+                                       return new Uri ("file://" + path);
+#endif
+                               } catch (UriFormatException) {
+                                       path = Path.GetFullPath (path);
+                                       return new Uri ("file://" + path);
                                }
                        }
 
@@ -666,22 +825,22 @@ namespace System.Net
                                headers.RemoveInternal ("User-Agent");
                                request.Headers = headers;
 
-                               if (expect != null && expect != "")
+                               if (expect != null && expect.Length > 0)
                                        req.Expect = expect;
 
-                               if (accept != null && accept != "")
+                               if (accept != null && accept.Length > 0)
                                        req.Accept = accept;
 
-                               if (contentType != null && contentType != "")
+                               if (contentType != null && contentType.Length > 0)
                                        req.ContentType = contentType;
 
-                               if (connection != null && connection != "")
+                               if (connection != null && connection.Length > 0)
                                        req.Connection = connection;
 
-                               if (userAgent != null && userAgent != "")
+                               if (userAgent != null && userAgent.Length > 0)
                                        req.UserAgent = userAgent;
 
-                               if (referer != null && referer != "")
+                               if (referer != null && referer.Length > 0)
                                        req.Referer = referer;
                        }
 
@@ -692,14 +851,7 @@ namespace System.Net
                WebRequest SetupRequest (Uri uri, string method)
                {
                        WebRequest request = SetupRequest (uri);
-                       request.Method = method;
-                       return request;
-               }
-
-               WebRequest SetupRequest (Uri uri, string method, int contentLength)
-               {
-                       WebRequest request = SetupRequest (uri, method);
-                       request.ContentLength = contentLength;
+                       request.Method = DetermineMethod (uri, method);
                        return request;
                }
 
index 95cb424eb29409e9f2614e2671f8ef8e952faad3..f18da768d0f05ef3d77d65e491d8af8829ed7d79 100644 (file)
@@ -1,3 +1,7 @@
+2007-12-03  Gert Driesen  <drieseng@users.sourceforge.net>
+
+       * WebClient.cs: Added tests for argument checks.
+
 2007-10-21  Gert Driesen  <drieseng@users.sourceforge.net>
 
        * WebProxyTest.cs: Remove unused fields.
index aa1e445cd1b3ca0842f04c1919223413c7a94ac2..fa57be61aec5571ed3fed578ea9a5c0ec43f6a02 100644 (file)
@@ -4,16 +4,38 @@
 // Copyright (C) 2007 Novell, Inc (http://www.novell.com)
 //
 
-using NUnit.Framework;
 using System;
+using System.Collections.Specialized;
 using System.IO;
 using System.Net;
 using System.Collections;
 using System.Runtime.Serialization;
 
-namespace MonoTests.System.Net {
+using NUnit.Framework;
+
+namespace MonoTests.System.Net
+{
        [TestFixture]
-       public class WebClientTest {
+       public class WebClientTest
+       {
+               private string _tempFolder;
+
+               [SetUp]
+               public void SetUp ()
+               {
+                       _tempFolder = Path.Combine (Path.GetTempPath (),
+                               GetType ().FullName);
+                       if (Directory.Exists (_tempFolder))
+                               Directory.Delete (_tempFolder, true);
+                       Directory.CreateDirectory (_tempFolder);
+               }
+
+               [TearDown]
+               public void TearDown ()
+               {
+                       if (Directory.Exists (_tempFolder))
+                               Directory.Delete (_tempFolder, true);
+               }
 
                [Test]
                [Category ("InetAccess")]
@@ -29,9 +51,1936 @@ namespace MonoTests.System.Net {
                        // Now, remove the file and attempt to download again.
                        File.Delete(filename);
                        wc.DownloadFile("http://google.com/", filename);
+               }
+
+               [Test]
+               public void DownloadData1_Address_Null ()
+               {
+                       WebClient wc = new WebClient ();
+                       try {
+                               wc.DownloadData ((string) null);
+                               Assert.Fail ("#1");
+#if NET_2_0
+                       } 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 ("address", ex.ParamName, "#6");
+                       }
+#else
+                       } catch (WebException ex) {
+                               // An error occurred performing a WebClient request
+                               Assert.AreEqual (typeof (WebException), ex.GetType (), "#2");
+                               Assert.IsNotNull (ex.Message, "#3");
+                               Assert.IsNull (ex.Response, "#4");
+                               Assert.AreEqual (WebExceptionStatus.UnknownError, ex.Status, "#5");
+
+                               ArgumentNullException inner = ex.InnerException
+                                       as ArgumentNullException;
+                               Assert.IsNotNull (inner, "#6");
+                               Assert.AreEqual (typeof (ArgumentNullException), inner.GetType (), "#7");
+                               Assert.IsNull (inner.InnerException, "#8");
+                               Assert.IsNotNull (inner.Message, "#9");
+                               Assert.IsNotNull (inner.ParamName, "#10");
+                               Assert.AreEqual ("uriString", inner.ParamName, "#11");
+                       }
+#endif
+               }
+
+               [Test] // DownloadData (string)
+               public void DownloadData1_Address_SchemeNotSupported ()
+               {
+                       WebClient wc = new WebClient ();
+                       try {
+                               wc.DownloadData ("tp://scheme.notsupported");
+                               Assert.Fail ("#1");
+                       } catch (WebException ex) {
+                               // An error occurred performing a WebClient request
+                               Assert.AreEqual (typeof (WebException), ex.GetType (), "#2");
+                               Assert.IsNotNull (ex.InnerException, "#3");
+                               Assert.IsNotNull (ex.Message, "#4");
+                               Assert.IsNull (ex.Response, "#5");
+                               Assert.AreEqual (WebExceptionStatus.UnknownError, ex.Status, "#6");
+
+                               // The URI prefix is not recognized
+                               Exception inner = ex.InnerException;
+                               Assert.AreEqual (typeof (NotSupportedException), inner.GetType (), "#7");
+                               Assert.IsNull (inner.InnerException, "#8");
+                               Assert.IsNotNull (inner.Message, "#9");
+                       }
+               }
+
+#if NET_2_0
+               [Test] // DownloadData (Uri)
+               public void DownloadData2_Address_Null ()
+               {
+                       WebClient wc = new WebClient ();
+                       try {
+                               wc.DownloadData ((Uri) 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 ("address", ex.ParamName, "#6");
+                       }
+               }
+
+               [Test] // DownloadData (Uri)
+               public void DownloadData2_Address_SchemeNotSupported ()
+               {
+                       WebClient wc = new WebClient ();
+                       try {
+                               wc.DownloadData (new Uri ("tp://scheme.notsupported"));
+                               Assert.Fail ("#1");
+                       } catch (WebException ex) {
+                               // An error occurred performing a WebClient request
+                               Assert.AreEqual (typeof (WebException), ex.GetType (), "#2");
+                               Assert.IsNotNull (ex.InnerException, "#3");
+                               Assert.IsNotNull (ex.Message, "#4");
+                               Assert.IsNull (ex.Response, "#5");
+                               Assert.AreEqual (WebExceptionStatus.UnknownError, ex.Status, "#6");
+
+                               // The URI prefix is not recognized
+                               Exception inner = ex.InnerException;
+                               Assert.AreEqual (typeof (NotSupportedException), inner.GetType (), "#7");
+                               Assert.IsNull (inner.InnerException, "#8");
+                               Assert.IsNotNull (inner.Message, "#9");
+                       }
+               }
+#endif
+
+               [Test]
+               public void DownloadFile1_Address_Null ()
+               {
+                       WebClient wc = new WebClient ();
+                       try {
+                               wc.DownloadFile ((string) null, "tmp.out");
+                               Assert.Fail ("#1");
+#if NET_2_0
+                       } 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 ("address", ex.ParamName, "#6");
+                       }
+#else
+                       } catch (WebException ex) {
+                               // An error occurred performing a WebClient request
+                               Assert.AreEqual (typeof (WebException), ex.GetType (), "#2");
+                               Assert.IsNotNull (ex.Message, "#3");
+                               Assert.IsNull (ex.Response, "#4");
+                               Assert.AreEqual (WebExceptionStatus.UnknownError, ex.Status, "#5");
+
+                               ArgumentNullException inner = ex.InnerException
+                                       as ArgumentNullException;
+                               Assert.IsNotNull (inner, "#6");
+                               Assert.AreEqual (typeof (ArgumentNullException), inner.GetType (), "#7");
+                               Assert.IsNull (inner.InnerException, "#8");
+                               Assert.IsNotNull (inner.Message, "#9");
+                               Assert.IsNotNull (inner.ParamName, "#10");
+                               Assert.AreEqual ("uriString", inner.ParamName, "#11");
+                       }
+#endif
+               }
+
+               [Test] // DownloadFile (string, string)
+               public void DownloadFile1_Address_SchemeNotSupported ()
+               {
+                       WebClient wc = new WebClient ();
+                       try {
+                               wc.DownloadFile ("tp://scheme.notsupported",
+                                       "tmp.out");
+                               Assert.Fail ("#1");
+                       } catch (WebException ex) {
+                               // An error occurred performing a WebClient request
+                               Assert.AreEqual (typeof (WebException), ex.GetType (), "#2");
+                               Assert.IsNotNull (ex.InnerException, "#3");
+                               Assert.IsNotNull (ex.Message, "#4");
+                               Assert.IsNull (ex.Response, "#5");
+                               Assert.AreEqual (WebExceptionStatus.UnknownError, ex.Status, "#6");
+
+                               // The URI prefix is not recognized
+                               Exception inner = ex.InnerException;
+                               Assert.AreEqual (typeof (NotSupportedException), inner.GetType (), "#7");
+                               Assert.IsNull (inner.InnerException, "#8");
+                               Assert.IsNotNull (inner.Message, "#9");
+                       }
+               }
+
+               [Test] // DownloadFile (string, string)
+               public void DownloadFile1_FileName_Null ()
+               {
+                       WebClient wc = new WebClient ();
+                       try {
+                               wc.DownloadFile ("tp://scheme.notsupported",
+                                       (string) null);
+                               Assert.Fail ("#1");
+#if NET_2_0
+                       } 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 ("fileName", ex.ParamName, "#6");
+                       }
+#else
+                       } catch (WebException ex) {
+                               // An error occurred performing a WebClient request
+                               Assert.AreEqual (typeof (WebException), ex.GetType (), "#2");
+                               Assert.IsNotNull (ex.Message, "#3");
+                               Assert.IsNull (ex.Response, "#4");
+                               Assert.AreEqual (WebExceptionStatus.UnknownError, ex.Status, "#5");
+
+                               ArgumentNullException inner = ex.InnerException
+                                       as ArgumentNullException;
+                               Assert.IsNotNull (inner, "#6");
+                               Assert.AreEqual (typeof (ArgumentNullException), inner.GetType (), "#7");
+                               Assert.IsNull (inner.InnerException, "#8");
+                               Assert.IsNotNull (inner.Message, "#9");
+                               Assert.IsNotNull (inner.ParamName, "#10");
+                               Assert.AreEqual ("path", inner.ParamName, "#11");
+                       }
+#endif
+               }
+
+#if NET_2_0
+               [Test] // DownloadFile (Uri, string)
+               public void DownloadFile2_Address_Null ()
+               {
+                       WebClient wc = new WebClient ();
+                       try {
+                               wc.DownloadFile ((Uri) null, "tmp.out");
+                               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 ("address", ex.ParamName, "#6");
+                       }
+               }
+
+               [Test] // DownloadFile (Uri, string)
+               public void DownloadFile2_Address_SchemeNotSupported ()
+               {
+                       WebClient wc = new WebClient ();
+                       try {
+                               wc.DownloadFile (new Uri ("tp://scheme.notsupported"),
+                                       "tmp.out");
+                               Assert.Fail ("#1");
+                       } catch (WebException ex) {
+                               // An error occurred performing a WebClient request
+                               Assert.AreEqual (typeof (WebException), ex.GetType (), "#2");
+                               Assert.IsNotNull (ex.InnerException, "#3");
+                               Assert.IsNotNull (ex.Message, "#4");
+                               Assert.IsNull (ex.Response, "#5");
+                               Assert.AreEqual (WebExceptionStatus.UnknownError, ex.Status, "#6");
+
+                               // The URI prefix is not recognized
+                               Exception inner = ex.InnerException;
+                               Assert.AreEqual (typeof (NotSupportedException), inner.GetType (), "#7");
+                               Assert.IsNull (inner.InnerException, "#8");
+                               Assert.IsNotNull (inner.Message, "#9");
+                       }
+               }
+
+               [Test] // DownloadFile (Uri, string)
+               public void DownloadFile2_FileName_Null ()
+               {
+                       WebClient wc = new WebClient ();
+                       try {
+                               wc.DownloadFile (new Uri ("tp://scheme.notsupported"),
+                                       (string) 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 ("fileName", ex.ParamName, "#6");
+                       }
+               }
+
+               [Test] // DownloadString (string)
+               public void DownloadString1_Address_Null ()
+               {
+                       WebClient wc = new WebClient ();
+                       try {
+                               wc.DownloadString ((string) 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 ("address", ex.ParamName, "#6");
+                       }
+               }
+
+               [Test] // DownloadString (string)
+               public void DownloadString1_Address_SchemeNotSupported ()
+               {
+                       WebClient wc = new WebClient ();
+                       try {
+                               wc.DownloadString ("tp://scheme.notsupported");
+                               Assert.Fail ("#1");
+                       } catch (WebException ex) {
+                               // An error occurred performing a WebClient request
+                               Assert.AreEqual (typeof (WebException), ex.GetType (), "#2");
+                               Assert.IsNotNull (ex.InnerException, "#3");
+                               Assert.IsNotNull (ex.Message, "#4");
+                               Assert.IsNull (ex.Response, "#5");
+                               Assert.AreEqual (WebExceptionStatus.UnknownError, ex.Status, "#6");
+
+                               // The URI prefix is not recognized
+                               Exception inner = ex.InnerException;
+                               Assert.AreEqual (typeof (NotSupportedException), inner.GetType (), "#7");
+                               Assert.IsNull (inner.InnerException, "#8");
+                               Assert.IsNotNull (inner.Message, "#9");
+                       }
+               }
+
+               [Test] // DownloadString (Uri)
+               public void DownloadString2_Address_Null ()
+               {
+                       WebClient wc = new WebClient ();
+                       try {
+                               wc.DownloadString ((Uri) 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 ("address", ex.ParamName, "#6");
+                       }
+               }
+
+               [Test] // DownloadString (Uri)
+               public void DownloadString2_Address_SchemeNotSupported ()
+               {
+                       WebClient wc = new WebClient ();
+                       try {
+                               wc.DownloadString (new Uri ("tp://scheme.notsupported"));
+                               Assert.Fail ("#1");
+                       } catch (WebException ex) {
+                               // An error occurred performing a WebClient request
+                               Assert.AreEqual (typeof (WebException), ex.GetType (), "#2");
+                               Assert.IsNotNull (ex.InnerException, "#3");
+                               Assert.IsNotNull (ex.Message, "#4");
+                               Assert.IsNull (ex.Response, "#5");
+                               Assert.AreEqual (WebExceptionStatus.UnknownError, ex.Status, "#6");
+
+                               // The URI prefix is not recognized
+                               Exception inner = ex.InnerException;
+                               Assert.AreEqual (typeof (NotSupportedException), inner.GetType (), "#7");
+                               Assert.IsNull (inner.InnerException, "#8");
+                               Assert.IsNotNull (inner.Message, "#9");
+                       }
+               }
+#endif
+
+               [Test] // OpenRead (string)
+               public void OpenRead1_Address_Null ()
+               {
+                       WebClient wc = new WebClient ();
+                       try {
+                               wc.OpenRead ((string) null);
+                               Assert.Fail ("#1");
+#if NET_2_0
+                       } 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 ("address", ex.ParamName, "#6");
+                       }
+#else
+                       } catch (WebException ex) {
+                               // An error occurred performing a WebClient request
+                               Assert.AreEqual (typeof (WebException), ex.GetType (), "#2");
+                               Assert.IsNotNull (ex.Message, "#3");
+                               Assert.IsNull (ex.Response, "#4");
+                               Assert.AreEqual (WebExceptionStatus.UnknownError, ex.Status, "#5");
+
+                               ArgumentNullException inner = ex.InnerException
+                                       as ArgumentNullException;
+                               Assert.IsNotNull (inner, "#6");
+                               Assert.AreEqual (typeof (ArgumentNullException), inner.GetType (), "#7");
+                               Assert.IsNull (inner.InnerException, "#8");
+                               Assert.IsNotNull (inner.Message, "#9");
+                               Assert.IsNotNull (inner.ParamName, "#10");
+                               Assert.AreEqual ("uriString", inner.ParamName, "#11");
+                       }
+#endif
+               }
+
+               [Test] // OpenRead (string)
+               public void OpenRead1_Address_SchemeNotSupported ()
+               {
+                       WebClient wc = new WebClient ();
+                       try {
+                               wc.OpenRead ("tp://scheme.notsupported");
+                               Assert.Fail ("#1");
+                       } catch (WebException ex) {
+                               // An error occurred performing a WebClient request
+                               Assert.AreEqual (typeof (WebException), ex.GetType (), "#2");
+                               Assert.IsNotNull (ex.InnerException, "#3");
+                               Assert.IsNotNull (ex.Message, "#4");
+                               Assert.IsNull (ex.Response, "#5");
+                               Assert.AreEqual (WebExceptionStatus.UnknownError, ex.Status, "#6");
+
+                               // The URI prefix is not recognized
+                               Exception inner = ex.InnerException;
+                               Assert.AreEqual (typeof (NotSupportedException), inner.GetType (), "#7");
+                               Assert.IsNull (inner.InnerException, "#8");
+                               Assert.IsNotNull (inner.Message, "#9");
+                       }
+               }
+
+#if NET_2_0
+               [Test] // OpenRead (Uri)
+               public void OpenRead2_Address_Null ()
+               {
+                       WebClient wc = new WebClient ();
+                       try {
+                               wc.OpenRead ((Uri) 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 ("address", ex.ParamName, "#6");
+                       }
+               }
+
+               [Test] // OpenRead (Uri)
+               public void OpenRead2_Address_SchemeNotSupported ()
+               {
+                       WebClient wc = new WebClient ();
+                       try {
+                               wc.OpenRead (new Uri ("tp://scheme.notsupported"));
+                               Assert.Fail ("#1");
+                       } catch (WebException ex) {
+                               // An error occurred performing a WebClient request
+                               Assert.AreEqual (typeof (WebException), ex.GetType (), "#2");
+                               Assert.IsNotNull (ex.InnerException, "#3");
+                               Assert.IsNotNull (ex.Message, "#4");
+                               Assert.IsNull (ex.Response, "#5");
+                               Assert.AreEqual (WebExceptionStatus.UnknownError, ex.Status, "#6");
+
+                               // The URI prefix is not recognized
+                               Exception inner = ex.InnerException;
+                               Assert.AreEqual (typeof (NotSupportedException), inner.GetType (), "#7");
+                               Assert.IsNull (inner.InnerException, "#8");
+                               Assert.IsNotNull (inner.Message, "#9");
+                       }
+               }
+#endif
+
+               [Test] // OpenWrite (string)
+               public void OpenWrite1_Address_Null ()
+               {
+                       WebClient wc = new WebClient ();
+                       try {
+                               wc.OpenWrite ((string) null);
+                               Assert.Fail ("#1");
+#if NET_2_0
+                       } 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 ("address", ex.ParamName, "#6");
+                       }
+#else
+                       } catch (WebException ex) {
+                               // An error occurred performing a WebClient request
+                               Assert.AreEqual (typeof (WebException), ex.GetType (), "#2");
+                               Assert.IsNotNull (ex.Message, "#3");
+                               Assert.IsNull (ex.Response, "#4");
+                               Assert.AreEqual (WebExceptionStatus.UnknownError, ex.Status, "#5");
+
+                               ArgumentNullException inner = ex.InnerException
+                                       as ArgumentNullException;
+                               Assert.IsNotNull (inner, "#6");
+                               Assert.AreEqual (typeof (ArgumentNullException), inner.GetType (), "#7");
+                               Assert.IsNull (inner.InnerException, "#8");
+                               Assert.IsNotNull (inner.Message, "#9");
+                               Assert.IsNotNull (inner.ParamName, "#10");
+                               Assert.AreEqual ("uriString", inner.ParamName, "#11");
+                       }
+#endif
+               }
+
+               [Test] // OpenWrite (string)
+               public void OpenWrite1_Address_SchemeNotSupported ()
+               {
+                       WebClient wc = new WebClient ();
+                       try {
+                               wc.OpenWrite ("tp://scheme.notsupported");
+                               Assert.Fail ("#1");
+                       } catch (WebException ex) {
+                               // An error occurred performing a WebClient request
+                               Assert.AreEqual (typeof (WebException), ex.GetType (), "#2");
+                               Assert.IsNotNull (ex.InnerException, "#3");
+                               Assert.IsNotNull (ex.Message, "#4");
+                               Assert.IsNull (ex.Response, "#5");
+                               Assert.AreEqual (WebExceptionStatus.UnknownError, ex.Status, "#6");
+
+                               // The URI prefix is not recognized
+                               Exception inner = ex.InnerException;
+                               Assert.AreEqual (typeof (NotSupportedException), inner.GetType (), "#7");
+                               Assert.IsNull (inner.InnerException, "#8");
+                               Assert.IsNotNull (inner.Message, "#9");
+                       }
+               }
+
+               [Test] // OpenWrite (string, string)
+               public void OpenWrite2_Address_Null ()
+               {
+                       WebClient wc = new WebClient ();
+                       try {
+                               wc.OpenWrite ((string) null, "PUT");
+                               Assert.Fail ("#1");
+#if NET_2_0
+                       } 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 ("address", ex.ParamName, "#6");
+                       }
+#else
+                       } catch (WebException ex) {
+                               // An error occurred performing a WebClient request
+                               Assert.AreEqual (typeof (WebException), ex.GetType (), "#2");
+                               Assert.IsNotNull (ex.Message, "#3");
+                               Assert.IsNull (ex.Response, "#4");
+                               Assert.AreEqual (WebExceptionStatus.UnknownError, ex.Status, "#5");
+
+                               ArgumentNullException inner = ex.InnerException
+                                       as ArgumentNullException;
+                               Assert.IsNotNull (inner, "#6");
+                               Assert.AreEqual (typeof (ArgumentNullException), inner.GetType (), "#7");
+                               Assert.IsNull (inner.InnerException, "#8");
+                               Assert.IsNotNull (inner.Message, "#9");
+                               Assert.IsNotNull (inner.ParamName, "#10");
+                               Assert.AreEqual ("uriString", inner.ParamName, "#11");
+                       }
+#endif
+               }
+
+               [Test] // OpenWrite (string, string)
+               public void OpenWrite2_Address_SchemeNotSupported ()
+               {
+                       WebClient wc = new WebClient ();
+                       try {
+                               wc.OpenWrite ("tp://scheme.notsupported", "PUT");
+                               Assert.Fail ("#1");
+                       } catch (WebException ex) {
+                               // An error occurred performing a WebClient request
+                               Assert.AreEqual (typeof (WebException), ex.GetType (), "#2");
+                               Assert.IsNotNull (ex.InnerException, "#3");
+                               Assert.IsNotNull (ex.Message, "#4");
+                               Assert.IsNull (ex.Response, "#5");
+                               Assert.AreEqual (WebExceptionStatus.UnknownError, ex.Status, "#6");
+
+                               // The URI prefix is not recognized
+                               Exception inner = ex.InnerException;
+                               Assert.AreEqual (typeof (NotSupportedException), inner.GetType (), "#7");
+                               Assert.IsNull (inner.InnerException, "#8");
+                               Assert.IsNotNull (inner.Message, "#9");
+                       }
+               }
+
+#if NET_2_0
+               [Test] // OpenWrite (Uri)
+               public void OpenWrite3_Address_Null ()
+               {
+                       WebClient wc = new WebClient ();
+                       try {
+                               wc.OpenWrite ((Uri) 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 ("address", ex.ParamName, "#6");
+                       }
+               }
+
+               [Test] // OpenWrite (Uri)
+               public void OpenWrite3_Address_SchemeNotSupported ()
+               {
+                       WebClient wc = new WebClient ();
+                       try {
+                               wc.OpenWrite (new Uri ("tp://scheme.notsupported"));
+                               Assert.Fail ("#1");
+                       } catch (WebException ex) {
+                               // An error occurred performing a WebClient request
+                               Assert.AreEqual (typeof (WebException), ex.GetType (), "#2");
+                               Assert.IsNotNull (ex.InnerException, "#3");
+                               Assert.IsNotNull (ex.Message, "#4");
+                               Assert.IsNull (ex.Response, "#5");
+                               Assert.AreEqual (WebExceptionStatus.UnknownError, ex.Status, "#6");
+
+                               // The URI prefix is not recognized
+                               Exception inner = ex.InnerException;
+                               Assert.AreEqual (typeof (NotSupportedException), inner.GetType (), "#7");
+                               Assert.IsNull (inner.InnerException, "#8");
+                               Assert.IsNotNull (inner.Message, "#9");
+                       }
+               }
+
+               [Test] // OpenWrite (Uri, string)
+               public void OpenWrite4_Address_Null ()
+               {
+                       WebClient wc = new WebClient ();
+                       try {
+                               wc.OpenWrite ((Uri) null, "POST");
+                               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 ("address", ex.ParamName, "#6");
+                       }
+               }
+
+               [Test] // OpenWrite (Uri, string)
+               public void OpenWrite4_Address_SchemeNotSupported ()
+               {
+                       WebClient wc = new WebClient ();
+                       try {
+                               wc.OpenWrite (new Uri ("tp://scheme.notsupported"),
+                                       "POST");
+                               Assert.Fail ("#1");
+                       } catch (WebException ex) {
+                               // An error occurred performing a WebClient request
+                               Assert.AreEqual (typeof (WebException), ex.GetType (), "#2");
+                               Assert.IsNotNull (ex.InnerException, "#3");
+                               Assert.IsNotNull (ex.Message, "#4");
+                               Assert.IsNull (ex.Response, "#5");
+                               Assert.AreEqual (WebExceptionStatus.UnknownError, ex.Status, "#6");
+
+                               // The URI prefix is not recognized
+                               Exception inner = ex.InnerException;
+                               Assert.AreEqual (typeof (NotSupportedException), inner.GetType (), "#7");
+                               Assert.IsNull (inner.InnerException, "#8");
+                               Assert.IsNotNull (inner.Message, "#9");
+                       }
+               }
+#endif
+
+               [Test] // UploadData (string, byte [])
+               public void UploadData1_Address_Null ()
+               {
+                       WebClient wc = new WebClient ();
+                       try {
+                               wc.UploadData ((string) null, new byte [] { 0x1a });
+                               Assert.Fail ("#1");
+#if NET_2_0
+                       } 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 ("address", ex.ParamName, "#6");
+                       }
+#else
+                       } catch (WebException ex) {
+                               // An error occurred performing a WebClient request
+                               Assert.AreEqual (typeof (WebException), ex.GetType (), "#2");
+                               Assert.IsNotNull (ex.Message, "#3");
+                               Assert.IsNull (ex.Response, "#4");
+                               Assert.AreEqual (WebExceptionStatus.UnknownError, ex.Status, "#5");
+
+                               ArgumentNullException inner = ex.InnerException
+                                       as ArgumentNullException;
+                               Assert.IsNotNull (inner, "#6");
+                               Assert.AreEqual (typeof (ArgumentNullException), inner.GetType (), "#7");
+                               Assert.IsNull (inner.InnerException, "#8");
+                               Assert.IsNotNull (inner.Message, "#9");
+                               Assert.IsNotNull (inner.ParamName, "#10");
+                               Assert.AreEqual ("uriString", inner.ParamName, "#11");
+                       }
+#endif
+               }
+
+               [Test] // UploadData (string, byte [])
+               public void UploadData1_Address_SchemeNotSupported ()
+               {
+                       WebClient wc = new WebClient ();
+                       try {
+                               wc.UploadData ("tp://scheme.notsupported", new byte [] { 0x1a });
+                               Assert.Fail ("#1");
+                       } catch (WebException ex) {
+                               // An error occurred performing a WebClient request
+                               Assert.AreEqual (typeof (WebException), ex.GetType (), "#2");
+                               Assert.IsNotNull (ex.InnerException, "#3");
+                               Assert.IsNotNull (ex.Message, "#4");
+                               Assert.IsNull (ex.Response, "#5");
+                               Assert.AreEqual (WebExceptionStatus.UnknownError, ex.Status, "#6");
+
+                               // The URI prefix is not recognized
+                               Exception inner = ex.InnerException;
+                               Assert.AreEqual (typeof (NotSupportedException), inner.GetType (), "#7");
+                               Assert.IsNull (inner.InnerException, "#8");
+                               Assert.IsNotNull (inner.Message, "#9");
+                       }
+               }
+
+               [Test] // UploadData (string, byte [])
+#if ONLY_1_1
+               [Category ("NotDotNet")] // On MS, there's a nested NotImplementedException
+#endif
+               public void UploadData1_Data_Null ()
+               {
+                       WebClient wc = new WebClient ();
+                       try {
+                               wc.UploadData ("http://www.mono-project.com",
+                                       (byte []) null);
+                               Assert.Fail ("#1");
+#if NET_2_0
+                       } 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 ("data", ex.ParamName, "#6");
+                       }
+#else
+                       } catch (WebException ex) {
+                               // An error occurred performing a WebClient request
+                               Assert.AreEqual (typeof (WebException), ex.GetType (), "#2");
+                               Assert.IsNotNull (ex.Message, "#3");
+                               Assert.IsNull (ex.Response, "#4");
+                               Assert.AreEqual (WebExceptionStatus.UnknownError, ex.Status, "#5");
+
+                               ArgumentNullException inner = ex.InnerException
+                                       as ArgumentNullException;
+                               Assert.IsNotNull (inner, "#6");
+                               Assert.AreEqual (typeof (ArgumentNullException), inner.GetType (), "#7");
+                               Assert.IsNull (inner.InnerException, "#8");
+                               Assert.IsNotNull (inner.Message, "#9");
+                               Assert.IsNotNull (inner.ParamName, "#10");
+                               Assert.AreEqual ("data", inner.ParamName, "#11");
+                       }
+#endif
+               }
+
+#if NET_2_0
+               [Test] // UploadData (Uri, byte [])
+               public void UploadData2_Address_Null ()
+               {
+                       WebClient wc = new WebClient ();
+                       try {
+                               wc.UploadData ((Uri) null, new byte [] { 0x1a });
+                               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 ("address", ex.ParamName, "#6");
+                       }
+               }
+
+               [Test] // UploadData (Uri, byte [])
+               public void UploadData2_Address_SchemeNotSupported ()
+               {
+                       WebClient wc = new WebClient ();
+                       try {
+                               wc.UploadData (new Uri ("tp://scheme.notsupported"),
+                                       new byte [] { 0x1a });
+                               Assert.Fail ("#1");
+                       } catch (WebException ex) {
+                               // An error occurred performing a WebClient request
+                               Assert.AreEqual (typeof (WebException), ex.GetType (), "#2");
+                               Assert.IsNotNull (ex.InnerException, "#3");
+                               Assert.IsNotNull (ex.Message, "#4");
+                               Assert.IsNull (ex.Response, "#5");
+                               Assert.AreEqual (WebExceptionStatus.UnknownError, ex.Status, "#6");
+
+                               // The URI prefix is not recognized
+                               Exception inner = ex.InnerException;
+                               Assert.AreEqual (typeof (NotSupportedException), inner.GetType (), "#7");
+                               Assert.IsNull (inner.InnerException, "#8");
+                               Assert.IsNotNull (inner.Message, "#9");
+                       }
+               }
+
+               [Test] // UploadData (Uri, byte [])
+               public void UploadData2_Data_Null ()
+               {
+                       WebClient wc = new WebClient ();
+                       try {
+                               wc.UploadData (new Uri ("http://www.mono-project.com"),
+                                       (byte []) 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 ("data", ex.ParamName, "#6");
+                       }
+               }
+#endif
+
+               [Test] // UploadData (string, string, byte [])
+               public void UploadData3_Address_Null ()
+               {
+                       WebClient wc = new WebClient ();
+                       try {
+                               wc.UploadData ((string) null, "POST",
+                                       new byte [] { 0x1a });
+                               Assert.Fail ("#1");
+#if NET_2_0
+                       } 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 ("address", ex.ParamName, "#6");
+                       }
+#else
+                       } catch (WebException ex) {
+                               // An error occurred performing a WebClient request
+                               Assert.AreEqual (typeof (WebException), ex.GetType (), "#2");
+                               Assert.IsNotNull (ex.Message, "#3");
+                               Assert.IsNull (ex.Response, "#4");
+                               Assert.AreEqual (WebExceptionStatus.UnknownError, ex.Status, "#5");
+
+                               ArgumentNullException inner = ex.InnerException
+                                       as ArgumentNullException;
+                               Assert.IsNotNull (inner, "#6");
+                               Assert.AreEqual (typeof (ArgumentNullException), inner.GetType (), "#7");
+                               Assert.IsNull (inner.InnerException, "#8");
+                               Assert.IsNotNull (inner.Message, "#9");
+                               Assert.IsNotNull (inner.ParamName, "#10");
+                               Assert.AreEqual ("uriString", inner.ParamName, "#11");
+                       }
+#endif
+               }
+
+               [Test] // UploadData (string, string, byte [])
+               public void UploadData3_Address_SchemeNotSupported ()
+               {
+                       WebClient wc = new WebClient ();
+                       try {
+                               wc.UploadData ("tp://scheme.notsupported",
+                                       "POST", new byte [] { 0x1a });
+                               Assert.Fail ("#1");
+                       } catch (WebException ex) {
+                               // An error occurred performing a WebClient request
+                               Assert.AreEqual (typeof (WebException), ex.GetType (), "#2");
+                               Assert.IsNotNull (ex.InnerException, "#3");
+                               Assert.IsNotNull (ex.Message, "#4");
+                               Assert.IsNull (ex.Response, "#5");
+                               Assert.AreEqual (WebExceptionStatus.UnknownError, ex.Status, "#6");
+
+                               // The URI prefix is not recognized
+                               Exception inner = ex.InnerException;
+                               Assert.AreEqual (typeof (NotSupportedException), inner.GetType (), "#7");
+                               Assert.IsNull (inner.InnerException, "#8");
+                               Assert.IsNotNull (inner.Message, "#9");
+                       }
+               }
+
+               [Test] // UploadData (string, string, byte [])
+#if ONLY_1_1
+               [Category ("NotDotNet")] // On MS, there's a nested NotImplementedException
+#endif
+               public void UploadData3_Data_Null ()
+               {
+                       WebClient wc = new WebClient ();
+                       try {
+                               wc.UploadData ("http://www.mono-project.com",
+                                       "POST", (byte []) null);
+                               Assert.Fail ("#1");
+#if NET_2_0
+                       } 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 ("data", ex.ParamName, "#6");
+                       }
+#else
+                       } catch (WebException ex) {
+                               // An error occurred performing a WebClient request
+                               Assert.AreEqual (typeof (WebException), ex.GetType (), "#2");
+                               Assert.IsNotNull (ex.Message, "#3");
+                               Assert.IsNull (ex.Response, "#4");
+                               Assert.AreEqual (WebExceptionStatus.UnknownError, ex.Status, "#5");
+
+                               ArgumentNullException inner = ex.InnerException
+                                       as ArgumentNullException;
+                               Assert.IsNotNull (inner, "#6");
+                               Assert.AreEqual (typeof (ArgumentNullException), inner.GetType (), "#7");
+                               Assert.IsNull (inner.InnerException, "#8");
+                               Assert.IsNotNull (inner.Message, "#9");
+                               Assert.IsNotNull (inner.ParamName, "#10");
+                               Assert.AreEqual ("data", inner.ParamName, "#11");
+                       }
+#endif
+               }
+
+#if NET_2_0
+               [Test] // UploadData (Uri, string, byte [])
+               public void UploadData4_Address_Null ()
+               {
+                       WebClient wc = new WebClient ();
+                       try {
+                               wc.UploadData ((Uri) null, "POST", new byte [] { 0x1a });
+                               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 ("address", ex.ParamName, "#6");
+                       }
+               }
+
+               [Test] // UploadData (Uri, string, byte [])
+               public void UploadData4_Address_SchemeNotSupported ()
+               {
+                       WebClient wc = new WebClient ();
+                       try {
+                               wc.UploadData (new Uri ("tp://scheme.notsupported"),
+                                       "POST", new byte [] { 0x1a });
+                               Assert.Fail ("#1");
+                       } catch (WebException ex) {
+                               // An error occurred performing a WebClient request
+                               Assert.AreEqual (typeof (WebException), ex.GetType (), "#2");
+                               Assert.IsNotNull (ex.InnerException, "#3");
+                               Assert.IsNotNull (ex.Message, "#4");
+                               Assert.IsNull (ex.Response, "#5");
+                               Assert.AreEqual (WebExceptionStatus.UnknownError, ex.Status, "#6");
+
+                               // The URI prefix is not recognized
+                               Exception inner = ex.InnerException;
+                               Assert.AreEqual (typeof (NotSupportedException), inner.GetType (), "#7");
+                               Assert.IsNull (inner.InnerException, "#8");
+                               Assert.IsNotNull (inner.Message, "#9");
+                       }
+               }
+
+               [Test] // UploadData (Uri, string, byte [])
+               public void UploadData4_Data_Null ()
+               {
+                       WebClient wc = new WebClient ();
+                       try {
+                               wc.UploadData (new Uri ("http://www.mono-project.com"),
+                                       "POST", (byte []) 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 ("data", ex.ParamName, "#6");
+                       }
+               }
+#endif
+
+               [Test] // UploadFile (string, string)
+               public void UploadFile1_Address_Null ()
+               {
+                       string tempFile = Path.Combine (_tempFolder, "upload.tmp");
+                       File.Create (tempFile).Close ();
+
+                       WebClient wc = new WebClient ();
+                       try {
+                               wc.UploadFile ((string) null, tempFile);
+                               Assert.Fail ("#1");
+#if NET_2_0
+                       } 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 ("address", ex.ParamName, "#6");
+                       }
+#else
+                       } catch (WebException ex) {
+                               // An error occurred performing a WebClient request
+                               Assert.AreEqual (typeof (WebException), ex.GetType (), "#2");
+                               Assert.IsNotNull (ex.Message, "#3");
+                               Assert.IsNull (ex.Response, "#4");
+                               Assert.AreEqual (WebExceptionStatus.UnknownError, ex.Status, "#5");
+
+                               ArgumentNullException inner = ex.InnerException
+                                       as ArgumentNullException;
+                               Assert.IsNotNull (inner, "#6");
+                               Assert.AreEqual (typeof (ArgumentNullException), inner.GetType (), "#7");
+                               Assert.IsNull (inner.InnerException, "#8");
+                               Assert.IsNotNull (inner.Message, "#9");
+                               Assert.IsNotNull (inner.ParamName, "#10");
+                               Assert.AreEqual ("uriString", inner.ParamName, "#11");
+                       }
+#endif
+               }
+
+               [Test] // UploadFile (string, string)
+               public void UploadFile1_Address_SchemeNotSupported ()
+               {
+                       string tempFile = Path.Combine (_tempFolder, "upload.tmp");
+                       File.Create (tempFile).Close ();
+
+                       WebClient wc = new WebClient ();
+                       try {
+                               wc.UploadFile ("tp://scheme.notsupported",
+                                       tempFile);
+                               Assert.Fail ("#1");
+                       } catch (WebException ex) {
+                               // An error occurred performing a WebClient request
+                               Assert.AreEqual (typeof (WebException), ex.GetType (), "#2");
+                               Assert.IsNotNull (ex.InnerException, "#3");
+                               Assert.IsNotNull (ex.Message, "#4");
+                               Assert.IsNull (ex.Response, "#5");
+                               Assert.AreEqual (WebExceptionStatus.UnknownError, ex.Status, "#6");
+
+                               // The URI prefix is not recognized
+                               Exception inner = ex.InnerException;
+                               Assert.AreEqual (typeof (NotSupportedException), inner.GetType (), "#7");
+                               Assert.IsNull (inner.InnerException, "#8");
+                               Assert.IsNotNull (inner.Message, "#9");
+                       }
+               }
+
+               [Test] // UploadFile (string, string)
+               public void UploadFile1_FileName_NotFound ()
+               {
+                       string tempFile = Path.Combine (_tempFolder, "upload.tmp");
+
+                       WebClient wc = new WebClient ();
+                       try {
+                               wc.UploadFile ("tp://scheme.notsupported",
+                                       tempFile);
+                               Assert.Fail ("#1");
+                       } catch (WebException ex) {
+                               // An error occurred performing a WebClient request
+                               Assert.AreEqual (typeof (WebException), ex.GetType (), "#2");
+                               Assert.IsNotNull (ex.Message, "#3");
+                               Assert.IsNull (ex.Response, "#4");
+                               Assert.AreEqual (WebExceptionStatus.UnknownError, ex.Status, "#5");
+
+                               // Could not find file "..."
+                               FileNotFoundException inner = ex.InnerException
+                                       as FileNotFoundException;
+                               Assert.IsNotNull (inner, "#6");
+                               Assert.AreEqual (typeof (FileNotFoundException), inner.GetType (), "#7");
+                               Assert.IsNotNull (inner.FileName, "#8");
+                               Assert.AreEqual (tempFile, inner.FileName, "#9");
+                               Assert.IsNull (inner.InnerException, "#10");
+                               Assert.IsNotNull (inner.Message, "#11");
+                       }
+               }
+
+               [Test] // UploadFile (string, string)
+               public void UploadFile1_FileName_Null ()
+               {
+                       WebClient wc = new WebClient ();
+                       try {
+                               wc.UploadFile ("tp://scheme.notsupported",
+                                       (string) null);
+                               Assert.Fail ("#1");
+#if NET_2_0
+                       } 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 ("fileName", ex.ParamName, "#6");
+                       }
+#else
+                       } catch (WebException ex) {
+                               // An error occurred performing a WebClient request
+                               Assert.AreEqual (typeof (WebException), ex.GetType (), "#2");
+                               Assert.IsNotNull (ex.Message, "#3");
+                               Assert.IsNull (ex.Response, "#4");
+                               Assert.AreEqual (WebExceptionStatus.UnknownError, ex.Status, "#5");
+
+                               ArgumentNullException inner = ex.InnerException
+                                       as ArgumentNullException;
+                               Assert.IsNotNull (inner, "#6");
+                               Assert.AreEqual (typeof (ArgumentNullException), inner.GetType (), "#7");
+                               Assert.IsNull (inner.InnerException, "#8");
+                               Assert.IsNotNull (inner.Message, "#9");
+                               Assert.IsNotNull (inner.ParamName, "#10");
+                               Assert.AreEqual ("path", inner.ParamName, "#11");
+                       }
+#endif
+               }
+
+#if NET_2_0
+               [Test] // UploadFile (Uri, string)
+               public void UploadFile2_Address_Null ()
+               {
+                       string tempFile = Path.Combine (_tempFolder, "upload.tmp");
 
-                       // We merely want this to reach this point, bug 81066.
+                       WebClient wc = new WebClient ();
+                       try {
+                               wc.UploadFile ((Uri) null, tempFile);
+                               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 ("address", ex.ParamName, "#6");
+                       }
+               }
+
+               [Test] // UploadFile (Uri, string)
+               public void UploadFile2_Address_SchemeNotSupported ()
+               {
+                       string tempFile = Path.Combine (_tempFolder, "upload.tmp");
+                       File.Create (tempFile).Close ();
+
+                       WebClient wc = new WebClient ();
+                       try {
+                               wc.UploadFile (new Uri ("tp://scheme.notsupported"),
+                                       tempFile);
+                               Assert.Fail ("#1");
+                       } catch (WebException ex) {
+                               // An error occurred performing a WebClient request
+                               Assert.AreEqual (typeof (WebException), ex.GetType (), "#2");
+                               Assert.IsNotNull (ex.InnerException, "#3");
+                               Assert.IsNotNull (ex.Message, "#4");
+                               Assert.IsNull (ex.Response, "#5");
+                               Assert.AreEqual (WebExceptionStatus.UnknownError, ex.Status, "#6");
+
+                               // The URI prefix is not recognized
+                               Exception inner = ex.InnerException;
+                               Assert.AreEqual (typeof (NotSupportedException), inner.GetType (), "#7");
+                               Assert.IsNull (inner.InnerException, "#8");
+                               Assert.IsNotNull (inner.Message, "#9");
+                       }
+               }
+
+               [Test] // UploadFile (Uri, string)
+               public void UploadFile2_FileName_NotFound ()
+               {
+                       string tempFile = Path.Combine (_tempFolder, "upload.tmp");
+
+                       WebClient wc = new WebClient ();
+                       try {
+                               wc.UploadFile (new Uri ("tp://scheme.notsupported"),
+                                       tempFile);
+                               Assert.Fail ("#1");
+                       } catch (WebException ex) {
+                               // An error occurred performing a WebClient request
+                               Assert.AreEqual (typeof (WebException), ex.GetType (), "#2");
+                               Assert.IsNotNull (ex.Message, "#3");
+                               Assert.IsNull (ex.Response, "#4");
+                               Assert.AreEqual (WebExceptionStatus.UnknownError, ex.Status, "#5");
+
+                               // Could not find file "..."
+                               FileNotFoundException inner = ex.InnerException
+                                       as FileNotFoundException;
+                               Assert.IsNotNull (inner, "#6");
+                               Assert.AreEqual (typeof (FileNotFoundException), inner.GetType (), "#7");
+                               Assert.IsNotNull (inner.FileName, "#8");
+                               Assert.AreEqual (tempFile, inner.FileName, "#9");
+                               Assert.IsNull (inner.InnerException, "#10");
+                               Assert.IsNotNull (inner.Message, "#11");
+                       }
+               }
+
+               [Test] // UploadFile (Uri, string)
+               public void UploadFile2_FileName_Null ()
+               {
+                       WebClient wc = new WebClient ();
+                       try {
+                               wc.UploadFile (new Uri ("tp://scheme.notsupported"),
+                                       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 ("fileName", ex.ParamName, "#6");
+                       }
+               }
+#endif
+
+               [Test] // UploadFile (string, string, string)
+               public void UploadFile3_Address_Null ()
+               {
+                       string tempFile = Path.Combine (_tempFolder, "upload.tmp");
+                       File.Create (tempFile).Close ();
+
+                       WebClient wc = new WebClient ();
+                       try {
+                               wc.UploadFile ((string) null, "POST", tempFile);
+                               Assert.Fail ("#1");
+#if NET_2_0
+                       } 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 ("path", ex.ParamName, "#6");
+                       }
+#else
+                       } catch (WebException ex) {
+                               // An error occurred performing a WebClient request
+                               Assert.AreEqual (typeof (WebException), ex.GetType (), "#2");
+                               Assert.IsNotNull (ex.Message, "#3");
+                               Assert.IsNull (ex.Response, "#4");
+                               Assert.AreEqual (WebExceptionStatus.UnknownError, ex.Status, "#5");
+
+                               ArgumentNullException inner = ex.InnerException
+                                       as ArgumentNullException;
+                               Assert.IsNotNull (inner, "#6");
+                               Assert.AreEqual (typeof (ArgumentNullException), inner.GetType (), "#7");
+                               Assert.IsNull (inner.InnerException, "#8");
+                               Assert.IsNotNull (inner.Message, "#9");
+                               Assert.IsNotNull (inner.ParamName, "#10");
+                               Assert.AreEqual ("uriString", inner.ParamName, "#11");
+                       }
+#endif
+               }
+
+               [Test] // UploadFile (string, string, string)
+               public void UploadFile3_Address_SchemeNotSupported ()
+               {
+                       string tempFile = Path.Combine (_tempFolder, "upload.tmp");
+                       File.Create (tempFile).Close ();
+
+                       WebClient wc = new WebClient ();
+                       try {
+                               wc.UploadFile ("tp://scheme.notsupported",
+                                       "POST", tempFile);
+                               Assert.Fail ("#1");
+                       } catch (WebException ex) {
+                               // An error occurred performing a WebClient request
+                               Assert.AreEqual (typeof (WebException), ex.GetType (), "#2");
+                               Assert.IsNotNull (ex.InnerException, "#3");
+                               Assert.IsNotNull (ex.Message, "#4");
+                               Assert.IsNull (ex.Response, "#5");
+                               Assert.AreEqual (WebExceptionStatus.UnknownError, ex.Status, "#6");
+
+                               // The URI prefix is not recognized
+                               Exception inner = ex.InnerException;
+                               Assert.AreEqual (typeof (NotSupportedException), inner.GetType (), "#7");
+                               Assert.IsNull (inner.InnerException, "#8");
+                               Assert.IsNotNull (inner.Message, "#9");
+                       }
+               }
+
+               [Test] // UploadFile (string, string, string)
+               public void UploadFile3_FileName_NotFound ()
+               {
+                       string tempFile = Path.Combine (_tempFolder, "upload.tmp");
+
+                       WebClient wc = new WebClient ();
+                       try {
+                               wc.UploadFile ("tp://scheme.notsupported",
+                                       "POST", tempFile);
+                               Assert.Fail ("#1");
+                       } catch (WebException ex) {
+                               // An error occurred performing a WebClient request
+                               Assert.AreEqual (typeof (WebException), ex.GetType (), "#2");
+                               Assert.IsNotNull (ex.Message, "#3");
+                               Assert.IsNull (ex.Response, "#4");
+                               Assert.AreEqual (WebExceptionStatus.UnknownError, ex.Status, "#5");
+
+                               // Could not find file "..."
+                               FileNotFoundException inner = ex.InnerException
+                                       as FileNotFoundException;
+                               Assert.IsNotNull (inner, "#6");
+                               Assert.AreEqual (typeof (FileNotFoundException), inner.GetType (), "#7");
+                               Assert.IsNotNull (inner.FileName, "#8");
+                               Assert.AreEqual (tempFile, inner.FileName, "#9");
+                               Assert.IsNull (inner.InnerException, "#10");
+                               Assert.IsNotNull (inner.Message, "#11");
+                       }
+               }
+
+               [Test] // UploadFile (string, string, string)
+               public void UploadFile3_FileName_Null ()
+               {
+                       WebClient wc = new WebClient ();
+                       try {
+                               wc.UploadFile ("tp://scheme.notsupported",
+                                       "POST", (string) null);
+                               Assert.Fail ("#1");
+#if NET_2_0
+                       } 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 ("fileName", ex.ParamName, "#6");
+                       }
+#else
+                       } catch (WebException ex) {
+                               // An error occurred performing a WebClient request
+                               Assert.AreEqual (typeof (WebException), ex.GetType (), "#2");
+                               Assert.IsNotNull (ex.Message, "#3");
+                               Assert.IsNull (ex.Response, "#4");
+                               Assert.AreEqual (WebExceptionStatus.UnknownError, ex.Status, "#5");
+
+                               ArgumentNullException inner = ex.InnerException
+                                       as ArgumentNullException;
+                               Assert.IsNotNull (inner, "#6");
+                               Assert.AreEqual (typeof (ArgumentNullException), inner.GetType (), "#7");
+                               Assert.IsNull (inner.InnerException, "#8");
+                               Assert.IsNotNull (inner.Message, "#9");
+                               Assert.IsNotNull (inner.ParamName, "#10");
+                               Assert.AreEqual ("path", inner.ParamName, "#11");
+                       }
+#endif
+               }
+
+#if NET_2_0
+               [Test] // UploadFile (Uri, string, string)
+               public void UploadFile4_Address_Null ()
+               {
+                       string tempFile = Path.Combine (_tempFolder, "upload.tmp");
+
+                       WebClient wc = new WebClient ();
+                       try {
+                               wc.UploadFile ((Uri) null, "POST", tempFile);
+                               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 ("address", ex.ParamName, "#6");
+                       }
+               }
+
+               [Test] // UploadFile (Uri, string, string)
+               public void UploadFile4_Address_SchemeNotSupported ()
+               {
+                       string tempFile = Path.Combine (_tempFolder, "upload.tmp");
+                       File.Create (tempFile).Close ();
+
+                       WebClient wc = new WebClient ();
+                       try {
+                               wc.UploadFile (new Uri ("tp://scheme.notsupported"),
+                                       "POST", tempFile);
+                               Assert.Fail ("#1");
+                       } catch (WebException ex) {
+                               // An error occurred performing a WebClient request
+                               Assert.AreEqual (typeof (WebException), ex.GetType (), "#2");
+                               Assert.IsNotNull (ex.InnerException, "#3");
+                               Assert.IsNotNull (ex.Message, "#4");
+                               Assert.IsNull (ex.Response, "#5");
+                               Assert.AreEqual (WebExceptionStatus.UnknownError, ex.Status, "#6");
+
+                               // The URI prefix is not recognized
+                               Exception inner = ex.InnerException;
+                               Assert.AreEqual (typeof (NotSupportedException), inner.GetType (), "#7");
+                               Assert.IsNull (inner.InnerException, "#8");
+                               Assert.IsNotNull (inner.Message, "#9");
+                       }
+               }
+
+               [Test] // UploadFile (Uri, string, string)
+               public void UploadFile4_FileName_NotFound ()
+               {
+                       string tempFile = Path.Combine (_tempFolder, "upload.tmp");
+
+                       WebClient wc = new WebClient ();
+                       try {
+                               wc.UploadFile (new Uri ("tp://scheme.notsupported"),
+                                       "POST", tempFile);
+                               Assert.Fail ("#1");
+                       } catch (WebException ex) {
+                               // An error occurred performing a WebClient request
+                               Assert.AreEqual (typeof (WebException), ex.GetType (), "#2");
+                               Assert.IsNotNull (ex.Message, "#3");
+                               Assert.IsNull (ex.Response, "#4");
+                               Assert.AreEqual (WebExceptionStatus.UnknownError, ex.Status, "#5");
+
+                               // Could not find file "..."
+                               FileNotFoundException inner = ex.InnerException
+                                       as FileNotFoundException;
+                               Assert.IsNotNull (inner, "#6");
+                               Assert.AreEqual (typeof (FileNotFoundException), inner.GetType (), "#7");
+                               Assert.IsNotNull (inner.FileName, "#8");
+                               Assert.AreEqual (tempFile, inner.FileName, "#9");
+                               Assert.IsNull (inner.InnerException, "#10");
+                               Assert.IsNotNull (inner.Message, "#11");
+                       }
+               }
+
+               [Test] // UploadFile (Uri, string, string)
+               public void UploadFile4_FileName_Null ()
+               {
+                       WebClient wc = new WebClient ();
+                       try {
+                               wc.UploadFile (new Uri ("tp://scheme.notsupported"),
+                                       "POST", (string) 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 ("fileName", ex.ParamName, "#6");
+                       }
+               }
+
+               [Test] // UploadString (string, string)
+               public void UploadString1_Address_Null ()
+               {
+                       WebClient wc = new WebClient ();
+                       try {
+                               wc.UploadString ((string) null, (string) 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 ("address", ex.ParamName, "#6");
+                       }
+               }
+
+               [Test] // UploadString (string, string)
+               public void UploadString1_Address_SchemeNotSupported ()
+               {
+                       WebClient wc = new WebClient ();
+                       try {
+                               wc.UploadString ("tp://scheme.notsupported", "abc");
+                               Assert.Fail ("#1");
+                       } catch (WebException ex) {
+                               // An error occurred performing a WebClient request
+                               Assert.AreEqual (typeof (WebException), ex.GetType (), "#2");
+                               Assert.IsNotNull (ex.InnerException, "#3");
+                               Assert.IsNotNull (ex.Message, "#4");
+                               Assert.IsNull (ex.Response, "#5");
+                               Assert.AreEqual (WebExceptionStatus.UnknownError, ex.Status, "#6");
+
+                               // The URI prefix is not recognized
+                               Exception inner = ex.InnerException;
+                               Assert.AreEqual (typeof (NotSupportedException), inner.GetType (), "#7");
+                               Assert.IsNull (inner.InnerException, "#8");
+                               Assert.IsNotNull (inner.Message, "#9");
+                       }
+               }
+
+               [Test] // UploadString (string, string)
+               public void UploadString1_Data_Null ()
+               {
+                       WebClient wc = new WebClient ();
+                       try {
+                               wc.UploadString ("tp://scheme.notsupported", (string) 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 ("data", ex.ParamName, "#6");
+                       }
+               }
+
+               [Test] // UploadString (Uri, string)
+               public void UploadString2_Address_Null ()
+               {
+                       WebClient wc = new WebClient ();
+                       try {
+                               wc.UploadString ((Uri) null, (string) 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 ("address", ex.ParamName, "#6");
+                       }
+               }
+
+               [Test] // UploadString (Uri, string)
+               public void UploadString2_Address_SchemeNotSupported ()
+               {
+                       WebClient wc = new WebClient ();
+                       try {
+                               wc.UploadString (new Uri ("tp://scheme.notsupported"), "abc");
+                               Assert.Fail ("#1");
+                       } catch (WebException ex) {
+                               // An error occurred performing a WebClient request
+                               Assert.AreEqual (typeof (WebException), ex.GetType (), "#2");
+                               Assert.IsNotNull (ex.InnerException, "#3");
+                               Assert.IsNotNull (ex.Message, "#4");
+                               Assert.IsNull (ex.Response, "#5");
+                               Assert.AreEqual (WebExceptionStatus.UnknownError, ex.Status, "#6");
+
+                               // The URI prefix is not recognized
+                               Exception inner = ex.InnerException;
+                               Assert.AreEqual (typeof (NotSupportedException), inner.GetType (), "#7");
+                               Assert.IsNull (inner.InnerException, "#8");
+                               Assert.IsNotNull (inner.Message, "#9");
+                       }
+               }
+
+               [Test] // UploadString (Uri, string)
+               public void UploadString2_Data_Null ()
+               {
+                       WebClient wc = new WebClient ();
+                       try {
+                               wc.UploadString (new Uri ("tp://scheme.notsupported"),
+                                       (string) 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 ("data", ex.ParamName, "#6");
+                       }
+               }
+
+               [Test] // UploadString (string, string, string)
+               public void UploadString3_Address_Null ()
+               {
+                       WebClient wc = new WebClient ();
+                       try {
+                               wc.UploadString ((string) null, (string) null,
+                                       (string) 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 ("address", ex.ParamName, "#6");
+                       }
+               }
+
+               [Test] // UploadString (string, string, string)
+               public void UploadString3_Address_SchemeNotSupported ()
+               {
+                       WebClient wc = new WebClient ();
+                       try {
+                               wc.UploadString ("tp://scheme.notsupported",
+                                       "POST", "abc");
+                               Assert.Fail ("#1");
+                       } catch (WebException ex) {
+                               // An error occurred performing a WebClient request
+                               Assert.AreEqual (typeof (WebException), ex.GetType (), "#2");
+                               Assert.IsNotNull (ex.InnerException, "#3");
+                               Assert.IsNotNull (ex.Message, "#4");
+                               Assert.IsNull (ex.Response, "#5");
+                               Assert.AreEqual (WebExceptionStatus.UnknownError, ex.Status, "#6");
+
+                               // The URI prefix is not recognized
+                               Exception inner = ex.InnerException;
+                               Assert.AreEqual (typeof (NotSupportedException), inner.GetType (), "#7");
+                               Assert.IsNull (inner.InnerException, "#8");
+                               Assert.IsNotNull (inner.Message, "#9");
+                       }
+               }
+
+               [Test] // UploadString (string, string, string)
+               public void UploadString3_Data_Null ()
+               {
+                       WebClient wc = new WebClient ();
+                       try {
+                               wc.UploadString ("tp://scheme.notsupported",
+                                       "POST", (string) 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 ("data", ex.ParamName, "#6");
+                       }
+               }
+
+               [Test] // UploadString (Uri, string, string)
+               public void UploadString4_Address_Null ()
+               {
+                       WebClient wc = new WebClient ();
+                       try {
+                               wc.UploadString ((Uri) null, (string) null,
+                                       (string) 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 ("address", ex.ParamName, "#6");
+                       }
+               }
+
+               [Test] // UploadString (Uri, string, string)
+               public void UploadString4_Address_SchemeNotSupported ()
+               {
+                       WebClient wc = new WebClient ();
+                       try {
+                               wc.UploadString (new Uri ("tp://scheme.notsupported"),
+                                       "POST", "abc");
+                               Assert.Fail ("#1");
+                       } catch (WebException ex) {
+                               // An error occurred performing a WebClient request
+                               Assert.AreEqual (typeof (WebException), ex.GetType (), "#2");
+                               Assert.IsNotNull (ex.InnerException, "#3");
+                               Assert.IsNotNull (ex.Message, "#4");
+                               Assert.IsNull (ex.Response, "#5");
+                               Assert.AreEqual (WebExceptionStatus.UnknownError, ex.Status, "#6");
+
+                               // The URI prefix is not recognized
+                               Exception inner = ex.InnerException;
+                               Assert.AreEqual (typeof (NotSupportedException), inner.GetType (), "#7");
+                               Assert.IsNull (inner.InnerException, "#8");
+                               Assert.IsNotNull (inner.Message, "#9");
+                       }
+               }
+
+               [Test] // UploadString (Uri, string, string)
+               public void UploadString4_Data_Null ()
+               {
+                       WebClient wc = new WebClient ();
+                       try {
+                               wc.UploadString (new Uri ("tp://scheme.notsupported"),
+                                       "POST", (string) 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 ("data", ex.ParamName, "#6");
+                       }
+               }
+#endif
+
+               [Test] // UploadValues (string, NameValueCollection)
+               public void UploadValues1_Address_Null ()
+               {
+                       WebClient wc = new WebClient ();
+                       try {
+                               wc.UploadValues ((string) null, new NameValueCollection ());
+                               Assert.Fail ("#1");
+#if NET_2_0
+                       } 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 ("address", ex.ParamName, "#6");
+                       }
+#else
+                       } catch (WebException ex) {
+                               // An error occurred performing a WebClient request
+                               Assert.AreEqual (typeof (WebException), ex.GetType (), "#2");
+                               Assert.IsNotNull (ex.Message, "#3");
+                               Assert.IsNull (ex.Response, "#4");
+                               Assert.AreEqual (WebExceptionStatus.UnknownError, ex.Status, "#5");
+
+                               ArgumentNullException inner = ex.InnerException
+                                       as ArgumentNullException;
+                               Assert.IsNotNull (inner, "#6");
+                               Assert.AreEqual (typeof (ArgumentNullException), inner.GetType (), "#7");
+                               Assert.IsNull (inner.InnerException, "#8");
+                               Assert.IsNotNull (inner.Message, "#9");
+                               Assert.IsNotNull (inner.ParamName, "#10");
+                               Assert.AreEqual ("uriString", inner.ParamName, "#11");
+                       }
+#endif
+               }
+
+               [Test] // UploadValues (string, NameValueCollection)
+               public void UploadValues1_Address_SchemeNotSupported ()
+               {
+                       WebClient wc = new WebClient ();
+                       try {
+                               wc.UploadValues ("tp://scheme.notsupported",
+                                       new NameValueCollection ());
+                               Assert.Fail ("#1");
+                       } catch (WebException ex) {
+                               // An error occurred performing a WebClient request
+                               Assert.AreEqual (typeof (WebException), ex.GetType (), "#2");
+                               Assert.IsNotNull (ex.InnerException, "#3");
+                               Assert.IsNotNull (ex.Message, "#4");
+                               Assert.IsNull (ex.Response, "#5");
+                               Assert.AreEqual (WebExceptionStatus.UnknownError, ex.Status, "#6");
+
+                               // The URI prefix is not recognized
+                               Exception inner = ex.InnerException;
+                               Assert.AreEqual (typeof (NotSupportedException), inner.GetType (), "#7");
+                               Assert.IsNull (inner.InnerException, "#8");
+                               Assert.IsNotNull (inner.Message, "#9");
+                       }
+               }
+
+               [Test] // UploadValues (string, NameValueCollection)
+#if ONLY_1_1
+               [Category ("NotDotNet")] // On MS, there's a nested NotImplementedException
+#endif
+               public void UploadValues1_Data_Null ()
+               {
+                       WebClient wc = new WebClient ();
+                       try {
+                               wc.UploadValues ("http://www.mono-project.com",
+                                       (NameValueCollection) null);
+                               Assert.Fail ("#1");
+#if NET_2_0
+                       } 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 ("data", ex.ParamName, "#6");
+                       }
+#else
+                       } catch (WebException ex) {
+                               // An error occurred performing a WebClient request
+                               Assert.AreEqual (typeof (WebException), ex.GetType (), "#2");
+                               Assert.IsNotNull (ex.Message, "#3");
+                               Assert.IsNull (ex.Response, "#4");
+                               Assert.AreEqual (WebExceptionStatus.UnknownError, ex.Status, "#5");
+
+                               ArgumentNullException inner = ex.InnerException
+                                       as ArgumentNullException;
+                               Assert.IsNotNull (inner, "#6");
+                               Assert.AreEqual (typeof (ArgumentNullException), inner.GetType (), "#7");
+                               Assert.IsNull (inner.InnerException, "#8");
+                               Assert.IsNotNull (inner.Message, "#9");
+                               Assert.IsNotNull (inner.ParamName, "#10");
+                               Assert.AreEqual ("data", inner.ParamName, "#11");
+                       }
+#endif
+               }
+
+#if NET_2_0
+               [Test] // UploadValues (Uri, NameValueCollection)
+               public void UploadValues2_Address_Null ()
+               {
+                       WebClient wc = new WebClient ();
+                       try {
+                               wc.UploadValues ((Uri) null, new NameValueCollection ());
+                               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 ("address", ex.ParamName, "#6");
+                       }
+               }
+
+               [Test] // UploadValues (Uri, NameValueCollection)
+               public void UploadValues2_Address_SchemeNotSupported ()
+               {
+                       WebClient wc = new WebClient ();
+                       try {
+                               wc.UploadValues (new Uri ("tp://scheme.notsupported"),
+                                       new NameValueCollection ());
+                               Assert.Fail ("#1");
+                       } catch (WebException ex) {
+                               // An error occurred performing a WebClient request
+                               Assert.AreEqual (typeof (WebException), ex.GetType (), "#2");
+                               Assert.IsNotNull (ex.InnerException, "#3");
+                               Assert.IsNotNull (ex.Message, "#4");
+                               Assert.IsNull (ex.Response, "#5");
+                               Assert.AreEqual (WebExceptionStatus.UnknownError, ex.Status, "#6");
+
+                               // The URI prefix is not recognized
+                               Exception inner = ex.InnerException;
+                               Assert.AreEqual (typeof (NotSupportedException), inner.GetType (), "#7");
+                               Assert.IsNull (inner.InnerException, "#8");
+                               Assert.IsNotNull (inner.Message, "#9");
+                       }
+               }
+
+               [Test] // UploadValues (Uri, NameValueCollection)
+               public void UploadValues2_Data_Null ()
+               {
+                       WebClient wc = new WebClient ();
+                       try {
+                               wc.UploadValues (new Uri ("http://www.mono-project.com"),
+                                       (NameValueCollection) 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 ("data", ex.ParamName, "#6");
+                       }
+               }
+#endif
+
+               [Test] // UploadValues (string, string, NameValueCollection)
+               public void UploadValues3_Address_Null ()
+               {
+                       WebClient wc = new WebClient ();
+                       try {
+                               wc.UploadValues ((string) null, "POST",
+                                       new NameValueCollection ());
+                               Assert.Fail ("#1");
+#if NET_2_0
+                       } 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 ("address", ex.ParamName, "#6");
+                       }
+#else
+                       } catch (WebException ex) {
+                               // An error occurred performing a WebClient request
+                               Assert.AreEqual (typeof (WebException), ex.GetType (), "#2");
+                               Assert.IsNotNull (ex.Message, "#3");
+                               Assert.IsNull (ex.Response, "#4");
+                               Assert.AreEqual (WebExceptionStatus.UnknownError, ex.Status, "#5");
+
+                               ArgumentNullException inner = ex.InnerException
+                                       as ArgumentNullException;
+                               Assert.IsNotNull (inner, "#6");
+                               Assert.AreEqual (typeof (ArgumentNullException), inner.GetType (), "#7");
+                               Assert.IsNull (inner.InnerException, "#8");
+                               Assert.IsNotNull (inner.Message, "#9");
+                               Assert.IsNotNull (inner.ParamName, "#10");
+                               Assert.AreEqual ("uriString", inner.ParamName, "#11");
+                       }
+#endif
+               }
+
+               [Test] // UploadValues (string, string, NameValueCollection)
+               public void UploadValues3_Address_SchemeNotSupported ()
+               {
+                       WebClient wc = new WebClient ();
+                       try {
+                               wc.UploadValues ("tp://scheme.notsupported",
+                                       "POST", new NameValueCollection ());
+                               Assert.Fail ("#1");
+                       } catch (WebException ex) {
+                               // An error occurred performing a WebClient request
+                               Assert.AreEqual (typeof (WebException), ex.GetType (), "#2");
+                               Assert.IsNotNull (ex.InnerException, "#3");
+                               Assert.IsNotNull (ex.Message, "#4");
+                               Assert.IsNull (ex.Response, "#5");
+                               Assert.AreEqual (WebExceptionStatus.UnknownError, ex.Status, "#6");
+
+                               // The URI prefix is not recognized
+                               Exception inner = ex.InnerException;
+                               Assert.AreEqual (typeof (NotSupportedException), inner.GetType (), "#7");
+                               Assert.IsNull (inner.InnerException, "#8");
+                               Assert.IsNotNull (inner.Message, "#9");
+                       }
+               }
+
+               [Test] // UploadValues (string, string, NameValueCollection)
+#if ONLY_1_1
+               [Category ("NotDotNet")] // On MS, there's a nested NotImplementedException
+#endif
+               public void UploadValues3_Data_Null ()
+               {
+                       WebClient wc = new WebClient ();
+                       try {
+                               wc.UploadValues ("http://www.mono-project.com",
+                                       "POST", (NameValueCollection) null);
+                               Assert.Fail ("#1");
+#if NET_2_0
+                       } 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 ("data", ex.ParamName, "#6");
+                       }
+#else
+                       } catch (WebException ex) {
+                               // An error occurred performing a WebClient request
+                               Assert.AreEqual (typeof (WebException), ex.GetType (), "#2");
+                               Assert.IsNotNull (ex.Message, "#3");
+                               Assert.IsNull (ex.Response, "#4");
+                               Assert.AreEqual (WebExceptionStatus.UnknownError, ex.Status, "#5");
+
+                               ArgumentNullException inner = ex.InnerException
+                                       as ArgumentNullException;
+                               Assert.IsNotNull (inner, "#6");
+                               Assert.AreEqual (typeof (ArgumentNullException), inner.GetType (), "#7");
+                               Assert.IsNull (inner.InnerException, "#8");
+                               Assert.IsNotNull (inner.Message, "#9");
+                               Assert.IsNotNull (inner.ParamName, "#10");
+                               Assert.AreEqual ("data", inner.ParamName, "#11");
+                       }
+#endif
+               }
+
+#if NET_2_0
+               [Test] // UploadValues (Uri, string, NameValueCollection)
+               public void UploadValues4_Address_Null ()
+               {
+                       WebClient wc = new WebClient ();
+                       try {
+                               wc.UploadValues ((Uri) null, "POST",
+                                       new NameValueCollection ());
+                               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 ("address", ex.ParamName, "#6");
+                       }
+               }
+
+               [Test] // UploadValues (Uri, string, NameValueCollection)
+               public void UploadValues4_Address_SchemeNotSupported ()
+               {
+                       WebClient wc = new WebClient ();
+                       try {
+                               wc.UploadValues (new Uri ("tp://scheme.notsupported"),
+                                       "POST", new NameValueCollection ());
+                               Assert.Fail ("#1");
+                       } catch (WebException ex) {
+                               // An error occurred performing a WebClient request
+                               Assert.AreEqual (typeof (WebException), ex.GetType (), "#2");
+                               Assert.IsNotNull (ex.InnerException, "#3");
+                               Assert.IsNotNull (ex.Message, "#4");
+                               Assert.IsNull (ex.Response, "#5");
+                               Assert.AreEqual (WebExceptionStatus.UnknownError, ex.Status, "#6");
+
+                               // The URI prefix is not recognized
+                               Exception inner = ex.InnerException;
+                               Assert.AreEqual (typeof (NotSupportedException), inner.GetType (), "#7");
+                               Assert.IsNull (inner.InnerException, "#8");
+                               Assert.IsNotNull (inner.Message, "#9");
+                       }
+               }
+
+               [Test] // UploadValues (Uri, string, NameValueCollection)
+               public void UploadValues4_Data_Null ()
+               {
+                       WebClient wc = new WebClient ();
+                       try {
+                               wc.UploadValues (new Uri ("http://www.mono-project.com"),
+                                       "POST", (NameValueCollection) 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 ("data", ex.ParamName, "#6");
+                       }
                }
+#endif
        }
-       
 }