* roottypes.cs: Rename from tree.cs.
[mono.git] / mcs / class / Mono.Posix / Test / Mono.Unix.Native / StdlibTest.cs
1 //
2 // StdlibTest.cs:
3 //      NUnit Test Cases for Mono.Unix.Native.Stdlib
4 //
5 // Authors:
6 //   Jonathan Pryor (jonpryor@vt.edu)
7 //
8 // (C) 2004-2005 Jonathan Pryor
9 // 
10
11 using System;
12 using System.Text;
13
14 using NUnit.Framework;
15
16 using Mono.Unix.Native;
17
18 namespace MonoTests.Mono.Unix.Native {
19
20         [TestFixture]
21         public class StdlibTest
22         {
23                 private class SignalTest {
24                         public int signalReceived;
25
26                         public void Handler (int sn)
27                         {
28                                 signalReceived = sn;
29                         }
30                 }
31
32                 // [Test]
33 #if !NET_2_0
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")]
40 #endif
41                 public void Signal ()
42                 {
43                         SignalTest st = new SignalTest ();
44
45                         // Insert handler
46                         SignalHandler oh = Stdlib.signal (Signum.SIGURG, 
47                                         new SignalHandler (st.Handler));
48
49                         st.signalReceived = ~NativeConvert.FromSignum (Signum.SIGURG);
50
51                         // Send signal
52                         Stdlib.raise (Signum.SIGURG);
53
54                         Assert.IsTrue (
55                                 NativeConvert.ToSignum (st.signalReceived) == Signum.SIGURG,
56                                         "#IH: Signal handler not invoked for SIGURG");
57
58                         // Reset old signal
59                         Stdlib.signal (Signum.SIGURG, oh);
60
61                         st.signalReceived = NativeConvert.FromSignum (Signum.SIGUSR1);
62                         Stdlib.raise (Signum.SIGURG);
63
64                         Assert.IsFalse (NativeConvert.ToSignum (st.signalReceived) == Signum.SIGURG,
65                                         "#IH: Signal Handler invoked when it should have been removed!");
66                 }
67
68                 [Test]
69                 // MSVCRT.DLL doesn't export snprintf(3).
70                 [Category ("NotDotNet")]
71                 [Category ("NotWorking")]
72                 public void Snprintf ()
73                 {
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);
83                         string fmt = 
84 @"this is another test:
85           char: '%c'
86          short: %i
87            int: %i
88           long: %li
89          float: %g
90         double: %g" + "\n";
91                 Stdlib.snprintf (s, fmt, 'a', (short) 16, 32, (long) 64, (double) 32.23, 64.46);
92                         string expected = 
93 @"this is another test:
94           char: 'a'
95          short: 16
96            int: 32
97           long: 64
98          float: 32.23
99         double: 64.46" + "\n";
100                         Assert.AreEqual (s.ToString(), expected,
101                                         "#SNPF: printf of many builtin types failed");
102                 }
103         }
104 }
105