1from __future__ import unicode_literals 2 3from prompt_toolkit.buffer import Buffer 4 5import pytest 6 7 8@pytest.fixture 9def _buffer(): 10 return Buffer() 11 12 13def test_initial(_buffer): 14 assert _buffer.text == '' 15 assert _buffer.cursor_position == 0 16 17 18def test_insert_text(_buffer): 19 _buffer.insert_text('some_text') 20 assert _buffer.text == 'some_text' 21 assert _buffer.cursor_position == len('some_text') 22 23 24def test_cursor_movement(_buffer): 25 _buffer.insert_text('some_text') 26 _buffer.cursor_left() 27 _buffer.cursor_left() 28 _buffer.cursor_left() 29 _buffer.cursor_right() 30 _buffer.insert_text('A') 31 32 assert _buffer.text == 'some_teAxt' 33 assert _buffer.cursor_position == len('some_teA') 34 35 36def test_backspace(_buffer): 37 _buffer.insert_text('some_text') 38 _buffer.cursor_left() 39 _buffer.cursor_left() 40 _buffer.delete_before_cursor() 41 42 assert _buffer.text == 'some_txt' 43 assert _buffer.cursor_position == len('some_t') 44 45 46def test_cursor_up(_buffer): 47 # Cursor up to a line thats longer. 48 _buffer.insert_text('long line1\nline2') 49 _buffer.cursor_up() 50 51 assert _buffer.document.cursor_position == 5 52 53 # Going up when already at the top. 54 _buffer.cursor_up() 55 assert _buffer.document.cursor_position == 5 56 57 # Going up to a line that's shorter. 58 _buffer.reset() 59 _buffer.insert_text('line1\nlong line2') 60 61 _buffer.cursor_up() 62 assert _buffer.document.cursor_position == 5 63 64 65def test_cursor_down(_buffer): 66 _buffer.insert_text('line1\nline2') 67 _buffer.cursor_position = 3 68 69 # Normally going down 70 _buffer.cursor_down() 71 assert _buffer.document.cursor_position == len('line1\nlin') 72 73 # Going down to a line that's storter. 74 _buffer.reset() 75 _buffer.insert_text('long line1\na\nb') 76 _buffer.cursor_position = 3 77 78 _buffer.cursor_down() 79 assert _buffer.document.cursor_position == len('long line1\na') 80 81 82def test_join_next_line(_buffer): 83 _buffer.insert_text('line1\nline2\nline3') 84 _buffer.cursor_up() 85 _buffer.join_next_line() 86 87 assert _buffer.text == 'line1\nline2 line3' 88 89 # Test when there is no '\n' in the text 90 _buffer.reset() 91 _buffer.insert_text('line1') 92 _buffer.cursor_position = 0 93 _buffer.join_next_line() 94 95 assert _buffer.text == 'line1' 96 97 98def test_newline(_buffer): 99 _buffer.insert_text('hello world') 100 _buffer.newline() 101 102 assert _buffer.text == 'hello world\n' 103 104 105def test_swap_characters_before_cursor(_buffer): 106 _buffer.insert_text('hello world') 107 _buffer.cursor_left() 108 _buffer.cursor_left() 109 _buffer.swap_characters_before_cursor() 110 111 assert _buffer.text == 'hello wrold' 112