Thanks for the comments, Noel. Noel Welsh wrote at 08/27/2011 05:21 PM:
I think the keyword argument method is a mistake. It seems you'd have to do a lot of checking in the test macro to make sure the user doesn't specify non-sensical parameters. E.g. if I specify #:exn and #:val what happens?
You're speaking of programming difficulty for implementing Overeasy itself? "syntax-parse" should make that particular one (both "#:val" and "#:exn" present) a non-issue. I suspect that rest of any nonsensical argument combinations can be checked easily.
The test macro grabs whatever values value-expr produces, along with the output to current-output and current-error, and any exceptions and passes these values to match-expr, which is a predicate that produces a boolean value given the above information
What I'd like to do as a requirements analysis exercise is to identify a representative set of side-effects that people would like to have tested, like "current-output-port" and "current-error-port" are now. If, in practice, there's only one or two more, we might just hardcode them into Overeasy for now.
However, in the future, I would like to treat the "#:val" and "#:exn" specially, but to make all the effects testing be plugins, for extensibility. The "test" macro could then consult the test context to get the sequence of effects to be tested, and would use the that info for parsing unfamiliar keyword arguments and for evaluating the result.
There's no reason that people who want to, say, check side-effects in an RDBMS can't just hook that effects testing into their "#:val-check", but letting them extend the "test" syntax might be convenient. (The "test" macro admittedly has some syntactic sugar going on already, and I think that making it extensible this way might be a good idea.)
Since test must be a macro, it should capture location and report that when a test fails.
Agreed. I almost added this originally, and it is on my TODO list. I would like one of the report handlers to make messages that Emacs "compile" will understand.
(Aside: "test" didn't *have* to be a macro, if we were willing to do an "eval" for "#:code". I was tempted to do that for handling broken syntax expansions more robust by default. For now, I'm trying to avoid "eval" in Overeasy, although I can add it in later, if necessary, and if I can make it work wrt the calling environment in the way the user expects.)
"No special forms for setup and tear-down are required, nor are they provided." I believe a test library should provide these conveniences around dynamic-wind.
OK, I'd like to see examples of this. Do you think it will always be things like setting up a test input file or database tables, and then deleting files and tables when done? Also, does this include syntax that needs to be done ``around'' multiple tests, like the following, correct?
(with-something-used-by-bar (test (bar 42) 69) (test (bar 88) 1701)) -- http://www.neilvandyke.org/ _________________________________________________ For list-related administrative tasks: http://lists.racket-lang.org/listinfo/users