Skip to content

Commit

Permalink
Convert to subtests for issue mojolicious#1520
Browse files Browse the repository at this point in the history
  • Loading branch information
petdance authored and karenetheridge committed Sep 20, 2023
1 parent aea8f3f commit 526b2b5
Showing 1 changed file with 79 additions and 67 deletions.
146 changes: 79 additions & 67 deletions t/mojo/roles.t
Expand Up @@ -52,72 +52,84 @@ use Mojo::Collection;
use Mojo::DOM;
use Mojo::File;

# Plain class
my $obj = Mojo::RoleTest->new(name => 'Ted');
is $obj->name, 'Ted', 'attribute';
is $obj->hello, 'hello Ted', 'method';

# Empty roles
my $fred = Mojo::RoleTest->with_roles()->new(name => 'Fred');
is $fred->name, 'Fred', 'attribute';
is $fred->hello, 'hello Fred', 'method';

# Empty object roles
my $obj_empty = $obj->with_roles();
is $obj_empty->name, 'Ted', 'attribute';
is $obj_empty->hello, 'hello Ted', 'method';

# Single role
my $obj2 = Mojo::RoleTest->with_roles('Mojo::RoleTest::Role::LOUD')->new;
is $obj2->hello, 'HEY! BOB!!!', 'role method';
is $obj2->yell, 'HEY!', 'another role method';

# Single role (shorthand)
my $obj4 = Mojo::RoleTest->with_roles('+LOUD')->new;
is $obj4->hello, 'HEY! BOB!!!', 'role method';
is $obj4->yell, 'HEY!', 'another role method';

# Multiple roles
my $obj3 = Mojo::RoleTest->with_roles('Mojo::RoleTest::Role::quiet', 'Mojo::RoleTest::Role::LOUD')->new(name => 'Joel');
is $obj3->name, 'Joel', 'base attribute';
is $obj3->whisper, 'psst, joel', 'method from first role';
$obj3->prefix('psssst, ');
is $obj3->whisper, 'psssst, joel', 'method from first role';
is $obj3->hello, 'HEY! JOEL!!!', 'method from second role';

# Multiple roles (shorthand)
my $obj5 = Mojo::RoleTest->with_roles('+quiet', '+LOUD')->new(name => 'Joel');
is $obj5->name, 'Joel', 'base attribute';
is $obj5->whisper, 'psst, joel', 'method from first role';
is $obj5->hello, 'HEY! JOEL!!!', 'method from second role';

# Multiple roles (mixed)
my $obj6 = Mojo::RoleTest->with_roles('Mojo::RoleTest::Role::quiet', '+LOUD')->new(name => 'Joel');
is $obj6->name, 'Joel', 'base attribute';
is $obj6->whisper, 'psst, joel', 'method from first role';
is $obj6->hello, 'HEY! JOEL!!!', 'method from second role';

# Multiple object roles (mixed)
my $obj7 = Mojo::RoleTest->new(name => 'Joel')->with_roles('Mojo::RoleTest::Role::quiet', '+LOUD');
is $obj7->name, 'Joel', 'base attribute';
is $obj7->whisper, 'psst, joel', 'method from first role';
is $obj7->hello, 'HEY! JOEL!!!', 'method from second role';

# Multiple Mojo::Base roles
my $obj8 = Mojo::RoleTest->with_roles('+quiet', 'Mojo::RoleTest::Hello')->new(name => 'Joel');
is $obj8->name, 'Joel', 'base attribute';
is $obj8->whisper, 'psst, joel', 'method from first role';
is $obj8->hello, 'hello mojo!', 'method from second role';

# Classes that are not subclasses of Mojo::Base
my $stream = Mojo::ByteStream->with_roles('Mojo::RoleTest::Hello')->new;
is $stream->hello, 'hello mojo!', 'right result';
my $c = Mojo::Collection->with_roles('Mojo::RoleTest::Hello')->new;
is $c->hello, 'hello mojo!', 'right result';
my $dom = Mojo::DOM->with_roles('Mojo::RoleTest::Hello')->new;
is $dom->hello, 'hello mojo!', 'right result';
my $file = Mojo::File->with_roles('Mojo::RoleTest::Hello')->new;
is $file->hello, 'hello mojo!', 'right result';
subtest 'Plain class' => sub {
my $obj = Mojo::RoleTest->new(name => 'Ted');
is $obj->name, 'Ted', 'attribute';
is $obj->hello, 'hello Ted', 'method';
};

