# -*- coding: utf-8 -*-
#*****************************************************************************
#       Copyright (C) 2006  Michael Graz. <mgraz@plan10.com>
#
#  Distributed under the terms of the BSD License.  The full license is in
#  the file COPYING, distributed as part of this software.
#*****************************************************************************
from __future__ import print_function, unicode_literals, absolute_import
from pyreadline.modes.emacs import *
from pyreadline import keysyms
from pyreadline.lineeditor import lineobj
from pyreadline.keysyms.common import make_KeyPress_from_keydescr

import unittest
class MockReadline:
    def __init__ (self):
        self.l_buffer=lineobj.ReadLineTextBuffer("")
        self._history=history.LineHistory()

    def add_history (self, line):
        self._history.add_history (lineobj.TextLine (line))

    def _print_prompt (self):
        pass

    def _bell (self):
        pass

    def insert_text(self, string):
        '''Insert text into the command line.'''
        self.l_buffer.insert_text(string)


class MockConsole:
    def __init__ (self):
        self.bell_count = 0
        self.text = ''

    def size (self):
        return (1, 1)

    def cursor(self, visible=None, size=None):
        pass

    def bell (self):
        self.bell_count += 1

    def write (self, text):
        self.text += text




class Event:
    def __init__ (self, char):
        if char=="escape":
            self.char='\x1b'
        elif char=="backspace":
            self.char='\x08'
        elif char=="tab":
            self.char='\t'
        elif char=="space":
            self.char=' '
        else:
            self.char = char

def keytext_to_keyinfo_and_event (keytext):
    keyinfo = keysyms.common.make_KeyPress_from_keydescr (keytext)
    if len(keytext) == 3 and keytext[0] == '"' and keytext[2] == '"':
        event = Event (keytext[1])
    else:
        event = Event (keyinfo.tuple() [3])
    return keyinfo, event



#override runTests from from main in unittest to remove sys.exit call
class Tester(unittest.TestProgram):
    def runTests(self):
        if self.testRunner is None:
            self.testRunner = unittest.TextTestRunner(verbosity=self.verbosity)
        result = self.testRunner.run(self.test)
#       sys.exit(not result.wasSuccessful())
