p5-moox-classattribute / t / 30mgca.t

=head1 PURPOSE

Test basic L<Method::Generate::ClassAccessor> functionality.

=head1 AUTHOR

Toby Inkster E<lt>tobyink@cpan.orgE<gt>.

=head1 COPYRIGHT AND LICENCE

This software is copyright (c) 2013 by Toby Inkster.

This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.

=cut

use strict;
use warnings;
use Test::More;

use Method::Generate::ClassAccessor;
use Sub::Defer;
use constant Gen => 'Method::Generate::ClassAccessor';
use constant Pkg => 'Local::Test::Package';

my $generator = Gen->new;
isa_ok $generator, 'Method::Generate::Accessor';

$generator->generate_method(
	Pkg,
	foo => {
		is        => 'rw',
		writer    => 'set_foo',
		reader    => 'get_foo',
		accessor  => 'access_foo',
		predicate => 'has_foo',
		clearer   => 'clear_foo',
		handles   => [qw/ bar baz /],
	},
);

my @methods = qw/
	set_foo get_foo access_foo has_foo clear_foo
	_assert_foo bar baz
/;

can_ok Pkg, @methods;

Pkg->set_foo('42');
ok Pkg->has_foo;
is(Pkg->get_foo, 42);
Pkg->clear_foo;
ok not Pkg->has_foo;
Pkg->access_foo('Local::Bottoms');
is(Pkg->access_foo, 'Local::Bottoms');

ok not eval { Pkg->baz };
like $@, qr{^Can't locate object method "baz" via package "Local::Bottoms"};

done_testing;
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.