support running tests multiple times
[?]
Jan 21, 2023, 4:07 AM
JNJ4R56X3HVU4IGKZZ2IV73PALEXSYOIOAIVXZTV43BG7PEY6AOQCDependencies
- [2]
FCFJVYKYredundant check - [3]
S4IAYCIRdelete all tests once they've executed - [4]
UVSNG336reclaim a couple more functions after tests - [5]
JCXL74WVbring back everything from commit a68647ae22 - [6]
2CK5QI7Wmake love event names consistent - [7]
PESSMQBJno, make sure to compute line width after screen dimensions - [8]
JFFUF5ALoverride mouse state lookups in tests - [9]
36Z442IVback to commit 8123959e52f without code editing - [10]
AD34IX2Zcouple more tests - [11]
PX7DDEMOautosave slightly less aggressively - [12]
ZLJGZYQGselect text with shift + mouseclick - [13]
2CTN2IEFMerge lines.love - [14]
AVTNUQYRbasic test-enabled framework - [15]
IMEJA43Lsnapshot - [16]
KKMFQDR4editing source code from within the app - [17]
JF5L2BBStest harness now supports copy/paste - [18]
3QNOKBFMbeginnings of a test harness - [19]
HKV72RZVbugfix: save modified files in save directory - [20]
JMUD7T3Oget rid of ugly side-effects in tests - [21]
JOPVPUSAediting source code from within the app - [22]
7CLGG7J2test: autosave after any shape
Change contents
- edit in app.lua at line 15
-- have LÖVE delegate all handlers to App if they existfor name in pairs(love.handlers) doif App[name] thenlove.handlers[name] = App[name]endend-- Stash current state of App for testsApp_for_tests = {}for k,v in pairs(App) doApp_for_tests[k] = vend-- there's one nested tableApp_for_tests.screen = {}for k,v in pairs(App.screen) doApp_for_tests.screen[k] = vend-- Mutate App for the real app-- disable test methodsApp.screen.init = nilApp.filesystem = nilApp.time = nilApp.run_after_textinput = nilApp.run_after_keychord = nilApp.keypress = nilApp.keyrelease = nilApp.run_after_mouse_click = nilApp.run_after_mouse_press = nilApp.run_after_mouse_release = nilApp.fake_keys_pressed = nilApp.fake_key_press = nilApp.fake_key_release = nilApp.fake_mouse_state = nilApp.fake_mouse_press = nilApp.fake_mouse_release = nil-- dispatch some methods to real hardwareApp.screen.resize = love.window.setModeApp.screen.size = love.window.getModeApp.screen.move = love.window.setPositionApp.screen.position = love.window.getPositionApp.screen.print = love.graphics.printApp.newText = love.graphics.newTextApp.screen.draw = love.graphics.drawApp.width = function(text) return text:getWidth() endApp.open_for_reading = function(filename) return io.open(filename, 'r') endApp.open_for_writing = function(filename) return io.open(filename, 'w') endApp.getTime = love.timer.getTimeApp.getClipboardText = love.system.getClipboardTextApp.setClipboardText = love.system.setClipboardTextApp.modifier_down = love.keyboard.isDownApp.mouse_move = love.mouse.setPositionApp.mouse_down = love.mouse.isDownApp.mouse_x = love.mouse.getXApp.mouse_y = love.mouse.getY - edit in app.lua at line 72
-- example handlerif #Test_errors > 0 thenerror('\n\n'..table.concat(Test_errors, '\n'))end - edit in app.lua at line 77[7.8463]→[7.258:276](∅→∅),[7.209277]→[7.258:276](∅→∅),[7.209821]→[7.258:276](∅→∅),[7.2321]→[7.258:276](∅→∅),[7.276]→[7.8464:8486](∅→∅)
--? print('==')App.disable_tests() - edit in app.lua at line 429
local saved_app = AppApp = App_for_testsTest_errors = {} - replacement in app.lua at line 434
_G[name]()local status, err = xpcall(_G[name], handle_error_in_test) - replacement in app.lua at line 437
-- clean up all test methodsfor _,name in ipairs(sorted_names) do_G[name] = nilendApp = saved_app - replacement in app.lua at line 440[7.7569]→[7.7569:7887](∅→∅),[7.7887]→[4.19:67](∅→∅),[4.67]→[7.7887:7911](∅→∅),[7.7887]→[7.7887:7911](∅→∅),[7.7911]→[7.2657:2680](∅→∅),[7.2680]→[7.1619:1636](∅→∅),[7.1636]→[7.7911:7943](∅→∅),[7.2680]→[7.7911:7943](∅→∅),[7.7911]→[7.7911:7943](∅→∅),[7.7943]→[7.2681:2712](∅→∅),[7.2712]→[7.2192:2236](∅→∅),[7.2236]→[7.1637:1741](∅→∅),[7.1741]→[6.7869:7899](∅→∅),[6.7899]→[7.5388:5533](∅→∅),[7.5388]→[7.5388:5533](∅→∅),[7.2262]→[7.7943:7988](∅→∅),[7.2712]→[7.7943:7988](∅→∅),[7.5533]→[7.7943:7988](∅→∅),[7.7943]→[7.7943:7988](∅→∅),[7.7988]→[5.5112:5286](∅→∅),[7.1365]→[7.7988:8162](∅→∅),[5.5286]→[7.7988:8162](∅→∅),[7.7988]→[7.7988:8162](∅→∅),[7.8162]→[7.8570:8726](∅→∅),[7.913]→[7.1742:1777](∅→∅),[7.8726]→[7.1742:1777](∅→∅),[7.2791]→[7.1742:1777](∅→∅),[7.1777]→[7.2953:3061](∅→∅),[7.2791]→[7.2953:3061](∅→∅),[7.3061]→[7.2263:2306](∅→∅),[7.2306]→[7.5534:5677](∅→∅)
-- call this once all tests are run-- can't run any tests after thisfunction App.disable_tests()-- have LÖVE delegate all handlers to App if they existfor name in pairs(love.handlers) doif App[name] thenlove.handlers[name] = App[name]endend-- test methods are disallowed outside testsApp.run_tests = nilApp.disable_tests = nilApp.screen.init = nilApp.filesystem = nilApp.time = nilApp.run_after_textinput = nilApp.run_after_keychord = nilApp.keypress = nilApp.keyrelease = nilApp.run_after_mouse_click = nilApp.run_after_mouse_press = nilApp.run_after_mouse_release = nilApp.fake_keys_pressed = nilApp.fake_key_press = nilApp.fake_key_release = nilApp.fake_mouse_state = nilApp.fake_mouse_press = nilApp.fake_mouse_release = nil-- other methods dispatch to real hardwareApp.screen.resize = love.window.setModeApp.screen.size = love.window.getModeApp.screen.move = love.window.setPositionApp.screen.position = love.window.getPositionApp.screen.print = love.graphics.printApp.newText = love.graphics.newTextApp.screen.draw = love.graphics.drawApp.width = function(text) return text:getWidth() endApp.open_for_reading = function(filename) return io.open(filename, 'r') endApp.open_for_writing = function(filename) return io.open(filename, 'w') endApp.getTime = love.timer.getTimeApp.getClipboardText = love.system.getClipboardTextApp.setClipboardText = love.system.setClipboardTextApp.modifier_down = love.keyboard.isDownApp.mouse_move = love.mouse.setPositionApp.mouse_down = love.mouse.isDownApp.mouse_x = love.mouse.getXApp.mouse_y = love.mouse.getYfunction handle_error_in_test(err)local full_error = debug.traceback('Error: '..err, --[[stack frame]]3):gsub('\n[^\n]+$', '')table.insert(Test_errors, full_error..'\n')