subtest 'Empty roles' => sub {
my $fred = Mojo::RoleTest->with_roles()->new(name => 'Fred');
is $fred->name, 'Fred', 'attribute';
is $fred->hello, 'hello Fred', 'method';
};

subtest 'Empty object roles' => sub {
my $obj = Mojo::RoleTest->new(name => 'Ted');
my $obj_empty = $obj->with_roles();
is $obj_empty->name, 'Ted', 'attribute';
is $obj_empty->hello, 'hello Ted', 'method';
};

subtest 'Single role' => sub {
my $obj = Mojo::RoleTest->with_roles('Mojo::RoleTest::Role::LOUD')->new;
is $obj->hello, 'HEY! BOB!!!', 'role method';
is $obj->yell, 'HEY!', 'another role method';
};

subtest 'Single role (shorthand)' => sub {
my $obj = Mojo::RoleTest->with_roles('+LOUD')->new;
is $obj->hello, 'HEY! BOB!!!', 'role method';
is $obj->yell, 'HEY!', 'another role method';
};

subtest 'Multiple roles' => sub {
my $obj
= Mojo::RoleTest->with_roles('Mojo::RoleTest::Role::quiet', 'Mojo::RoleTest::Role::LOUD')->new(name => 'Joel');
is $obj->name, 'Joel', 'base attribute';
is $obj->whisper, 'psst, joel', 'method from first role';
$obj->prefix('psssst, ');
is $obj->whisper, 'psssst, joel', 'method from first role';
is $obj->hello, 'HEY! JOEL!!!', 'method from second role';
};

subtest 'Multiple roles (shorthand)' => sub {
my $obj = Mojo::RoleTest->with_roles('+quiet', '+LOUD')->new(name => 'Joel');
is $obj->name, 'Joel', 'base attribute';
is $obj->whisper, 'psst, joel', 'method from first role';
is $obj->hello, 'HEY! JOEL!!!', 'method from second role';
};

subtest 'Multiple roles (mixed)' => sub {
my $obj = Mojo::RoleTest->with_roles('Mojo::RoleTest::Role::quiet', '+LOUD')->new(name => 'Joel');
is $obj->name, 'Joel', 'base attribute';
is $obj->whisper, 'psst, joel', 'method from first role';
is $obj->hello, 'HEY! JOEL!!!', 'method from second role';
};

subtest 'Multiple object roles (mixed)' => sub {
my $obj = Mojo::RoleTest->new(name => 'Joel')->with_roles('Mojo::RoleTest::Role::quiet', '+LOUD');
is $obj->name, 'Joel', 'base attribute';
is $obj->whisper, 'psst, joel', 'method from first role';
is $obj->hello, 'HEY! JOEL!!!', 'method from second role';
};

subtest 'Multiple Mojo::Base roles' => sub {
my $obj = Mojo::RoleTest->with_roles('+quiet', 'Mojo::RoleTest::Hello')->new(name => 'Joel');
is $obj->name, 'Joel', 'base attribute';
is $obj->whisper, 'psst, joel', 'method from first role';
is $obj->hello, 'hello mojo!', 'method from second role';
};

subtest 'Classes that are not subclasses of Mojo::Base' => sub {
my $stream = Mojo::ByteStream->with_roles('Mojo::RoleTest::Hello')->new;
is $stream->hello, 'hello mojo!', 'right result';
my $c = Mojo::Collection->with_roles('Mojo::RoleTest::Hello')->new;
is $c->hello, 'hello mojo!', 'right result';
my $dom = Mojo::DOM->with_roles('Mojo::RoleTest::Hello')->new;
is $dom->hello, 'hello mojo!', 'right result';
my $file = Mojo::File->with_roles('Mojo::RoleTest::Hello')->new;
is $file->hello, 'hello mojo!', 'right result';
};

done_testing();

0 comments on commit 526b2b5

Please sign in to comment.