def test_bracket(self): w = repl.REPL(None) self.assertEqual(w.brackets(5), tuple(w.state['stakes'][0:2])) self.assertEqual(w.brackets(len(w.buf)), (w.state['stakes'][-1], (None, None))) self.assertEqual(w.brackets(0), tuple(w.state['stakes'][0:2])) l = len(w.buf) w.cursor.insert('data') m = len(w.buf) w.output('output') OUTPUT = [repl.OUTPUT_START, repl.OUTPUT_END] INPUT = [repl.OUTPUT_END, repl.OUTPUT_START] TAIL = [repl.OUTPUT_END, None] self.assertEqual([x[1] for x in w.brackets(0)], OUTPUT) self.assertEqual([x[1] for x in w.brackets(1)], OUTPUT) self.assertEqual([x[1] for x in w.brackets(l)], INPUT) self.assertEqual([x[1] for x in w.brackets(l + 1)], INPUT) self.assertEqual([x[1] for x in w.brackets(m)], OUTPUT) self.assertEqual([x[1] for x in w.brackets(m + 1)], OUTPUT) self.assertEqual([x[1] for x in w.brackets(len(w.buf))], TAIL) w.cursor.point = len(w.buf) self.assertTrue(w.writable(0)) w.cursor.point = l self.assertTrue(w.writable(0)) w.cursor.point = 0 self.assertFalse(w.writable(0)) w.cursor.point = l self.assertTrue(w.writable(0)) w.toggle_writable() self.assertFalse(w.writable(0))
def test_go(self): w = repl.REPL(mocks.FE()) w.log.debug('A: %s', repr(w.buf[:])) w.insert('2 + 2') w.log.debug('B: %s', repr(w.buf[:])) earlier = w.cursor.point w.go() w.log.debug('C: %s', repr(w.buf[:])) result = '\n' + str(4) + '\n' + w.state['ps1'] self.assertEqual(w.buf[-len(result):], result) self.assertEqual(w.state['in'][0], '2 + 2') self.assertEqual(w.state['out'][0], 4) t = 'def flurb():' w.insert(t) w.log.debug('D: %s', repr(w.buf[:])) w.go() self.assertEqual(w.context._message, 'incomplete input') w.log.debug('E before go2: %s', repr(w.buf[:])) w.go2() w.log.debug('F after go2: %s', repr(w.buf[:])) self.assertEqual(w.buf[-(len(t) + 1):], t + '\n') w.cursor.point = earlier w.go() result = result + t + '\n' self.assertEqual(w.buf[-len(result):], result) self.assertEqual(w.state['in'][1], '2 + 2') self.assertEqual(w.state['out'][1], 4)
def test_output0(self): w = repl.REPL(None) self.assertEqual(len(w.state['stakes']), 2) self.assertEqual(w.state['stakes'][0][1], repl.OUTPUT_START) self.assertEqual(w.state['stakes'][1][1], repl.OUTPUT_END) w.cursor.insert('foo\n') w.output('bar ') w.output('baz: ') self.assertEqual(len(w.state['stakes']), 4) self.assertEqual(w.state['stakes'][2][1], repl.OUTPUT_START) self.assertEqual(w.state['stakes'][3][1], repl.OUTPUT_END)
def test_func(self): w = repl.REPL(mocks.FE()) w.insert('def func():\n return 2+2\n') w.go() w.insert('func()') w.go() self.assertEqual(w.state['out'][1], 4) w.insert('''def fib(n): if n < 2: return n return fib(n - 2) + fib(n - 1)\n''') w.go() w.insert('fib(6)') w.go() self.assertEqual(w.state['out'][3], 8)
def test_bol(self): w = repl.REPL(None) w.insert('foo') w.beginning_of_line() bol = w.cursor.point self.assertEqual(w.buf[bol:], w.state['ps1'] + 'foo') w.end_of_line() w.electric_beginning_of_line() self.assertEqual(w.cursor.point, bol) w.end_of_line() w.electric_beginning_of_line(interactive=True) self.assertEqual(w.cursor.point, bol + len(w.state['ps1'])) w.electric_beginning_of_line(interactive=True) self.assertEqual(w.cursor.point, bol) w.electric_beginning_of_line(interactive=True) self.assertEqual(w.cursor.point, bol)
def test_go(self): w = repl.REPL(mocks.FE()) w.cursor.insert('2 + 2') earlier = w.cursor.point w.go() result = '\n' + str(4) + '\n' + w.ps1 self.assertEqual(w.buf[-len(result):], result) self.assertEqual(w.in_[0], '2 + 2') self.assertEqual(w.out_[0], 4) t = 'def flurb():' w.cursor.insert(t) w.go() self.assertEqual(w.context._message, 'incomplete input') w.go2() self.assertEqual(w.buf[-(len(t) + 1):], t + '\n') w.cursor.point = earlier w.go() result = result + t + '\n' self.assertEqual(w.buf[-len(result):], result) self.assertEqual(w.in_[1], '2 + 2') self.assertEqual(w.out_[1], 4)
def test_result(self): w = repl.REPL(mocks.FE()) w.insert('import sys') w.go() self.assertEqual(w.state['out'][0], None)
def test_title(self): w = repl.REPL(None) self.assertRegex(w.title(), r'^REPL\[\d\]+ \[0\]$')