about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--source.lua5
-rw-r--r--source_tests.lua61
2 files changed, 65 insertions, 1 deletions
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}