Merge pull request #439 from mono-soc-2012/garyb/iconfix
[mono.git] / mcs / class / Managed.Windows.Forms / Test / System.Windows.Forms / DataGridTest.cs
index 4d013ff3de3514a2bb5cc3fe843eb9a21d86407a..8141409ca18e25fe6674647283bfaa87b6426c37 100644 (file)
@@ -32,6 +32,7 @@ using System.Windows.Forms;
 using System.Xml;
 using NUnit.Framework;
 using System.Data;
+using System.Xml;
 
 namespace MonoTests.System.Windows.Forms
 {
@@ -52,17 +53,10 @@ namespace MonoTests.System.Windows.Forms
        }
 
        [TestFixture]
-       public class DataGridTest
+       public class DataGridTest : TestHelper
        {
                private bool eventhandled;
 
-               [TearDown]
-               public void Clean() {}
-
-               [SetUp]
-               public void GetReady ()
-               {
-               }
 
                [Test]
                public void TestDefaultValues ()
@@ -92,6 +86,15 @@ namespace MonoTests.System.Windows.Forms
                        Assert.AreEqual (null, dg.Site, "Site property");
                        Assert.AreEqual (string.Empty, dg.Text, "Text property");
                        Assert.AreEqual (0, dg.VisibleColumnCount, "VisibleColumnCount property");
+
+                       // Font
+                       Assert.IsFalse (dg.Font.Bold, "Font Bold");
+#if NET_2_0
+                       Assert.IsTrue (dg.Font.IsSystemFont, "Font IsSystemFont");
+#endif
+                       Assert.IsFalse (dg.Font.Italic, "Font Italic");
+                       Assert.IsFalse (dg.Font.Strikeout, "Font Strikeout");
+                       Assert.IsFalse (dg.Font.Underline, "Font Underline");
                }
 
                [Test]
@@ -144,6 +147,65 @@ namespace MonoTests.System.Windows.Forms
                        Assert.AreEqual (true, eventhandled, "A1");
                }
 
+               [Test]
+               public void CaptionFont ()
+               {
+                       DataGrid dg = new DataGrid ();
+
+                       // default values
+                       Assert.IsTrue (dg.CaptionFont.Bold, "#A1");
+                       Assert.AreEqual (dg.CaptionFont.FontFamily, dg.Font.FontFamily, "#A2");
+                       Assert.AreEqual (dg.CaptionFont.Height, dg.Font.Height, "#A3");
+#if NET_2_0
+                       Assert.IsFalse(dg.CaptionFont.IsSystemFont, "#A4");
+#endif
+                       Assert.AreEqual (dg.CaptionFont.Italic, dg.Font.Italic, "#A5");
+                       Assert.AreEqual (dg.CaptionFont.Name, dg.Font.Name, "#A6");
+                       Assert.AreEqual (dg.CaptionFont.Size, dg.Font.Size, "#A7");
+                       Assert.AreEqual (dg.CaptionFont.SizeInPoints, dg.Font.SizeInPoints, "#A8");
+                       Assert.AreEqual (dg.CaptionFont.Strikeout, dg.Font.Strikeout, "#A9");
+                       Assert.AreEqual (dg.CaptionFont.Underline, dg.Font.Underline, "#A10");
+                       Assert.AreEqual (dg.CaptionFont.Unit, dg.Font.Unit, "#A11");
+
+                       // modifying Font affects CaptionFont, except for FontStyle
+                       dg.Font = new Font (dg.Font.FontFamily, 3, FontStyle.Italic);
+                       Assert.IsTrue (dg.CaptionFont.Bold, "#B1");
+                       Assert.IsFalse (dg.Font.Bold, "#B2");
+                       Assert.IsFalse (dg.CaptionFont.Italic, "#B3");
+                       Assert.IsTrue (dg.Font.Italic, "#B4");
+                       Assert.AreEqual (3, dg.Font.SizeInPoints, "#B5");
+                       Assert.AreEqual (dg.CaptionFont.SizeInPoints, dg.Font.SizeInPoints, "#B6");
+
+                       // explicitly setting CaptionFont removes link between CaptionFont
+                       // and Font
+                       dg.CaptionFont = dg.Font;
+                       Assert.AreSame (dg.CaptionFont, dg.Font, "#C1");
+                       dg.Font = new Font (dg.Font.FontFamily, 7, FontStyle.Bold);
+                       Assert.IsFalse (dg.CaptionFont.Bold, "#C2");
+                       Assert.IsTrue (dg.Font.Bold, "#C3");
+                       Assert.AreEqual (7, dg.Font.SizeInPoints, "#C4");
+                       Assert.AreEqual (3, dg.CaptionFont.SizeInPoints, "#C5");
+               }
+
+               [Test]
+               public void HeaderFont ()
+               {
+                       DataGrid dg = new DataGrid ();
+                       dg.Font = new Font (dg.Font, FontStyle.Italic);
+                       Assert.AreSame (dg.HeaderFont, dg.Font, "#1");
+
+                       dg.HeaderFont = dg.Font;
+                       Assert.AreSame (dg.HeaderFont, dg.Font, "#2");
+
+                       dg.Font = new Font (dg.Font, FontStyle.Regular);
+                       Assert.IsTrue (dg.HeaderFont.Italic, "#3");
+                       Assert.IsFalse (dg.Font.Italic, "#4");
+
+                       dg.ResetHeaderFont ();
+                       Assert.AreSame (dg.HeaderFont, dg.Font, "#5");
+               }
+
+
                [Test]
                public void TestParentRowsLabelStyleChangedEvent ()
                {
@@ -175,9 +237,9 @@ namespace MonoTests.System.Windows.Forms
                }
 
                public void OnEventHandler (object sender, EventArgs e)
