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