pijul bug

akkartik
Feb 5, 2024, 1:44 AM
R6MNUXDJJEMQH6GGP4I7QZ7DQSSOE2BLLI24JJIDWV6WBPCRDQHAC

Dependencies

Change contents

  • file deletion: drawing_tests.lua (----------)drawing_tests.lua (----------)
    [4.2][4.1534:1575](),[4.2][4.1534:1575](),[4.1575][4.15:15]()
    edit.run_after_keychord(Editor_state, 'C-o', 'o')
    edit.run_after_keychord(Editor_state, 'escape', 'escape')
    edit.run_after_keychord(Editor_state, 'o', 'o')
    edit.run_after_keychord(Editor_state, 'C-n', 'n')
    check_eq(Editor_state.current_drawing_mode, 'name', 'mode:1')
    edit.run_after_keychord(Editor_state, 'return', 'return')
    check_eq(Editor_state.current_drawing_mode, 'line', 'mode:3')
    check_eq(p2.name, 'A', 'check2')
    edit.run_after_keychord(Editor_state, 'C-n', 'n')
    edit.run_after_keychord(Editor_state, 'backspace', 'backspace')
    edit.run_after_keychord(Editor_state, 'C-n', 'n')
    check_eq(Editor_state.current_drawing_mode, 'name', 'mode:1')
    end
    edit.run_after_keychord(Editor_state, 'C-u', 'u')
    edit.run_after_keychord(Editor_state, 'C-u', 'u')
    edit.run_after_keychord(Editor_state, 'C-d', 'd')
    check_eq(drawing.shapes[1].mode, 'deleted', 'shape:1')
    check_eq(drawing.shapes[2].mode, 'deleted', 'shape:2')
    edit.run_after_keychord(Editor_state, 'C-d', 'd')
    edit.run_after_keychord(Editor_state, 'C-d', 'd')
    edit.run_after_keychord(Editor_state, 'C-d', 'd')
    edit.run_after_keychord(Editor_state, 'C-n', 'n')
    edit.run_after_keychord(Editor_state, 'return', 'return')
    edit.run_after_keychord(Editor_state, 'C-z', 'z')
    edit.run_after_keychord(Editor_state, 'C-u', 'u')
    edit.run_after_keychord(Editor_state, 'C-z', 'z')
    edit.run_after_keychord(Editor_state, 'C-z', 'z') -- bug: need to undo twice
    local drawing = Editor_state.lines[1]
    local p2 = drawing.points[drawing.shapes[1].p2]
    edit.run_after_keychord(Editor_state, 'C-d', 'd')
    edit.run_after_keychord(Editor_state, 'C-z', 'z')
    check_eq(Editor_state.next_history, 3, 'next_history')
    check_eq(drawing.shapes[1].mode, 'line', 'shape:1')
    check_eq(drawing.shapes[2].mode, 'line', 'shape:2')
    local drawing = Editor_state.lines[1]
    local p2 = drawing.points[drawing.shapes[1].p2]
    check_eq(drawing.shapes[1].mode, 'deleted', 'shape:1')
    check_eq(drawing.shapes[2].mode, 'deleted', 'shape:2')
    check_eq(Editor_state.next_history, 2, 'next_history')
    check_eq(p2.x, 35, 'x')
    check_eq(p2.y, 36, 'y')
    local drawing = Editor_state.lines[1]
    App.mouse_move(Editor_state.left+26, Editor_state.top+Drawing_padding_top+44)
    edit.update(Editor_state, 0.05)
    local p2 = drawing.points[drawing.shapes[1].p2]
    check_eq(Editor_state.next_history, 3, 'next_history')
    check_eq(p2.name, '', 'undo') -- not quite what it was before, but close enough
    local drawing = Editor_state.lines[1]
    local p2 = drawing.points[drawing.shapes[1].p2]
    check_eq(p2.name, 'A', 'baseline')
    check_eq(#Editor_state.history, 3, 'baseline/history:2')
    check_eq(Editor_state.next_history, 4, 'baseline/next_history')
    edit.run_after_text_input(Editor_state, 'A')
    -- there's < 3 points left, so the whole polygon is deleted
    -- just the one point is deleted
    -- only that line is deleted
    check_eq(Editor_state.current_drawing_mode, 'move', 'mode:1')
    check_eq(Editor_state.current_drawing_mode, 'line', 'mode:3')
    check_eq(drawing.pending, {}, 'pending')
    check_eq(Editor_state.current_drawing_mode, 'move', 'mode: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')
    -- no crash
    end
    function test_name_point_then_exit_drawing()
    check_eq(Editor_state.current_drawing_mode, 'name', 'mode:1')
    -- hit backspace
    check_eq(#drawing.shapes, 1, 'baseline/#shapes')
    check_eq(#drawing.points, 2, 'baseline/#points')
    check_eq(drawing.shapes[1].mode, 'line', 'baseline/shape:1')
    -- no change to drawing mode
    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]
    edit.run_after_mouse_press(Editor_state, Editor_state.left+35, Editor_state.top+Drawing_padding_top+36, 1)
    edit.run_after_mouse_release(Editor_state, Editor_state.left+35+30, Editor_state.top+Drawing_padding_top+36, 1)
    local drawing = Editor_state.lines[1]
  • file deletion: source_text_tests.lua (----------)source_text_tests.lua (----------)
    [4.2][4.83739:83784](),[4.2][4.83739:83784](),[4.83784][4.3561:3561]()
    edit.run_after_keychord(Editor_state, 'backspace', 'backspace')
    edit.run_after_keychord(Editor_state, 'backspace', 'backspace')
    edit.run_after_keychord(Editor_state, 'C-m', 'm')
    edit.run_after_keychord(Editor_state, 'left', 'left')
    edit.run_after_keychord(Editor_state, 'right', 'right')
    edit.run_after_keychord(Editor_state, 'left', 'left')
    edit.run_after_keychord(Editor_state, 'right', 'right')
    edit.run_after_keychord(Editor_state, 'M-left', 'left')
    edit.run_after_keychord(Editor_state, 'M-left', 'left')
    edit.run_after_keychord(Editor_state, 'M-left', 'left')
    edit.run_after_keychord(Editor_state, 'M-left', 'left')
    edit.run_after_keychord(Editor_state, 'M-left', 'left')
    edit.run_after_keychord(Editor_state, 'M-left', 'left')
    edit.run_after_keychord(Editor_state, 'M-right', 'right')
    edit.run_after_keychord(Editor_state, 'M-right', 'right')
    edit.run_after_keychord(Editor_state, 'M-right', 'right')
    edit.run_after_keychord(Editor_state, 'M-right', 'right')
    edit.run_after_keychord(Editor_state, 'M-right', 'right')
    edit.run_after_keychord(Editor_state, 'S-right', 'right')
    edit.run_after_keychord(Editor_state, 'right', 'right')
    edit.run_after_keychord(Editor_state, 'C-c', 'c')
    edit.run_after_keychord(Editor_state, 'C-x', 'x')
    edit.run_after_keychord(Editor_state, 'C-v', 'v')
    edit.run_after_keychord(Editor_state, 'backspace', 'backspace')
    edit.run_after_keychord(Editor_state, 'return', 'return')
    edit.run_after_keychord(Editor_state, 'return', 'return')
    edit.run_after_keychord(Editor_state, 'C-v', 'v')
    edit.run_after_keychord(Editor_state, 'C-a', 'a')
    edit.run_after_keychord(Editor_state, 'C-x', 'x')
    edit.run_after_keychord(Editor_state, 'pagedown', 'pagedown')
    edit.run_after_keychord(Editor_state, 'pagedown', 'pagedown')
    edit.run_after_keychord(Editor_state, 'pagedown', 'pagedown')
    edit.run_after_keychord(Editor_state, 'pagedown', 'pagedown')
    edit.run_after_keychord(Editor_state, 'down', 'down')
    edit.run_after_keychord(Editor_state, 'down', 'down')
    edit.run_after_keychord(Editor_state, 'down', 'down')
    edit.run_after_keychord(Editor_state, 'down', 'down')
    edit.run_after_keychord(Editor_state, 'down', 'down')
    edit.run_after_keychord(Editor_state, 'pagedown', 'pagedown')
    edit.run_after_keychord(Editor_state, 'down', 'down')
    edit.run_after_keychord(Editor_state, 'up', 'up')
    edit.run_after_keychord(Editor_state, 'up', 'up')
    edit.run_after_keychord(Editor_state, 'up', 'up')
    edit.run_after_keychord(Editor_state, 'up', 'up')
    edit.run_after_keychord(Editor_state, 'up', 'up')
    edit.run_after_keychord(Editor_state, 'up', 'up')
    edit.run_after_keychord(Editor_state, 'up', 'up')
    edit.run_after_keychord(Editor_state, 'pageup', 'pageup')
    edit.run_after_keychord(Editor_state, 'pageup', 'pageup')
    edit.run_after_keychord(Editor_state, 'pageup', 'pageup')
    edit.run_after_keychord(Editor_state, 'return', 'return')
    edit.run_after_keychord(Editor_state, 'return', 'return')
    edit.run_after_keychord(Editor_state, 'left', 'left')
    edit.run_after_keychord(Editor_state, 'right', 'right')
    edit.run_after_keychord(Editor_state, 'home', 'home')
    edit.run_after_keychord(Editor_state, 'end', 'end')
    edit.run_after_keychord(Editor_state, 'backspace', 'backspace')
    edit.run_after_keychord(Editor_state, 'backspace', 'backspace')
    edit.run_after_keychord(Editor_state, 'backspace', 'backspace')
    edit.run_after_keychord(Editor_state, 'backspace', 'backspace')
    edit.run_after_keychord(Editor_state, 'backspace', 'backspace')
    edit.run_after_keychord(Editor_state, 'backspace', 'backspace')
    edit.run_after_keychord(Editor_state, 'backspace', 'backspace')
    edit.run_after_keychord(Editor_state, 'backspace', 'backspace')
    edit.run_after_keychord(Editor_state, 'C-z', 'z')
    edit.run_after_keychord(Editor_state, 'backspace', 'backspace')
    edit.run_after_keychord(Editor_state, 'C-z', 'z')
    edit.run_after_keychord(Editor_state, 'C-z', 'z')
    edit.run_after_keychord(Editor_state, 'C-z', 'z')
    edit.run_after_keychord(Editor_state, 'C-f', 'f')
    edit.run_after_keychord(Editor_state, 'return', 'return')
    edit.run_after_keychord(Editor_state, 'C-f', 'f')
    edit.run_after_keychord(Editor_state, 'down', 'down')
    edit.run_after_keychord(Editor_state, 'return', 'return')
    edit.run_after_keychord(Editor_state, 'C-f', 'f')
    edit.run_after_keychord(Editor_state, 'up', 'up')
    edit.run_after_keychord(Editor_state, 'C-f', 'f')
    edit.run_after_keychord(Editor_state, 'return', 'return')
    edit.run_after_keychord(Editor_state, 'C-f', 'f')
    edit.run_after_keychord(Editor_state, 'up', 'up')
    -- cursor wraps
    edit.run_after_text_input(Editor_state, 'a')
    -- cursor wraps
    edit.run_after_text_input(Editor_state, 'a')
    check_eq(Editor_state.cursor1.line, 1, '2/cursor:line')
    edit.run_after_text_input(Editor_state, 'a')
    check_eq(Editor_state.cursor1.line, 4, '2/cursor:line')
    edit.run_after_text_input(Editor_state, 'de')
    check_eq(Editor_state.cursor1.line, 2, '1/cursor:line')
    check_eq(Editor_state.cursor1.pos, 1, '1/cursor:pos')
    edit.run_after_text_input(Editor_state, 'd')
    -- selection is restored
    check_eq(Editor_state.cursor1.line, 2, 'cursor:line')
    check_eq(Editor_state.cursor1.pos, 5, 'cursor:pos')
    check_nil(Editor_state.selection1.line, 'selection:line')
    check_nil(Editor_state.selection1.pos, 'selection:pos')
    --? check_eq(Editor_state.selection1.line, 2, 'selection:line')
    --? check_eq(Editor_state.selection1.pos, 4, 'selection:pos')
    check_eq(Editor_state.cursor1.line, 2, 'baseline/cursor:line')
    check_eq(Editor_state.cursor1.pos, 4, 'baseline/cursor:pos')
    check_nil(Editor_state.selection1.line, 'baseline/selection:line')
    check_nil(Editor_state.selection1.pos, 'baseline/selection:pos')
    check_eq(Editor_state.cursor1.line, 2, 'cursor:line')
    check_eq(Editor_state.cursor1.pos, 4, 'cursor:pos')
    check_nil(Editor_state.selection1.line, 'selection:line')
    check_nil(Editor_state.selection1.pos, 'selection:pos')
    check_eq(Editor_state.lines[1].data, 'abc', 'data:1')
    check_eq(Editor_state.lines[2].data, 'f', 'data:2')
    check_eq(Editor_state.lines[1].data, 'a', 'data:1')
    check_eq(Editor_state.lines[2].data, 'def', 'data:2')
    check_eq(Editor_state.lines[1].data, 'akl', 'data:1')
    check_eq(Editor_state.lines[2].data, 'mno', 'data:2')
    check_eq(Editor_state.lines[1].data, 'bc', 'data')
    check_eq(Editor_state.lines[1].data, 'bc', 'data')
    check_eq(Editor_state.lines[1].data, 'abcdef', 'check')
    y = Editor_state.top
    check_eq(Editor_state.screen_top1.line, 1, 'screen_top')
    check_eq(Editor_state.cursor1.line, 1, 'cursor')
    check_eq(Editor_state.screen_top1.line, 2, 'screen_top')
    check_eq(Editor_state.cursor1.line, 3, 'cursor:line')
    check_eq(Editor_state.cursor1.pos, 8, 'cursor:pos')
    y = Editor_state.top
    check_eq(Editor_state.screen_top1.line, 2, 'screen_top')
    check_eq(Editor_state.cursor1.line, 3, 'cursor:line')
    check_eq(Editor_state.cursor1.pos, 6, 'cursor:pos')
    y = Editor_state.top
    check_eq(Editor_state.screen_top1.line, 4, 'screen_top')
    check_eq(Editor_state.cursor1.line, 5, 'cursor:line')
    check_eq(Editor_state.cursor1.pos, 1, 'cursor:pos')
    check_eq(Editor_state.screen_top1.line, 2, 'screen_top')
    check_eq(Editor_state.cursor1.line, 4, 'cursor:line')
    check_eq(Editor_state.cursor1.pos, 1, 'cursor:pos')
    check_eq(Editor_state.screen_top1.line, 1, 'screen_top')
    check_eq(Editor_state.cursor1.line, 1, 'cursor:line')
    check_eq(Editor_state.cursor1.pos, 1, 'cursor:pos')
    check_eq(Editor_state.screen_top1.line, 1, 'screen_top')
    check_eq(Editor_state.cursor1.line, 1, 'cursor:line')
    check_eq(Editor_state.cursor1.pos, 1, 'cursor:pos')
    check_eq(Editor_state.screen_top1.line, 1, 'screen_top')
    check_eq(Editor_state.cursor1.line, 1, 'cursor')
    check_eq(Editor_state.screen_top1.line, 1, 'screen_top')
    check_eq(Editor_state.cursor1.line, 1, 'cursor')
    y = Editor_state.top
    y = Editor_state.top
    check_eq(Editor_state.screen_top1.line, 1, 'screen_top')
    check_eq(Editor_state.cursor1.line, 1, 'cursor')
    check_eq(Editor_state.screen_top1.line, 1, 'screen_top')
    check_eq(Editor_state.cursor1.line, 1, 'cursor')
    check_eq(Editor_state.cursor1.line, 1, 'cursor')
    end
    check_eq(Editor_state.screen_top1.line, 1, 'screen_top')
    check_eq(Editor_state.cursor1.line, 2, 'cursor')
    check_eq(Editor_state.screen_top1.line, 3, 'screen_top')
    check_eq(Editor_state.cursor1.line, 3, 'cursor:line')
    check_eq(Editor_state.cursor1.pos, 5, 'cursor:pos')
    check_eq(Editor_state.screen_top1.line, 3, 'baseline2/screen_top')
    check_eq(Editor_state.cursor1.line, 3, 'baseline2/cursor:line')
    check_eq(Editor_state.cursor1.pos, 1, 'baseline2/cursor:pos')
    check_eq(Editor_state.screen_top1.line, 2, 'screen_top')
    check_eq(Editor_state.cursor1.line, 3, 'cursor:line')
    check_eq(Editor_state.cursor1.pos, 5, 'cursor:pos')
    check_eq(Editor_state.screen_top1.line, 2, 'screen_top')
    check_eq(Editor_state.cursor1.line, 3, 'cursor:line')
    check_eq(Editor_state.cursor1.pos, 5, 'cursor:pos')
    check_eq(Editor_state.screen_top1.line, 2, 'screen_top')
    check_eq(Editor_state.cursor1.line, 4, 'cursor')
    check_eq(Editor_state.cursor1.line, 3, 'cursor')
    check_eq(Editor_state.screen_top1.line, 1, 'screen_top')
    check_eq(Editor_state.cursor1.line, 2, 'cursor')
    check_eq(Editor_state.screen_top1.line, 1, 'screen_top:line')
    check_eq(Editor_state.screen_top1.pos, 9, 'screen_top:pos')
    check_eq(Editor_state.screen_top1.line, 1, 'screen_top:line')
    check_eq(Editor_state.screen_top1.pos, 9, 'screen_top:pos')
    check_eq(Editor_state.screen_top1.line, 2, 'screen_top')
    check_eq(Editor_state.cursor1.line, 3, 'cursor')
    check_eq(Editor_state.screen_top1.line, 2, 'screen_top')
    check_eq(Editor_state.cursor1.line, 2, 'cursor')
    -- no crash
    App.fake_key_release('lctrl')
    edit.key_release(Editor_state, 'lctrl')
    -- selection
    check_eq(Editor_state.selection1.line, 1, 'selection:line')
    check_eq(Editor_state.selection1.pos, 1, 'selection:pos')
    check_eq(Editor_state.cursor1.line, 1, 'cursor:line')
    check_eq(Editor_state.cursor1.pos, 8, 'cursor:pos')
    check_eq(Editor_state.screen_top1.line, 1, 'screen_top')
    check_eq(Editor_state.cursor1.line, 2, 'cursor:line')
    check_eq(Editor_state.cursor1.pos, 2, 'cursor:pos')
    check_eq(Editor_state.cursor1.line, 2, 'cursor:line')
    check_eq(Editor_state.cursor1.pos, 1, 'cursor:pos')
    check_eq(Editor_state.lines[1].data, '', 'data:1')
    check_eq(Editor_state.lines[2].data, 'abc', 'data:2')
    check_eq(Editor_state.screen_top1.line, 1, 'screen_top')
    check_eq(Editor_state.cursor1.line, 2, 'cursor:line')
    check_eq(Editor_state.cursor1.pos, 1, 'cursor:pos')
    -- page scrolls up
    -- selection is reset since shift key is not pressed
    -- selection includes the newline, so it's also deleted
    check_eq(App.clipboard, 'a', 'clipboard')
    check_eq(App.clipboard, 'a', 'clipboard')
    -- no change to data, selection is reset
    App.fake_key_release('lshift')
    check_eq(Editor_state.cursor1.line, 2, 'line')
    check_eq(Editor_state.cursor1.pos, 4, 'pos')
    check_eq(Editor_state.cursor1.pos, 9, 'check')
    check_eq(Editor_state.cursor1.pos, 4, 'check')
    check_eq(Editor_state.cursor1.pos, 8, 'check')
    check_eq(Editor_state.cursor1.pos, 4, 'check')
    check_eq(Editor_state.cursor1.line, 1, 'line')
    check_eq(Editor_state.cursor1.pos, 5, 'pos')
    check_eq(Editor_state.cursor1.pos, 1, 'check')
    check_eq(Editor_state.cursor1.pos, 9, 'check')
    check_eq(Editor_state.cursor1.pos, 1, 'check')
    check_eq(Editor_state.cursor1.pos, 1, 'check')
    check_eq(Editor_state.cursor1.pos, 1, 'check')
    check_eq(Editor_state.cursor1.line, 2, 'line')
    check_eq(Editor_state.cursor1.pos, 1, 'pos')
    check_eq(Editor_state.cursor1.line, 1, 'line')
    check_eq(Editor_state.cursor1.pos, 4, 'pos') -- past end of line
    check_eq(Editor_state.cursor1.pos, 2, 'check')
    check_eq(Editor_state.cursor1.pos, 1, 'check')
    end
    function test_move_left()
    check_eq(#Editor_state.lines, 1, '#lines')
    check_eq(Editor_state.cursor1.line, 1, 'cursor')
    check_eq(Editor_state.screen_top1.line, 1, 'screen_top')
    check_eq(#Editor_state.lines, 1, '#lines')
    check_eq(Editor_state.cursor1.line, 1, 'cursor')
  • file deletion: source_tests.lua (----------)source_tests.lua (----------)
    [4.2][4.150262:150302](),[4.2][4.150262:150302](),[4.150302][4.147166:147166]()
    App.run_after_keychord('C-l', 'l')
    App.run_after_keychord('C-l', 'l')
    -- margins are now adjusted
    check(Show_log_browser_side, 'check')
  • file deletion: source_edit.lua (----------)source_edit.lua (----------)
    [4.2][4.165788:165827](),[4.2][4.165788:165827](),[4.165827][4.152503:152503]()
    function edit.run_after_keychord(State, chord, key)
    edit.keychord_press(State, chord, key)
    edit.key_release(State, key)
    App.screen.contents = {}