3SEFLYPZ5FIQBPMKC2SLLWQSHGGN3FKX63YM5XUYFJVDH7Z3E4ZQC NT3LSVTXQAOUA3BSFDGMULGN666CF5T35PXBOK7AFXLD7YKNJTIAC TZA6AA6PSBDJZP3LRZFZNK2AJ37YEAL7SH75VQY7FPLF4ILD6QJAC DBPKNKLVQ6KGZLBGRMY6D6ZS3G7K3I5O6UU6EHHBFGR24NXPNZYAC BC4SO6ARRO5K7HZOOKMGRLL7GTVM3HUXH6GYUAH4DE53UYR5LEJQC YWJZXFOROWKREZ76THNMQLWEOVWDYMNEEPGRMDXX32DJPRIJY76QC R5QXEHUIZLELJGGCZAE7ATNS3CLRJ7JFRENMGH4XXH24C5WABZDQC JOPVPUSAMMU6RFVDQR4NJC4GNNUFB7GPKVH7OS5FKCYS5QZ53VLQC GMDEH4RHOR6DJABQ5WVGY4GVUU3QPWFTPFUHYUOULTVJZA2FTPAQC CE4LZV4TNXJT54CVGM3QANCBP42TMLMZWF2DBSMUYKAHILXIZEMQC KKMFQDR43ZWVCDRHQLWWX3FCWCFA3ZSXYOBRJNPHUQZR2XPKWULAC YT5P6TO64XSMCZGTT4SVNFOWUN5ECNXTWCMFXN3YCDZUNH4H3IFAC ORRSP7FVCHI2TF5GXBRGQYYJAA3JFYXZBM3T663BKSBV22FCZVCAC BPWFKBXTKIRBJFWVZIUVCHGJTLBCR6EIMEHM3D3KOF5IULXCR5RQC 5F54FYKIMKS6TBV23M2GZ6N55VGHPBN66RO5XQS7ZY2GDZSSUJQAC H3KWPK3GXISOB25HP3USPDJLY4Q3MYDDD77PPQ7OGBVEYG23D7JAC 76XOJEND6OWBWA7V6YXTQV2NP5SVVMLVZCCINBWKOBJARSUWNJJQC LF7BWEG4DKQI7NMXMZC4LC2BE5PB42HK5PD6OYBNIDMAZBJASOKQC 2WGHUWE6DWRNUD7AJNLGT4I6PZ2EIVDQCZ7V7V7WSYPBRPYUUDUQC MIKAQWHPJFAELPV7ATGH6DWR7V4FKHAOYMPAKVFFSGEUNE5IVIDQC ILOA5BYFTQKBSHLFMMZUVPQ2JXBFJD62ERQFBTDK2WSRXUN525VQC M5C7KFGEWP2YR5HYIVYWE4GJ4PUE6ZSDMOGQUDH7BVHJNYK53RAAC LXTTOB33N2HCUZFIUDRQGGBVHK2HODRG4NBLH6RXRQZDCHF27BSAC LNUHQOGHIOFGJXNGA3DZLYEASLYYDGLN2I3EDZY5ANASQAHCG3YQC Y2ZIPXEMMCY5GHJDDF7OMRKEQYMSDR5QTJDA7Y2SBOTHAJKHWVOAC P6SYWBLBN2KAYQ6VJBPYZQNCD2WQHOZGC6XOKWW4SLAMFFGH3ZYQC AVTNUQYRBW7IX2YQ3KDLVQ23RGW3BAKTAE7P73ASBYNKOHMQMH5AC 3QNOKBFMKBGXBVJIRHR2444JRRMBTABHE4674NR3DT67RRM2X6GAC FCFJVYKYPDR2YE7M2ZMGPLUVPBZMTFQEXHTQCDN2HSGYOMFQ5HPQC ZLJGZYQGQ2S4UFWTVF4PQDSGMP6A4IS4GDHCMBAAA5SK2N2NWR3QC AD34IX2ZSGYGU3LGY2IZOZNKD4HRQOYJVG5UWMWLXJZJSM62FFOAC JF5L2BBS7ESMKHNGKLXI2F32GZKET2ICJ4KT2L5BMH3P2L2Y5MRAC JFFUF5ALUWPDM7IEDEZVAYG2SVXO334STONRGKVB3QKY2TT5QGBQC check_eq(App.filesystem['foo'], 'abc\ndef\n', 'check')endcheck_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)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?endcheck_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/left_margin')App.resize(200, 400)-- ugly; resize switches to real, non-test margins
check_eq(#Editor_state.lines, 1, '#lines')check_eq(Editor_state.cursor1.line, 1, 'cursor:line')check_eq(Editor_state.cursor1.pos, 1, 'cursor:pos')check_eq(Editor_state.screen_top1.line, 1, 'screen_top:line')check_eq(Editor_state.screen_top1.pos, 1, 'screen_top:pos')
-- click on the other lineedit.draw(Editor_state, Text_color)edit.run_after_mouse_click(Editor_state, Editor_state.left+8,Editor_state.top+5, 1)-- cursor movescheck_eq(Editor_state.cursor1.line, 1, 'F - test_click_with_mouse/cursor:line')check_nil(Editor_state.selection1.line, 'F - test_click_with_mouse/selection is empty to avoid perturbing future edits')
check_eq(Editor_state.cursor1.line, 1, 'cursor:line')check_eq(Editor_state.cursor1.pos, 2, 'cursor:pos')check_nil(Editor_state.selection1.line, 'selection:line')check_nil(Editor_state.selection1.pos, 'selection:pos')
endfunction test_move_cursor_using_mouse()io.write('\ntest_move_cursor_using_mouse')App.screen.init{width=50, height=60}Editor_state = edit.initialize_test_state()Editor_state.lines = load_array{'abc', 'def', 'xyz'}Text.redraw_all(Editor_state)Editor_state.cursor1 = {line=1, pos=1}Editor_state.screen_top1 = {line=1, pos=1}Editor_state.screen_bottom1 = {}Editor_state.selection1 = {}edit.draw(Editor_state, Text_color) -- populate line_cache.starty for each line Editor_state.line_cacheedit.run_after_mouse_release(Editor_state, Editor_state.left+8,Editor_state.top+5, 1)check_eq(Editor_state.cursor1.line, 1, 'F - test_move_cursor_using_mouse/cursor:line')check_eq(Editor_state.cursor1.pos, 2, 'F - test_move_cursor_using_mouse/cursor:pos')check_nil(Editor_state.selection1.line, 'F - test_move_cursor_using_mouse/selection:line')check_nil(Editor_state.selection1.pos, 'F - test_move_cursor_using_mouse/selection:pos')
-- prepend file/line/testfunction prepend_debug_info_to_test_failure(test_name, err)local err_without_line_number = err:gsub('^[^:]*:[^:]*: ', '')local stack_trace = debug.traceback('', --[[stack frame]]5)local file_and_line_number = stack_trace:gsub('stack traceback:\n', ''):gsub(': .*', '')local full_error = file_and_line_number..':'..test_name..' -- '..err_without_line_numbertable.insert(Test_errors, full_error)end