1 package org.microemu.app.util;
2
3 import org.microemu.Injected;
4 import org.microemu.log.Logger;
5 import org.microemu.log.LoggingEvent;
6
7 import junit.framework.TestCase;
8
9 public class MIDletOutputStreamRedirectorTest extends TestCase {
10
11 EventCatureLoggerAppender capture;
12
13 protected void setUp() throws Exception {
14 super.setUp();
15 capture = new EventCatureLoggerAppender();
16 Logger.addAppender(capture);
17 }
18
19 protected void tearDown() throws Exception {
20 super.tearDown();
21 Logger.removeAppender(capture);
22 }
23
24 private void verify(LoggingEvent event, StackTraceElement b4call, final String message) {
25 assertNotNull("got event", event);
26 assertEquals(message, event.getMessage());
27 StackTraceElement ste = event.getLocation();
28 assertNotNull("Has location info", ste);
29 assertEquals("MethodName", b4call.getMethodName(), ste.getMethodName());
30 assertEquals("ClassName", b4call.getClassName(), ste.getClassName());
31 assertEquals("LineNumber", b4call.getLineNumber() + 1, ste.getLineNumber());
32 }
33
34 public void testRedirectStack() throws Exception {
35 final String message = "Test text";
36 capture.clearLastEvent();
37
38 StackTraceElement b4call = new Throwable().getStackTrace()[0];
39 Injected.out.println(message);
40
41 verify(capture.getLastEvent(), b4call, message);
42
43 b4call = new Throwable().getStackTrace()[0];
44 Injected.out.print(message + "\n");
45
46 verify(capture.getLastEvent(), b4call, message);
47 }
48
49 private class LogginThread extends Thread {
50
51 private boolean success = false;
52
53 public void run() {
54 try {
55 final String message = "Test text from LogginThread";
56 capture.clearLastEvent();
57
58 StackTraceElement b4call = new Throwable().getStackTrace()[0];
59 Injected.out.println(message);
60
61 verify(capture.getLastEvent(), b4call, message);
62
63 b4call = new Throwable().getStackTrace()[0];
64 Injected.out.print(message + "\n");
65
66 verify(capture.getLastEvent(), b4call, message);
67
68 success = true;
69
70 } finally {
71 synchronized (this) {
72 notifyAll();
73 }
74 }
75 }
76
77 }
78
79 public void testRedirectStackFromThread() throws Exception {
80 LogginThread thread = new LogginThread();
81 synchronized (thread) {
82 thread.start();
83 thread.wait();
84 }
85 assertTrue("Log from Thread", thread.success);
86 }
87
88 private class MIDletInternlaLogger {
89
90 public void debug(String message) {
91 Injected.out.println(message);
92 }
93
94 public void error(String message) {
95 Injected.out.println(message);
96 }
97
98 public void log(String message) {
99 Injected.out.println(message);
100 }
101 }
102
103 public void testMIDletInternalLogger() throws Exception {
104 final String message = "Test text";
105 capture.clearLastEvent();
106 MIDletInternlaLogger log = new MIDletInternlaLogger();
107
108 StackTraceElement b4call = new Throwable().getStackTrace()[0];
109 log.debug(message);
110
111 verify(capture.getLastEvent(), b4call, message);
112
113 b4call = new Throwable().getStackTrace()[0];
114 log.error(message);
115
116 verify(capture.getLastEvent(), b4call, message);
117
118 b4call = new Throwable().getStackTrace()[0];
119 log.log(message);
120
121 verify(capture.getLastEvent(), b4call, message);
122
123 }
124
125 private class SubClass {
126
127 void runTests(MIDletInternlaLogger log) {
128 final String message = "Sub class Test text";
129 StackTraceElement b4call = new Throwable().getStackTrace()[0];
130 log.debug(message);
131
132 verify(capture.getLastEvent(), b4call, message);
133
134 b4call = new Throwable().getStackTrace()[0];
135 log.error(message);
136
137 verify(capture.getLastEvent(), b4call, message);
138
139 b4call = new Throwable().getStackTrace()[0];
140 log.log(message);
141
142 verify(capture.getLastEvent(), b4call, message);
143 }
144 }
145
146 public void testMIDletInternalLoggerSubClass() throws Exception {
147 capture.clearLastEvent();
148 MIDletInternlaLogger log = new MIDletInternlaLogger();
149 SubClass subtest = new SubClass();
150 subtest.runTests(log);
151 }
152
153 private static class StaticLogger {
154
155 public static void debug(String message) {
156 Injected.out.println(message);
157 }
158
159 public static void error(String message) {
160 Injected.out.println(message);
161 }
162
163 public static void log(String message) {
164 Injected.out.println(message);
165 }
166 }
167
168 public void testMIDletInternalStaticLogger() throws Exception {
169 final String message = "Test text Static logger";
170 capture.clearLastEvent();
171
172 StackTraceElement b4call = new Throwable().getStackTrace()[0];
173 StaticLogger.debug(message);
174
175 verify(capture.getLastEvent(), b4call, message);
176
177 b4call = new Throwable().getStackTrace()[0];
178 StaticLogger.error(message);
179
180 verify(capture.getLastEvent(), b4call, message);
181
182 b4call = new Throwable().getStackTrace()[0];
183 StaticLogger.log(message);
184
185 verify(capture.getLastEvent(), b4call, message);
186
187 }
188
189 private class LogginThreadStaticLogger extends Thread {
190
191 private boolean success = false;
192
193 public void run() {
194 try {
195 final String message = "Test text from LogginThread";
196 capture.clearLastEvent();
197
198 StackTraceElement b4call = new Throwable().getStackTrace()[0];
199 StaticLogger.debug(message);
200
201 verify(capture.getLastEvent(), b4call, message);
202
203 b4call = new Throwable().getStackTrace()[0];
204 StaticLogger.log(message + "\n");
205
206 verify(capture.getLastEvent(), b4call, message);
207
208 success = true;
209
210 } finally {
211 synchronized (this) {
212 notifyAll();
213 }
214 }
215 }
216
217 }
218
219 public void testMIDletInternalStaticLoggerFromThread() throws Exception {
220 LogginThreadStaticLogger thread = new LogginThreadStaticLogger();
221 synchronized (thread) {
222 thread.start();
223 thread.wait();
224 }
225 assertTrue("Log from Thread", thread.success);
226 }
227
228 }
229