mirror of
https://github.com/percona/percona-toolkit.git
synced 2026-04-22 01:00:09 +08:00
Merge mo-cleanup -r520..524.
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
package Bar;
|
||||
use Mo;
|
||||
use Lmo;
|
||||
extends 'Foo';
|
||||
1;
|
||||
@@ -1,5 +1,5 @@
|
||||
package Boo;
|
||||
use Mo;
|
||||
use Lmo;
|
||||
|
||||
has 'buff';
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
package Foo;
|
||||
use Mo;
|
||||
use Lmo;
|
||||
|
||||
has 'stuff';
|
||||
|
||||
@@ -14,31 +14,31 @@ use Test::More;
|
||||
$main::count = 1;
|
||||
|
||||
package Foo;
|
||||
use Mo 'build';
|
||||
use Lmo 'build';
|
||||
has 'foo' => (is => 'rw');
|
||||
sub BUILD {
|
||||
my $self = shift;
|
||||
::is_deeply(\@_, [qw(stuff 1)], "Foo's BUILD doesn't get the class name");
|
||||
::is_deeply([sort @_], [sort qw(stuff 1)], "Foo's BUILD doesn't get the class name");
|
||||
$self->foo($main::count++);
|
||||
}
|
||||
|
||||
package Bar;
|
||||
use Mo;
|
||||
use Lmo;
|
||||
extends 'Foo';
|
||||
has 'bar' => (is => 'rw');
|
||||
|
||||
package Baz;
|
||||
use Mo;
|
||||
use Lmo;
|
||||
extends 'Bar';
|
||||
has 'baz' => (is => 'rw');
|
||||
sub BUILD {
|
||||
my $self = shift;
|
||||
::is_deeply(\@_, [qw(stuff 1)], "Baz's BUILD doesn't get the class name");
|
||||
::is_deeply([sort @_], [sort qw(stuff 1)], "Baz's BUILD doesn't get the class name");
|
||||
$self->baz($main::count++);
|
||||
}
|
||||
|
||||
package Gorch;
|
||||
use Mo;
|
||||
use Lmo;
|
||||
extends 'Baz';
|
||||
has 'gorch' => (is => 'rw');
|
||||
|
||||
@@ -15,13 +15,13 @@ $main::count = 0;
|
||||
|
||||
{
|
||||
package Nothing;
|
||||
use Mo;
|
||||
use Lmo;
|
||||
has nothing_special => ( is => 'rw' );
|
||||
}
|
||||
ok(Nothing->can("BUILDARGS"), "Every class automatically gets buildargs");
|
||||
|
||||
package Foo;
|
||||
use Mo;
|
||||
use Lmo;
|
||||
has 'foo' => (is => 'rw');
|
||||
sub BUILDARGS {
|
||||
my $class = shift;
|
||||
@@ -30,12 +30,12 @@ sub BUILDARGS {
|
||||
}
|
||||
|
||||
package Bar;
|
||||
use Mo;
|
||||
use Lmo;
|
||||
extends 'Foo';
|
||||
has 'bar' => (is => 'rw');
|
||||
|
||||
package Baz;
|
||||
use Mo;
|
||||
use Lmo;
|
||||
extends 'Bar';
|
||||
has 'baz' => (is => 'rw');
|
||||
sub BUILDARGS {
|
||||
@@ -45,7 +45,7 @@ sub BUILDARGS {
|
||||
}
|
||||
|
||||
package Gorch;
|
||||
use Mo;
|
||||
use Lmo;
|
||||
extends 'Baz';
|
||||
has 'gorch' => (is => 'rw');
|
||||
|
||||
@@ -53,7 +53,7 @@ package main;
|
||||
|
||||
$main::count = 0;
|
||||
my $g = Foo->new;
|
||||
is $main::count, 1, "A class with no explicit parent inherits SUPER::BUILDARGS from Mo::Object";
|
||||
is $main::count, 1, "A class with no explicit parent inherits SUPER::BUILDARGS from Lmo::Object";
|
||||
|
||||
$main::count = 0;
|
||||
$g = Gorch->new;
|
||||
@@ -12,7 +12,7 @@ use English qw(-no_match_vars);
|
||||
use Test::More;
|
||||
|
||||
package Foo::coerce;
|
||||
use Mo;
|
||||
use Lmo;
|
||||
|
||||
has 'stuff' => (coerce => sub { uc $_[0] });
|
||||
|
||||
@@ -11,7 +11,7 @@ use warnings FATAL => 'all';
|
||||
use English qw(-no_match_vars);
|
||||
use Test::More;
|
||||
|
||||
use lib "$ENV{PERCONA_TOOLKIT_BRANCH}/t/lib/Mo";
|
||||
use lib "$ENV{PERCONA_TOOLKIT_BRANCH}/t/lib/Lmo";
|
||||
use Bar;
|
||||
|
||||
my $b = Bar->new;
|
||||
@@ -21,14 +21,14 @@ use Test::More;
|
||||
|
||||
{
|
||||
package Foo;
|
||||
use Mo qw(is required handles default builder);
|
||||
use Lmo qw(is required handles default builder);
|
||||
|
||||
has 'bar' => (is => 'rw', default => sub { 10 });
|
||||
|
||||
sub baz { 42 }
|
||||
|
||||
package Bar;
|
||||
use Mo qw(is required handles default builder);
|
||||
use Lmo qw(is required handles default builder);
|
||||
|
||||
has 'foo' => (
|
||||
is => 'rw',
|
||||
@@ -99,13 +99,13 @@ is($bar->foo_bar, 20, '... correctly curried a single argument');
|
||||
|
||||
{
|
||||
package Engine;
|
||||
use Mo qw(is required handles default builder);
|
||||
use Lmo qw(is required handles default builder);
|
||||
|
||||
sub go { 'Engine::go' }
|
||||
sub stop { 'Engine::stop' }
|
||||
|
||||
package Car;
|
||||
use Mo qw(is required handles default builder);
|
||||
use Lmo qw(is required handles default builder);
|
||||
|
||||
has 'engine' => (
|
||||
is => 'rw',
|
||||
@@ -137,14 +137,14 @@ is($car->stop, 'Engine::stop', '... got the right value from ->stop');
|
||||
|
||||
{
|
||||
package Baz;
|
||||
use Mo qw(is required handles default builder);
|
||||
use Lmo qw(is required handles default builder);
|
||||
|
||||
sub foo { 'Baz::foo' }
|
||||
sub bar { 'Baz::bar' }
|
||||
sub boo { 'Baz::boo' }
|
||||
|
||||
package Baz::Proxy1;
|
||||
use Mo qw(is required handles default builder);
|
||||
use Lmo qw(is required handles default builder);
|
||||
|
||||
has 'baz' => (
|
||||
is => 'ro',
|
||||
@@ -154,7 +154,7 @@ is($car->stop, 'Engine::stop', '... got the right value from ->stop');
|
||||
);
|
||||
|
||||
package Baz::Proxy2;
|
||||
use Mo qw(is required handles default builder);
|
||||
use Lmo qw(is required handles default builder);
|
||||
|
||||
has 'baz' => (
|
||||
is => 'ro',
|
||||
@@ -164,7 +164,7 @@ is($car->stop, 'Engine::stop', '... got the right value from ->stop');
|
||||
);
|
||||
|
||||
package Baz::Proxy3;
|
||||
use Mo qw(is required handles default builder);
|
||||
use Lmo qw(is required handles default builder);
|
||||
|
||||
has 'baz' => (
|
||||
is => 'ro',
|
||||
@@ -228,14 +228,14 @@ is($car->stop, 'Engine::stop', '... got the right value from ->stop');
|
||||
requires 'bar';
|
||||
|
||||
package Foo::Baz;
|
||||
use Mo qw(is required handles default builder);
|
||||
use Lmo qw(is required handles default builder);
|
||||
|
||||
sub foo { 'Foo::Baz::FOO' }
|
||||
sub bar { 'Foo::Baz::BAR' }
|
||||
sub baz { 'Foo::Baz::BAZ' }
|
||||
|
||||
package Foo::Thing;
|
||||
use Mo qw(is required handles default builder);
|
||||
use Lmo qw(is required handles default builder);
|
||||
|
||||
has 'thing' => (
|
||||
is => 'rw',
|
||||
@@ -244,7 +244,7 @@ is($car->stop, 'Engine::stop', '... got the right value from ->stop');
|
||||
);
|
||||
|
||||
package Foo::OtherThing;
|
||||
use Mo qw(is required handles default builder);
|
||||
use Lmo qw(is required handles default builder);
|
||||
use Moose::Util::TypeConstraints;
|
||||
|
||||
has 'other_thing' => (
|
||||
@@ -288,7 +288,7 @@ is($car->stop, 'Engine::stop', '... got the right value from ->stop');
|
||||
|
||||
{
|
||||
package Foo::Autoloaded;
|
||||
use Mo qw(is required handles default builder);
|
||||
use Lmo qw(is required handles default builder);
|
||||
|
||||
sub AUTOLOAD {
|
||||
my $self = shift;
|
||||
@@ -304,7 +304,7 @@ is($car->stop, 'Engine::stop', '... got the right value from ->stop');
|
||||
}
|
||||
|
||||
package Bar::Autoloaded;
|
||||
use Mo qw(is required handles default builder);
|
||||
use Lmo qw(is required handles default builder);
|
||||
|
||||
has 'foo' => (
|
||||
is => 'rw',
|
||||
@@ -313,7 +313,7 @@ is($car->stop, 'Engine::stop', '... got the right value from ->stop');
|
||||
);
|
||||
|
||||
package Baz::Autoloaded;
|
||||
use Mo qw(is required handles default builder);
|
||||
use Lmo qw(is required handles default builder);
|
||||
|
||||
has 'foo' => (
|
||||
is => 'rw',
|
||||
@@ -322,7 +322,7 @@ is($car->stop, 'Engine::stop', '... got the right value from ->stop');
|
||||
);
|
||||
|
||||
package Goorch::Autoloaded;
|
||||
use Mo qw(is required handles default builder);
|
||||
use Lmo qw(is required handles default builder);
|
||||
|
||||
eval {
|
||||
has 'foo' => (
|
||||
@@ -447,7 +447,7 @@ is($car->stop, 'Engine::stop', '... got the right value from ->stop');
|
||||
|
||||
{
|
||||
package Delegator;
|
||||
use Mo qw(is required handles default builder);
|
||||
use Lmo qw(is required handles default builder);
|
||||
|
||||
sub full { 1 }
|
||||
sub stub;
|
||||
@@ -15,7 +15,7 @@ use Test::More;
|
||||
|
||||
{
|
||||
package Foo;
|
||||
use Mo qw( is init_arg );
|
||||
use Lmo qw( is init_arg );
|
||||
|
||||
eval {
|
||||
has 'foo' => (
|
||||
@@ -64,7 +64,7 @@ use Test::More;
|
||||
|
||||
{
|
||||
package Foo2;
|
||||
use Mo qw( is init_arg clearer default );
|
||||
use Lmo qw( is init_arg clearer default );
|
||||
|
||||
my $counter;
|
||||
eval {
|
||||
@@ -12,7 +12,7 @@ use English qw(-no_match_vars);
|
||||
use Test::More;
|
||||
|
||||
package Foo::is;
|
||||
use Mo qw(is);
|
||||
use Lmo qw(is);
|
||||
|
||||
has 'stuff' => (is => 'ro');
|
||||
|
||||
@@ -29,7 +29,7 @@ sub lives_ok (&;$) {
|
||||
}
|
||||
|
||||
package Foo::isa;
|
||||
use Mo qw(isa);
|
||||
use Lmo qw(isa);
|
||||
|
||||
my @types = qw(Bool Num Int Str ArrayRef CodeRef HashRef RegexpRef);
|
||||
my @refs = ([], sub { }, {}, qr( ));
|
||||
@@ -191,11 +191,11 @@ my $thisperl = $^X;
|
||||
if ($^O ne 'VMS')
|
||||
{$thisperl .= $Config{_exe} unless $thisperl =~ m/$Config{_exe}$/i;}
|
||||
|
||||
my $pm_test = "$PerconaTest::trunk/t/lib/Mo/isa_subtest.pm";
|
||||
my $pm_test = "$PerconaTest::trunk/t/lib/Lmo/isa_subtest.pm";
|
||||
|
||||
ok(
|
||||
scalar(IPC::Cmd::run(command => [$thisperl, $pm_test])),
|
||||
"Mo types work with Scalar::Util::PP",
|
||||
"Lmo types work with Scalar::Util::PP",
|
||||
);
|
||||
|
||||
done_testing;
|
||||
@@ -16,7 +16,7 @@ use warnings;
|
||||
|
||||
{
|
||||
package isa_subtest;
|
||||
use Mo;
|
||||
use Lmo;
|
||||
|
||||
has attr => (
|
||||
is => 'rw',
|
||||
@@ -0,0 +1,83 @@
|
||||
#!/usr/bin/perl
|
||||
|
||||
BEGIN {
|
||||
die "The PERCONA_TOOLKIT_BRANCH environment variable is not set.\n"
|
||||
unless $ENV{PERCONA_TOOLKIT_BRANCH} && -d $ENV{PERCONA_TOOLKIT_BRANCH};
|
||||
unshift @INC, "$ENV{PERCONA_TOOLKIT_BRANCH}/lib";
|
||||
};
|
||||
|
||||
use strict;
|
||||
use warnings FATAL => 'all';
|
||||
use English qw(-no_match_vars);
|
||||
use Test::More;
|
||||
|
||||
sub throws_ok (&;$) {
|
||||
my ( $code, $pat, $msg ) = @_;
|
||||
eval { $code->(); };
|
||||
like ( $EVAL_ERROR, $pat, $msg );
|
||||
}
|
||||
|
||||
{
|
||||
package Metatest;
|
||||
use Lmo;
|
||||
|
||||
has stuff => ( is => 'rw', required => 1 );
|
||||
has init_stuff1 => ( is => 'rw', init_arg => undef );
|
||||
has init_stuff2 => ( is => 'rw', init_arg => 'fancy_name' );
|
||||
}
|
||||
{
|
||||
package Metatest::child;
|
||||
use Lmo;
|
||||
extends 'Metatest';
|
||||
|
||||
has more_stuff => ( is => 'rw' );
|
||||
}
|
||||
|
||||
my $obj = Metatest->new( stuff => 100 );
|
||||
|
||||
can_ok($obj, 'meta');
|
||||
|
||||
my $meta = $obj->meta();
|
||||
|
||||
is_deeply(
|
||||
[ sort $meta->attributes ],
|
||||
[ sort qw(stuff init_stuff1 init_stuff2) ],
|
||||
"->attributes works"
|
||||
);
|
||||
|
||||
is_deeply(
|
||||
[ sort $meta->attributes_for_new ],
|
||||
[ sort qw(stuff fancy_name) ],
|
||||
"->attributes_for_new works"
|
||||
);
|
||||
|
||||
# Do these BEFORE initializing ::extends
|
||||
my $meta2 = Metatest::child->meta();
|
||||
is_deeply(
|
||||
[ sort $meta2->attributes ],
|
||||
[ sort qw(stuff init_stuff1 init_stuff2 more_stuff) ],
|
||||
"->attributes works on a child class"
|
||||
);
|
||||
|
||||
is_deeply(
|
||||
[ sort $meta2->attributes_for_new ],
|
||||
[ sort qw(stuff fancy_name more_stuff) ],
|
||||
"->attributes_for_new works in a child class"
|
||||
);
|
||||
|
||||
my $meta3 = Metatest::child->new(stuff => 10)->meta();
|
||||
is_deeply(
|
||||
[ sort $meta3->attributes ],
|
||||
[ sort qw(stuff init_stuff1 init_stuff2 more_stuff) ],
|
||||
"->attributes works on an initialized child class"
|
||||
);
|
||||
|
||||
is_deeply(
|
||||
[ sort $meta3->attributes_for_new ],
|
||||
[ sort qw(stuff fancy_name more_stuff) ],
|
||||
"->attributes_for_new works in an initialized child class"
|
||||
);
|
||||
|
||||
throws_ok { Metatest::child->new() } qr/\QAttribute (stuff) is required for Metatest::child/;
|
||||
|
||||
done_testing;
|
||||
@@ -10,7 +10,7 @@ use strict;
|
||||
use warnings FATAL => 'all';
|
||||
use English qw(-no_match_vars);
|
||||
use Test::More;
|
||||
use lib "$ENV{PERCONA_TOOLKIT_BRANCH}/t/lib/Mo";
|
||||
use lib "$ENV{PERCONA_TOOLKIT_BRANCH}/t/lib/Lmo";
|
||||
|
||||
{ package Clean; use Foo; }
|
||||
|
||||
@@ -13,14 +13,14 @@ use Test::More;
|
||||
|
||||
#============
|
||||
package Foo::required;
|
||||
use Mo qw(required);
|
||||
use Lmo qw(required);
|
||||
|
||||
has 'stuff' => (required => 1);
|
||||
has 'stuff2' => (required => 1);
|
||||
has 'foo' => ();
|
||||
#============
|
||||
package Foo::required_is;
|
||||
use Mo qw(required);
|
||||
use Lmo qw(required);
|
||||
|
||||
has 'stuff' => (required => 1, is => 'ro');
|
||||
#============
|
||||
@@ -28,7 +28,7 @@ has 'stuff' => (required => 1, is => 'ro');
|
||||
package main;
|
||||
|
||||
my $f0 = eval { Foo::required->new(stuff2 => 'foobar') };
|
||||
like $@, qr/^\QAttribute (stuff) is required/, 'Mo dies when a required value is not provided';
|
||||
like $@, qr/^\QAttribute (stuff) is required/, 'Lmo dies when a required value is not provided';
|
||||
|
||||
my $f = Foo::required->new(stuff => 'fubar', stuff2 => 'foobar');
|
||||
is $f->stuff, 'fubar', 'Object is correctly initialized when required values are provided';
|
||||
@@ -11,9 +11,9 @@ use warnings FATAL => 'all';
|
||||
use English qw(-no_match_vars);
|
||||
use Test::More;
|
||||
|
||||
eval 'package Foo; use Mo; $x = 1';
|
||||
eval 'package Foo; use Lmo; $x = 1';
|
||||
|
||||
like $@, qr/Global symbol "\$x" requires explicit package name/,
|
||||
'Mo is strict';
|
||||
'Lmo is strict';
|
||||
|
||||
done_testing;
|
||||
@@ -13,18 +13,18 @@ use Test::More;
|
||||
|
||||
#============
|
||||
package Foo;
|
||||
use Mo;
|
||||
use Lmo;
|
||||
|
||||
has 'this';
|
||||
|
||||
#============
|
||||
package main;
|
||||
|
||||
ok defined(&Foo::has), 'Mo exports has';
|
||||
ok defined(&Foo::extends), 'Mo exports extends';
|
||||
ok not(defined(&Foo::new)), 'Mo does not export new';
|
||||
ok 'Foo'->isa('Mo::Object'), 'Foo isa Mo::Object';
|
||||
is "@Foo::ISA", "Mo::Object", '@Foo::ISA is Mo::Object';
|
||||
ok defined(&Foo::has), 'Lmo exports has';
|
||||
ok defined(&Foo::extends), 'Lmo exports extends';
|
||||
ok not(defined(&Foo::new)), 'Lmo does not export new';
|
||||
ok 'Foo'->isa('Lmo::Object'), 'Foo isa Lmo::Object';
|
||||
is "@Foo::ISA", "Lmo::Object", '@Foo::ISA is Lmo::Object';
|
||||
ok 'Foo'->can('new'), 'Foo can new';
|
||||
ok 'Foo'->can('this'), 'Foo can this';
|
||||
|
||||
@@ -50,7 +50,7 @@ ok not(defined($f->{this})), '{this} is not defined';
|
||||
|
||||
#============
|
||||
package Bar;
|
||||
use Mo 'builder', 'default';
|
||||
use Lmo 'builder', 'default';
|
||||
extends 'Foo';
|
||||
|
||||
has 'that';
|
||||
@@ -70,7 +70,7 @@ has guess => (
|
||||
#============
|
||||
package main;
|
||||
|
||||
ok 'Bar'->isa('Mo::Object'), 'Bar isa Mo::Object';
|
||||
ok 'Bar'->isa('Lmo::Object'), 'Bar isa Lmo::Object';
|
||||
ok 'Bar'->isa('Foo'), 'Bar isa Foo';
|
||||
is "@Bar::ISA", 'Foo', '@Bar::ISA is Foo';
|
||||
ok 'Bar'->can('new'), 'Bar can new';
|
||||
@@ -85,7 +85,7 @@ my $b = Bar->new(
|
||||
|
||||
is ref($b), 'Bar', 'Object created';
|
||||
ok $b->isa('Foo'), 'Inheritance works';
|
||||
ok $b->isa('Mo::Object'), 'Bar isa Mo::Object since Foo isa Mo::Object';
|
||||
ok $b->isa('Lmo::Object'), 'Bar isa Lmo::Object since Foo isa Lmo::Object';
|
||||
is $b->this, 'thing', 'Read works in parent class';
|
||||
is $b->that, 'thong', 'Read works in current class';
|
||||
is ref($b->them), 'ARRAY', 'default works';
|
||||
@@ -103,7 +103,7 @@ is $b->guess, 'me me me', 'default trumps builder';
|
||||
|
||||
#============
|
||||
package Baz;
|
||||
use Mo 'build';
|
||||
use Lmo 'build';
|
||||
|
||||
has 'foo';
|
||||
|
||||
@@ -114,7 +114,7 @@ sub BUILD {
|
||||
|
||||
#============
|
||||
package Maz;
|
||||
use Mo;
|
||||
use Lmo;
|
||||
extends 'Baz';
|
||||
|
||||
has 'bar';
|
||||
Reference in New Issue
Block a user