public void IFormattable_DateTime ()
{
CultureInfo originalCulture = CultureInfo.CurrentCulture;
try {
Thread.CurrentThread.CurrentCulture = new CultureInfo ("nl-BE");
DateTime today = DateTime.Today;
DateTime now = DateTime.Now;
table = new DataTable ();
view = table.DefaultView;
table.Columns.Add (new DataColumn ("Date", typeof (DateTime)));
DataRow row = table.NewRow ();
row ["Date"] = today;
table.Rows.Add (row);
row = table.NewRow ();
row ["Date"] = now;
table.Rows.Add (row);
tableStyle = new DataGridTableStyle ();
ColumnPoker dateColumnStyle = new ColumnPoker ();
dateColumnStyle.MappingName = "Date";
tableStyle.GridColumnStyles.Add (dateColumnStyle);
BindingContext bc = new BindingContext ();
DataGrid dg = new DataGrid ();
dg.BindingContext = bc;
dg.TableStyles.Add (tableStyle);
dg.DataSource = table;
CurrencyManager cm = (CurrencyManager) bc [view];
TextBox tb = dateColumnStyle.TextBox;
DateTimeConverter converter = new DateTimeConverter ();
Assert.IsNotNull (tb, "#A1");
Assert.AreEqual (string.Empty, tb.Text, "#A2");
dateColumnStyle.DoEdit (cm, 0, new Rectangle (new Point (0,0), new Size (100, 100)), false, null, true);
Assert.AreEqual (converter.ConvertTo (null, CultureInfo.CurrentCulture,
today, typeof (string)), tb.Text, "#B1");
Assert.AreEqual (today, table.Rows [0] ["Date"], "#B2");
dateColumnStyle.DoEdit (cm, 1, new Rectangle (new Point (0,0), new Size (100, 100)), false, null, true);
Assert.AreEqual (converter.ConvertTo (null, CultureInfo.CurrentCulture,
now, typeof (string)), tb.Text, "#C1");
Assert.AreEqual (now, table.Rows [1] ["Date"], "#C2");
dateColumnStyle.Format = "MM";
dateColumnStyle.DoEdit (cm, 0, new Rectangle (new Point (0,0), new Size (100, 100)), false, null, true);
Assert.AreEqual (today.ToString ("MM", CultureInfo.CurrentCulture), tb.Text, "#D1");
Assert.AreEqual (today, table.Rows [0] ["Date"], "#D2");
dateColumnStyle.DoEdit (cm, 1, new Rectangle (new Point (0,0), new Size (100, 100)), false, null, true);
Assert.AreEqual (now.ToString ("MM", CultureInfo.CurrentCulture), tb.Text, "#E1");
Assert.AreEqual (now, table.Rows [1] ["Date"], "#E2");
dateColumnStyle.DoEdit (cm, 0, new Rectangle (new Point (0,0), new Size (100, 100)), false, "INVALID", true);
Assert.IsFalse (dateColumnStyle.DoCommit (cm, 0), "#F1");
Assert.AreEqual ("INVALID", tb.Text, "#F2");
Assert.AreEqual (today, table.Rows [0] ["Date"], "#F3");
dateColumnStyle.DoEdit (cm, 0, new Rectangle (new Point (0,0), new Size (100, 100)), false, "12", true);
Assert.IsFalse (dateColumnStyle.DoCommit (cm, 0), "#G1");
Assert.AreEqual ("12", tb.Text, "#G2");
Assert.AreEqual (today, table.Rows [0] ["Date"], "#G3");
dateColumnStyle.DoEdit (cm, 0, new Rectangle (new Point (0,0), new Size (100, 100)), false, "07/09/2007", true);
Assert.IsTrue (dateColumnStyle.DoCommit (cm, 0), "#H1");
Assert.AreEqual (converter.ConvertTo (null, CultureInfo.CurrentCulture,
new DateTime (2007, 9, 7), typeof (string)), tb.Text, "#H2");
Assert.AreEqual (new DateTime (2007, 9, 7), table.Rows [0] ["Date"], "#H3");
dateColumnStyle.FormatInfo = CultureInfo.CurrentCulture;
dateColumnStyle.DoEdit (cm, 0, new Rectangle (new Point (0,0), new Size (100, 100)), false, "08/06/2005", true);
Assert.IsTrue (dateColumnStyle.DoCommit (cm, 0), "#I1");
Assert.AreEqual ("06", tb.Text, "#I2");
Assert.AreEqual (new DateTime (2005, 6, 8), table.Rows [0] ["Date"], "#I3");
} finally {
Thread.CurrentThread.CurrentCulture = originalCulture;
}
}