2008-11-24 Jonathan Pobst <monkey@jpobst.com>
[mono.git] / mcs / class / Managed.Windows.Forms / Test / System.Windows.Forms / ProgressBarTest.cs
1 //
2 // ProgressBarTest.cs: Test cases for ProgressBar.
3 //
4 // Author:
5 //   Ritvik Mayank (mritvik@novell.com)
6 //
7 // (C) 2005 Novell, Inc. (http://www.novell.com)
8 //
9
10 using System;
11 using System.Windows.Forms;
12 using System.Drawing;
13 using System.Reflection;
14 using NUnit.Framework;
15
16 namespace MonoTests.System.Windows.Forms
17 {
18         [TestFixture]
19         public class ProgressBarTest : TestHelper
20         {
21                 [Test]
22                 public void ProgressBarPropertyTest ()
23                 {
24                         ProgressBar myProgressBar = new ProgressBar ();
25                         
26                         // A
27                         Assert.AreEqual (false, myProgressBar.AllowDrop, "#A1");
28                         
29                         // B
30                         Assert.AreEqual ("Control", myProgressBar.BackColor.Name, "#B1");
31                         Assert.AreEqual (null, myProgressBar.BackgroundImage, "#B3");
32                         string gif = "M.gif";
33                         myProgressBar.BackgroundImage = Image.FromFile (gif);
34                         // comparing image objects fails on MS .Net so using Size property
35                         Assert.AreEqual (Image.FromFile(gif, true).Size, myProgressBar.BackgroundImage.Size, "#B4");
36                         
37                         // F 
38                         Assert.AreEqual (FontStyle.Regular, myProgressBar.Font.Style, "#F2");
39                         
40                         // M
41                         Assert.AreEqual (100, myProgressBar.Maximum, "#M1");
42                         Assert.AreEqual (0, myProgressBar.Minimum, "#M2");
43                         
44                         // R
45                         Assert.AreEqual (RightToLeft.No, myProgressBar.RightToLeft, "#R1");
46                                                 
47                         // S
48                         Assert.AreEqual (10, myProgressBar.Step, "#S1");
49
50                         // T
51                         Assert.AreEqual ("", myProgressBar.Text, "#T1");
52                         myProgressBar.Text = "New ProgressBar";
53                         Assert.AreEqual ("New ProgressBar", myProgressBar.Text, "#T2");
54
55                         // V
56                         Assert.AreEqual (0, myProgressBar.Value, "#V1");
57                 }
58
59                 [Test]
60                 public void ForeColorTest ()
61                 {
62                         ProgressBar progressBar = new ProgressBar ();
63 #if NET_2_0
64                         Assert.AreEqual (SystemColors.Highlight, progressBar.ForeColor, "#A1");
65 #else
66                         Assert.AreEqual (SystemColors.ControlText, progressBar.ForeColor, "#A1");
67 #endif
68                         progressBar.ForeColor = Color.Red;
69                         Assert.AreEqual (Color.Red, progressBar.ForeColor, "#A2");
70                         progressBar.ForeColor = Color.White;
71                         Assert.AreEqual (Color.White, progressBar.ForeColor, "#A3");
72
73                         Form form = new Form ();
74                         form.ShowInTaskbar = false;
75                         form.Controls.Add (progressBar);
76                         form.Show ();
77
78                         Assert.AreEqual (Color.White, progressBar.ForeColor, "#B1");
79                         progressBar.ForeColor = Color.Red;
80                         Assert.AreEqual (Color.Red, progressBar.ForeColor, "#B2");
81                         progressBar.ForeColor = Color.Red;
82                         Assert.AreEqual (Color.Red, progressBar.ForeColor, "#B3");
83                         progressBar.ForeColor = Color.Blue;
84                         Assert.AreEqual (Color.Blue, progressBar.ForeColor, "#B4");
85                         
86                         form.Close ();
87                 }
88
89                 [Test]
90                 public void ResetForeColor ()
91                 {
92                         ProgressBar progressBar = new ProgressBar ();
93                         progressBar.ForeColor = Color.Red;
94                         progressBar.ResetForeColor ();
95 #if NET_2_0
96                         Assert.AreEqual (SystemColors.Highlight, progressBar.ForeColor);
97 #else
98                         Assert.AreEqual (SystemColors.ControlText, progressBar.ForeColor);
99 #endif
100                 }
101
102                 [Test]
103 #if NET_2_0
104                 [ExpectedException (typeof (ArgumentOutOfRangeException))]
105 #else
106                 [ExpectedException (typeof (ArgumentException))]
107 #endif
108                 public void ValueTest ()
109                 {
110                         ProgressBar myProgressBar = new ProgressBar ();
111                         myProgressBar.Value = -1;
112                         myProgressBar.Value = 100;
113                 }
114
115                 [Test]
116                 public void MinMax()
117                 {
118                         Type expectedArgExType;
119 #if NET_2_0
120                         expectedArgExType = typeof (ArgumentOutOfRangeException);
121 #else
122                         expectedArgExType = typeof (ArgumentException);
123 #endif
124                         //
125                         ProgressBar c = new ProgressBar ();
126                         Assert.AreEqual (0, c.Minimum, "default_min");
127                         Assert.AreEqual (100, c.Maximum, "default_max");
128                         Assert.AreEqual (0, c.Value, "default_value");
129                         //----
130                         try {
131                                 c.Minimum = -1;
132                                 Assert.Fail ("should have thrown -- Min-1");
133                         } catch (ArgumentException ex) {
134                                 // MSDN says ArgumentException, but really its *subtype* ArgumentOutOfRangeException.
135                                 // Actually it changed in FX2.
136                                 Assert.AreEqual (expectedArgExType, ex.GetType (), "Typeof Min-1");
137 #if NET_2_0
138                                 Assert.AreEqual ("Minimum", ex.ParamName, "ParamName Min-1"); // (culture insensitive).
139 #endif
140                         }
141                         try {
142                                 c.Maximum = -1;
143                                 Assert.Fail ("should have thrown -- Max-1");
144                         } catch (ArgumentException ex) {
145                                 Assert.AreEqual (expectedArgExType, ex.GetType (), "Typeof Max-1");
146 #if NET_2_0
147                                 Assert.AreEqual ("Maximum", ex.ParamName, "ParamName Max-1"); // (culture insensitive).
148 #endif
149                         }
150                         Assert.AreEqual (0, c.Minimum, "after Min/Max-1_min");
151                         Assert.AreEqual (100, c.Maximum, "after Min/Max-1_max");
152                         Assert.AreEqual (0, c.Value, "after Min/Max-1_value");
153                         //
154                         // What happens when Min/Max is set respectively above/below the current Value
155                         // and Max/Min values.
156                         c.Minimum = 200;
157                         Assert.AreEqual (200, c.Minimum, "200L_min");
158                         Assert.AreEqual (200, c.Maximum, "200L_max");
159                         Assert.AreEqual (200, c.Value, "200L_value");
160                         //
161                         c.Minimum = 50;
162                         Assert.AreEqual (50, c.Minimum, "50L_min");
163                         Assert.AreEqual (200, c.Maximum, "50L_max");
164                         Assert.AreEqual (200, c.Value, "50L_value");
165                         //
166                         c.Maximum = 30;
167                         Assert.AreEqual (30, c.Minimum, "30T_min");
168                         Assert.AreEqual (30, c.Maximum, "30T_max");
169                         Assert.AreEqual (30, c.Value, "30T_value");
170                         //
171                         // What happens when Value is set outside the Min/Max ranges.
172                         c.Maximum = 50;
173                         Assert.AreEqual (30, c.Minimum, "50T_min");
174                         Assert.AreEqual (50, c.Maximum, "50T_max");
175                         c.Value = 45;
176                         Assert.AreEqual (45, c.Value, "50T_value");
177                         try {
178                                 c.Value = 29;
179                                 Assert.Fail ("should have thrown -- 29");
180                         } catch (ArgumentException ex) {
181                                 Assert.AreEqual (expectedArgExType, ex.GetType (), "Typeof 29");
182 #if NET_2_0
183                                 Assert.AreEqual ("Value", ex.ParamName, "ParamName 29");
184 #endif
185                         }
186                         Assert.AreEqual (45, c.Value, "after 29_value");
187                         try {
188                                 c.Value = 51;
189                                 Assert.Fail ("should have thrown -- 51");
190                         } catch (ArgumentException ex) {
191                                 Assert.AreEqual (expectedArgExType, ex.GetType (), "Typeof 51");
192 #if NET_2_0
193                                 Assert.AreEqual ("Value", ex.ParamName, "ParamName 151");
194 #endif
195                         }
196                         Assert.AreEqual (45, c.Value, "after 51_value");
197                 }
198
199                 [Test]
200                 public void PerformStepAndIncrement ()
201                 {
202                         ProgressBar c = new ProgressBar ();
203                         //
204                         c.Value = 10;
205                         c.Step = 30;
206                         Assert.AreEqual (10, c.Value, "StepAt30_Init");
207                         c.PerformStep ();
208                         Assert.AreEqual (40, c.Value, "StepAt30_1");
209                         c.PerformStep ();
210                         Assert.AreEqual (70, c.Value, "StepAt30_2");
211                         //
212                         c.Value = 0;
213                         c.Step = 20;
214                         Assert.AreEqual (0, c.Value, "StepAt20_Init");
215                         //
216                         c.PerformStep ();
217                         Assert.AreEqual (20, c.Value, "StepAt20_1");
218                         c.PerformStep ();
219                         Assert.AreEqual (40, c.Value, "StepAt20_2");
220                         c.PerformStep ();
221                         Assert.AreEqual (60, c.Value, "StepAt20_3");
222                         c.PerformStep ();
223                         Assert.AreEqual (80, c.Value, "StepAt20_4");
224                         c.PerformStep ();
225                         Assert.AreEqual (100, c.Value, "StepAt20_5");
226                         c.PerformStep ();
227                         Assert.AreEqual (100, c.Value, "StepAt20_6x");
228                         c.PerformStep ();
229                         Assert.AreEqual (100, c.Value, "StepAt20_7x");
230                         //
231                         c.Step = -20;
232                         Assert.AreEqual (100, c.Value, "StepAt2Neg0_Init");
233                         c.PerformStep ();
234                         Assert.AreEqual (80, c.Value, "StepAtNeg20_1");
235                         c.PerformStep ();
236                         Assert.AreEqual (60, c.Value, "StepAtNeg20_2");
237                         //
238                         c.Step = -40;
239                         Assert.AreEqual (60, c.Value, "StepAt2Neg40_Init");
240                         c.PerformStep ();
241                         Assert.AreEqual (20, c.Value, "StepAtNeg40_1");
242                         c.PerformStep ();
243                         Assert.AreEqual (0, c.Value, "StepAtNeg40_2");
244                         c.PerformStep ();
245                         Assert.AreEqual (0, c.Value, "StepAtNeg40_2");
246                         //
247                         c.Increment (30);
248                         Assert.AreEqual (30, c.Value, "Increment30_1");
249                         c.Increment (30);
250                         Assert.AreEqual (60, c.Value, "Increment30_2");
251                         c.Increment (30);
252                         Assert.AreEqual (90, c.Value, "Increment30_3");
253                         c.Increment (30);
254                         Assert.AreEqual (100, c.Value, "Increment30_4x");
255                 }
256
257 #if NET_2_0
258                 [Test]
259                 public void Styles ()
260                 {
261                         ProgressBar c = new ProgressBar ();
262                         //--
263                         Assert.AreEqual(ProgressBarStyle.Blocks, c.Style, "orig=blocks");
264                         //--
265                         c.Style = ProgressBarStyle.Continuous;
266                         //--
267                         c.Style = ProgressBarStyle.Marquee;
268                         // Increment and PerformStep are documented to fail in Marquee style.
269                         try {
270                                 c.Increment (5);
271                                 Assert.Fail ("should have thrown -- Increment");
272                         } catch (InvalidOperationException) {
273                         }
274                         try {
275                                 c.PerformStep ();
276                                 Assert.Fail ("should have thrown -- PerformStep ");
277                         } catch (InvalidOperationException) {
278                         }
279                         // What about the other value-related properties?  No fail apparently!
280                         c.Value = 20;
281                         c.Minimum = 5;
282                         c.Maximum = 95;
283                         //--
284                         // Now undefined style values...
285                         try {
286                                 c.Style = (ProgressBarStyle)4;
287                                 Assert.Fail("should have thrown -- bad style4");
288                         } catch (global::System.ComponentModel.InvalidEnumArgumentException ex) {
289                                 //Console.WriteLine(ex.Message);
290                                 Assert.AreEqual(typeof(global::System.ComponentModel.InvalidEnumArgumentException), ex.GetType (), "Typeof bad style4");
291                                 Assert.AreEqual("value", ex.ParamName, "ParamName bad style 4");
292                         }
293                         try {
294                                 c.Style = (ProgressBarStyle)99;
295                                 Assert.Fail("should have thrown -- bad style99");
296                         } catch (global::System.ComponentModel.InvalidEnumArgumentException ex) {
297                                 Assert.AreEqual (typeof(global::System.ComponentModel.InvalidEnumArgumentException), ex.GetType (), "Typeof bad style99");
298                                 Assert.AreEqual ("value", ex.ParamName, "ParamName bad style 99");
299                         }
300                 }
301 #endif
302
303                 [Test]
304                 public void ToStringMethodTest () 
305                 {
306                         ProgressBar myProgressBar = new ProgressBar ();
307                         myProgressBar.Text = "New ProgressBar";
308                         Assert.AreEqual ("System.Windows.Forms.ProgressBar, Minimum: 0, Maximum: 100, Value: 0", myProgressBar.ToString (), "#T3");
309                 }
310                 // [MonoTODO("Add test for method Increment (Visual Test)")]
311                 // [MonoTODO("Add test for method PerformStep (Visual Test)")]
312         }
313 }
314