In class/Microsoft.Build.Engine:
[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> all_messages;
12                 int target_started, target_finished;
13                 int task_started, task_finished;
14
15                 public TestMessageLogger ()
16                 {
17                         messages = new List<BuildMessageEventArgs> ();
18                         all_messages = new List<BuildEventArgs> ();
19                 }
20
21                 public int TargetFinished
22                 {
23                         get { return target_finished; }
24                         set { target_finished = value; }
25                 }
26
27                 public int TargetStarted
28                 {
29                         get { return target_started; }
30                         set { target_started = value; }
31                 }
32
33                 public int TaskStarted
34                 {
35                         get { return task_started; }
36                         set { task_started = value; }
37                 }
38
39                 public int TaskFinished
40                 {
41                         get { return task_finished; }
42                         set { task_finished = value; }
43                 }
44
45                 public int Count
46                 {
47                         get { return messages.Count; }
48                 }
49
50                 public LoggerVerbosity Verbosity { get { return LoggerVerbosity.Normal; } set { } }
51
52                 public string Parameters { get { return null; } set { } }
53
54                 public void Initialize (IEventSource eventSource)
55                 {
56                         eventSource.MessageRaised += new BuildMessageEventHandler (MessageHandler);
57                         eventSource.ErrorRaised += new BuildErrorEventHandler (AllMessagesHandler);
58                         eventSource.WarningRaised += new BuildWarningEventHandler(AllMessagesHandler);
59                         eventSource.TargetStarted += delegate { target_started++; };
60                         eventSource.TargetFinished += delegate { target_finished++; };
61                         eventSource.TaskStarted += delegate { task_started++; };
62                         eventSource.TaskFinished += delegate { task_finished++; };
63                 }
64
65                 public void Shutdown ()
66                 {
67                 }
68
69                 private void MessageHandler (object sender, BuildMessageEventArgs args)
70                 {
71                         if (args.Message.StartsWith ("Using") == false)
72                                 messages.Add (args);
73                         all_messages.Add (args);
74                 }
75
76                 private void AllMessagesHandler (object sender, BuildEventArgs args)
77                 {
78                         all_messages.Add (args);
79                 }
80
81                 public int NormalMessageCount {
82                         get
83                         {
84                                 int count = 0, i = 0;
85                                 while (i ++ < messages.Count)
86                                         if (messages [i - 1].Importance == MessageImportance.Normal)
87                                                 count++;
88                                 return count;
89                         }
90                 }
91
92                 public int CheckHead (string text, MessageImportance importance)
93                 {
94                         string actual_msg;
95                         return CheckHead (text, importance, out actual_msg);
96                 }
97
98                 public int CheckHead (string text, MessageImportance importance, out string actual_msg)
99                 {
100                         BuildMessageEventArgs actual;
101                         actual_msg = String.Empty;
102
103                         if (messages.Count > 0) {
104                                 //find first @importance level message
105                                 int i = 0;
106                                 while (messages [i].Importance != importance && i < messages.Count)
107                                         i++;
108
109                                 actual = messages [i];
110                                 messages.RemoveAt (i);
111                         } else
112                                 return 1;
113
114                         actual_msg = actual.Message;
115                         if (text == actual.Message && importance == actual.Importance)
116                                 return 0;
117                         else
118                                 return 2;
119                 }
120
121                 //return: 0 - found
122                 //              1 - msg not found,
123                 public int CheckAny (string text, MessageImportance importance)
124                 {
125                         if (messages.Count <= 0)
126                                 return 1;
127
128                         int foundAt = -1;
129                         for (int i = 0; i < messages.Count; i ++) {
130                                 BuildMessageEventArgs arg = messages [i];
131                                 if (text == arg.Message && importance == arg.Importance) {
132                                         foundAt = i;
133                                         break;
134                                 }
135                         }
136
137                         if (foundAt < 0)
138                                 return 1;
139
140                         //found
141                         messages.RemoveAt (foundAt);
142                         return 0;
143                 }
144
145                 public void DumpMessages ()
146                 {
147                         foreach (BuildEventArgs arg in all_messages)
148                                 Console.WriteLine ("Msg: {0}", arg.Message);
149                 }
150         }
151
152 }