Hi Gotoken,
I suddenly have an enlightment ;-) So I have found a way how you can
build the reports from templates. I have followed your hint. And here
it comes:
To build a report template, you can use strings and insert some special
substitution modifier. These are currently...
%C -- Category number
%L -- Locality (Set by `ok' if test not OK; (caller[0]))
%S -- Section number or "0" if no section used yet.
%T -- Test number
%W -- `What' text, defined by last `section' or `check' cmd
The following substitutions are valid between `start_tests' and
`end_tests'. They will be reset by the latter.
%NT -- Amount of all tests executed.
%NC -- Amount of all categories used so far.
%NF -- Amount of all failed tests.
The last two substitutions should support you to define more
complex or complicated text.
%{<cond>,<text>} -- If <cond> is "0", then <text> will be
skipped. <cond> may be e.g. `%S'.
%(<cond>,<text1>,<text2>) -- If <cond> is "1", <text1> will be
substituted into the template.
However, if <cond> is not "1",
<text2> will be substituted.
With that you can build you own reports. BTW: All standard reports are
build with these templates :-)
Example:
"Test%(%NT,,s) finished (totally %NT test%(%NT,,s)"+
"%{%NF,; %NF test%(%NF,,s) failed})"
Would substitute to the following reports depending of the
current state of `ntests' and `nfails'.
ntests==1, nfails==0
==> "Tests finished (totally 1 test)"
ntests==1, nfails==1
==> "Tests finished (totally 2 tests; 1 test failed)"
ntests==1, nfails==2
==> "Tests finished (totally 2 tests; 2 tests failed)"
ntests==2, nfails==0
==> "Tests finished (totally 2 tests)"
ntests==2, nfails==1
==> "Tests finished (totally 1 tests; 1 test failed)"
ntests==2, nfails==2
==> "Tests finished (totally 1 tests; 2 tests failed)"
Would that be sufficient for you?
Furthermore I have now introduced the `section' command. Now you can
group you tests like that:
:
start_tests
section 1,"Ruby tests"
section 2,"Base tests"
check "assignment"
a=[]; a[0] ||= "bar";
ok(a[0] == "bar")
h={}; h["foo"] ||= "bar";
ok(h["foo"] == "bar")
check "condition"
$x = '0';
$x == $x && ok(true)
$x != $x && ok(false)
section 2,"Complex tests"
:
end_tests
:
What do you think?
I will doing some documentation for `rd2html' before I release the new
version.
LONG LIVE RUBY!
\cle