<html><body><div style="color:#000; background-color:#fff; font-family:times new roman, new york, times, serif;font-size:12pt"><div><span>Re: patch 1, I have an idea.  Take the unit-test code and run it as an application, and put a call to "Console.WriteLine (Environment.StackTrace)" in the event-handler.  If the EditingControlShowing event isn't being called from my patched code, I'd like to know where it's being called from.</span></div><div><br><span></span></div><div><span>And I'll go ahead and write unit tests for patches 2, 4, 5, and 7, if I can figure out some.</span></div><div><br><span></span></div><div><span>Steven Boswell<br></span></div><div><br></div>  <div style="font-family: times new roman, new york, times, serif; font-size: 12pt;"> <div style="font-family: times new roman, new york, times, serif; font-size: 12pt;"> <div dir="ltr"> <font face="Arial" size="2"> <hr size="1">  <b><span style="font-weight:bold;">From:</span></b>
 Stifu <stifu@free.fr><br> <b><span style="font-weight: bold;">To:</span></b> mono-devel-list@lists.ximian.com <br> <b><span style="font-weight: bold;">Sent:</span></b> Sunday, June 3, 2012 11:03 PM<br> <b><span style="font-weight: bold;">Subject:</span></b> Re: [Mono-dev] Patches for mono-winforms<br> </font> </div> <br>"Also, as far as I can tell, patches 2, 4, and 5 are really small, and defy<br>the creation of unit tests anyway -- it should be enough for someone<br>knowledgeable about WinForms to decide if these changes are correct."<br><br>No matter how small these patches are, and no matter if they're obviously<br>correct. If something can be tested, it should be tested. :) I've committed<br>several one-line patches, each of them coming with their unit test, so I've<br>spent more time writing tests than fixes.<br><br>This also ensures that no one breaks the tests / feature later on, by<br>working on the code, trying to fix another bug, moving
 code around,<br>refactoring... I guess you could easily come up with various stats showing<br>that fixes without tests are XX% more likely to get broken again later.<br>Tests also ensure we're on the same level across all OSes or machine type<br>(for example, we could imagine patch number X does not fix the bug on Mac<br>for some reason, and so this problem would be detected thanks to the test).<br>To sum things up, tests are what makes a framework mature and reliable.<br>Without them, you're just applying temporary patches.<br><br>I'll check all of this out when I have more time. And I don't mind coming up<br>with the tests myself, if I can figure out something. As for patch 1, I'll<br>just check if I can reproduce the bug on Linux.<br><br><br>Steven Boswell II wrote<br>> <br>> Yes, the unit test fails for me without my patch -- I made darn sure of<br>> that after wasting your time. ;-)  The additions to my unit test ensure<br>> that
 the EditingControlShowing event is getting called.  Without my patch,<br>> Mono never calls that event.  So if it's succeeding for you...I'm totally<br>> lost.<br>> <br>> Let me know if you need any more info, or any other changes, so that you<br>> can commit patch 3.<br>> <br>> Also, as far as I can tell, patches 2, 4, and 5 are really small, and defy<br>> the creation of unit tests anyway -- it should be enough for someone<br>> knowledgeable about WinForms to decide if these changes are correct.  I<br>> know that it brings Mono's behavior in line with .NET.  Please let me know<br>> if I should do anything else with these patches.<br>> <br>> For the time being, I seem to be out of bugs, and am working on<br>> annoyances...that's a good sign. :-)  Enclosed is my latest change;<br>> there's no unit test because it requires user interaction to even see the<br>> problem.  Before,
 getting a data-grid-view combo-box to drop down its menu<br>> took three mouse-clicks.  Now, it only takes one.  This brings the<br>> behavior in line with .NET.  Let me know what you think of this change.<br>> <br>> Steven Boswell<br>> <br>> <br>> ________________________________<br>>  From: Stifu &lt;stifu@&gt;<br>> To: mono-devel-list@.ximian <br>> Sent: Sunday, June 3, 2012 3:20 PM<br>> Subject: Re: [Mono-dev] Patches for mono-winforms<br>>  <br>> Nope, I still can't get the tests to fail. :\<br>> Does it fail for you (when unpatched)? It's possible the bug doesn't<br>> affect<br>> Mono on Windows, but I'd like to make sure of it.<br>> <br>> Can't see anything wrong with patch 3 at first sight.<br>> <br>> <br>> Steven Boswell II wrote<br>>> <br>>> Sorry about that.  I've added code to make sure the event-handler gets<br>>> called.
  Enclosed is another attempt.<br>>> Also, do you have any further comments about patch 3?  For your<br>>> convenience, I've enclosed another copy.<br>>> <br>>> <br>>> ________________________________<br>>>  From: Stifu &lt;stifu@&gt;<br>>> To: mono-devel-list@.ximian <br>>> Sent: Sunday, June 3, 2012 8:58 AM<br>>> Subject: Re: [Mono-dev] Patches for mono-winforms<br>>>  <br>>> I checked out your unit tests for patch 1.<br>>> On Mono on Windows, they already pass even without your patch. I cannot<br>>> check Linux right now.<br>>> <br>>> Have you double checked that your tests fail without your patch?<br>>> Thanks for clearing that up.<br>>> <br>>> <br>>> Steven Boswell II wrote<br>>>> <br>>>> Crap, I didn't notice that InitializeEditingControl() was public.<br>>>> <br>>>> My
 whole motivation for splitting up that method was to make sure that<br>>>> the<br>>>> style modified by the EditingControlShowing event-handler would be<br>>>> applied<br>>>> to the cell.  But that's done a few lines later, by the call to<br>>>> "dgvEditingControl.ApplyCellStyleToEditingControl (style)".  Argh.<br>>>> <br>>>> In any case, enclosed is a much simpler patch that doesn't change the<br>>>> public API.  Hopefully I didn't do anything else stupid -- I'm truly not<br>>>> trying to waste your time. ;-)<br>>>> <br>>>> Steven Boswell<br>>>> <br>>>> <br>>>> ________________________________<br>>>>  From: Stifu &lt;stifu@&gt;<br>>>> To: mono-devel-list@.ximian <br>>>> Sent: Sunday, June 3, 2012 1:33 AM<br>>>> Subject: Re: [Mono-dev] Patches for
 mono-winforms<br>>>>  <br>>>> This patch does not look good to me, because you're changing the public<br>>>> API.<br>>>> <br>>>> In DataGridViewCell, the InitializeEditingControl method expects 2<br>>>> parameters rather than 3 after your patch, which means we're breaking<br>>>> the<br>>>> API and are no longer compatible with .NET.<br>>>> <br>>>> <br>>>> Steven Boswell II wrote<br>>>>> <br>>>>> Argh...one more dumb oversight in my change.<br>>>>> Enclosed is ANOTHER version of the patch.<br>>>>> I wish I had the luxury of working on my hobbies when I was awake and<br>>>>> energetic. ;-)<br>>>>> <br>>>>> Steven Boswell<br>>>>> <br>>>>> <br>>>>> ________________________________<br>>>>>  From: Steven Boswell II
 &lt;ulatekh@&gt;<br>>>>> To: "mono-devel-list@.ximian" &lt;mono-devel-list@.ximian&gt; <br>>>>> Sent: Saturday, June 2, 2012 7:58 PM<br>>>>> Subject: Re: [Mono-dev] Patches for mono-winforms<br>>>>>  <br>>>>> <br>>>>> Rob, you're my hero.  Very few tests in DataGridViewTest.cs create a<br>>>>> Form,<br>>>>> but most of the ones that do involve data binding.<br>>>>> I added a Form to my test, and it succeeded immediately.  Apparently,<br>>>>> Application.Run() isn't necessary, but that was a good idea.<br>>>>> Enclosed is a revised patch, for review by the Powers That Be.<br>>>>> <br>>>>> Steven Boswell<br>>>>> <br>>>>> <br>>>>> ________________________________<br>>>>>  From: Rob Wilkens
 &lt;robwilkens@&gt;<br>>>>> To: mono-devel-list@.ximian <br>>>>> Sent: Saturday, June 2, 2012 6:46 PM<br>>>>> Subject: Re: [Mono-dev] Patches for mono-winforms<br>>>>>  <br>>>>> <br>>>>> On 06/02/2012 09:38 PM, Rob Wilkens wrote: <br>>>>> On 06/02/2012 08:55 PM, Steven Boswell II wrote: <br>>>>>>The EditingControlShowing event has to be called, and it has to be<br>> called<br>>>> after the control's contents have been initialized properly...that's not<br>>>> really two separate issues.<br>>>>>>><br>>>>>>><br>>>>>>>The enclosed patch is an updated version; in addition to having a unit<br>>>> test, it fixes one additional bug revealed by my testing. Before,<br>>>> DataGridViewComboBoxCell.InitializeEditingControl() was setting the<br>>>>
 initial<br>>>> value from the FormattedValue property, instead of<br>>>> the initialFormattedValue<br>>>> parameter.<br>>>>>>><br>>>>>>><br>>>>>>>I tried to write an additional unit test that worked with bound data,<br>>> but<br>>>> for the life of me I can't figure out why it doesn't work.  I've done<br>>>> data-binding with DataGridView before...it wasn't this mysterious.  In<br>>>> my<br>>>> unit test, after I set the DataGridView's DataSource property, the<br>>>> data-grid<br>>>> doesn't initialize properly; instead of four rows, it ends up with one<br>>>> row,<br>>>> and all its cell values are null.  After beating my head against the<br>>>> wall<br>>>> for several hours, I'm perfectly happy to be told what a moron I am, if<br>>>> someone
 will just tell me why the EditingControlShowingTest_Bound test<br>>>> doesn't work. :-)<br>>>>>>><br>>>>>>><br>>>>>>>Steven Boswell<br>>>>>>><br>>>>>>Not writing to call you a moron, I'm a newbie myself and i could<br>>>>>       be wrong...  But i copied and pasted your test code for<br>>>>>       EditingControlShowingTest_Bound into Visual Studio 2010, but<br>>>>>       rather than creating the DataGridVIew in code i placed it on the<br>>>>>       form and modified your code to use the one on the form...  And i<br>>>>>       disabled the asserts...  And from what i can tell it runs fine in<br>>>>>       both .net and mono (that is, the data grid view
 populates).<br>>>>>><br>>>>>>One thing that I noticed about your code, though, is it depends on<br>>>>>       a 'showing' event..<br>>>>>><br>>>>>>And i wonder if that means your datagridview needs to be placed on<br>>>>>       a form which is displayed, so that it is actually shown...<br>>>>>><br>>>>>>i.e. change your code something like this:<br>>>>>><br>>>>>>using (Form Form1=new Form()){<br>>>>>>    Form1.Controls.Add(_dataGridView);//optionaly set sizeand<br>>>>>       location of both gridview and form<br>>>>>>    Form1.Show();<br>>>>>><br>>>>>>    ... insert the rest of your code here ....
 <br>>>>>>}<br>>>>>><br>>>>> Oh, and if i'm right, you might need the equivalent of an<br>>>>> Application.Run(Form1) to process the events since you're listening for<br>>>>> events, just don't forget to close Form1 or the Run loop might never<br>>>>> end<br>>>>> and your test can hang up with a displayed window...<br>>>>> <br>>>>> <br>>>>> <br>>>>> _______________________________________________<br>>>>> Mono-devel-list mailing list<br>>>>> Mono-devel-list@.ximian<br>>>>> <a href="http://lists.ximian.com/mailman/listinfo/mono-devel-list" target="_blank">http://lists.ximian.com/mailman/listinfo/mono-devel-list</a><br>>>>> <br>>>>> <br>>>>> <br>>>>> _______________________________________________<br>>>>> Mono-devel-list
 mailing list<br>>>>> Mono-devel-list@.ximian<br>>>>> <a href="http://lists.ximian.com/mailman/listinfo/mono-devel-list" target="_blank">http://lists.ximian.com/mailman/listinfo/mono-devel-list</a><br>>>>> _______________________________________________<br>>>>> Mono-devel-list mailing list<br>>>>> Mono-devel-list@.ximian<br>>>>> <a href="http://lists.ximian.com/mailman/listinfo/mono-devel-list" target="_blank">http://lists.ximian.com/mailman/listinfo/mono-devel-list</a><br>>>>> <br>>>> <br>>>> --<br>>>> View this message in context:<br>>>> <a href="http://mono.1490590.n4.nabble.com/Patches-for-mono-winforms-tp4649620p4649670.html" target="_blank">http://mono.1490590.n4.nabble.com/Patches-for-mono-winforms-tp4649620p4649670.html</a><br>>>> Sent from the Mono - Dev mailing list archive at Nabble.com.<br>>>>
 _______________________________________________<br>>>> Mono-devel-list mailing list<br>>>> Mono-devel-list@.ximian<br>>>> <a href="http://lists.ximian.com/mailman/listinfo/mono-devel-list" target="_blank">http://lists.ximian.com/mailman/listinfo/mono-devel-list</a><br>>>> _______________________________________________<br>>>> Mono-devel-list mailing list<br>>>> Mono-devel-list@.ximian<br>>>> <a href="http://lists.ximian.com/mailman/listinfo/mono-devel-list" target="_blank">http://lists.ximian.com/mailman/listinfo/mono-devel-list</a><br>>>> <br>>> <br>>> <br>>> --<br>>> View this message in context:<br>>> <a href="http://mono.1490590.n4.nabble.com/Patches-for-mono-winforms-tp4649620p4649674.html" target="_blank">http://mono.1490590.n4.nabble.com/Patches-for-mono-winforms-tp4649620p4649674.html</a><br>>> Sent from the Mono - Dev mailing list archive
 at Nabble.com.<br>>> _______________________________________________<br>>> Mono-devel-list mailing list<br>>> Mono-devel-list@.ximian<br>>> <a href="http://lists.ximian.com/mailman/listinfo/mono-devel-list" target="_blank">http://lists.ximian.com/mailman/listinfo/mono-devel-list</a><br>>> _______________________________________________<br>>> Mono-devel-list mailing list<br>>> Mono-devel-list@.ximian<br>>> <a href="http://lists.ximian.com/mailman/listinfo/mono-devel-list" target="_blank">http://lists.ximian.com/mailman/listinfo/mono-devel-list</a><br>>> <br>> <br>> <br>> --<br>> View this message in context:<br>> <a href="http://mono.1490590.n4.nabble.com/Patches-for-mono-winforms-tp4649620p4649683.html" target="_blank">http://mono.1490590.n4.nabble.com/Patches-for-mono-winforms-tp4649620p4649683.html</a><br>> Sent from the Mono - Dev mailing list archive at Nabble.com.<br>>
 _______________________________________________<br>> Mono-devel-list mailing list<br>> Mono-devel-list@.ximian<br>> <a href="http://lists.ximian.com/mailman/listinfo/mono-devel-list" target="_blank">http://lists.ximian.com/mailman/listinfo/mono-devel-list</a><br>> _______________________________________________<br>> Mono-devel-list mailing list<br>> Mono-devel-list@.ximian<br>> <a href="http://lists.ximian.com/mailman/listinfo/mono-devel-list" target="_blank">http://lists.ximian.com/mailman/listinfo/mono-devel-list</a><br>> <br><br>--<br>View this message in context: <a href="http://mono.1490590.n4.nabble.com/Patches-for-mono-winforms-tp4649620p4649691.html" target="_blank">http://mono.1490590.n4.nabble.com/Patches-for-mono-winforms-tp4649620p4649691.html</a><br>Sent from the Mono - Dev mailing list archive at Nabble.com.<br>_______________________________________________<br>Mono-devel-list mailing list<br><a
 ymailto="mailto:Mono-devel-list@lists.ximian.com" href="mailto:Mono-devel-list@lists.ximian.com">Mono-devel-list@lists.ximian.com</a><br><a href="http://lists.ximian.com/mailman/listinfo/mono-devel-list" target="_blank">http://lists.ximian.com/mailman/listinfo/mono-devel-list</a><br><br><br> </div> </div>  </div></body></html>