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; }
74 get { return messages.Count; }
77 public LoggerVerbosity Verbosity { get { return LoggerVerbosity.Normal; } set { } }
79 public string Parameters { get { return null; } set { } }
81 public void Initialize (IEventSource eventSource)
83 eventSource.MessageRaised += new BuildMessageEventHandler (MessageHandler);
84 eventSource.ErrorRaised += new BuildErrorEventHandler (AllMessagesHandler);
85 eventSource.WarningRaised += new BuildWarningEventHandler(AllMessagesHandler);
86 eventSource.TargetStarted += delegate { target_started++; };
87 eventSource.TargetFinished += delegate { target_finished++; };
88 eventSource.TaskStarted += delegate { task_started++; };
89 eventSource.TaskFinished += delegate { task_finished++; };
90 eventSource.ProjectStarted += delegate(object sender, ProjectStartedEventArgs args) { project_started++; Console.WriteLine ("Project started: {0}", args.ProjectFile); };
91 eventSource.ProjectFinished += delegate (object sender, ProjectFinishedEventArgs args) { project_finished++; Console.WriteLine ("Project finished: {0}", args.ProjectFile); };
92 eventSource.BuildStarted += delegate { build_started ++; };
93 eventSource.BuildFinished += delegate { build_finished++; };
96 public void Shutdown ()
100 private void MessageHandler (object sender, BuildMessageEventArgs args)
102 if (args.Message.StartsWith ("Using") == false)
104 all_messages.Add (args);
107 private void AllMessagesHandler (object sender, BuildEventArgs args)
109 all_messages.Add (args);
112 public int NormalMessageCount {
115 int count = 0, i = 0;
116 while (i ++ < messages.Count)
117 if (messages [i - 1].Importance == MessageImportance.Normal)
123 public int CheckHead (string text, MessageImportance importance)
126 return CheckHead (text, importance, out actual_msg);
129 public int CheckHead (string text, MessageImportance importance, out string actual_msg)
131 BuildMessageEventArgs actual = null;
132 actual_msg = String.Empty;
134 if (messages.Count > 0) {
135 //find first @importance level message
137 while (++i < messages.Count && messages [i].Importance != importance)
140 if (i < messages.Count) {
141 actual = messages [i];
142 messages.RemoveAt (i);
148 actual_msg = actual.Message;
149 if (actual != null && text == actual_msg && importance == actual.Importance)
156 // 1 - msg not found,
157 public int CheckAny (string text, MessageImportance importance)
159 if (messages.Count <= 0)
163 for (int i = 0; i < messages.Count; i ++) {
164 BuildMessageEventArgs arg = messages [i];
165 if (text == arg.Message && importance == arg.Importance) {
175 messages.RemoveAt (foundAt);
179 public void DumpMessages ()
181 foreach (BuildEventArgs arg in all_messages)
182 Console.WriteLine ("Msg: {0}", arg.Message);
185 public void CheckLoggedMessageHead (string expected, string id)
188 int result = CheckHead (expected, MessageImportance.Normal, out actual);
190 Assert.Fail ("{0}: Expected message '{1}' was not emitted.", id, expected);
192 Assert.AreEqual (expected, actual, id);
195 public void CheckLoggedAny (string expected, MessageImportance importance, string id)
197 int res = CheckAny (expected, importance);
199 Assert.Fail ("{0}: Expected message '{1}' was not emitted.", id, expected);