Develop and Download Open Source Software

Browse Subversion Repository

Contents of /NeoFT/TestLauncher/TestEntryListView.cs

Parent Directory Parent Directory | Revision Log Revision Log


Revision 104 - (show annotations) (download)
Mon Oct 14 11:05:33 2013 UTC (10 years, 5 months ago) by c477
File size: 11923 byte(s)
ParamsReaderの修正、テストコード
1 using System;
2 using System.Collections.Generic;
3 using System.ComponentModel;
4 using System.Diagnostics;
5 using System.Linq;
6 using System.Text;
7 using System.Windows.Forms;
8 using nft.framework;
9 using System.Collections;
10 using System.Drawing;
11
12 namespace nft.test
13 {
14 public class TestEntryListView : ListView
15 {
16 protected ListViewItemComparer columnComparer = new ListViewItemComparer();
17 protected int resultColumn;
18 protected int stateColumn;
19 public ToolStripLabel statusLabel = null;
20 protected bool ignoreStatusUpdate = false;
21 private static readonly string EntryStartLogText = "vvvvvv Start of {0} vvvvvv";
22 private ImageList iconList;
23 private static readonly string EntryEndLogText = "^^^^^^ End of {0} ^^^^^^";
24
25 public TestEntryListView() {
26 InitListView();
27 InitImageList();
28 }
29
30 private void InitListView() {
31 View = View.Details;
32 Sorting = SortOrder.Descending;
33 OwnerDraw = true;
34 ListViewItemSorter = columnComparer;
35 CheckBoxes = true;
36 AddColumn("Name",100);
37 AddColumn("ID", -2);
38 AddColumn("Class", -2);
39 AddColumn("Method", -2);
40 AddColumn("Arguments", -2);
41 AddColumn("State", 16);
42 AddColumn("Result", 100);
43
44 stateColumn = Columns["State"].Index;
45 resultColumn = Columns["Result"].Index;
46 DrawSubItem += new DrawListViewSubItemEventHandler(TestEntryListView_DrawSubItem);
47 DrawColumnHeader += new DrawListViewColumnHeaderEventHandler(TestEntryListView_DrawColumnHeader);
48 ItemChecked += new ItemCheckedEventHandler(TestEntryListView_ItemChecked);
49 //listEntryView.Columns
50 }
51
52 private void InitImageList() {
53 iconList = new ImageList();
54 Bitmap img = Properties.Resources.listicons;
55 img.MakeTransparent(Color.Magenta);
56 iconList.Images.AddStrip(img);
57 }
58
59 #region EventHandlers
60 void TestEntryListView_DrawColumnHeader(object sender, DrawListViewColumnHeaderEventArgs e) {
61 e.DrawDefault = true;
62 }
63
64 void TestEntryListView_DrawSubItem(object sender, DrawListViewSubItemEventArgs e) {
65 if (e.Header.Index != stateColumn) {
66 e.DrawDefault = true;
67 } else {
68 TestInfo info = e.Item.Tag as TestInfo;
69 Image img = iconList.Images[(int)info.TestState];
70
71 Rectangle cellRect = e.Bounds;
72 if (this.GridLines) {
73 cellRect.Height--;
74 cellRect.Width--;
75 cellRect.X++;
76 }
77 e.Graphics.SetClip(cellRect);
78 if (e.Item.Selected) {
79 e.Graphics.FillRectangle(SystemBrushes.Highlight, cellRect);
80
81 } else {
82 e.DrawBackground();
83 }
84 Rectangle icoRect = new Rectangle(cellRect.X, cellRect.Y, img.Width, img.Height);
85 e.Graphics.DrawImage(img, icoRect);
86 }
87 }
88
89 void TestEntryListView_ItemChecked(object sender, ItemCheckedEventArgs e) {
90 if (!ignoreStatusUpdate) {
91 UpdateStatusLabel();
92 }
93 }
94
95 protected override void OnColumnClick(ColumnClickEventArgs e) {
96 base.OnColumnClick(e);
97 columnComparer.Column = e.Column;
98 Sort();
99 }
100 #endregion
101
102 protected void UpdateStatusLabel() {
103 if (statusLabel == null) return;
104 int errs = 0;
105 int chk = 0;
106 foreach (ListViewItem item in Items) {
107 if (item.Checked) chk++;
108 if (((TestInfo)item.Tag).IsError) errs++;
109 }
110 int total = Items.Count;
111 string s = String.Format("Checked={0} Errors={1} Total={2}", chk, errs, total);
112 statusLabel.Text = s;
113 }
114
115 protected void AddColumn(string name_and_key, int width) {
116 Columns.Add(name_and_key, name_and_key, width);
117 }
118
119 public void AddTestInfo(TestInfo info) {
120 ListViewItem item = new ListViewItem();
121 item.Tag = info;
122 item.Text = info.TestAttribute.Caption;
123 item.SubItems.Add(info.ID);
124 item.SubItems.Add(info.Method.DeclaringType.Name);
125 item.SubItems.Add(info.Method.Name);
126 item.SubItems.Add(info.DumpArguments());
127 item.SubItems.Add(GetStatusText(info));
128 item.SubItems.Add("");
129
130 Items.Add(item);
131 }
132
133 public void AdjustColumns() {
134 Columns["Name"].Width = -2;
135 Columns["Class"].Width = -2;
136 Columns["Method"].Width = -2;
137 if (Items.Count > 0) {
138 ColumnHeader h = Columns[stateColumn];
139 h.Width = GetItemRect(0).Height+2;
140 }
141 int wiall = ClientSize.Width;
142 foreach (ColumnHeader h in Columns) {
143 if (h.Name.Equals("Result")) continue;
144 wiall -= h.Width;
145 }
146 Columns[resultColumn].Width = wiall;
147 UpdateStatusLabel();
148 }
149
150 #region menu commands
151 public void ReverseCheckAll() {
152 ignoreStatusUpdate = true;
153 foreach (ListViewItem item in Items) {
154 item.Checked = !item.Checked;
155 }
156 ignoreStatusUpdate = false;
157 UpdateStatusLabel();
158 }
159
160 public void ReverseCheckSelected() {
161 ignoreStatusUpdate = true;
162 foreach (ListViewItem item in SelectedItems) {
163 item.Checked = !item.Checked;
164 }
165 ignoreStatusUpdate = false;
166 UpdateStatusLabel();
167 }
168
169 public void SetCheckSelected(bool b) {
170 ignoreStatusUpdate = true;
171 foreach (ListViewItem item in SelectedItems) {
172 item.Checked = b;
173 }
174 UpdateStatusLabel();
175 ignoreStatusUpdate = false;
176 }
177
178 public void RunCheckedEntries() {
179 ignoreStatusUpdate = true;
180 foreach (ListViewItem item in Items) {
181 if (item.Checked) {
182 Run(item);
183 }
184 }
185 ignoreStatusUpdate = false;
186 UpdateStatusLabel();
187 }
188
189 public void RunSelectedEntries() {
190 ignoreStatusUpdate = true;
191 foreach (ListViewItem item in SelectedItems) {
192 Run(item);
193 }
194 ignoreStatusUpdate = false;
195 UpdateStatusLabel();
196 }
197
198 public void Run(ListViewItem item) {
199 Debug.WriteLine(StartLogText(item));
200 TestInfo info = (TestInfo)item.Tag;
201 info.Run();
202 item.SubItems[stateColumn].Text = GetStatusText(info);
203 Debug.WriteLineIf(info.TestState != TestState.Success,"### ERROR ###");
204 item.SubItems[resultColumn].Text = "" + info.LastResult;
205 if (info.LastResult is Exception) {
206 Exception ex = (Exception)info.LastResult;
207 Debug.WriteLine(ex.GetType().Name +":"+ ex.Message);
208 Debug.WriteLine(ex.StackTrace);
209 }
210 Debug.WriteLine(EndLogText(item));
211 Debug.WriteLine("");
212 if (!ignoreStatusUpdate) {
213 UpdateStatusLabel();
214 }
215 }
216 #endregion
217
218 #region static utils
219 static protected string GetStatusText(TestInfo info) {
220 return String.Format("{0}:{1}",
221 (int)info.TestState,
222 Enum.GetName(typeof(TestState), info.TestState)
223 );
224 }
225
226 public string StartLogText(ListViewItem item) {
227 TestInfo info = (TestInfo)item.Tag;
228 return String.Format(EntryStartLogText, info.ID);
229 }
230
231 public string EndLogText(ListViewItem item) {
232 TestInfo info = (TestInfo)item.Tag;
233 return String.Format(EntryEndLogText, info.ID);
234 }
235 #endregion
236 }
237
238 public class ListViewItemComparer : IComparer
239 {
240 /// <summary>
241 /// 比較する方法
242 /// </summary>
243 public enum ComparerMode
244 {
245 String,
246 Integer,
247 DateTime
248 };
249
250 private int _column;
251 private SortOrder _order;
252 private ComparerMode _mode = ComparerMode.String;
253
254 /// <summary>
255 /// 並び替えるListView列の番号
256 /// </summary>
257 public int Column {
258 set {
259 if (_column == value) {
260 if (_order == SortOrder.Ascending)
261 _order = SortOrder.Descending;
262 else if (_order == SortOrder.Descending)
263 _order = SortOrder.Ascending;
264 }
265 _column = value;
266 }
267 get {
268 return _column;
269 }
270 }
271 /// <summary>
272 /// 昇順か降順か
273 /// </summary>
274 public SortOrder Order {
275 set {
276 _order = value;
277 }
278 get {
279 return _order;
280 }
281 }
282 /// <summary>
283 /// 並び替えの方法
284 /// </summary>
285 public ComparerMode Mode {
286 set {
287 _mode = value;
288 }
289 get {
290 return _mode;
291 }
292 }
293
294 /// <summary>
295 /// ListViewItemComparerクラスのコンストラクタ
296 /// </summary>
297 /// <param name="col">並び替える列番号</param>
298 /// <param name="ord">昇順か降順か</param>
299 /// <param name="cmod">並び替えの方法</param>
300 public ListViewItemComparer(int col, SortOrder ord, ComparerMode cmod) {
301 _column = col;
302 _order = ord;
303 _mode = cmod;
304 }
305 public ListViewItemComparer() {
306 _column = 0;
307 _order = SortOrder.Ascending;
308 _mode = ComparerMode.String;
309 }
310
311 // xがyより小さいときはマイナスの数、大きいときはプラスの数、同じときは0を返す
312 public int Compare(object x, object y) {
313 int result = 0;
314 // ListViewItemの取得
315 ListViewItem itemx = (ListViewItem)x;
316 ListViewItem itemy = (ListViewItem)y;
317
318 // 並び替えの方法別に、xとyを比較する
319 switch (_mode) {
320 case ComparerMode.String:
321 result = string.Compare(itemx.SubItems[_column].Text, itemy.SubItems[_column].Text);
322 break;
323 case ComparerMode.Integer:
324 result = int.Parse(itemx.SubItems[_column].Text) - int.Parse(itemy.SubItems[_column].Text);
325 break;
326 case ComparerMode.DateTime:
327 result = DateTime.Compare(DateTime.Parse(itemx.SubItems[_column].Text), DateTime.Parse(itemy.SubItems[_column].Text));
328 break;
329 }
330
331 // 降順の時は結果を+-逆にする
332 if (_order == SortOrder.Descending)
333 result = -result;
334 else if (_order == SortOrder.None)
335 result = 0;
336
337 // 結果を返す
338 return result;
339 }
340 }
341 }

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26