1 using Microsoft.Build.Framework;
2 using System.Collections;
4 using System.Collections.Generic;
8 namespace MonoTests.Microsoft.Build.Tasks
10 internal class TestMessageLogger : ILogger
12 List<BuildMessageEventArgs> messages;
13 List<BuildEventArgs> all_messages;
14 int target_started, target_finished;
15 int task_started, task_finished;
16 int project_started, project_finished;
17 int build_started, build_finished;
19 public int BuildStarted
21 get { return build_started; }
22 set { build_started = value; }
25 public int BuildFinished
27 get { return build_finished; }
28 set { build_finished = value; }
31 public TestMessageLogger ()
33 messages = new List<BuildMessageEventArgs> ();
34 all_messages = new List<BuildEventArgs> ();
37 public int ProjectStarted
39 get { return project_started; }
40 set { project_started = value; }
43 public int ProjectFinished
45 get { return project_finished; }
46 set { project_finished = value; }
49 public int TargetFinished
51 get { return target_finished; }
52 set { target_finished = value; }
55 public int TargetStarted
57 get { return target_started; }
58 set { target_started = value; }
61 public int TaskStarted
63 get { return task_started; }
64 set { task_started = value; }
67 public int TaskFinished
69 get { return task_finished; }
70 set { task_finished = value; }
73 public int WarningsCount { get; set; }
74 public int ErrorsCount { get; set; }
78 get { return messages.Count; }
81 public LoggerVerbosity Verbosity { get { return LoggerVerbosity.Normal; } set { } }
83 public string Parameters { get { return null; } set { } }
85 public void Initialize (IEventSource eventSource)
87 eventSource.MessageRaised += new BuildMessageEventHandler (MessageHandler);
89 eventSource.ErrorRaised += new BuildErrorEventHandler (AllMessagesHandler);
90 eventSource.ErrorRaised += (e,o) => ErrorsCount ++;
92 eventSource.WarningRaised += new BuildWarningEventHandler(AllMessagesHandler);
93 eventSource.WarningRaised += (e,o) => WarningsCount ++;
95 eventSource.TargetStarted += delegate { target_started++; };
96 eventSource.TargetFinished += delegate { target_finished++; };
97 eventSource.TaskStarted += delegate { task_started++; };
98 eventSource.TaskFinished += delegate { task_finished++; };
99 eventSource.ProjectStarted += delegate(object sender, ProjectStartedEventArgs args) { project_started++; };
100 eventSource.ProjectFinished += delegate (object sender, ProjectFinishedEventArgs args) { project_finished++; };
101 eventSource.BuildStarted += delegate { build_started ++; };
102 eventSource.BuildFinished += delegate { build_finished++; };
105 public void Shutdown ()
109 private void MessageHandler (object sender, BuildMessageEventArgs args)
111 if (args.Message.StartsWith ("Using") == false)
113 all_messages.Add (args);
116 private void AllMessagesHandler (object sender, BuildEventArgs args)
118 all_messages.Add (args);
121 public int NormalMessageCount {
124 int count = 0, i = 0;
125 while (i ++ < messages.Count)
126 if (messages [i - 1].Importance == MessageImportance.Normal)
132 public int WarningMessageCount {
134 int count = 0, i = 0;
135 while (i++ < messages.Count) {
136 var importance = messages [i - 1].Importance;
137 if (importance == MessageImportance.High)
144 public int CheckHead (string text, MessageImportance importance)
147 return CheckHead (text, importance, out actual_msg);
150 public int CheckHead (string text, MessageImportance importance, out string actual_msg)
152 BuildMessageEventArgs actual = null;
153 actual_msg = String.Empty;
155 if (messages.Count > 0) {
156 //find first @importance level message
158 while (++i < messages.Count && messages [i].Importance != importance)
161 if (i < messages.Count) {
162 actual = messages [i];
163 messages.RemoveAt (i);
169 actual_msg = actual.Message;
170 if (actual != null && text == actual_msg && importance == actual.Importance)
177 // 1 - msg not found,
178 public int CheckAny (string text, MessageImportance importance)
180 if (messages.Count <= 0)
184 for (int i = 0; i < messages.Count; i ++) {
185 BuildMessageEventArgs arg = messages [i];
186 if (text == arg.Message && importance == arg.Importance) {
196 messages.RemoveAt (foundAt);
200 public void DumpMessages ()
202 foreach (BuildEventArgs arg in all_messages)
203 Console.WriteLine ("Msg: {0}", arg.Message);
206 public void DumpMessages (StringBuilder sb)
208 foreach (BuildEventArgs arg in all_messages)
209 sb.AppendLine (string.Format ("Msg: {0}", arg.Message));
212 public void CheckLoggedMessageHead (string expected, string id)
215 int result = CheckHead (expected, MessageImportance.Normal, out actual);
217 Assert.Fail ("{0}: Expected message '{1}' was not emitted.", id, expected);
219 Assert.AreEqual (expected, actual, id);
222 public void CheckLoggedAny (string expected, MessageImportance importance, string id)
224 int res = CheckAny (expected, importance);
226 Assert.Fail ("{0}: Expected message '{1}' was not emitted.", id, expected);