From b90a54a9cb7e2134d6d41112feaf67cb2f09c1be Mon Sep 17 00:00:00 2001 From: "Kartik K. Agaram" Date: Thu, 15 Sep 2022 11:26:45 -0700 Subject: new test --- source.lua | 2 +- source_edit.lua | 5 ++++- source_tests.lua | 16 ++++++++++++++++ 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/source.lua b/source.lua index 1da4467..a4289a0 100644 --- a/source.lua +++ b/source.lua @@ -45,7 +45,7 @@ function source.initialize_globals() index = 1, } - Menu_status_bar_height = nil -- initialized below + Menu_status_bar_height = 5 + --[[line height in tests]] 15 + 5 -- a few text objects we can avoid recomputing unless the font changes Text_cache = {} diff --git a/source_edit.lua b/source_edit.lua index 34752d0..c17ce26 100644 --- a/source_edit.lua +++ b/source_edit.lua @@ -127,7 +127,10 @@ end function edit.draw(State) State.button_handlers = {} App.color(Text_color) - assert(#State.lines == #State.line_cache) + if #State.lines ~= #State.line_cache then + print(('line_cache is out of date; %d when it should be %d'):format(#State.line_cache, #State.lines)) + assert(false) + end if not Text.le1(State.screen_top1, State.cursor1) then print(State.screen_top1.line, State.screen_top1.pos, State.screen_top1.posB, State.cursor1.line, State.cursor1.pos, State.cursor1.posB) assert(false) diff --git a/source_tests.lua b/source_tests.lua index 519c311..0f5135c 100644 --- a/source_tests.lua +++ b/source_tests.lua @@ -18,6 +18,22 @@ function test_resize_window() -- TODO: how to make assertions about when App.update got past the early exit? end +function test_show_log_browser_side() + io.write('\ntest_show_log_browser_side') + App.screen.init{width=300, height=300} + Editor_state = edit.initialize_test_state() + Editor_state.filename = 'foo' + Text.redraw_all(Editor_state) + Log_browser_state = edit.initialize_test_state() + Text.redraw_all(Log_browser_state) + log_browser.parse(Log_browser_state) + check(not Show_log_browser_side, 'F - test_show_log_browser_side/baseline') + Current_app = 'source' + App.wait_fake_time(0.1) + App.run_after_keychord('C-l') + check(Show_log_browser_side, 'F - test_show_log_browser_side') +end + function test_drop_file() io.write('\ntest_drop_file') App.screen.init{width=Editor_state.left+300, height=300} -- cgit 1.4.1-2-gfad0 From 6805143c42759efc1214580dcf05293f54f666cd Mon Sep 17 00:00:00 2001 From: "Kartik K. Agaram" Date: Thu, 15 Sep 2022 23:02:11 -0700 Subject: . --- source_tests.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source_tests.lua b/source_tests.lua index 0f5135c..676b76c 100644 --- a/source_tests.lua +++ b/source_tests.lua @@ -7,7 +7,7 @@ function test_resize_window() check_eq(App.screen.width, 300, 'F - test_resize_window/baseline/width') check_eq(App.screen.height, 300, 'F - test_resize_window/baseline/height') check_eq(Editor_state.left, Test_margin_left, 'F - test_resize_window/baseline/left_margin') - check_eq(Editor_state.right, 300 - Test_margin_right, 'F - test_resize_window/baseline/left_margin') + check_eq(Editor_state.right, 300 - Test_margin_right, 'F - test_resize_window/baseline/right_margin') App.resize(200, 400) -- ugly; resize switches to real, non-test margins check_eq(App.screen.width, 200, 'F - test_resize_window/width') -- cgit 1.4.1-2-gfad0 From 0f02efd8ccbfe3ea1b985f1bd2f1bf42f401374d Mon Sep 17 00:00:00 2001 From: "Kartik K. Agaram" Date: Sat, 17 Sep 2022 10:28:44 -0700 Subject: . --- source_tests.lua | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source_tests.lua b/source_tests.lua index 676b76c..044ff47 100644 --- a/source_tests.lua +++ b/source_tests.lua @@ -21,6 +21,7 @@ end function test_show_log_browser_side() io.write('\ntest_show_log_browser_side') App.screen.init{width=300, height=300} + Current_app = 'source' Editor_state = edit.initialize_test_state() Editor_state.filename = 'foo' Text.redraw_all(Editor_state) @@ -28,7 +29,7 @@ function test_show_log_browser_side() Text.redraw_all(Log_browser_state) log_browser.parse(Log_browser_state) check(not Show_log_browser_side, 'F - test_show_log_browser_side/baseline') - Current_app = 'source' + -- pressing ctrl+l shows log-browser side App.wait_fake_time(0.1) App.run_after_keychord('C-l') check(Show_log_browser_side, 'F - test_show_log_browser_side') -- cgit 1.4.1-2-gfad0 From 69f406202035a3e0b520639a5ca87cd7096c2f99 Mon Sep 17 00:00:00 2001 From: "Kartik K. Agaram" Date: Sat, 17 Sep 2022 10:29:57 -0700 Subject: bugfix: source margins when toggling log browser Running the tests now uglily resizes the window for a second or two. --- source.lua | 5 ++++- source_tests.lua | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+), 1 deletion(-) diff --git a/source.lua b/source.lua index a4289a0..ddb56d6 100644 --- a/source.lua +++ b/source.lua @@ -322,7 +322,10 @@ function source.keychord_pressed(chord, key) --? print('C-l') Show_log_browser_side = not Show_log_browser_side if Show_log_browser_side then - App.screen.width = Log_browser_state.right + Margin_right + App.screen.width = math.min(Display_width, App.screen.width*2) + Editor_state.right = App.screen.width/2 - Margin_right + Log_browser_state.left = App.screen.width/2 + Margin_left + Log_browser_state.right = App.screen.width - Margin_right else App.screen.width = Editor_state.right + Margin_right end diff --git a/source_tests.lua b/source_tests.lua index 044ff47..81bdb74 100644 --- a/source_tests.lua +++ b/source_tests.lua @@ -21,6 +21,7 @@ end function test_show_log_browser_side() io.write('\ntest_show_log_browser_side') App.screen.init{width=300, height=300} + Display_width = App.screen.width Current_app = 'source' Editor_state = edit.initialize_test_state() Editor_state.filename = 'foo' @@ -35,6 +36,66 @@ function test_show_log_browser_side() check(Show_log_browser_side, 'F - test_show_log_browser_side') end +function test_show_log_browser_side_doubles_window_width_if_possible() + io.write('\ntest_show_log_browser_side_doubles_window_width_if_possible') + -- initialize screen dimensions to half width + App.screen.init{width=300, height=300} + Display_width = App.screen.width*2 + -- initialize source app with left side occupying entire window (half the display) + Current_app = 'source' + Editor_state = edit.initialize_test_state() + Editor_state.filename = 'foo' + Editor_state.left = Margin_left + Editor_state.right = App.screen.width - Margin_right + local old_editor_right = Editor_state.right + Text.redraw_all(Editor_state) + Log_browser_state = edit.initialize_test_state() + -- log browser has some arbitrary margins + Log_browser_state.left = 200 + Margin_left + Log_browser_state.right = 400 + Text.redraw_all(Log_browser_state) + log_browser.parse(Log_browser_state) + -- display log browser + App.wait_fake_time(0.1) + App.run_after_keychord('C-l') + -- window width is doubled + check_eq(App.screen.width, 600, 'F - test_show_log_browser_side_doubles_window_width_if_possible/display:width') + -- left side margins are unchanged + check_eq(Editor_state.left, Margin_left, 'F - test_show_log_browser_side_doubles_window_width_if_possible/edit:left') + check_eq(Editor_state.right, old_editor_right, 'F - test_show_log_browser_side_doubles_window_width_if_possible/edit:right') + -- log browser margins are adjusted + check_eq(Log_browser_state.left, App.screen.width/2 + Margin_left, 'F - test_show_log_browser_side_doubles_window_width_if_possible/log:left') + check_eq(Log_browser_state.right, App.screen.width - Margin_right, 'F - test_show_log_browser_side_doubles_window_width_if_possible/log:right') +end + +function test_show_log_browser_side_resizes_both_sides_if_cannot_double_window_width() + io.write('\ntest_show_log_browser_side_resizes_both_sides_if_cannot_double_window_width') + -- initialize screen dimensions and indicate that it is maximized + App.screen.init{width=300, height=300} + Display_width = 300 + -- initialize source app with left side occupying more than half the display + Current_app = 'source' + Editor_state = edit.initialize_test_state() + Editor_state.filename = 'foo' + Editor_state.left = Margin_left + Editor_state.right = 200 + Text.redraw_all(Editor_state) + Log_browser_state = edit.initialize_test_state() + -- log browser has some arbitrary margins + Log_browser_state.left = 200 + Margin_left + Log_browser_state.right = 400 + Text.redraw_all(Log_browser_state) + log_browser.parse(Log_browser_state) + -- display log browser + App.wait_fake_time(0.1) + App.run_after_keychord('C-l') + -- margins are now adjusted + check_eq(Editor_state.left, Margin_left, 'F - test_show_log_browser_side_resizes_both_sides_if_cannot_double_window_width/edit:left') + check_eq(Editor_state.right, App.screen.width/2 - Margin_right, 'F - test_show_log_browser_side_resizes_both_sides_if_cannot_double_window_width/edit:right') + check_eq(Log_browser_state.left, App.screen.width/2 + Margin_left, 'F - test_show_log_browser_side_resizes_both_sides_if_cannot_double_window_width/log:left') + check_eq(Log_browser_state.right, App.screen.width - Margin_right, 'F - test_show_log_browser_side_resizes_both_sides_if_cannot_double_window_width/log:right') +end + function test_drop_file() io.write('\ntest_drop_file') App.screen.init{width=Editor_state.left+300, height=300} -- cgit 1.4.1-2-gfad0 From 287050d598184943209b564657cb1e29ff641fd7 Mon Sep 17 00:00:00 2001 From: "Kartik K. Agaram" Date: Sat, 17 Sep 2022 10:47:47 -0700 Subject: get rid of ugly side-effects in tests --- app.lua | 25 +++++++++++++++++++++++++ source.lua | 18 +++++++++--------- 2 files changed, 34 insertions(+), 9 deletions(-) diff --git a/app.lua b/app.lua index 69507ec..994f0c7 100644 --- a/app.lua +++ b/app.lua @@ -154,6 +154,27 @@ function App.screen.init(dims) App.screen.height = dims.height end +-- operations on the LÖVE window within the monitor/display +function App.screen.resize(width, height, flags) + App.screen.width = width + App.screen.height = height + App.screen.flags = flags +end + +function App.screen.size() + return App.screen.width, App.screen.height, App.screen.flags +end + +function App.screen.move(x,y, displayindex) + App.screen.x = x + App.screen.y = y + App.screen.displayindex = displayindex +end + +function App.screen.position() + return App.screen.x, App.screen.y, App.screen.displayindex +end + function App.screen.print(msg, x,y) local screen_row = 'y'..tostring(y) --? print('drawing "'..msg..'" at y '..tostring(y)) @@ -379,6 +400,10 @@ function App.disable_tests() App.fake_mouse_press = nil App.fake_mouse_release = nil -- other methods dispatch to real hardware + App.screen.resize = love.window.setMode + App.screen.size = love.window.getMode + App.screen.move = love.window.setPosition + App.screen.position = love.window.getPosition App.screen.print = love.graphics.print App.newText = love.graphics.newText App.screen.draw = love.graphics.draw diff --git a/source.lua b/source.lua index ddb56d6..5bcb154 100644 --- a/source.lua +++ b/source.lua @@ -116,15 +116,15 @@ function source.load_settings() local settings = Settings.source love.graphics.setFont(love.graphics.newFont(settings.font_height)) -- maximize window to determine maximum allowable dimensions - love.window.setMode(0, 0) -- maximize - Display_width, Display_height, App.screen.flags = love.window.getMode() + App.screen.resize(0, 0) -- maximize + Display_width, Display_height, App.screen.flags = App.screen.size() -- set up desired window dimensions App.screen.flags.resizable = true App.screen.flags.minwidth = math.min(Display_width, 200) App.screen.flags.minheight = math.min(Display_height, 200) App.screen.width, App.screen.height = settings.width, settings.height --? print('setting window from settings:', App.screen.width, App.screen.height) - love.window.setMode(App.screen.width, App.screen.height, App.screen.flags) + App.screen.resize(App.screen.width, App.screen.height, App.screen.flags) --? print('loading source position', settings.x, settings.y, settings.displayindex) source.set_window_position_from_settings(settings) Show_log_browser_side = settings.show_log_browser_side @@ -156,19 +156,19 @@ end function source.initialize_window_geometry(em_width) -- maximize window - love.window.setMode(0, 0) -- maximize - Display_width, Display_height, App.screen.flags = love.window.getMode() + App.screen.resize(0, 0) -- maximize + Display_width, Display_height, App.screen.flags = App.screen.size() -- shrink height slightly to account for window decoration App.screen.height = Display_height-100 App.screen.width = 40*em_width App.screen.flags.resizable = true App.screen.flags.minwidth = math.min(App.screen.width, 200) App.screen.flags.minheight = math.min(App.screen.width, 200) - love.window.setMode(App.screen.width, App.screen.height, App.screen.flags) + App.screen.resize(App.screen.width, App.screen.height, App.screen.flags) print('initializing source position') if Settings == nil then Settings = {} end if Settings.source == nil then Settings.source = {} end - Settings.source.x, Settings.source.y, Settings.source.displayindex = love.window.getPosition() + Settings.source.x, Settings.source.y, Settings.source.displayindex = App.screen.position() end function source.resize(w, h) @@ -254,7 +254,7 @@ end function source.settings() if Current_app == 'source' then --? print('reading source window position') - Settings.source.x, Settings.source.y, Settings.source.displayindex = love.window.getPosition() + Settings.source.x, Settings.source.y, Settings.source.displayindex = App.screen.position() end local filename = Editor_state.filename if is_relative_path(filename) then @@ -330,7 +330,7 @@ function source.keychord_pressed(chord, key) App.screen.width = Editor_state.right + Margin_right end --? print('setting window:', App.screen.width, App.screen.height) - love.window.setMode(App.screen.width, App.screen.height, App.screen.flags) + App.screen.resize(App.screen.width, App.screen.height, App.screen.flags) --? print('done setting window') -- try to restore position if possible -- if the window gets wider the window manager may not respect this -- cgit 1.4.1-2-gfad0