-               {
-                       eventhandled = true;
-               }
+               {
+                       eventhandled = true;
+               }
 
                // Property exceptions
 
@@ -258,7 +320,7 @@ namespace MonoTests.System.Windows.Forms
 
                [Test]
                public void ResetHeaderFontMethod ()
-               {                       
+               {
                }
 
                [Test]
@@ -268,12 +330,12 @@ namespace MonoTests.System.Windows.Forms
                        DataGrid dg2 = new DataGrid ();
                        dg2.HeaderForeColor = Color.Red;
                        dg2.ResetHeaderForeColor ();
-                       Assert.AreEqual (dg.HeaderForeColor, dg2.HeaderForeColor, "A1");                        
+                       Assert.AreEqual (dg.HeaderForeColor, dg2.HeaderForeColor, "A1");
                }
 
                [Test]
                public void ResetLinkColorMethod ()
-               {                                               
+               {
                        DataGrid dg = new DataGrid ();
                        DataGrid dg2 = new DataGrid ();
                        dg2.LinkColor = Color.Red;
@@ -317,10 +379,337 @@ namespace MonoTests.System.Windows.Forms
                        DataGrid dg = new DataGrid ();
                        DataSet ds = new DataSet ("DataSet");
                        DataTable dt = new DataTable ("DataTable");
-                       DataColumn dc = new DataColumn ("C");
                        ds.Tables.Add (dt);
 
                        dg.SetDataBinding (ds, "DataTable");
                }
+
+               int data_source_changed_count = 0;
+               void OnDataSourceChanged (object sender, EventArgs e)
+               {
+                       data_source_changed_count ++;
+               }
+
+               [Test]
+               public void TestManager1 ()
+               {
+                       TestDataGrid dg = new TestDataGrid ();
+
+                       data_source_changed_count = 0;
+                       dg.DataSourceChanged += new EventHandler (OnDataSourceChanged);
+
+                       /* make sure everything is fine to start with */
+                       Assert.IsNull (dg.Manager, "A1");
+                       Assert.IsNull (dg.DataSource, "A2");
+                       Assert.AreEqual (dg.DataMember, "", "A3");
+                       // NotWorking Assert.AreEqual (0, data_source_changed_count, "A4");
+               }
+
+               [Test]
+               public void TestManagerSetDataMember ()
+               {
+                       TestDataGrid dg = new TestDataGrid ();
+
+                       data_source_changed_count = 0;
+                       dg.DataSourceChanged += new EventHandler (OnDataSourceChanged);
+
+                       /* set the datamember to something */
+                       dg.DataMember = "hi there";
+                       Assert.IsNull (dg.Manager, "A1");
+                       // NotWorking Assert.AreEqual (0, data_source_changed_count, "A2");
+               }
+
+               [Test]
+               public void TestManagerSetDataSource ()
+               {
+                       TestDataGrid dg = new TestDataGrid ();
+
+                       data_source_changed_count = 0;
+                       dg.DataSourceChanged += new EventHandler (OnDataSourceChanged);
+
+                       /* set our datasource to something */
+                       dg = new TestDataGrid ();
+                       DataSet ds = new DataSet ("DataSet");
+                       DataTable dt = new DataTable ("DataTable");
+                       ds.Tables.Add (dt);
+
+                       dg.DataSource = ds;
+                       Assert.IsNull (dg.Manager, "A1");
+
+                       /* set the datamember to something as well.. anything yet? */
+                       dg.DataMember = "DataTable";
+                       Assert.IsNull (dg.Manager, "A2");
+                       Assert.AreEqual (0, data_source_changed_count, "A3");
+               }
+
+               [Test]
+               public void TestManagerCreateHandle ()
+               {
+                       TestDataGrid dg = new TestDataGrid ();
+
+                       data_source_changed_count = 0;
+                       dg.DataSourceChanged += new EventHandler (OnDataSourceChanged);
+
+                       /* set our datasource to something */
+                       dg = new TestDataGrid ();
+                       DataSet ds = new DataSet ("DataSet");
+                       DataTable dt = new DataTable ("DataTable");
+                       ds.Tables.Add (dt);
+
+                       dg.DataSource = ds;
+
+                       /* cause the control to create its handle and
+                        * see if that does anything */
+                       Assert.IsNotNull (dg.Handle, "A1");
+                       Assert.IsNull (dg.Manager, "A2");
+                       Assert.AreEqual (0, data_source_changed_count, "A3");
+               }
+
+               [Test]
+               public void TestManagerSetBindingContext ()
+               {
+                       TestDataGrid dg = new TestDataGrid ();
+
+                       data_source_changed_count = 0;
+                       dg.DataSourceChanged += new EventHandler (OnDataSourceChanged);
+
+                       /* set our datasource to something */
+                       dg = new TestDataGrid ();
+                       DataSet ds = new DataSet ("DataSet");
+                       DataTable dt = new DataTable ("DataTable");
+                       ds.Tables.Add (dt);
+
+                       dg.DataSource = ds;
+                       dg.DataMember = "DataTable";
+
+                       /* now set the BindingContext and see if something changes */
+                       dg.BindingContext = new BindingContext ();
+                       Assert.IsNotNull (dg.Manager, "A1");
+                       Assert.AreEqual (0, data_source_changed_count, "A2");
+               }
+
+               [Test]
+               public void TestManagerAfterSetBindingContext ()
+               {
+                       TestDataGrid dg = new TestDataGrid ();
+
+                       data_source_changed_count = 0;
+                       dg.DataSourceChanged += new EventHandler (OnDataSourceChanged);
+
+                       dg.BindingContext = new BindingContext ();
+
+                       /* set our datasource to something */
+                       dg = new TestDataGrid ();
+                       DataSet ds = new DataSet ("DataSet");
+                       DataTable dt = new DataTable ("DataTable");
+                       ds.Tables.Add (dt);
+
+                       dg.DataSource = ds;
+                       Assert.IsNull (dg.Manager, "A1");
+
+                       dg.DataMember = "DataTable";
+                       Assert.IsNull (dg.Manager, "A2");
+
+                       dg.BindingContext = new BindingContext ();
+                       Assert.IsNotNull (dg.Manager, "A3");
+                       // NotWorking Assert.AreEqual (0, data_source_changed_count, "A4");
+               }
+
+               [Test]
+               public void TestManagerSetDataMemberAfterSetBindingContext ()
+               {
+                       TestDataGrid dg = new TestDataGrid ();
+
+                       data_source_changed_count = 0;
+                       dg.DataSourceChanged += new EventHandler (OnDataSourceChanged);
+
+                       /* set our datasource to something */
+                       dg = new TestDataGrid ();
+                       DataSet ds = new DataSet ("DataSet");
+                       DataTable dt = new DataTable ("DataTable");
+                       ds.Tables.Add (dt);
+
+                       dg.DataSource = ds;
+
+                       dg.BindingContext = new BindingContext ();
+                       Assert.AreEqual (0, data_source_changed_count, "A1");
+
+                       CurrencyManager mgr = dg.Manager;
+
+                       dg.DataMember = "DataTable";
+                       Assert.IsNotNull (dg.Manager, "A2");
+                       Assert.IsTrue (mgr != dg.Manager, "A3");
+                       Assert.AreEqual (0, data_source_changed_count, "A4");
+               }
+
+               [Test]
+               public void TestManagerSetDataSourceAfterSetBindingContext ()
+               {
+                       TestDataGrid dg = new TestDataGrid ();
+
+                       data_source_changed_count = 0;
+                       dg.DataSourceChanged += new EventHandler (OnDataSourceChanged);
+
+                       /* set our datasource to something */
+                       dg = new TestDataGrid ();
+                       DataSet ds = new DataSet ("DataSet");
+                       DataTable dt = new DataTable ("DataTable");
+                       ds.Tables.Add (dt);
+
+                       dg.DataMember = "DataTable";
+
+                       dg.BindingContext = new BindingContext ();
+                       Assert.AreEqual (0, data_source_changed_count, "A1");
+
+                       CurrencyManager mgr = dg.Manager;
+
+                       dg.DataSource = ds;
+                       Assert.IsNotNull (dg.Manager, "A2");
+                       Assert.IsTrue (mgr != dg.Manager, "A3");
+                       Assert.AreEqual (0, data_source_changed_count, "A4");
+               }
+
+               [Test]
+               public void TestManagerSetDataSourceAfterSetBindingContextWithHandle ()
+               {
+                       TestDataGrid dg = new TestDataGrid ();
+
+                       data_source_changed_count = 0;
+                       dg.DataSourceChanged += new EventHandler (OnDataSourceChanged);
+
+                       /* set our datasource to something */
+                       dg = new TestDataGrid ();
+                       DataSet ds = new DataSet ("DataSet");
+                       DataTable dt = new DataTable ("DataTable");
+                       ds.Tables.Add (dt);
+
+                       /* cause the control to create its handle and
+                        * see if that does anything */
+                       Assert.IsNotNull (dg.Handle, "A1");
+
+                       dg.DataSource = new ArrayList ();
+
+                       dg.BindingContext = new BindingContext ();
+                       Assert.AreEqual (0, data_source_changed_count, "A2");
+
+                       dg.DataSource = ds;
+                       Assert.AreEqual (0, data_source_changed_count, "A3");
+               }
+
+               [Test]
+               public void TestManagerSetDataSourceWithEmptyStyle ()
+               {
+                       TestDataGrid dg = new TestDataGrid ();
+                       dg.BindingContext = new BindingContext ();
+
+                       DataSet ds = new DataSet ("DataSet");
+                       DataTable dt = new DataTable ("MyTable");
+                       dt.Columns.Add ("A", typeof (string));
+                       dt.NewRow ();
+                       ds.Tables.Add (dt);
+
+                       // Add the style for the table we have, but leave it empty
+                       // - this is, no column styles
+                       DataGridTableStyle table_style = new DataGridTableStyle ();
+                       table_style.MappingName = "MyTable";
+                       dg.TableStyles.Add (table_style);
+
+                       Assert.AreEqual (0, table_style.GridColumnStyles.Count, "#A1");
+
+                       dg.DataSource = dt;
+
+                       Assert.AreEqual (1, table_style.GridColumnStyles.Count, "#B1");
+               }
+
+               public class ClickableDataGrid : DataGrid
+               {
+                       public void ClickGrid (int X, int Y)
+                       {
+                               MouseEventArgs me = new MouseEventArgs (
+                                       MouseButtons.Left,
+                                       1, /*# of clicks*/
+                                       X, Y, 0);
+                               OnMouseDown (me);
+                               OnClick (me);
+                               OnMouseUp (me);
+                       }
+               }
+
+               public class Form5487 : Form
+               {
+                       private ClickableDataGrid dataGrid1;
+                       private Container components = null;
+
+                       public Form5487 ()
+                       {
+                               InitializeComponent ();
+                       }
+
+                       protected override void Dispose (bool disposing)
+                       {
+                               if (disposing) {
+                                       if (components != null) {
+                                               components.Dispose ();
+                                       }
+                               }
+                               base.Dispose (disposing);
+                       }
+
+                       private void InitializeComponent ()
+                       {
+                               this.dataGrid1 = new ClickableDataGrid ();
+                               ((ISupportInitialize)(this.dataGrid1)).BeginInit ();
+                               this.SuspendLayout ();
+                               this.dataGrid1.DataMember = "";
+                               this.dataGrid1.HeaderForeColor = SystemColors.ControlText;
+                               this.dataGrid1.Location = new Point (16, 16);
+                               this.dataGrid1.Name = "dataGrid1";
+                               this.dataGrid1.Size = new Size (624, 440);
+                               this.dataGrid1.TabIndex = 0;
+                               this.AutoScaleBaseSize = new Size (5, 13);
+                               this.ClientSize = new Size (656, 470);
+                               this.Controls.Add (this.dataGrid1);
+                               this.Name = "Form1";
+                               this.Text = "Form1";
+                               this.Shown += new EventHandler (this.Form1_Load);
+                               ((ISupportInitialize)(this.dataGrid1)).EndInit ();
+                               this.ResumeLayout (false);
+
+                       }
+
+                       private void Form1_Load (object sender, EventArgs e)
+                       {
+                               DataSet ds = new DataSet ();
+                               String XMLString = "";
+                               XmlTextReader XMLTR;
+
+                               XMLString += "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>";
+                               XMLString += "<pa><pb><pc><pd><id>1</id>";
+                               XMLString += "</pd></pc><pc><pd><id>1</id>";
+                               XMLString += "</pd><pd><id>1</id></pd><pd>";
+                               XMLString += "<id>1</id></pd><pd><id>1</id>";
+                               XMLString += "</pd><pd><id>1</id></pd><pd>";
+                               XMLString += "<id>1</id></pd><pd><id>1</id>";
+                               XMLString += "</pd><pd><id>1</id></pd></pc>";
+                               XMLString += "</pb></pa>";
+                               XMLTR = new XmlTextReader (XMLString,
+                                       XmlNodeType.Document, null);
+                               XMLTR.ReadOuterXml ();
+                               ds.ReadXml (XMLTR);
+                               this.dataGrid1.DataSource = ds;
+                               this.dataGrid1.ClickGrid (25, 45);
+                               Application.DoEvents ();
+                               this.dataGrid1.ClickGrid (46, 73);
+                               Application.DoEvents ();
+                               this.dataGrid1.NavigateBack ();
+                               Close ();
+                       }
+               }
+               [Test]
+               public void Bug5487AndRelated ()
+               {
+                       //this should crash on fail
+                       Application.Run (new Form5487 ());
+               }
        }
 }