3 // NUnit Test Cases for Mono.Unix.Native.Stdlib
6 // Jonathan Pryor (jonpryor@vt.edu)
8 // (C) 2004-2005 Jonathan Pryor
14 using NUnit.Framework;
16 using Mono.Unix.Native;
18 namespace MonoTests.Mono.Unix.Native {
21 public class StdlibTest
23 private class SignalTest {
24 public int signalReceived;
26 public void Handler (int sn)
34 // .NET 1.1 marshals delegates as Stdcall functions, while signal(3)
35 // expects a Cdecl function. Result: stack corruption.
36 // DO NOT USE Stdlib.signal under .NET 1.1!
37 // .NET 2.0 allows us to specify how delegates should be marshaled, so
38 // this isn't an issue there.
39 [Category ("NotDotNet")]
43 SignalTest st = new SignalTest ();
46 SignalHandler oh = Stdlib.signal (Signum.SIGURG,
47 new SignalHandler (st.Handler));
49 st.signalReceived = ~NativeConvert.FromSignum (Signum.SIGURG);
52 Stdlib.raise (Signum.SIGURG);
55 NativeConvert.ToSignum (st.signalReceived) == Signum.SIGURG,
56 "#IH: Signal handler not invoked for SIGURG");
59 Stdlib.signal (Signum.SIGURG, oh);
61 st.signalReceived = NativeConvert.FromSignum (Signum.SIGUSR1);
62 Stdlib.raise (Signum.SIGURG);
64 Assert.IsFalse (NativeConvert.ToSignum (st.signalReceived) == Signum.SIGURG,
65 "#IH: Signal Handler invoked when it should have been removed!");
69 // MSVCRT.DLL doesn't export snprintf(3).
70 [Category ("NotDotNet")]
71 [Category ("NotWorking")]
72 public void Snprintf ()
74 StringBuilder s = new StringBuilder (1000);
75 Stdlib.snprintf (s, "hello, %s world!\n");
76 Assert.AreEqual (s.ToString(), "hello, %s world!\n",
77 "#SNPF: string not echoed");
78 s = new StringBuilder (1000);
79 Stdlib.snprintf (s, "yet another %s test", "simple");
80 Assert.AreEqual (s.ToString(), "yet another simple test",
81 "#SNPF: string argument not printed");
82 s = new StringBuilder (1000);
84 @"this is another test:
91 Stdlib.snprintf (s, fmt, 'a', (short) 16, 32, (long) 64, (double) 32.23, 64.46);
93 @"this is another test:
99 double: 64.46" + "\n";
100 Assert.AreEqual (s.ToString(), expected,
101 "#SNPF: printf of many builtin types failed");