We now collect multiple test failures, but that's just the first step.
DBPKNKLVQ6KGZLBGRMY6D6ZS3G7K3I5O6UU6EHHBFGR24NXPNZYAC FCFJVYKYPDR2YE7M2ZMGPLUVPBZMTFQEXHTQCDN2HSGYOMFQ5HPQC S4IAYCIR5J4LPGBDAXI56E67IP3DAMSMKMDXYSRBGIEPQ2NE5ODQC UVSNG336IICLLK3O6YX5HE6IBRDZJCM2N22XCEU3L6R25N6QTMXQC MIKAQWHPJFAELPV7ATGH6DWR7V4FKHAOYMPAKVFFSGEUNE5IVIDQC 2CK5QI7WA7M4IVSACFGOJYAIDKRUTZVMMPSFWEJTUNMWTN7AX4NAC GBSRQUT4QF5WCFVSTGSOU3BM6VCGPNBBG5WKDEGDGGCOUWTPEC2AC 3QNOKBFMKBGXBVJIRHR2444JRRMBTABHE4674NR3DT67RRM2X6GAC KHPSHJN4BMTJ3CHUFQQZU7ZIQDOQDF3L5HV3TRT5OJMYICJAEB5QC PESSMQBJCOIA5PYNVKUG4D25VTFIG44QVCAOFRD4PKOJNW2AIHKAC JOPVPUSAMMU6RFVDQR4NJC4GNNUFB7GPKVH7OS5FKCYS5QZ53VLQC KKMFQDR43ZWVCDRHQLWWX3FCWCFA3ZSXYOBRJNPHUQZR2XPKWULAC AVTNUQYRBW7IX2YQ3KDLVQ23RGW3BAKTAE7P73ASBYNKOHMQMH5AC IMEJA43L3OX7S5KIYLZJ4F3ITACLAA5SZBHSCIJMULCPRSW7LXBAC AD34IX2ZSGYGU3LGY2IZOZNKD4HRQOYJVG5UWMWLXJZJSM62FFOAC PX7DDEMOBGPVK3FXKK5XEPG24CJXZSVW67DLG2JZZ5E77NVEAA3AC ZLJGZYQGQ2S4UFWTVF4PQDSGMP6A4IS4GDHCMBAAA5SK2N2NWR3QC JFFUF5ALUWPDM7IEDEZVAYG2SVXO334STONRGKVB3QKY2TT5QGBQC JMUD7T3OJTEF5V73Y2B2GSVUBNBSJFRJPZNREBE5E4BV3IG6SJLQC HKV72RZVJEOF5GCHCRKEBGC3FQN7AYETY7LKEJUXVIQAB4QPEPYQC JF5L2BBS7ESMKHNGKLXI2F32GZKET2ICJ4KT2L5BMH3P2L2Y5MRAC -- 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
-- 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.getY
function 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')