1 using Microsoft.Build.Framework;
2 using System.Collections;
4 using System.Collections.Generic;
7 namespace MonoTests.Microsoft.Build.Tasks
9 internal class TestMessageLogger : ILogger
11 List<BuildMessageEventArgs> messages;
12 List<BuildEventArgs> all_messages;
13 int target_started, target_finished;
14 int task_started, task_finished;
15 int project_started, project_finished;
16 int build_started, build_finished;
18 public int BuildStarted
20 get { return build_started; }
21 set { build_started = value; }
24 public int BuildFinished
26 get { return build_finished; }
27 set { build_finished = value; }
30 public TestMessageLogger ()
32 messages = new List<BuildMessageEventArgs> ();
33 all_messages = new List<BuildEventArgs> ();
36 public int ProjectStarted
38 get { return project_started; }
39 set { project_started = value; }
42 public int ProjectFinished
44 get { return project_finished; }
45 set { project_finished = value; }
48 public int TargetFinished
50 get { return target_finished; }
51 set { target_finished = value; }
54 public int TargetStarted
56 get { return target_started; }
57 set { target_started = value; }
60 public int TaskStarted
62 get { return task_started; }
63 set { task_started = value; }
66 public int TaskFinished
68 get { return task_finished; }
69 set { task_finished = value; }
72 public int WarningsCount { get; set; }
73 public int ErrorsCount { get; set; }
77 get { return messages.Count; }
80 public LoggerVerbosity Verbosity { get { return LoggerVerbosity.Normal; } set { } }
82 public string Parameters { get { return null; } set { } }
84 public void Initialize (IEventSource eventSource)
86 eventSource.MessageRaised += new BuildMessageEventHandler (MessageHandler);
88 eventSource.ErrorRaised += new BuildErrorEventHandler (AllMessagesHandler);
89 eventSource.ErrorRaised += (e,o) => ErrorsCount ++;
91 eventSource.WarningRaised += new BuildWarningEventHandler(AllMessagesHandler);
92 eventSource.WarningRaised += (e,o) => WarningsCount ++;
94 eventSource.TargetStarted += delegate { target_started++; };
95 eventSource.TargetFinished += delegate { target_finished++; };
96 eventSource.TaskStarted += delegate { task_started++; };
97 eventSource.TaskFinished += delegate { task_finished++; };
98 eventSource.ProjectStarted += delegate(object sender, ProjectStartedEventArgs args) { project_started++; Console.WriteLine ("Project started: {0}", args.ProjectFile); };
99 eventSource.ProjectFinished += delegate (object sender, ProjectFinishedEventArgs args) { project_finished++; Console.WriteLine ("Project finished: {0}", args.ProjectFile); };
100 eventSource.BuildStarted += delegate { build_started ++; };
101 eventSource.BuildFinished += delegate { build_finished++; };
104 public void Shutdown ()
108 private void MessageHandler (object sender, BuildMessageEventArgs args)
110 if (args.Message.StartsWith ("Using") == false)
112 all_messages.Add (args);
115 private void AllMessagesHandler (object sender, BuildEventArgs args)
117 all_messages.Add (args);
120 public int NormalMessageCount {
123 int count = 0, i = 0;
124 while (i ++ < messages.Count)
125 if (messages [i - 1].Importance == MessageImportance.Normal)
131 public int CheckHead (string text, MessageImportance importance)
134 return CheckHead (text, importance, out actual_msg);
137 public int CheckHead (string text, MessageImportance importance, out string actual_msg)
139 BuildMessageEventArgs actual = null;
140 actual_msg = String.Empty;
142 if (messages.Count > 0) {
143 //find first @importance level message
145 while (++i < messages.Count && messages [i].Importance != importance)
148 if (i < messages.Count) {
149 actual = messages [i];
150 messages.RemoveAt (i);
156 actual_msg = actual.Message;
157 if (actual != null && text == actual_msg && importance == actual.Importance)
164 // 1 - msg not found,
165 public int CheckAny (string text, MessageImportance importance)
167 if (messages.Count <= 0)
171 for (int i = 0; i < messages.Count; i ++) {
172 BuildMessageEventArgs arg = messages [i];
173 if (text == arg.Message && importance == arg.Importance) {
183 messages.RemoveAt (foundAt);
187 public void DumpMessages ()
189 foreach (BuildEventArgs arg in all_messages)
190 Console.WriteLine ("Msg: {0}", arg.Message);
193 public void CheckLoggedMessageHead (string expected, string id)
196 int result = CheckHead (expected, MessageImportance.Normal, out actual);
198 Assert.Fail ("{0}: Expected message '{1}' was not emitted.", id, expected);
200 Assert.AreEqual (expected, actual, id);
203 public void CheckLoggedAny (string expected, MessageImportance importance, string id)
205 int res = CheckAny (expected, importance);
207 Assert.Fail ("{0}: Expected message '{1}' was not emitted.", id, expected);