# from Andy Armstrong # on Thursday 01 November 2007 09:33: >On 1 Nov 2007, at 15:44, A. Pagaltzis wrote: >> * Andy Armstrong <[EMAIL PROTECTED]> [2007-11-01 15:50]: >>> The config needs to be dynamic at test time - so it might as >>> well be a script... >> But it only needs to be dynamic in a minority of cases. So it >> seems to me it should be the other way around – rather than run >> a script to emit the config, have a config that has a directive >> to run a script and include its output as part of the config.
This would be preferable for introspectability, yes. >Well if it doesn't need to be dynamic it doesn't need to exist at all >- you just have the tests you want to run. But rather than say "not dynamic", let's say "not arbitrary". The config is always dynamic -- e.g. a canned method require_gui() would need to check whatever cross-platform checks and also maybe consult the tester's "allowables" settings. The distinction between arbitrary and dynamic is that arbitrary code hinders introspection while dynamic can mean that it simply refers to a pre-determined check routine (e.g. the Apache Ant 'exec' directive introduces "arbitrary" into what is otherwise a 100% declarative manifest.) >> That makes it easier for other tools to analyse the test configs. Introspection. Not only can we decide whether or not to run the gui tests, but we know which ones require the gui. If you just source `controller.pl` (arbitrary code) and get a valid list for the current environment, you have no way to tell which of the selections are affected by which bits of the environment. To determine the gui tests, you have to turn-off the $DISPLAY (won't work on windows, and possibly mac) run `controller.pl` again and then compare the new output. Note the difficulty of handling "I have a gui, but I don't want the tests messing with it" on platforms like windows. With a declarative scheme, we have a tree of data and we can simply ask which selections require_gui(). Those tests can then be run as their own group, or even simply examined for some other interesting information. And even in the standard use-case, if the tester has opted to not have her gui interrupted by the tests, they don't run. The declarative scheme makes it easy to "do the right thing" because author education is reduced to simply: "set require_gui for the tests that need a gui" (as opposed to e.g. "check $DISPLAY and then check the preferences file, etc.") It's a lot harder to get it wrong if it involves code that you didn't write. >>> So isn't that nearly TSP? :) >> ... don’t think the harness should look at the >> output of tests to check if it’s TSP rather than TAP. The list of >> tests to run should be determined up front > >Well that's desirable certainly - but isn't it also valuable to be >able to dynamically include include or exclude large numbers of tests >when you need to? And to do so using a well defined protocol? Possibly, but it shouldn't be part of the t/*.t files and I think we would do well to make it declarative rather than a protocol emitted by arbitrary code. >> , and the test scripts >> should only ever output TAP. +1 >> ... YAML ... >Oh sure - that'd be fine. The choice of representation is somewhat >orthogonal to whether it's a good idea in the first place though. I think we've decided that "selectable tests" are a good idea WRT "extra testing." Declarative requirements are probably just as useful WRT normal tests. Note though, that Martin mentions "xt/" in the bug report ;-) --Eric -- To a database person, every nail looks like a thumb. --Jamie Zawinski --------------------------------------------------- http://scratchcomputing.com ---------------------------------------------------