<div dir="ltr">Hi,<div><br></div><div><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<div dir="ltr"><br>I've discovered the directory /mono/mcs/class/corlib/Test/System.Text just now ... I never noticed it before, sorry.<br><br>The problem with my tests is that they are written for comparing its output against the output of an existing reference runtime (in this moment ms-net). I will take a look to the existing UTF8EncodingTest.cs (and others), and I will try to add more test cases to cover the bugs that I reported and some other problems that I saw in the old implementation.<br>

<br>As you can imagine I'm not very familiarized with the Mono sources, and I haven't found a mono tests' policy (how tests are integrated, best practices, etc), how the test mechanism is used (other description more specific for the mono case than than <a href="http://nunit.com/" target="_blank">http://nunit.com/</a> web page), ... So any help like docs, links... will be useful :D<br>
</div></blockquote><div><br></div><div style>You can find general Mono tests page here <a href="http://www.mono-project.com/Test_Suite">http://www.mono-project.com/Test_Suite</a></div><div style><br></div><div style>Marek</div>
<div style><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div class=""><div class="h5"><div class="gmail_extra">
<br><div class="gmail_quote">On Mon, Apr 29, 2013 at 6:48 PM, Marek Safar <span dir="ltr"><<a href="mailto:marek.safar@gmail.com" target="_blank">marek.safar@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr">Hi Gerardo,<div><br></div><div>This is very good Mono improvement. Could change your tests to fit mono nunit test style. It should not be too hard if you need guidance let me know or look how it's done for other mono parts.</div>


<div><br></div><div>Secondly to make the review and merge easier for us could you send pull request with your changes.</div><div><br></div><div>Thanks</div><div>Marek<br><div class="gmail_extra"><br><div class="gmail_quote">


<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div><div><div dir="ltr">I am Gerardo García Peña and I'm new in this list.<br>
<br>Some months ago started working with mono in a project which demands a very precise manipulation of UTF8 (and other encodings) streams. When I started to write code I observed that the mono UTF8 implementation is very buggy, while the <a href="http://MS.NET" target="_blank">MS.NET</a> implementation is quite good. Then I started to isolate the bugs and filled some bugs in the Ximian's bugzilla [1] [2]. They're still there and unfixed, but I think they are important: an incompatibility in the text codec subsystems virtually affects any application that need portability between Microsoft and Mono platforms. Specially from the data integrity point of view, and in some cases availability security issues (indexes and counters reported by the conversion methods and throwed exceptions could make apps running on the Mono environment to enter into infinite loops, making apps running on the mono runtime vulnerable to DoS attacks).<br>



<br>The bugs are still there (unresolved), and during this time I have found some more, so I decided to start patching the UTF8 libraries (and in the future, if this patch is accepted, I will continue working on other buggy codec that appears).<br>



<br>The patch that I propose is an important modification of the file /mono/mcs/class/corlib/System.Text/UTF8Encoding.cs and some minor changes in other generic classes in System.Text. The targets of my patch are the following:<br>



<br>  - give a complete and good quality UTF8 coder & decoder implementation,<br>  - at least it is as much efficient as the old implementation,<br>  - better error handling and quick resync when bad sequences are found,<br>



  - fix the index field in the Fallback exceptions (it is a key feature if one<br>    program want to handle strings with errors),<br>  - refactorize and make code more maintainable,<br>  - full compatibility with the .NET implementation (behaviour is exactly the<br>



    same in front of bad and good sequences),<br>  - complete some pending or incomplete features (MonoTODO) like<br>    Encoder::FallbackException::IsUnknownSurrogate() or use of BOM<br>    preambles.<br><br>Please note that in spite of presenting a full-compatible implementation of this codec with the Microsoft implementation, my changes are not based on Microsoft's work, and they are totally written from scratch. I have not reversed any code and the behaviour of my patches has been tunned using an extensive and exhaustive test case.<br>



<br>My test case uses several public UTF8 test cases and one specific and giant UTF16 test case built automatically. The test case must be executed first on the Mono runtime environment and once again on the Microsoft runtime. The output of the test case are two directories (one for mono, another for net) documenting the output of (and exceptions thrown) the Convert() method. Once both executions are finished, it should not exist any difference between the<br>



two output directories.<br><br>The test case is focused only on the Convert() method because it allows to test any variation of the input. My implementation (and probably Microsoft's too) is based on two coder/decoder functions that are called by all the other public methods. Because that reason the best way to test both implementations is using the method that exposes more directly the internal decoder/encoder.<br>



<br>I posted the changes and my test suite in a github branch, and I also have attached them to this mail (if you want to test it quickly without doing any git operation):<br><br>  - mono branch with my patches<br>    <a href="https://github.com/killabytenow/mono" target="_blank">https://github.com/killabytenow/mono</a><br>



<br>  - test suite<br>    <a href="https://github.com/killabytenow/mono-System.Text.UTF8Encoding-test" target="_blank">https://github.com/killabytenow/mono-System.Text.UTF8Encoding-test</a><br><br>To run the test suite, run the makefile and then execute the program convert.exe in the two platforms. You'll get a 'cnvout-mono' and 'cnvout-other' directories which will contain the output of each test run. Once they have finished run the 'mkdiff.sh' shell script. This script will make a 'cnvout-diff' directory, which should be empty if all files are equal.<br>



<br>I know that it is an important patch because it affects the corlib libraries which are critical for the Mono runtime. If you have any question or note about the code, or if I can do anything to improve this patch, I will be glad to help.<br>



<br>Thanks in advance,<br>Gerardo García Peña<br><br>[1] 10692 <a href="https://bugzilla.xamarin.com/show_bug.cgi?id=10692" target="_blank">https://bugzilla.xamarin.com/show_bug.cgi?id=10692</a><br>[2] 10697 <a href="https://bugzilla.xamarin.com/show_bug.cgi?id=10697" target="_blank">https://bugzilla.xamarin.com/show_bug.cgi?id=10697</a><br>



</div>
<br></div></div>_______________________________________________<br>
Mono-devel-list mailing list<br>
<a href="mailto:Mono-devel-list@lists.ximian.com" target="_blank">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></blockquote></div><br></div></div></div>
</blockquote></div><br></div>
</div></div></blockquote></div><br></div></div></div>