pensieve.love/Manual_tests.md

70 lines
3.8 KiB
Markdown
Raw Normal View History

I care a lot about being able to automatically check _any_ property about my
2022-06-15 05:47:49 +00:00
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.
2022-07-20 15:53:31 +00:00
* Initializing settings:
- from previous session
- Filename as absolute path
- Filename as relative path
- from defaults
* 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
* Mouse click within pane can select text
* A single pane is colored distinctly and called the cursor pane
* Hitting ctrl+x toggles edit mode for the cursor pane
* There can never be more than one pane in edit mode
* Moving arrow keys and shift-arrow keys and pageup/pagedown normally pans surface around while keeping cursor on screen
* Exception: When cursor pane is in edit mode, keys move the cursor as in lines.love
* Scrolling within a cursor pane larger than screen height in edit mode also pans the surface around
* Trying to scroll past edge of cursor pane in edit mode doesn't move the surface
* Mouse click outside pane can pan surface around
* Cursor pane never changes
* The pane in edit mode might go off screen
* Cursor in pane in edit mode might go off screen
* TODO: lines.love assumes cursor can never be above screen top. Do we want to violate this constraint in pensieve? Or move the cursor to satisfy it as needed? Or forbid movements that would violate it?
* Keypresses not sent to cursor pane if off screen
* Keypresses not sent to pane in edit mode if its cursor is off screen
* Typing into a pane in edit mode never pans the surface if cursor is visible
* hit pagedown. All columns scroll down by same amount.
* hit pageup. All columns scroll up by same amount.
* move mouse off any panes, press down and drag around. All columns pan by same amount.
* select a pane, hit ctrl+x, hit pagedown. All columns scroll down by same amount.
* select a pane, hit ctrl+x, hit pageup. All columns scroll up by same amount.
* select a pane, hit ctrl+x, move mouse off any panes, press down and drag around. All columns pan by same amount.
* select a pane, hit ctrl+x, hit pagedown. Cursor remains visible.
* select a pane, hit ctrl+x, hit pageup. Cursor remains visible.
* select a pane, hit ctrl+x, hit pagedown, type some text. Surface does not pan.
* select a pane, hit ctrl+x, hit pagedown, move mouse off any panes, press down and drag around. All columns pan by same amount.
* select a pane, hit pagedown, hit ctrl+x. There should be some indication that the pane can be edited, and where, either on- or off-screen.
2022-07-20 15:53:31 +00:00
### 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
2022-06-20 15:24:56 +00:00
byte offsets with the suffix `_offset`, and character positions as `_pos`.
For example, `string.sub` should never use a `_pos` to substring, only an
`_offset`.
* Some ADT/interface support would be helpful in keeping per-line state in
sync. Any change to line data should clear line `fragments` and
`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.
* 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.