1 // Permission is hereby granted, free of charge, to any person obtaining
2 // a copy of this software and associated documentation files (the
3 // "Software"), to deal in the Software without restriction, including
4 // without limitation the rights to use, copy, modify, merge, publish,
5 // distribute, sublicense, and/or sell copies of the Software, and to
6 // permit persons to whom the Software is furnished to do so, subject to
7 // the following conditions:
9 // The above copyright notice and this permission notice shall be
10 // included in all copies or substantial portions of the Software.
12 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
13 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
14 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
15 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
16 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
17 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
18 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
20 // Copyright (c) 2005 Novell, Inc. (http://www.novell.com)
23 // Jordi Mas i Hernandez <jordi@ximian.com>
28 using System.Collections;
29 using System.ComponentModel;
32 using System.Globalization;
33 using System.Threading;
34 using System.Windows.Forms;
36 using NUnit.Framework;
38 // resolve the ambiguity between System.ComponentModel and NUnit.Framework
39 using CategoryAttribute = NUnit.Framework.CategoryAttribute;
41 namespace MonoTests.System.Windows.Forms
44 public class DataGridTextBoxColumnTest : TestHelper
46 private bool eventhandled;
47 //private object Element;
48 //private CollectionChangeAction Action;
51 public void TestDefaultValues ()
53 DataGridTextBoxColumn col = new DataGridTextBoxColumn ();
55 Assert.AreEqual (HorizontalAlignment.Left, col.Alignment, "HorizontalAlignment property");
56 Assert.AreEqual ("", col.HeaderText, "HeaderText property");
57 Assert.AreEqual ("", col.MappingName, "MappingName property");
58 Assert.AreEqual ("(null)", col.NullText, "NullText property");
59 Assert.AreEqual (false, col.ReadOnly, "ReadOnly property");
60 Assert.AreEqual (-1, col.Width, "Width property");
61 Assert.AreEqual ("", col.Format, "Format property");
62 Assert.AreEqual (null, col.FormatInfo, "FormatInfo property");
66 public void TestMappingNameChangedEvent ()
68 DataGridTextBoxColumn col = new DataGridTextBoxColumn ();
70 col.MappingNameChanged += new EventHandler (OnEventHandler);
71 col.MappingName = "name1";
72 Assert.AreEqual (true, eventhandled, "A1");
76 public void TestAlignmentChangedEvent ()
78 DataGridTextBoxColumn col = new DataGridTextBoxColumn ();
80 col.AlignmentChanged += new EventHandler (OnEventHandler);
81 col.Alignment = HorizontalAlignment.Center;
82 Assert.AreEqual (true, eventhandled, "A1");
86 public void TestHeaderTextChangedEvent ()
88 DataGridTextBoxColumn col = new DataGridTextBoxColumn ();
90 col.HeaderTextChanged += new EventHandler (OnEventHandler);
91 col.HeaderText = "Header";
92 Assert.AreEqual (true, eventhandled, "A1");
96 public void TestNullTextChangedEvent ()
98 DataGridTextBoxColumn col = new DataGridTextBoxColumn ();
100 col.NullTextChanged += new EventHandler (OnEventHandler);
101 col.NullText = "Null";
102 Assert.AreEqual (true, eventhandled, "A1");
105 private void OnEventHandler (object sender, EventArgs e)
112 DataGridTableStyle tableStyle;
113 ColumnPoker nameColumnStyle;
114 ColumnPoker companyColumnStyle;
116 public void MakeTable (bool readonly_name)
118 table = new DataTable ();
119 view = table.DefaultView;
120 table.Columns.Add (new DataColumn ("who"));
121 table.Columns.Add (new DataColumn ("where"));
122 DataRow row = table.NewRow ();
123 row ["who"] = "Miguel";
124 row ["where"] = null;
125 table.Rows.Add (row);
127 row = table.NewRow ();
128 row ["who"] = "Toshok";
129 row ["where"] = "Novell";
130 table.Rows.Add (row);
132 tableStyle = new DataGridTableStyle ();
133 nameColumnStyle = new ColumnPoker ();
134 nameColumnStyle.MappingName = "who";
135 nameColumnStyle.ReadOnly = readonly_name;
136 tableStyle.GridColumnStyles.Add (nameColumnStyle);
137 companyColumnStyle = new ColumnPoker ();
138 companyColumnStyle.HeaderText = "Company";
139 companyColumnStyle.MappingName = "where";
140 companyColumnStyle.NullText = "(not set)";
141 tableStyle.GridColumnStyles.Add (companyColumnStyle);
144 class ColumnPoker : DataGridTextBoxColumn
146 public ColumnPoker ()
150 public ColumnPoker (PropertyDescriptor prop) : base (prop)
154 public void DoAbort (int rowNum)
159 public bool DoCommit (CurrencyManager dataSource, int rowNum)
161 return base.Commit (dataSource, rowNum);
164 public void DoConcedeFocus ()
166 base.ConcedeFocus ();
169 public void DoEdit (CurrencyManager source, int rowNum, Rectangle bounds, bool _ro, string instantText, bool cellIsVisible)
171 base.Edit (source, rowNum, bounds, _ro, instantText, cellIsVisible);
174 public void DoEndEdit ()
179 public void DoEnterNullValue ()
181 base.EnterNullValue ();
184 public void DoHideEditBox ()
189 public void DoReleaseHostedControl ()
191 base.ReleaseHostedControl ();
194 public void DoSetDataGridInColumn (DataGrid value)
196 base.SetDataGridInColumn (value);
199 public void DoUpdateUI (CurrencyManager source, int rowNum, string instantText)
201 base.UpdateUI (source, rowNum, instantText);
206 public void TestDoEdit ()
210 BindingContext bc = new BindingContext ();
211 DataGrid dg = new DataGrid ();
212 dg.BindingContext = bc;
213 dg.TableStyles.Add (tableStyle);
214 dg.DataSource = table;
216 CurrencyManager cm = (CurrencyManager)bc[view];
217 ColumnPoker column = nameColumnStyle;
218 TextBox tb = nameColumnStyle.TextBox;
220 Assert.IsNotNull (tb, "1");
221 Assert.AreEqual (typeof (DataGridTextBox), tb.GetType(), "2");
222 Assert.IsTrue (tb.Enabled, "3");
223 Assert.IsFalse (tb.Visible, "4");
224 Assert.AreEqual ("", tb.Text, "5");
225 Assert.IsFalse (tb.ReadOnly, "6");
227 column.DoEdit (cm, 0, new Rectangle (new Point (0,0), new Size (100, 100)), false, "hi there", true);
228 Assert.IsTrue (tb.ReadOnly, "7");
230 // since it's readonly
231 Assert.AreEqual ("Miguel", tb.Text, "8");
235 public void TestDoEdit_NullInstantTest ()
239 BindingContext bc = new BindingContext ();
240 DataGrid dg = new DataGrid ();
241 dg.BindingContext = bc;
242 dg.TableStyles.Add (tableStyle);
243 dg.DataSource = table;
245 CurrencyManager cm = (CurrencyManager)bc[view];
246 ColumnPoker column = nameColumnStyle;
247 TextBox tb = nameColumnStyle.TextBox;
249 Assert.IsNotNull (tb, "1");
250 Assert.AreEqual (typeof (DataGridTextBox), tb.GetType(), "2");
251 Assert.IsTrue (tb.Enabled, "3");
252 Assert.IsFalse (tb.Visible, "4");
253 Assert.AreEqual ("", tb.Text, "5");
254 Assert.IsFalse (tb.ReadOnly, "6");
256 column.DoEdit (cm, 0, new Rectangle (new Point (0,0), new Size (100, 100)), false, null, true);
257 Assert.IsFalse (tb.ReadOnly, "7");
259 // since it's readonly
260 Assert.AreEqual ("Miguel", tb.Text, "8");
264 public void TestEndEdit ()
268 BindingContext bc = new BindingContext ();
269 DataGrid dg = new DataGrid ();
270 dg.BindingContext = bc;
271 dg.TableStyles.Add (tableStyle);
272 dg.DataSource = table;
274 CurrencyManager cm = (CurrencyManager)bc[view];
275 ColumnPoker column = nameColumnStyle;
276 TextBox tb = column.TextBox;
278 Assert.AreEqual ("", tb.Text, "1");
279 column.DoEdit (cm, 0, new Rectangle (new Point (0,0), new Size (100, 100)), false, "hi there", true);
280 Assert.AreEqual ("hi there", tb.Text, "2");
286 DataRowView v = (DataRowView)cm.Current;
288 Assert.AreEqual ("Miguel", v[0], "3");
292 public void TestCommit ()
296 BindingContext bc = new BindingContext ();
297 DataGrid dg = new DataGrid ();
298 dg.BindingContext = bc;
299 dg.TableStyles.Add (tableStyle);
300 dg.DataSource = table;
302 CurrencyManager cm = (CurrencyManager)bc[view];
303 ColumnPoker column = nameColumnStyle;
304 DataGridTextBox tb = (DataGridTextBox)column.TextBox;
306 Assert.AreEqual ("", tb.Text, "1");
307 Assert.IsTrue (tb.IsInEditOrNavigateMode, "1.5");
308 column.DoEdit (cm, 0, new Rectangle (new Point (0,0), new Size (100, 100)), false, "hi there", true);
309 Assert.AreEqual ("hi there", tb.Text, "2");
310 Assert.AreEqual (new Rectangle (new Point (2,2), new Size (97,97)), tb.Bounds, "3");
311 Assert.IsFalse (tb.ReadOnly, "4");
312 Assert.IsFalse (tb.IsInEditOrNavigateMode, "5");
315 rv = column.DoCommit (cm, cm.Position);
318 Assert.IsTrue (tb.IsInEditOrNavigateMode, "6");
319 Assert.IsTrue (rv, "7");
320 DataRowView v = (DataRowView)cm.Current;
321 Assert.AreEqual ("hi there", v[0], "8");
325 public void TestCommit2 ()
329 BindingContext bc = new BindingContext ();
330 DataGrid dg = new DataGrid ();
331 dg.BindingContext = bc;
332 dg.TableStyles.Add (tableStyle);
333 dg.DataSource = table;
335 CurrencyManager cm = (CurrencyManager)bc[view];
336 ColumnPoker column = nameColumnStyle;
337 DataGridTextBox tb = (DataGridTextBox)column.TextBox;
339 Assert.AreEqual ("", tb.Text, "1");
340 Assert.IsTrue (tb.IsInEditOrNavigateMode, "1.5");
341 column.DoEdit (cm, 0, new Rectangle (new Point (0,0), new Size (100, 100)), false, "hi there", true);
342 Assert.AreEqual ("hi there", tb.Text, "2");
343 Assert.AreEqual (new Rectangle (new Point (2,2), new Size (97,97)), tb.Bounds, "3");
344 Assert.IsFalse (tb.ReadOnly, "4");
345 Assert.IsFalse (tb.IsInEditOrNavigateMode, "5");
351 Assert.IsTrue (tb.IsInEditOrNavigateMode, "5.5");
353 bool rv = column.DoCommit (cm, cm.Position);
354 Assert.IsTrue (rv, "6");
355 DataRowView v = (DataRowView)cm.Current;
356 Assert.AreEqual ("Miguel", v[0], "7");
358 /* try it again with the DoCommit before the DoEndEdit */
360 column.DoEdit (cm, 0, new Rectangle (new Point (0,0), new Size (100,100)), false, "hi there", true);
361 Assert.AreEqual ("hi there", tb.Text, "8");
362 Assert.AreEqual (new Rectangle (new Point (2,2), new Size (97,97)), tb.Bounds, "9");
363 Assert.IsFalse (tb.ReadOnly, "10");
364 Assert.IsFalse (tb.IsInEditOrNavigateMode, "11");
367 rv = column.DoCommit (cm, cm.Position);
369 Assert.IsTrue (rv, "12");
370 v = (DataRowView)cm.Current;
371 Assert.AreEqual ("yo", v[0], "13");
375 public void TestAbort ()
379 BindingContext bc = new BindingContext ();
380 DataGrid dg = new DataGrid ();
381 dg.BindingContext = bc;
382 dg.TableStyles.Add (tableStyle);
383 dg.DataSource = table;
385 CurrencyManager cm = (CurrencyManager)bc[view];
386 ColumnPoker column = nameColumnStyle;
387 DataGridTextBox tb = (DataGridTextBox)column.TextBox;
389 Assert.AreEqual ("", tb.Text, "1");
390 Assert.IsTrue (tb.IsInEditOrNavigateMode, "1.5");
391 column.DoEdit (cm, 0, new Rectangle (new Point (0,0), new Size (100, 100)), false, "hi there", true);
392 Assert.AreEqual ("hi there", tb.Text, "2");
393 Assert.AreEqual (new Rectangle (new Point (2,2), new Size (97,97)), tb.Bounds, "3");
394 Assert.IsFalse (tb.ReadOnly, "4");
395 Assert.IsFalse (tb.IsInEditOrNavigateMode, "5");
401 Assert.IsTrue (tb.IsInEditOrNavigateMode, "6");
402 DataRowView v = (DataRowView)cm.Current;
403 Assert.AreEqual ("Miguel", v[0], "7");
407 public void TestAbort_DifferentRow ()
411 BindingContext bc = new BindingContext ();
412 DataGrid dg = new DataGrid ();
413 dg.BindingContext = bc;
414 dg.TableStyles.Add (tableStyle);
415 dg.DataSource = table;
417 CurrencyManager cm = (CurrencyManager)bc[view];
418 ColumnPoker column = nameColumnStyle;
419 DataGridTextBox tb = (DataGridTextBox)column.TextBox;
421 Assert.AreEqual ("", tb.Text, "1");
422 Assert.IsTrue (tb.IsInEditOrNavigateMode, "1.5");
423 column.DoEdit (cm, 0, new Rectangle (new Point (0,0), new Size (100, 100)), false, "hi there", true);
424 Assert.AreEqual ("hi there", tb.Text, "2");
425 Assert.AreEqual (new Rectangle (new Point (2,2), new Size (97,97)), tb.Bounds, "3");
426 Assert.IsFalse (tb.ReadOnly, "4");
427 Assert.IsFalse (tb.IsInEditOrNavigateMode, "5");
433 Assert.IsTrue (tb.IsInEditOrNavigateMode, "6");
434 DataRowView v = (DataRowView)cm.Current;
435 Assert.AreEqual ("Miguel", v[0], "7");
439 [Category ("NotWorking")]
440 public void TestUpdateUI ()
444 BindingContext bc = new BindingContext ();
445 DataGrid dg = new DataGrid ();
446 dg.BindingContext = bc;
447 dg.TableStyles.Add (tableStyle);
448 dg.DataSource = table;
450 CurrencyManager cm = (CurrencyManager)bc[view];
451 ColumnPoker column = nameColumnStyle;
452 DataGridTextBox tb = (DataGridTextBox)column.TextBox;
454 Assert.AreEqual ("", tb.Text, "1");
455 Assert.IsTrue (tb.IsInEditOrNavigateMode, "2");
457 Assert.AreEqual (Point.Empty, tb.Location, "3");
459 column.DoUpdateUI (cm, 0, "hi there");
461 Assert.AreEqual (Point.Empty, tb.Location, "4");
463 Assert.AreEqual ("hi there", tb.Text, "5");
464 Assert.IsFalse (tb.ReadOnly, "6");
465 Assert.IsTrue (tb.IsInEditOrNavigateMode, "7");
467 DataRowView v = (DataRowView)cm.Current;
468 Assert.AreEqual ("Miguel", v[0], "8");
472 public void TestReadOnly_InEditCall ()
476 BindingContext bc = new BindingContext ();
477 DataGrid dg = new DataGrid ();
478 dg.BindingContext = bc;
479 dg.TableStyles.Add (tableStyle);
480 dg.DataSource = table;
482 CurrencyManager cm = (CurrencyManager)bc[view];
483 ColumnPoker column = nameColumnStyle;
484 TextBox tb = nameColumnStyle.TextBox;
486 Assert.IsNotNull (tb, "1");
487 Assert.AreEqual (typeof (DataGridTextBox), tb.GetType(), "2");
488 Assert.IsTrue (tb.Enabled, "3");
489 Assert.IsFalse (tb.Visible, "4");
490 Assert.AreEqual ("", tb.Text, "5");
491 Assert.IsFalse (tb.ReadOnly, "6");
493 column.DoEdit (cm, 0, new Rectangle (new Point (0,0), new Size (100, 100)), true, "hi there", true);
495 Assert.IsTrue (tb.ReadOnly, "7");
497 // since it's readonly
498 Assert.AreEqual ("Miguel", tb.Text, "8");
502 public void TestReadOnly_AfterEditCall ()
506 BindingContext bc = new BindingContext ();
507 DataGrid dg = new DataGrid ();
508 dg.BindingContext = bc;
509 dg.TableStyles.Add (tableStyle);
510 dg.DataSource = table;
512 CurrencyManager cm = (CurrencyManager)bc[view];
513 ColumnPoker column = nameColumnStyle;
514 TextBox tb = nameColumnStyle.TextBox;
516 Assert.IsNotNull (tb, "1");
517 Assert.AreEqual (typeof (DataGridTextBox), tb.GetType(), "2");
518 Assert.IsTrue (tb.Enabled, "3");
519 Assert.IsFalse (tb.Visible, "4");
520 Assert.AreEqual ("", tb.Text, "5");
521 Assert.IsFalse (tb.ReadOnly, "6");
523 column.DoEdit (cm, 0, new Rectangle (new Point (0,0), new Size (100, 100)), false, "hi there", true);
524 column.ReadOnly = true;
526 Assert.IsFalse (tb.ReadOnly, "7");
528 Assert.AreEqual ("hi there", tb.Text, "8");
532 rv = column.DoCommit (cm, cm.Position);
534 Assert.IsTrue (rv, "9");
535 DataRowView v = (DataRowView)cm.Current;
536 Assert.AreEqual ("hi there", v[0], "10");
540 public void TestReadOnly_DataGrid ()
544 BindingContext bc = new BindingContext ();
545 DataGrid dg = new DataGrid ();
546 dg.BindingContext = bc;
547 dg.TableStyles.Add (tableStyle);
548 dg.DataSource = table;
551 CurrencyManager cm = (CurrencyManager)bc[view];
552 ColumnPoker column = nameColumnStyle;
553 TextBox tb = nameColumnStyle.TextBox;
555 Assert.IsNotNull (tb, "1");
556 Assert.AreEqual (typeof (DataGridTextBox), tb.GetType(), "2");
557 Assert.IsTrue (tb.Enabled, "3");
558 Assert.IsFalse (tb.Visible, "4");
559 Assert.AreEqual ("", tb.Text, "5");
560 Assert.IsFalse (tb.ReadOnly, "6");
562 column.DoEdit (cm, 0, new Rectangle (new Point (0,0), new Size (100, 100)), false, "hi there", true);
564 Assert.IsFalse (tb.ReadOnly, "7");
566 Assert.AreEqual ("hi there", tb.Text, "8");
570 rv = column.DoCommit (cm, cm.Position);
572 Assert.IsTrue (rv, "9");
573 DataRowView v = (DataRowView)cm.Current;
574 Assert.AreEqual ("hi there", v[0], "10");
578 public void TestReadOnly_TableStyle ()
582 BindingContext bc = new BindingContext ();
583 DataGrid dg = new DataGrid ();
584 dg.BindingContext = bc;
585 dg.TableStyles.Add (tableStyle);
586 dg.DataSource = table;
588 tableStyle.ReadOnly = true;
590 CurrencyManager cm = (CurrencyManager)bc[view];
591 ColumnPoker column = nameColumnStyle;
592 TextBox tb = nameColumnStyle.TextBox;
594 Assert.IsNotNull (tb, "1");
595 Assert.AreEqual (typeof (DataGridTextBox), tb.GetType(), "2");
596 Assert.IsTrue (tb.Enabled, "3");
597 Assert.IsFalse (tb.Visible, "4");
598 Assert.AreEqual ("", tb.Text, "5");
599 Assert.IsFalse (tb.ReadOnly, "6");
601 column.DoEdit (cm, 0, new Rectangle (new Point (0,0), new Size (100, 100)), false, "hi there", true);
603 Assert.IsTrue (tb.ReadOnly, "7");
605 Assert.AreEqual ("Miguel", tb.Text, "8");
609 public void IFormattable ()
611 CultureInfo originalCulture = CultureInfo.CurrentCulture;
614 Thread.CurrentThread.CurrentCulture = new CultureInfo ("en-GB");
616 table = new DataTable ();
617 view = table.DefaultView;
618 table.Columns.Add (new DataColumn ("Amount", typeof (MockNumeric)));
620 DataRow row = table.NewRow ();
621 row ["Amount"] = new MockNumericFormattable (1);
622 table.Rows.Add (row);
624 row = table.NewRow ();
625 row ["Amount"] = new MockNumericFormattable (2);
626 table.Rows.Add (row);
628 row = table.NewRow ();
629 row ["Amount"] = new MockNumeric (3);
630 table.Rows.Add (row);
632 tableStyle = new DataGridTableStyle ();
633 ColumnPoker amountColumnStyle = new ColumnPoker ();
634 amountColumnStyle.MappingName = "Amount";
635 tableStyle.GridColumnStyles.Add (amountColumnStyle);
637 BindingContext bc = new BindingContext ();
638 DataGrid dg = new DataGrid ();
639 dg.BindingContext = bc;
640 dg.TableStyles.Add (tableStyle);
641 dg.DataSource = table;
643 CurrencyManager cm = (CurrencyManager) bc [view];
644 TextBox tb = amountColumnStyle.TextBox;
646 Assert.IsNotNull (tb, "#A1");
647 Assert.AreEqual (string.Empty, tb.Text, "#A2");
649 amountColumnStyle.DoEdit (cm, 0, new Rectangle (new Point (0,0), new Size (100, 100)), false, null, true);
650 Assert.AreEqual ("uno", tb.Text, "#B1");
651 Assert.AreEqual (new MockNumericFormattable (1), table.Rows [0] ["Amount"], "#B2");
653 amountColumnStyle.DoEdit (cm, 1, new Rectangle (new Point (0,0), new Size (100, 100)), false, null, true);
654 Assert.AreEqual ("dos", tb.Text, "#C1");
655 Assert.AreEqual (new MockNumericFormattable (2), table.Rows [1] ["Amount"], "#C2");
657 amountColumnStyle.DoEdit (cm, 2, new Rectangle (new Point (0,0), new Size (100, 100)), false, null, true);
658 Assert.AreEqual ("tres", tb.Text, "#D1");
659 Assert.AreEqual (new MockNumeric (3), table.Rows [2] ["Amount"], "#D2");
661 amountColumnStyle.Format = string.Empty;
663 amountColumnStyle.DoEdit (cm, 0, new Rectangle (new Point (0,0), new Size (100, 100)), false, null, true);
664 Assert.AreEqual ("uno", tb.Text, "#E1");
665 Assert.AreEqual (new MockNumericFormattable (1), table.Rows [0] ["Amount"], "#E2");
667 amountColumnStyle.Format = "currency";
669 amountColumnStyle.DoEdit (cm, 0, new Rectangle (new Point (0,0), new Size (100, 100)), false, null, true);
670 Assert.AreEqual ("#£1.00", tb.Text, "#F1");
671 Assert.AreEqual (new MockNumericFormattable (1), table.Rows [0] ["Amount"], "#F2");
673 amountColumnStyle.DoEdit (cm, 2, new Rectangle (new Point (0,0), new Size (100, 100)), false, null, true);
674 Assert.AreEqual ("tres", tb.Text, "#G1");
675 Assert.AreEqual (new MockNumeric (3), table.Rows [2] ["Amount"], "#G2");
677 amountColumnStyle.DoEdit (cm, 0, new Rectangle (new Point (0,0), new Size (100, 100)), false, "#£5.00", true);
678 Assert.AreEqual ("#£5.00", tb.Text, "#H1");
679 Assert.AreEqual (new MockNumericFormattable (1), table.Rows [0] ["Amount"], "#H2");
681 amountColumnStyle.DoEdit (cm, 0, new Rectangle (new Point (0,0), new Size (100, 100)), false, "INVALID", true);
682 Assert.IsFalse (amountColumnStyle.DoCommit (cm, 0), "#I1");
683 Assert.AreEqual ("INVALID", tb.Text, "#I2");
684 //Assert.AreEqual ("INVALID", table.Rows [0] ["Amount"], "#I3");
686 amountColumnStyle.FormatInfo = new CultureInfo ("en-US");
688 amountColumnStyle.DoEdit (cm, 1, new Rectangle (new Point (0,0), new Size (100, 100)), false, null, true);
689 Assert.AreEqual ("#$2.00", tb.Text, "#J1");
690 Assert.AreEqual (new MockNumericFormattable (2), table.Rows [1] ["Amount"], "#J2");
692 Thread.CurrentThread.CurrentCulture = originalCulture;
697 [Category ("NotWorking")]
698 public void IFormattable_DateTime ()
700 CultureInfo originalCulture = CultureInfo.CurrentCulture;
703 Thread.CurrentThread.CurrentCulture = new CultureInfo ("nl-BE");
704 DateTime today = DateTime.Today;
705 DateTime now = DateTime.Now;
707 table = new DataTable ();
708 view = table.DefaultView;
709 table.Columns.Add (new DataColumn ("Date", typeof (DateTime)));
711 DataRow row = table.NewRow ();
712 row ["Date"] = today;
713 table.Rows.Add (row);
715 row = table.NewRow ();
717 table.Rows.Add (row);
719 tableStyle = new DataGridTableStyle ();
720 ColumnPoker dateColumnStyle = new ColumnPoker ();
721 dateColumnStyle.MappingName = "Date";
722 tableStyle.GridColumnStyles.Add (dateColumnStyle);
724 BindingContext bc = new BindingContext ();
725 DataGrid dg = new DataGrid ();
726 dg.BindingContext = bc;
727 dg.TableStyles.Add (tableStyle);
728 dg.DataSource = table;
730 CurrencyManager cm = (CurrencyManager) bc [view];
731 TextBox tb = dateColumnStyle.TextBox;
732 DateTimeConverter converter = new DateTimeConverter ();
734 Assert.IsNotNull (tb, "#A1");
735 Assert.AreEqual (string.Empty, tb.Text, "#A2");
737 dateColumnStyle.DoEdit (cm, 0, new Rectangle (new Point (0,0), new Size (100, 100)), false, null, true);
738 Assert.AreEqual (converter.ConvertTo (null, CultureInfo.CurrentCulture,
739 today, typeof (string)), tb.Text, "#B1");
740 Assert.AreEqual (today, table.Rows [0] ["Date"], "#B2");
742 dateColumnStyle.DoEdit (cm, 1, new Rectangle (new Point (0,0), new Size (100, 100)), false, null, true);
743 Assert.AreEqual (converter.ConvertTo (null, CultureInfo.CurrentCulture,
744 now, typeof (string)), tb.Text, "#C1");
745 Assert.AreEqual (now, table.Rows [1] ["Date"], "#C2");
747 dateColumnStyle.Format = "MM";
749 dateColumnStyle.DoEdit (cm, 0, new Rectangle (new Point (0,0), new Size (100, 100)), false, null, true);
750 Assert.AreEqual (today.ToString ("MM", CultureInfo.CurrentCulture), tb.Text, "#D1");
751 Assert.AreEqual (today, table.Rows [0] ["Date"], "#D2");
753 dateColumnStyle.DoEdit (cm, 1, new Rectangle (new Point (0,0), new Size (100, 100)), false, null, true);
754 Assert.AreEqual (now.ToString ("MM", CultureInfo.CurrentCulture), tb.Text, "#E1");
755 Assert.AreEqual (now, table.Rows [1] ["Date"], "#E2");
757 dateColumnStyle.DoEdit (cm, 0, new Rectangle (new Point (0,0), new Size (100, 100)), false, "INVALID", true);
758 Assert.IsFalse (dateColumnStyle.DoCommit (cm, 0), "#F1");
759 Assert.AreEqual ("INVALID", tb.Text, "#F2");
760 Assert.AreEqual (today, table.Rows [0] ["Date"], "#F3");
762 dateColumnStyle.DoEdit (cm, 0, new Rectangle (new Point (0,0), new Size (100, 100)), false, "12", true);
763 Assert.IsFalse (dateColumnStyle.DoCommit (cm, 0), "#G1");
764 Assert.AreEqual ("12", tb.Text, "#G2");
765 Assert.AreEqual (today, table.Rows [0] ["Date"], "#G3");
767 dateColumnStyle.DoEdit (cm, 0, new Rectangle (new Point (0,0), new Size (100, 100)), false, "07/09/2007", true);
768 Assert.IsTrue (dateColumnStyle.DoCommit (cm, 0), "#H1");
769 Assert.AreEqual (converter.ConvertTo (null, CultureInfo.CurrentCulture,
770 new DateTime (2007, 9, 7), typeof (string)), tb.Text, "#H2");
771 Assert.AreEqual (new DateTime (2007, 9, 7), table.Rows [0] ["Date"], "#H3");
773 dateColumnStyle.FormatInfo = CultureInfo.CurrentCulture;
775 dateColumnStyle.DoEdit (cm, 0, new Rectangle (new Point (0,0), new Size (100, 100)), false, "08/06/2005", true);
776 Assert.IsTrue (dateColumnStyle.DoCommit (cm, 0), "#I1");
777 Assert.AreEqual ("06", tb.Text, "#I2");
778 Assert.AreEqual (new DateTime (2005, 6, 8), table.Rows [0] ["Date"], "#I3");
780 Thread.CurrentThread.CurrentCulture = originalCulture;
785 public void StringConverterTest ()
787 CultureInfo originalCulture = CultureInfo.CurrentCulture;
790 Thread.CurrentThread.CurrentCulture = new CultureInfo ("en-GB");
792 table = new DataTable ();
793 view = table.DefaultView;
794 table.Columns.Add (new DataColumn ("Amount", typeof (MockNumericStringConvertable)));
796 DataRow row = table.NewRow ();
797 row ["Amount"] = new MockNumericStringConvertable (1);
798 table.Rows.Add (row);
800 row = table.NewRow ();
801 row ["Amount"] = new MockNumericStringConvertable (2);
802 table.Rows.Add (row);
804 tableStyle = new DataGridTableStyle ();
805 ColumnPoker amountColumnStyle = new ColumnPoker ();
806 amountColumnStyle.MappingName = "Amount";
807 tableStyle.GridColumnStyles.Add (amountColumnStyle);
809 BindingContext bc = new BindingContext ();
810 DataGrid dg = new DataGrid ();
811 dg.BindingContext = bc;
812 dg.TableStyles.Add (tableStyle);
813 dg.DataSource = table;
815 CurrencyManager cm = (CurrencyManager) bc [view];
816 DataGridTextBox tb = (DataGridTextBox) amountColumnStyle.TextBox;
818 Assert.IsNotNull (tb, "#A1");
819 Assert.AreEqual (string.Empty, tb.Text, "#A2");
820 Assert.IsTrue (tb.IsInEditOrNavigateMode, "#A3");
822 amountColumnStyle.DoEdit (cm, 0, new Rectangle (new Point (0,0), new Size (100, 100)), false, null, true);
823 Assert.AreEqual ("£1.00", tb.Text, "#B1");
824 Assert.AreEqual (new MockNumericStringConvertable (1), table.Rows [0] ["Amount"], "#B2");
825 Assert.IsTrue (tb.IsInEditOrNavigateMode, "#B3");
827 amountColumnStyle.DoEdit (cm, 1, new Rectangle (new Point (0,0), new Size (100, 100)), false, null, true);
828 Assert.AreEqual ("£2.00", tb.Text, "#C1");
829 Assert.AreEqual (new MockNumericStringConvertable (2), table.Rows [1] ["Amount"], "#C2");
830 Assert.IsTrue (tb.IsInEditOrNavigateMode, "#C3");
832 amountColumnStyle.DoEdit (cm, 0, new Rectangle (new Point (0,0), new Size (100, 100)), false, "£3.00", true);
833 Assert.AreEqual ("£3.00", tb.Text, "#D1");
834 Assert.AreEqual (new MockNumericStringConvertable (1), table.Rows [0] ["Amount"], "#D2");
835 Assert.IsFalse (tb.IsInEditOrNavigateMode, "#D3");
837 Assert.IsTrue (amountColumnStyle.DoCommit (cm, cm.Position), "#E1");
838 Assert.AreEqual ("£3.00", tb.Text, "#E2");
839 Assert.AreEqual (new MockNumericStringConvertable (3), table.Rows [0] ["Amount"], "#E3");
840 Assert.IsTrue (tb.IsInEditOrNavigateMode, "#E4");
842 amountColumnStyle.DoEdit (cm, 0, new Rectangle (new Point (0,0), new Size (100, 100)), false, "INVALID", true);
843 Assert.IsFalse (amountColumnStyle.DoCommit (cm, cm.Position), "#F1");
844 Assert.AreEqual ("INVALID", tb.Text, "#F2");
845 Assert.AreEqual (new MockNumericStringConvertable (3), table.Rows [0] ["Amount"], "#F3");
846 Assert.IsFalse (tb.IsInEditOrNavigateMode, "#F4");
848 amountColumnStyle.Format = "whatever";
849 amountColumnStyle.FormatInfo = new CultureInfo ("en-US");
851 amountColumnStyle.DoEdit (cm, 0, new Rectangle (new Point (0,0), new Size (100, 100)), false, null, true);
852 Assert.AreEqual ("£3.00", tb.Text, "#G1");
853 Assert.AreEqual (new MockNumericStringConvertable (3), table.Rows [0] ["Amount"], "#G2");
854 Assert.IsFalse (tb.IsInEditOrNavigateMode, "#G3");
857 Assert.IsTrue (amountColumnStyle.DoCommit (cm, cm.Position), "#H1");
858 Assert.AreEqual ("£5.00", tb.Text, "#H2");
859 Assert.AreEqual (new MockNumericStringConvertable (5), table.Rows [0] ["Amount"], "#H3");
861 Thread.CurrentThread.CurrentCulture = originalCulture;
866 public void NonStringConverterTest ()
868 CultureInfo originalCulture = CultureInfo.CurrentCulture;
871 Thread.CurrentThread.CurrentCulture = new CultureInfo ("en-GB");
873 table = new DataTable ();
874 view = table.DefaultView;
875 table.Columns.Add (new DataColumn ("Amount", typeof (MockNumericNonStringConvertable)));
877 DataRow row = table.NewRow ();
878 row ["Amount"] = new MockNumericNonStringConvertable (1);
879 table.Rows.Add (row);
881 row = table.NewRow ();
882 row ["Amount"] = new MockNumericNonStringConvertable (2);
883 table.Rows.Add (row);
885 tableStyle = new DataGridTableStyle ();
886 ColumnPoker amountColumnStyle = new ColumnPoker ();
887 amountColumnStyle.MappingName = "Amount";
888 tableStyle.GridColumnStyles.Add (amountColumnStyle);
890 BindingContext bc = new BindingContext ();
891 DataGrid dg = new DataGrid ();
892 dg.BindingContext = bc;
893 dg.TableStyles.Add (tableStyle);
894 dg.DataSource = table;
896 CurrencyManager cm = (CurrencyManager) bc [view];
897 TextBox tb = amountColumnStyle.TextBox;
899 Assert.IsNotNull (tb, "#A1");
900 Assert.AreEqual (string.Empty, tb.Text, "#A2");
902 amountColumnStyle.DoEdit (cm, 0, new Rectangle (new Point (0, 0), new Size (100, 100)), false, null, true);
903 Assert.AreEqual ("uno", tb.Text, "#B1");
904 Assert.AreEqual (new MockNumericStringConvertable (1), table.Rows [0] ["Amount"], "#B2");
906 amountColumnStyle.DoEdit (cm, 1, new Rectangle (new Point (0, 0), new Size (100, 100)), false, null, true);
907 Assert.AreEqual ("dos", tb.Text, "#C1");
908 Assert.AreEqual (new MockNumericStringConvertable (2), table.Rows [1] ["Amount"], "#C2");
910 amountColumnStyle.DoEdit (cm, 0, new Rectangle (new Point (0, 0), new Size (100, 100)), false, "£3.00", true);
911 Assert.AreEqual ("£3.00", tb.Text, "#D1");
912 Assert.AreEqual (new MockNumericStringConvertable (1), table.Rows [0] ["Amount"], "#D2");
914 Assert.IsFalse (amountColumnStyle.DoCommit (cm, cm.Position), "#E1");
915 Assert.AreEqual ("£3.00", tb.Text, "#E2");
916 //Assert.AreEqual ("£3.00", table.Rows [0] ["Amount"], "#E3");
918 Thread.CurrentThread.CurrentCulture = originalCulture;
924 public MockNumeric (int number)
926 this.number = number;
930 get { return number; }
931 set { number = value; }
934 public override bool Equals (object obj)
939 MockNumeric numeric = obj as MockNumeric;
940 return (numeric != null && numeric.Number == Number);
943 public override int GetHashCode ()
945 return number.GetHashCode ();
948 public override string ToString ()
965 class MockNumericFormattable : MockNumeric, IFormattable
967 public MockNumericFormattable (int number) : base (number)
971 string IFormattable.ToString (string format, IFormatProvider formatProvider)
973 if (format == "currency") {
974 return "#" + Number.ToString ("c", formatProvider);
976 return "#" + Number.ToString (formatProvider);
981 [TypeConverter (typeof (MockNumericStringConverter))]
982 class MockNumericStringConvertable : MockNumeric
984 public MockNumericStringConvertable (int number) : base (number)
989 [TypeConverter (typeof (MockNumericNonStringConverter))]
990 class MockNumericNonStringConvertable : MockNumeric
992 public MockNumericNonStringConvertable (int number) : base (number)
997 class MockNumericStringConverter : TypeConverter
999 public override bool CanConvertFrom (ITypeDescriptorContext context, Type sourceType)
1001 if (sourceType == typeof (string))
1006 public override bool CanConvertTo (ITypeDescriptorContext context, Type destinationType)
1008 if (destinationType == typeof (string))
1013 public override object ConvertFrom (ITypeDescriptorContext context, CultureInfo culture, object value)
1018 string val = value as string;
1020 int number = int.Parse (val, NumberStyles.Currency, culture);
1021 return new MockNumericStringConvertable (number);
1024 return base.ConvertFrom (context, culture, value);
1027 public override object ConvertTo (ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType)
1032 if (destinationType == typeof (string)) {
1033 MockNumeric val = value as MockNumeric;
1034 return val.Number.ToString ("C", culture);
1037 return base.ConvertTo (context, culture, value, destinationType);
1041 class MockNumericNonStringConverter : TypeConverter
1043 public override bool CanConvertFrom (ITypeDescriptorContext context, Type sourceType)
1048 public override bool CanConvertTo (ITypeDescriptorContext context, Type destinationType)
1053 public override object ConvertFrom (ITypeDescriptorContext context, CultureInfo culture, object value)
1055 throw new NotSupportedException ();
1058 public override object ConvertTo (ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType)
1060 throw new NotSupportedException ();