You've already forked linux-packaging-mono
Imported Upstream version 4.3.2.467
Former-commit-id: 9c2cb47f45fa221e661ab616387c9cda183f283d
This commit is contained in:
@@ -1054,7 +1054,6 @@ namespace MonoTests.System.IO
|
||||
Assert.AreEqual (TempFolder + DSC + "ToString.Test", info.ToString ());
|
||||
}
|
||||
|
||||
#if NET_4_0
|
||||
[Test]
|
||||
public void EnumerateFileSystemInfosTest ()
|
||||
{
|
||||
@@ -1069,7 +1068,6 @@ namespace MonoTests.System.IO
|
||||
l.Sort ();
|
||||
Assert.AreEqual ("1,2,a,b", string.Join (",", l), "#1");
|
||||
}
|
||||
#endif
|
||||
|
||||
#if !MOBILE
|
||||
[Test]
|
||||
|
@@ -69,13 +69,11 @@ public class DirectoryTest
|
||||
Assert.AreEqual (afile, files0 [0], "#2");
|
||||
Assert.AreEqual (bfile, files0 [1], "#3");
|
||||
|
||||
#if NET_4_0
|
||||
var files1 = new List<string> (Directory.EnumerateFiles (TempFolder, "*.src")).ToArray ();
|
||||
Array.Sort (files1);
|
||||
Assert.AreEqual (2, files1.Length, "#1.b");
|
||||
Assert.AreEqual (afile, files1 [0], "#2.b");
|
||||
Assert.AreEqual (bfile, files1 [1], "#3.b");
|
||||
#endif
|
||||
|
||||
var files2 = Directory.GetFileSystemEntries (TempFolder, "*.src");
|
||||
Array.Sort (files2);
|
||||
@@ -84,14 +82,12 @@ public class DirectoryTest
|
||||
Assert.AreEqual (bfile, files2 [1], "#3.c");
|
||||
Assert.AreEqual (cdir, files2 [2], "#4.c");
|
||||
|
||||
#if NET_4_0
|
||||
var files3 = new List<string> (Directory.EnumerateFileSystemEntries (TempFolder, "*.src")).ToArray ();
|
||||
Array.Sort (files3);
|
||||
Assert.AreEqual (3, files3.Length, "#1.d");
|
||||
Assert.AreEqual (afile, files3 [0], "#2.d");
|
||||
Assert.AreEqual (bfile, files3 [1], "#3.d");
|
||||
Assert.AreEqual (cdir, files3 [2], "#4.d");
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
[Test]
|
||||
|
@@ -16,6 +16,7 @@ using System.IO;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using Microsoft.Win32.SafeHandles;
|
||||
|
||||
namespace MonoTests.System.IO
|
||||
{
|
||||
@@ -1531,15 +1532,23 @@ namespace MonoTests.System.IO
|
||||
static IAsyncResult DoBeginWrite(Stream stream, ManualResetEvent mre, byte[] RandomBuffer)
|
||||
{
|
||||
return stream.BeginWrite (RandomBuffer, 0, RandomBuffer.Length, ar => {
|
||||
stream.EndWrite (ar);
|
||||
IAsyncResult begin_write_recursive_ares;
|
||||
|
||||
// we don't supply an ManualResetEvent so this will throw an NRE on the second run
|
||||
// which nunit-console will ignore (but other test runners don't like that)
|
||||
if (mre == null)
|
||||
return;
|
||||
try {
|
||||
stream.EndWrite (ar);
|
||||
|
||||
DoBeginWrite (stream, null, RandomBuffer).AsyncWaitHandle.WaitOne ();
|
||||
mre.Set ();
|
||||
// we don't supply an ManualResetEvent so this will throw an NRE on the second run
|
||||
// which nunit-console will ignore (but other test runners don't like that)
|
||||
if (mre == null)
|
||||
return;
|
||||
|
||||
begin_write_recursive_ares = DoBeginWrite (stream, null, RandomBuffer);
|
||||
begin_write_recursive_ares.AsyncWaitHandle.WaitOne ();
|
||||
|
||||
mre.Set ();
|
||||
} catch (ObjectDisposedException e) {
|
||||
Console.WriteLine ("stream was disposed: {0}", e);
|
||||
}
|
||||
}, null);
|
||||
}
|
||||
|
||||
@@ -1548,12 +1557,19 @@ namespace MonoTests.System.IO
|
||||
{
|
||||
string path = TempFolder + Path.DirectorySeparatorChar + "temp";
|
||||
DeleteFile (path);
|
||||
|
||||
using (FileStream stream = new FileStream (path, FileMode.OpenOrCreate, FileAccess.Write)) {
|
||||
var mre = new ManualResetEvent (false);
|
||||
var RandomBuffer = new byte[1024];
|
||||
DoBeginWrite (stream, mre, RandomBuffer);
|
||||
Assert.IsTrue (mre.WaitOne (5000), "#1");
|
||||
|
||||
IAsyncResult begin_write_ares = null;
|
||||
|
||||
try {
|
||||
using (FileStream stream = new FileStream (path, FileMode.OpenOrCreate, FileAccess.Write)) {
|
||||
var mre = new ManualResetEvent (false);
|
||||
var RandomBuffer = new byte[1024];
|
||||
begin_write_ares = DoBeginWrite (stream, mre, RandomBuffer);
|
||||
Assert.IsTrue (mre.WaitOne (5000), "#1");
|
||||
}
|
||||
} finally {
|
||||
if (begin_write_ares != null)
|
||||
begin_write_ares.AsyncWaitHandle.WaitOne ();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1644,6 +1660,25 @@ namespace MonoTests.System.IO
|
||||
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void OpenCharDeviceRepeatedly ()
|
||||
{
|
||||
// https://bugzilla.xamarin.com/show_bug.cgi?id=38408
|
||||
try {
|
||||
using (var f = new FileStream ("/dev/zero", FileMode.Open))
|
||||
{
|
||||
}
|
||||
} catch (FileNotFoundException) {
|
||||
// Only run this test on platforms where /dev/zero exists
|
||||
Assert.Ignore();
|
||||
}
|
||||
|
||||
// this shouldn't throw
|
||||
using (var g = new FileStream ("/dev/zero", FileMode.Open))
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
#if !MOBILE
|
||||
[Test]
|
||||
public void WriteWithExposedHandle ()
|
||||
@@ -1678,6 +1713,17 @@ namespace MonoTests.System.IO
|
||||
DeleteFile (path);
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Ctor_InvalidSafeHandle ()
|
||||
{
|
||||
var sf = new SafeFileHandle (IntPtr.Zero, true);
|
||||
try {
|
||||
new FileStream (sf, FileAccess.ReadWrite);
|
||||
Assert.Fail ("#1");
|
||||
} catch (ArgumentException) {
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
@@ -334,39 +334,44 @@ namespace MonoTests.System.IO
|
||||
|
||||
wh.Close ();
|
||||
}
|
||||
|
||||
|
||||
[Test]
|
||||
public void BeginReadIsBlockingNextRead ()
|
||||
{
|
||||
byte[] readBytes = new byte[5];
|
||||
byte[] readBytes2 = new byte[3];
|
||||
var wh = new ManualResetEvent (false);
|
||||
var end = new ManualResetEvent (false);
|
||||
ManualResetEvent begin_read_unblock = new ManualResetEvent (false);
|
||||
ManualResetEvent begin_read_blocking = new ManualResetEvent (false);
|
||||
Task begin_read_task = null;
|
||||
|
||||
using (var testStream = new SignaledMemoryStream (testStreamData, wh)) {
|
||||
var res = testStream.BeginRead (readBytes, 0, 5, null, null);
|
||||
try {
|
||||
using (var testStream = new SignaledMemoryStream (testStreamData, begin_read_unblock)) {
|
||||
IAsyncResult begin_read_1_ares = testStream.BeginRead (readBytes, 0, 5, null, null);
|
||||
|
||||
bool blocking = true;
|
||||
ThreadPool.QueueUserWorkItem (l => {
|
||||
var res2 = testStream.BeginRead (readBytes2, 0, 3, null, null);
|
||||
blocking = false;
|
||||
Assert.IsTrue (res2.AsyncWaitHandle.WaitOne (2000), "#10");
|
||||
Assert.IsTrue (res2.IsCompleted, "#11");
|
||||
Assert.AreEqual (3, testStream.EndRead (res2), "#12");
|
||||
Assert.AreEqual (95, readBytes2[0], "#13");
|
||||
end.Set ();
|
||||
});
|
||||
begin_read_task = Task.Factory.StartNew (() => {
|
||||
IAsyncResult begin_read_2_ares = testStream.BeginRead (readBytes2, 0, 3, null, null);
|
||||
begin_read_blocking.Set ();
|
||||
|
||||
Assert.IsFalse (res.IsCompleted, "#1");
|
||||
Thread.Sleep (500); // Lame but don't know how to wait for another BeginRead which does not return
|
||||
Assert.IsTrue (blocking, "#2");
|
||||
Assert.IsTrue (begin_read_2_ares.AsyncWaitHandle.WaitOne (2000), "#10");
|
||||
Assert.IsTrue (begin_read_2_ares.IsCompleted, "#11");
|
||||
Assert.AreEqual (3, testStream.EndRead (begin_read_2_ares), "#12");
|
||||
Assert.AreEqual (95, readBytes2[0], "#13");
|
||||
});
|
||||
|
||||
wh.Set ();
|
||||
Assert.IsTrue (res.AsyncWaitHandle.WaitOne (2000), "#3");
|
||||
Assert.IsTrue (res.IsCompleted, "#4");
|
||||
Assert.AreEqual (5, testStream.EndRead (res), "#5");
|
||||
Assert.IsTrue (end.WaitOne (2000), "#6");
|
||||
Assert.AreEqual (100, readBytes[0], "#7");
|
||||
Assert.IsFalse (begin_read_1_ares.IsCompleted, "#1");
|
||||
Assert.IsFalse (begin_read_blocking.WaitOne (500), "#2");
|
||||
|
||||
begin_read_unblock.Set ();
|
||||
|
||||
Assert.IsTrue (begin_read_1_ares.AsyncWaitHandle.WaitOne (2000), "#3");
|
||||
Assert.IsTrue (begin_read_1_ares.IsCompleted, "#4");
|
||||
Assert.AreEqual (5, testStream.EndRead (begin_read_1_ares), "#5");
|
||||
Assert.IsTrue (begin_read_task.Wait (2000), "#6");
|
||||
Assert.AreEqual (100, readBytes[0], "#7");
|
||||
}
|
||||
} finally {
|
||||
if (begin_read_task != null)
|
||||
begin_read_task.Wait ();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -395,34 +400,38 @@ namespace MonoTests.System.IO
|
||||
{
|
||||
byte[] readBytes = new byte[5];
|
||||
byte[] readBytes2 = new byte[3] { 1, 2, 3 };
|
||||
var wh = new ManualResetEvent (false);
|
||||
var end = new ManualResetEvent (false);
|
||||
ManualResetEvent begin_read_unblock = new ManualResetEvent (false);
|
||||
ManualResetEvent begin_write_blocking = new ManualResetEvent (false);
|
||||
Task begin_write_task = null;
|
||||
|
||||
using (var testStream = new SignaledMemoryStream (testStreamData, wh)) {
|
||||
var res = testStream.BeginRead (readBytes, 0, 5, null, null);
|
||||
try {
|
||||
using (MemoryStream stream = new SignaledMemoryStream (testStreamData, begin_read_unblock)) {
|
||||
IAsyncResult begin_read_ares = stream.BeginRead (readBytes, 0, 5, null, null);
|
||||
|
||||
bool blocking = true;
|
||||
ThreadPool.QueueUserWorkItem (l => {
|
||||
var res2 = testStream.BeginWrite (readBytes2, 0, 3, null, null);
|
||||
blocking = false;
|
||||
Assert.IsTrue (res2.AsyncWaitHandle.WaitOne (2000), "#10");
|
||||
Assert.IsTrue (res2.IsCompleted, "#11");
|
||||
testStream.EndWrite (res2);
|
||||
end.Set ();
|
||||
});
|
||||
begin_write_task = Task.Factory.StartNew (() => {
|
||||
var begin_write_ares = stream.BeginWrite (readBytes2, 0, 3, null, null);
|
||||
begin_write_blocking.Set ();
|
||||
Assert.IsTrue (begin_write_ares.AsyncWaitHandle.WaitOne (2000), "#10");
|
||||
Assert.IsTrue (begin_write_ares.IsCompleted, "#11");
|
||||
stream.EndWrite (begin_write_ares);
|
||||
});
|
||||
|
||||
Assert.IsFalse (res.IsCompleted, "#1");
|
||||
Thread.Sleep (500); // Lame but don't know how to wait for another BeginWrite which does not return
|
||||
Assert.IsTrue (blocking, "#2");
|
||||
Assert.IsFalse (begin_read_ares.IsCompleted, "#1");
|
||||
Assert.IsFalse (begin_write_blocking.WaitOne (500), "#2");
|
||||
|
||||
wh.Set ();
|
||||
Assert.IsTrue (res.AsyncWaitHandle.WaitOne (2000), "#3");
|
||||
Assert.IsTrue (res.IsCompleted, "#4");
|
||||
Assert.AreEqual (5, testStream.EndRead (res), "#5");
|
||||
Assert.IsTrue (end.WaitOne (2000), "#6");
|
||||
begin_read_unblock.Set ();
|
||||
|
||||
Assert.IsTrue (begin_read_ares.AsyncWaitHandle.WaitOne (2000), "#3");
|
||||
Assert.IsTrue (begin_read_ares.IsCompleted, "#4");
|
||||
Assert.AreEqual (5, stream.EndRead (begin_read_ares), "#5");
|
||||
Assert.IsTrue (begin_write_task.Wait (2000), "#6");
|
||||
}
|
||||
} finally {
|
||||
if (begin_write_task != null)
|
||||
begin_write_task.Wait ();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
[Test]
|
||||
public void BeginWrite ()
|
||||
{
|
||||
|
@@ -201,9 +201,7 @@ namespace MonoTests.System.IO
|
||||
expected = "one" + DSC + "two" + DSC;
|
||||
Assert.AreEqual (expected, testPath, "Combine #07");
|
||||
|
||||
#if NET_4_0
|
||||
Assert.AreEqual ("a", Path.Combine (new [] { "a", "" }), "Combine #08");
|
||||
#endif
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -1242,7 +1240,6 @@ namespace MonoTests.System.IO
|
||||
}
|
||||
}
|
||||
|
||||
#if NET_4_0
|
||||
string Concat (string sep, params string [] parms)
|
||||
{
|
||||
return String.Join (sep, parms);
|
||||
@@ -1382,7 +1379,6 @@ namespace MonoTests.System.IO
|
||||
|
||||
Assert.AreEqual ("", Path.Combine ("", "", "", "", ""), "#A4");
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user