lines.love/Manual_tests.md
Kartik K. Agaram 19597e7619 redo version checks yet again
I'm starting to feel better after replacing 1 line with 20 and 2 new
bits of global state. I'm now handling two scenarios more explicitly:

* If I change Current_app within key_press, the corresponding text_input
  and key_release events go to the new app. If it's an editor it might
  insert the key, which is undesirable. Putting such handlers in
  key_release now feels overly clever, particularly since it took me
  forever to realize why I was getting stuck in an infinite loop.

* Both 'run' and 'source' can hit the version check, so we need to be
  able to transition from the 'error' app to either. Which
  necessitates yet another global bit of state: Next_app.
2023-12-06 22:43:28 -08:00

4.1 KiB

I care a lot about being able to automatically check any property about my program before it ever runs. However, some things don't have tests yet, either because I don't know how to test them or because I've been lazy. I'll at least record those here.

Initializing settings:

  • delete app settings, start with a filename; window opens running the text editor with cursor at top of file

  • run with absolute file path; quit; restart; window opens running the text editor in same position+dimensions

  • run with relative file path; quit; switch to new directory; restart without a filename; window opens running the text editor in same file in same position+dimensions

  • run with a filename on commandline, scroll around, quit; restart without a filename; window opens running the text editor in same position+dimensions

  • run with a filename on commandline, scroll around, quit; restart with same filename; window opens running the text editor in same position+dimensions

  • run with a filename on commandline, scroll around, quit; restart with new filename; window opens new filename with cursor up top

  • run editor, scroll around, move cursor to end of some line, quit; restart with new filename; window opens running the text editor in same position+dimensions

  • quit while running the text editor, restart; window opens running the text editor in same position+dimensions

  • quit while editing source (color; no drawings; no selection), restart; window opens editing source in same position+dimensions

  • start out running the text editor, move window, press ctrl+e twice; window is running text editor in same position+dimensions

  • start out editing source, move window, press ctrl+e twice; window is editing source in same position+dimensions

  • no log file; switching to source works

  • run with an untested version. Error message pops up and waits for a key. The app attempts to continue, and doesn't receive the key.

  • run with a LÖVE v12 release candidate. No errors; it is a supported version. All tests pass.

Code loading:

  • run love with directory; text editor runs

  • run love with zip file; text editor runs

  • How the screen looks. Our tests use a level of indirection to check text and graphics printed to screen, but not the precise pixels they translate to.

    • where exactly the cursor is drawn to highlight a given character
    • analogously, how a shape precisely looks as you draw it
  • start out running the text editor, press ctrl+e to edit source, make a change to the source, press ctrl+e twice to return to the source editor; the change should be preserved.

  • run with an untested version. Error message pops up. Press a key. Text editor comes up, and doesn't receive the key. Press ctrl+e. Error pops up. Press a key. Source editor opens up. Press ctrl+e. Error pops up. Press a key. Text editor returns.

  • create a couple of spuriously failing tests. Run with an untested version. Error message includes message about untested version.

Other compromises

Lua is dynamically typed. Tests can't patch over lack of type-checking.

  • All strings are UTF-8. Bytes within them are not characters. I try to label byte offsets with the suffix _offset, and character positions as _pos. For example, string.sub should never use a _pos, only an _offset.

  • Some ADT/interface support would be helpful in keeping per-line state in sync. Any change to line data should clear the derived line property screen_line_starting_pos.

  • Some inputs get processed in love.textinput and some in love.keypressed. Several bugs have arisen due to destructive interference between the two for some key chord. I wish I could guarantee that the two sets are disjoint. But perhaps I'm not thinking about this right.

  • Like any high-level language, it's easy to accidentally alias two non-scalar variables. I wish there was a way to require copy when assigning.

  • I wish I could require pixel coordinates to be integers. The editor defensively converts input margins to integers.

  • My test harness automatically runs test_* methods -- but only at the top-level. I wish there was a way to raise warnings if someone defines such a function inside a dict somewhere.