* TestMessageLogger.cs: Emit debug messages to stderr.
[mono.git] / mcs / class / Microsoft.Build.Tasks / Test / Microsoft.Build.Tasks / TestMessageLogger.cs
1 using Microsoft.Build.Framework;
2 using System.Collections;
3 using System;
4 using System.Collections.Generic;
5
6 namespace MonoTests.Microsoft.Build.Tasks
7 {
8         internal class TestMessageLogger : ILogger
9         {
10                 List<BuildMessageEventArgs> messages;
11                 List<BuildEventArgs> errorsAndWarnings;
12
13                 public TestMessageLogger ()
14                 {
15                         messages = new List<BuildMessageEventArgs> ();
16                         errorsAndWarnings = new List<BuildEventArgs> ();
17                 }
18
19                 public int Count
20                 {
21                         get { return messages.Count; }
22                 }
23
24                 public LoggerVerbosity Verbosity { get { return LoggerVerbosity.Normal; } set { } }
25
26                 public string Parameters { get { return null; } set { } }
27
28                 public void Initialize (IEventSource eventSource)
29                 {
30                         eventSource.MessageRaised += new BuildMessageEventHandler (MessageHandler);
31                         eventSource.ErrorRaised += new BuildErrorEventHandler (ErrorHandler);
32                         eventSource.WarningRaised += new BuildWarningEventHandler (WarningHandler);
33                 }
34
35                 public void Shutdown ()
36                 {
37                 }
38
39                 private void MessageHandler (object sender, BuildMessageEventArgs args)
40                 {
41                         if (args.Message.StartsWith ("Using") == false)
42                                 messages.Add (args);
43                 }
44
45                 private void ErrorHandler (object sender, BuildEventArgs args)
46                 {
47                         errorsAndWarnings.Add (args);
48                 }
49
50                 private void WarningHandler (object sender, BuildEventArgs args)
51                 {
52                         errorsAndWarnings.Add (args);
53                 }
54
55                 public int CheckHead (string text, MessageImportance importance)
56                 {
57                         string actual_msg;
58                         return CheckHead (text, importance, out actual_msg);
59                 }
60
61                 public int CheckHead (string text, MessageImportance importance, out string actual_msg)
62                 {
63                         BuildMessageEventArgs actual;
64                         actual_msg = String.Empty;
65
66                         if (messages.Count > 0) {
67                                 actual = messages [0];
68                                 messages.RemoveAt (0);
69                         } else
70                                 return 1;
71
72                         actual_msg = actual.Message;
73                         if (text == actual.Message && importance == actual.Importance)
74                                 return 0;
75                         else
76                                 return 2;
77                 }
78
79                 //return: 0 - found
80                 //              1 - msg not found,
81                 public int CheckAny (string text, MessageImportance importance)
82                 {
83                         if (messages.Count <= 0)
84                                 return 1;
85
86                         int foundAt = -1;
87                         for (int i = 0; i < messages.Count; i ++) {
88                                 BuildMessageEventArgs arg = messages [i];
89                                 if (text == arg.Message && importance == arg.Importance) {
90                                         foundAt = i;
91                                         break;
92                                 }
93                         }
94
95                         if (foundAt < 0)
96                                 return 1;
97
98                         //found
99                         messages.RemoveAt (foundAt);
100                         return 0;
101                 }
102
103                 public void DumpMessages ()
104                 {
105                         foreach (BuildEventArgs arg in errorsAndWarnings)
106                                 Console.Error.WriteLine ("{0} {1}", (arg is BuildErrorEventArgs) ? "Err:" : "Warn:", arg.Message);
107
108                         foreach (BuildMessageEventArgs arg in messages)
109                                 Console.Error.WriteLine ("Msg: {0}", arg.Message);
110                 }
111         }
112
113 }