Am 16.02.2014 um 16:29 schrieb Tim Bunce <tim.bu...@pobox.com>:

> On Sat, Feb 15, 2014 at 12:07:13PM +0100, Jens Rehsack wrote:
>> Hi Tim,
>> 
>> I’d like to go one step further with Tumbler and Context.
>> For LMU (https://github.com/perl5-utils/List-MoreUtils) and MooX::Cmd
>> (https://github.com/Getty/p5-moox-cmd) I’d like to write the
>> distributed tests based on a bundled (inc/, not installed etc.) copy
>> of Tumbler & Co.
>> 
>> I think, seeing how it behaves in the wild will provide more
>> information. Also it allows to prove how good it can be adapted
>> (MooX::Test analogous to DBIT, but arranges tests with Mo, Moo, Moops
>> and Moose - and maybe for some hard guys, with
>> Class::Tiny+Role::Tiny).  For LMU I have to test the
>> all/any/none/notall with different tests for different implementations
>> - but have also to test xs/perl ($ENV{LMU_PP}) and all implementations
>> in one import etc. (read: several test plugins parallel with different
>> function names to call ...).
>> 
>> What do you think?
> 
> Sounds good.
> 
> I've renamed Tumbler to Data::Tumbler and polished it up a little
> (and made corresponding changes to both our tumbler.pl files).

git push eaten by stormy weather?

> I'm still not very happy about the interface between Data::Tumbler and
> Context, i.e.:
> 
>    tumbler(
>        \@remaining_providers,
>        $consumer,
>        [ @$path,  $name ],
>        $context->new($context, $variants{$name}),    <=== this
>        $payload,
>    );
> 
> Tumbler shouldn't be coupled to Context at all.
> 
> I think that should be either this:
> 
>        [ @$path,  $name ],
>        [ $context, $variants{$name} ],
> or
>        [ @$path,  $name ],
>        $code_ref->($context, $variants{$name}),


I still prefer entire OO API (I really like function objects as
C++ provides them, but I think expecting users overload their
classes will be a no-go ^^) - this is one thingie I want to play
with.

> The first means that $context wouldn't be an object any more (though
> individual settings would) so instead of calling methods on context,
> like $context->get_env_var($name) you'd call functions like
> get_env_var_in_context($context, $name);

Objects with an expected role being provided sounds more reasonable
to me. This would also allow to hide implementation details (on
both sides).

> The second option means passing in an extra code ref into tumbler().
> Either as an extra parameter which then has to be passed down through
> the recursion, or by making Data::Tumbler be a class that has the code
> ref as an attribute.
> 
> I'm leaning more towards the second as being an object is likely to have
> extra benefits.
> 
> 
> Returning to your suggestion of shipping Tumbler and Context a build-time 
> tools
> in another module. Yes, that's worth doing.
> 
> Note that Tumbler and Context are not directly related to the test
> generation use-case.  So I think it would be a good idea to create another
> module which is aimed directly at supporting test generation and which
> uses Tumbler and Context.  That module would contain get_input_tests(),
> write_test_file(), plus a plugin mechanism (eg for dbd_dbm_settings_provider).
> 
> I suggest you start by creating a prototype of that module in
> sandbox/tim/lib and use it in sandbox/jens/tumbler.pl. Once you've
> something working I'll hack on it and adopt it in my tumbler.pl.
> 
> Sound ok?

I would start in the real life (but not doing releases) and see whether it
works as expected or not. I did a minor shot for MooX::Cmd related tests and
I think it can work in a limited environment (MX::Cmd, LMU are such) for
clinical trials ;)

Cheers
-- 
Jens Rehsack
rehs...@gmail.com





Reply via email to