Merge lines.love
This commit is contained in:
commit
46e568c4c5
4
app.lua
4
app.lua
|
@ -369,6 +369,7 @@ function App.run_tests()
|
|||
table.sort(sorted_names)
|
||||
for _,name in ipairs(sorted_names) do
|
||||
App.initialize_for_test()
|
||||
--? print('=== '..name)
|
||||
xpcall(_G[name], function(err) prepend_debug_info_to_test_failure(name, err) end)
|
||||
end
|
||||
-- clean up all test methods
|
||||
|
@ -380,9 +381,10 @@ end
|
|||
-- prepend file/line/test
|
||||
function prepend_debug_info_to_test_failure(test_name, err)
|
||||
local err_without_line_number = err:gsub('^[^:]*:[^:]*: ', '')
|
||||
local stack_trace = debug.traceback('', --[[stack frame]]5)
|
||||
local stack_trace = debug.traceback('', --[[stack frame]]4)
|
||||
local file_and_line_number = stack_trace:gsub('stack traceback:\n', ''):gsub(': .*', '')
|
||||
local full_error = file_and_line_number..':'..test_name..' -- '..err_without_line_number
|
||||
--? local full_error = file_and_line_number..':'..test_name..' -- '..err_without_line_number..'\t\t'..stack_trace:gsub('\n', '\n\t\t')
|
||||
table.insert(Test_errors, full_error)
|
||||
end
|
||||
|
||||
|
|
|
@ -426,6 +426,72 @@ function test_name_point()
|
|||
check_eq(p2.name, 'A', 'save')
|
||||
end
|
||||
|
||||
function test_name_point_then_hit_backspace()
|
||||
-- create a drawing with a line
|
||||
App.screen.init{width=Test_margin_left+256, height=300} -- drawing coordinates 1:1 with pixels
|
||||
Editor_state = edit.initialize_test_state()
|
||||
Editor_state.filename = 'foo'
|
||||
Editor_state.lines = load_array{'```lines', '```', ''}
|
||||
Text.redraw_all(Editor_state)
|
||||
Editor_state.current_drawing_mode = 'line'
|
||||
edit.draw(Editor_state)
|
||||
-- draw a line
|
||||
edit.run_after_mouse_press(Editor_state, Editor_state.left+5, Editor_state.top+Drawing_padding_top+6, 1)
|
||||
edit.run_after_mouse_release(Editor_state, Editor_state.left+35, Editor_state.top+Drawing_padding_top+36, 1)
|
||||
local drawing = Editor_state.lines[1]
|
||||
check_eq(#drawing.shapes, 1, 'baseline/#shapes')
|
||||
check_eq(#drawing.points, 2, 'baseline/#points')
|
||||
check_eq(drawing.shapes[1].mode, 'line', 'baseline/shape:1')
|
||||
local p1 = drawing.points[drawing.shapes[1].p1]
|
||||
local p2 = drawing.points[drawing.shapes[1].p2]
|
||||
check_eq(p1.x, 5, 'baseline/p1:x')
|
||||
check_eq(p1.y, 6, 'baseline/p1:y')
|
||||
check_eq(p2.x, 35, 'baseline/p2:x')
|
||||
check_eq(p2.y, 36, 'baseline/p2:y')
|
||||
check_nil(p2.name, 'baseline/p2:name')
|
||||
-- enter 'name' mode without moving the mouse
|
||||
edit.run_after_keychord(Editor_state, 'C-n')
|
||||
check_eq(Editor_state.current_drawing_mode, 'name', 'mode:1')
|
||||
-- hit backspace
|
||||
edit.run_after_keychord(Editor_state, 'backspace')
|
||||
-- no crash
|
||||
end
|
||||
|
||||
function test_name_point_then_exit_drawing()
|
||||
-- create a drawing with a line
|
||||
App.screen.init{width=Test_margin_left+256, height=300} -- drawing coordinates 1:1 with pixels
|
||||
Editor_state = edit.initialize_test_state()
|
||||
Editor_state.filename = 'foo'
|
||||
Editor_state.lines = load_array{'```lines', '```', ''}
|
||||
Text.redraw_all(Editor_state)
|
||||
edit.check_locs(Editor_state)
|
||||
Editor_state.current_drawing_mode = 'line'
|
||||
edit.draw(Editor_state)
|
||||
-- draw a line
|
||||
edit.run_after_mouse_press(Editor_state, Editor_state.left+5, Editor_state.top+Drawing_padding_top+6, 1)
|
||||
edit.run_after_mouse_release(Editor_state, Editor_state.left+35, Editor_state.top+Drawing_padding_top+36, 1)
|
||||
local drawing = Editor_state.lines[1]
|
||||
check_eq(#drawing.shapes, 1, 'baseline/#shapes')
|
||||
check_eq(#drawing.points, 2, 'baseline/#points')
|
||||
check_eq(drawing.shapes[1].mode, 'line', 'baseline/shape:1')
|
||||
local p1 = drawing.points[drawing.shapes[1].p1]
|
||||
local p2 = drawing.points[drawing.shapes[1].p2]
|
||||
check_eq(p1.x, 5, 'baseline/p1:x')
|
||||
check_eq(p1.y, 6, 'baseline/p1:y')
|
||||
check_eq(p2.x, 35, 'baseline/p2:x')
|
||||
check_eq(p2.y, 36, 'baseline/p2:y')
|
||||
check_nil(p2.name, 'baseline/p2:name')
|
||||
-- enter 'name' mode without moving the mouse
|
||||
edit.run_after_keychord(Editor_state, 'C-n')
|
||||
check_eq(Editor_state.current_drawing_mode, 'name', 'mode:1')
|
||||
-- click outside the drawing
|
||||
edit.run_after_mouse_click(Editor_state, App.screen.width-5, App.screen.height-5, 1)
|
||||
-- press a key
|
||||
edit.run_after_text_input(Editor_state, 'a')
|
||||
-- key goes to text
|
||||
check_eq(Editor_state.lines[2].data, 'a')
|
||||
end
|
||||
|
||||
function test_move_point()
|
||||
-- create a drawing with a line
|
||||
App.screen.init{width=Test_margin_left+256, height=300} -- drawing coordinates 1:1 with pixels
|
||||
|
|
11
edit.lua
11
edit.lua
|
@ -86,8 +86,10 @@ function edit.check_locs(State)
|
|||
end
|
||||
|
||||
function edit.invalid1(State, loc1)
|
||||
return loc1.line > #State.lines
|
||||
or loc1.pos > #State.lines[loc1.line].data
|
||||
if loc1.line > #State.lines then return true end
|
||||
local l = State.lines[loc1.line]
|
||||
if l.mode ~= 'text' then return false end -- pos is irrelevant to validity for a drawing line
|
||||
return loc1.pos > #State.lines[loc1.line].data
|
||||
end
|
||||
|
||||
function edit.draw(State)
|
||||
|
@ -147,7 +149,7 @@ end
|
|||
|
||||
function edit.mouse_press(State, x,y, mouse_button)
|
||||
if State.search_term then return end
|
||||
--? print('press', State.selection1.line, State.selection1.pos)
|
||||
--? print('press', State.cursor1.line)
|
||||
for line_index,line in ipairs(State.lines) do
|
||||
if Text.in_line(State, line_index, x,y) then
|
||||
-- delicate dance between cursor, selection and old cursor/selection
|
||||
|
@ -174,7 +176,7 @@ end
|
|||
|
||||
function edit.mouse_release(State, x,y, mouse_button)
|
||||
if State.search_term then return end
|
||||
--? print('release')
|
||||
--? print('release', State.cursor1.line)
|
||||
for line_index,line in ipairs(State.lines) do
|
||||
if Text.in_line(State, line_index, x,y) then
|
||||
--? print('reset selection')
|
||||
|
@ -215,6 +217,7 @@ function edit.mouse_wheel_move(State, dx,dy)
|
|||
end
|
||||
|
||||
function edit.text_input(State, t)
|
||||
--? print('text input', t)
|
||||
if State.search_term then
|
||||
State.search_term = State.search_term..t
|
||||
State.search_text = nil
|
||||
|
|
Loading…
Reference in New Issue