PYHMES4Z6NKRSUTY53EH5I5S553CLWCTILN3QHJX6WWRL5IHJXUQC
76XOJEND6OWBWA7V6YXTQV2NP5SVVMLVZCCINBWKOBJARSUWNJJQC
SWZAQHGRX3T5MZVM7YZ4EACZX5ON2NUZG5YXLWVEXLL3WZUZYAFQC
R5QXEHUIZLELJGGCZAE7ATNS3CLRJ7JFRENMGH4XXH24C5WABZDQC
KKMFQDR43ZWVCDRHQLWWX3FCWCFA3ZSXYOBRJNPHUQZR2XPKWULAC
ORRSP7FVCHI2TF5GXBRGQYYJAA3JFYXZBM3T663BKSBV22FCZVCAC
RNDKROV3B4W7AAJUB65JGHZZ66OX6KVBGHVWVZGIITBNZH2UE3CAC
OI4FPFINEROK6GNDEMOBTGSPYIULCLRGGT5W3H7VLM7VFH22GMWQC
LXTTOB33N2HCUZFIUDRQGGBVHK2HODRG4NBLH6RXRQZDCHF27BSAC
MD3W5IRAC6UQALQE4LJC52VQNDO3I3HXF3XE2XHDABXBYJBUVAXQC
BULPIBEGL7TMK6CVIE7IS7WGAHGOSUJBGJSFQK542MOWGHP2ADQQC
ZPUQSPQPQFVRUIHGLAWW3IDBYODIWDHO62HAC3WWF5TM3CIJGHNQC
PLKNHYZ4KXWWKC2DHXCI4WVO23I7VMEVYT5H2J6JDE4S3D3CHDJQC
JOPVPUSAMMU6RFVDQR4NJC4GNNUFB7GPKVH7OS5FKCYS5QZ53VLQC
QEXZHD2VPCM4TAPP7PR2K2PIR4BVES5IZWC3T6ZRNJWKWOXFILNQC
function test_up_arrow_skips_drawing()
-- some lines of text with a drawing intermixed
local drawing_width = 50
App.screen.init{width=Editor_state.left+drawing_width, height=100}
Editor_state = edit.initialize_test_state()
Editor_state.lines = load_array{'abc', -- height 15
'```lines', '```', -- height 25
'ghi'}
Text.redraw_all(Editor_state)
Editor_state.cursor1 = {line=3, pos=1}
Editor_state.screen_top1 = {line=1, pos=1}
Editor_state.screen_bottom1 = {}
edit.draw(Editor_state)
local y = Editor_state.top
App.screen.check(y, 'abc', 'baseline/screen:1')
y = y + Editor_state.line_height
local drawing_height = Drawing_padding_height + drawing_width/2 -- default
y = y + drawing_height
App.screen.check(y, 'ghi', 'baseline/screen:3')
check(Editor_state.cursor_x, 'baseline/cursor_x')
-- after hitting the up arrow the cursor moves up by 2 lines, skipping the drawing
edit.run_after_keychord(Editor_state, 'up')
check_eq(Editor_state.cursor1.line, 1, 'cursor')
end
function test_up_arrow_scrolls_up_by_one_line()
end
function test_down_arrow_skips_drawing()
-- some lines of text with a drawing intermixed
local drawing_width = 50
App.screen.init{width=Editor_state.left+drawing_width, height=100}
Editor_state = edit.initialize_test_state()
Editor_state.lines = load_array{'abc', -- height 15
'```lines', '```', -- height 25
'ghi'}
Text.redraw_all(Editor_state)
Editor_state.cursor1 = {line=1, pos=1}
Editor_state.screen_top1 = {line=1, pos=1}
Editor_state.screen_bottom1 = {}
edit.draw(Editor_state)
local y = Editor_state.top
App.screen.check(y, 'abc', 'baseline/screen:1')
y = y + Editor_state.line_height
local drawing_height = Drawing_padding_height + drawing_width/2 -- default
y = y + drawing_height
App.screen.check(y, 'ghi', 'baseline/screen:3')
check(Editor_state.cursor_x, 'baseline/cursor_x')
-- after hitting the down arrow the cursor moves down by 2 lines, skipping the drawing
edit.run_after_keychord(Editor_state, 'down')
check_eq(Editor_state.cursor1.line, 3, 'cursor')
end
function test_down_arrow_scrolls_down_by_one_line()
State.cursor1 = {line=new_cursor_line, posB=nil}
Text.populate_screen_line_starting_pos(State, State.cursor1.line)
local prev_line_cache = State.line_cache[State.cursor1.line]
local prev_screen_line_starting_pos = prev_line_cache.screen_line_starting_pos[#prev_line_cache.screen_line_starting_pos]
local prev_screen_line_starting_byte_offset = Text.offset(State.lines[State.cursor1.line].data, prev_screen_line_starting_pos)
local s = string.sub(State.lines[State.cursor1.line].data, prev_screen_line_starting_byte_offset)
State.cursor1.pos = prev_screen_line_starting_pos + Text.nearest_cursor_pos(s, State.cursor_x, State.left) - 1
break
end
State.cursor1 = {line=new_cursor_line, pos=nil}
Text.populate_screen_line_starting_pos(State, State.cursor1.line)
-- previous text line found, pick its final screen line
--? print('has multiple screen lines')
local screen_line_starting_pos = State.line_cache[State.cursor1.line].screen_line_starting_pos
--? print(#screen_line_starting_pos)
screen_line_starting_pos = screen_line_starting_pos[#screen_line_starting_pos]
local screen_line_starting_byte_offset = Text.offset(State.lines[State.cursor1.line].data, screen_line_starting_pos)
local s = string.sub(State.lines[State.cursor1.line].data, screen_line_starting_byte_offset)
State.cursor1.pos = screen_line_starting_pos + Text.nearest_cursor_pos(s, State.cursor_x, State.left) - 1
break
end
end
function test_down_arrow_skips_drawing()
-- some lines of text with a drawing intermixed
local drawing_width = 50
App.screen.init{width=Editor_state.left+drawing_width, height=100}
Editor_state = edit.initialize_test_state()
Editor_state.lines = load_array{'abc', -- height 15
'```lines', '```', -- height 25
'ghi'}
Text.redraw_all(Editor_state)
Editor_state.cursor1 = {line=1, pos=1}
Editor_state.screen_top1 = {line=1, pos=1}
Editor_state.screen_bottom1 = {}
edit.draw(Editor_state)
local y = Editor_state.top
App.screen.check(y, 'abc', 'baseline/screen:1')
y = y + Editor_state.line_height
local drawing_height = Drawing_padding_height + drawing_width/2 -- default
y = y + drawing_height
App.screen.check(y, 'ghi', 'baseline/screen:3')
check(Editor_state.cursor_x, 'baseline/cursor_x')
-- after hitting the down arrow the cursor moves down by 2 lines, skipping the drawing
edit.run_after_keychord(Editor_state, 'down')
check_eq(Editor_state.cursor1.line, 3, 'cursor')
function test_up_arrow_skips_drawing()
-- some lines of text with a drawing intermixed
local drawing_width = 50
App.screen.init{width=Editor_state.left+drawing_width, height=100}
Editor_state = edit.initialize_test_state()
Editor_state.lines = load_array{'abc', -- height 15
'```lines', '```', -- height 25
'ghi'}
Text.redraw_all(Editor_state)
Editor_state.cursor1 = {line=3, pos=1}
Editor_state.screen_top1 = {line=1, pos=1}
Editor_state.screen_bottom1 = {}
edit.draw(Editor_state)
local y = Editor_state.top
App.screen.check(y, 'abc', 'baseline/screen:1')
y = y + Editor_state.line_height
local drawing_height = Drawing_padding_height + drawing_width/2 -- default
y = y + drawing_height
App.screen.check(y, 'ghi', 'baseline/screen:3')
check(Editor_state.cursor_x, 'baseline/cursor_x')
-- after hitting the up arrow the cursor moves up by 2 lines, skipping the drawing
edit.run_after_keychord(Editor_state, 'up')
check_eq(Editor_state.cursor1.line, 1, 'cursor')
end
end
function test_down_arrow_skips_drawing()
-- some lines of text with a drawing intermixed
local drawing_width = 50
App.screen.init{width=Editor_state.left+drawing_width, height=100}
Editor_state = edit.initialize_test_state()
Editor_state.lines = load_array{'abc', -- height 15
'```lines', '```', -- height 25
'ghi'}
Text.redraw_all(Editor_state)
Editor_state.cursor1 = {line=1, pos=1}
Editor_state.screen_top1 = {line=1, pos=1}
Editor_state.screen_bottom1 = {}
edit.draw(Editor_state)
local y = Editor_state.top
App.screen.check(y, 'abc', 'baseline/screen:1')
y = y + Editor_state.line_height
local drawing_height = Drawing_padding_height + drawing_width/2 -- default
y = y + drawing_height
App.screen.check(y, 'ghi', 'baseline/screen:3')
check(Editor_state.cursor_x, 'baseline/cursor_x')
-- after hitting the down arrow the cursor moves down by 2 lines, skipping the drawing
edit.run_after_keychord(Editor_state, 'down')
check_eq(Editor_state.cursor1.line, 3, 'cursor')
function test_up_arrow_skips_drawing()
-- some lines of text with a drawing intermixed
local drawing_width = 50
App.screen.init{width=Editor_state.left+drawing_width, height=100}
Editor_state = edit.initialize_test_state()
Editor_state.lines = load_array{'abc', -- height 15
'```lines', '```', -- height 25
'ghi'}
Text.redraw_all(Editor_state)
Editor_state.cursor1 = {line=3, pos=1}
Editor_state.screen_top1 = {line=1, pos=1}
Editor_state.screen_bottom1 = {}
edit.draw(Editor_state)
local y = Editor_state.top
App.screen.check(y, 'abc', 'baseline/screen:1')
y = y + Editor_state.line_height
local drawing_height = Drawing_padding_height + drawing_width/2 -- default
y = y + drawing_height
App.screen.check(y, 'ghi', 'baseline/screen:3')
check(Editor_state.cursor_x, 'baseline/cursor_x')
-- after hitting the up arrow the cursor moves up by 2 lines, skipping the drawing
edit.run_after_keychord(Editor_state, 'up')
check_eq(Editor_state.cursor1.line, 1, 'cursor')
end