GitHub user laimis opened a pull request:

    https://github.com/apache/lucenenet/pull/29

    change implementation so that Read overrides behave as expected

    Discovered this issue while running Lucene.Net.Analysis\TestGraphTokenizers 
tests. From time to time an assert would fail at this location:
    
    
https://github.com/apache/lucenenet/blob/master/src/Lucene.Net.TestFramework/Analysis/BaseTokenStreamTestCase.cs#L964
    
    The idea here is to randomly simulate an exception being thrown when token 
stream is being iterated. Instead of "evil exception" being thrown, the 
following assert would fail:
    
    
https://github.com/apache/lucenenet/blob/master/src/Lucene.Net.TestFramework/Analysis/MockReaderWrapper.cs#L92
    
    
    The underlying problem is the implementation of MockReaderWrapper in C#. It 
was not exactly a 1-to-1 map to the Java version due to framework differences 
and bug was introduced in MockReaderWrapper constructor:
    
    
https://github.com/apache/lucenenet/blob/master/src/Lucene.Net.TestFramework/Analysis/MockReaderWrapper.cs#L43
    
    StringReader's ReadToEnd() gets called advancing the iterator to the end. 
When the actual token stream iteration tries to read the stream, 0 is returned 
as the underlying text stream has been already iterated by the "ReadToEnd" call 
in the constructor. Furthermore, MockReaderWrapper should override Read() 
method as to make sure that all the possible ways that the reader is being used 
are covered (see 
https://github.com/apache/lucenenet/blob/master/src/Lucene.Net.TestFramework/Analysis/MockTokenizer.cs#L242
 how it can call Read with no params).
    
    Also changed the way MockReader is initialized, instead of new 
StringReader, text string is passed to it directly. That seemed to make the 
most sense as there does not appear to be the need to create new stream reader 
on the same text just to extract that text again.
    
    TestGraphTokenizers still occassionally fail but that appears to be due to 
another bug that gets invoked radomly and is yet to be determined what is the 
cause of it. Taking care of this "evil exception" branch gets us moving forward 
in that investigation.

You can merge this pull request into a Git repository by running:

    $ git pull https://github.com/laimis/lucenenet MockReaderWrapper_fixes

Alternatively you can review and apply these changes as the patch at:

    https://github.com/apache/lucenenet/pull/29.patch

To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:

    This closes #29
    
----
commit 6b169565f88b5a776ff12ed460e7fb5d00a5468e
Author: Laimonas Simutis <[email protected]>
Date:   2014-12-27T16:42:39Z

    change implementation so that Read overrides behave as expected

----


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at [email protected] or file a JIRA ticket
with INFRA.
---

Reply via email to