Use Rubyish Blocks with Test::XPath
Thanks to the slick Devel::Declare-powered PerlX::MethodCallWithBlock
created by gugod, the latest
version of Test::XPath supports Ruby-style blocks. The
Ruby version of assert_select, as I
mentioned previously, looks like this:
assert_select "ol" { |elements|
elements.each { |element|
assert_select element, "li", 4
}
}
I’ve switched to the brace syntax for greater parity with Perl. Test::XPath, meanwhile, looks like this:
my @css = qw(foo.css bar.css);
$tx->ok( '/html/head/style', sub {
my $css = shift @css;
shift->is( './@src', $css, "Style src should be $css");
}, 'Should have style' );
But as of Test::XPath 0.13, you can now just use PerlX::MethodCallWithBlock to pass blocks in the Rubyish way:
use PerlX::MethodCallWithBlock;
my @css = qw(foo.css bar.css);
$tx->ok( '/html/head/style', 'Should have style' ) {
my $css = shift @css;
shift->is( './@src', $css, "Style src should be $css");
};
Pretty slick, eh? It required a single-line change to the source code. I’m really happy with this sugar. Thanks for the great hack, gugod!














Comments & Trackbacks
Discussion is now closed.