package Brownie; use 5.008001; use strict; use warnings; use Brownie::Session; use Sub::Install; our $VERSION = '0.09'; my %container; for my $accessor (qw{ driver app_host app }) { Sub::Install::install_sub({ code => sub { my ($class, $args) = @_; return $container{$accessor} unless @_ > 1; $container{$accessor} = $args; }, as => $accessor, }); } my %session; sub current_session { my $class = shift; # TODO: changable session $session{default} ||= Brownie::Session->new( app => Brownie->app, app_host => Brownie->app_host, driver => Brownie->driver, ); } sub reset_sessions { my $class = shift; undef %session; } END { __PACKAGE__->reset_sessions } 1; =head1 NAME Brownie - Browser integration framework inspired by Capybara =head1 SYNOPSIS =head2 OO-Style use Test::More; use Brownie::Session; # external server my $session = Brownie::Session->new( driver => 'Mechanize', app_host => 'http://app.example.com:5000', ); # PSGI app my $session = Brownie::Session->new( driver => 'Mechanize', app => sub { ...(PSGI app)... }, ); # PSGI file my $session = Brownie::Session->new( driver => 'Mechanize', app => 'app.psgi', ); $session->visit('/'); is $session->title => 'Some Title'; $session->fill_in('User Name' => 'brownie'); $session->fill_in('Email Address' => 'brownie@example.com'); $session->click_button('Login'); like $session->source => qr/Welcome (.+)/; $session->fill_in(q => 'Brownie'); $session->click_link_or_button('Search'); like $session->title => qr/Search result of Brownie/i; done_testing; =head2 DSL-Style use Brownie::DSL; # external server Brownie->driver('Mechanize'); Brownie->app_host('http://app.example.com:5000'); # PSGI app Brownie->driver('Mechanize'); Brownie->app(sub { ...(PSGI app)... }); # psgi file Brownie->driver('Mechanize'); Brownie->app('app.psgi'); visit('/'); is page->title, 'Some Title'; fill_in('User Name' => 'brownie'); fill_in('Email Address' => 'brownie@example.com'); click_button('Login'); like page->source => qr/Welcome (.+)/; fill_in(q => 'Brownie'); lick_link_or_button('Search'); like page->title => qr/Search result of Brownie/i; done_testing; =head1 DESCRIPTION Brownie is browser integrtion framework. It is inspired by Capybara (Ruby). =head1 VOCABULARY =over 4 =item * C =item * C =item * C =item * C =item * C<source> =item * C<screenshot($filename)> =item * C<click_link($locator)> =item * C<click_button($locator)> =item * C<click_on($locator)> =item * C<fill_in($locator, $value)> =item * C<choose($locator)> =item * C<check($locator)> =item * C<uncheck($locator)> =item * C<select($locator)> =item * C<unselect($locator)> =item * C<attach_file($locator, $filename)> =item * C<execute_script($javascript)> =item * C<evaluate_script($javascript)> =item * C<find($locator)> =item * C<all($locator)> =back =head1 AUTHOR NAKAGAWA Masaki E<lt>masaki@cpan.orgE<gt> =head1 LICENSE This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 SEE ALSO L<Brownie::Session> L<Capybara|http://github.com/jnicklas/capybara> =cut