# from Nicholas Clark # on Monday 05 February 2007 03:24 am: >Important differences were > >1: you only print out the entire test results as an atomic line when > it has finished >2: You have no idea which test is going to finish next >3: You can't print running progress on tests
Ah, there's the rub. I was planning to simply fork before hitting _runtest(), then serialize the parser object[*] from the slave to collect it in the aggregator in the master. I guess I figured that legible progress reporting could go hang :-D [*] Though Storable::freeze($parser) fails because of globs. But, YAML::Syck is perfectly happy to dump it. We shouldn't need the _stream attribute after the parser is done, so maybe we can delete that with $parser->freeze? So, I'm thinking progress reporting comes from the harness subprocess on STDOUT (in "$i/$n\n" form), and TAP just gets read by the parser as usual (though one level deeper in subprocesses), then a stripped-down parser object gets shipped back to the master for aggregation. With all of that in place, I think we could figure out what to do about outputting running progress from the master (starting with simply which tests are complete.) Summarizing, I think it would be very feasible as a subclass given these refactorings and additions: o TAPx::Harness::test_loop() method as overridable inner part of aggregate_tests(), with some rejuggling of $periods calculation o TAPx::Harness::_do_test(\%args) method as overridable inner part of _runtest(), allowing the subclass to not have to deal with args processing, spool, etc. o TAPx::Parser::freeze() -- disconnect _stream and etc., serialize o TAPx::Parser::thaw() -- deserialize (no need to reconnect) Sound workable? Thanks, Eric -- Don't worry about what anybody else is going to do. The best way to predict the future is to invent it. --Alan Kay --------------------------------------------------- http://scratchcomputing.com ---------------------------------------------------