Terry J. Reedy added the comment:
I am dubious that the current code will work with tkinter. Marks name slice
positions. Tags name 0 to many pairs of slice positions, with 'sel' predefined
as corresponding to a mouse selection and limited to one pair. According to my
tests, tag_add('sel.first', None) adds a *new* tag that has nothing to do with
the 'sel' selection tag. Tag.first and tag.last, if not used themselves as tag
names, refer to the first and second slice positions of the first pair. Idle
only uses 'sel.first' and 'sel.last', which simplifies what we need in
Text._decode.
Experiments indicate that the two sel marks can be set with mark_set, in the
sense that the internal structures are set even though the editor screen is not
affected:
>>> t.mark_set('sel.first', 1.0)
>>> t.mark_set('sel.last', 1.3)
>>> e. get_selection_indices()
('1.0', '1.3')
'Find in files' indicates that Idle never does this. Except for two instances,
the only three marks set are 'insert', 'iomark', and 'my_anchor', which again
simplifies mock Text.
Once tests are running with Tk, we can comment out the tk use code (see
test_rstrip.py) and add to the mocks what is either needed, or appears reusable
for other tests, to make these tests pass again.
For instance, we could subclass mock_tk.Test to add test-specific methods with
either 'pass' or minimal specialized code needed.
*mock_idle.Editor:
To use the subclass of Test, one option would be a subclass of mock_idle.Editor
that uses the subclass of Text.
Editor.__init__.
Or we could add a parameter text_class to init that defaults to mock_tk.Text,
so we can inject a subclass thereof without subclassing Editor.
The two undo_block lines are ok but irrelevant until we can use mock test. You
might have mentioned that they are copied from EditorWindow. (The reason they
work is that EditorWindow().text is not tkinter.Text() but a Python wrapper
thereof.)
The purpose of get_selection_indices is to report the endpoints of the
user-selected slice of text. Normal users do so with the mouse. We will have to
do so by directly setting the return values. If I did not want to be able to
run the rests with tk, the following would be sufficient.
_selection = ('', '')
def get_selection_indices(self):
return self._selection
# with test code setting editor._selection = ('u.v', 'x.y')
However, since that will not work with tk, which as near as I can tell,
requires text.mark_set.
mock_tk.Text:
Any (non-trivial) changes to this and its tests should be a separate issue or
at least a separate patch.
In any case, the patch is wrong as it is. So are the ones for test_rstrip.py
and test_text.py.
----------
_______________________________________
Python tracker <[email protected]>
<http://bugs.python.org/issue18226>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com