luaML.love/source_tests.lua
Kartik K. Agaram a8747478ff bugfix: Windows pushing title bar off screen
I'm learning the hard way that resizing the window is a big deal. Only
do this when someone explicitly requests it, otherwise follow LÖVE's
defaults.

Therefore we're also going to stop trying to be smart when showing the
log browser. Leave window resizing to manual operations.

Now initialization looks a lot more similar for the run and source apps.
2023-07-10 17:09:09 -07:00

118 lines
4.3 KiB
Lua

function test_resize_window()
App.screen.init{width=300, height=300}
Editor_state = edit.initialize_test_state()
Editor_state.filename = 'foo'
Log_browser_state = edit.initialize_test_state()
check_eq(App.screen.width, 300, 'baseline/width')
check_eq(App.screen.height, 300, 'baseline/height')
check_eq(Editor_state.left, Test_margin_left, 'baseline/left_margin')
check_eq(Editor_state.right, 300 - Test_margin_right, 'baseline/right_margin')
App.resize(200, 400)
-- ugly; resize switches to real, non-test margins
check_eq(App.screen.width, 200, 'width')
check_eq(App.screen.height, 400, 'height')
check_eq(Editor_state.left, Margin_left, 'left_margin')
check_eq(Editor_state.right, 200-Margin_right, 'right_margin')
check_eq(Editor_state.width, 200-Margin_left-Margin_right, 'drawing_width')
-- TODO: how to make assertions about when App.update got past the early exit?
end
function test_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)
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, 'baseline')
-- pressing ctrl+l shows log-browser side
Current_time = Current_time + 0.1
App.run_after_keychord('C-l')
check(Show_log_browser_side, 'check')
end
function test_show_log_browser_side_splits_window_width()
-- initialize screen dimensions and indicate that it is maximized
App.screen.init{width=300, height=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
Current_time = Current_time + 0.1
App.run_after_keychord('C-l')
-- margins are now adjusted
check_eq(Editor_state.left, Margin_left, 'edit:left')
check_eq(Editor_state.right, App.screen.width/2 - Margin_right, 'edit:right')
check_eq(Log_browser_state.left, App.screen.width/2 + Margin_left, 'log:left')
check_eq(Log_browser_state.right, App.screen.width - Margin_right, 'log:right')
end
function test_drop_file()
App.screen.init{width=Editor_state.left+300, height=300}
Editor_state = edit.initialize_test_state()
App.filesystem['foo'] = 'abc\ndef\nghi\n'
local fake_dropped_file = {
opened = false,
getFilename = function(self)
return 'foo'
end,
open = function(self)
self.opened = true
end,
lines = function(self)
assert(self.opened)
return App.filesystem['foo']:gmatch('[^\n]+')
end,
close = function(self)
self.opened = false
end,
}
App.filedropped(fake_dropped_file)
check_eq(#Editor_state.lines, 3, '#lines')
check_eq(Editor_state.lines[1].data, 'abc', 'lines:1')
check_eq(Editor_state.lines[2].data, 'def', 'lines:2')
check_eq(Editor_state.lines[3].data, 'ghi', 'lines:3')
edit.draw(Editor_state)
end
function test_drop_file_saves_previous()
App.screen.init{width=Editor_state.left+300, height=300}
-- initially editing a file called foo that hasn't been saved to filesystem yet
Editor_state.lines = load_array{'abc', 'def'}
Editor_state.filename = 'foo'
schedule_save(Editor_state)
-- now drag a new file bar from the filesystem
App.filesystem['bar'] = 'abc\ndef\nghi\n'
local fake_dropped_file = {
opened = false,
getFilename = function(self)
return 'bar'
end,
open = function(self)
self.opened = true
end,
lines = function(self)
assert(self.opened)
return App.filesystem['bar']:gmatch('[^\n]+')
end,
close = function(self)
self.opened = false
end,
}
App.filedropped(fake_dropped_file)
-- filesystem now contains a file called foo
check_eq(App.filesystem['foo'], 'abc\ndef\n', 'check')
end