Mono.Unix/UnixPathTest.cs
Mono.Unix/UnixSignalTest.cs
Mono.Unix/UnixUserTest.cs
+Mono.Unix.Android/TestHelper.cs
Mono.Unix.Native/RealTimeSignumTests.cs
Mono.Unix.Native/StdlibTest.cs
//
// Non-generated exports
//
-
+#if !MONODROID
[DllImport (LIB, EntryPoint="Mono_Posix_FromRealTimeSignum")]
private static extern int FromRealTimeSignum (Int32 offset, out Int32 rval);
-
+#endif
// convert a realtime signal to os signal
public static int FromRealTimeSignum (RealTimeSignum sig)
{
--- /dev/null
+namespace Mono.Unix.Android
+{
+ // Another version of this class is used by the Xamarin.Android test suite
+ // It is here to keep the test code #ifdef free as much as possible
+ public class TestHelper
+ {
+ public static bool CanUseRealTimeSignals ()
+ {
+ return true;
+ }
+ }
+}
\ No newline at end of file
using System.Text;
using System.Threading;
using Mono.Unix;
+using Mono.Unix.Android;
using Mono.Unix.Native;
namespace MonoTests.Mono.Unix.Native {
[ExpectedException (typeof (ArgumentOutOfRangeException))]
public void TestRealTimeOutOfRange ()
{
+ if (!TestHelper.CanUseRealTimeSignals ())
+ return;
RealTimeSignum rts = new RealTimeSignum (int.MaxValue);
}
[ExpectedException (typeof (ArgumentOutOfRangeException))]
public void TestRealTimeSignumNegativeOffset ()
{
+ if (!TestHelper.CanUseRealTimeSignals ())
+ return;
RealTimeSignum rts1 = new RealTimeSignum (-1);
}
[Test]
public void TestRTSignalEquality ()
{
+ if (!TestHelper.CanUseRealTimeSignals ())
+ return;
RealTimeSignum rts1 = new RealTimeSignum (0);
RealTimeSignum rts2 = new RealTimeSignum (0);
Assert.That (rts1 == rts2, Is.True);
[Test]
public void TestRTSignalInequality ()
{
+ if (!TestHelper.CanUseRealTimeSignals ())
+ return;
RealTimeSignum rts1 = new RealTimeSignum (0);
RealTimeSignum rts2 = new RealTimeSignum (1);
Assert.That (rts1 == rts2, Is.False);
[Test]
public void TestRTSignalGetHashCodeEquality ()
{
+ if (!TestHelper.CanUseRealTimeSignals ())
+ return;
RealTimeSignum rts1 = new RealTimeSignum (0);
RealTimeSignum rts2 = new RealTimeSignum (0);
Assert.That (rts1.GetHashCode (), Is.EqualTo(rts2.GetHashCode ()));
[Test]
public void TestRTSignalGetHashCodeInequality ()
{
+ if (!TestHelper.CanUseRealTimeSignals ())
+ return;
RealTimeSignum rts1 = new RealTimeSignum (0);
RealTimeSignum rts2 = new RealTimeSignum (1);
Assert.That (rts1.GetHashCode (), Is.Not.EqualTo(rts2.GetHashCode ()));
[Test]
public void TestIsRTSignalPropertyForRTSignum ()
{
+ if (!TestHelper.CanUseRealTimeSignals ())
+ return;
UnixSignal signal1 = new UnixSignal(new RealTimeSignum (0));
Assert.That (signal1.IsRealTimeSignal, Is.True);
}
[Test]
public void TestIsRTSignalPropertyForSignum ()
{
+ if (!TestHelper.CanUseRealTimeSignals ())
+ return;
UnixSignal signal1 = new UnixSignal (Signum.SIGSEGV);
Assert.That (signal1.IsRealTimeSignal, Is.False);
}
using System.Text;
using System.Threading;
using Mono.Unix;
+using Mono.Unix.Android;
using Mono.Unix.Native;
#if !MONODROID
namespace NUnit.Framework.SyntaxHelpers { class Dummy {} }
[Category ("NotOnMac")]
public void TestRealTimeCstor ()
{
+ if (!TestHelper.CanUseRealTimeSignals ())
+ return;
RealTimeSignum rts = new RealTimeSignum (0);
using (UnixSignal s = new UnixSignal (rts))
{
[Category ("NotOnMac")]
public void TestSignumPropertyThrows ()
{
+ if (!TestHelper.CanUseRealTimeSignals ())
+ return;
UnixSignal signal1 = new UnixSignal (new RealTimeSignum (0));
Signum s = signal1.Signum;
}
[Category ("NotOnMac")]
public void TestRealTimeSignumProperty ()
{
+ if (!TestHelper.CanUseRealTimeSignals ())
+ return;
RealTimeSignum rts = new RealTimeSignum (0);
UnixSignal signal1 = new UnixSignal (rts);
Assert.That (signal1.RealTimeSignum, Is.EqualTo (rts));
[Category ("NotOnMac")]
public void TestRealTimePropertyThrows ()
{
+ if (!TestHelper.CanUseRealTimeSignals ())
+ return;
UnixSignal signal1 = new UnixSignal (Signum.SIGSEGV);
RealTimeSignum s = signal1.RealTimeSignum;
}
[Category ("NotOnMac")]
public void TestRaiseRTMINSignal ()
{
+ if (!TestHelper.CanUseRealTimeSignals ())
+ return;
RealTimeSignum rts = new RealTimeSignum (0);
using (UnixSignal signal = new UnixSignal (rts))
{
[Category ("NotOnMac")]
public void TestRaiseRTMINPlusOneSignal ()
{
+ if (!TestHelper.CanUseRealTimeSignals ())
+ return;
/*this number is a guestimate, but it's ok*/
for (int i = 1; i < 10; ++i) {
RealTimeSignum rts = new RealTimeSignum (i);
[Category ("NotOnMac")]
public void TestCanRegisterRTSignalMultipleTimes ()
{
+ if (!TestHelper.CanUseRealTimeSignals ())
+ return;
/*this number is a guestimate, but it's ok*/
for (int i = 1; i < 10; ++i) {
RealTimeSignum rts = new RealTimeSignum (i);
* we assume that the XPG version is present.
*/
-#ifdef _GNU_SOURCE
+#ifdef _GNU_SOURCE && !PLATFORM_ANDROID
#define mph_min(x,y) ((x) <= (y) ? (x) : (y))
/* If you pass an invalid errno value to glibc 2.3.2's strerror_r, you get
mph_return_if_size_t_overflow (n);
/* first, check for valid errnum */
+#if PLATFORM_ANDROID
+ /* Android NDK defines _GNU_SOURCE but strerror_r follows the XSI semantics
+ * not the GNU one. XSI version returns an integer, as opposed to the GNU one
+ * which returns pointer to the buffer.
+ */
+ if (strerror_r (errnum, ebuf, sizeof(ebuf)) == -1) {
+ /* XSI strerror_r will return -1 if errno is set, but if we leave the value
+ * alone it breaks Mono.Posix StdioFileStream tests, so we'll ignore the value
+ * and set errno as below
+ */
+ errno = EINVAL;
+ return -1;
+ }
+ r = ebuf;
+#else
r = strerror_r (errnum, ebuf, sizeof(ebuf));
+#endif
+ if (!r) {
+ errno = EINVAL;
+ return -1;
+ }
len = strlen (r);
if (r == ebuf ||