2002-09-19 Nick Drochak <ndrochak@gol.com>
[mono.git] / mcs / class / System / Test / System.Diagnostics / TraceTest.cs
1 //
2 // TraceTest.cs - NUnit Test Cases for System.Diagnostics.Trace
3 //
4 // Jonathan Pryor (jonpryor@vt.edu)
5 //
6 // (C) Jonathan Pryor
7 // 
8
9 // We want tracing enabled, so...
10 #define TRACE
11
12 using NUnit.Framework;
13 using System;
14 using System.IO;
15 using System.Diagnostics;
16
17 namespace MonoTests.System.Diagnostics {
18
19         public class TraceTest : TestCase {
20     
21                 private StringWriter buffer;
22                 private TraceListener listener;
23
24                 public TraceTest () 
25                         : base ("System.Diagnostics.Trace testsuite")
26                 {
27                 }
28
29                 public TraceTest (string name)
30                         : base(name)
31                 {
32                 }
33
34                 protected override void SetUp ()
35                 {
36                         // We don't want to deal with the default listener, which can send the
37                         // output to various places (Debug stream, Console.Out, ...)
38                         // Trace.Listeners.Remove ("Default");
39
40                         buffer = new StringWriter ();
41                         listener = new TextWriterTraceListener (buffer, "TestOutput");
42                         Trace.Listeners.Clear ();
43                         Trace.Listeners.Add (listener);
44                         Trace.AutoFlush = true;
45
46                 }
47
48                 protected override void TearDown ()
49                 {
50                         // Trace.Listeners.Add (new DefaultTraceListener ());
51                         Trace.Listeners.Remove (listener);
52                 }
53
54                 public static ITest Suite {
55                         get { 
56                                 return new TestSuite (typeof (TraceTest)); 
57                         }
58                 }
59
60                 // Make sure that when we get the output we expect....
61                 public void TestTracing ()
62                 {
63                         string value =  
64                                 "Entering Main" + Environment.NewLine +
65                                 "Exiting Main" + Environment.NewLine;
66
67                         Trace.WriteLine ("Entering Main");
68                         Trace.WriteLine ("Exiting Main");
69
70                         AssertEquals ("#Tr01", value, buffer.ToString ());
71                 }
72
73                 // Make sure we get the output we expect in the presence of indenting...
74                 public void TestIndent ()
75                 {
76                         string value =  
77                                 "List of errors:" + Environment.NewLine +
78                                 "    Error 1: File not found" + Environment.NewLine +
79                                 "    Error 2: Directory not found" + Environment.NewLine +
80                                 "End of list of errors" + Environment.NewLine;
81
82                         Trace.WriteLine ("List of errors:");
83                         Trace.Indent ();
84                         Trace.WriteLine ("Error 1: File not found");
85                         Trace.WriteLine ("Error 2: Directory not found");
86                         Trace.Unindent ();
87                         Trace.WriteLine ("End of list of errors");
88
89                         AssertEquals ("#In01", value, buffer.ToString());
90                 }
91
92                 // Make sure that TraceListener properties (IndentLevel, IndentSize) are
93                 // modified when the corresponding Trace properties are changed.
94                 public void TestAddedTraceListenerProperties ()
95                 {
96                         TraceListener t1 = new TextWriterTraceListener (Console.Out);
97                         TraceListener t2 = new TextWriterTraceListener (Console.Error);
98                         Trace.Listeners.Add(t1);
99                         Trace.Listeners.Add(t2);
100
101                         const int ExpectedSize = 5;
102                         const int ExpectedLevel = 2;
103
104                         Trace.IndentSize = ExpectedSize;
105                         Trace.IndentLevel = ExpectedLevel;
106
107                         foreach (TraceListener t in Trace.Listeners) {
108                                 string ids = "#TATLP-S-" + t.Name;
109                                 string idl = "#TATLP-L-" + t.Name;
110                                 AssertEquals (ids, ExpectedSize, t.IndentSize);
111                                 AssertEquals (idl, ExpectedLevel, t.IndentLevel);
112                         }
113
114                         Trace.Listeners.Remove(t1);
115                         Trace.Listeners.Remove(t2);
116                 }
117
118                 // Make sure that the TraceListener properties (IndentLevel, IndentSize)
119                 // are properly modified when the TraceListener is added to the
120                 // collection.
121                 public void TestListeners_Add_Values()
122                 {
123                         const int ExpectedLevel = 5;
124                         const int ExpectedSize = 3;
125                         Trace.IndentLevel = ExpectedLevel;
126                         Trace.IndentSize = ExpectedSize;
127                         TraceListener tl = new TextWriterTraceListener(Console.Out);
128
129                         tl.IndentLevel = 2*ExpectedLevel;
130                         tl.IndentSize = 2*ExpectedSize;
131
132                         Trace.Listeners.Add(tl);
133
134                         // Assert that the listener we added has been set to the correct indent
135                         // level.
136                         AssertEquals ("#LATL-L", ExpectedLevel, tl.IndentLevel);
137                         AssertEquals ("#LATL-S", ExpectedSize, tl.IndentSize);
138
139                         // Assert that all listeners in the collection have the same level.
140                         foreach (TraceListener t in Trace.Listeners)
141                         {
142                                 string idl = "#LATL-L:" + t.Name;
143                                 string ids = "#LATL-S:" + t.Name;
144                                 AssertEquals(idl, ExpectedLevel, t.IndentLevel);
145                                 AssertEquals(ids, ExpectedSize, t.IndentSize);
146                         }
147                 }
148
149                 // IndentSize, IndentLevel are thread-static
150         }
151 }
152