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:
- from previous session
- from defaults
- `default_map` absent/present
- when connecting to a new app
- run with an untested version of LÖVE. 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.
- create a failing test. Start app. See test failure. Fix using driver.love
- include an error in on.initialize. Start app. See error message. Fix on.initialize using driver.love.
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
Panning around on an infinite surface:
* The upstream luaML needs to pass all its manual tests.
Editing:
* The upstream template-live-editor needs to pass all its manual tests.
### Protocol with a client app; error-handling
* run driver without first running a client app. Driver window remains
responsive. It can be closed without error.
* run driver and then client app from a separate terminal. Driver window
populates with client app code.
* run client app and then driver from a separate terminal. Driver window
populates with client app code.
* run 2 client apps and then driver. Driver window populates with code from
one of the client apps at random. (NOT something to do in ernest; just
documenting expected behavior.)
* press C-n, add an empty definition:
```
foo = function()
end
```
Press C-d, select `foo` to delete its definition.
Driver doesn't hang, no errors in logs.
* press C-d, select `on` to try to delete its definition.
Driver shows an error that it's not allowed.
### 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.