mock classes that imitate idlelib modules or classes attributes and methods will be added as needed for tests record call capture args returnraise result set by test when mock function is called set or use attributes self called increment call number even if no args kwds passed self args capture positional arguments self kwds capture keyword arguments self result return or raise value set in init self returnself return self instead to mock query class return most common use will probably be to mock instance methods given class instance can set and delete as instance attribute mocktk var and mboxfunc are special variants of this minimally imitate editor editorwindow class minimally imitate undo undodelegator class a real undo block is only needed for user interaction record call capture args return raise result set by test when mock function is called set or use attributes self called increment call number even if no args kwds passed self args capture positional arguments self kwds capture keyword arguments self result return or raise value set in __init__ self return_self return self instead to mock query class return most common use will probably be to mock instance methods given class instance can set and delete as instance attribute mock_tk var and mbox_func are special variants of this minimally imitate editor editorwindow class allow real text with mock editor minimally imitate undo undodelegator class a real undo block is only needed for user interaction
from idlelib.idle_test.mock_tk import Text

class Func:
    
    def __init__(self, result=None, return_self=False):
        self.called = 0
        self.result = result
        self.return_self = return_self
        self.args = None
        self.kwds = None
    def __call__(self, *args, **kwds):
        self.called += 1
        self.args = args
        self.kwds = kwds
        if isinstance(self.result, BaseException):
            raise self.result
        elif self.return_self:
            return self
        else:
            return self.result


class Editor:
    
    def __init__(self, flist=None, filename=None, key=None, root=None,
                 text=None):  
        self.text = text or Text()
        self.undo = UndoDelegator()

    def get_selection_indices(self):
        first = self.text.index('1.0')
        last = self.text.index('end')
        return first, last


class UndoDelegator:
    
    
    def undo_block_start(*args):
        pass
    def undo_block_stop(*args):
        pass