Well it's working how I thought it should and how I intended. The way I see it, if a test throws a "StopTest" it's only going to be under a very critical circumstance. I use it to halt tests when a test database or application server is down, and to me there's no use running anything else at that point.

However, I can see now that's probably not how FitNesse intended it. While it comes as a surprise to me, I think the intent can be seen by FitNesse's behavior. After the ABORT_SLIM_TEST has been triggered and the current test table finishes executing, FitNesse does not try to execute the remainder of the tests on the test page - they're set to a gray "Test Not Run" result. However, tests that follow on a different page FitNesse does in fact send to slim to execute, so clearly FitNesse only intends ABORT_SLIM_TEST to abort the test page, not the whole suite.

I think I can address that. Basically $script:ABORT_SLIM_TEST should be reset with each new message from the server, so I think the start of process_message would be a good place. Once the throw "StopTest" occurs, $script:ABORT_SLIM_TEST will ensure that the rest of the table tests are skipped and then will rely on FitNesse not sending any more tables on the page to skip the remainder. Once FitNesse starts sending the tests again, testing should resume.

However, I think I'll add support for stopping all testing as well. If a StopTest exception stops the current Test, why not have a StopSuite that stops the entire Suite? Basically I'll set $script:ABORT_SLIM_SUITE when a throw "StopSuite" occurs and have it work like the current functionality does, and modify the ABORT_SLIM_TEST behavior to work more inline with what seems to be the original design.